2025-12-03T09:00:03.296 [DEBUG] [Thread-113891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:00:11.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:00:11.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:00:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 8, 59, 51), 7.46, 60.75, 0.0, 22.83, 13.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:00:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 08:59:51
2025-12-03T09:00:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:00:12.696 [DEBUG] [Thread-113892] [transport.py] [_log()] starting thread (client mode): 0xa51ce110
2025-12-03T09:00:12.697 [DEBUG] [Thread-113892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:00:12.718 [DEBUG] [Thread-113892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:00:12.718 [INFO] [Thread-113892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:00:12.721 [DEBUG] [Thread-113892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:00:12.721 [DEBUG] [Thread-113892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:00:12.721 [DEBUG] [Thread-113892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] client lang: <none>
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] server lang: <none>
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] kex follows: False
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:00:12.722 [DEBUG] [Thread-113892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:00:12.723 [DEBUG] [Thread-113892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:00:12.723 [DEBUG] [Thread-113892] [transport.py] [_log()] Compression: none
2025-12-03T09:00:12.723 [DEBUG] [Thread-113892] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:00:12.739 [DEBUG] [Thread-113892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:00:12.740 [DEBUG] [Thread-113892] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:00:12.740 [DEBUG] [Thread-113892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:00:12.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:00:12.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:00:12.742 [DEBUG] [Thread-113892] [transport.py] [_log()] userauth is OK
2025-12-03T09:00:12.742 [DEBUG] [Thread-113892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:00:12.742 [DEBUG] [Thread-113892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:00:12.742 [DEBUG] [Thread-113892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:00:12.742 [DEBUG] [Thread-113892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:00:12.766 [INFO] [Thread-113892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:00:12.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:00:13.654 [DEBUG] [Thread-113892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:00:13.654 [DEBUG] [Thread-113892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:00:13.654 [DEBUG] [Thread-113892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:00:13.695 [DEBUG] [Thread-113892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:00:13.695 [DEBUG] [Thread-113892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:00:13.698 [DEBUG] [Thread-113892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:00:13.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:00:13.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:00:13.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:00:13.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:00:13.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:00:13.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:00:13.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:00:13.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:00:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:00:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.291372 -999.00  +13.80  22.78     64   +7.20 1 1 1 1 1   888    0 7.55 52.29 ----- 19.6 22.8 167.8 28.9 20.6 -25.2 20.0 -24.3 18.8 -23.6 19.1 -24.9
2025-12-03T09:00:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:00:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:00:13.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.291372
2025-12-03T09:00:13.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:00:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:00:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:00:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:00:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:00:13.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T08:59:51', tmtdew=7.46, humidity=60.75, cloud=0.0, wind=22.83, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T06:59:34.541', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:00:13.724 [DEBUG] [Thread-113892] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:00:13.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:00:13.820 [DEBUG] [Thread-113895] [transport.py] [_log()] starting thread (client mode): 0xa51ce680
2025-12-03T09:00:13.820 [DEBUG] [Thread-113895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:00:13.835 [DEBUG] [Thread-113895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:00:13.835 [INFO] [Thread-113895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:00:13.843 [DEBUG] [Thread-113895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] client lang: <none>
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] server lang: <none>
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] kex follows: False
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] Compression: none
2025-12-03T09:00:13.844 [DEBUG] [Thread-113895] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:00:13.900 [DEBUG] [Thread-113895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:00:13.900 [DEBUG] [Thread-113895] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:00:13.901 [DEBUG] [Thread-113895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:00:13.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:00:13.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:00:13.956 [DEBUG] [Thread-113895] [transport.py] [_log()] userauth is OK
2025-12-03T09:00:13.956 [DEBUG] [Thread-113895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:00:13.957 [DEBUG] [Thread-113895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:00:13.957 [DEBUG] [Thread-113895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:00:13.957 [DEBUG] [Thread-113895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:00:13.977 [INFO] [Thread-113895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:00:13.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:00:13.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:00:14.811 [DEBUG] [Thread-113895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:00:14.811 [DEBUG] [Thread-113895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:00:14.859 [DEBUG] [Thread-113895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:00:14.859 [DEBUG] [Thread-113895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:00:14.868 [DEBUG] [Thread-113895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:00:14.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:00:14.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:00:14.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:00:14.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:00:14.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:00:14.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:00:14.904 [DEBUG] [Thread-113895] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:00:18.322 [DEBUG] [Thread-113897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:33.358 [DEBUG] [Thread-113898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:33.497 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:33.497 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:36.686 [DEBUG] [Thread-113899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:00:44.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:00:44.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:00:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:00:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 0, 23), 7.59, 60.25, 0.0, 23.93, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:00:45.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:00:23
2025-12-03T09:00:45.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:00:45.867 [DEBUG] [Thread-113900] [transport.py] [_log()] starting thread (client mode): 0xa27089d0
2025-12-03T09:00:45.867 [DEBUG] [Thread-113900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:00:45.888 [DEBUG] [Thread-113900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:00:45.888 [INFO] [Thread-113900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] client lang: <none>
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] server lang: <none>
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] kex follows: False
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] Compression: none
2025-12-03T09:00:45.892 [DEBUG] [Thread-113900] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:00:45.900 [DEBUG] [Thread-113900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:00:45.901 [DEBUG] [Thread-113900] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:00:45.901 [DEBUG] [Thread-113900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:00:45.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:00:45.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:00:45.903 [DEBUG] [Thread-113900] [transport.py] [_log()] userauth is OK
2025-12-03T09:00:45.903 [DEBUG] [Thread-113900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:00:45.903 [DEBUG] [Thread-113900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:00:45.903 [DEBUG] [Thread-113900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:00:45.903 [DEBUG] [Thread-113900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:00:45.916 [INFO] [Thread-113900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:00:45.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:00:46.565 [DEBUG] [Thread-113900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:00:46.565 [DEBUG] [Thread-113900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:00:46.566 [DEBUG] [Thread-113900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:00:46.606 [DEBUG] [Thread-113900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:00:46.606 [DEBUG] [Thread-113900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:00:46.609 [DEBUG] [Thread-113900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:00:46.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:00:46.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:00:46.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:00:46.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:00:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:00:46.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:00:46.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:00:46.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.291719 -999.00  +13.70  17.79     65   +7.40 1 2 1 1 1   888    0 7.69 53.28 ----- 17.8 17.8 163.8 25.2 20.6 -24.0 20.0 -23.3 18.7 -21.3 19.2 -23.1
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.291719
2025-12-03T09:00:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:00:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:00:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:00:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:00:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:00:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:00:23', tmtdew=7.59, humidity=60.25, cloud=0.0, wind=23.93, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:00:04.522', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:00:46.632 [DEBUG] [Thread-113900] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:00:46.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:00:46.730 [DEBUG] [Thread-113903] [transport.py] [_log()] starting thread (client mode): 0xa51cc880
2025-12-03T09:00:46.730 [DEBUG] [Thread-113903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:00:46.746 [DEBUG] [Thread-113903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:00:46.746 [INFO] [Thread-113903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:00:46.753 [DEBUG] [Thread-113903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:00:46.753 [DEBUG] [Thread-113903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:00:46.753 [DEBUG] [Thread-113903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] client lang: <none>
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] server lang: <none>
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] kex follows: False
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] Compression: none
2025-12-03T09:00:46.754 [DEBUG] [Thread-113903] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:00:46.819 [DEBUG] [Thread-113903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:00:46.820 [DEBUG] [Thread-113903] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:00:46.820 [DEBUG] [Thread-113903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:00:46.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:00:46.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:00:46.877 [DEBUG] [Thread-113903] [transport.py] [_log()] userauth is OK
2025-12-03T09:00:46.877 [DEBUG] [Thread-113903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:00:46.878 [DEBUG] [Thread-113903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:00:46.878 [DEBUG] [Thread-113903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:00:46.878 [DEBUG] [Thread-113903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:00:46.896 [INFO] [Thread-113903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:00:46.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:00:46.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:00:47.743 [DEBUG] [Thread-113903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:00:47.743 [DEBUG] [Thread-113903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:00:47.791 [DEBUG] [Thread-113903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:00:47.791 [DEBUG] [Thread-113903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:00:47.800 [DEBUG] [Thread-113903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:00:47.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:00:47.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:00:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:00:47.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:00:47.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:00:47.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:00:47.835 [DEBUG] [Thread-113903] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:00:48.384 [DEBUG] [Thread-113905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:03.426 [DEBUG] [Thread-113906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:17.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:01:17.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:01:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:01:18.453 [DEBUG] [Thread-113907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:18.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 0, 55), 7.36, 60.62, 0.0, 27.88, 13.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:01:18.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:00:55
2025-12-03T09:01:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:01:18.828 [DEBUG] [Thread-113908] [transport.py] [_log()] starting thread (client mode): 0xa2708400
2025-12-03T09:01:18.829 [DEBUG] [Thread-113908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:01:18.850 [DEBUG] [Thread-113908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:01:18.850 [INFO] [Thread-113908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] client lang: <none>
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] server lang: <none>
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] kex follows: False
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:01:18.853 [DEBUG] [Thread-113908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:01:18.854 [DEBUG] [Thread-113908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:01:18.854 [DEBUG] [Thread-113908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:01:18.854 [DEBUG] [Thread-113908] [transport.py] [_log()] Compression: none
2025-12-03T09:01:18.854 [DEBUG] [Thread-113908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:01:18.862 [DEBUG] [Thread-113908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:01:18.862 [DEBUG] [Thread-113908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:01:18.863 [DEBUG] [Thread-113908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:01:18.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:01:18.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:01:18.865 [DEBUG] [Thread-113908] [transport.py] [_log()] userauth is OK
2025-12-03T09:01:18.865 [DEBUG] [Thread-113908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:01:18.865 [DEBUG] [Thread-113908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:01:18.865 [DEBUG] [Thread-113908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:01:18.865 [DEBUG] [Thread-113908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:01:18.891 [INFO] [Thread-113908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:01:18.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:01:19.515 [DEBUG] [Thread-113908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:01:19.515 [DEBUG] [Thread-113908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:01:19.516 [DEBUG] [Thread-113908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:01:19.556 [DEBUG] [Thread-113908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:01:19.556 [DEBUG] [Thread-113908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:01:19.559 [DEBUG] [Thread-113908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:01:19.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:01:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:01:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:01:19.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:01:19.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:01:19.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:01:19.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:01:19.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.292066 -999.00  +13.80  15.92     65   +7.40 1 1 1 1 1   888    0 7.82 55.62 ----- 18.6 15.9 152.1 30.7 20.8 -25.4 19.9 -24.4 18.8 -22.5 19.3 -24.2
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.292066
2025-12-03T09:01:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:01:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:01:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:01:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:01:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:01:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:00:55', tmtdew=7.36, humidity=60.62, cloud=0.0, wind=27.88, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:00:34.502', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:01:19.584 [DEBUG] [Thread-113908] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:01:19.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:01:19.681 [DEBUG] [Thread-113911] [transport.py] [_log()] starting thread (client mode): 0xa270a740
2025-12-03T09:01:19.681 [DEBUG] [Thread-113911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:01:19.695 [DEBUG] [Thread-113911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:01:19.695 [INFO] [Thread-113911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] client lang: <none>
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] server lang: <none>
2025-12-03T09:01:19.703 [DEBUG] [Thread-113911] [transport.py] [_log()] kex follows: False
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] Compression: none
2025-12-03T09:01:19.704 [DEBUG] [Thread-113911] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:01:19.760 [DEBUG] [Thread-113911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:01:19.761 [DEBUG] [Thread-113911] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:01:19.761 [DEBUG] [Thread-113911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:01:19.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:01:19.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:01:19.816 [DEBUG] [Thread-113911] [transport.py] [_log()] userauth is OK
2025-12-03T09:01:19.817 [DEBUG] [Thread-113911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:01:19.817 [DEBUG] [Thread-113911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:01:19.817 [DEBUG] [Thread-113911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:01:19.817 [DEBUG] [Thread-113911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:01:19.838 [INFO] [Thread-113911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:01:19.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:01:19.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:01:20.663 [DEBUG] [Thread-113911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:01:20.663 [DEBUG] [Thread-113911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:01:20.710 [DEBUG] [Thread-113911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:01:20.711 [DEBUG] [Thread-113911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:01:20.719 [DEBUG] [Thread-113911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:01:20.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:01:20.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:01:20.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:01:20.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:01:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:01:20.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:01:20.752 [DEBUG] [Thread-113911] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:01:33.479 [DEBUG] [Thread-113913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:33.637 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:33.638 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:36.729 [DEBUG] [Thread-113914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:48.523 [DEBUG] [Thread-113915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:01:50.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:01:50.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:01:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:01:51.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 1, 27), 7.36, 60.67, 0.0, 28.78, 13.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:01:51.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:01:27
2025-12-03T09:01:51.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:01:51.692 [DEBUG] [Thread-113916] [transport.py] [_log()] starting thread (client mode): 0xa51cf880
2025-12-03T09:01:51.692 [DEBUG] [Thread-113916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:01:51.712 [DEBUG] [Thread-113916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:01:51.712 [INFO] [Thread-113916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:01:51.715 [DEBUG] [Thread-113916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] client lang: <none>
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] server lang: <none>
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] kex follows: False
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] Compression: none
2025-12-03T09:01:51.716 [DEBUG] [Thread-113916] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:01:51.732 [DEBUG] [Thread-113916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:01:51.733 [DEBUG] [Thread-113916] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:01:51.733 [DEBUG] [Thread-113916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:01:51.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:01:51.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:01:51.735 [DEBUG] [Thread-113916] [transport.py] [_log()] userauth is OK
2025-12-03T09:01:51.735 [DEBUG] [Thread-113916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:01:51.736 [DEBUG] [Thread-113916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:01:51.736 [DEBUG] [Thread-113916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:01:51.736 [DEBUG] [Thread-113916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:01:51.756 [INFO] [Thread-113916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:01:51.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:01:52.367 [DEBUG] [Thread-113916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:01:52.367 [DEBUG] [Thread-113916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:01:52.368 [DEBUG] [Thread-113916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:01:52.409 [DEBUG] [Thread-113916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:01:52.409 [DEBUG] [Thread-113916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:01:52.412 [DEBUG] [Thread-113916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:01:52.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:01:52.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:01:52.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:01:52.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:01:52.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:01:52.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:01:52.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.292413 -999.00  +13.90  18.12     65   +7.60 1 2 1 1 1   888    0 7.83 56.10 ----- 18.9 18.1 161.8 21.2 20.8 -25.2 20.1 -21.5 18.9 -22.2 19.4 -23.2
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:01:52.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.292413
2025-12-03T09:01:52.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:01:52.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:01:52.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:01:52.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:01:52.438 [DEBUG] [Thread-113916] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:01:52.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:01:52.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:01:27', tmtdew=7.36, humidity=60.67, cloud=0.0, wind=28.78, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:01:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:01:52.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:01:52.537 [DEBUG] [Thread-113919] [transport.py] [_log()] starting thread (client mode): 0xa51cfd90
2025-12-03T09:01:52.537 [DEBUG] [Thread-113919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:01:52.552 [DEBUG] [Thread-113919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:01:52.552 [INFO] [Thread-113919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:01:52.559 [DEBUG] [Thread-113919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] client lang: <none>
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] server lang: <none>
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] kex follows: False
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:01:52.560 [DEBUG] [Thread-113919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:01:52.561 [DEBUG] [Thread-113919] [transport.py] [_log()] Compression: none
2025-12-03T09:01:52.561 [DEBUG] [Thread-113919] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:01:52.617 [DEBUG] [Thread-113919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:01:52.618 [DEBUG] [Thread-113919] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:01:52.618 [DEBUG] [Thread-113919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:01:52.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:01:52.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:01:52.673 [DEBUG] [Thread-113919] [transport.py] [_log()] userauth is OK
2025-12-03T09:01:52.673 [DEBUG] [Thread-113919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:01:52.673 [DEBUG] [Thread-113919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:01:52.673 [DEBUG] [Thread-113919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:01:52.673 [DEBUG] [Thread-113919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:01:52.692 [INFO] [Thread-113919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:01:52.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:01:52.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:01:53.553 [DEBUG] [Thread-113919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:01:53.553 [DEBUG] [Thread-113919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:01:53.605 [DEBUG] [Thread-113919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:01:53.605 [DEBUG] [Thread-113919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:01:53.622 [DEBUG] [Thread-113919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:01:53.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:01:53.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:01:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:01:53.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:01:53.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:01:53.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:01:53.656 [DEBUG] [Thread-113919] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:02:03.552 [DEBUG] [Thread-113921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:18.597 [DEBUG] [Thread-113922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:02:23.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:02:23.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:02:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 1, 59), 7.34, 61.36, 0.0, 24.46, 13.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:02:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:01:59
2025-12-03T09:02:24.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:02:24.670 [DEBUG] [Thread-113923] [transport.py] [_log()] starting thread (client mode): 0xa51cd870
2025-12-03T09:02:24.672 [DEBUG] [Thread-113923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:02:24.691 [DEBUG] [Thread-113923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:02:24.691 [INFO] [Thread-113923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] client lang: <none>
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] server lang: <none>
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] kex follows: False
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] Compression: none
2025-12-03T09:02:24.694 [DEBUG] [Thread-113923] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:02:24.710 [DEBUG] [Thread-113923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:02:24.710 [DEBUG] [Thread-113923] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:02:24.710 [DEBUG] [Thread-113923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:02:24.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:02:24.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:02:24.711 [DEBUG] [Thread-113923] [transport.py] [_log()] userauth is OK
2025-12-03T09:02:24.711 [DEBUG] [Thread-113923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:02:24.711 [DEBUG] [Thread-113923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:02:24.711 [DEBUG] [Thread-113923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:02:24.711 [DEBUG] [Thread-113923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:02:24.720 [INFO] [Thread-113923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:02:24.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:02:25.328 [DEBUG] [Thread-113923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:02:25.328 [DEBUG] [Thread-113923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:02:25.328 [DEBUG] [Thread-113923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:02:25.368 [DEBUG] [Thread-113923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:02:25.368 [DEBUG] [Thread-113923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:02:25.371 [DEBUG] [Thread-113923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:02:25.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:02:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:02:25.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:02:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:02:25.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:02:25.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:02:25.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.292761 -999.00  +13.80  18.20     64   +7.30 1 2 1 1 1   888    0 7.74 53.73 ----- 14.4 18.2 152.6 27.6 20.9 -23.2 20.2 -21.4 18.9 -22.3 19.5 -23.7
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.292761
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:02:25.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:01:59', tmtdew=7.34, humidity=61.36, cloud=0.0, wind=24.46, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:01:34.550', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:02:25.389 [DEBUG] [Thread-113923] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:02:25.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:02:25.473 [DEBUG] [Thread-113926] [transport.py] [_log()] starting thread (client mode): 0xa2787f40
2025-12-03T09:02:25.473 [DEBUG] [Thread-113926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:02:25.488 [DEBUG] [Thread-113926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:02:25.488 [INFO] [Thread-113926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:02:25.495 [DEBUG] [Thread-113926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:02:25.495 [DEBUG] [Thread-113926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:02:25.495 [DEBUG] [Thread-113926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:02:25.495 [DEBUG] [Thread-113926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:25.495 [DEBUG] [Thread-113926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] client lang: <none>
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] server lang: <none>
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] kex follows: False
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] Compression: none
2025-12-03T09:02:25.496 [DEBUG] [Thread-113926] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:02:25.551 [DEBUG] [Thread-113926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:02:25.551 [DEBUG] [Thread-113926] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:02:25.552 [DEBUG] [Thread-113926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:02:25.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:02:25.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:02:25.608 [DEBUG] [Thread-113926] [transport.py] [_log()] userauth is OK
2025-12-03T09:02:25.608 [DEBUG] [Thread-113926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:02:25.608 [DEBUG] [Thread-113926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:02:25.608 [DEBUG] [Thread-113926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:02:25.608 [DEBUG] [Thread-113926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:02:25.622 [INFO] [Thread-113926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:02:25.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:02:25.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:02:26.473 [DEBUG] [Thread-113926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:02:26.473 [DEBUG] [Thread-113926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:02:26.520 [DEBUG] [Thread-113926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:02:26.520 [DEBUG] [Thread-113926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:02:26.528 [DEBUG] [Thread-113926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:02:26.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:02:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:02:26.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:02:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:02:26.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:02:26.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:02:26.564 [DEBUG] [Thread-113926] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:02:33.623 [DEBUG] [Thread-113928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:33.780 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:33.781 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:36.764 [DEBUG] [Thread-113929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:48.663 [DEBUG] [Thread-113930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:02:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:02:56.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:02:56.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:02:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 2, 31), 7.4, 61.11, 0.0, 27.37, 13.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:02:57.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:02:31
2025-12-03T09:02:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:02:57.535 [DEBUG] [Thread-113931] [transport.py] [_log()] starting thread (client mode): 0xa27e8d60
2025-12-03T09:02:57.535 [DEBUG] [Thread-113931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:02:57.555 [DEBUG] [Thread-113931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:02:57.555 [INFO] [Thread-113931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:02:57.558 [DEBUG] [Thread-113931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:02:57.558 [DEBUG] [Thread-113931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:02:57.558 [DEBUG] [Thread-113931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:02:57.558 [DEBUG] [Thread-113931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] client lang: <none>
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] server lang: <none>
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] kex follows: False
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] Compression: none
2025-12-03T09:02:57.559 [DEBUG] [Thread-113931] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:02:57.577 [DEBUG] [Thread-113931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:02:57.577 [DEBUG] [Thread-113931] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:02:57.578 [DEBUG] [Thread-113931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:02:57.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:02:57.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:02:57.620 [DEBUG] [Thread-113931] [transport.py] [_log()] userauth is OK
2025-12-03T09:02:57.621 [DEBUG] [Thread-113931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:02:57.621 [DEBUG] [Thread-113931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:02:57.621 [DEBUG] [Thread-113931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:02:57.621 [DEBUG] [Thread-113931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:02:57.653 [INFO] [Thread-113931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:02:57.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:02:58.280 [DEBUG] [Thread-113931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:02:58.281 [DEBUG] [Thread-113931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:02:58.281 [DEBUG] [Thread-113931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:02:58.322 [DEBUG] [Thread-113931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:02:58.322 [DEBUG] [Thread-113931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:02:58.325 [DEBUG] [Thread-113931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:02:58.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:02:58.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:02:58.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:02:58.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:02:58.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:02:58.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:02:58.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.293108 -999.00  +14.00  14.14     64   +7.30 1 2 1 1 1   888    0 7.80 57.04 ----- 21.9 14.1 167.4 32.0 20.9 -23.0 20.2 -21.4 19.1 -21.2 19.5 -24.2
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:02:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.293108
2025-12-03T09:02:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:02:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:02:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:02:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:02:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:02:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:02:31', tmtdew=7.4, humidity=61.11, cloud=0.0, wind=27.37, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:02:04.531', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:02:58.350 [DEBUG] [Thread-113931] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:02:58.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:02:58.449 [DEBUG] [Thread-113934] [transport.py] [_log()] starting thread (client mode): 0xa27eb040
2025-12-03T09:02:58.449 [DEBUG] [Thread-113934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:02:58.464 [DEBUG] [Thread-113934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:02:58.464 [INFO] [Thread-113934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:02:58.471 [DEBUG] [Thread-113934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] client lang: <none>
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] server lang: <none>
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] kex follows: False
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] Compression: none
2025-12-03T09:02:58.472 [DEBUG] [Thread-113934] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:02:58.528 [DEBUG] [Thread-113934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:02:58.528 [DEBUG] [Thread-113934] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:02:58.529 [DEBUG] [Thread-113934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:02:58.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:02:58.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:02:58.585 [DEBUG] [Thread-113934] [transport.py] [_log()] userauth is OK
2025-12-03T09:02:58.585 [DEBUG] [Thread-113934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:02:58.585 [DEBUG] [Thread-113934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:02:58.585 [DEBUG] [Thread-113934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:02:58.586 [DEBUG] [Thread-113934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:02:58.606 [INFO] [Thread-113934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:02:58.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:02:58.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:02:59.466 [DEBUG] [Thread-113934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:02:59.467 [DEBUG] [Thread-113934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:02:59.514 [DEBUG] [Thread-113934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:02:59.514 [DEBUG] [Thread-113934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:02:59.523 [DEBUG] [Thread-113934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:02:59.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:02:59.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:02:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:02:59.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:02:59.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:02:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:02:59.562 [DEBUG] [Thread-113934] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:03:03.693 [DEBUG] [Thread-113936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:18.723 [DEBUG] [Thread-113937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:29.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:03:29.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:03:29.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:03:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 3, 3), 7.42, 61.02, 0.0, 25.71, 13.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:03:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:03:03
2025-12-03T09:03:30.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:03:30.531 [DEBUG] [Thread-113938] [transport.py] [_log()] starting thread (client mode): 0xa27b2920
2025-12-03T09:03:30.531 [DEBUG] [Thread-113938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:03:30.553 [DEBUG] [Thread-113938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:03:30.553 [INFO] [Thread-113938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] client lang: <none>
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] server lang: <none>
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] kex follows: False
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] Compression: none
2025-12-03T09:03:30.556 [DEBUG] [Thread-113938] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:03:30.573 [DEBUG] [Thread-113938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:03:30.574 [DEBUG] [Thread-113938] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:03:30.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:03:30.575 [DEBUG] [Thread-113938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:03:30.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:03:30.577 [DEBUG] [Thread-113938] [transport.py] [_log()] userauth is OK
2025-12-03T09:03:30.577 [DEBUG] [Thread-113938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:03:30.577 [DEBUG] [Thread-113938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:03:30.577 [DEBUG] [Thread-113938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:03:30.577 [DEBUG] [Thread-113938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:03:30.601 [INFO] [Thread-113938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:03:30.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:03:31.241 [DEBUG] [Thread-113938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:03:31.241 [DEBUG] [Thread-113938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:03:31.241 [DEBUG] [Thread-113938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:03:31.282 [DEBUG] [Thread-113938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:03:31.282 [DEBUG] [Thread-113938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:03:31.285 [DEBUG] [Thread-113938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:03:31.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:03:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:03:31.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:03:31.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:03:31.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:03:31.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:03:31.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.293455 -999.00  +14.00  22.56     63   +7.10 1 2 1 1 1   888    0 7.99 60.89 ----- 21.7 22.6 140.4 28.8 21.0 -24.3 20.2 -21.6 19.0 -22.1 19.5 -24.9
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:03:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.293455
2025-12-03T09:03:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:03:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:03:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:03:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:03:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:03:31.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:03:03', tmtdew=7.42, humidity=61.02, cloud=0.0, wind=25.71, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:02:34.512', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:03:31.309 [DEBUG] [Thread-113938] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:03:31.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:03:31.408 [DEBUG] [Thread-113941] [transport.py] [_log()] starting thread (client mode): 0xa27b2cb0
2025-12-03T09:03:31.408 [DEBUG] [Thread-113941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:03:31.423 [DEBUG] [Thread-113941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:03:31.423 [INFO] [Thread-113941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:03:31.431 [DEBUG] [Thread-113941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] client lang: <none>
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] server lang: <none>
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] kex follows: False
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:03:31.432 [DEBUG] [Thread-113941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:03:31.433 [DEBUG] [Thread-113941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:03:31.433 [DEBUG] [Thread-113941] [transport.py] [_log()] Compression: none
2025-12-03T09:03:31.433 [DEBUG] [Thread-113941] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:03:31.493 [DEBUG] [Thread-113941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:03:31.494 [DEBUG] [Thread-113941] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:03:31.494 [DEBUG] [Thread-113941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:03:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:03:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:03:31.549 [DEBUG] [Thread-113941] [transport.py] [_log()] userauth is OK
2025-12-03T09:03:31.549 [DEBUG] [Thread-113941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:03:31.549 [DEBUG] [Thread-113941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:03:31.549 [DEBUG] [Thread-113941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:03:31.549 [DEBUG] [Thread-113941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:03:31.568 [INFO] [Thread-113941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:03:31.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:03:31.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:03:32.410 [DEBUG] [Thread-113941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:03:32.411 [DEBUG] [Thread-113941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:03:32.459 [DEBUG] [Thread-113941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:03:32.459 [DEBUG] [Thread-113941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:03:32.468 [DEBUG] [Thread-113941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:03:32.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:03:32.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:03:32.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:03:32.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:03:32.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:03:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:03:32.506 [DEBUG] [Thread-113941] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:03:33.749 [DEBUG] [Thread-113943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:33.920 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:33.921 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:36.799 [DEBUG] [Thread-113944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:03:48.794 [DEBUG] [Thread-113945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:04:02.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:04:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:04:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 3, 36), 8.14, 58.24, 0.0, 27.65, 13.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:04:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:03:36
2025-12-03T09:04:03.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:04:03.476 [DEBUG] [Thread-113946] [transport.py] [_log()] starting thread (client mode): 0xa2784460
2025-12-03T09:04:03.476 [DEBUG] [Thread-113946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:04:03.497 [DEBUG] [Thread-113946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:04:03.497 [INFO] [Thread-113946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:04:03.500 [DEBUG] [Thread-113946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] client lang: <none>
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] server lang: <none>
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] kex follows: False
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:04:03.501 [DEBUG] [Thread-113946] [transport.py] [_log()] Compression: none
2025-12-03T09:04:03.502 [DEBUG] [Thread-113946] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:04:03.518 [DEBUG] [Thread-113946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:04:03.519 [DEBUG] [Thread-113946] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:04:03.519 [DEBUG] [Thread-113946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:04:03.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:04:03.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:04:03.521 [DEBUG] [Thread-113946] [transport.py] [_log()] userauth is OK
2025-12-03T09:04:03.522 [DEBUG] [Thread-113946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:04:03.522 [DEBUG] [Thread-113946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:04:03.522 [DEBUG] [Thread-113946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:04:03.522 [DEBUG] [Thread-113946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:04:03.557 [INFO] [Thread-113946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:04:03.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:04:03.824 [DEBUG] [Thread-113948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:04.171 [DEBUG] [Thread-113946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:04:04.171 [DEBUG] [Thread-113946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:04:04.172 [DEBUG] [Thread-113946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:04:04.212 [DEBUG] [Thread-113946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:04:04.212 [DEBUG] [Thread-113946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:04:04.215 [DEBUG] [Thread-113946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:04:04.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:04:04.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:04:04.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:04:04.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:04:04.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:04:04.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:04:04.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:04:04.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:04:04.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:04:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.294149 -999.00  +14.00  23.80     63   +7.20 1 1 1 1 1   888    0 8.08 61.70 ----- 22.9 23.8 166.4 26.8 20.9 -25.8 20.1 -23.2 18.9 -24.7 19.4 -25.8
2025-12-03T09:04:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:04:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:04:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.294149
2025-12-03T09:04:04.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:04:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:04:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:04:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:04:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:04:04.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:03:36', tmtdew=8.14, humidity=58.24, cloud=0.0, wind=27.65, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:03:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:04:04.242 [DEBUG] [Thread-113946] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:04:04.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:04:04.343 [DEBUG] [Thread-113950] [transport.py] [_log()] starting thread (client mode): 0xa271f880
2025-12-03T09:04:04.343 [DEBUG] [Thread-113950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:04:04.357 [DEBUG] [Thread-113950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:04:04.357 [INFO] [Thread-113950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] client lang: <none>
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] server lang: <none>
2025-12-03T09:04:04.365 [DEBUG] [Thread-113950] [transport.py] [_log()] kex follows: False
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] Compression: none
2025-12-03T09:04:04.366 [DEBUG] [Thread-113950] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:04:04.425 [DEBUG] [Thread-113950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:04:04.426 [DEBUG] [Thread-113950] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:04:04.426 [DEBUG] [Thread-113950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:04:04.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:04:04.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:04:04.481 [DEBUG] [Thread-113950] [transport.py] [_log()] userauth is OK
2025-12-03T09:04:04.481 [DEBUG] [Thread-113950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:04:04.481 [DEBUG] [Thread-113950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:04:04.481 [DEBUG] [Thread-113950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:04:04.482 [DEBUG] [Thread-113950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:04:04.501 [INFO] [Thread-113950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:04:04.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:04:04.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:04:05.421 [DEBUG] [Thread-113950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:04:05.421 [DEBUG] [Thread-113950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:04:05.469 [DEBUG] [Thread-113950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:04:05.469 [DEBUG] [Thread-113950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:04:05.477 [DEBUG] [Thread-113950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:04:05.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:04:05.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:04:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:04:05.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:04:05.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:04:05.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:04:05.511 [DEBUG] [Thread-113950] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:04:18.853 [DEBUG] [Thread-113952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:33.891 [DEBUG] [Thread-113953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:34.060 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:34.061 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:35.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:04:35.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:04:35.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:04:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 4, 8), 8.07, 58.47, 0.0, 26.26, 13.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:04:36.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:04:08
2025-12-03T09:04:36.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:04:36.500 [DEBUG] [Thread-113954] [transport.py] [_log()] starting thread (client mode): 0xa2708220
2025-12-03T09:04:36.500 [DEBUG] [Thread-113954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:04:36.521 [DEBUG] [Thread-113954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:04:36.521 [INFO] [Thread-113954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:04:36.524 [DEBUG] [Thread-113954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] client lang: <none>
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] server lang: <none>
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] kex follows: False
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:04:36.525 [DEBUG] [Thread-113954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:04:36.526 [DEBUG] [Thread-113954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:04:36.526 [DEBUG] [Thread-113954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:04:36.526 [DEBUG] [Thread-113954] [transport.py] [_log()] Compression: none
2025-12-03T09:04:36.526 [DEBUG] [Thread-113954] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:04:36.542 [DEBUG] [Thread-113954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:04:36.542 [DEBUG] [Thread-113954] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:04:36.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:04:36.543 [DEBUG] [Thread-113954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:04:36.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:04:36.545 [DEBUG] [Thread-113954] [transport.py] [_log()] userauth is OK
2025-12-03T09:04:36.545 [DEBUG] [Thread-113954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:04:36.546 [DEBUG] [Thread-113954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:04:36.546 [DEBUG] [Thread-113954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:04:36.546 [DEBUG] [Thread-113954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:04:36.569 [INFO] [Thread-113954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:04:36.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:04:36.864 [DEBUG] [Thread-113956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:04:37.209 [DEBUG] [Thread-113954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:04:37.209 [DEBUG] [Thread-113954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:04:37.209 [DEBUG] [Thread-113954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:04:37.250 [DEBUG] [Thread-113954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:04:37.250 [DEBUG] [Thread-113954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:04:37.253 [DEBUG] [Thread-113954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:04:37.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:04:37.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:04:37.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:04:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:04:37.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:04:37.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:04:37.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:04:37.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.294497 -999.00  +13.70  15.72     63   +6.80 1 1 1 1 1   888    0 8.01 61.79 ----- 15.3 15.7 152.2 23.7 20.7 -26.3 20.0 -24.0 18.9 -24.7 19.4 -25.7
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.294497
2025-12-03T09:04:37.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:04:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:04:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:04:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:04:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:04:37.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:04:08', tmtdew=8.07, humidity=58.47, cloud=0.0, wind=26.26, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:04:04.541', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:04:37.279 [DEBUG] [Thread-113954] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:04:37.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:04:37.372 [DEBUG] [Thread-113958] [transport.py] [_log()] starting thread (client mode): 0xa27e9240
2025-12-03T09:04:37.372 [DEBUG] [Thread-113958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:04:37.386 [DEBUG] [Thread-113958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:04:37.386 [INFO] [Thread-113958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] client lang: <none>
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] server lang: <none>
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] kex follows: False
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] Compression: none
2025-12-03T09:04:37.395 [DEBUG] [Thread-113958] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:04:37.455 [DEBUG] [Thread-113958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:04:37.455 [DEBUG] [Thread-113958] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:04:37.455 [DEBUG] [Thread-113958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:04:37.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:04:37.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:04:37.514 [DEBUG] [Thread-113958] [transport.py] [_log()] userauth is OK
2025-12-03T09:04:37.514 [DEBUG] [Thread-113958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:04:37.514 [DEBUG] [Thread-113958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:04:37.514 [DEBUG] [Thread-113958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:04:37.514 [DEBUG] [Thread-113958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:04:37.532 [INFO] [Thread-113958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:04:37.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:04:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:04:38.350 [DEBUG] [Thread-113958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:04:38.350 [DEBUG] [Thread-113958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:04:38.398 [DEBUG] [Thread-113958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:04:38.398 [DEBUG] [Thread-113958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:04:38.407 [DEBUG] [Thread-113958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:04:38.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:04:38.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:04:38.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:04:38.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:04:38.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:04:38.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:04:38.443 [DEBUG] [Thread-113958] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:04:48.925 [DEBUG] [Thread-113960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:03.971 [DEBUG] [Thread-113961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:08.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:05:08.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:05:08.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:05:09.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 4, 40), 7.72, 59.71, 0.0, 20.31, 13.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:05:09.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:04:40
2025-12-03T09:05:09.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:05:09.426 [DEBUG] [Thread-113962] [transport.py] [_log()] starting thread (client mode): 0xa27eab30
2025-12-03T09:05:09.426 [DEBUG] [Thread-113962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:05:09.446 [DEBUG] [Thread-113962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:05:09.446 [INFO] [Thread-113962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] client lang: <none>
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] server lang: <none>
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] kex follows: False
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] Compression: none
2025-12-03T09:05:09.449 [DEBUG] [Thread-113962] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:05:09.458 [DEBUG] [Thread-113962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:05:09.459 [DEBUG] [Thread-113962] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:05:09.459 [DEBUG] [Thread-113962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:05:09.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:05:09.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:05:09.461 [DEBUG] [Thread-113962] [transport.py] [_log()] userauth is OK
2025-12-03T09:05:09.461 [DEBUG] [Thread-113962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:05:09.461 [DEBUG] [Thread-113962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:05:09.461 [DEBUG] [Thread-113962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:05:09.461 [DEBUG] [Thread-113962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:05:09.494 [INFO] [Thread-113962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:05:09.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:05:10.183 [DEBUG] [Thread-113962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:05:10.183 [DEBUG] [Thread-113962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:05:10.183 [DEBUG] [Thread-113962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:05:10.225 [DEBUG] [Thread-113962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:05:10.225 [DEBUG] [Thread-113962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:05:10.227 [DEBUG] [Thread-113962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:05:10.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:05:10.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:05:10.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:05:10.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:05:10.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:05:10.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:05:10.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.294844 -999.00  +13.80  16.44     64   +7.20 1 1 1 1 1   888    0 8.01 58.17 ----- 14.3 16.4 149.4 23.6 20.5 -26.0 19.9 -23.8 18.8 -23.7 19.4 -25.0
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.294844
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:05:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:04:40', tmtdew=7.72, humidity=59.71, cloud=0.0, wind=20.31, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:04:34.522', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:05:10.247 [DEBUG] [Thread-113962] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:05:10.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:05:10.331 [DEBUG] [Thread-113965] [transport.py] [_log()] starting thread (client mode): 0xa27e8580
2025-12-03T09:05:10.331 [DEBUG] [Thread-113965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:05:10.348 [DEBUG] [Thread-113965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:05:10.348 [INFO] [Thread-113965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] client lang: <none>
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] server lang: <none>
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] kex follows: False
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] Compression: none
2025-12-03T09:05:10.356 [DEBUG] [Thread-113965] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:05:10.412 [DEBUG] [Thread-113965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:05:10.412 [DEBUG] [Thread-113965] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:05:10.413 [DEBUG] [Thread-113965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:05:10.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:05:10.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:05:10.470 [DEBUG] [Thread-113965] [transport.py] [_log()] userauth is OK
2025-12-03T09:05:10.470 [DEBUG] [Thread-113965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:05:10.470 [DEBUG] [Thread-113965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:05:10.470 [DEBUG] [Thread-113965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:05:10.470 [DEBUG] [Thread-113965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:05:10.484 [INFO] [Thread-113965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:05:10.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:05:10.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:05:11.328 [DEBUG] [Thread-113965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:05:11.328 [DEBUG] [Thread-113965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:05:11.376 [DEBUG] [Thread-113965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:05:11.376 [DEBUG] [Thread-113965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:05:11.385 [DEBUG] [Thread-113965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:05:11.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:05:11.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:05:11.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:05:11.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:05:11.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:05:11.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:05:11.421 [DEBUG] [Thread-113965] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:05:19.001 [DEBUG] [Thread-113967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:34.048 [DEBUG] [Thread-113968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:34.201 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:34.203 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:36.901 [DEBUG] [Thread-113969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:05:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:05:41.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:05:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:05:42.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 5, 12), 7.65, 59.99, 0.0, 21.14, 13.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:05:42.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:05:12
2025-12-03T09:05:42.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:05:42.404 [DEBUG] [Thread-113970] [transport.py] [_log()] starting thread (client mode): 0xa270bb20
2025-12-03T09:05:42.404 [DEBUG] [Thread-113970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:05:42.424 [DEBUG] [Thread-113970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:05:42.424 [INFO] [Thread-113970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] client lang: <none>
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] server lang: <none>
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] kex follows: False
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] Compression: none
2025-12-03T09:05:42.427 [DEBUG] [Thread-113970] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:05:42.443 [DEBUG] [Thread-113970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:05:42.443 [DEBUG] [Thread-113970] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:05:42.443 [DEBUG] [Thread-113970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:05:42.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:05:42.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:05:42.444 [DEBUG] [Thread-113970] [transport.py] [_log()] userauth is OK
2025-12-03T09:05:42.444 [DEBUG] [Thread-113970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:05:42.444 [DEBUG] [Thread-113970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:05:42.444 [DEBUG] [Thread-113970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:05:42.444 [DEBUG] [Thread-113970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:05:42.459 [INFO] [Thread-113970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:05:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:05:43.111 [DEBUG] [Thread-113970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:05:43.111 [DEBUG] [Thread-113970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:05:43.111 [DEBUG] [Thread-113970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:05:43.152 [DEBUG] [Thread-113970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:05:43.152 [DEBUG] [Thread-113970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:05:43.155 [DEBUG] [Thread-113970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:05:43.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:05:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:05:43.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:05:43.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:05:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:05:43.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:05:43.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:05:43.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:05:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:05:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.295191 -999.00  +14.20  18.57     65   +7.70 1 1 1 1 1   888    0 7.96 56.91 ----- 20.2 18.6 135.2 28.4 20.5 -26.0 19.8 -24.1 18.9 -24.4 19.2 -25.8
2025-12-03T09:05:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:05:43.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.295191
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:05:43.173 [DEBUG] [Thread-113970] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:05:43.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:05:12', tmtdew=7.65, humidity=59.99, cloud=0.0, wind=21.14, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:05:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:05:43.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:05:43.262 [DEBUG] [Thread-113973] [transport.py] [_log()] starting thread (client mode): 0xa271f130
2025-12-03T09:05:43.262 [DEBUG] [Thread-113973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:05:43.277 [DEBUG] [Thread-113973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:05:43.277 [INFO] [Thread-113973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] client lang: <none>
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] server lang: <none>
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] kex follows: False
2025-12-03T09:05:43.284 [DEBUG] [Thread-113973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] Compression: none
2025-12-03T09:05:43.285 [DEBUG] [Thread-113973] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:05:43.342 [DEBUG] [Thread-113973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:05:43.342 [DEBUG] [Thread-113973] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:05:43.343 [DEBUG] [Thread-113973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:05:43.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:05:43.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:05:43.398 [DEBUG] [Thread-113973] [transport.py] [_log()] userauth is OK
2025-12-03T09:05:43.399 [DEBUG] [Thread-113973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:05:43.399 [DEBUG] [Thread-113973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:05:43.399 [DEBUG] [Thread-113973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:05:43.399 [DEBUG] [Thread-113973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:05:43.421 [INFO] [Thread-113973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:05:43.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:05:43.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:05:44.253 [DEBUG] [Thread-113973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:05:44.253 [DEBUG] [Thread-113973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:05:44.301 [DEBUG] [Thread-113973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:05:44.301 [DEBUG] [Thread-113973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:05:44.310 [DEBUG] [Thread-113973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:05:44.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:05:44.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:05:44.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:05:44.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:05:44.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:05:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:05:44.344 [DEBUG] [Thread-113973] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:05:49.075 [DEBUG] [Thread-113975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:04.119 [DEBUG] [Thread-113976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:14.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:06:14.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:06:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:06:15.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 5, 44), 7.55, 60.4, 0.0, 25.92, 13.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:06:15.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:05:44
2025-12-03T09:06:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:06:15.334 [DEBUG] [Thread-113977] [transport.py] [_log()] starting thread (client mode): 0xa51cd4e0
2025-12-03T09:06:15.334 [DEBUG] [Thread-113977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:06:15.354 [DEBUG] [Thread-113977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:06:15.354 [INFO] [Thread-113977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:06:15.357 [DEBUG] [Thread-113977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] client lang: <none>
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] server lang: <none>
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] kex follows: False
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:06:15.358 [DEBUG] [Thread-113977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:06:15.359 [DEBUG] [Thread-113977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:06:15.359 [DEBUG] [Thread-113977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:06:15.359 [DEBUG] [Thread-113977] [transport.py] [_log()] Compression: none
2025-12-03T09:06:15.359 [DEBUG] [Thread-113977] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:06:15.376 [DEBUG] [Thread-113977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:06:15.377 [DEBUG] [Thread-113977] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:06:15.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:06:15.378 [DEBUG] [Thread-113977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:06:15.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:06:15.380 [DEBUG] [Thread-113977] [transport.py] [_log()] userauth is OK
2025-12-03T09:06:15.380 [DEBUG] [Thread-113977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:06:15.380 [DEBUG] [Thread-113977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:06:15.380 [DEBUG] [Thread-113977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:06:15.381 [DEBUG] [Thread-113977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:06:15.397 [INFO] [Thread-113977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:06:15.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:06:16.074 [DEBUG] [Thread-113977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:06:16.074 [DEBUG] [Thread-113977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:06:16.074 [DEBUG] [Thread-113977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:06:16.115 [DEBUG] [Thread-113977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:06:16.115 [DEBUG] [Thread-113977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:06:16.117 [DEBUG] [Thread-113977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:06:16.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:06:16.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:06:16.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:06:16.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:06:16.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:06:16.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:06:16.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.295538 -999.00  +14.30  23.78     63   +7.50 1 1 1 1 1   888    0 7.96 55.76 ----- 22.7 23.8 162.0 32.0 20.3 -26.5 19.8 -24.4 18.8 -23.8 19.1 -27.8
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:06:16.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.295538
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:06:16.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:05:44', tmtdew=7.55, humidity=60.4, cloud=0.0, wind=25.92, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:05:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:06:16.136 [DEBUG] [Thread-113977] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:06:16.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:06:16.220 [DEBUG] [Thread-113980] [transport.py] [_log()] starting thread (client mode): 0xa271f3d0
2025-12-03T09:06:16.220 [DEBUG] [Thread-113980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:06:16.239 [DEBUG] [Thread-113980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:06:16.239 [INFO] [Thread-113980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] client lang: <none>
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] server lang: <none>
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] kex follows: False
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] Compression: none
2025-12-03T09:06:16.247 [DEBUG] [Thread-113980] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:06:16.303 [DEBUG] [Thread-113980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:06:16.304 [DEBUG] [Thread-113980] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:06:16.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:06:16.304 [DEBUG] [Thread-113980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:06:16.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:06:16.361 [DEBUG] [Thread-113980] [transport.py] [_log()] userauth is OK
2025-12-03T09:06:16.361 [DEBUG] [Thread-113980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:06:16.361 [DEBUG] [Thread-113980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:06:16.361 [DEBUG] [Thread-113980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:06:16.361 [DEBUG] [Thread-113980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:06:16.379 [INFO] [Thread-113980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:06:16.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:06:16.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:06:17.274 [DEBUG] [Thread-113980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:06:17.274 [DEBUG] [Thread-113980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:06:17.325 [DEBUG] [Thread-113980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:06:17.325 [DEBUG] [Thread-113980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:06:17.333 [DEBUG] [Thread-113980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:06:17.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:06:17.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:06:17.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:06:17.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:06:17.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:06:17.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:06:17.365 [DEBUG] [Thread-113980] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:06:19.146 [DEBUG] [Thread-113982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:34.180 [DEBUG] [Thread-113983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:34.343 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:34.344 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:36.971 [DEBUG] [Thread-113984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:06:47.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:06:47.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:06:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 6, 16), 7.58, 60.32, 0.0, 26.87, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:06:48.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:06:16
2025-12-03T09:06:48.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:06:48.347 [DEBUG] [Thread-113985] [transport.py] [_log()] starting thread (client mode): 0xa27b1a50
2025-12-03T09:06:48.347 [DEBUG] [Thread-113985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:06:48.369 [DEBUG] [Thread-113985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:06:48.369 [INFO] [Thread-113985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] client lang: <none>
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] server lang: <none>
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] kex follows: False
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] Compression: none
2025-12-03T09:06:48.372 [DEBUG] [Thread-113985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:06:48.387 [DEBUG] [Thread-113985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:06:48.387 [DEBUG] [Thread-113985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:06:48.387 [DEBUG] [Thread-113985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:06:48.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:06:48.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:06:48.388 [DEBUG] [Thread-113985] [transport.py] [_log()] userauth is OK
2025-12-03T09:06:48.388 [DEBUG] [Thread-113985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:06:48.388 [DEBUG] [Thread-113985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:06:48.388 [DEBUG] [Thread-113985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:06:48.388 [DEBUG] [Thread-113985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:06:48.403 [INFO] [Thread-113985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:06:48.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:06:49.018 [DEBUG] [Thread-113985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:06:49.018 [DEBUG] [Thread-113985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:06:49.018 [DEBUG] [Thread-113985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:06:49.059 [DEBUG] [Thread-113985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:06:49.059 [DEBUG] [Thread-113985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:06:49.061 [DEBUG] [Thread-113985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:06:49.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:06:49.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:06:49.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:06:49.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:06:49.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:06:49.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:06:49.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:06:49.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:06:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.295885 -999.00  +13.80  18.44     64   +7.20 1 1 1 1 1   888    0 8.17 60.64 ----- 22.2 18.4 170.8 28.6 19.9 -28.6 19.3 -25.5 18.4 -26.4 18.8 -27.3
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.295885
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:06:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:06:16', tmtdew=7.58, humidity=60.32, cloud=0.0, wind=26.87, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:06:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:06:49.081 [DEBUG] [Thread-113985] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:06:49.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:06:49.176 [DEBUG] [Thread-113988] [transport.py] [_log()] starting thread (client mode): 0xa2708430
2025-12-03T09:06:49.176 [DEBUG] [Thread-113988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:06:49.191 [DEBUG] [Thread-113988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:06:49.191 [INFO] [Thread-113988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] client lang: <none>
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] server lang: <none>
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] kex follows: False
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:06:49.199 [DEBUG] [Thread-113988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:06:49.200 [DEBUG] [Thread-113988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:06:49.200 [DEBUG] [Thread-113988] [transport.py] [_log()] Compression: none
2025-12-03T09:06:49.200 [DEBUG] [Thread-113988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:06:49.207 [DEBUG] [Thread-113990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:06:49.260 [DEBUG] [Thread-113988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:06:49.261 [DEBUG] [Thread-113988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:06:49.261 [DEBUG] [Thread-113988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:06:49.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:06:49.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:06:49.317 [DEBUG] [Thread-113988] [transport.py] [_log()] userauth is OK
2025-12-03T09:06:49.317 [DEBUG] [Thread-113988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:06:49.317 [DEBUG] [Thread-113988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:06:49.317 [DEBUG] [Thread-113988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:06:49.317 [DEBUG] [Thread-113988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:06:49.335 [INFO] [Thread-113988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:06:49.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:06:49.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:06:50.231 [DEBUG] [Thread-113988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:06:50.232 [DEBUG] [Thread-113988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:06:50.279 [DEBUG] [Thread-113988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:06:50.279 [DEBUG] [Thread-113988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:06:50.288 [DEBUG] [Thread-113988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:06:50.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:06:50.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:06:50.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:06:50.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:06:50.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:06:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:06:50.320 [DEBUG] [Thread-113988] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:07:04.241 [DEBUG] [Thread-113991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:19.274 [DEBUG] [Thread-113992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:20.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:07:20.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:07:20.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:07:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 6, 48), 7.55, 60.24, 0.0, 27.72, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:07:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:06:48
2025-12-03T09:07:21.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:07:21.348 [DEBUG] [Thread-113993] [transport.py] [_log()] starting thread (client mode): 0xa2784070
2025-12-03T09:07:21.348 [DEBUG] [Thread-113993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:07:21.367 [DEBUG] [Thread-113993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:07:21.367 [INFO] [Thread-113993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:21.370 [DEBUG] [Thread-113993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] client lang: <none>
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] server lang: <none>
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] kex follows: False
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] Compression: none
2025-12-03T09:07:21.371 [DEBUG] [Thread-113993] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:07:21.386 [DEBUG] [Thread-113993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:07:21.387 [DEBUG] [Thread-113993] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:07:21.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:07:21.387 [DEBUG] [Thread-113993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:07:21.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:07:21.388 [DEBUG] [Thread-113993] [transport.py] [_log()] userauth is OK
2025-12-03T09:07:21.388 [DEBUG] [Thread-113993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:07:21.388 [DEBUG] [Thread-113993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:07:21.388 [DEBUG] [Thread-113993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:07:21.388 [DEBUG] [Thread-113993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:07:21.406 [INFO] [Thread-113993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:07:21.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:07:22.056 [DEBUG] [Thread-113993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:07:22.057 [DEBUG] [Thread-113993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:07:22.057 [DEBUG] [Thread-113993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:07:22.097 [DEBUG] [Thread-113993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:07:22.097 [DEBUG] [Thread-113993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:07:22.099 [DEBUG] [Thread-113993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:07:22.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:07:22.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:07:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:07:22.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:07:22.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:07:22.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:07:22.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:07:22.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.296233 -999.00  +13.70  25.37     64   +7.20 1 1 1 1 1   888    0 7.89 54.47 ----- 21.2 25.4 169.4 26.0 19.6 -28.6 18.7 -28.7 18.2 -26.4 18.7 -27.3
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.296233
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:07:22.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:06:48', tmtdew=7.55, humidity=60.24, cloud=0.0, wind=27.72, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:06:34.531', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:07:22.118 [DEBUG] [Thread-113993] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:07:22.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:07:22.203 [DEBUG] [Thread-113996] [transport.py] [_log()] starting thread (client mode): 0xa271c820
2025-12-03T09:07:22.203 [DEBUG] [Thread-113996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:07:22.217 [DEBUG] [Thread-113996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:07:22.218 [INFO] [Thread-113996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] client lang: <none>
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] server lang: <none>
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] kex follows: False
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:07:22.225 [DEBUG] [Thread-113996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:07:22.226 [DEBUG] [Thread-113996] [transport.py] [_log()] Compression: none
2025-12-03T09:07:22.226 [DEBUG] [Thread-113996] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:07:22.280 [DEBUG] [Thread-113996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:07:22.280 [DEBUG] [Thread-113996] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:07:22.280 [DEBUG] [Thread-113996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:07:22.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:07:22.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:07:22.337 [DEBUG] [Thread-113996] [transport.py] [_log()] userauth is OK
2025-12-03T09:07:22.337 [DEBUG] [Thread-113996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:07:22.337 [DEBUG] [Thread-113996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:07:22.337 [DEBUG] [Thread-113996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:07:22.337 [DEBUG] [Thread-113996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:07:22.352 [INFO] [Thread-113996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:07:22.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:07:22.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:07:23.267 [DEBUG] [Thread-113996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:07:23.267 [DEBUG] [Thread-113996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:07:23.315 [DEBUG] [Thread-113996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:07:23.315 [DEBUG] [Thread-113996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:07:23.324 [DEBUG] [Thread-113996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:07:23.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:07:23.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:07:23.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:07:23.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:07:23.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:07:23.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:07:23.358 [DEBUG] [Thread-113996] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:07:34.302 [DEBUG] [Thread-113998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:34.483 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:34.484 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:36.999 [DEBUG] [Thread-113999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:49.339 [DEBUG] [Thread-114000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:07:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:07:53.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:07:53.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:07:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 7, 20), 7.6, 60.04, 0.0, 27.9, 13.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:07:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:07:20
2025-12-03T09:07:54.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:07:54.394 [DEBUG] [Thread-114001] [transport.py] [_log()] starting thread (client mode): 0xa27b3d30
2025-12-03T09:07:54.394 [DEBUG] [Thread-114001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:07:54.414 [DEBUG] [Thread-114001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:07:54.414 [INFO] [Thread-114001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:07:54.417 [DEBUG] [Thread-114001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:07:54.417 [DEBUG] [Thread-114001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] client lang: <none>
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] server lang: <none>
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] kex follows: False
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] Compression: none
2025-12-03T09:07:54.418 [DEBUG] [Thread-114001] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:07:54.432 [DEBUG] [Thread-114001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:07:54.432 [DEBUG] [Thread-114001] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:07:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:07:54.432 [DEBUG] [Thread-114001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:07:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:07:54.433 [DEBUG] [Thread-114001] [transport.py] [_log()] userauth is OK
2025-12-03T09:07:54.433 [DEBUG] [Thread-114001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:07:54.433 [DEBUG] [Thread-114001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:07:54.433 [DEBUG] [Thread-114001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:07:54.433 [DEBUG] [Thread-114001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:07:54.442 [INFO] [Thread-114001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:07:54.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:07:55.061 [DEBUG] [Thread-114001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:07:55.061 [DEBUG] [Thread-114001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:07:55.062 [DEBUG] [Thread-114001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:07:55.102 [DEBUG] [Thread-114001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:07:55.102 [DEBUG] [Thread-114001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:07:55.104 [DEBUG] [Thread-114001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:07:55.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:07:55.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:07:55.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:07:55.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:07:55.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:07:55.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:07:55.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:07:55.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.296580 -999.00  +13.50  26.22     65   +7.10 1 1 1 1 1   888    0 7.85 51.54 ----- 22.3 26.2 173.4 29.2 19.4 -27.4 18.7 -25.5 18.1 -26.1 18.5 -27.3
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.296580
2025-12-03T09:07:55.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:07:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:07:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:07:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:07:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:07:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:07:20', tmtdew=7.6, humidity=60.04, cloud=0.0, wind=27.9, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:07:04.512', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:07:55.132 [DEBUG] [Thread-114001] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:07:55.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:07:55.239 [DEBUG] [Thread-114004] [transport.py] [_log()] starting thread (client mode): 0xa27b0430
2025-12-03T09:07:55.239 [DEBUG] [Thread-114004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:07:55.254 [DEBUG] [Thread-114004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:07:55.255 [INFO] [Thread-114004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:07:55.262 [DEBUG] [Thread-114004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] client lang: <none>
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] server lang: <none>
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] kex follows: False
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] Compression: none
2025-12-03T09:07:55.263 [DEBUG] [Thread-114004] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:07:55.321 [DEBUG] [Thread-114004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:07:55.322 [DEBUG] [Thread-114004] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:07:55.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:07:55.322 [DEBUG] [Thread-114004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:07:55.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:07:55.377 [DEBUG] [Thread-114004] [transport.py] [_log()] userauth is OK
2025-12-03T09:07:55.378 [DEBUG] [Thread-114004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:07:55.378 [DEBUG] [Thread-114004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:07:55.378 [DEBUG] [Thread-114004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:07:55.378 [DEBUG] [Thread-114004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:07:55.397 [INFO] [Thread-114004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:07:55.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:07:55.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:07:56.326 [DEBUG] [Thread-114004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:07:56.326 [DEBUG] [Thread-114004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:07:56.374 [DEBUG] [Thread-114004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:07:56.374 [DEBUG] [Thread-114004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:07:56.382 [DEBUG] [Thread-114004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:07:56.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:07:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:07:56.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:07:56.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:07:56.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:07:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:07:56.415 [DEBUG] [Thread-114004] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:08:04.369 [DEBUG] [Thread-114006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:19.413 [DEBUG] [Thread-114007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:08:26.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:08:26.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:08:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 7, 52), 7.32, 61.37, 0.0, 23.24, 13.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:08:27.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:07:52
2025-12-03T09:08:27.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:08:27.374 [DEBUG] [Thread-114008] [transport.py] [_log()] starting thread (client mode): 0xa2784f10
2025-12-03T09:08:27.374 [DEBUG] [Thread-114008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:08:27.394 [DEBUG] [Thread-114008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:08:27.394 [INFO] [Thread-114008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:08:27.397 [DEBUG] [Thread-114008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] client lang: <none>
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] server lang: <none>
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] kex follows: False
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:08:27.398 [DEBUG] [Thread-114008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:08:27.399 [DEBUG] [Thread-114008] [transport.py] [_log()] Compression: none
2025-12-03T09:08:27.399 [DEBUG] [Thread-114008] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:08:27.415 [DEBUG] [Thread-114008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:08:27.416 [DEBUG] [Thread-114008] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:08:27.416 [DEBUG] [Thread-114008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:08:27.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:08:27.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:08:27.418 [DEBUG] [Thread-114008] [transport.py] [_log()] userauth is OK
2025-12-03T09:08:27.419 [DEBUG] [Thread-114008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:08:27.419 [DEBUG] [Thread-114008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:08:27.419 [DEBUG] [Thread-114008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:08:27.419 [DEBUG] [Thread-114008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:08:27.443 [INFO] [Thread-114008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:08:27.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:08:28.074 [DEBUG] [Thread-114008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:08:28.074 [DEBUG] [Thread-114008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:08:28.075 [DEBUG] [Thread-114008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:08:28.115 [DEBUG] [Thread-114008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:08:28.115 [DEBUG] [Thread-114008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:08:28.118 [DEBUG] [Thread-114008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:08:28.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:08:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:08:28.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:08:28.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:08:28.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:08:28.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:08:28.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.297274 -999.00  +13.40  15.95     66   +7.20 1 1 1 1 1   888    0 7.65 43.08 ----- 17.5 15.9 164.7 19.1 18.9 -26.0 18.4 -24.6 18.0 -24.7 18.3 -26.4
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:08:28.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.297274
2025-12-03T09:08:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:08:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:08:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:08:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:08:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:08:28.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:07:52', tmtdew=7.32, humidity=61.37, cloud=0.0, wind=23.24, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:08:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:08:28.139 [DEBUG] [Thread-114008] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:08:28.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:08:28.234 [DEBUG] [Thread-114011] [transport.py] [_log()] starting thread (client mode): 0xa271f2b0
2025-12-03T09:08:28.234 [DEBUG] [Thread-114011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:08:28.249 [DEBUG] [Thread-114011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:08:28.249 [INFO] [Thread-114011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] client lang: <none>
2025-12-03T09:08:28.257 [DEBUG] [Thread-114011] [transport.py] [_log()] server lang: <none>
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] kex follows: False
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] Compression: none
2025-12-03T09:08:28.258 [DEBUG] [Thread-114011] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:08:28.314 [DEBUG] [Thread-114011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:08:28.314 [DEBUG] [Thread-114011] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:08:28.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:08:28.315 [DEBUG] [Thread-114011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:08:28.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:08:28.374 [DEBUG] [Thread-114011] [transport.py] [_log()] userauth is OK
2025-12-03T09:08:28.374 [DEBUG] [Thread-114011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:08:28.374 [DEBUG] [Thread-114011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:08:28.374 [DEBUG] [Thread-114011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:08:28.374 [DEBUG] [Thread-114011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:08:28.395 [INFO] [Thread-114011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:08:28.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:08:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:08:29.250 [DEBUG] [Thread-114011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:08:29.250 [DEBUG] [Thread-114011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:08:29.298 [DEBUG] [Thread-114011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:08:29.298 [DEBUG] [Thread-114011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:08:29.307 [DEBUG] [Thread-114011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:08:29.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:08:29.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:08:29.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:08:29.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:08:29.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:08:29.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:08:29.342 [DEBUG] [Thread-114011] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:08:34.440 [DEBUG] [Thread-114013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:34.625 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:34.626 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:37.053 [DEBUG] [Thread-114014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:49.482 [DEBUG] [Thread-114015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:08:59.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:08:59.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:08:59.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:09:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 8, 56), 7.1, 62.05, 0.0, 24.12, 13.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:09:00.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:08:56
2025-12-03T09:09:00.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:09:00.349 [DEBUG] [Thread-114016] [transport.py] [_log()] starting thread (client mode): 0xa27098a0
2025-12-03T09:09:00.349 [DEBUG] [Thread-114016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:09:00.369 [DEBUG] [Thread-114016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:09:00.369 [INFO] [Thread-114016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:09:00.372 [DEBUG] [Thread-114016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] client lang: <none>
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] server lang: <none>
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] kex follows: False
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] Compression: none
2025-12-03T09:09:00.373 [DEBUG] [Thread-114016] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:09:00.389 [DEBUG] [Thread-114016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:09:00.390 [DEBUG] [Thread-114016] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:09:00.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:09:00.391 [DEBUG] [Thread-114016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:09:00.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:09:00.393 [DEBUG] [Thread-114016] [transport.py] [_log()] userauth is OK
2025-12-03T09:09:00.393 [DEBUG] [Thread-114016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:09:00.393 [DEBUG] [Thread-114016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:09:00.393 [DEBUG] [Thread-114016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:09:00.394 [DEBUG] [Thread-114016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:09:00.414 [INFO] [Thread-114016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:09:00.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:09:01.012 [DEBUG] [Thread-114016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:09:01.012 [DEBUG] [Thread-114016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:09:01.012 [DEBUG] [Thread-114016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:09:01.053 [DEBUG] [Thread-114016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:09:01.053 [DEBUG] [Thread-114016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:09:01.056 [DEBUG] [Thread-114016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:09:01.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:09:01.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:09:01.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:09:01.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:09:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:09:01.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:09:01.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:09:01.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.297622 -999.00  +13.60  20.42     65   +7.20 1 1 1 1 1   888    0 7.49 38.57 ----- 24.1 20.4 171.2 26.7 18.9 -26.3 18.3 -25.5 17.9 -24.6 18.3 -25.8
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.297622
2025-12-03T09:09:01.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:09:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:09:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:09:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:09:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:09:01.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:08:56', tmtdew=7.1, humidity=62.05, cloud=0.0, wind=24.12, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:08:34.541', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:09:01.083 [DEBUG] [Thread-114016] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:09:01.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:09:01.179 [DEBUG] [Thread-114019] [transport.py] [_log()] starting thread (client mode): 0xa2785d80
2025-12-03T09:09:01.179 [DEBUG] [Thread-114019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:09:01.196 [DEBUG] [Thread-114019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:09:01.196 [INFO] [Thread-114019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:01.203 [DEBUG] [Thread-114019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] client lang: <none>
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] server lang: <none>
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] kex follows: False
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] Compression: none
2025-12-03T09:09:01.204 [DEBUG] [Thread-114019] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:09:01.261 [DEBUG] [Thread-114019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:09:01.261 [DEBUG] [Thread-114019] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:09:01.262 [DEBUG] [Thread-114019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:09:01.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:09:01.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:09:01.317 [DEBUG] [Thread-114019] [transport.py] [_log()] userauth is OK
2025-12-03T09:09:01.318 [DEBUG] [Thread-114019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:09:01.318 [DEBUG] [Thread-114019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:09:01.318 [DEBUG] [Thread-114019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:09:01.318 [DEBUG] [Thread-114019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:09:01.336 [INFO] [Thread-114019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:09:01.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:09:01.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:09:02.217 [DEBUG] [Thread-114019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:09:02.217 [DEBUG] [Thread-114019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:09:02.265 [DEBUG] [Thread-114019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:09:02.265 [DEBUG] [Thread-114019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:09:02.274 [DEBUG] [Thread-114019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:09:02.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:09:02.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:09:02.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:09:02.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:09:02.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:09:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:09:02.309 [DEBUG] [Thread-114019] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:09:04.516 [DEBUG] [Thread-114021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:19.560 [DEBUG] [Thread-114022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:32.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:09:32.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:09:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:09:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 9, 28), 7.13, 61.92, 0.0, 24.08, 13.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:09:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:09:28
2025-12-03T09:09:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:09:33.312 [DEBUG] [Thread-114023] [transport.py] [_log()] starting thread (client mode): 0xa27ee470
2025-12-03T09:09:33.312 [DEBUG] [Thread-114023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:09:33.334 [DEBUG] [Thread-114023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:09:33.334 [INFO] [Thread-114023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:09:33.337 [DEBUG] [Thread-114023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] client lang: <none>
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] server lang: <none>
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] kex follows: False
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] Compression: none
2025-12-03T09:09:33.338 [DEBUG] [Thread-114023] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:09:33.353 [DEBUG] [Thread-114023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:09:33.353 [DEBUG] [Thread-114023] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:09:33.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:09:33.353 [DEBUG] [Thread-114023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:09:33.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:09:33.354 [DEBUG] [Thread-114023] [transport.py] [_log()] userauth is OK
2025-12-03T09:09:33.354 [DEBUG] [Thread-114023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:09:33.354 [DEBUG] [Thread-114023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:09:33.354 [DEBUG] [Thread-114023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:09:33.354 [DEBUG] [Thread-114023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:09:33.375 [INFO] [Thread-114023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:09:33.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:09:34.001 [DEBUG] [Thread-114023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:09:34.001 [DEBUG] [Thread-114023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:09:34.001 [DEBUG] [Thread-114023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:09:34.042 [DEBUG] [Thread-114023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:09:34.042 [DEBUG] [Thread-114023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:09:34.044 [DEBUG] [Thread-114023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:09:34.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:09:34.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:09:34.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:09:34.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:09:34.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:09:34.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:09:34.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.297969 -999.00  +13.60  19.76     64   +7.10 1 1 1 1 1   888    0 7.37 34.98 ----- 16.4 19.8 164.4 25.4 18.7 -26.5 18.2 -24.4 17.9 -23.9 18.3 -25.0
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.297969
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:09:34.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:09:34.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:09:28', tmtdew=7.13, humidity=61.92, cloud=0.0, wind=24.08, temperature=13.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:09:04.522', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:09:34.063 [DEBUG] [Thread-114023] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:09:34.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:09:34.588 [DEBUG] [Thread-114026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:34.763 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:34.764 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:37.097 [DEBUG] [Thread-114027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:09:49.624 [DEBUG] [Thread-114028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:04.658 [DEBUG] [Thread-114029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:19.686 [DEBUG] [Thread-114030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:34.714 [DEBUG] [Thread-114031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:34.904 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:34.905 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:37.132 [DEBUG] [Thread-114032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:10:49.738 [DEBUG] [Thread-114033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:04.765 [DEBUG] [Thread-114034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:19.793 [DEBUG] [Thread-114035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:34.822 [DEBUG] [Thread-114036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:35.047 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:35.048 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:37.168 [DEBUG] [Thread-114037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:11:45.814 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T09:11:49.854 [DEBUG] [Thread-114038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:04.887 [DEBUG] [Thread-114039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:12:15.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:12:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:12:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 12, 8), 8.02, 58.19, 0.0, 21.69, 13.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:12:16.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:12:08
2025-12-03T09:12:16.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:12:16.812 [DEBUG] [Thread-114040] [transport.py] [_log()] starting thread (client mode): 0xa270a410
2025-12-03T09:12:16.812 [DEBUG] [Thread-114040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:12:16.832 [DEBUG] [Thread-114040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:12:16.832 [INFO] [Thread-114040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] client lang: <none>
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] server lang: <none>
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] kex follows: False
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:12:16.835 [DEBUG] [Thread-114040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:12:16.836 [DEBUG] [Thread-114040] [transport.py] [_log()] Compression: none
2025-12-03T09:12:16.836 [DEBUG] [Thread-114040] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:12:16.851 [DEBUG] [Thread-114040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:12:16.852 [DEBUG] [Thread-114040] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:12:16.852 [DEBUG] [Thread-114040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:12:16.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:12:16.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:12:16.854 [DEBUG] [Thread-114040] [transport.py] [_log()] userauth is OK
2025-12-03T09:12:16.855 [DEBUG] [Thread-114040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:12:16.855 [DEBUG] [Thread-114040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:12:16.855 [DEBUG] [Thread-114040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:12:16.855 [DEBUG] [Thread-114040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:12:16.879 [INFO] [Thread-114040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:12:16.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:12:17.501 [DEBUG] [Thread-114040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:12:17.502 [DEBUG] [Thread-114040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:12:17.502 [DEBUG] [Thread-114040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:12:17.543 [DEBUG] [Thread-114040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:12:17.543 [DEBUG] [Thread-114040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:12:17.546 [DEBUG] [Thread-114040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:12:17.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:12:17.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:12:17.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:12:17.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:12:17.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:12:17.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:12:17.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:12:17.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:12:17.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:12:17.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.299705 -999.00  +14.00  22.31     63   +7.20 1 2 1 1 1   888    0 7.16 28.41 ----- 17.6 22.3 110.4 25.2 19.6 -22.5 19.1 -22.6 18.3 -21.7 18.8 -23.5
2025-12-03T09:12:17.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:12:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:12:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.299705
2025-12-03T09:12:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:12:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:12:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:12:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:12:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:12:17.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:12:08', tmtdew=8.02, humidity=58.19, cloud=0.0, wind=21.69, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:11:34.512', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:12:17.572 [DEBUG] [Thread-114040] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:12:17.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:12:17.670 [DEBUG] [Thread-114043] [transport.py] [_log()] starting thread (client mode): 0xa270a830
2025-12-03T09:12:17.670 [DEBUG] [Thread-114043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:12:17.687 [DEBUG] [Thread-114043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:12:17.687 [INFO] [Thread-114043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:12:17.695 [DEBUG] [Thread-114043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] client lang: <none>
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] server lang: <none>
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] kex follows: False
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] Compression: none
2025-12-03T09:12:17.696 [DEBUG] [Thread-114043] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:12:17.753 [DEBUG] [Thread-114043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:12:17.754 [DEBUG] [Thread-114043] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:12:17.754 [DEBUG] [Thread-114043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:12:17.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:12:17.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:12:17.809 [DEBUG] [Thread-114043] [transport.py] [_log()] userauth is OK
2025-12-03T09:12:17.810 [DEBUG] [Thread-114043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:12:17.810 [DEBUG] [Thread-114043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:12:17.810 [DEBUG] [Thread-114043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:12:17.810 [DEBUG] [Thread-114043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:12:17.829 [INFO] [Thread-114043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:12:17.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:12:17.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:12:18.680 [DEBUG] [Thread-114043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:12:18.680 [DEBUG] [Thread-114043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:12:18.728 [DEBUG] [Thread-114043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:12:18.728 [DEBUG] [Thread-114043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:12:18.737 [DEBUG] [Thread-114043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:12:18.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:12:18.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:12:18.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:12:18.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:12:18.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:12:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:12:18.772 [DEBUG] [Thread-114043] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:12:19.910 [DEBUG] [Thread-114045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:34.959 [DEBUG] [Thread-114046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:35.187 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:35.188 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:37.206 [DEBUG] [Thread-114047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:48.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:12:48.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:12:48.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:12:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 12, 40), 7.78, 59.14, 0.0, 17.93, 13.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:12:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:12:40
2025-12-03T09:12:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:12:49.745 [DEBUG] [Thread-114048] [transport.py] [_log()] starting thread (client mode): 0xa27ee6e0
2025-12-03T09:12:49.745 [DEBUG] [Thread-114048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:12:49.765 [DEBUG] [Thread-114048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:12:49.765 [INFO] [Thread-114048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:12:49.777 [DEBUG] [Thread-114048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:12:49.777 [DEBUG] [Thread-114048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:12:49.777 [DEBUG] [Thread-114048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:12:49.777 [DEBUG] [Thread-114048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] client lang: <none>
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] server lang: <none>
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] kex follows: False
2025-12-03T09:12:49.778 [DEBUG] [Thread-114048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] Compression: none
2025-12-03T09:12:49.779 [DEBUG] [Thread-114048] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:12:49.797 [DEBUG] [Thread-114048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:12:49.798 [DEBUG] [Thread-114048] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:12:49.798 [DEBUG] [Thread-114048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:12:49.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:12:49.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:12:49.800 [DEBUG] [Thread-114048] [transport.py] [_log()] userauth is OK
2025-12-03T09:12:49.800 [DEBUG] [Thread-114048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:12:49.801 [DEBUG] [Thread-114048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:12:49.801 [DEBUG] [Thread-114048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:12:49.801 [DEBUG] [Thread-114048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:12:49.824 [INFO] [Thread-114048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:12:49.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:12:49.988 [DEBUG] [Thread-114050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:12:50.463 [DEBUG] [Thread-114048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:12:50.463 [DEBUG] [Thread-114048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:12:50.464 [DEBUG] [Thread-114048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:12:50.505 [DEBUG] [Thread-114048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:12:50.505 [DEBUG] [Thread-114048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:12:50.508 [DEBUG] [Thread-114048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:12:50.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:12:50.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:12:50.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:12:50.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:12:50.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:12:50.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:12:50.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:12:50.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.300399 -999.00  +13.70  17.91     63   +7.00 1 1 1 1 1   888    0 7.32 32.00 ----- 17.2 17.9 129.0 21.7 19.5 -25.8 19.1 -24.4 18.4 -23.1 18.7 -24.6
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.300399
2025-12-03T09:12:50.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:12:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:12:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:12:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:12:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:12:50.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:12:40', tmtdew=7.78, humidity=59.14, cloud=0.0, wind=17.93, temperature=13.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:12:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:12:50.532 [DEBUG] [Thread-114048] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:12:50.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:12:50.621 [DEBUG] [Thread-114052] [transport.py] [_log()] starting thread (client mode): 0xa27b0a30
2025-12-03T09:12:50.621 [DEBUG] [Thread-114052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:12:50.639 [DEBUG] [Thread-114052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:12:50.639 [INFO] [Thread-114052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:12:50.646 [DEBUG] [Thread-114052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:12:50.647 [DEBUG] [Thread-114052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] client lang: <none>
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] server lang: <none>
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] kex follows: False
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:12:50.648 [DEBUG] [Thread-114052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:12:50.649 [DEBUG] [Thread-114052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:12:50.649 [DEBUG] [Thread-114052] [transport.py] [_log()] Compression: none
2025-12-03T09:12:50.649 [DEBUG] [Thread-114052] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:12:50.710 [DEBUG] [Thread-114052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:12:50.710 [DEBUG] [Thread-114052] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:12:50.711 [DEBUG] [Thread-114052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:12:50.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:12:50.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:12:50.766 [DEBUG] [Thread-114052] [transport.py] [_log()] userauth is OK
2025-12-03T09:12:50.766 [DEBUG] [Thread-114052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:12:50.766 [DEBUG] [Thread-114052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:12:50.766 [DEBUG] [Thread-114052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:12:50.766 [DEBUG] [Thread-114052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:12:50.785 [INFO] [Thread-114052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:12:50.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:12:50.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:12:51.650 [DEBUG] [Thread-114052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:12:51.650 [DEBUG] [Thread-114052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:12:51.698 [DEBUG] [Thread-114052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:12:51.698 [DEBUG] [Thread-114052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:12:51.707 [DEBUG] [Thread-114052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:12:51.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:12:51.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:12:51.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:12:51.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:12:51.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:12:51.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:12:51.741 [DEBUG] [Thread-114052] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:13:05.017 [DEBUG] [Thread-114054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:20.057 [DEBUG] [Thread-114055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:21.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:13:21.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:13:21.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:13:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 13, 12), 7.59, 59.88, 0.0, 23.4, 13.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:13:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:13:12
2025-12-03T09:13:22.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:13:22.764 [DEBUG] [Thread-114056] [transport.py] [_log()] starting thread (client mode): 0xa27c2650
2025-12-03T09:13:22.764 [DEBUG] [Thread-114056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:13:22.783 [DEBUG] [Thread-114056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:13:22.783 [INFO] [Thread-114056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] client lang: <none>
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] server lang: <none>
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] kex follows: False
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] Compression: none
2025-12-03T09:13:22.787 [DEBUG] [Thread-114056] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:13:22.803 [DEBUG] [Thread-114056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:13:22.804 [DEBUG] [Thread-114056] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:13:22.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:13:22.804 [DEBUG] [Thread-114056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:13:22.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:13:22.805 [DEBUG] [Thread-114056] [transport.py] [_log()] userauth is OK
2025-12-03T09:13:22.805 [DEBUG] [Thread-114056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:13:22.805 [DEBUG] [Thread-114056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:13:22.805 [DEBUG] [Thread-114056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:13:22.805 [DEBUG] [Thread-114056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:13:22.814 [INFO] [Thread-114056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:13:22.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:13:23.440 [DEBUG] [Thread-114056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:13:23.440 [DEBUG] [Thread-114056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:13:23.440 [DEBUG] [Thread-114056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:13:23.481 [DEBUG] [Thread-114056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:13:23.481 [DEBUG] [Thread-114056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:13:23.483 [DEBUG] [Thread-114056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:13:23.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:13:23.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:13:23.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:13:23.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:13:23.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:13:23.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:13:23.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:13:23.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.300746 -999.00  +14.00  21.43     63   +7.20 1 1 1 1 1   888    0 7.37 29.87 ----- 25.2 21.4 136.0 25.2 19.4 -25.5 19.1 -24.0 18.3 -22.9 18.7 -23.2
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.300746
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:13:23.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:13:12', tmtdew=7.59, humidity=59.88, cloud=0.0, wind=23.4, temperature=13.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:13:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:13:23.499 [DEBUG] [Thread-114056] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:13:23.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:13:23.584 [DEBUG] [Thread-114059] [transport.py] [_log()] starting thread (client mode): 0xa27c3d30
2025-12-03T09:13:23.584 [DEBUG] [Thread-114059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:13:23.601 [DEBUG] [Thread-114059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:13:23.601 [INFO] [Thread-114059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:23.608 [DEBUG] [Thread-114059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] client lang: <none>
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] server lang: <none>
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] kex follows: False
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] Compression: none
2025-12-03T09:13:23.609 [DEBUG] [Thread-114059] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:13:23.668 [DEBUG] [Thread-114059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:13:23.668 [DEBUG] [Thread-114059] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:13:23.668 [DEBUG] [Thread-114059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:13:23.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:13:23.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:13:23.725 [DEBUG] [Thread-114059] [transport.py] [_log()] userauth is OK
2025-12-03T09:13:23.725 [DEBUG] [Thread-114059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:13:23.725 [DEBUG] [Thread-114059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:13:23.725 [DEBUG] [Thread-114059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:13:23.725 [DEBUG] [Thread-114059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:13:23.740 [INFO] [Thread-114059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:13:23.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:13:23.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:13:24.539 [DEBUG] [Thread-114059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:13:24.539 [DEBUG] [Thread-114059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:13:24.589 [DEBUG] [Thread-114059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:13:24.589 [DEBUG] [Thread-114059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:13:24.597 [DEBUG] [Thread-114059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:13:24.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:13:24.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:13:24.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:13:24.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:13:24.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:13:24.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:13:24.630 [DEBUG] [Thread-114059] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:13:35.086 [DEBUG] [Thread-114061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:35.331 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:35.332 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:37.247 [DEBUG] [Thread-114062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:50.145 [DEBUG] [Thread-114063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:13:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:13:54.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:13:54.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:13:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 13, 44), 7.83, 58.96, 0.0, 23.71, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:13:55.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:13:44
2025-12-03T09:13:55.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:13:55.574 [DEBUG] [Thread-114064] [transport.py] [_log()] starting thread (client mode): 0xa2787460
2025-12-03T09:13:55.574 [DEBUG] [Thread-114064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:13:55.594 [DEBUG] [Thread-114064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:13:55.594 [INFO] [Thread-114064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:13:55.597 [DEBUG] [Thread-114064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:13:55.597 [DEBUG] [Thread-114064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:13:55.597 [DEBUG] [Thread-114064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:13:55.597 [DEBUG] [Thread-114064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] client lang: <none>
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] server lang: <none>
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] kex follows: False
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] Compression: none
2025-12-03T09:13:55.598 [DEBUG] [Thread-114064] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:13:55.616 [DEBUG] [Thread-114064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:13:55.616 [DEBUG] [Thread-114064] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:13:55.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:13:55.617 [DEBUG] [Thread-114064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:13:55.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:13:55.619 [DEBUG] [Thread-114064] [transport.py] [_log()] userauth is OK
2025-12-03T09:13:55.619 [DEBUG] [Thread-114064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:13:55.620 [DEBUG] [Thread-114064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:13:55.620 [DEBUG] [Thread-114064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:13:55.620 [DEBUG] [Thread-114064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:13:55.655 [INFO] [Thread-114064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:13:55.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:13:56.297 [DEBUG] [Thread-114064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:13:56.297 [DEBUG] [Thread-114064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:13:56.298 [DEBUG] [Thread-114064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:13:56.338 [DEBUG] [Thread-114064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:13:56.338 [DEBUG] [Thread-114064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:13:56.341 [DEBUG] [Thread-114064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:13:56.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:13:56.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:13:56.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:13:56.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:13:56.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:13:56.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:13:56.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.301094 -999.00  +13.70  19.11     63   +6.80 1 2 1 1 1   888    0 7.36 28.09 ----- 17.1 19.1 138.2 28.4 19.4 -24.6 19.1 -23.3 18.4 -22.5 18.7 -23.1
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:13:56.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.301094
2025-12-03T09:13:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:13:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:13:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:13:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:13:56.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:13:56.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:13:44', tmtdew=7.83, humidity=58.96, cloud=0.0, wind=23.71, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:13:34.522', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:13:56.368 [DEBUG] [Thread-114064] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:13:56.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:13:56.466 [DEBUG] [Thread-114067] [transport.py] [_log()] starting thread (client mode): 0xa2784490
2025-12-03T09:13:56.467 [DEBUG] [Thread-114067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:13:56.481 [DEBUG] [Thread-114067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:13:56.481 [INFO] [Thread-114067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:13:56.488 [DEBUG] [Thread-114067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:13:56.488 [DEBUG] [Thread-114067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:13:56.488 [DEBUG] [Thread-114067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:13:56.488 [DEBUG] [Thread-114067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] client lang: <none>
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] server lang: <none>
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] kex follows: False
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] Compression: none
2025-12-03T09:13:56.489 [DEBUG] [Thread-114067] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:13:56.545 [DEBUG] [Thread-114067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:13:56.546 [DEBUG] [Thread-114067] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:13:56.546 [DEBUG] [Thread-114067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:13:56.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:13:56.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:13:56.602 [DEBUG] [Thread-114067] [transport.py] [_log()] userauth is OK
2025-12-03T09:13:56.602 [DEBUG] [Thread-114067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:13:56.602 [DEBUG] [Thread-114067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:13:56.602 [DEBUG] [Thread-114067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:13:56.602 [DEBUG] [Thread-114067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:13:56.621 [INFO] [Thread-114067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:13:56.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:13:56.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:13:57.462 [DEBUG] [Thread-114067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:13:57.462 [DEBUG] [Thread-114067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:13:57.514 [DEBUG] [Thread-114067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:13:57.514 [DEBUG] [Thread-114067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:13:57.523 [DEBUG] [Thread-114067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:13:57.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:13:57.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:13:57.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:13:57.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:13:57.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:13:57.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:13:57.558 [DEBUG] [Thread-114067] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:14:05.170 [DEBUG] [Thread-114069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:20.205 [DEBUG] [Thread-114070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:14:27.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:14:27.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:14:28.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 14, 16), 7.93, 58.54, 0.0, 21.69, 13.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:14:28.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:14:16
2025-12-03T09:14:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:14:28.499 [DEBUG] [Thread-114071] [transport.py] [_log()] starting thread (client mode): 0xa27c2ec0
2025-12-03T09:14:28.500 [DEBUG] [Thread-114071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:14:28.520 [DEBUG] [Thread-114071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:14:28.520 [INFO] [Thread-114071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:14:28.523 [DEBUG] [Thread-114071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] client lang: <none>
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] server lang: <none>
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] kex follows: False
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] Compression: none
2025-12-03T09:14:28.524 [DEBUG] [Thread-114071] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:14:28.544 [DEBUG] [Thread-114071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:14:28.545 [DEBUG] [Thread-114071] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:14:28.545 [DEBUG] [Thread-114071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:14:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:14:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:14:28.547 [DEBUG] [Thread-114071] [transport.py] [_log()] userauth is OK
2025-12-03T09:14:28.547 [DEBUG] [Thread-114071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:14:28.548 [DEBUG] [Thread-114071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:14:28.548 [DEBUG] [Thread-114071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:14:28.548 [DEBUG] [Thread-114071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:14:28.569 [INFO] [Thread-114071] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:14:28.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:14:29.223 [DEBUG] [Thread-114071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:14:29.223 [DEBUG] [Thread-114071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:14:29.223 [DEBUG] [Thread-114071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:14:29.264 [DEBUG] [Thread-114071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:14:29.264 [DEBUG] [Thread-114071] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:14:29.267 [DEBUG] [Thread-114071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:14:29.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:14:29.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:14:29.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:14:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:14:29.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:14:29.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:14:29.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:14:29.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.301441 -999.00  +13.80  14.27     62   +6.90 1 2 1 1 1   888    0 7.21 27.51 ----- 15.2 14.3 121.0 23.3 19.5 -23.8 19.2 -23.1 18.4 -22.0 18.8 -23.1
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.301441
2025-12-03T09:14:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:14:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:14:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:14:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:14:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:14:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:14:16', tmtdew=7.93, humidity=58.54, cloud=0.0, wind=21.69, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:14:04.502', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:14:29.290 [DEBUG] [Thread-114071] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:14:29.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:14:29.396 [DEBUG] [Thread-114074] [transport.py] [_log()] starting thread (client mode): 0xa27c2f20
2025-12-03T09:14:29.396 [DEBUG] [Thread-114074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:14:29.413 [DEBUG] [Thread-114074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:14:29.413 [INFO] [Thread-114074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:14:29.424 [DEBUG] [Thread-114074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:14:29.425 [DEBUG] [Thread-114074] [transport.py] [_log()] client lang: <none>
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] server lang: <none>
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] kex follows: False
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] Compression: none
2025-12-03T09:14:29.426 [DEBUG] [Thread-114074] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:14:29.487 [DEBUG] [Thread-114074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:14:29.487 [DEBUG] [Thread-114074] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:14:29.488 [DEBUG] [Thread-114074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:14:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:14:29.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:14:29.551 [DEBUG] [Thread-114074] [transport.py] [_log()] userauth is OK
2025-12-03T09:14:29.551 [DEBUG] [Thread-114074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:14:29.551 [DEBUG] [Thread-114074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:14:29.552 [DEBUG] [Thread-114074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:14:29.552 [DEBUG] [Thread-114074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:14:29.571 [INFO] [Thread-114074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:14:29.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:14:29.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:14:30.419 [DEBUG] [Thread-114074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:14:30.419 [DEBUG] [Thread-114074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:14:30.471 [DEBUG] [Thread-114074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:14:30.471 [DEBUG] [Thread-114074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:14:30.484 [DEBUG] [Thread-114074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:14:30.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:14:30.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:14:30.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:14:30.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:14:30.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:14:30.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:14:30.535 [DEBUG] [Thread-114074] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:14:35.231 [DEBUG] [Thread-114076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:35.475 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:35.476 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:37.282 [DEBUG] [Thread-114077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:14:50.281 [DEBUG] [Thread-114078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:15:00.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:15:00.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:15:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 14, 48), 7.98, 58.36, 0.0, 18.88, 13.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:15:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:14:48
2025-12-03T09:15:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:15:01.495 [DEBUG] [Thread-114079] [transport.py] [_log()] starting thread (client mode): 0xa27b0f40
2025-12-03T09:15:01.495 [DEBUG] [Thread-114079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:15:01.515 [DEBUG] [Thread-114079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:15:01.515 [INFO] [Thread-114079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:15:01.518 [DEBUG] [Thread-114079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] client lang: <none>
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] server lang: <none>
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] kex follows: False
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] Compression: none
2025-12-03T09:15:01.519 [DEBUG] [Thread-114079] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:15:01.536 [DEBUG] [Thread-114079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:15:01.536 [DEBUG] [Thread-114079] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:15:01.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:15:01.537 [DEBUG] [Thread-114079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:15:01.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:15:01.540 [DEBUG] [Thread-114079] [transport.py] [_log()] userauth is OK
2025-12-03T09:15:01.540 [DEBUG] [Thread-114079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:15:01.540 [DEBUG] [Thread-114079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:15:01.540 [DEBUG] [Thread-114079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:15:01.540 [DEBUG] [Thread-114079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:15:01.564 [INFO] [Thread-114079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:15:01.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:15:02.148 [DEBUG] [Thread-114079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:15:02.148 [DEBUG] [Thread-114079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:15:02.148 [DEBUG] [Thread-114079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:15:02.188 [DEBUG] [Thread-114079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:15:02.188 [DEBUG] [Thread-114079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:15:02.190 [DEBUG] [Thread-114079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:15:02.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:15:02.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:15:02.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:15:02.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:15:02.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:15:02.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:15:02.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:15:02.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.301788 -999.00  +13.60  17.34     62   +6.60 1 2 1 1 1   888    0 7.29 29.19 ----- 15.8 17.3 119.8 24.1 19.4 -23.4 19.2 -22.5 18.5 -21.6 18.8 -22.7
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.301788
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:15:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:14:48', tmtdew=7.98, humidity=58.36, cloud=0.0, wind=18.88, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:14:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:15:02.199 [DEBUG] [Thread-114079] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:15:02.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:15:02.284 [DEBUG] [Thread-114082] [transport.py] [_log()] starting thread (client mode): 0xa27b1930
2025-12-03T09:15:02.284 [DEBUG] [Thread-114082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:15:02.299 [DEBUG] [Thread-114082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:15:02.299 [INFO] [Thread-114082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:15:02.306 [DEBUG] [Thread-114082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] client lang: <none>
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] server lang: <none>
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] kex follows: False
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] Compression: none
2025-12-03T09:15:02.307 [DEBUG] [Thread-114082] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:15:02.365 [DEBUG] [Thread-114082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:15:02.365 [DEBUG] [Thread-114082] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:15:02.365 [DEBUG] [Thread-114082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:15:02.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:15:02.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:15:02.422 [DEBUG] [Thread-114082] [transport.py] [_log()] userauth is OK
2025-12-03T09:15:02.422 [DEBUG] [Thread-114082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:15:02.422 [DEBUG] [Thread-114082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:15:02.422 [DEBUG] [Thread-114082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:15:02.422 [DEBUG] [Thread-114082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:15:02.435 [INFO] [Thread-114082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:15:02.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:15:02.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:15:03.279 [DEBUG] [Thread-114082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:15:03.279 [DEBUG] [Thread-114082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:15:03.327 [DEBUG] [Thread-114082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:15:03.327 [DEBUG] [Thread-114082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:15:03.336 [DEBUG] [Thread-114082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:15:03.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:15:03.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:15:03.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:15:03.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:15:03.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:15:03.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:15:03.372 [DEBUG] [Thread-114082] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:15:05.307 [DEBUG] [Thread-114084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:20.349 [DEBUG] [Thread-114085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:33.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:15:33.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:15:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:15:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 15, 20), 7.96, 58.43, 0.0, 16.75, 13.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:15:34.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:15:20
2025-12-03T09:15:34.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:15:34.335 [DEBUG] [Thread-114086] [transport.py] [_log()] starting thread (client mode): 0xa27c1c90
2025-12-03T09:15:34.335 [DEBUG] [Thread-114086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:15:34.347 [DEBUG] [Thread-114086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:15:34.347 [INFO] [Thread-114086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] client lang: <none>
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] server lang: <none>
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] kex follows: False
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] Compression: none
2025-12-03T09:15:34.349 [DEBUG] [Thread-114086] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:15:34.363 [DEBUG] [Thread-114086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:15:34.363 [DEBUG] [Thread-114086] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:15:34.364 [DEBUG] [Thread-114086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:15:34.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:15:34.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:15:34.365 [DEBUG] [Thread-114086] [transport.py] [_log()] userauth is OK
2025-12-03T09:15:34.365 [DEBUG] [Thread-114086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:15:34.365 [DEBUG] [Thread-114086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:15:34.365 [DEBUG] [Thread-114086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:15:34.366 [DEBUG] [Thread-114086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:15:34.400 [INFO] [Thread-114086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:15:34.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:15:34.970 [DEBUG] [Thread-114086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:15:34.970 [DEBUG] [Thread-114086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:15:34.971 [DEBUG] [Thread-114086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:15:35.011 [DEBUG] [Thread-114086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:15:35.011 [DEBUG] [Thread-114086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:15:35.014 [DEBUG] [Thread-114086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:15:35.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:15:35.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:15:35.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:15:35.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:15:35.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:15:35.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:15:35.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:15:35.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.302135 -999.00  +13.70  17.37     63   +6.80 1 2 1 1 1   888    0 7.41 27.96 ----- 14.0 17.4 129.8 20.9 19.6 -22.3 19.4 -21.6 18.6 -20.5 18.9 -22.0
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.302135
2025-12-03T09:15:35.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:15:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:15:35.038 [DEBUG] [Thread-114086] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:15:35.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:15:35.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:15:35.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:15:35.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:15:20', tmtdew=7.96, humidity=58.43, cloud=0.0, wind=16.75, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:15:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:15:35.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:15:35.138 [DEBUG] [Thread-114089] [transport.py] [_log()] starting thread (client mode): 0xa27b1930
2025-12-03T09:15:35.138 [DEBUG] [Thread-114089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:15:35.156 [DEBUG] [Thread-114089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:15:35.157 [INFO] [Thread-114089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:15:35.164 [DEBUG] [Thread-114089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:15:35.164 [DEBUG] [Thread-114089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] client lang: <none>
2025-12-03T09:15:35.165 [DEBUG] [Thread-114089] [transport.py] [_log()] server lang: <none>
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] kex follows: False
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] Compression: none
2025-12-03T09:15:35.166 [DEBUG] [Thread-114089] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:15:35.222 [DEBUG] [Thread-114089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:15:35.222 [DEBUG] [Thread-114089] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:15:35.223 [DEBUG] [Thread-114089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:15:35.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:15:35.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:15:35.278 [DEBUG] [Thread-114089] [transport.py] [_log()] userauth is OK
2025-12-03T09:15:35.278 [DEBUG] [Thread-114089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:15:35.278 [DEBUG] [Thread-114089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:15:35.278 [DEBUG] [Thread-114089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:15:35.278 [DEBUG] [Thread-114089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:15:35.297 [INFO] [Thread-114089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:15:35.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:15:35.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:15:35.377 [DEBUG] [Thread-114091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:35.614 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:35.616 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:36.140 [DEBUG] [Thread-114089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:15:36.140 [DEBUG] [Thread-114089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:15:36.187 [DEBUG] [Thread-114089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:15:36.188 [DEBUG] [Thread-114089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:15:36.196 [DEBUG] [Thread-114089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:15:36.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:15:36.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:15:36.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:15:36.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:15:36.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:15:36.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:15:36.230 [DEBUG] [Thread-114089] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:15:37.316 [DEBUG] [Thread-114092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:15:50.425 [DEBUG] [Thread-114093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:05.452 [DEBUG] [Thread-114094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:06.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:16:06.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:16:06.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:16:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 15, 52), 8.22, 57.58, 0.0, 18.95, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:16:06.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:15:52
2025-12-03T09:16:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:16:07.202 [DEBUG] [Thread-114095] [transport.py] [_log()] starting thread (client mode): 0xa27c3a90
2025-12-03T09:16:07.202 [DEBUG] [Thread-114095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:16:07.213 [DEBUG] [Thread-114095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:16:07.213 [INFO] [Thread-114095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] client lang: <none>
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] server lang: <none>
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] kex follows: False
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] Compression: none
2025-12-03T09:16:07.217 [DEBUG] [Thread-114095] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:16:07.234 [DEBUG] [Thread-114095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:16:07.235 [DEBUG] [Thread-114095] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:16:07.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:16:07.236 [DEBUG] [Thread-114095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:16:07.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:16:07.238 [DEBUG] [Thread-114095] [transport.py] [_log()] userauth is OK
2025-12-03T09:16:07.238 [DEBUG] [Thread-114095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:16:07.239 [DEBUG] [Thread-114095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:16:07.239 [DEBUG] [Thread-114095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:16:07.239 [DEBUG] [Thread-114095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:16:07.255 [INFO] [Thread-114095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:16:07.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:16:07.824 [DEBUG] [Thread-114095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:16:07.824 [DEBUG] [Thread-114095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:16:07.824 [DEBUG] [Thread-114095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:16:07.865 [DEBUG] [Thread-114095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:16:07.865 [DEBUG] [Thread-114095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:16:07.868 [DEBUG] [Thread-114095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:16:07.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:16:07.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:16:07.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:16:07.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:16:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:16:07.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:16:07.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:16:07.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:16:07.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:16:07.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.302483 -999.00  +13.90  17.45     62   +6.90 1 2 1 1 1   888    0 7.42 27.49 ----- 14.6 17.4 134.2 24.3 19.6 -23.7 19.4 -22.4 18.6 -21.1 18.9 -22.1
2025-12-03T09:16:07.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:16:07.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:16:07.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.302483
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:16:07.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:15:52', tmtdew=8.22, humidity=57.58, cloud=0.0, wind=18.95, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:15:34.531', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:16:07.887 [DEBUG] [Thread-114095] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:16:07.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:16:07.985 [DEBUG] [Thread-114098] [transport.py] [_log()] starting thread (client mode): 0xa27c1a50
2025-12-03T09:16:07.986 [DEBUG] [Thread-114098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:16:08.001 [DEBUG] [Thread-114098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:16:08.002 [INFO] [Thread-114098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] client lang: <none>
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] server lang: <none>
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] kex follows: False
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:16:08.013 [DEBUG] [Thread-114098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:16:08.014 [DEBUG] [Thread-114098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:16:08.014 [DEBUG] [Thread-114098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:16:08.014 [DEBUG] [Thread-114098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:16:08.014 [DEBUG] [Thread-114098] [transport.py] [_log()] Compression: none
2025-12-03T09:16:08.014 [DEBUG] [Thread-114098] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:16:08.070 [DEBUG] [Thread-114098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:16:08.071 [DEBUG] [Thread-114098] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:16:08.071 [DEBUG] [Thread-114098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:16:08.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:16:08.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:16:08.129 [DEBUG] [Thread-114098] [transport.py] [_log()] userauth is OK
2025-12-03T09:16:08.130 [DEBUG] [Thread-114098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:16:08.130 [DEBUG] [Thread-114098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:16:08.130 [DEBUG] [Thread-114098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:16:08.130 [DEBUG] [Thread-114098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:16:08.154 [INFO] [Thread-114098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:16:08.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:16:08.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:16:09.006 [DEBUG] [Thread-114098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:16:09.007 [DEBUG] [Thread-114098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:16:09.055 [DEBUG] [Thread-114098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:16:09.055 [DEBUG] [Thread-114098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:16:09.064 [DEBUG] [Thread-114098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:16:09.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:16:09.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:16:09.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:16:09.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:16:09.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:16:09.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:16:09.099 [DEBUG] [Thread-114098] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:16:20.480 [DEBUG] [Thread-114100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:35.521 [DEBUG] [Thread-114101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:35.757 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:35.758 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:37.362 [DEBUG] [Thread-114102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:16:39.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:16:39.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:16:39.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:16:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 16, 24), 8.32, 57.18, 0.0, 21.3, 13.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:16:39.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:16:24
2025-12-03T09:16:39.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:16:40.095 [DEBUG] [Thread-114103] [transport.py] [_log()] starting thread (client mode): 0xa27ecee0
2025-12-03T09:16:40.095 [DEBUG] [Thread-114103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:16:40.114 [DEBUG] [Thread-114103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:16:40.114 [INFO] [Thread-114103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] client lang: <none>
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] server lang: <none>
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] kex follows: False
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:16:40.117 [DEBUG] [Thread-114103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:16:40.118 [DEBUG] [Thread-114103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:16:40.118 [DEBUG] [Thread-114103] [transport.py] [_log()] Compression: none
2025-12-03T09:16:40.118 [DEBUG] [Thread-114103] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:16:40.132 [DEBUG] [Thread-114103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:16:40.132 [DEBUG] [Thread-114103] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:16:40.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:16:40.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] userauth is OK
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:16:40.133 [DEBUG] [Thread-114103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:16:40.145 [INFO] [Thread-114103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:16:40.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:16:40.757 [DEBUG] [Thread-114103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:16:40.757 [DEBUG] [Thread-114103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:16:40.757 [DEBUG] [Thread-114103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:16:40.798 [DEBUG] [Thread-114103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:16:40.798 [DEBUG] [Thread-114103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:16:40.800 [DEBUG] [Thread-114103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:16:40.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:16:40.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:16:40.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:16:40.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:16:40.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:16:40.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:16:40.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.303177 -999.00  +13.90  16.95     61   +6.60 1 2 1 1 1   888    0 7.55 31.93 ----- 21.1 16.9 148.0 24.9 19.9 -22.8 19.5 -21.4 18.8 -21.0 19.2 -21.2
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.303177
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:16:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:16:24', tmtdew=8.32, humidity=57.18, cloud=0.0, wind=21.3, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:16:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:16:40.818 [DEBUG] [Thread-114103] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:16:40.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:16:40.904 [DEBUG] [Thread-114106] [transport.py] [_log()] starting thread (client mode): 0xa27ef490
2025-12-03T09:16:40.904 [DEBUG] [Thread-114106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:16:40.918 [DEBUG] [Thread-114106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:16:40.918 [INFO] [Thread-114106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] client lang: <none>
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] server lang: <none>
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] kex follows: False
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] Compression: none
2025-12-03T09:16:40.926 [DEBUG] [Thread-114106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:16:40.984 [DEBUG] [Thread-114106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:16:40.984 [DEBUG] [Thread-114106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:16:40.985 [DEBUG] [Thread-114106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:16:40.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:16:40.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:16:41.042 [DEBUG] [Thread-114106] [transport.py] [_log()] userauth is OK
2025-12-03T09:16:41.042 [DEBUG] [Thread-114106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:16:41.042 [DEBUG] [Thread-114106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:16:41.042 [DEBUG] [Thread-114106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:16:41.042 [DEBUG] [Thread-114106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:16:41.064 [INFO] [Thread-114106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:16:41.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:16:41.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:16:41.885 [DEBUG] [Thread-114106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:16:41.885 [DEBUG] [Thread-114106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:16:41.933 [DEBUG] [Thread-114106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:16:41.933 [DEBUG] [Thread-114106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:16:41.941 [DEBUG] [Thread-114106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:16:41.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:16:41.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:16:41.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:16:41.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:16:41.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:16:41.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:16:41.976 [DEBUG] [Thread-114106] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:16:50.552 [DEBUG] [Thread-114108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:05.595 [DEBUG] [Thread-114109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:11.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:17:11.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:17:11.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:17:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 16, 56), 8.35, 57.25, 0.0, 20.34, 13.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:17:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:16:56
2025-12-03T09:17:12.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:17:12.959 [DEBUG] [Thread-114110] [transport.py] [_log()] starting thread (client mode): 0xa27c04c0
2025-12-03T09:17:12.959 [DEBUG] [Thread-114110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:17:12.970 [DEBUG] [Thread-114110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:17:12.970 [INFO] [Thread-114110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] client lang: <none>
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] server lang: <none>
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] kex follows: False
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] Compression: none
2025-12-03T09:17:12.972 [DEBUG] [Thread-114110] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:17:12.985 [DEBUG] [Thread-114110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:17:12.985 [DEBUG] [Thread-114110] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:17:12.986 [DEBUG] [Thread-114110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:17:12.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:17:12.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:17:12.987 [DEBUG] [Thread-114110] [transport.py] [_log()] userauth is OK
2025-12-03T09:17:12.987 [DEBUG] [Thread-114110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:17:12.988 [DEBUG] [Thread-114110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:17:12.988 [DEBUG] [Thread-114110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:17:12.988 [DEBUG] [Thread-114110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:17:13.017 [INFO] [Thread-114110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:17:13.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:17:13.624 [DEBUG] [Thread-114110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:17:13.624 [DEBUG] [Thread-114110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:17:13.624 [DEBUG] [Thread-114110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:17:13.665 [DEBUG] [Thread-114110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:17:13.665 [DEBUG] [Thread-114110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:17:13.668 [DEBUG] [Thread-114110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:17:13.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:17:13.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:17:13.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:17:13.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:17:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:17:13.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:17:13.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:17:13.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:17:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:17:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.303524 -999.00  +13.70  16.06     61   +6.50 1 2 1 1 1   888    0 7.81 36.13 ----- 13.9 16.1 136.8 23.0 19.9 -22.7 19.5 -21.1 18.7 -20.5 19.2 -21.5
2025-12-03T09:17:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:17:13.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:17:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.303524
2025-12-03T09:17:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:17:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:17:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:17:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:17:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:17:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:16:56', tmtdew=8.35, humidity=57.25, cloud=0.0, wind=20.34, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:17:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:17:13.691 [DEBUG] [Thread-114110] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:17:13.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:17:13.789 [DEBUG] [Thread-114113] [transport.py] [_log()] starting thread (client mode): 0xa27ed960
2025-12-03T09:17:13.789 [DEBUG] [Thread-114113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:17:13.803 [DEBUG] [Thread-114113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:17:13.804 [INFO] [Thread-114113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] client lang: <none>
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] server lang: <none>
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] kex follows: False
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] Compression: none
2025-12-03T09:17:13.811 [DEBUG] [Thread-114113] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:17:13.868 [DEBUG] [Thread-114113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:17:13.868 [DEBUG] [Thread-114113] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:17:13.869 [DEBUG] [Thread-114113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:17:13.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:17:13.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:17:13.925 [DEBUG] [Thread-114113] [transport.py] [_log()] userauth is OK
2025-12-03T09:17:13.926 [DEBUG] [Thread-114113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:17:13.926 [DEBUG] [Thread-114113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:17:13.926 [DEBUG] [Thread-114113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:17:13.926 [DEBUG] [Thread-114113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:17:13.939 [INFO] [Thread-114113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:17:13.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:17:13.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:17:14.775 [DEBUG] [Thread-114113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:17:14.775 [DEBUG] [Thread-114113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:17:14.823 [DEBUG] [Thread-114113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:17:14.823 [DEBUG] [Thread-114113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:17:14.834 [DEBUG] [Thread-114113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:17:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:17:14.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:17:14.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:17:14.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:17:14.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:17:14.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:17:14.872 [DEBUG] [Thread-114113] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:17:20.622 [DEBUG] [Thread-114115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:35.660 [DEBUG] [Thread-114116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:35.897 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:35.898 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:37.411 [DEBUG] [Thread-114117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:17:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:17:44.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:17:44.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:17:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 17, 28), 8.25, 57.59, 0.0, 18.03, 13.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:17:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:17:28
2025-12-03T09:17:45.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:17:45.839 [DEBUG] [Thread-114118] [transport.py] [_log()] starting thread (client mode): 0xa2787ca0
2025-12-03T09:17:45.839 [DEBUG] [Thread-114118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:17:45.859 [DEBUG] [Thread-114118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:17:45.859 [INFO] [Thread-114118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] client lang: <none>
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] server lang: <none>
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] kex follows: False
2025-12-03T09:17:45.863 [DEBUG] [Thread-114118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] Compression: none
2025-12-03T09:17:45.864 [DEBUG] [Thread-114118] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:17:45.884 [DEBUG] [Thread-114118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:17:45.885 [DEBUG] [Thread-114118] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:17:45.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:17:45.886 [DEBUG] [Thread-114118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:17:45.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:17:45.928 [DEBUG] [Thread-114118] [transport.py] [_log()] userauth is OK
2025-12-03T09:17:45.929 [DEBUG] [Thread-114118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:17:45.929 [DEBUG] [Thread-114118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:17:45.929 [DEBUG] [Thread-114118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:17:45.929 [DEBUG] [Thread-114118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:17:45.962 [INFO] [Thread-114118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:17:45.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:17:46.617 [DEBUG] [Thread-114118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:17:46.617 [DEBUG] [Thread-114118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:17:46.618 [DEBUG] [Thread-114118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:17:46.658 [DEBUG] [Thread-114118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:17:46.658 [DEBUG] [Thread-114118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:17:46.661 [DEBUG] [Thread-114118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:17:46.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:17:46.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:17:46.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:17:46.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:17:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:17:46.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:17:46.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:17:46.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:17:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:17:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.303524 -999.00  +13.70  16.06     61   +6.50 1 2 1 1 1   888    0 7.81 36.13 ----- 13.9 16.1 136.8 23.0 19.9 -22.7 19.5 -21.1 18.7 -20.5 19.2 -21.5
2025-12-03T09:17:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:17:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:17:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.303524
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:17:46.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:17:28', tmtdew=8.25, humidity=57.59, cloud=0.0, wind=18.03, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:17:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:17:46.687 [DEBUG] [Thread-114118] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:17:46.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:17:46.783 [DEBUG] [Thread-114121] [transport.py] [_log()] starting thread (client mode): 0xa27b0850
2025-12-03T09:17:46.783 [DEBUG] [Thread-114121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:17:46.798 [DEBUG] [Thread-114121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:17:46.798 [INFO] [Thread-114121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:17:46.805 [DEBUG] [Thread-114121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:17:46.805 [DEBUG] [Thread-114121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] client lang: <none>
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] server lang: <none>
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] kex follows: False
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] Compression: none
2025-12-03T09:17:46.806 [DEBUG] [Thread-114121] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:17:46.865 [DEBUG] [Thread-114121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:17:46.866 [DEBUG] [Thread-114121] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:17:46.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:17:46.867 [DEBUG] [Thread-114121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:17:46.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:17:46.922 [DEBUG] [Thread-114121] [transport.py] [_log()] userauth is OK
2025-12-03T09:17:46.922 [DEBUG] [Thread-114121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:17:46.922 [DEBUG] [Thread-114121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:17:46.922 [DEBUG] [Thread-114121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:17:46.922 [DEBUG] [Thread-114121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:17:46.950 [INFO] [Thread-114121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:17:46.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:17:46.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:17:47.850 [DEBUG] [Thread-114121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:17:47.850 [DEBUG] [Thread-114121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:17:47.898 [DEBUG] [Thread-114121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:17:47.898 [DEBUG] [Thread-114121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:17:47.907 [DEBUG] [Thread-114121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:17:47.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:17:47.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:17:47.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:17:47.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:17:47.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:17:47.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:17:47.942 [DEBUG] [Thread-114121] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:17:50.690 [DEBUG] [Thread-114123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:05.734 [DEBUG] [Thread-114124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:18:17.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:18:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:18:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 18), 8.13, 58.06, 0.0, 17.8, 13.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:18:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:18:00
2025-12-03T09:18:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:18:18.917 [DEBUG] [Thread-114125] [transport.py] [_log()] starting thread (client mode): 0xa27b2d40
2025-12-03T09:18:18.917 [DEBUG] [Thread-114125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:18:18.936 [DEBUG] [Thread-114125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:18:18.936 [INFO] [Thread-114125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:18:18.939 [DEBUG] [Thread-114125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:18:18.939 [DEBUG] [Thread-114125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:18:18.939 [DEBUG] [Thread-114125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:18:18.939 [DEBUG] [Thread-114125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] client lang: <none>
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] server lang: <none>
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] kex follows: False
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] Compression: none
2025-12-03T09:18:18.940 [DEBUG] [Thread-114125] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:18:18.956 [DEBUG] [Thread-114125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:18:18.957 [DEBUG] [Thread-114125] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:18:18.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:18:18.958 [DEBUG] [Thread-114125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:18:18.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:18:18.960 [DEBUG] [Thread-114125] [transport.py] [_log()] userauth is OK
2025-12-03T09:18:18.960 [DEBUG] [Thread-114125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:18:18.960 [DEBUG] [Thread-114125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:18:18.960 [DEBUG] [Thread-114125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:18:18.960 [DEBUG] [Thread-114125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:18:18.984 [INFO] [Thread-114125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:18:18.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:18:19.725 [DEBUG] [Thread-114125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:18:19.725 [DEBUG] [Thread-114125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:18:19.725 [DEBUG] [Thread-114125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:18:19.766 [DEBUG] [Thread-114125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:18:19.766 [DEBUG] [Thread-114125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:18:19.768 [DEBUG] [Thread-114125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:18:19.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:18:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:18:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:18:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:18:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:18:19.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:18:19.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:18:19.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:18:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:18:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.303871 -999.00  +13.90  10.86     61   +6.70 1 2 1 1 1   888    0 7.81 37.66 ----- 13.7 10.9 143.3 19.9 20.1 -21.4 19.6 -20.9 18.8 -20.7 19.3 -20.1
2025-12-03T09:18:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:18:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:18:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.303871
2025-12-03T09:18:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:18:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:18:19.789 [DEBUG] [Thread-114125] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:18:19.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:18:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:18:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:18:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:18:00', tmtdew=8.13, humidity=58.06, cloud=0.0, wind=17.8, temperature=13.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:17:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:18:19.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:18:19.891 [DEBUG] [Thread-114128] [transport.py] [_log()] starting thread (client mode): 0xa27c01c0
2025-12-03T09:18:19.891 [DEBUG] [Thread-114128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:18:19.907 [DEBUG] [Thread-114128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:18:19.907 [INFO] [Thread-114128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:19.916 [DEBUG] [Thread-114128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] client lang: <none>
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] server lang: <none>
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] kex follows: False
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:18:19.917 [DEBUG] [Thread-114128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:18:19.918 [DEBUG] [Thread-114128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:18:19.918 [DEBUG] [Thread-114128] [transport.py] [_log()] Compression: none
2025-12-03T09:18:19.918 [DEBUG] [Thread-114128] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:18:19.977 [DEBUG] [Thread-114128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:18:19.978 [DEBUG] [Thread-114128] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:18:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:18:19.979 [DEBUG] [Thread-114128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:18:19.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:18:20.033 [DEBUG] [Thread-114128] [transport.py] [_log()] userauth is OK
2025-12-03T09:18:20.034 [DEBUG] [Thread-114128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:18:20.034 [DEBUG] [Thread-114128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:18:20.034 [DEBUG] [Thread-114128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:18:20.034 [DEBUG] [Thread-114128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:18:20.053 [INFO] [Thread-114128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:18:20.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:18:20.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:18:20.766 [DEBUG] [Thread-114130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:20.875 [DEBUG] [Thread-114128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:18:20.876 [DEBUG] [Thread-114128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:18:20.924 [DEBUG] [Thread-114128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:18:20.924 [DEBUG] [Thread-114128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:18:20.933 [DEBUG] [Thread-114128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:18:20.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:18:20.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:18:20.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:18:20.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:18:20.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:18:20.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:18:20.971 [DEBUG] [Thread-114128] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:18:35.798 [DEBUG] [Thread-114131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:36.040 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:36.041 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:37.454 [DEBUG] [Thread-114132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:50.827 [DEBUG] [Thread-114133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:18:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:18:50.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:18:50.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 18, 32), 8.72, 55.89, 0.0, 24.21, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:18:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:18:32
2025-12-03T09:18:51.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:18:51.930 [DEBUG] [Thread-114134] [transport.py] [_log()] starting thread (client mode): 0xa271e7a0
2025-12-03T09:18:51.930 [DEBUG] [Thread-114134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:18:51.951 [DEBUG] [Thread-114134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:18:51.951 [INFO] [Thread-114134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] client lang: <none>
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] server lang: <none>
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] kex follows: False
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] Compression: none
2025-12-03T09:18:51.953 [DEBUG] [Thread-114134] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:18:51.971 [DEBUG] [Thread-114134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:18:51.971 [DEBUG] [Thread-114134] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:18:51.972 [DEBUG] [Thread-114134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:18:51.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:18:51.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:18:51.974 [DEBUG] [Thread-114134] [transport.py] [_log()] userauth is OK
2025-12-03T09:18:51.974 [DEBUG] [Thread-114134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:18:51.974 [DEBUG] [Thread-114134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:18:51.974 [DEBUG] [Thread-114134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:18:51.974 [DEBUG] [Thread-114134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:18:52.007 [INFO] [Thread-114134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:18:52.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:18:52.631 [DEBUG] [Thread-114134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:18:52.632 [DEBUG] [Thread-114134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:18:52.632 [DEBUG] [Thread-114134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:18:52.673 [DEBUG] [Thread-114134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:18:52.673 [DEBUG] [Thread-114134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:18:52.676 [DEBUG] [Thread-114134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:18:52.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:18:52.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:18:52.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:18:52.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:18:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:18:52.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:18:52.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.304219 -999.00  +14.30  19.04     61   +6.90 1 2 1 1 1   888    0 7.75 38.62 ----- 19.3 19.0 166.0 26.1 20.2 -20.6 19.8 -20.2 19.1 -19.0 19.5 -20.8
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:18:52.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.304219
2025-12-03T09:18:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:18:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:18:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:18:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:18:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:18:52.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:18:32', tmtdew=8.72, humidity=55.89, cloud=0.0, wind=24.21, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:18:04.522', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:18:52.704 [DEBUG] [Thread-114134] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:18:52.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:18:52.800 [DEBUG] [Thread-114137] [transport.py] [_log()] starting thread (client mode): 0xa27b0880
2025-12-03T09:18:52.800 [DEBUG] [Thread-114137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:18:52.815 [DEBUG] [Thread-114137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:18:52.815 [INFO] [Thread-114137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:18:52.822 [DEBUG] [Thread-114137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] client lang: <none>
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] server lang: <none>
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] kex follows: False
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] Compression: none
2025-12-03T09:18:52.823 [DEBUG] [Thread-114137] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:18:52.882 [DEBUG] [Thread-114137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:18:52.882 [DEBUG] [Thread-114137] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:18:52.883 [DEBUG] [Thread-114137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:18:52.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:18:52.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:18:52.937 [DEBUG] [Thread-114137] [transport.py] [_log()] userauth is OK
2025-12-03T09:18:52.938 [DEBUG] [Thread-114137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:18:52.938 [DEBUG] [Thread-114137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:18:52.938 [DEBUG] [Thread-114137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:18:52.938 [DEBUG] [Thread-114137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:18:52.957 [INFO] [Thread-114137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:18:52.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:18:52.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:18:53.798 [DEBUG] [Thread-114137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:18:53.798 [DEBUG] [Thread-114137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:18:53.846 [DEBUG] [Thread-114137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:18:53.846 [DEBUG] [Thread-114137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:18:53.854 [DEBUG] [Thread-114137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:18:53.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:18:53.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:18:53.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:18:53.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:18:53.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:18:53.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:18:53.890 [DEBUG] [Thread-114137] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:19:05.855 [DEBUG] [Thread-114139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:20.889 [DEBUG] [Thread-114140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:23.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:19:23.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:19:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:19:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 19, 5), 8.77, 55.5, 0.0, 23.1, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:19:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:19:05
2025-12-03T09:19:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:19:24.851 [DEBUG] [Thread-114141] [transport.py] [_log()] starting thread (client mode): 0xa271f5b0
2025-12-03T09:19:24.851 [DEBUG] [Thread-114141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:19:24.872 [DEBUG] [Thread-114141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:19:24.872 [INFO] [Thread-114141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] client lang: <none>
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] server lang: <none>
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] kex follows: False
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] Compression: none
2025-12-03T09:19:24.876 [DEBUG] [Thread-114141] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:19:24.894 [DEBUG] [Thread-114141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:19:24.894 [DEBUG] [Thread-114141] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:19:24.895 [DEBUG] [Thread-114141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:19:24.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:19:24.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:19:24.896 [DEBUG] [Thread-114141] [transport.py] [_log()] userauth is OK
2025-12-03T09:19:24.897 [DEBUG] [Thread-114141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:19:24.897 [DEBUG] [Thread-114141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:19:24.897 [DEBUG] [Thread-114141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:19:24.897 [DEBUG] [Thread-114141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:19:24.915 [INFO] [Thread-114141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:19:24.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:19:25.614 [DEBUG] [Thread-114141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:19:25.614 [DEBUG] [Thread-114141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:19:25.615 [DEBUG] [Thread-114141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:19:25.656 [DEBUG] [Thread-114141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:19:25.656 [DEBUG] [Thread-114141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:19:25.658 [DEBUG] [Thread-114141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:19:25.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:19:25.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:19:25.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:19:25.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:19:25.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:19:25.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:19:25.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:19:25.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.304566 -999.00  +14.20  15.34     61   +6.80 1 2 1 1 1   888    0 7.96 39.02 ----- 14.6 15.3 155.8 25.8 20.4 -21.0 19.9 -19.1 19.1 -19.8 19.5 -21.3
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.304566
2025-12-03T09:19:25.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:19:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:19:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:19:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:19:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:19:25.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:19:05', tmtdew=8.77, humidity=55.5, cloud=0.0, wind=23.1, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:18:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:19:25.678 [DEBUG] [Thread-114141] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:19:25.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:19:25.773 [DEBUG] [Thread-114144] [transport.py] [_log()] starting thread (client mode): 0xa27ee290
2025-12-03T09:19:25.773 [DEBUG] [Thread-114144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:19:25.786 [DEBUG] [Thread-114144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:19:25.786 [INFO] [Thread-114144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:19:25.793 [DEBUG] [Thread-114144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] client lang: <none>
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] server lang: <none>
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] kex follows: False
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:19:25.794 [DEBUG] [Thread-114144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:19:25.795 [DEBUG] [Thread-114144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:19:25.795 [DEBUG] [Thread-114144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:19:25.795 [DEBUG] [Thread-114144] [transport.py] [_log()] Compression: none
2025-12-03T09:19:25.795 [DEBUG] [Thread-114144] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:19:25.854 [DEBUG] [Thread-114144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:19:25.855 [DEBUG] [Thread-114144] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:19:25.855 [DEBUG] [Thread-114144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:19:25.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:19:25.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:19:25.913 [DEBUG] [Thread-114144] [transport.py] [_log()] userauth is OK
2025-12-03T09:19:25.914 [DEBUG] [Thread-114144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:19:25.914 [DEBUG] [Thread-114144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:19:25.914 [DEBUG] [Thread-114144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:19:25.914 [DEBUG] [Thread-114144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:19:25.936 [INFO] [Thread-114144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:19:25.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:19:25.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:19:26.809 [DEBUG] [Thread-114144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:19:26.809 [DEBUG] [Thread-114144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:19:26.856 [DEBUG] [Thread-114144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:19:26.856 [DEBUG] [Thread-114144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:19:26.865 [DEBUG] [Thread-114144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:19:26.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:19:26.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:19:26.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:19:26.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:19:26.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:19:26.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:19:26.902 [DEBUG] [Thread-114144] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:19:35.919 [DEBUG] [Thread-114146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:36.183 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:36.184 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:37.485 [DEBUG] [Thread-114147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:50.962 [DEBUG] [Thread-114148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:19:56.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:19:56.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:19:56.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:19:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 19, 37), 8.85, 55.52, 0.0, 21.16, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:19:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:19:37
2025-12-03T09:19:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:19:57.851 [DEBUG] [Thread-114149] [transport.py] [_log()] starting thread (client mode): 0xa271d6f0
2025-12-03T09:19:57.851 [DEBUG] [Thread-114149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:19:57.872 [DEBUG] [Thread-114149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:19:57.873 [INFO] [Thread-114149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] client lang: <none>
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] server lang: <none>
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] kex follows: False
2025-12-03T09:19:57.876 [DEBUG] [Thread-114149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] Compression: none
2025-12-03T09:19:57.877 [DEBUG] [Thread-114149] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:19:57.894 [DEBUG] [Thread-114149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:19:57.894 [DEBUG] [Thread-114149] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:19:57.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:19:57.895 [DEBUG] [Thread-114149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:19:57.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:19:57.897 [DEBUG] [Thread-114149] [transport.py] [_log()] userauth is OK
2025-12-03T09:19:57.898 [DEBUG] [Thread-114149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:19:57.898 [DEBUG] [Thread-114149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:19:57.898 [DEBUG] [Thread-114149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:19:57.898 [DEBUG] [Thread-114149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:19:57.921 [INFO] [Thread-114149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:19:57.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:19:58.554 [DEBUG] [Thread-114149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:19:58.554 [DEBUG] [Thread-114149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:19:58.554 [DEBUG] [Thread-114149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:19:58.595 [DEBUG] [Thread-114149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:19:58.595 [DEBUG] [Thread-114149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:19:58.598 [DEBUG] [Thread-114149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:19:58.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:19:58.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:19:58.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:19:58.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:19:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:19:58.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:19:58.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.304913 -999.00  +14.50  14.84     60   +6.90 1 1 1 1 1   888    0 7.97 44.11 ----- 16.3 14.8 158.1 24.5 20.5 -21.7 19.6 -25.6 19.1 -21.5 19.6 -21.1
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:19:58.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.304913
2025-12-03T09:19:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:19:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:19:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:19:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:19:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:19:58.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:19:37', tmtdew=8.85, humidity=55.52, cloud=0.0, wind=21.16, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:19:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:19:58.624 [DEBUG] [Thread-114149] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:19:58.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:19:58.730 [DEBUG] [Thread-114152] [transport.py] [_log()] starting thread (client mode): 0xa27c2ef0
2025-12-03T09:19:58.730 [DEBUG] [Thread-114152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:19:58.745 [DEBUG] [Thread-114152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:19:58.746 [INFO] [Thread-114152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:19:58.754 [DEBUG] [Thread-114152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:19:58.754 [DEBUG] [Thread-114152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:19:58.755 [DEBUG] [Thread-114152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] client lang: <none>
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] server lang: <none>
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] kex follows: False
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] Compression: none
2025-12-03T09:19:58.756 [DEBUG] [Thread-114152] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:19:58.823 [DEBUG] [Thread-114152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:19:58.824 [DEBUG] [Thread-114152] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:19:58.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:19:58.825 [DEBUG] [Thread-114152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:19:58.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:19:58.892 [DEBUG] [Thread-114152] [transport.py] [_log()] userauth is OK
2025-12-03T09:19:58.892 [DEBUG] [Thread-114152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:19:58.892 [DEBUG] [Thread-114152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:19:58.892 [DEBUG] [Thread-114152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:19:58.892 [DEBUG] [Thread-114152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:19:58.913 [INFO] [Thread-114152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:19:58.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:19:58.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:19:59.732 [DEBUG] [Thread-114152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:19:59.733 [DEBUG] [Thread-114152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:19:59.781 [DEBUG] [Thread-114152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:19:59.782 [DEBUG] [Thread-114152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:19:59.791 [DEBUG] [Thread-114152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:19:59.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:19:59.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:19:59.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:19:59.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:19:59.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:19:59.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:19:59.842 [DEBUG] [Thread-114152] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:20:05.985 [DEBUG] [Thread-114154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:21.027 [DEBUG] [Thread-114155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:29.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:20:29.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:20:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:20:30.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 20, 9), 8.8, 55.64, 0.0, 23.11, 14.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:20:30.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:20:09
2025-12-03T09:20:30.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:20:30.832 [DEBUG] [Thread-114156] [transport.py] [_log()] starting thread (client mode): 0xa27c0490
2025-12-03T09:20:30.832 [DEBUG] [Thread-114156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:20:30.850 [DEBUG] [Thread-114156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:20:30.850 [INFO] [Thread-114156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] client lang: <none>
2025-12-03T09:20:30.853 [DEBUG] [Thread-114156] [transport.py] [_log()] server lang: <none>
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] kex follows: False
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] Compression: none
2025-12-03T09:20:30.854 [DEBUG] [Thread-114156] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:20:30.872 [DEBUG] [Thread-114156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:20:30.872 [DEBUG] [Thread-114156] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:20:30.872 [DEBUG] [Thread-114156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:20:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:20:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:20:30.873 [DEBUG] [Thread-114156] [transport.py] [_log()] userauth is OK
2025-12-03T09:20:30.873 [DEBUG] [Thread-114156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:20:30.873 [DEBUG] [Thread-114156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:20:30.873 [DEBUG] [Thread-114156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:20:30.873 [DEBUG] [Thread-114156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:20:30.901 [INFO] [Thread-114156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:20:30.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:20:31.671 [DEBUG] [Thread-114156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:20:31.671 [DEBUG] [Thread-114156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:20:31.671 [DEBUG] [Thread-114156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:20:31.712 [DEBUG] [Thread-114156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:20:31.712 [DEBUG] [Thread-114156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:20:31.717 [DEBUG] [Thread-114156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:20:31.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:20:31.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:20:31.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:20:31.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:20:31.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:20:31.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:20:31.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:20:31.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.305260 -999.00  +14.60  13.75     59   +6.80 1 2 1 1 1   888    0 8.16 51.09 ----- 23.1 13.8 159.5 22.8 20.6 -21.6 20.0 -19.5 19.2 -19.5 19.8 -20.8
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.305260
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:20:31.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:20:09', tmtdew=8.8, humidity=55.64, cloud=0.0, wind=23.11, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:19:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:20:31.735 [DEBUG] [Thread-114156] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:20:31.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:20:31.824 [DEBUG] [Thread-114159] [transport.py] [_log()] starting thread (client mode): 0xa27ed6f0
2025-12-03T09:20:31.824 [DEBUG] [Thread-114159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:20:31.840 [DEBUG] [Thread-114159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:20:31.840 [INFO] [Thread-114159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] client lang: <none>
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] server lang: <none>
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] kex follows: False
2025-12-03T09:20:31.849 [DEBUG] [Thread-114159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] Compression: none
2025-12-03T09:20:31.850 [DEBUG] [Thread-114159] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:20:31.911 [DEBUG] [Thread-114159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:20:31.911 [DEBUG] [Thread-114159] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:20:31.911 [DEBUG] [Thread-114159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:20:31.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:20:31.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:20:31.971 [DEBUG] [Thread-114159] [transport.py] [_log()] userauth is OK
2025-12-03T09:20:31.971 [DEBUG] [Thread-114159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:20:31.971 [DEBUG] [Thread-114159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:20:31.971 [DEBUG] [Thread-114159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:20:31.971 [DEBUG] [Thread-114159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:20:31.986 [INFO] [Thread-114159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:20:31.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:20:31.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:20:32.832 [DEBUG] [Thread-114159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:20:32.832 [DEBUG] [Thread-114159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:20:32.879 [DEBUG] [Thread-114159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:20:32.879 [DEBUG] [Thread-114159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:20:32.887 [DEBUG] [Thread-114159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:20:32.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:20:32.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:20:32.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:20:32.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:20:32.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:20:32.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:20:32.919 [DEBUG] [Thread-114159] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:20:36.058 [DEBUG] [Thread-114161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:36.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:36.323 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:37.527 [DEBUG] [Thread-114162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:20:51.103 [DEBUG] [Thread-114163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:02.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:21:02.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:21:02.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:21:03.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 20, 41), 8.58, 56.16, 0.0, 25.11, 14.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:21:03.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:20:41
2025-12-03T09:21:03.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:21:03.894 [DEBUG] [Thread-114164] [transport.py] [_log()] starting thread (client mode): 0xa27ed7e0
2025-12-03T09:21:03.894 [DEBUG] [Thread-114164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:21:03.914 [DEBUG] [Thread-114164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:21:03.914 [INFO] [Thread-114164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:03.915 [DEBUG] [Thread-114164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] client lang: <none>
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] server lang: <none>
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] kex follows: False
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] Compression: none
2025-12-03T09:21:03.916 [DEBUG] [Thread-114164] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:21:03.924 [DEBUG] [Thread-114164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:21:03.924 [DEBUG] [Thread-114164] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:21:03.924 [DEBUG] [Thread-114164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:21:03.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:21:03.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:21:03.925 [DEBUG] [Thread-114164] [transport.py] [_log()] userauth is OK
2025-12-03T09:21:03.925 [DEBUG] [Thread-114164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:21:03.925 [DEBUG] [Thread-114164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:21:03.925 [DEBUG] [Thread-114164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:21:03.925 [DEBUG] [Thread-114164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:21:03.945 [INFO] [Thread-114164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:21:03.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:21:04.552 [DEBUG] [Thread-114164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:21:04.552 [DEBUG] [Thread-114164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:21:04.552 [DEBUG] [Thread-114164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:21:04.593 [DEBUG] [Thread-114164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:21:04.593 [DEBUG] [Thread-114164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:21:04.596 [DEBUG] [Thread-114164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:21:04.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:21:04.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:21:04.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:21:04.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:21:04.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:21:04.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:21:04.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:21:04.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:21:04.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:21:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.305607 -999.00  +14.60  21.12     59   +6.70 1 2 1 1 1   888    0 8.49 56.99 ----- 15.5 21.1 168.0 24.1 20.9 -20.5 20.2 -19.5 19.4 -19.6 19.9 -21.9
2025-12-03T09:21:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:21:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:21:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.305607
2025-12-03T09:21:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:21:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:21:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:21:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:21:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:21:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:20:41', tmtdew=8.58, humidity=56.16, cloud=0.0, wind=25.11, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:20:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:21:04.620 [DEBUG] [Thread-114164] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:21:04.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:21:04.717 [DEBUG] [Thread-114167] [transport.py] [_log()] starting thread (client mode): 0xa270a8c0
2025-12-03T09:21:04.718 [DEBUG] [Thread-114167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:21:04.732 [DEBUG] [Thread-114167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:21:04.732 [INFO] [Thread-114167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:04.740 [DEBUG] [Thread-114167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] client lang: <none>
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] server lang: <none>
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] kex follows: False
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] Compression: none
2025-12-03T09:21:04.741 [DEBUG] [Thread-114167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:21:04.796 [DEBUG] [Thread-114167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:21:04.796 [DEBUG] [Thread-114167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:21:04.796 [DEBUG] [Thread-114167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:21:04.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:21:04.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:21:04.854 [DEBUG] [Thread-114167] [transport.py] [_log()] userauth is OK
2025-12-03T09:21:04.854 [DEBUG] [Thread-114167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:21:04.854 [DEBUG] [Thread-114167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:21:04.855 [DEBUG] [Thread-114167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:21:04.855 [DEBUG] [Thread-114167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:21:04.875 [INFO] [Thread-114167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:21:04.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:21:04.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:21:05.744 [DEBUG] [Thread-114167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:21:05.745 [DEBUG] [Thread-114167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:21:05.793 [DEBUG] [Thread-114167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:21:05.793 [DEBUG] [Thread-114167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:21:05.802 [DEBUG] [Thread-114167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:21:05.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:21:05.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:21:05.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:21:05.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:21:05.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:21:05.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:21:05.837 [DEBUG] [Thread-114167] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:21:06.134 [DEBUG] [Thread-114169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:21.167 [DEBUG] [Thread-114170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:21:35.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:21:35.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:21:36.199 [DEBUG] [Thread-114171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:36.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:36.465 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 21, 13), 8.55, 56.26, 0.0, 23.78, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:21:36.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:21:13
2025-12-03T09:21:36.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:21:36.810 [DEBUG] [Thread-114172] [transport.py] [_log()] starting thread (client mode): 0xa2786a40
2025-12-03T09:21:36.810 [DEBUG] [Thread-114172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:21:36.830 [DEBUG] [Thread-114172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:21:36.830 [INFO] [Thread-114172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] client lang: <none>
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] server lang: <none>
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] kex follows: False
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] Compression: none
2025-12-03T09:21:36.833 [DEBUG] [Thread-114172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:21:36.850 [DEBUG] [Thread-114172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:21:36.850 [DEBUG] [Thread-114172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:21:36.851 [DEBUG] [Thread-114172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:21:36.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:21:36.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:21:36.852 [DEBUG] [Thread-114172] [transport.py] [_log()] userauth is OK
2025-12-03T09:21:36.853 [DEBUG] [Thread-114172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:21:36.853 [DEBUG] [Thread-114172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:21:36.853 [DEBUG] [Thread-114172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:21:36.853 [DEBUG] [Thread-114172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:21:36.869 [INFO] [Thread-114172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:21:36.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:21:37.567 [DEBUG] [Thread-114174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:21:37.603 [DEBUG] [Thread-114172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:21:37.603 [DEBUG] [Thread-114172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:21:37.603 [DEBUG] [Thread-114172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:21:37.644 [DEBUG] [Thread-114172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:21:37.644 [DEBUG] [Thread-114172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:21:37.646 [DEBUG] [Thread-114172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:21:37.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:21:37.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:21:37.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:21:37.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:21:37.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:21:37.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:21:37.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:21:37.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.306302 -999.00  +14.20  20.48     61   +6.70 1 2 1 1 1   888    0 8.79 67.65 ----- 14.2 20.5 144.8 26.5 20.7 -26.2 20.0 -22.5 19.1 -22.9 19.6 -24.3
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.306302
2025-12-03T09:21:37.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:21:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:21:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:21:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:21:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:21:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:21:13', tmtdew=8.55, humidity=56.26, cloud=0.0, wind=23.78, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:21:04.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:21:37.669 [DEBUG] [Thread-114172] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:21:37.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:21:37.768 [DEBUG] [Thread-114176] [transport.py] [_log()] starting thread (client mode): 0xa27b07f0
2025-12-03T09:21:37.768 [DEBUG] [Thread-114176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:21:37.783 [DEBUG] [Thread-114176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:21:37.783 [INFO] [Thread-114176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:21:37.791 [DEBUG] [Thread-114176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] client lang: <none>
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] server lang: <none>
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] kex follows: False
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:21:37.792 [DEBUG] [Thread-114176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:21:37.793 [DEBUG] [Thread-114176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:21:37.793 [DEBUG] [Thread-114176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:21:37.793 [DEBUG] [Thread-114176] [transport.py] [_log()] Compression: none
2025-12-03T09:21:37.793 [DEBUG] [Thread-114176] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:21:37.850 [DEBUG] [Thread-114176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:21:37.851 [DEBUG] [Thread-114176] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:21:37.852 [DEBUG] [Thread-114176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:21:37.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:21:37.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:21:37.912 [DEBUG] [Thread-114176] [transport.py] [_log()] userauth is OK
2025-12-03T09:21:37.912 [DEBUG] [Thread-114176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:21:37.912 [DEBUG] [Thread-114176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:21:37.913 [DEBUG] [Thread-114176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:21:37.913 [DEBUG] [Thread-114176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:21:37.934 [INFO] [Thread-114176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:21:37.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:21:37.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:21:38.768 [DEBUG] [Thread-114176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:21:38.768 [DEBUG] [Thread-114176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:21:38.816 [DEBUG] [Thread-114176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:21:38.817 [DEBUG] [Thread-114176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:21:38.826 [DEBUG] [Thread-114176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:21:38.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:21:38.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:21:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:21:38.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:21:38.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:21:38.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:21:38.859 [DEBUG] [Thread-114176] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:21:51.224 [DEBUG] [Thread-114178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:06.267 [DEBUG] [Thread-114179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:08.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:22:08.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:22:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:22:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 21, 45), 8.28, 57.18, 0.0, 20.1, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:22:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:21:45
2025-12-03T09:22:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:22:09.814 [DEBUG] [Thread-114180] [transport.py] [_log()] starting thread (client mode): 0xa2708a00
2025-12-03T09:22:09.814 [DEBUG] [Thread-114180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:22:09.834 [DEBUG] [Thread-114180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:22:09.834 [INFO] [Thread-114180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:22:09.837 [DEBUG] [Thread-114180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:22:09.843 [DEBUG] [Thread-114180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:22:09.843 [DEBUG] [Thread-114180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:22:09.843 [DEBUG] [Thread-114180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:09.843 [DEBUG] [Thread-114180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:09.843 [DEBUG] [Thread-114180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] client lang: <none>
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] server lang: <none>
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] kex follows: False
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] Compression: none
2025-12-03T09:22:09.844 [DEBUG] [Thread-114180] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:22:09.863 [DEBUG] [Thread-114180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:22:09.863 [DEBUG] [Thread-114180] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:22:09.864 [DEBUG] [Thread-114180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:22:09.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:22:09.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:22:09.865 [DEBUG] [Thread-114180] [transport.py] [_log()] userauth is OK
2025-12-03T09:22:09.866 [DEBUG] [Thread-114180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:22:09.866 [DEBUG] [Thread-114180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:22:09.866 [DEBUG] [Thread-114180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:22:09.866 [DEBUG] [Thread-114180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:22:09.883 [INFO] [Thread-114180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:22:09.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:22:10.508 [DEBUG] [Thread-114180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:22:10.508 [DEBUG] [Thread-114180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:22:10.508 [DEBUG] [Thread-114180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:22:10.549 [DEBUG] [Thread-114180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:22:10.549 [DEBUG] [Thread-114180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:22:10.551 [DEBUG] [Thread-114180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:22:10.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:22:10.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:22:10.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:22:10.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:22:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:22:10.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:22:10.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:22:10.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.306650 -999.00  +14.10  15.64     62   +6.90 1 1 1 1 1   888    0 9.03 73.24 ----- 15.0 15.6 158.0 24.1 20.4 -25.2 19.8 -24.1 18.9 -24.0 19.4 -25.6
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.306650
2025-12-03T09:22:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:22:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:22:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:22:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:22:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:22:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:21:45', tmtdew=8.28, humidity=57.18, cloud=0.0, wind=20.1, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:21:34.560', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:22:10.578 [DEBUG] [Thread-114180] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:22:10.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:22:10.672 [DEBUG] [Thread-114183] [transport.py] [_log()] starting thread (client mode): 0xa51cf1c0
2025-12-03T09:22:10.672 [DEBUG] [Thread-114183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:22:10.688 [DEBUG] [Thread-114183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:22:10.688 [INFO] [Thread-114183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:22:10.695 [DEBUG] [Thread-114183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] client lang: <none>
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] server lang: <none>
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] kex follows: False
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] Compression: none
2025-12-03T09:22:10.696 [DEBUG] [Thread-114183] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:22:10.753 [DEBUG] [Thread-114183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:22:10.753 [DEBUG] [Thread-114183] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:22:10.754 [DEBUG] [Thread-114183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:22:10.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:22:10.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:22:10.813 [DEBUG] [Thread-114183] [transport.py] [_log()] userauth is OK
2025-12-03T09:22:10.814 [DEBUG] [Thread-114183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:22:10.814 [DEBUG] [Thread-114183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:22:10.814 [DEBUG] [Thread-114183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:22:10.814 [DEBUG] [Thread-114183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:22:10.832 [INFO] [Thread-114183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:22:10.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:22:10.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:22:11.674 [DEBUG] [Thread-114183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:22:11.674 [DEBUG] [Thread-114183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:22:11.723 [DEBUG] [Thread-114183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:22:11.723 [DEBUG] [Thread-114183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:22:11.732 [DEBUG] [Thread-114183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:22:11.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:22:11.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:22:11.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:22:11.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:22:11.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:22:11.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:22:11.767 [DEBUG] [Thread-114183] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:22:21.293 [DEBUG] [Thread-114185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:36.336 [DEBUG] [Thread-114186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:36.618 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:36.619 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:37.618 [DEBUG] [Thread-114187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:22:41.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:22:41.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:22:41.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:22:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 22, 17), 8.27, 57.24, 0.0, 23.82, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:22:42.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:22:17
2025-12-03T09:22:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:22:42.714 [DEBUG] [Thread-114188] [transport.py] [_log()] starting thread (client mode): 0xa51cfaf0
2025-12-03T09:22:42.714 [DEBUG] [Thread-114188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:22:42.733 [DEBUG] [Thread-114188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:22:42.734 [INFO] [Thread-114188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] client lang: <none>
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] server lang: <none>
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] kex follows: False
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:22:42.737 [DEBUG] [Thread-114188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:22:42.738 [DEBUG] [Thread-114188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:22:42.738 [DEBUG] [Thread-114188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:22:42.738 [DEBUG] [Thread-114188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:22:42.738 [DEBUG] [Thread-114188] [transport.py] [_log()] Compression: none
2025-12-03T09:22:42.738 [DEBUG] [Thread-114188] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:22:42.754 [DEBUG] [Thread-114188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:22:42.755 [DEBUG] [Thread-114188] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:22:42.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:22:42.756 [DEBUG] [Thread-114188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:22:42.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:22:42.759 [DEBUG] [Thread-114188] [transport.py] [_log()] userauth is OK
2025-12-03T09:22:42.759 [DEBUG] [Thread-114188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:22:42.759 [DEBUG] [Thread-114188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:22:42.759 [DEBUG] [Thread-114188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:22:42.759 [DEBUG] [Thread-114188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:22:42.794 [INFO] [Thread-114188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:22:42.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:22:43.569 [DEBUG] [Thread-114188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:22:43.569 [DEBUG] [Thread-114188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:22:43.570 [DEBUG] [Thread-114188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:22:43.610 [DEBUG] [Thread-114188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:22:43.610 [DEBUG] [Thread-114188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:22:43.613 [DEBUG] [Thread-114188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:22:43.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:22:43.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:22:43.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:22:43.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:22:43.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:22:43.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:22:43.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:22:43.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:22:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:22:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.306996 -999.00  +14.00  18.81     61   +6.80 1 1 1 1 1   888    0 9.02 73.06 ----- 15.1 18.8 165.6 27.2 20.1 -26.4 19.3 -26.6 18.7 -24.3 19.2 -25.6
2025-12-03T09:22:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:22:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:22:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.306996
2025-12-03T09:22:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:22:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:22:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:22:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:22:43.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:22:43.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:22:17', tmtdew=8.27, humidity=57.24, cloud=0.0, wind=23.82, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:22:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:22:43.639 [DEBUG] [Thread-114188] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:22:43.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:22:43.735 [DEBUG] [Thread-114191] [transport.py] [_log()] starting thread (client mode): 0xa27e83a0
2025-12-03T09:22:43.735 [DEBUG] [Thread-114191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:22:43.752 [DEBUG] [Thread-114191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:22:43.752 [INFO] [Thread-114191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:22:43.759 [DEBUG] [Thread-114191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] client lang: <none>
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] server lang: <none>
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] kex follows: False
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:22:43.760 [DEBUG] [Thread-114191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:22:43.761 [DEBUG] [Thread-114191] [transport.py] [_log()] Compression: none
2025-12-03T09:22:43.761 [DEBUG] [Thread-114191] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:22:43.817 [DEBUG] [Thread-114191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:22:43.818 [DEBUG] [Thread-114191] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:22:43.818 [DEBUG] [Thread-114191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:22:43.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:22:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:22:43.873 [DEBUG] [Thread-114191] [transport.py] [_log()] userauth is OK
2025-12-03T09:22:43.874 [DEBUG] [Thread-114191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:22:43.874 [DEBUG] [Thread-114191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:22:43.874 [DEBUG] [Thread-114191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:22:43.874 [DEBUG] [Thread-114191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:22:43.893 [INFO] [Thread-114191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:22:43.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:22:43.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:22:44.705 [DEBUG] [Thread-114191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:22:44.706 [DEBUG] [Thread-114191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:22:44.754 [DEBUG] [Thread-114191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:22:44.754 [DEBUG] [Thread-114191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:22:44.763 [DEBUG] [Thread-114191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:22:44.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:22:44.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:22:44.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:22:44.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:22:44.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:22:44.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:22:44.798 [DEBUG] [Thread-114191] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:22:51.371 [DEBUG] [Thread-114193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:06.411 [DEBUG] [Thread-114194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:14.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:23:14.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:23:14.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:23:15.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 22, 49), 8.41, 56.88, 0.0, 23.71, 13.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:23:15.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:22:49
2025-12-03T09:23:15.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:23:15.776 [DEBUG] [Thread-114195] [transport.py] [_log()] starting thread (client mode): 0xa271cb50
2025-12-03T09:23:15.776 [DEBUG] [Thread-114195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:23:15.796 [DEBUG] [Thread-114195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:23:15.796 [INFO] [Thread-114195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:23:15.799 [DEBUG] [Thread-114195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] client lang: <none>
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] server lang: <none>
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] kex follows: False
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:23:15.800 [DEBUG] [Thread-114195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:23:15.801 [DEBUG] [Thread-114195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:23:15.801 [DEBUG] [Thread-114195] [transport.py] [_log()] Compression: none
2025-12-03T09:23:15.801 [DEBUG] [Thread-114195] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:23:15.818 [DEBUG] [Thread-114195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:23:15.819 [DEBUG] [Thread-114195] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:23:15.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:23:15.820 [DEBUG] [Thread-114195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:23:15.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:23:15.822 [DEBUG] [Thread-114195] [transport.py] [_log()] userauth is OK
2025-12-03T09:23:15.822 [DEBUG] [Thread-114195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:23:15.823 [DEBUG] [Thread-114195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:23:15.823 [DEBUG] [Thread-114195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:23:15.823 [DEBUG] [Thread-114195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:23:15.841 [INFO] [Thread-114195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:23:15.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:23:16.493 [DEBUG] [Thread-114195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:23:16.493 [DEBUG] [Thread-114195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:23:16.493 [DEBUG] [Thread-114195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:23:16.534 [DEBUG] [Thread-114195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:23:16.534 [DEBUG] [Thread-114195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:23:16.537 [DEBUG] [Thread-114195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:23:16.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:23:16.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:23:16.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:23:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:23:16.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:23:16.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:23:16.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:23:16.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:23:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:23:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.307344 -999.00  +14.20  15.16     61   +6.80 1 1 1 1 1   888    0 9.02 69.83 ----- 19.5 15.2 146.5 22.6 20.0 -26.2 19.4 -23.9 18.7 -24.2 19.1 -24.8
2025-12-03T09:23:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:23:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:23:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.307344
2025-12-03T09:23:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:23:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:23:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:23:16.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:23:16.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:23:16.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:22:49', tmtdew=8.41, humidity=56.88, cloud=0.0, wind=23.71, temperature=13.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:22:34.522', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:23:16.564 [DEBUG] [Thread-114195] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:23:16.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:23:16.660 [DEBUG] [Thread-114198] [transport.py] [_log()] starting thread (client mode): 0xa271fc40
2025-12-03T09:23:16.661 [DEBUG] [Thread-114198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:23:16.676 [DEBUG] [Thread-114198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:23:16.676 [INFO] [Thread-114198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:16.684 [DEBUG] [Thread-114198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] client lang: <none>
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] server lang: <none>
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] kex follows: False
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:23:16.685 [DEBUG] [Thread-114198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:23:16.686 [DEBUG] [Thread-114198] [transport.py] [_log()] Compression: none
2025-12-03T09:23:16.686 [DEBUG] [Thread-114198] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:23:16.742 [DEBUG] [Thread-114198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:23:16.742 [DEBUG] [Thread-114198] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:23:16.743 [DEBUG] [Thread-114198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:23:16.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:23:16.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:23:16.798 [DEBUG] [Thread-114198] [transport.py] [_log()] userauth is OK
2025-12-03T09:23:16.798 [DEBUG] [Thread-114198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:23:16.798 [DEBUG] [Thread-114198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:23:16.799 [DEBUG] [Thread-114198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:23:16.799 [DEBUG] [Thread-114198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:23:16.820 [INFO] [Thread-114198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:23:16.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:23:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:23:17.670 [DEBUG] [Thread-114198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:23:17.671 [DEBUG] [Thread-114198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:23:17.719 [DEBUG] [Thread-114198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:23:17.719 [DEBUG] [Thread-114198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:23:17.728 [DEBUG] [Thread-114198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:23:17.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:23:17.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:23:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:23:17.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:23:17.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:23:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:23:17.764 [DEBUG] [Thread-114198] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:23:21.434 [DEBUG] [Thread-114200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:36.470 [DEBUG] [Thread-114201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:36.763 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:36.764 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:37.652 [DEBUG] [Thread-114202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:23:47.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:23:47.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:23:47.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:23:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 23, 20), 8.39, 56.96, 0.0, 23.66, 13.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:23:48.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:23:20
2025-12-03T09:23:48.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:23:48.727 [DEBUG] [Thread-114203] [transport.py] [_log()] starting thread (client mode): 0xa51ce740
2025-12-03T09:23:48.727 [DEBUG] [Thread-114203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:23:48.747 [DEBUG] [Thread-114203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:23:48.747 [INFO] [Thread-114203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:48.749 [DEBUG] [Thread-114203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] client lang: <none>
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] server lang: <none>
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] kex follows: False
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] Compression: none
2025-12-03T09:23:48.750 [DEBUG] [Thread-114203] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:23:48.765 [DEBUG] [Thread-114203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:23:48.774 [DEBUG] [Thread-114203] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:23:48.774 [DEBUG] [Thread-114203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:23:48.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:23:48.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:23:48.775 [DEBUG] [Thread-114203] [transport.py] [_log()] userauth is OK
2025-12-03T09:23:48.776 [DEBUG] [Thread-114203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:23:48.776 [DEBUG] [Thread-114203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:23:48.776 [DEBUG] [Thread-114203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:23:48.776 [DEBUG] [Thread-114203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:23:48.793 [INFO] [Thread-114203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:23:48.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:23:49.567 [DEBUG] [Thread-114203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:23:49.568 [DEBUG] [Thread-114203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:23:49.568 [DEBUG] [Thread-114203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:23:49.609 [DEBUG] [Thread-114203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:23:49.609 [DEBUG] [Thread-114203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:23:49.612 [DEBUG] [Thread-114203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:23:49.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:23:49.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:23:49.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:23:49.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:23:49.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:23:49.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:23:49.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:23:49.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:23:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:23:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.307691 -999.00  +14.10  15.69     61   +6.70 1 1 1 1 1   888    0 9.11 77.06 ----- 18.2 15.7 129.4 24.2 19.9 -25.1 19.3 -23.7 18.6 -24.0 19.1 -24.3
2025-12-03T09:23:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:23:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:23:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.307691
2025-12-03T09:23:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:23:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:23:49.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:23:49.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:23:49.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:23:49.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:23:20', tmtdew=8.39, humidity=56.96, cloud=0.0, wind=23.66, temperature=13.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:23:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:23:49.636 [DEBUG] [Thread-114203] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:23:49.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:23:49.732 [DEBUG] [Thread-114206] [transport.py] [_log()] starting thread (client mode): 0xa27875b0
2025-12-03T09:23:49.732 [DEBUG] [Thread-114206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:23:49.748 [DEBUG] [Thread-114206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:23:49.748 [INFO] [Thread-114206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] client lang: <none>
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] server lang: <none>
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] kex follows: False
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:23:49.756 [DEBUG] [Thread-114206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:23:49.757 [DEBUG] [Thread-114206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:23:49.757 [DEBUG] [Thread-114206] [transport.py] [_log()] Compression: none
2025-12-03T09:23:49.757 [DEBUG] [Thread-114206] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:23:49.813 [DEBUG] [Thread-114206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:23:49.814 [DEBUG] [Thread-114206] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:23:49.814 [DEBUG] [Thread-114206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:23:49.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:23:49.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:23:49.869 [DEBUG] [Thread-114206] [transport.py] [_log()] userauth is OK
2025-12-03T09:23:49.869 [DEBUG] [Thread-114206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:23:49.870 [DEBUG] [Thread-114206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:23:49.870 [DEBUG] [Thread-114206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:23:49.870 [DEBUG] [Thread-114206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:23:49.889 [INFO] [Thread-114206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:23:49.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:23:49.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:23:50.743 [DEBUG] [Thread-114206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:23:50.743 [DEBUG] [Thread-114206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:23:50.791 [DEBUG] [Thread-114206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:23:50.791 [DEBUG] [Thread-114206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:23:50.800 [DEBUG] [Thread-114206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:23:50.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:23:50.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:23:50.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:23:50.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:23:50.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:23:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:23:50.835 [DEBUG] [Thread-114206] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:23:51.503 [DEBUG] [Thread-114208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:06.551 [DEBUG] [Thread-114209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:24:20.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:24:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:24:21.579 [DEBUG] [Thread-114210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 23, 53), 8.59, 56.05, 0.0, 24.39, 13.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:24:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:23:53
2025-12-03T09:24:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:24:21.879 [DEBUG] [Thread-114211] [transport.py] [_log()] starting thread (client mode): 0xa2787ca0
2025-12-03T09:24:21.879 [DEBUG] [Thread-114211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:24:21.899 [DEBUG] [Thread-114211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:24:21.899 [INFO] [Thread-114211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:21.902 [DEBUG] [Thread-114211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] client lang: <none>
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] server lang: <none>
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] kex follows: False
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] Compression: none
2025-12-03T09:24:21.903 [DEBUG] [Thread-114211] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:24:21.917 [DEBUG] [Thread-114211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:24:21.917 [DEBUG] [Thread-114211] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:24:21.917 [DEBUG] [Thread-114211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:24:21.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:24:21.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:24:21.918 [DEBUG] [Thread-114211] [transport.py] [_log()] userauth is OK
2025-12-03T09:24:21.918 [DEBUG] [Thread-114211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:24:21.918 [DEBUG] [Thread-114211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:24:21.918 [DEBUG] [Thread-114211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:24:21.918 [DEBUG] [Thread-114211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:24:21.927 [INFO] [Thread-114211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:24:21.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:24:22.567 [DEBUG] [Thread-114211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:24:22.567 [DEBUG] [Thread-114211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:24:22.567 [DEBUG] [Thread-114211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:24:22.608 [DEBUG] [Thread-114211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:24:22.608 [DEBUG] [Thread-114211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:24:22.610 [DEBUG] [Thread-114211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:24:22.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:24:22.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:24:22.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:24:22.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:24:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:24:22.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:24:22.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:24:22.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.308038 -999.00  +14.20  19.58     60   +6.70 1 1 1 1 1   888    0 9.10 71.94 ----- 19.3 19.6 135.2 24.0 19.7 -24.8 19.3 -23.2 18.7 -23.5 19.1 -24.3
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.308038
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:24:22.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:23:53', tmtdew=8.59, humidity=56.05, cloud=0.0, wind=24.39, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:23:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:24:22.629 [DEBUG] [Thread-114211] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:24:22.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:24:22.712 [DEBUG] [Thread-114214] [transport.py] [_log()] starting thread (client mode): 0xa51ce4a0
2025-12-03T09:24:22.712 [DEBUG] [Thread-114214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:24:22.726 [DEBUG] [Thread-114214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:24:22.726 [INFO] [Thread-114214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] client lang: <none>
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] server lang: <none>
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] kex follows: False
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] Compression: none
2025-12-03T09:24:22.743 [DEBUG] [Thread-114214] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:24:22.792 [DEBUG] [Thread-114214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:24:22.792 [DEBUG] [Thread-114214] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:24:22.792 [DEBUG] [Thread-114214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:24:22.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:24:22.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:24:22.849 [DEBUG] [Thread-114214] [transport.py] [_log()] userauth is OK
2025-12-03T09:24:22.849 [DEBUG] [Thread-114214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:24:22.849 [DEBUG] [Thread-114214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:24:22.849 [DEBUG] [Thread-114214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:24:22.849 [DEBUG] [Thread-114214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:24:22.863 [INFO] [Thread-114214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:24:22.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:24:22.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:24:23.699 [DEBUG] [Thread-114214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:24:23.699 [DEBUG] [Thread-114214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:24:23.750 [DEBUG] [Thread-114214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:24:23.750 [DEBUG] [Thread-114214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:24:23.759 [DEBUG] [Thread-114214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:24:23.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:24:23.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:24:23.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:24:23.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:24:23.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:24:23.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:24:23.791 [DEBUG] [Thread-114214] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:24:36.605 [DEBUG] [Thread-114216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:36.903 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:36.904 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:37.714 [DEBUG] [Thread-114217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:51.652 [DEBUG] [Thread-114218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:24:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:24:53.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:24:53.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:24:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 24, 25), 8.39, 56.83, 0.0, 24.92, 13.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:24:54.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:24:25
2025-12-03T09:24:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:24:54.755 [DEBUG] [Thread-114219] [transport.py] [_log()] starting thread (client mode): 0xa51cf7c0
2025-12-03T09:24:54.755 [DEBUG] [Thread-114219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:24:54.774 [DEBUG] [Thread-114219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:24:54.774 [INFO] [Thread-114219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:24:54.777 [DEBUG] [Thread-114219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:24:54.777 [DEBUG] [Thread-114219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] client lang: <none>
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] server lang: <none>
2025-12-03T09:24:54.778 [DEBUG] [Thread-114219] [transport.py] [_log()] kex follows: False
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] Compression: none
2025-12-03T09:24:54.779 [DEBUG] [Thread-114219] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:24:54.796 [DEBUG] [Thread-114219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:24:54.797 [DEBUG] [Thread-114219] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:24:54.797 [DEBUG] [Thread-114219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:24:54.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:24:54.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:24:54.799 [DEBUG] [Thread-114219] [transport.py] [_log()] userauth is OK
2025-12-03T09:24:54.799 [DEBUG] [Thread-114219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:24:54.799 [DEBUG] [Thread-114219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:24:54.799 [DEBUG] [Thread-114219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:24:54.799 [DEBUG] [Thread-114219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:24:54.822 [INFO] [Thread-114219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:24:54.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:24:55.559 [DEBUG] [Thread-114219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:24:55.559 [DEBUG] [Thread-114219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:24:55.559 [DEBUG] [Thread-114219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:24:55.600 [DEBUG] [Thread-114219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:24:55.600 [DEBUG] [Thread-114219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:24:55.603 [DEBUG] [Thread-114219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:24:55.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:24:55.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:24:55.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:24:55.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:24:55.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:24:55.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:24:55.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:24:55.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.308385 -999.00  +13.80  21.32     60   +6.40 1 1 1 1 1   888    0 8.97 69.16 ----- 18.2 21.3 130.0 30.9 19.6 -25.0 19.2 -24.0 18.6 -24.2 18.9 -25.1
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.308385
2025-12-03T09:24:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:24:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:24:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:24:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:24:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:24:55.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:24:25', tmtdew=8.39, humidity=56.83, cloud=0.0, wind=24.92, temperature=13.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:24:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:24:55.626 [DEBUG] [Thread-114219] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:24:55.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:24:55.714 [DEBUG] [Thread-114222] [transport.py] [_log()] starting thread (client mode): 0xa2708640
2025-12-03T09:24:55.714 [DEBUG] [Thread-114222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:24:55.728 [DEBUG] [Thread-114222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:24:55.729 [INFO] [Thread-114222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] client lang: <none>
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] server lang: <none>
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] kex follows: False
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] Compression: none
2025-12-03T09:24:55.736 [DEBUG] [Thread-114222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:24:55.793 [DEBUG] [Thread-114222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:24:55.794 [DEBUG] [Thread-114222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:24:55.794 [DEBUG] [Thread-114222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:24:55.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:24:55.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:24:55.849 [DEBUG] [Thread-114222] [transport.py] [_log()] userauth is OK
2025-12-03T09:24:55.849 [DEBUG] [Thread-114222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:24:55.850 [DEBUG] [Thread-114222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:24:55.850 [DEBUG] [Thread-114222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:24:55.850 [DEBUG] [Thread-114222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:24:55.868 [INFO] [Thread-114222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:24:55.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:24:55.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:24:56.721 [DEBUG] [Thread-114222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:24:56.721 [DEBUG] [Thread-114222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:24:56.770 [DEBUG] [Thread-114222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:24:56.770 [DEBUG] [Thread-114222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:24:56.778 [DEBUG] [Thread-114222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:24:56.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:24:56.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:24:56.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:24:56.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:24:56.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:24:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:24:56.813 [DEBUG] [Thread-114222] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:25:06.680 [DEBUG] [Thread-114224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:21.723 [DEBUG] [Thread-114225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:25:26.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:25:26.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:25:27.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 24, 57), 8.51, 56.28, 0.0, 25.34, 13.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:25:27.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:24:57
2025-12-03T09:25:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:25:27.790 [DEBUG] [Thread-114226] [transport.py] [_log()] starting thread (client mode): 0xa2785330
2025-12-03T09:25:27.790 [DEBUG] [Thread-114226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:25:27.810 [DEBUG] [Thread-114226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:25:27.810 [INFO] [Thread-114226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:25:27.813 [DEBUG] [Thread-114226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] client lang: <none>
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] server lang: <none>
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] kex follows: False
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:25:27.814 [DEBUG] [Thread-114226] [transport.py] [_log()] Compression: none
2025-12-03T09:25:27.815 [DEBUG] [Thread-114226] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:25:27.836 [DEBUG] [Thread-114226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:25:27.836 [DEBUG] [Thread-114226] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:25:27.837 [DEBUG] [Thread-114226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:25:27.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:25:27.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:25:27.839 [DEBUG] [Thread-114226] [transport.py] [_log()] userauth is OK
2025-12-03T09:25:27.839 [DEBUG] [Thread-114226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:25:27.839 [DEBUG] [Thread-114226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:25:27.839 [DEBUG] [Thread-114226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:25:27.839 [DEBUG] [Thread-114226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:25:27.862 [INFO] [Thread-114226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:25:27.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:25:28.465 [DEBUG] [Thread-114226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:25:28.465 [DEBUG] [Thread-114226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:25:28.466 [DEBUG] [Thread-114226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:25:28.506 [DEBUG] [Thread-114226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:25:28.506 [DEBUG] [Thread-114226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:25:28.509 [DEBUG] [Thread-114226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:25:28.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:25:28.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:25:28.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:25:28.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:25:28.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:25:28.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:25:28.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.308732 -999.00  +14.10  14.64     61   +6.60 1 1 1 1 1   888    0 8.98 65.24 ----- 20.6 14.6 157.4 23.6 19.6 -24.3 19.2 -23.0 18.6 -23.4 19.0 -25.1
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:25:28.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.308732
2025-12-03T09:25:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:25:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:25:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:25:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:25:28.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:25:28.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:24:57', tmtdew=8.51, humidity=56.28, cloud=0.0, wind=25.34, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:24:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:25:28.536 [DEBUG] [Thread-114226] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:25:28.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:25:28.634 [DEBUG] [Thread-114229] [transport.py] [_log()] starting thread (client mode): 0xa2785c90
2025-12-03T09:25:28.634 [DEBUG] [Thread-114229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:25:28.649 [DEBUG] [Thread-114229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:25:28.649 [INFO] [Thread-114229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:25:28.657 [DEBUG] [Thread-114229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:25:28.657 [DEBUG] [Thread-114229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:25:28.657 [DEBUG] [Thread-114229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:25:28.657 [DEBUG] [Thread-114229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] client lang: <none>
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] server lang: <none>
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] kex follows: False
2025-12-03T09:25:28.658 [DEBUG] [Thread-114229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] Compression: none
2025-12-03T09:25:28.659 [DEBUG] [Thread-114229] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:25:28.721 [DEBUG] [Thread-114229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:25:28.722 [DEBUG] [Thread-114229] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:25:28.722 [DEBUG] [Thread-114229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:25:28.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:25:28.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:25:28.777 [DEBUG] [Thread-114229] [transport.py] [_log()] userauth is OK
2025-12-03T09:25:28.777 [DEBUG] [Thread-114229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:25:28.777 [DEBUG] [Thread-114229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:25:28.778 [DEBUG] [Thread-114229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:25:28.778 [DEBUG] [Thread-114229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:25:28.801 [INFO] [Thread-114229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:25:28.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:25:28.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:25:29.663 [DEBUG] [Thread-114229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:25:29.663 [DEBUG] [Thread-114229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:25:29.710 [DEBUG] [Thread-114229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:25:29.710 [DEBUG] [Thread-114229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:25:29.719 [DEBUG] [Thread-114229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:25:29.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:25:29.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:25:29.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:25:29.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:25:29.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:25:29.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:25:29.754 [DEBUG] [Thread-114229] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:25:36.750 [DEBUG] [Thread-114231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:37.044 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:37.045 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:37.743 [DEBUG] [Thread-114232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:51.791 [DEBUG] [Thread-114233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:25:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:25:59.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:25:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:26:00.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 25, 29), 8.71, 55.55, 0.0, 20.35, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:26:00.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:25:29
2025-12-03T09:26:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:26:00.716 [DEBUG] [Thread-114234] [transport.py] [_log()] starting thread (client mode): 0xa2709d50
2025-12-03T09:26:00.716 [DEBUG] [Thread-114234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:26:00.736 [DEBUG] [Thread-114234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:26:00.737 [INFO] [Thread-114234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] client lang: <none>
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] server lang: <none>
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] kex follows: False
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:26:00.740 [DEBUG] [Thread-114234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:26:00.741 [DEBUG] [Thread-114234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:26:00.741 [DEBUG] [Thread-114234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:26:00.741 [DEBUG] [Thread-114234] [transport.py] [_log()] Compression: none
2025-12-03T09:26:00.741 [DEBUG] [Thread-114234] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:26:00.750 [DEBUG] [Thread-114234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:26:00.750 [DEBUG] [Thread-114234] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:26:00.751 [DEBUG] [Thread-114234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:26:00.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:26:00.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:26:00.752 [DEBUG] [Thread-114234] [transport.py] [_log()] userauth is OK
2025-12-03T09:26:00.752 [DEBUG] [Thread-114234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:26:00.753 [DEBUG] [Thread-114234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:26:00.753 [DEBUG] [Thread-114234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:26:00.753 [DEBUG] [Thread-114234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:26:00.776 [INFO] [Thread-114234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:26:00.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:26:01.345 [DEBUG] [Thread-114234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:26:01.345 [DEBUG] [Thread-114234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:26:01.346 [DEBUG] [Thread-114234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:26:01.387 [DEBUG] [Thread-114234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:26:01.387 [DEBUG] [Thread-114234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:26:01.390 [DEBUG] [Thread-114234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:26:01.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:26:01.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:26:01.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:26:01.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:26:01.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:26:01.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:26:01.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:26:01.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.309427 -999.00  +14.00  15.73     60   +6.60 1 1 1 1 1   888    0 8.96 65.27 ----- 15.8 15.7 169.0 23.7 19.5 -25.4 19.1 -24.9 18.6 -23.6 18.9 -25.0
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.309427
2025-12-03T09:26:01.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:26:01.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:26:01.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:26:01.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:26:01.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:26:01.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:25:29', tmtdew=8.71, humidity=55.55, cloud=0.0, wind=20.35, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:25:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:26:01.414 [DEBUG] [Thread-114234] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:26:01.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:26:01.512 [DEBUG] [Thread-114237] [transport.py] [_log()] starting thread (client mode): 0xa51cde10
2025-12-03T09:26:01.512 [DEBUG] [Thread-114237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:26:01.527 [DEBUG] [Thread-114237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:26:01.527 [INFO] [Thread-114237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:26:01.534 [DEBUG] [Thread-114237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] client lang: <none>
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] server lang: <none>
2025-12-03T09:26:01.535 [DEBUG] [Thread-114237] [transport.py] [_log()] kex follows: False
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] Compression: none
2025-12-03T09:26:01.536 [DEBUG] [Thread-114237] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:26:01.597 [DEBUG] [Thread-114237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:26:01.597 [DEBUG] [Thread-114237] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:26:01.597 [DEBUG] [Thread-114237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:26:01.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:26:01.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:26:01.654 [DEBUG] [Thread-114237] [transport.py] [_log()] userauth is OK
2025-12-03T09:26:01.654 [DEBUG] [Thread-114237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:26:01.654 [DEBUG] [Thread-114237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:26:01.654 [DEBUG] [Thread-114237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:26:01.654 [DEBUG] [Thread-114237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:26:01.668 [INFO] [Thread-114237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:26:01.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:26:01.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:26:02.542 [DEBUG] [Thread-114237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:26:02.542 [DEBUG] [Thread-114237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:26:02.589 [DEBUG] [Thread-114237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:26:02.589 [DEBUG] [Thread-114237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:26:02.598 [DEBUG] [Thread-114237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:26:02.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:26:02.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:26:02.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:26:02.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:26:02.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:26:02.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:26:02.630 [DEBUG] [Thread-114237] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:26:06.820 [DEBUG] [Thread-114239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:21.860 [DEBUG] [Thread-114240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:32.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:26:32.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:26:32.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:26:33.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 26, 1), 8.8, 55.23, 0.0, 25.04, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:26:33.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:26:01
2025-12-03T09:26:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:26:33.628 [DEBUG] [Thread-114241] [transport.py] [_log()] starting thread (client mode): 0xa51ccdf0
2025-12-03T09:26:33.628 [DEBUG] [Thread-114241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:26:33.647 [DEBUG] [Thread-114241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:26:33.647 [INFO] [Thread-114241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:26:33.650 [DEBUG] [Thread-114241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:26:33.650 [DEBUG] [Thread-114241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:26:33.650 [DEBUG] [Thread-114241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:26:33.650 [DEBUG] [Thread-114241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:33.650 [DEBUG] [Thread-114241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] client lang: <none>
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] server lang: <none>
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] kex follows: False
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] Compression: none
2025-12-03T09:26:33.651 [DEBUG] [Thread-114241] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:26:33.666 [DEBUG] [Thread-114241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:26:33.666 [DEBUG] [Thread-114241] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:26:33.666 [DEBUG] [Thread-114241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:26:33.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:26:33.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:26:33.667 [DEBUG] [Thread-114241] [transport.py] [_log()] userauth is OK
2025-12-03T09:26:33.668 [DEBUG] [Thread-114241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:26:33.668 [DEBUG] [Thread-114241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:26:33.668 [DEBUG] [Thread-114241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:26:33.668 [DEBUG] [Thread-114241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:26:33.680 [INFO] [Thread-114241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:26:33.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:26:34.332 [DEBUG] [Thread-114241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:26:34.332 [DEBUG] [Thread-114241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:26:34.332 [DEBUG] [Thread-114241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:26:34.373 [DEBUG] [Thread-114241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:26:34.373 [DEBUG] [Thread-114241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:26:34.375 [DEBUG] [Thread-114241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:26:34.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:26:34.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:26:34.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:26:34.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:26:34.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:26:34.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:26:34.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.309774 -999.00  +13.90  28.07     61   +6.50 1 1 1 1 1   888    0 8.84 60.64 ----- 21.6 28.1 168.4 32.0 19.4 -26.1 19.1 -23.5 18.5 -23.6 18.9 -25.0
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:26:34.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.309774
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:26:34.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:26:01', tmtdew=8.8, humidity=55.23, cloud=0.0, wind=25.04, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:26:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:26:34.393 [DEBUG] [Thread-114241] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:26:34.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:26:34.480 [DEBUG] [Thread-114244] [transport.py] [_log()] starting thread (client mode): 0xa2709d50
2025-12-03T09:26:34.480 [DEBUG] [Thread-114244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:26:34.496 [DEBUG] [Thread-114244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:26:34.496 [INFO] [Thread-114244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] client lang: <none>
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] server lang: <none>
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] kex follows: False
2025-12-03T09:26:34.503 [DEBUG] [Thread-114244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] Compression: none
2025-12-03T09:26:34.504 [DEBUG] [Thread-114244] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:26:34.560 [DEBUG] [Thread-114244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:26:34.560 [DEBUG] [Thread-114244] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:26:34.560 [DEBUG] [Thread-114244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:26:34.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:26:34.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:26:34.617 [DEBUG] [Thread-114244] [transport.py] [_log()] userauth is OK
2025-12-03T09:26:34.617 [DEBUG] [Thread-114244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:26:34.617 [DEBUG] [Thread-114244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:26:34.617 [DEBUG] [Thread-114244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:26:34.617 [DEBUG] [Thread-114244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:26:34.635 [INFO] [Thread-114244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:26:34.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:26:34.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:26:35.486 [DEBUG] [Thread-114244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:26:35.487 [DEBUG] [Thread-114244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:26:35.535 [DEBUG] [Thread-114244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:26:35.535 [DEBUG] [Thread-114244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:26:35.547 [DEBUG] [Thread-114244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:26:35.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:26:35.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:26:35.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:26:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:26:35.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:26:35.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:26:35.582 [DEBUG] [Thread-114244] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:26:36.887 [DEBUG] [Thread-114246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:37.186 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:37.187 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:37.787 [DEBUG] [Thread-114247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:26:51.940 [DEBUG] [Thread-114248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:27:05.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:27:05.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:27:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 26, 33), 9.01, 54.73, 0.0, 25.72, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:27:06.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:26:33
2025-12-03T09:27:06.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:27:06.622 [DEBUG] [Thread-114249] [transport.py] [_log()] starting thread (client mode): 0xa27ebdf0
2025-12-03T09:27:06.622 [DEBUG] [Thread-114249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:27:06.642 [DEBUG] [Thread-114249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:27:06.642 [INFO] [Thread-114249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] client lang: <none>
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] server lang: <none>
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] kex follows: False
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] Compression: none
2025-12-03T09:27:06.644 [DEBUG] [Thread-114249] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:27:06.652 [DEBUG] [Thread-114249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:27:06.652 [DEBUG] [Thread-114249] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:27:06.652 [DEBUG] [Thread-114249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:27:06.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:27:06.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:27:06.653 [DEBUG] [Thread-114249] [transport.py] [_log()] userauth is OK
2025-12-03T09:27:06.653 [DEBUG] [Thread-114249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:27:06.653 [DEBUG] [Thread-114249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:27:06.653 [DEBUG] [Thread-114249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:27:06.653 [DEBUG] [Thread-114249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:27:06.666 [INFO] [Thread-114249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:27:06.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:27:06.971 [DEBUG] [Thread-114251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:07.452 [DEBUG] [Thread-114249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:27:07.452 [DEBUG] [Thread-114249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:27:07.452 [DEBUG] [Thread-114249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:27:07.494 [DEBUG] [Thread-114249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:27:07.494 [DEBUG] [Thread-114249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:27:07.497 [DEBUG] [Thread-114249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:27:07.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:27:07.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:27:07.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:27:07.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:27:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:27:07.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:27:07.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:27:07.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:27:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:27:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.310121 -999.00  +13.70  20.79     62   +6.80 1 2 1 1 1   888    0 8.72 57.68 ----- 18.6 20.8 156.9 29.4 19.4 -24.7 18.9 -23.2 18.5 -22.5 18.9 -23.0
2025-12-03T09:27:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:27:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:27:07.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.310121
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:27:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:26:33', tmtdew=9.01, humidity=54.73, cloud=0.0, wind=25.72, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:26:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:27:07.522 [DEBUG] [Thread-114249] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:27:07.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:27:07.618 [DEBUG] [Thread-114253] [transport.py] [_log()] starting thread (client mode): 0xa27847f0
2025-12-03T09:27:07.618 [DEBUG] [Thread-114253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:27:07.638 [DEBUG] [Thread-114253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:27:07.638 [INFO] [Thread-114253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:27:07.647 [DEBUG] [Thread-114253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] client lang: <none>
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] server lang: <none>
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] kex follows: False
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] Compression: none
2025-12-03T09:27:07.648 [DEBUG] [Thread-114253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:27:07.708 [DEBUG] [Thread-114253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:27:07.709 [DEBUG] [Thread-114253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:27:07.709 [DEBUG] [Thread-114253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:27:07.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:27:07.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:27:07.766 [DEBUG] [Thread-114253] [transport.py] [_log()] userauth is OK
2025-12-03T09:27:07.766 [DEBUG] [Thread-114253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:27:07.766 [DEBUG] [Thread-114253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:27:07.766 [DEBUG] [Thread-114253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:27:07.766 [DEBUG] [Thread-114253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:27:07.787 [INFO] [Thread-114253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:27:07.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:27:07.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:27:08.635 [DEBUG] [Thread-114253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:27:08.635 [DEBUG] [Thread-114253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:27:08.682 [DEBUG] [Thread-114253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:27:08.683 [DEBUG] [Thread-114253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:27:08.691 [DEBUG] [Thread-114253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:27:08.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:27:08.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:27:08.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:27:08.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:27:08.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:27:08.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:27:08.725 [DEBUG] [Thread-114253] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:27:22.002 [DEBUG] [Thread-114255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:37.048 [DEBUG] [Thread-114256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:37.325 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:37.326 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:37.832 [DEBUG] [Thread-114257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:27:38.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:27:38.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:27:38.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:27:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 27, 5), 8.32, 57.03, 0.0, 22.92, 13.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:27:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:27:05
2025-12-03T09:27:39.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:27:39.750 [DEBUG] [Thread-114258] [transport.py] [_log()] starting thread (client mode): 0xa271cdc0
2025-12-03T09:27:39.750 [DEBUG] [Thread-114258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:27:39.770 [DEBUG] [Thread-114258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:27:39.770 [INFO] [Thread-114258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:39.773 [DEBUG] [Thread-114258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] client lang: <none>
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] server lang: <none>
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] kex follows: False
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] Compression: none
2025-12-03T09:27:39.774 [DEBUG] [Thread-114258] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:27:39.792 [DEBUG] [Thread-114258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:27:39.793 [DEBUG] [Thread-114258] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:27:39.794 [DEBUG] [Thread-114258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:27:39.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:27:39.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:27:39.796 [DEBUG] [Thread-114258] [transport.py] [_log()] userauth is OK
2025-12-03T09:27:39.797 [DEBUG] [Thread-114258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:27:39.797 [DEBUG] [Thread-114258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:27:39.797 [DEBUG] [Thread-114258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:27:39.797 [DEBUG] [Thread-114258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:27:39.822 [INFO] [Thread-114258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:27:39.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:27:40.435 [DEBUG] [Thread-114258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:27:40.436 [DEBUG] [Thread-114258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:27:40.436 [DEBUG] [Thread-114258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:27:40.477 [DEBUG] [Thread-114258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:27:40.477 [DEBUG] [Thread-114258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:27:40.480 [DEBUG] [Thread-114258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:27:40.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:27:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:27:40.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:27:40.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:27:40.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:27:40.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:27:40.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:27:40.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:27:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:27:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.310469 -999.00  +13.60  18.40     63   +6.80 1 2 1 1 1   888    0 8.51 51.97 ----- 13.4 18.4 168.0 25.7 19.5 -24.1 19.1 -22.4 18.5 -22.7 19.0 -23.8
2025-12-03T09:27:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:27:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:27:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.310469
2025-12-03T09:27:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:27:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:27:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:27:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:27:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:27:40.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:27:05', tmtdew=8.32, humidity=57.03, cloud=0.0, wind=22.92, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:27:04.522', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:27:40.503 [DEBUG] [Thread-114258] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:27:40.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:27:40.601 [DEBUG] [Thread-114261] [transport.py] [_log()] starting thread (client mode): 0xa51ccd00
2025-12-03T09:27:40.601 [DEBUG] [Thread-114261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:27:40.618 [DEBUG] [Thread-114261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:27:40.618 [INFO] [Thread-114261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:27:40.628 [DEBUG] [Thread-114261] [transport.py] [_log()] client lang: <none>
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] server lang: <none>
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] kex follows: False
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] Compression: none
2025-12-03T09:27:40.629 [DEBUG] [Thread-114261] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:27:40.685 [DEBUG] [Thread-114261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:27:40.685 [DEBUG] [Thread-114261] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:27:40.686 [DEBUG] [Thread-114261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:27:40.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:27:40.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:27:40.742 [DEBUG] [Thread-114261] [transport.py] [_log()] userauth is OK
2025-12-03T09:27:40.742 [DEBUG] [Thread-114261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:27:40.742 [DEBUG] [Thread-114261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:27:40.742 [DEBUG] [Thread-114261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:27:40.742 [DEBUG] [Thread-114261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:27:40.761 [INFO] [Thread-114261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:27:40.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:27:40.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:27:41.646 [DEBUG] [Thread-114261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:27:41.646 [DEBUG] [Thread-114261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:27:41.693 [DEBUG] [Thread-114261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:27:41.694 [DEBUG] [Thread-114261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:27:41.702 [DEBUG] [Thread-114261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:27:41.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:27:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:27:41.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:27:41.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:27:41.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:27:41.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:27:41.736 [DEBUG] [Thread-114261] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:27:52.074 [DEBUG] [Thread-114263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:07.126 [DEBUG] [Thread-114264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:11.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:28:11.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:28:11.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:28:12.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 28, 9), 8.05, 58.54, 0.0, 22.34, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:28:12.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:28:09
2025-12-03T09:28:12.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:28:12.776 [DEBUG] [Thread-114265] [transport.py] [_log()] starting thread (client mode): 0xa27ea5f0
2025-12-03T09:28:12.776 [DEBUG] [Thread-114265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:28:12.789 [DEBUG] [Thread-114265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:28:12.789 [INFO] [Thread-114265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:28:12.790 [DEBUG] [Thread-114265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:28:12.790 [DEBUG] [Thread-114265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:28:12.790 [DEBUG] [Thread-114265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] client lang: <none>
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] server lang: <none>
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] kex follows: False
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] Compression: none
2025-12-03T09:28:12.791 [DEBUG] [Thread-114265] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:28:12.810 [DEBUG] [Thread-114265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:28:12.810 [DEBUG] [Thread-114265] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:28:12.810 [DEBUG] [Thread-114265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:28:12.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:28:12.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:28:12.812 [DEBUG] [Thread-114265] [transport.py] [_log()] userauth is OK
2025-12-03T09:28:12.812 [DEBUG] [Thread-114265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:28:12.812 [DEBUG] [Thread-114265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:28:12.812 [DEBUG] [Thread-114265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:28:12.812 [DEBUG] [Thread-114265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:28:12.822 [INFO] [Thread-114265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:28:12.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:28:13.456 [DEBUG] [Thread-114265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:28:13.456 [DEBUG] [Thread-114265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:28:13.456 [DEBUG] [Thread-114265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:28:13.497 [DEBUG] [Thread-114265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:28:13.497 [DEBUG] [Thread-114265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:28:13.500 [DEBUG] [Thread-114265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:28:13.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:28:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:28:13.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:28:13.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:28:13.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:28:13.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:28:13.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.310816 -999.00  +13.80  24.34     64   +7.10 1 2 1 1 1   888    0 8.55 48.95 ----- 31.2 24.3 172.6 33.2 19.6 -24.7 19.0 -23.3 18.5 -22.2 19.0 -24.0
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.310816
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:28:13.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:28:09', tmtdew=8.05, humidity=58.54, cloud=0.0, wind=22.34, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:27:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:28:13.524 [DEBUG] [Thread-114265] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:28:13.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:28:22.165 [DEBUG] [Thread-114268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:37.212 [DEBUG] [Thread-114269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:37.466 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:37.467 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:37.894 [DEBUG] [Thread-114270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:28:52.240 [DEBUG] [Thread-114271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:07.264 [DEBUG] [Thread-114272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:22.295 [DEBUG] [Thread-114273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:37.324 [DEBUG] [Thread-114274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:37.614 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:37.615 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:37.937 [DEBUG] [Thread-114275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:29:52.359 [DEBUG] [Thread-114276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:07.389 [DEBUG] [Thread-114277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:22.413 [DEBUG] [Thread-114278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:28.118 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T09:30:37.436 [DEBUG] [Thread-114279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:37.754 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:37.755 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:37.979 [DEBUG] [Thread-114280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:52.465 [DEBUG] [Thread-114281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:30:58.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:30:58.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:30:58.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:30:58.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 30, 49), 8.81, 55.63, 0.0, 29.04, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:30:58.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:30:49
2025-12-03T09:30:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:30:59.092 [DEBUG] [Thread-114282] [transport.py] [_log()] starting thread (client mode): 0xa27e9930
2025-12-03T09:30:59.092 [DEBUG] [Thread-114282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:30:59.113 [DEBUG] [Thread-114282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:30:59.113 [INFO] [Thread-114282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:30:59.117 [DEBUG] [Thread-114282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] client lang: <none>
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] server lang: <none>
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] kex follows: False
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] Compression: none
2025-12-03T09:30:59.118 [DEBUG] [Thread-114282] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:30:59.137 [DEBUG] [Thread-114282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:30:59.138 [DEBUG] [Thread-114282] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:30:59.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:30:59.138 [DEBUG] [Thread-114282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:30:59.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:30:59.140 [DEBUG] [Thread-114282] [transport.py] [_log()] userauth is OK
2025-12-03T09:30:59.141 [DEBUG] [Thread-114282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:30:59.141 [DEBUG] [Thread-114282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:30:59.141 [DEBUG] [Thread-114282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:30:59.141 [DEBUG] [Thread-114282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:30:59.165 [INFO] [Thread-114282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:30:59.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:30:59.728 [DEBUG] [Thread-114282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:30:59.728 [DEBUG] [Thread-114282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:30:59.729 [DEBUG] [Thread-114282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:30:59.770 [DEBUG] [Thread-114282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:30:59.770 [DEBUG] [Thread-114282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:30:59.773 [DEBUG] [Thread-114282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:30:59.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:30:59.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:30:59.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:30:59.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:30:59.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:30:59.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:30:59.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:30:59.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:30:59.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:30:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.312899 -999.00  +13.60  25.41     63   +6.90 1 2 1 1 1   888    0 7.75 26.43 ----- 20.9 25.4 166.8 31.4 19.9 -20.5 19.2 -17.8 18.7 -18.6 19.4 -18.6
2025-12-03T09:30:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:30:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:30:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.312899
2025-12-03T09:30:59.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:30:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:30:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:30:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:30:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:30:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:30:49', tmtdew=8.81, humidity=55.63, cloud=0.0, wind=29.04, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:30:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:30:59.790 [DEBUG] [Thread-114282] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:30:59.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:31:07.492 [DEBUG] [Thread-114285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:22.539 [DEBUG] [Thread-114286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:37.562 [DEBUG] [Thread-114287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:37.893 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:37.894 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:38.014 [DEBUG] [Thread-114288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:31:52.592 [DEBUG] [Thread-114289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:07.620 [DEBUG] [Thread-114290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:22.645 [DEBUG] [Thread-114291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:37.673 [DEBUG] [Thread-114292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:38.035 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:38.037 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:38.051 [DEBUG] [Thread-114293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:32:52.702 [DEBUG] [Thread-114294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:07.733 [DEBUG] [Thread-114295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:11.958 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T09:33:22.762 [DEBUG] [Thread-114296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:37.790 [DEBUG] [Thread-114297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:38.113 [DEBUG] [Thread-114298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:38.177 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:38.178 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:33:41.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:33:41.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:33:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:33:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 33, 29), 9.05, 54.32, 0.0, 27.84, 14.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:33:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:33:29
2025-12-03T09:33:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:33:42.958 [DEBUG] [Thread-114299] [transport.py] [_log()] starting thread (client mode): 0xa271d750
2025-12-03T09:33:42.958 [DEBUG] [Thread-114299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:33:42.978 [DEBUG] [Thread-114299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:33:42.978 [INFO] [Thread-114299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:33:42.981 [DEBUG] [Thread-114299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] client lang: <none>
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] server lang: <none>
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] kex follows: False
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] Compression: none
2025-12-03T09:33:42.982 [DEBUG] [Thread-114299] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:33:42.999 [DEBUG] [Thread-114299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:33:42.999 [DEBUG] [Thread-114299] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:33:43.000 [DEBUG] [Thread-114299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:33:43.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:33:43.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:33:43.002 [DEBUG] [Thread-114299] [transport.py] [_log()] userauth is OK
2025-12-03T09:33:43.002 [DEBUG] [Thread-114299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:33:43.002 [DEBUG] [Thread-114299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:33:43.002 [DEBUG] [Thread-114299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:33:43.002 [DEBUG] [Thread-114299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:33:43.026 [INFO] [Thread-114299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:33:43.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:33:43.697 [DEBUG] [Thread-114299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:33:43.698 [DEBUG] [Thread-114299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:33:43.698 [DEBUG] [Thread-114299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:33:43.739 [DEBUG] [Thread-114299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:33:43.739 [DEBUG] [Thread-114299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:33:43.740 [DEBUG] [Thread-114299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:33:43.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:33:43.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:33:43.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:33:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:33:43.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:33:43.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:33:43.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:33:43.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:33:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:33:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.314635 -999.00  +14.20  22.59     61   +6.80 1 2 1 1 1   888    0 7.75 26.36 ----- 25.4 22.6 163.8 29.4 20.6 -22.2 19.8 -19.4 19.1 -18.9 19.7 -19.9
2025-12-03T09:33:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:33:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:33:43.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.314635
2025-12-03T09:33:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:33:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:33:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:33:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:33:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:33:43.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:33:29', tmtdew=9.05, humidity=54.32, cloud=0.0, wind=27.84, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:33:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:33:43.768 [DEBUG] [Thread-114299] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:33:43.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:33:43.865 [DEBUG] [Thread-114302] [transport.py] [_log()] starting thread (client mode): 0xa270b040
2025-12-03T09:33:43.865 [DEBUG] [Thread-114302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:33:43.879 [DEBUG] [Thread-114302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:33:43.880 [INFO] [Thread-114302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:33:43.887 [DEBUG] [Thread-114302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:33:43.887 [DEBUG] [Thread-114302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:33:43.887 [DEBUG] [Thread-114302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] client lang: <none>
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] server lang: <none>
2025-12-03T09:33:43.888 [DEBUG] [Thread-114302] [transport.py] [_log()] kex follows: False
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] Compression: none
2025-12-03T09:33:43.889 [DEBUG] [Thread-114302] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:33:43.946 [DEBUG] [Thread-114302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:33:43.947 [DEBUG] [Thread-114302] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:33:43.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:33:43.948 [DEBUG] [Thread-114302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:33:43.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:33:44.002 [DEBUG] [Thread-114302] [transport.py] [_log()] userauth is OK
2025-12-03T09:33:44.002 [DEBUG] [Thread-114302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:33:44.003 [DEBUG] [Thread-114302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:33:44.003 [DEBUG] [Thread-114302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:33:44.003 [DEBUG] [Thread-114302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:33:44.025 [INFO] [Thread-114302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:33:44.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:33:44.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:33:44.856 [DEBUG] [Thread-114302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:33:44.856 [DEBUG] [Thread-114302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:33:44.904 [DEBUG] [Thread-114302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:33:44.904 [DEBUG] [Thread-114302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:33:44.916 [DEBUG] [Thread-114302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:33:44.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:33:44.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:33:44.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:33:44.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:33:44.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:33:44.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:33:44.952 [DEBUG] [Thread-114302] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:33:52.823 [DEBUG] [Thread-114304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:07.867 [DEBUG] [Thread-114305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:14.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:34:14.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:34:14.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:34:15.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 34, 1), 8.75, 55.34, 0.0, 25.34, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:34:15.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:34:01
2025-12-03T09:34:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:34:15.935 [DEBUG] [Thread-114306] [transport.py] [_log()] starting thread (client mode): 0xa27e8a90
2025-12-03T09:34:15.935 [DEBUG] [Thread-114306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:34:15.955 [DEBUG] [Thread-114306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:34:15.955 [INFO] [Thread-114306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:34:15.958 [DEBUG] [Thread-114306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] client lang: <none>
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] server lang: <none>
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] kex follows: False
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] Compression: none
2025-12-03T09:34:15.959 [DEBUG] [Thread-114306] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:34:15.976 [DEBUG] [Thread-114306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:34:15.977 [DEBUG] [Thread-114306] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:34:15.977 [DEBUG] [Thread-114306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:34:15.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:34:15.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:34:15.980 [DEBUG] [Thread-114306] [transport.py] [_log()] userauth is OK
2025-12-03T09:34:15.980 [DEBUG] [Thread-114306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:34:15.980 [DEBUG] [Thread-114306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:34:15.980 [DEBUG] [Thread-114306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:34:15.980 [DEBUG] [Thread-114306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:34:16.004 [INFO] [Thread-114306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:34:16.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:34:16.644 [DEBUG] [Thread-114306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:34:16.644 [DEBUG] [Thread-114306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:34:16.645 [DEBUG] [Thread-114306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:34:16.685 [DEBUG] [Thread-114306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:34:16.685 [DEBUG] [Thread-114306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:34:16.688 [DEBUG] [Thread-114306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:34:16.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:34:16.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:34:16.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:34:16.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:34:16.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:34:16.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:34:16.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:34:16.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.315330 -999.00  +14.00  17.69     61   +6.80 1 2 1 1 1   888    0 7.92 32.28 ----- 15.9 17.7 174.4 22.6 20.7 -22.0 19.6 -23.4 19.1 -19.5 19.7 -20.2
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.315330
2025-12-03T09:34:16.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:34:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:34:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:34:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:34:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:34:16.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:34:01', tmtdew=8.75, humidity=55.34, cloud=0.0, wind=25.34, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:34:04.512', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:34:16.711 [DEBUG] [Thread-114306] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:34:16.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:34:16.807 [DEBUG] [Thread-114309] [transport.py] [_log()] starting thread (client mode): 0xa27b0850
2025-12-03T09:34:16.807 [DEBUG] [Thread-114309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:34:16.826 [DEBUG] [Thread-114309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:34:16.826 [INFO] [Thread-114309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:16.834 [DEBUG] [Thread-114309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] client lang: <none>
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] server lang: <none>
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] kex follows: False
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] Compression: none
2025-12-03T09:34:16.835 [DEBUG] [Thread-114309] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:34:16.893 [DEBUG] [Thread-114309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:34:16.894 [DEBUG] [Thread-114309] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:34:16.894 [DEBUG] [Thread-114309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:34:16.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:34:16.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:34:16.954 [DEBUG] [Thread-114309] [transport.py] [_log()] userauth is OK
2025-12-03T09:34:16.954 [DEBUG] [Thread-114309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:34:16.954 [DEBUG] [Thread-114309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:34:16.954 [DEBUG] [Thread-114309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:34:16.954 [DEBUG] [Thread-114309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:34:16.974 [INFO] [Thread-114309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:34:16.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:34:16.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:34:17.810 [DEBUG] [Thread-114309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:34:17.811 [DEBUG] [Thread-114309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:34:17.859 [DEBUG] [Thread-114309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:34:17.859 [DEBUG] [Thread-114309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:34:17.868 [DEBUG] [Thread-114309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:34:17.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:34:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:34:17.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:34:17.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:34:17.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:34:17.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:34:17.903 [DEBUG] [Thread-114309] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:34:22.898 [DEBUG] [Thread-114311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:37.951 [DEBUG] [Thread-114312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:38.166 [DEBUG] [Thread-114313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:38.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:38.323 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:34:47.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:34:47.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:34:47.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:34:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 34, 33), 9.44, 53.3, 0.0, 22.05, 15.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:34:48.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:34:33
2025-12-03T09:34:48.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:34:48.867 [DEBUG] [Thread-114314] [transport.py] [_log()] starting thread (client mode): 0xa271c5e0
2025-12-03T09:34:48.867 [DEBUG] [Thread-114314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:34:48.888 [DEBUG] [Thread-114314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:34:48.888 [INFO] [Thread-114314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] client lang: <none>
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] server lang: <none>
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] kex follows: False
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:34:48.891 [DEBUG] [Thread-114314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:34:48.892 [DEBUG] [Thread-114314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:34:48.892 [DEBUG] [Thread-114314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:34:48.892 [DEBUG] [Thread-114314] [transport.py] [_log()] Compression: none
2025-12-03T09:34:48.892 [DEBUG] [Thread-114314] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:34:48.908 [DEBUG] [Thread-114314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:34:48.908 [DEBUG] [Thread-114314] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:34:48.909 [DEBUG] [Thread-114314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:34:48.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:34:48.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:34:48.911 [DEBUG] [Thread-114314] [transport.py] [_log()] userauth is OK
2025-12-03T09:34:48.911 [DEBUG] [Thread-114314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:34:48.911 [DEBUG] [Thread-114314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:34:48.911 [DEBUG] [Thread-114314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:34:48.911 [DEBUG] [Thread-114314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:34:48.926 [INFO] [Thread-114314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:34:48.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:34:49.557 [DEBUG] [Thread-114314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:34:49.557 [DEBUG] [Thread-114314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:34:49.557 [DEBUG] [Thread-114314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:34:49.598 [DEBUG] [Thread-114314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:34:49.598 [DEBUG] [Thread-114314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:34:49.601 [DEBUG] [Thread-114314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:34:49.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:34:49.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:34:49.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:34:49.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:34:49.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:34:49.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:34:49.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:34:49.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.315677 -999.00  +14.20  13.59     62   +7.10 1 2 1 1 1   888    0 7.94 30.61 ----- 15.6 13.6 156.0 22.6 20.8 -20.8 19.8 -19.4 19.2 -17.9 19.9 -19.4
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.315677
2025-12-03T09:34:49.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:34:49.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:34:33', tmtdew=9.44, humidity=53.3, cloud=0.0, wind=22.05, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:34:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:34:49.625 [DEBUG] [Thread-114314] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:34:49.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:34:49.722 [DEBUG] [Thread-114317] [transport.py] [_log()] starting thread (client mode): 0xa271d960
2025-12-03T09:34:49.722 [DEBUG] [Thread-114317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:34:49.737 [DEBUG] [Thread-114317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:34:49.737 [INFO] [Thread-114317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:34:49.745 [DEBUG] [Thread-114317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] client lang: <none>
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] server lang: <none>
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] kex follows: False
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] Compression: none
2025-12-03T09:34:49.746 [DEBUG] [Thread-114317] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:34:49.802 [DEBUG] [Thread-114317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:34:49.802 [DEBUG] [Thread-114317] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:34:49.803 [DEBUG] [Thread-114317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:34:49.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:34:49.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:34:49.858 [DEBUG] [Thread-114317] [transport.py] [_log()] userauth is OK
2025-12-03T09:34:49.858 [DEBUG] [Thread-114317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:34:49.858 [DEBUG] [Thread-114317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:34:49.858 [DEBUG] [Thread-114317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:34:49.859 [DEBUG] [Thread-114317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:34:49.877 [INFO] [Thread-114317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:34:49.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:34:49.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:34:50.742 [DEBUG] [Thread-114317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:34:50.742 [DEBUG] [Thread-114317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:34:50.791 [DEBUG] [Thread-114317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:34:50.791 [DEBUG] [Thread-114317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:34:50.800 [DEBUG] [Thread-114317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:34:50.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:34:50.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:34:50.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:34:50.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:34:50.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:34:50.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:34:50.834 [DEBUG] [Thread-114317] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:34:52.981 [DEBUG] [Thread-114319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:08.025 [DEBUG] [Thread-114320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:20.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:35:20.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:35:20.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:35:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 35, 5), 8.68, 55.89, 0.0, 23.33, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:35:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:35:05
2025-12-03T09:35:21.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:35:21.869 [DEBUG] [Thread-114321] [transport.py] [_log()] starting thread (client mode): 0xa27eb220
2025-12-03T09:35:21.869 [DEBUG] [Thread-114321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:35:21.888 [DEBUG] [Thread-114321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:35:21.888 [INFO] [Thread-114321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] client lang: <none>
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] server lang: <none>
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] kex follows: False
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] Compression: none
2025-12-03T09:35:21.892 [DEBUG] [Thread-114321] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:35:21.907 [DEBUG] [Thread-114321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:35:21.907 [DEBUG] [Thread-114321] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:35:21.907 [DEBUG] [Thread-114321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:35:21.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:35:21.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:35:21.908 [DEBUG] [Thread-114321] [transport.py] [_log()] userauth is OK
2025-12-03T09:35:21.908 [DEBUG] [Thread-114321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:35:21.908 [DEBUG] [Thread-114321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:35:21.908 [DEBUG] [Thread-114321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:35:21.908 [DEBUG] [Thread-114321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:35:21.918 [INFO] [Thread-114321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:35:21.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:35:22.521 [DEBUG] [Thread-114321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:35:22.521 [DEBUG] [Thread-114321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:35:22.521 [DEBUG] [Thread-114321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:35:22.561 [DEBUG] [Thread-114321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:35:22.561 [DEBUG] [Thread-114321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:35:22.563 [DEBUG] [Thread-114321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:35:22.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:35:22.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:35:22.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:35:22.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:35:22.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:35:22.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:35:22.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.316024 -999.00  +14.80  23.52     60   +7.30 1 2 1 1 1   888    0 8.00 28.55 ----- 25.1 23.5 142.2 27.5 20.9 -20.4 20.1 -19.1 19.4 -18.8 19.9 -21.5
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.316024
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:35:22.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:35:05', tmtdew=8.68, humidity=55.89, cloud=0.0, wind=23.33, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:35:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:35:22.580 [DEBUG] [Thread-114321] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:35:22.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:35:22.665 [DEBUG] [Thread-114324] [transport.py] [_log()] starting thread (client mode): 0xa27c0850
2025-12-03T09:35:22.665 [DEBUG] [Thread-114324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:35:22.679 [DEBUG] [Thread-114324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:35:22.679 [INFO] [Thread-114324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] client lang: <none>
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] server lang: <none>
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] kex follows: False
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] Compression: none
2025-12-03T09:35:22.687 [DEBUG] [Thread-114324] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:35:22.745 [DEBUG] [Thread-114324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:35:22.745 [DEBUG] [Thread-114324] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:35:22.745 [DEBUG] [Thread-114324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:35:22.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:35:22.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:35:22.803 [DEBUG] [Thread-114324] [transport.py] [_log()] userauth is OK
2025-12-03T09:35:22.803 [DEBUG] [Thread-114324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:35:22.803 [DEBUG] [Thread-114324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:35:22.803 [DEBUG] [Thread-114324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:35:22.803 [DEBUG] [Thread-114324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:35:22.820 [INFO] [Thread-114324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:35:22.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:35:22.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:35:23.053 [DEBUG] [Thread-114326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:23.672 [DEBUG] [Thread-114324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:35:23.672 [DEBUG] [Thread-114324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:35:23.720 [DEBUG] [Thread-114324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:35:23.720 [DEBUG] [Thread-114324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:35:23.728 [DEBUG] [Thread-114324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:35:23.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:35:23.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:35:23.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:35:23.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:35:23.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:35:23.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:35:23.761 [DEBUG] [Thread-114324] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:35:38.090 [DEBUG] [Thread-114327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:38.194 [DEBUG] [Thread-114328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:38.463 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:38.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:53.117 [DEBUG] [Thread-114329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:35:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:35:53.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:35:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:35:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 35, 37), 9.25, 53.79, 0.0, 27.88, 14.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:35:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:35:37
2025-12-03T09:35:54.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:35:54.724 [DEBUG] [Thread-114330] [transport.py] [_log()] starting thread (client mode): 0xa27e8250
2025-12-03T09:35:54.724 [DEBUG] [Thread-114330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:35:54.735 [DEBUG] [Thread-114330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:35:54.736 [INFO] [Thread-114330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] client lang: <none>
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] server lang: <none>
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] kex follows: False
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:35:54.737 [DEBUG] [Thread-114330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:35:54.738 [DEBUG] [Thread-114330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:35:54.738 [DEBUG] [Thread-114330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:35:54.738 [DEBUG] [Thread-114330] [transport.py] [_log()] Compression: none
2025-12-03T09:35:54.738 [DEBUG] [Thread-114330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:35:54.746 [DEBUG] [Thread-114330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:35:54.746 [DEBUG] [Thread-114330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:35:54.746 [DEBUG] [Thread-114330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:35:54.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:35:54.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:35:54.747 [DEBUG] [Thread-114330] [transport.py] [_log()] userauth is OK
2025-12-03T09:35:54.747 [DEBUG] [Thread-114330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:35:54.747 [DEBUG] [Thread-114330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:35:54.747 [DEBUG] [Thread-114330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:35:54.747 [DEBUG] [Thread-114330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:35:54.760 [INFO] [Thread-114330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:35:54.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:35:55.336 [DEBUG] [Thread-114330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:35:55.336 [DEBUG] [Thread-114330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:35:55.336 [DEBUG] [Thread-114330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:35:55.377 [DEBUG] [Thread-114330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:35:55.377 [DEBUG] [Thread-114330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:35:55.379 [DEBUG] [Thread-114330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:35:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:35:55.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:35:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:35:55.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:35:55.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:35:55.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:35:55.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:35:55.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:35:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:35:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.316371 -999.00  +14.30  22.23     59   +6.60 1 2 1 1 1   888    0 7.99 30.82 ----- 20.5 22.2 139.0 31.5 20.7 -22.2 20.0 -19.7 19.2 -20.1 19.9 -21.1
2025-12-03T09:35:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:35:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:35:55.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.316371
2025-12-03T09:35:55.402 [DEBUG] [Thread-114330] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:35:55.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:35:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:35:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:35:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:35:55.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:35:55.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:35:37', tmtdew=9.25, humidity=53.79, cloud=0.0, wind=27.88, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:35:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:35:55.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:35:55.505 [DEBUG] [Thread-114333] [transport.py] [_log()] starting thread (client mode): 0xa27e9f60
2025-12-03T09:35:55.505 [DEBUG] [Thread-114333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:35:55.519 [DEBUG] [Thread-114333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:35:55.520 [INFO] [Thread-114333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:35:55.527 [DEBUG] [Thread-114333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:35:55.527 [DEBUG] [Thread-114333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:35:55.527 [DEBUG] [Thread-114333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:35:55.527 [DEBUG] [Thread-114333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:55.527 [DEBUG] [Thread-114333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] client lang: <none>
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] server lang: <none>
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] kex follows: False
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] Compression: none
2025-12-03T09:35:55.528 [DEBUG] [Thread-114333] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:35:55.590 [DEBUG] [Thread-114333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:35:55.591 [DEBUG] [Thread-114333] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:35:55.591 [DEBUG] [Thread-114333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:35:55.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:35:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:35:55.646 [DEBUG] [Thread-114333] [transport.py] [_log()] userauth is OK
2025-12-03T09:35:55.646 [DEBUG] [Thread-114333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:35:55.647 [DEBUG] [Thread-114333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:35:55.647 [DEBUG] [Thread-114333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:35:55.647 [DEBUG] [Thread-114333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:35:55.665 [INFO] [Thread-114333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:35:55.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:35:55.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:35:56.500 [DEBUG] [Thread-114333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:35:56.500 [DEBUG] [Thread-114333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:35:56.547 [DEBUG] [Thread-114333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:35:56.548 [DEBUG] [Thread-114333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:35:56.557 [DEBUG] [Thread-114333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:35:56.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:35:56.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:35:56.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:35:56.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:35:56.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:35:56.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:35:56.591 [DEBUG] [Thread-114333] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:36:08.146 [DEBUG] [Thread-114335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:23.191 [DEBUG] [Thread-114336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:36:26.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:36:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:36:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 36, 9), 8.98, 54.77, 0.0, 27.61, 14.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:36:27.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:36:09
2025-12-03T09:36:27.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:36:27.574 [DEBUG] [Thread-114337] [transport.py] [_log()] starting thread (client mode): 0xa271da80
2025-12-03T09:36:27.574 [DEBUG] [Thread-114337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:36:27.593 [DEBUG] [Thread-114337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:36:27.593 [INFO] [Thread-114337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:36:27.595 [DEBUG] [Thread-114337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] client lang: <none>
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] server lang: <none>
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] kex follows: False
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] Compression: none
2025-12-03T09:36:27.596 [DEBUG] [Thread-114337] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:36:27.608 [DEBUG] [Thread-114337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:36:27.609 [DEBUG] [Thread-114337] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:36:27.609 [DEBUG] [Thread-114337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:36:27.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:36:27.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:36:27.611 [DEBUG] [Thread-114337] [transport.py] [_log()] userauth is OK
2025-12-03T09:36:27.611 [DEBUG] [Thread-114337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:36:27.612 [DEBUG] [Thread-114337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:36:27.612 [DEBUG] [Thread-114337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:36:27.612 [DEBUG] [Thread-114337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:36:27.637 [INFO] [Thread-114337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:36:27.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:36:28.253 [DEBUG] [Thread-114337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:36:28.253 [DEBUG] [Thread-114337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:36:28.254 [DEBUG] [Thread-114337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:36:28.295 [DEBUG] [Thread-114337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:36:28.295 [DEBUG] [Thread-114337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:36:28.297 [DEBUG] [Thread-114337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:36:28.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:36:28.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:36:28.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:36:28.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:36:28.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:36:28.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:36:28.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.316718 -999.00  +14.00  21.94     60   +6.50 1 2 1 1 1   888    0 7.99 32.45 ----- 21.4 21.9 137.8 31.6 20.6 -23.2 20.0 -22.8 19.1 -22.6 19.6 -22.7
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:36:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.316718
2025-12-03T09:36:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:36:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:36:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:36:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:36:28.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:36:28.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:36:09', tmtdew=8.98, humidity=54.77, cloud=0.0, wind=27.61, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:36:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:36:28.314 [DEBUG] [Thread-114337] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:36:28.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:36:28.420 [DEBUG] [Thread-114340] [transport.py] [_log()] starting thread (client mode): 0xa271f5b0
2025-12-03T09:36:28.420 [DEBUG] [Thread-114340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:36:28.439 [DEBUG] [Thread-114340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:36:28.439 [INFO] [Thread-114340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:36:28.446 [DEBUG] [Thread-114340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:36:28.447 [DEBUG] [Thread-114340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] client lang: <none>
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] server lang: <none>
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] kex follows: False
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] Compression: none
2025-12-03T09:36:28.448 [DEBUG] [Thread-114340] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:36:28.506 [DEBUG] [Thread-114340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:36:28.507 [DEBUG] [Thread-114340] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:36:28.507 [DEBUG] [Thread-114340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:36:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:36:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:36:28.567 [DEBUG] [Thread-114340] [transport.py] [_log()] userauth is OK
2025-12-03T09:36:28.568 [DEBUG] [Thread-114340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:36:28.568 [DEBUG] [Thread-114340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:36:28.568 [DEBUG] [Thread-114340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:36:28.568 [DEBUG] [Thread-114340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:36:28.594 [INFO] [Thread-114340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:36:28.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:36:28.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:36:29.444 [DEBUG] [Thread-114340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:36:29.444 [DEBUG] [Thread-114340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:36:29.491 [DEBUG] [Thread-114340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:36:29.492 [DEBUG] [Thread-114340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:36:29.504 [DEBUG] [Thread-114340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:36:29.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:36:29.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:36:29.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:36:29.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:36:29.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:36:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:36:29.539 [DEBUG] [Thread-114340] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:36:38.218 [DEBUG] [Thread-114342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:38.224 [DEBUG] [Thread-114343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:38.615 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:38.616 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:53.249 [DEBUG] [Thread-114344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:36:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:36:59.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:36:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:37:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 36, 41), 8.86, 55.15, 0.0, 22.96, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:37:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:36:41
2025-12-03T09:37:00.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:37:00.513 [DEBUG] [Thread-114345] [transport.py] [_log()] starting thread (client mode): 0xa27c0790
2025-12-03T09:37:00.513 [DEBUG] [Thread-114345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:37:00.533 [DEBUG] [Thread-114345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:37:00.533 [INFO] [Thread-114345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] client lang: <none>
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] server lang: <none>
2025-12-03T09:37:00.535 [DEBUG] [Thread-114345] [transport.py] [_log()] kex follows: False
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] Compression: none
2025-12-03T09:37:00.536 [DEBUG] [Thread-114345] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:37:00.554 [DEBUG] [Thread-114345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:37:00.554 [DEBUG] [Thread-114345] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:37:00.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:37:00.556 [DEBUG] [Thread-114345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:37:00.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:37:00.558 [DEBUG] [Thread-114345] [transport.py] [_log()] userauth is OK
2025-12-03T09:37:00.558 [DEBUG] [Thread-114345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:37:00.558 [DEBUG] [Thread-114345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:37:00.558 [DEBUG] [Thread-114345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:37:00.558 [DEBUG] [Thread-114345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:37:00.581 [INFO] [Thread-114345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:37:00.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:37:01.168 [DEBUG] [Thread-114345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:37:01.168 [DEBUG] [Thread-114345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:37:01.168 [DEBUG] [Thread-114345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:37:01.209 [DEBUG] [Thread-114345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:37:01.209 [DEBUG] [Thread-114345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:37:01.212 [DEBUG] [Thread-114345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:37:01.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:37:01.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:37:01.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:37:01.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:37:01.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:37:01.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:37:01.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:37:01.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.317066 -999.00  +14.20  18.50     60   +6.70 1 2 1 1 1   888    0 8.11 31.95 ----- 22.2 18.5 159.8 24.3 20.4 -23.5 19.8 -22.8 18.9 -22.4 19.4 -22.8
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.317066
2025-12-03T09:37:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:37:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:37:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:37:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:37:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:37:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:36:41', tmtdew=8.86, humidity=55.15, cloud=0.0, wind=22.96, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:36:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:37:01.236 [DEBUG] [Thread-114345] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:37:01.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:37:01.335 [DEBUG] [Thread-114348] [transport.py] [_log()] starting thread (client mode): 0xa51cd120
2025-12-03T09:37:01.335 [DEBUG] [Thread-114348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:37:01.350 [DEBUG] [Thread-114348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:37:01.351 [INFO] [Thread-114348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:37:01.358 [DEBUG] [Thread-114348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] client lang: <none>
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] server lang: <none>
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] kex follows: False
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:37:01.359 [DEBUG] [Thread-114348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:37:01.360 [DEBUG] [Thread-114348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:37:01.360 [DEBUG] [Thread-114348] [transport.py] [_log()] Compression: none
2025-12-03T09:37:01.360 [DEBUG] [Thread-114348] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:37:01.418 [DEBUG] [Thread-114348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:37:01.419 [DEBUG] [Thread-114348] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:37:01.419 [DEBUG] [Thread-114348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:37:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:37:01.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:37:01.478 [DEBUG] [Thread-114348] [transport.py] [_log()] userauth is OK
2025-12-03T09:37:01.478 [DEBUG] [Thread-114348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:37:01.478 [DEBUG] [Thread-114348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:37:01.479 [DEBUG] [Thread-114348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:37:01.479 [DEBUG] [Thread-114348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:37:01.499 [INFO] [Thread-114348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:37:01.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:37:01.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:37:02.345 [DEBUG] [Thread-114348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:37:02.345 [DEBUG] [Thread-114348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:37:02.394 [DEBUG] [Thread-114348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:37:02.394 [DEBUG] [Thread-114348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:37:02.405 [DEBUG] [Thread-114348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:37:02.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:37:02.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:37:02.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:37:02.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:37:02.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:37:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:37:02.445 [DEBUG] [Thread-114348] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:37:08.275 [DEBUG] [Thread-114350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:23.318 [DEBUG] [Thread-114351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:37:32.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:37:32.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:37:33.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 37, 13), 8.91, 54.97, 0.0, 26.01, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:37:33.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:37:13
2025-12-03T09:37:33.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:37:33.411 [DEBUG] [Thread-114352] [transport.py] [_log()] starting thread (client mode): 0xa27c03d0
2025-12-03T09:37:33.411 [DEBUG] [Thread-114352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:37:33.432 [DEBUG] [Thread-114352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:37:33.432 [INFO] [Thread-114352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:37:33.435 [DEBUG] [Thread-114352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:37:33.435 [DEBUG] [Thread-114352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:37:33.435 [DEBUG] [Thread-114352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:37:33.435 [DEBUG] [Thread-114352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:33.435 [DEBUG] [Thread-114352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] client lang: <none>
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] server lang: <none>
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] kex follows: False
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] Compression: none
2025-12-03T09:37:33.436 [DEBUG] [Thread-114352] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:37:33.455 [DEBUG] [Thread-114352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:37:33.455 [DEBUG] [Thread-114352] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:37:33.456 [DEBUG] [Thread-114352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:37:33.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:37:33.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:37:33.458 [DEBUG] [Thread-114352] [transport.py] [_log()] userauth is OK
2025-12-03T09:37:33.458 [DEBUG] [Thread-114352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:37:33.458 [DEBUG] [Thread-114352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:37:33.458 [DEBUG] [Thread-114352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:37:33.458 [DEBUG] [Thread-114352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:37:33.493 [INFO] [Thread-114352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:37:33.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:37:34.114 [DEBUG] [Thread-114352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:37:34.114 [DEBUG] [Thread-114352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:37:34.114 [DEBUG] [Thread-114352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:37:34.155 [DEBUG] [Thread-114352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:37:34.155 [DEBUG] [Thread-114352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:37:34.158 [DEBUG] [Thread-114352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:37:34.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:37:34.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:37:34.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:37:34.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:37:34.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:37:34.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:37:34.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.317066 -999.00  +14.20  18.50     60   +6.70 1 2 1 1 1   888    0 8.11 31.95 ----- 22.2 18.5 159.8 24.3 20.4 -23.5 19.8 -22.8 18.9 -22.4 19.4 -22.8
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:37:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.317066
2025-12-03T09:37:34.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:37:34.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:37:34.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:37:34.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:37:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:37:34.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:37:13', tmtdew=8.91, humidity=54.97, cloud=0.0, wind=26.01, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:36:34.502', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:37:34.180 [DEBUG] [Thread-114352] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:37:34.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:37:34.276 [DEBUG] [Thread-114355] [transport.py] [_log()] starting thread (client mode): 0xa27e9ba0
2025-12-03T09:37:34.276 [DEBUG] [Thread-114355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:37:34.291 [DEBUG] [Thread-114355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:37:34.291 [INFO] [Thread-114355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:34.298 [DEBUG] [Thread-114355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] client lang: <none>
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] server lang: <none>
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] kex follows: False
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] Compression: none
2025-12-03T09:37:34.299 [DEBUG] [Thread-114355] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:37:34.358 [DEBUG] [Thread-114355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:37:34.359 [DEBUG] [Thread-114355] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:37:34.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:37:34.359 [DEBUG] [Thread-114355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:37:34.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:37:34.414 [DEBUG] [Thread-114355] [transport.py] [_log()] userauth is OK
2025-12-03T09:37:34.414 [DEBUG] [Thread-114355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:37:34.414 [DEBUG] [Thread-114355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:37:34.415 [DEBUG] [Thread-114355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:37:34.415 [DEBUG] [Thread-114355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:37:34.434 [INFO] [Thread-114355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:37:34.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:37:34.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:37:35.325 [DEBUG] [Thread-114355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:37:35.325 [DEBUG] [Thread-114355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:37:35.372 [DEBUG] [Thread-114355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:37:35.373 [DEBUG] [Thread-114355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:37:35.381 [DEBUG] [Thread-114355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:37:35.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:37:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:37:35.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:37:35.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:37:35.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:37:35.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:37:35.415 [DEBUG] [Thread-114355] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:37:38.269 [DEBUG] [Thread-114357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:38.348 [DEBUG] [Thread-114358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:38.752 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:38.753 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:37:53.393 [DEBUG] [Thread-114359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:38:05.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:38:05.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:38:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 37, 46), 9.2, 54.14, 0.0, 27.0, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:38:06.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:37:46
2025-12-03T09:38:06.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:38:06.376 [DEBUG] [Thread-114360] [transport.py] [_log()] starting thread (client mode): 0xa27c1390
2025-12-03T09:38:06.376 [DEBUG] [Thread-114360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:38:06.396 [DEBUG] [Thread-114360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:38:06.396 [INFO] [Thread-114360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:38:06.399 [DEBUG] [Thread-114360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:38:06.399 [DEBUG] [Thread-114360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:38:06.399 [DEBUG] [Thread-114360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:38:06.399 [DEBUG] [Thread-114360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] client lang: <none>
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] server lang: <none>
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] kex follows: False
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] Compression: none
2025-12-03T09:38:06.400 [DEBUG] [Thread-114360] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:38:06.420 [DEBUG] [Thread-114360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:38:06.420 [DEBUG] [Thread-114360] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:38:06.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:38:06.421 [DEBUG] [Thread-114360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:38:06.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:38:06.423 [DEBUG] [Thread-114360] [transport.py] [_log()] userauth is OK
2025-12-03T09:38:06.423 [DEBUG] [Thread-114360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:38:06.424 [DEBUG] [Thread-114360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:38:06.424 [DEBUG] [Thread-114360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:38:06.424 [DEBUG] [Thread-114360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:38:06.448 [INFO] [Thread-114360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:38:06.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:38:07.049 [DEBUG] [Thread-114360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:38:07.049 [DEBUG] [Thread-114360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:38:07.049 [DEBUG] [Thread-114360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:38:07.090 [DEBUG] [Thread-114360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:38:07.090 [DEBUG] [Thread-114360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:38:07.093 [DEBUG] [Thread-114360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:38:07.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:38:07.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:38:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:38:07.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:38:07.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:38:07.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:38:07.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.317413 -999.00  +14.10  19.84     59   +6.40 1 2 1 1 1   888    0 8.04 31.81 ----- 27.1 19.8 143.4 33.3 20.0 -23.9 19.5 -22.7 18.9 -22.0 19.4 -22.9
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:38:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.317413
2025-12-03T09:38:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:38:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:38:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:38:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:38:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:38:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:37:46', tmtdew=9.2, humidity=54.14, cloud=0.0, wind=27.0, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:37:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:38:07.116 [DEBUG] [Thread-114360] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:38:07.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:38:07.212 [DEBUG] [Thread-114363] [transport.py] [_log()] starting thread (client mode): 0xa27ef880
2025-12-03T09:38:07.212 [DEBUG] [Thread-114363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:38:07.228 [DEBUG] [Thread-114363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:38:07.228 [INFO] [Thread-114363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:38:07.235 [DEBUG] [Thread-114363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:38:07.236 [DEBUG] [Thread-114363] [transport.py] [_log()] client lang: <none>
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] server lang: <none>
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] kex follows: False
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] Compression: none
2025-12-03T09:38:07.237 [DEBUG] [Thread-114363] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:38:07.294 [DEBUG] [Thread-114363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:38:07.295 [DEBUG] [Thread-114363] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:38:07.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:38:07.296 [DEBUG] [Thread-114363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:38:07.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:38:07.355 [DEBUG] [Thread-114363] [transport.py] [_log()] userauth is OK
2025-12-03T09:38:07.355 [DEBUG] [Thread-114363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:38:07.355 [DEBUG] [Thread-114363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:38:07.355 [DEBUG] [Thread-114363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:38:07.355 [DEBUG] [Thread-114363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:38:07.375 [INFO] [Thread-114363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:38:07.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:38:07.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:38:08.217 [DEBUG] [Thread-114363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:38:08.217 [DEBUG] [Thread-114363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:38:08.265 [DEBUG] [Thread-114363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:38:08.265 [DEBUG] [Thread-114363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:38:08.275 [DEBUG] [Thread-114363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:38:08.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:38:08.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:38:08.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:38:08.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:38:08.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:38:08.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:38:08.312 [DEBUG] [Thread-114363] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:38:08.423 [DEBUG] [Thread-114365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:23.472 [DEBUG] [Thread-114366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:38.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:38:38.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:38:38.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:38:38.324 [DEBUG] [Thread-114367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:38.499 [DEBUG] [Thread-114368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:38.894 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:38.895 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:38:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 38, 18), 9.29, 53.75, 0.0, 26.86, 13.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:38:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:38:18
2025-12-03T09:38:39.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:38:39.256 [DEBUG] [Thread-114369] [transport.py] [_log()] starting thread (client mode): 0xa271d990
2025-12-03T09:38:39.257 [DEBUG] [Thread-114369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:38:39.277 [DEBUG] [Thread-114369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:38:39.277 [INFO] [Thread-114369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:39.280 [DEBUG] [Thread-114369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] client lang: <none>
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] server lang: <none>
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] kex follows: False
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] Compression: none
2025-12-03T09:38:39.281 [DEBUG] [Thread-114369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:38:39.300 [DEBUG] [Thread-114369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:38:39.301 [DEBUG] [Thread-114369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:38:39.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:38:39.302 [DEBUG] [Thread-114369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:38:39.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:38:39.304 [DEBUG] [Thread-114369] [transport.py] [_log()] userauth is OK
2025-12-03T09:38:39.304 [DEBUG] [Thread-114369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:38:39.304 [DEBUG] [Thread-114369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:38:39.304 [DEBUG] [Thread-114369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:38:39.304 [DEBUG] [Thread-114369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:38:39.321 [INFO] [Thread-114369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:38:39.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:38:39.960 [DEBUG] [Thread-114369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:38:39.960 [DEBUG] [Thread-114369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:38:39.961 [DEBUG] [Thread-114369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:38:40.001 [DEBUG] [Thread-114369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:38:40.001 [DEBUG] [Thread-114369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:38:40.004 [DEBUG] [Thread-114369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:38:40.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:38:40.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:38:40.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:38:40.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:38:40.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:38:40.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:38:40.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:38:40.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.317760 -999.00  +14.10  17.83     59   +6.40 1 2 1 1 1   888    0 8.19 34.06 ----- 15.5 17.8 138.0 29.8 19.9 -23.2 19.5 -22.2 18.8 -22.7 19.4 -21.8
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.317760
2025-12-03T09:38:40.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:38:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:38:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:38:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:38:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:38:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:38:18', tmtdew=9.29, humidity=53.75, cloud=0.0, wind=26.86, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:37:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:38:40.028 [DEBUG] [Thread-114369] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:38:40.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:38:40.126 [DEBUG] [Thread-114372] [transport.py] [_log()] starting thread (client mode): 0xa27ebb50
2025-12-03T09:38:40.126 [DEBUG] [Thread-114372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:38:40.141 [DEBUG] [Thread-114372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:38:40.141 [INFO] [Thread-114372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:38:40.149 [DEBUG] [Thread-114372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] client lang: <none>
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] server lang: <none>
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] kex follows: False
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] Compression: none
2025-12-03T09:38:40.150 [DEBUG] [Thread-114372] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:38:40.205 [DEBUG] [Thread-114372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:38:40.206 [DEBUG] [Thread-114372] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:38:40.206 [DEBUG] [Thread-114372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:38:40.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:38:40.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:38:40.263 [DEBUG] [Thread-114372] [transport.py] [_log()] userauth is OK
2025-12-03T09:38:40.263 [DEBUG] [Thread-114372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:38:40.263 [DEBUG] [Thread-114372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:38:40.263 [DEBUG] [Thread-114372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:38:40.263 [DEBUG] [Thread-114372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:38:40.277 [INFO] [Thread-114372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:38:40.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:38:40.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:38:41.132 [DEBUG] [Thread-114372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:38:41.132 [DEBUG] [Thread-114372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:38:41.180 [DEBUG] [Thread-114372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:38:41.180 [DEBUG] [Thread-114372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:38:41.189 [DEBUG] [Thread-114372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:38:41.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:38:41.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:38:41.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:38:41.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:38:41.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:38:41.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:38:41.225 [DEBUG] [Thread-114372] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:38:53.524 [DEBUG] [Thread-114374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:08.568 [DEBUG] [Thread-114375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:11.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:39:11.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:39:11.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:39:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 38, 50), 8.86, 55.22, 0.0, 16.85, 13.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:39:11.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:38:50
2025-12-03T09:39:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:39:12.229 [DEBUG] [Thread-114376] [transport.py] [_log()] starting thread (client mode): 0xa27c2a10
2025-12-03T09:39:12.229 [DEBUG] [Thread-114376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:39:12.249 [DEBUG] [Thread-114376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:39:12.249 [INFO] [Thread-114376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] client lang: <none>
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] server lang: <none>
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] kex follows: False
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:39:12.252 [DEBUG] [Thread-114376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:39:12.253 [DEBUG] [Thread-114376] [transport.py] [_log()] Compression: none
2025-12-03T09:39:12.253 [DEBUG] [Thread-114376] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:39:12.269 [DEBUG] [Thread-114376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:39:12.269 [DEBUG] [Thread-114376] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:39:12.269 [DEBUG] [Thread-114376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:39:12.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:39:12.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:39:12.270 [DEBUG] [Thread-114376] [transport.py] [_log()] userauth is OK
2025-12-03T09:39:12.270 [DEBUG] [Thread-114376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:39:12.270 [DEBUG] [Thread-114376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:39:12.270 [DEBUG] [Thread-114376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:39:12.270 [DEBUG] [Thread-114376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:39:12.279 [INFO] [Thread-114376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:39:12.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:39:12.927 [DEBUG] [Thread-114376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:39:12.927 [DEBUG] [Thread-114376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:39:12.927 [DEBUG] [Thread-114376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:39:12.969 [DEBUG] [Thread-114376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:39:12.969 [DEBUG] [Thread-114376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:39:12.971 [DEBUG] [Thread-114376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:39:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:39:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:39:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:39:12.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:39:12.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:39:12.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:39:12.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:39:12.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.318454 -999.00  +14.10  18.06     60   +6.50 1 2 1 1 1   888    0 8.05 32.88 ----- 15.2 18.1 120.4 22.4 19.6 -22.9 19.4 -21.6 18.9 -21.2 19.2 -21.5
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.318454
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:39:12.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:38:50', tmtdew=8.86, humidity=55.22, cloud=0.0, wind=16.85, temperature=13.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:38:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:39:12.988 [DEBUG] [Thread-114376] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:39:13.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:39:13.074 [DEBUG] [Thread-114379] [transport.py] [_log()] starting thread (client mode): 0xa27c0430
2025-12-03T09:39:13.074 [DEBUG] [Thread-114379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:39:13.089 [DEBUG] [Thread-114379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:39:13.089 [INFO] [Thread-114379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:39:13.096 [DEBUG] [Thread-114379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] client lang: <none>
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] server lang: <none>
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] kex follows: False
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] Compression: none
2025-12-03T09:39:13.097 [DEBUG] [Thread-114379] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:39:13.153 [DEBUG] [Thread-114379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:39:13.154 [DEBUG] [Thread-114379] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:39:13.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:39:13.154 [DEBUG] [Thread-114379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:39:13.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:39:13.213 [DEBUG] [Thread-114379] [transport.py] [_log()] userauth is OK
2025-12-03T09:39:13.213 [DEBUG] [Thread-114379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:39:13.213 [DEBUG] [Thread-114379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:39:13.213 [DEBUG] [Thread-114379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:39:13.213 [DEBUG] [Thread-114379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:39:13.227 [INFO] [Thread-114379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:39:13.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:39:13.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:39:14.078 [DEBUG] [Thread-114379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:39:14.078 [DEBUG] [Thread-114379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:39:14.125 [DEBUG] [Thread-114379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:39:14.125 [DEBUG] [Thread-114379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:39:14.134 [DEBUG] [Thread-114379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:39:14.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:39:14.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:39:14.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:39:14.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:39:14.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:39:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:39:14.167 [DEBUG] [Thread-114379] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:39:23.594 [DEBUG] [Thread-114381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:38.368 [DEBUG] [Thread-114382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:38.631 [DEBUG] [Thread-114383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:39.033 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:39.034 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:39:44.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:39:44.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:39:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:39:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 39, 22), 8.63, 56.06, 0.0, 18.05, 13.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:39:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:39:22
2025-12-03T09:39:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:39:45.149 [DEBUG] [Thread-114384] [transport.py] [_log()] starting thread (client mode): 0xa27ee800
2025-12-03T09:39:45.149 [DEBUG] [Thread-114384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:39:45.169 [DEBUG] [Thread-114384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:39:45.169 [INFO] [Thread-114384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:39:45.181 [DEBUG] [Thread-114384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:45.182 [DEBUG] [Thread-114384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] client lang: <none>
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] server lang: <none>
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] kex follows: False
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] Compression: none
2025-12-03T09:39:45.183 [DEBUG] [Thread-114384] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:39:45.202 [DEBUG] [Thread-114384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:39:45.203 [DEBUG] [Thread-114384] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:39:45.204 [DEBUG] [Thread-114384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:39:45.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:39:45.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:39:45.206 [DEBUG] [Thread-114384] [transport.py] [_log()] userauth is OK
2025-12-03T09:39:45.206 [DEBUG] [Thread-114384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:39:45.206 [DEBUG] [Thread-114384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:39:45.206 [DEBUG] [Thread-114384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:39:45.206 [DEBUG] [Thread-114384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:39:45.242 [INFO] [Thread-114384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:39:45.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:39:45.892 [DEBUG] [Thread-114384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:39:45.893 [DEBUG] [Thread-114384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:39:45.893 [DEBUG] [Thread-114384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:39:45.934 [DEBUG] [Thread-114384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:39:45.934 [DEBUG] [Thread-114384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:39:45.937 [DEBUG] [Thread-114384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:39:45.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:39:45.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:39:45.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:39:45.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:39:45.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:39:45.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:39:45.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:39:45.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.318802 -999.00  +14.20   9.20     60   +6.70 1 2 1 1 1   888    0 8.14 30.86 ----- 14.7 9.2 150.0 19.1 19.6 -21.6 19.4 -21.8 18.9 -21.0 19.2 -21.7
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.318802
2025-12-03T09:39:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:39:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:39:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:39:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:39:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:39:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:39:22', tmtdew=8.63, humidity=56.06, cloud=0.0, wind=18.05, temperature=13.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:39:04.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:39:45.962 [DEBUG] [Thread-114384] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:39:46.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:39:46.059 [DEBUG] [Thread-114387] [transport.py] [_log()] starting thread (client mode): 0xa27b7ac0
2025-12-03T09:39:46.059 [DEBUG] [Thread-114387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:39:46.077 [DEBUG] [Thread-114387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:39:46.077 [INFO] [Thread-114387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:39:46.084 [DEBUG] [Thread-114387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] client lang: <none>
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] server lang: <none>
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] kex follows: False
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:39:46.085 [DEBUG] [Thread-114387] [transport.py] [_log()] Compression: none
2025-12-03T09:39:46.086 [DEBUG] [Thread-114387] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:39:46.142 [DEBUG] [Thread-114387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:39:46.143 [DEBUG] [Thread-114387] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:39:46.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:39:46.143 [DEBUG] [Thread-114387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:39:46.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:39:46.198 [DEBUG] [Thread-114387] [transport.py] [_log()] userauth is OK
2025-12-03T09:39:46.199 [DEBUG] [Thread-114387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:39:46.199 [DEBUG] [Thread-114387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:39:46.199 [DEBUG] [Thread-114387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:39:46.199 [DEBUG] [Thread-114387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:39:46.218 [INFO] [Thread-114387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:39:46.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:39:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:39:47.064 [DEBUG] [Thread-114387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:39:47.064 [DEBUG] [Thread-114387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:39:47.112 [DEBUG] [Thread-114387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:39:47.112 [DEBUG] [Thread-114387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:39:47.121 [DEBUG] [Thread-114387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:39:47.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:39:47.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:39:47.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:39:47.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:39:47.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:39:47.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:39:47.155 [DEBUG] [Thread-114387] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:39:53.657 [DEBUG] [Thread-114389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:08.693 [DEBUG] [Thread-114390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:17.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:40:17.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:40:17.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:40:17.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 39, 54), 8.62, 55.96, 0.0, 22.23, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:40:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:39:54
2025-12-03T09:40:17.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:40:18.134 [DEBUG] [Thread-114391] [transport.py] [_log()] starting thread (client mode): 0xa27b4ee0
2025-12-03T09:40:18.134 [DEBUG] [Thread-114391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:40:18.154 [DEBUG] [Thread-114391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:40:18.154 [INFO] [Thread-114391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] client lang: <none>
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] server lang: <none>
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] kex follows: False
2025-12-03T09:40:18.158 [DEBUG] [Thread-114391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] Compression: none
2025-12-03T09:40:18.159 [DEBUG] [Thread-114391] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:40:18.177 [DEBUG] [Thread-114391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:40:18.178 [DEBUG] [Thread-114391] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:40:18.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:40:18.179 [DEBUG] [Thread-114391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:40:18.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:40:18.181 [DEBUG] [Thread-114391] [transport.py] [_log()] userauth is OK
2025-12-03T09:40:18.181 [DEBUG] [Thread-114391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:40:18.181 [DEBUG] [Thread-114391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:40:18.181 [DEBUG] [Thread-114391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:40:18.181 [DEBUG] [Thread-114391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:40:18.205 [INFO] [Thread-114391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:40:18.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:40:18.932 [DEBUG] [Thread-114391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:40:18.932 [DEBUG] [Thread-114391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:40:18.933 [DEBUG] [Thread-114391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:40:18.974 [DEBUG] [Thread-114391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:40:18.974 [DEBUG] [Thread-114391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:40:18.977 [DEBUG] [Thread-114391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:40:18.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:40:18.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:40:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:40:18.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:40:18.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:40:19.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:40:19.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:40:19.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:40:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:40:19.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.319149 -999.00  +14.50  15.33     60   +7.00 1 2 1 1 1   888    0 8.24 30.25 ----- 16.7 15.3 156.8 17.5 19.7 -22.0 19.4 -23.3 18.9 -21.4 19.3 -21.4
2025-12-03T09:40:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:40:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:40:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.319149
2025-12-03T09:40:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:40:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:40:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:40:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:40:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:40:19.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:39:54', tmtdew=8.62, humidity=55.96, cloud=0.0, wind=22.23, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:39:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:40:19.002 [DEBUG] [Thread-114391] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:40:19.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:40:19.112 [DEBUG] [Thread-114394] [transport.py] [_log()] starting thread (client mode): 0xa27ecd30
2025-12-03T09:40:19.112 [DEBUG] [Thread-114394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:40:19.127 [DEBUG] [Thread-114394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:40:19.127 [INFO] [Thread-114394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] client lang: <none>
2025-12-03T09:40:19.135 [DEBUG] [Thread-114394] [transport.py] [_log()] server lang: <none>
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] kex follows: False
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] Compression: none
2025-12-03T09:40:19.136 [DEBUG] [Thread-114394] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:40:19.194 [DEBUG] [Thread-114394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:40:19.195 [DEBUG] [Thread-114394] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:40:19.195 [DEBUG] [Thread-114394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:40:19.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:40:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:40:19.251 [DEBUG] [Thread-114394] [transport.py] [_log()] userauth is OK
2025-12-03T09:40:19.251 [DEBUG] [Thread-114394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:40:19.251 [DEBUG] [Thread-114394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:40:19.251 [DEBUG] [Thread-114394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:40:19.251 [DEBUG] [Thread-114394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:40:19.271 [INFO] [Thread-114394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:40:19.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:40:19.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:40:20.101 [DEBUG] [Thread-114394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:40:20.101 [DEBUG] [Thread-114394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:40:20.149 [DEBUG] [Thread-114394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:40:20.149 [DEBUG] [Thread-114394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:40:20.158 [DEBUG] [Thread-114394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:40:20.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:40:20.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:40:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:40:20.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:40:20.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:40:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:40:20.193 [DEBUG] [Thread-114394] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:40:23.723 [DEBUG] [Thread-114396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:38.411 [DEBUG] [Thread-114397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:38.765 [DEBUG] [Thread-114398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:39.174 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:39.175 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:40:50.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:40:50.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:40:50.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:40:50.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 40, 26), 8.77, 55.45, 0.0, 26.2, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:40:50.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:40:26
2025-12-03T09:40:50.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:40:51.146 [DEBUG] [Thread-114399] [transport.py] [_log()] starting thread (client mode): 0xa27ed060
2025-12-03T09:40:51.146 [DEBUG] [Thread-114399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:40:51.166 [DEBUG] [Thread-114399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:40:51.166 [INFO] [Thread-114399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:40:51.169 [DEBUG] [Thread-114399] [transport.py] [_log()] client lang: <none>
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] server lang: <none>
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] kex follows: False
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] Compression: none
2025-12-03T09:40:51.170 [DEBUG] [Thread-114399] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:40:51.188 [DEBUG] [Thread-114399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:40:51.189 [DEBUG] [Thread-114399] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:40:51.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:40:51.190 [DEBUG] [Thread-114399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:40:51.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:40:51.191 [DEBUG] [Thread-114399] [transport.py] [_log()] userauth is OK
2025-12-03T09:40:51.191 [DEBUG] [Thread-114399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:40:51.191 [DEBUG] [Thread-114399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:40:51.191 [DEBUG] [Thread-114399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:40:51.191 [DEBUG] [Thread-114399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:40:51.225 [INFO] [Thread-114399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:40:51.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:40:51.877 [DEBUG] [Thread-114399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:40:51.878 [DEBUG] [Thread-114399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:40:51.878 [DEBUG] [Thread-114399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:40:51.919 [DEBUG] [Thread-114399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:40:51.919 [DEBUG] [Thread-114399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:40:51.921 [DEBUG] [Thread-114399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:40:51.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:40:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:40:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:40:51.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:40:51.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:40:51.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:40:51.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.319496 -999.00  +14.60  16.50     60   +7.00 1 2 1 1 1   888    0 8.18 27.61 ----- 15.8 16.5 170.2 21.4 19.8 -21.9 19.1 -24.0 18.9 -21.2 19.3 -22.8
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:40:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.319496
2025-12-03T09:40:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:40:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:40:51.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:40:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:40:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:40:51.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:40:26', tmtdew=8.77, humidity=55.45, cloud=0.0, wind=26.2, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:40:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:40:51.946 [DEBUG] [Thread-114399] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:40:52.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:40:52.042 [DEBUG] [Thread-114402] [transport.py] [_log()] starting thread (client mode): 0xa27ed8d0
2025-12-03T09:40:52.042 [DEBUG] [Thread-114402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:40:52.057 [DEBUG] [Thread-114402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:40:52.057 [INFO] [Thread-114402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:40:52.064 [DEBUG] [Thread-114402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] client lang: <none>
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] server lang: <none>
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] kex follows: False
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] Compression: none
2025-12-03T09:40:52.065 [DEBUG] [Thread-114402] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:40:52.122 [DEBUG] [Thread-114402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:40:52.123 [DEBUG] [Thread-114402] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:40:52.123 [DEBUG] [Thread-114402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:40:52.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:40:52.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:40:52.178 [DEBUG] [Thread-114402] [transport.py] [_log()] userauth is OK
2025-12-03T09:40:52.178 [DEBUG] [Thread-114402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:40:52.179 [DEBUG] [Thread-114402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:40:52.179 [DEBUG] [Thread-114402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:40:52.179 [DEBUG] [Thread-114402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:40:52.197 [INFO] [Thread-114402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:40:52.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:40:52.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:40:53.033 [DEBUG] [Thread-114402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:40:53.033 [DEBUG] [Thread-114402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:40:53.080 [DEBUG] [Thread-114402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:40:53.080 [DEBUG] [Thread-114402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:40:53.089 [DEBUG] [Thread-114402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:40:53.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:40:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:40:53.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:40:53.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:40:53.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:40:53.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:40:53.123 [DEBUG] [Thread-114402] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:40:53.801 [DEBUG] [Thread-114404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:08.846 [DEBUG] [Thread-114405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:23.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:41:23.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:41:23.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:41:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 40, 58), 8.87, 55.1, 0.0, 24.58, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:41:23.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:40:58
2025-12-03T09:41:23.872 [DEBUG] [Thread-114406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:23.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:41:24.102 [DEBUG] [Thread-114407] [transport.py] [_log()] starting thread (client mode): 0xa27ed0f0
2025-12-03T09:41:24.102 [DEBUG] [Thread-114407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:41:24.122 [DEBUG] [Thread-114407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:41:24.122 [INFO] [Thread-114407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:41:24.125 [DEBUG] [Thread-114407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:41:24.125 [DEBUG] [Thread-114407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] client lang: <none>
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] server lang: <none>
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] kex follows: False
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:41:24.126 [DEBUG] [Thread-114407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:41:24.127 [DEBUG] [Thread-114407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:41:24.127 [DEBUG] [Thread-114407] [transport.py] [_log()] Compression: none
2025-12-03T09:41:24.127 [DEBUG] [Thread-114407] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:41:24.146 [DEBUG] [Thread-114407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:41:24.146 [DEBUG] [Thread-114407] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:41:24.147 [DEBUG] [Thread-114407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:41:24.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:41:24.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:41:24.149 [DEBUG] [Thread-114407] [transport.py] [_log()] userauth is OK
2025-12-03T09:41:24.150 [DEBUG] [Thread-114407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:41:24.150 [DEBUG] [Thread-114407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:41:24.150 [DEBUG] [Thread-114407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:41:24.150 [DEBUG] [Thread-114407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:41:24.168 [INFO] [Thread-114407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:41:24.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:41:24.806 [DEBUG] [Thread-114407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:41:24.806 [DEBUG] [Thread-114407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:41:24.807 [DEBUG] [Thread-114407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:41:24.847 [DEBUG] [Thread-114407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:41:24.847 [DEBUG] [Thread-114407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:41:24.850 [DEBUG] [Thread-114407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:41:24.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:41:24.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:41:24.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:41:24.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:41:24.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:41:24.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:41:24.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:41:24.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:41:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:41:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.319843 -999.00  +14.40  18.64     60   +6.80 1 2 1 1 1   888    0 8.08 25.15 ----- 18.8 18.6 157.4 26.5 19.6 -23.8 19.2 -22.6 18.8 -22.8 19.2 -22.9
2025-12-03T09:41:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:41:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:41:24.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.319843
2025-12-03T09:41:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:41:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:41:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:41:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:41:24.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:41:24.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:40:58', tmtdew=8.87, humidity=55.1, cloud=0.0, wind=24.58, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:40:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:41:24.877 [DEBUG] [Thread-114407] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:41:24.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:41:38.445 [DEBUG] [Thread-114410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:38.899 [DEBUG] [Thread-114411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:39.313 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:39.314 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:41:53.942 [DEBUG] [Thread-114412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:08.970 [DEBUG] [Thread-114413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:24.004 [DEBUG] [Thread-114414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:38.474 [DEBUG] [Thread-114415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:39.037 [DEBUG] [Thread-114416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:39.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:39.456 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:42:54.066 [DEBUG] [Thread-114417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:09.094 [DEBUG] [Thread-114418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:24.120 [DEBUG] [Thread-114419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:38.510 [DEBUG] [Thread-114420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:38.646 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T09:43:39.147 [DEBUG] [Thread-114421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:39.598 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:39.599 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:43:54.175 [DEBUG] [Thread-114422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:08.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:44:08.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:44:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:44:09.200 [DEBUG] [Thread-114423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 43, 38), 8.72, 55.96, 0.0, 21.81, 14.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:44:09.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:43:38
2025-12-03T09:44:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:44:09.622 [DEBUG] [Thread-114424] [transport.py] [_log()] starting thread (client mode): 0xa27ee1a0
2025-12-03T09:44:09.622 [DEBUG] [Thread-114424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:44:09.640 [DEBUG] [Thread-114424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:44:09.640 [INFO] [Thread-114424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] client lang: <none>
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] server lang: <none>
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] kex follows: False
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:44:09.643 [DEBUG] [Thread-114424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:44:09.644 [DEBUG] [Thread-114424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:44:09.644 [DEBUG] [Thread-114424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:44:09.644 [DEBUG] [Thread-114424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:44:09.644 [DEBUG] [Thread-114424] [transport.py] [_log()] Compression: none
2025-12-03T09:44:09.644 [DEBUG] [Thread-114424] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:44:09.662 [DEBUG] [Thread-114424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:44:09.663 [DEBUG] [Thread-114424] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:44:09.664 [DEBUG] [Thread-114424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:44:09.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:44:09.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:44:09.666 [DEBUG] [Thread-114424] [transport.py] [_log()] userauth is OK
2025-12-03T09:44:09.666 [DEBUG] [Thread-114424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:44:09.666 [DEBUG] [Thread-114424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:44:09.666 [DEBUG] [Thread-114424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:44:09.666 [DEBUG] [Thread-114424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:44:09.686 [INFO] [Thread-114424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:44:09.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:44:10.326 [DEBUG] [Thread-114424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:44:10.327 [DEBUG] [Thread-114424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:44:10.327 [DEBUG] [Thread-114424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:44:10.368 [DEBUG] [Thread-114424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:44:10.368 [DEBUG] [Thread-114424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:44:10.371 [DEBUG] [Thread-114424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:44:10.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:44:10.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:44:10.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:44:10.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:44:10.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:44:10.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:44:10.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.321927 -999.00  +14.00  18.05     61   +6.80 1 2 1 1 1   888    0 7.90 17.05 ----- 18.9 18.1 152.6 27.6 19.4 -23.0 18.9 -22.6 18.5 -21.8 19.0 -23.4
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:44:10.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.321927
2025-12-03T09:44:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:44:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:44:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:44:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:44:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:44:10.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:43:38', tmtdew=8.72, humidity=55.96, cloud=0.0, wind=21.81, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:43:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:44:10.395 [DEBUG] [Thread-114424] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:44:10.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:44:10.495 [DEBUG] [Thread-114427] [transport.py] [_log()] starting thread (client mode): 0xa27b54b0
2025-12-03T09:44:10.496 [DEBUG] [Thread-114427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:44:10.510 [DEBUG] [Thread-114427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:44:10.511 [INFO] [Thread-114427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] client lang: <none>
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] server lang: <none>
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] kex follows: False
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] Compression: none
2025-12-03T09:44:10.518 [DEBUG] [Thread-114427] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:44:10.577 [DEBUG] [Thread-114427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:44:10.577 [DEBUG] [Thread-114427] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:44:10.577 [DEBUG] [Thread-114427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:44:10.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:44:10.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:44:10.634 [DEBUG] [Thread-114427] [transport.py] [_log()] userauth is OK
2025-12-03T09:44:10.634 [DEBUG] [Thread-114427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:44:10.634 [DEBUG] [Thread-114427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:44:10.634 [DEBUG] [Thread-114427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:44:10.634 [DEBUG] [Thread-114427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:44:10.648 [INFO] [Thread-114427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:44:10.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:44:10.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:44:11.460 [DEBUG] [Thread-114427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:44:11.460 [DEBUG] [Thread-114427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:44:11.507 [DEBUG] [Thread-114427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:44:11.507 [DEBUG] [Thread-114427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:44:11.516 [DEBUG] [Thread-114427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:44:11.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:44:11.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:44:11.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:44:11.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:44:11.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:44:11.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:44:11.547 [DEBUG] [Thread-114427] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:44:24.228 [DEBUG] [Thread-114429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:38.556 [DEBUG] [Thread-114430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:39.277 [DEBUG] [Thread-114431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:39.738 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:39.739 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:44:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:44:41.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:44:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:44:42.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 44, 10), 8.68, 56.11, 0.0, 24.76, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:44:42.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:44:10
2025-12-03T09:44:42.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:44:42.531 [DEBUG] [Thread-114432] [transport.py] [_log()] starting thread (client mode): 0xa27ecb20
2025-12-03T09:44:42.531 [DEBUG] [Thread-114432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:44:42.553 [DEBUG] [Thread-114432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:44:42.553 [INFO] [Thread-114432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] client lang: <none>
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] server lang: <none>
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] kex follows: False
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] Compression: none
2025-12-03T09:44:42.557 [DEBUG] [Thread-114432] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:44:42.572 [DEBUG] [Thread-114432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:44:42.572 [DEBUG] [Thread-114432] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:44:42.572 [DEBUG] [Thread-114432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:44:42.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:44:42.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:44:42.573 [DEBUG] [Thread-114432] [transport.py] [_log()] userauth is OK
2025-12-03T09:44:42.573 [DEBUG] [Thread-114432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:44:42.573 [DEBUG] [Thread-114432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:44:42.573 [DEBUG] [Thread-114432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:44:42.573 [DEBUG] [Thread-114432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:44:42.583 [INFO] [Thread-114432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:44:42.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:44:43.236 [DEBUG] [Thread-114432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:44:43.236 [DEBUG] [Thread-114432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:44:43.236 [DEBUG] [Thread-114432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:44:43.278 [DEBUG] [Thread-114432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:44:43.278 [DEBUG] [Thread-114432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:44:43.280 [DEBUG] [Thread-114432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:44:43.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:44:43.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:44:43.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:44:43.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:44:43.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:44:43.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:44:43.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.322274 -999.00  +14.10  17.65     61   +6.80 1 1 1 1 1   888    0 7.75 15.31 ----- 20.9 17.6 157.2 31.0 19.4 -24.0 19.0 -23.8 18.6 -22.7 19.1 -22.6
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.322274
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T09:44:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:44:10', tmtdew=8.68, humidity=56.11, cloud=0.0, wind=24.76, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:44:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:44:43.295 [DEBUG] [Thread-114432] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:44:43.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:44:43.382 [DEBUG] [Thread-114435] [transport.py] [_log()] starting thread (client mode): 0xa27ec0a0
2025-12-03T09:44:43.382 [DEBUG] [Thread-114435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:44:43.396 [DEBUG] [Thread-114435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:44:43.396 [INFO] [Thread-114435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] client lang: <none>
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] server lang: <none>
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] kex follows: False
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] Compression: none
2025-12-03T09:44:43.404 [DEBUG] [Thread-114435] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:44:43.460 [DEBUG] [Thread-114435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:44:43.460 [DEBUG] [Thread-114435] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:44:43.461 [DEBUG] [Thread-114435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:44:43.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:44:43.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:44:43.518 [DEBUG] [Thread-114435] [transport.py] [_log()] userauth is OK
2025-12-03T09:44:43.518 [DEBUG] [Thread-114435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:44:43.518 [DEBUG] [Thread-114435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:44:43.518 [DEBUG] [Thread-114435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:44:43.518 [DEBUG] [Thread-114435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:44:43.531 [INFO] [Thread-114435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:44:43.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:44:43.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:44:44.328 [DEBUG] [Thread-114435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:44:44.328 [DEBUG] [Thread-114435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:44:44.375 [DEBUG] [Thread-114435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:44:44.375 [DEBUG] [Thread-114435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:44:44.384 [DEBUG] [Thread-114435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:44:44.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:44:44.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:44:44.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:44:44.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:44:44.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:44:44.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:44:44.420 [DEBUG] [Thread-114435] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:44:54.306 [DEBUG] [Thread-114437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:09.347 [DEBUG] [Thread-114438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:14.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:45:14.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:45:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:45:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 44, 42), 8.68, 55.94, 0.0, 25.06, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:45:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:44:42
2025-12-03T09:45:15.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:45:15.470 [DEBUG] [Thread-114439] [transport.py] [_log()] starting thread (client mode): 0xa27ee050
2025-12-03T09:45:15.471 [DEBUG] [Thread-114439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:45:15.491 [DEBUG] [Thread-114439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:45:15.491 [INFO] [Thread-114439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] client lang: <none>
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] server lang: <none>
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] kex follows: False
2025-12-03T09:45:15.494 [DEBUG] [Thread-114439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] Compression: none
2025-12-03T09:45:15.495 [DEBUG] [Thread-114439] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:45:15.508 [DEBUG] [Thread-114439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:45:15.509 [DEBUG] [Thread-114439] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:45:15.509 [DEBUG] [Thread-114439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:45:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:45:15.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:45:15.509 [DEBUG] [Thread-114439] [transport.py] [_log()] userauth is OK
2025-12-03T09:45:15.510 [DEBUG] [Thread-114439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:45:15.510 [DEBUG] [Thread-114439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:45:15.510 [DEBUG] [Thread-114439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:45:15.510 [DEBUG] [Thread-114439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:45:15.525 [INFO] [Thread-114439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:45:15.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:45:16.173 [DEBUG] [Thread-114439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:45:16.173 [DEBUG] [Thread-114439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:45:16.173 [DEBUG] [Thread-114439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:45:16.214 [DEBUG] [Thread-114439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:45:16.214 [DEBUG] [Thread-114439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:45:16.216 [DEBUG] [Thread-114439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:45:16.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:45:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:45:16.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:45:16.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:45:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:45:16.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:45:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:45:16.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.322621 -999.00  +14.20  20.04     60   +6.80 1 2 1 1 1   888    0 7.66 12.76 ----- 18.4 20.0 141.8 24.8 19.5 -23.4 19.1 -22.4 18.6 -22.0 19.2 -22.6
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.322621
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:45:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:44:42', tmtdew=8.68, humidity=55.94, cloud=0.0, wind=25.06, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:44:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:45:16.228 [DEBUG] [Thread-114439] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:45:16.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:45:16.313 [DEBUG] [Thread-114442] [transport.py] [_log()] starting thread (client mode): 0xa27c1ab0
2025-12-03T09:45:16.313 [DEBUG] [Thread-114442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:45:16.327 [DEBUG] [Thread-114442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:45:16.327 [INFO] [Thread-114442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] client lang: <none>
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] server lang: <none>
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] kex follows: False
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:45:16.334 [DEBUG] [Thread-114442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:45:16.335 [DEBUG] [Thread-114442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:45:16.335 [DEBUG] [Thread-114442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:45:16.335 [DEBUG] [Thread-114442] [transport.py] [_log()] Compression: none
2025-12-03T09:45:16.335 [DEBUG] [Thread-114442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:45:16.392 [DEBUG] [Thread-114442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:45:16.393 [DEBUG] [Thread-114442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:45:16.393 [DEBUG] [Thread-114442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:45:16.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:45:16.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:45:16.450 [DEBUG] [Thread-114442] [transport.py] [_log()] userauth is OK
2025-12-03T09:45:16.450 [DEBUG] [Thread-114442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:45:16.450 [DEBUG] [Thread-114442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:45:16.450 [DEBUG] [Thread-114442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:45:16.450 [DEBUG] [Thread-114442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:45:16.463 [INFO] [Thread-114442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:45:16.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:45:16.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:45:17.310 [DEBUG] [Thread-114442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:45:17.310 [DEBUG] [Thread-114442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:45:17.358 [DEBUG] [Thread-114442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:45:17.358 [DEBUG] [Thread-114442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:45:17.366 [DEBUG] [Thread-114442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:45:17.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:45:17.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:45:17.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:45:17.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:45:17.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:45:17.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:45:17.399 [DEBUG] [Thread-114442] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:45:24.375 [DEBUG] [Thread-114444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:38.600 [DEBUG] [Thread-114445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:39.418 [DEBUG] [Thread-114446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:39.881 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:39.882 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:45:47.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:45:47.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:45:47.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:45:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 45, 14), 8.62, 56.18, 0.0, 25.0, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:45:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:45:14
2025-12-03T09:45:48.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:45:48.427 [DEBUG] [Thread-114447] [transport.py] [_log()] starting thread (client mode): 0xa27ee620
2025-12-03T09:45:48.427 [DEBUG] [Thread-114447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:45:48.448 [DEBUG] [Thread-114447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:45:48.448 [INFO] [Thread-114447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:45:48.451 [DEBUG] [Thread-114447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:45:48.451 [DEBUG] [Thread-114447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:45:48.451 [DEBUG] [Thread-114447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:45:48.451 [DEBUG] [Thread-114447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:48.451 [DEBUG] [Thread-114447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] client lang: <none>
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] server lang: <none>
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] kex follows: False
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] Compression: none
2025-12-03T09:45:48.452 [DEBUG] [Thread-114447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:45:48.463 [DEBUG] [Thread-114447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:45:48.463 [DEBUG] [Thread-114447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:45:48.463 [DEBUG] [Thread-114447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:45:48.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:45:48.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:45:48.464 [DEBUG] [Thread-114447] [transport.py] [_log()] userauth is OK
2025-12-03T09:45:48.464 [DEBUG] [Thread-114447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:45:48.464 [DEBUG] [Thread-114447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:45:48.464 [DEBUG] [Thread-114447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:45:48.464 [DEBUG] [Thread-114447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:45:48.479 [INFO] [Thread-114447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:45:48.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:45:49.132 [DEBUG] [Thread-114447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:45:49.132 [DEBUG] [Thread-114447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:45:49.132 [DEBUG] [Thread-114447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:45:49.173 [DEBUG] [Thread-114447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:45:49.173 [DEBUG] [Thread-114447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:45:49.176 [DEBUG] [Thread-114447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:45:49.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:45:49.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:45:49.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:45:49.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:45:49.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:45:49.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:45:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:45:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.322968 -999.00  +14.50  17.24     60   +6.90 1 2 1 1 1   888    0 7.74 12.67 ----- 20.2 17.2 134.0 26.1 19.6 -23.3 19.1 -23.0 18.6 -21.8 19.2 -21.9
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.322968
2025-12-03T09:45:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:45:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:45:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:45:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:45:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:45:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:45:14', tmtdew=8.62, humidity=56.18, cloud=0.0, wind=25.0, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:45:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:45:49.203 [DEBUG] [Thread-114447] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:45:49.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:45:49.299 [DEBUG] [Thread-114450] [transport.py] [_log()] starting thread (client mode): 0xa27efc10
2025-12-03T09:45:49.299 [DEBUG] [Thread-114450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:45:49.313 [DEBUG] [Thread-114450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:45:49.314 [INFO] [Thread-114450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:45:49.321 [DEBUG] [Thread-114450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] client lang: <none>
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] server lang: <none>
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] kex follows: False
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] Compression: none
2025-12-03T09:45:49.322 [DEBUG] [Thread-114450] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:45:49.380 [DEBUG] [Thread-114450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:45:49.380 [DEBUG] [Thread-114450] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:45:49.381 [DEBUG] [Thread-114450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:45:49.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:45:49.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:45:49.438 [DEBUG] [Thread-114450] [transport.py] [_log()] userauth is OK
2025-12-03T09:45:49.438 [DEBUG] [Thread-114450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:45:49.438 [DEBUG] [Thread-114450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:45:49.438 [DEBUG] [Thread-114450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:45:49.439 [DEBUG] [Thread-114450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:45:49.458 [INFO] [Thread-114450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:45:49.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:45:49.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:45:50.301 [DEBUG] [Thread-114450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:45:50.301 [DEBUG] [Thread-114450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:45:50.349 [DEBUG] [Thread-114450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:45:50.349 [DEBUG] [Thread-114450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:45:50.358 [DEBUG] [Thread-114450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:45:50.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:45:50.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:45:50.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:45:50.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:45:50.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:45:50.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:45:50.393 [DEBUG] [Thread-114450] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:45:54.443 [DEBUG] [Thread-114452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:09.478 [DEBUG] [Thread-114453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:20.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:46:20.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:46:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 45, 46), 8.58, 56.44, 0.0, 20.15, 13.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:46:21.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:45:46
2025-12-03T09:46:21.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:46:21.439 [DEBUG] [Thread-114454] [transport.py] [_log()] starting thread (client mode): 0xa27b4a30
2025-12-03T09:46:21.440 [DEBUG] [Thread-114454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:46:21.461 [DEBUG] [Thread-114454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:46:21.461 [INFO] [Thread-114454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:46:21.464 [DEBUG] [Thread-114454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] client lang: <none>
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] server lang: <none>
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] kex follows: False
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] Compression: none
2025-12-03T09:46:21.465 [DEBUG] [Thread-114454] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:46:21.482 [DEBUG] [Thread-114454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:46:21.482 [DEBUG] [Thread-114454] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:46:21.482 [DEBUG] [Thread-114454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:46:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:46:21.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:46:21.483 [DEBUG] [Thread-114454] [transport.py] [_log()] userauth is OK
2025-12-03T09:46:21.483 [DEBUG] [Thread-114454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:46:21.483 [DEBUG] [Thread-114454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:46:21.483 [DEBUG] [Thread-114454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:46:21.483 [DEBUG] [Thread-114454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:46:21.503 [INFO] [Thread-114454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:46:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:46:22.135 [DEBUG] [Thread-114454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:46:22.135 [DEBUG] [Thread-114454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:46:22.136 [DEBUG] [Thread-114454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:46:22.177 [DEBUG] [Thread-114454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:46:22.177 [DEBUG] [Thread-114454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:46:22.179 [DEBUG] [Thread-114454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:46:22.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:46:22.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:46:22.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:46:22.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:46:22.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:46:22.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:46:22.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.323315 -999.00  +14.50  12.08     59   +6.80 1 2 1 1 1   888    0 7.79 12.29 ----- 7.4 12.1 126.6 15.6 19.8 -21.7 19.3 -21.5 18.8 -20.5 19.4 -22.4
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.323315
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:46:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:45:46', tmtdew=8.58, humidity=56.44, cloud=0.0, wind=20.15, temperature=13.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:45:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:46:22.199 [DEBUG] [Thread-114454] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:46:22.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:46:22.290 [DEBUG] [Thread-114457] [transport.py] [_log()] starting thread (client mode): 0xa27ef940
2025-12-03T09:46:22.291 [DEBUG] [Thread-114457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:46:22.305 [DEBUG] [Thread-114457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:46:22.305 [INFO] [Thread-114457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:46:22.312 [DEBUG] [Thread-114457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:46:22.312 [DEBUG] [Thread-114457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] client lang: <none>
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] server lang: <none>
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] kex follows: False
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] Compression: none
2025-12-03T09:46:22.313 [DEBUG] [Thread-114457] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:46:22.369 [DEBUG] [Thread-114457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:46:22.369 [DEBUG] [Thread-114457] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:46:22.369 [DEBUG] [Thread-114457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:46:22.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:46:22.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:46:22.426 [DEBUG] [Thread-114457] [transport.py] [_log()] userauth is OK
2025-12-03T09:46:22.426 [DEBUG] [Thread-114457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:46:22.426 [DEBUG] [Thread-114457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:46:22.426 [DEBUG] [Thread-114457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:46:22.426 [DEBUG] [Thread-114457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:46:22.440 [INFO] [Thread-114457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:46:22.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:46:22.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:46:23.258 [DEBUG] [Thread-114457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:46:23.258 [DEBUG] [Thread-114457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:46:23.306 [DEBUG] [Thread-114457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:46:23.306 [DEBUG] [Thread-114457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:46:23.314 [DEBUG] [Thread-114457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:46:23.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:46:23.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:46:23.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:46:23.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:46:23.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:46:23.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:46:23.346 [DEBUG] [Thread-114457] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:46:24.505 [DEBUG] [Thread-114459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:38.636 [DEBUG] [Thread-114460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:39.547 [DEBUG] [Thread-114461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:40.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:40.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:53.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:46:53.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:46:53.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:46:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 46, 50), 8.41, 57.03, 0.0, 23.54, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:46:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:46:50
2025-12-03T09:46:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:46:54.313 [DEBUG] [Thread-114462] [transport.py] [_log()] starting thread (client mode): 0xa27b4b20
2025-12-03T09:46:54.313 [DEBUG] [Thread-114462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:46:54.333 [DEBUG] [Thread-114462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:46:54.333 [INFO] [Thread-114462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] client lang: <none>
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] server lang: <none>
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] kex follows: False
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] Compression: none
2025-12-03T09:46:54.336 [DEBUG] [Thread-114462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:46:54.353 [DEBUG] [Thread-114462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:46:54.353 [DEBUG] [Thread-114462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:46:54.353 [DEBUG] [Thread-114462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:46:54.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:46:54.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:46:54.354 [DEBUG] [Thread-114462] [transport.py] [_log()] userauth is OK
2025-12-03T09:46:54.354 [DEBUG] [Thread-114462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:46:54.354 [DEBUG] [Thread-114462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:46:54.354 [DEBUG] [Thread-114462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:46:54.354 [DEBUG] [Thread-114462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:46:54.363 [INFO] [Thread-114462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:46:54.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:46:54.581 [DEBUG] [Thread-114464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:46:55.020 [DEBUG] [Thread-114462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:46:55.021 [DEBUG] [Thread-114462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:46:55.021 [DEBUG] [Thread-114462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:46:55.061 [DEBUG] [Thread-114462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:46:55.061 [DEBUG] [Thread-114462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:46:55.064 [DEBUG] [Thread-114462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:46:55.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:46:55.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:46:55.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:46:55.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:46:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:46:55.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:46:55.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:46:55.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.323663 -999.00  +14.60  12.16     59   +6.80 1 2 1 1 1   888    0 7.59 13.14 ----- 13.8 12.2 163.0 18.2 20.0 -22.1 19.5 -21.3 19.0 -19.9 19.7 -21.0
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.323663
2025-12-03T09:46:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:46:55.086 [DEBUG] [Thread-114462] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:46:55.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:46:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:46:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:46:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:46:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:46:50', tmtdew=8.41, humidity=57.03, cloud=0.0, wind=23.54, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:46:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:46:55.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:46:55.184 [DEBUG] [Thread-114466] [transport.py] [_log()] starting thread (client mode): 0xa27b34c0
2025-12-03T09:46:55.184 [DEBUG] [Thread-114466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:46:55.200 [DEBUG] [Thread-114466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:46:55.201 [INFO] [Thread-114466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] client lang: <none>
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] server lang: <none>
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] kex follows: False
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:46:55.215 [DEBUG] [Thread-114466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:46:55.216 [DEBUG] [Thread-114466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:46:55.216 [DEBUG] [Thread-114466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:46:55.216 [DEBUG] [Thread-114466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:46:55.216 [DEBUG] [Thread-114466] [transport.py] [_log()] Compression: none
2025-12-03T09:46:55.216 [DEBUG] [Thread-114466] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:46:55.266 [DEBUG] [Thread-114466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:46:55.266 [DEBUG] [Thread-114466] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:46:55.266 [DEBUG] [Thread-114466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:46:55.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:46:55.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:46:55.322 [DEBUG] [Thread-114466] [transport.py] [_log()] userauth is OK
2025-12-03T09:46:55.323 [DEBUG] [Thread-114466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:46:55.323 [DEBUG] [Thread-114466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:46:55.323 [DEBUG] [Thread-114466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:46:55.323 [DEBUG] [Thread-114466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:46:55.351 [INFO] [Thread-114466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:46:55.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:46:55.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:46:56.221 [DEBUG] [Thread-114466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:46:56.221 [DEBUG] [Thread-114466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:46:56.269 [DEBUG] [Thread-114466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:46:56.269 [DEBUG] [Thread-114466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:46:56.282 [DEBUG] [Thread-114466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:46:56.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:46:56.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:46:56.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:46:56.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:46:56.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:46:56.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:46:56.326 [DEBUG] [Thread-114466] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:47:09.608 [DEBUG] [Thread-114468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:24.650 [DEBUG] [Thread-114469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:26.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:47:26.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:47:26.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:47:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 47, 22), 8.47, 56.84, 0.0, 22.11, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:47:27.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:47:22
2025-12-03T09:47:27.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:47:27.295 [DEBUG] [Thread-114470] [transport.py] [_log()] starting thread (client mode): 0xa27c3a30
2025-12-03T09:47:27.295 [DEBUG] [Thread-114470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:47:27.315 [DEBUG] [Thread-114470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:47:27.315 [INFO] [Thread-114470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] client lang: <none>
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] server lang: <none>
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] kex follows: False
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] Compression: none
2025-12-03T09:47:27.319 [DEBUG] [Thread-114470] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:47:27.334 [DEBUG] [Thread-114470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:47:27.334 [DEBUG] [Thread-114470] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:47:27.334 [DEBUG] [Thread-114470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:47:27.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:47:27.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:47:27.376 [DEBUG] [Thread-114470] [transport.py] [_log()] userauth is OK
2025-12-03T09:47:27.376 [DEBUG] [Thread-114470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:47:27.376 [DEBUG] [Thread-114470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:47:27.377 [DEBUG] [Thread-114470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:47:27.377 [DEBUG] [Thread-114470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:47:27.413 [INFO] [Thread-114470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:47:27.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:47:28.046 [DEBUG] [Thread-114470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:47:28.046 [DEBUG] [Thread-114470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:47:28.047 [DEBUG] [Thread-114470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:47:28.088 [DEBUG] [Thread-114470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:47:28.088 [DEBUG] [Thread-114470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:47:28.090 [DEBUG] [Thread-114470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:47:28.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:47:28.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:47:28.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:47:28.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:47:28.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:47:28.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:47:28.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:47:28.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.324357 -999.00  +14.60  17.72     59   +6.70 1 2 1 1 1   888    0 7.97 18.12 ----- 21.5 17.7 151.0 25.7 20.4 -21.6 19.9 -20.7 19.2 -19.7 19.8 -20.2
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.324357
2025-12-03T09:47:28.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:47:28.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:47:28.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:47:28.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:47:28.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:47:28.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:47:22', tmtdew=8.47, humidity=56.84, cloud=0.0, wind=22.11, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:47:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:47:28.112 [DEBUG] [Thread-114470] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:47:28.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:47:28.216 [DEBUG] [Thread-114473] [transport.py] [_log()] starting thread (client mode): 0xa27c2ce0
2025-12-03T09:47:28.216 [DEBUG] [Thread-114473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:47:28.231 [DEBUG] [Thread-114473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:47:28.231 [INFO] [Thread-114473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:47:28.238 [DEBUG] [Thread-114473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:47:28.238 [DEBUG] [Thread-114473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] client lang: <none>
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] server lang: <none>
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] kex follows: False
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] Compression: none
2025-12-03T09:47:28.239 [DEBUG] [Thread-114473] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:47:28.298 [DEBUG] [Thread-114473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:47:28.298 [DEBUG] [Thread-114473] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:47:28.299 [DEBUG] [Thread-114473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:47:28.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:47:28.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:47:28.354 [DEBUG] [Thread-114473] [transport.py] [_log()] userauth is OK
2025-12-03T09:47:28.355 [DEBUG] [Thread-114473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:47:28.355 [DEBUG] [Thread-114473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:47:28.355 [DEBUG] [Thread-114473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:47:28.355 [DEBUG] [Thread-114473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:47:28.375 [INFO] [Thread-114473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:47:28.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:47:28.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:47:29.217 [DEBUG] [Thread-114473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:47:29.217 [DEBUG] [Thread-114473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:47:29.266 [DEBUG] [Thread-114473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:47:29.267 [DEBUG] [Thread-114473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:47:29.276 [DEBUG] [Thread-114473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:47:29.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:47:29.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:47:29.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:47:29.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:47:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:47:29.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:47:29.311 [DEBUG] [Thread-114473] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:47:38.680 [DEBUG] [Thread-114475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:39.674 [DEBUG] [Thread-114476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:40.164 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:40.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:54.707 [DEBUG] [Thread-114477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:47:59.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:47:59.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:47:59.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:48:00.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 47, 54), 8.89, 55.21, 0.0, 21.0, 14.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:48:00.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:47:54
2025-12-03T09:48:00.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:48:00.282 [DEBUG] [Thread-114478] [transport.py] [_log()] starting thread (client mode): 0xa271d480
2025-12-03T09:48:00.282 [DEBUG] [Thread-114478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:48:00.304 [DEBUG] [Thread-114478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:48:00.304 [INFO] [Thread-114478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:48:00.308 [DEBUG] [Thread-114478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:48:00.308 [DEBUG] [Thread-114478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:48:00.308 [DEBUG] [Thread-114478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:48:00.308 [DEBUG] [Thread-114478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] client lang: <none>
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] server lang: <none>
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] kex follows: False
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:48:00.309 [DEBUG] [Thread-114478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:48:00.310 [DEBUG] [Thread-114478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:48:00.310 [DEBUG] [Thread-114478] [transport.py] [_log()] Compression: none
2025-12-03T09:48:00.310 [DEBUG] [Thread-114478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:48:00.327 [DEBUG] [Thread-114478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:48:00.328 [DEBUG] [Thread-114478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:48:00.328 [DEBUG] [Thread-114478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:48:00.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:48:00.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:48:00.330 [DEBUG] [Thread-114478] [transport.py] [_log()] userauth is OK
2025-12-03T09:48:00.330 [DEBUG] [Thread-114478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:48:00.330 [DEBUG] [Thread-114478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:48:00.330 [DEBUG] [Thread-114478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:48:00.331 [DEBUG] [Thread-114478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:48:00.365 [INFO] [Thread-114478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:48:00.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:48:01.018 [DEBUG] [Thread-114478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:48:01.018 [DEBUG] [Thread-114478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:48:01.019 [DEBUG] [Thread-114478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:48:01.059 [DEBUG] [Thread-114478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:48:01.059 [DEBUG] [Thread-114478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:48:01.063 [DEBUG] [Thread-114478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:48:01.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:48:01.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:48:01.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:48:01.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:48:01.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:48:01.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:48:01.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.324704 -999.00  +14.60  19.36     59   +6.90 1 2 1 1 1   888    0 8.13 19.89 ----- 22.2 19.4 159.0 24.7 20.7 -20.3 20.0 -19.7 19.4 -18.3 19.9 -21.1
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:48:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.324704
2025-12-03T09:48:01.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:48:01.088 [DEBUG] [Thread-114478] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:48:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:48:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:48:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:48:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:48:01.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:47:54', tmtdew=8.89, humidity=55.21, cloud=0.0, wind=21.0, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:47:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:48:01.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:48:01.186 [DEBUG] [Thread-114481] [transport.py] [_log()] starting thread (client mode): 0xa271cb50
2025-12-03T09:48:01.186 [DEBUG] [Thread-114481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:48:01.200 [DEBUG] [Thread-114481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:48:01.200 [INFO] [Thread-114481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:01.208 [DEBUG] [Thread-114481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] client lang: <none>
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] server lang: <none>
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] kex follows: False
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:48:01.209 [DEBUG] [Thread-114481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:48:01.210 [DEBUG] [Thread-114481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:48:01.210 [DEBUG] [Thread-114481] [transport.py] [_log()] Compression: none
2025-12-03T09:48:01.210 [DEBUG] [Thread-114481] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:48:01.266 [DEBUG] [Thread-114481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:48:01.267 [DEBUG] [Thread-114481] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:48:01.267 [DEBUG] [Thread-114481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:48:01.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:48:01.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:48:01.323 [DEBUG] [Thread-114481] [transport.py] [_log()] userauth is OK
2025-12-03T09:48:01.323 [DEBUG] [Thread-114481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:48:01.323 [DEBUG] [Thread-114481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:48:01.323 [DEBUG] [Thread-114481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:48:01.323 [DEBUG] [Thread-114481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:48:01.343 [INFO] [Thread-114481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:48:01.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:48:01.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:48:02.171 [DEBUG] [Thread-114481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:48:02.172 [DEBUG] [Thread-114481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:48:02.222 [DEBUG] [Thread-114481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:48:02.222 [DEBUG] [Thread-114481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:48:02.231 [DEBUG] [Thread-114481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:48:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:48:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:48:02.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:48:02.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:48:02.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:48:02.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:48:02.267 [DEBUG] [Thread-114481] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:48:09.732 [DEBUG] [Thread-114483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:24.776 [DEBUG] [Thread-114484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:48:32.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:48:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:48:32.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 48, 26), 8.99, 54.88, 0.0, 19.02, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:48:32.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:48:26
2025-12-03T09:48:33.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:48:33.219 [DEBUG] [Thread-114485] [transport.py] [_log()] starting thread (client mode): 0xa27ee920
2025-12-03T09:48:33.219 [DEBUG] [Thread-114485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:48:33.236 [DEBUG] [Thread-114485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:48:33.236 [INFO] [Thread-114485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] client lang: <none>
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] server lang: <none>
2025-12-03T09:48:33.237 [DEBUG] [Thread-114485] [transport.py] [_log()] kex follows: False
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] Compression: none
2025-12-03T09:48:33.238 [DEBUG] [Thread-114485] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:48:33.254 [DEBUG] [Thread-114485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:48:33.254 [DEBUG] [Thread-114485] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:48:33.255 [DEBUG] [Thread-114485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:48:33.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:48:33.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:48:33.256 [DEBUG] [Thread-114485] [transport.py] [_log()] userauth is OK
2025-12-03T09:48:33.256 [DEBUG] [Thread-114485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:48:33.256 [DEBUG] [Thread-114485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:48:33.256 [DEBUG] [Thread-114485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:48:33.257 [DEBUG] [Thread-114485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:48:33.281 [INFO] [Thread-114485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:48:33.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:48:33.925 [DEBUG] [Thread-114485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:48:33.925 [DEBUG] [Thread-114485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:48:33.926 [DEBUG] [Thread-114485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:48:33.967 [DEBUG] [Thread-114485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:48:33.967 [DEBUG] [Thread-114485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:48:33.970 [DEBUG] [Thread-114485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:48:33.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:48:33.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:48:33.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:48:33.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:48:33.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:48:33.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:48:33.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:48:33.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.325052 -999.00  +14.80  17.23     59   +6.90 1 2 1 1 1   888    0 8.19 23.86 ----- 16.7 17.2 158.6 23.6 20.9 -21.7 20.1 -19.9 19.5 -19.4 20.1 -20.3
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.325052
2025-12-03T09:48:33.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:48:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:48:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:48:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:48:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:48:33.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:48:26', tmtdew=8.99, humidity=54.88, cloud=0.0, wind=19.02, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:48:04.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:48:33.995 [DEBUG] [Thread-114485] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:48:34.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:48:34.092 [DEBUG] [Thread-114488] [transport.py] [_log()] starting thread (client mode): 0xa27c3be0
2025-12-03T09:48:34.092 [DEBUG] [Thread-114488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:48:34.106 [DEBUG] [Thread-114488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:48:34.106 [INFO] [Thread-114488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:48:34.114 [DEBUG] [Thread-114488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:48:34.114 [DEBUG] [Thread-114488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:48:34.114 [DEBUG] [Thread-114488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] client lang: <none>
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] server lang: <none>
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] kex follows: False
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:48:34.115 [DEBUG] [Thread-114488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:48:34.116 [DEBUG] [Thread-114488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:48:34.116 [DEBUG] [Thread-114488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:48:34.116 [DEBUG] [Thread-114488] [transport.py] [_log()] Compression: none
2025-12-03T09:48:34.116 [DEBUG] [Thread-114488] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:48:34.174 [DEBUG] [Thread-114488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:48:34.175 [DEBUG] [Thread-114488] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:48:34.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:48:34.175 [DEBUG] [Thread-114488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:48:34.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:48:34.235 [DEBUG] [Thread-114488] [transport.py] [_log()] userauth is OK
2025-12-03T09:48:34.235 [DEBUG] [Thread-114488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:48:34.235 [DEBUG] [Thread-114488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:48:34.235 [DEBUG] [Thread-114488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:48:34.235 [DEBUG] [Thread-114488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:48:34.255 [INFO] [Thread-114488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:48:34.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:48:34.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:48:35.067 [DEBUG] [Thread-114488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:48:35.067 [DEBUG] [Thread-114488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:48:35.115 [DEBUG] [Thread-114488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:48:35.115 [DEBUG] [Thread-114488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:48:35.124 [DEBUG] [Thread-114488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:48:35.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:48:35.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:48:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:48:35.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:48:35.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:48:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:48:35.159 [DEBUG] [Thread-114488] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:48:38.710 [DEBUG] [Thread-114490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:39.808 [DEBUG] [Thread-114491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:40.307 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:40.308 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:48:54.859 [DEBUG] [Thread-114492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:05.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:49:05.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:49:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:49:05.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 48, 58), 9.24, 53.88, 0.0, 22.76, 14.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:49:05.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:48:58
2025-12-03T09:49:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:49:06.107 [DEBUG] [Thread-114493] [transport.py] [_log()] starting thread (client mode): 0xa27b41f0
2025-12-03T09:49:06.107 [DEBUG] [Thread-114493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:49:06.127 [DEBUG] [Thread-114493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:49:06.128 [INFO] [Thread-114493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:49:06.130 [DEBUG] [Thread-114493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] client lang: <none>
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] server lang: <none>
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] kex follows: False
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:49:06.131 [DEBUG] [Thread-114493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:49:06.132 [DEBUG] [Thread-114493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:49:06.132 [DEBUG] [Thread-114493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:49:06.132 [DEBUG] [Thread-114493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:49:06.132 [DEBUG] [Thread-114493] [transport.py] [_log()] Compression: none
2025-12-03T09:49:06.132 [DEBUG] [Thread-114493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:49:06.151 [DEBUG] [Thread-114493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:49:06.152 [DEBUG] [Thread-114493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:49:06.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:49:06.153 [DEBUG] [Thread-114493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:49:06.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:49:06.155 [DEBUG] [Thread-114493] [transport.py] [_log()] userauth is OK
2025-12-03T09:49:06.156 [DEBUG] [Thread-114493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:49:06.156 [DEBUG] [Thread-114493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:49:06.156 [DEBUG] [Thread-114493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:49:06.156 [DEBUG] [Thread-114493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:49:06.179 [INFO] [Thread-114493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:49:06.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:49:06.746 [DEBUG] [Thread-114493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:49:06.746 [DEBUG] [Thread-114493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:49:06.746 [DEBUG] [Thread-114493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:49:06.787 [DEBUG] [Thread-114493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:49:06.787 [DEBUG] [Thread-114493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:49:06.790 [DEBUG] [Thread-114493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:49:06.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:49:06.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:49:06.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:49:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:49:06.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:49:06.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:49:06.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:49:06.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.325399 -999.00  +14.60  23.38     58   +6.60 1 2 1 1 1   888    0 8.29 29.70 ----- 19.7 23.4 164.2 29.1 20.9 -22.2 20.2 -20.4 19.5 -19.5 20.1 -20.9
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.325399
2025-12-03T09:49:06.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:49:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:49:06.816 [DEBUG] [Thread-114493] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:49:06.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:49:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:49:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:49:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:48:58', tmtdew=9.24, humidity=53.88, cloud=0.0, wind=22.76, temperature=14.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:48:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:49:06.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:49:06.913 [DEBUG] [Thread-114496] [transport.py] [_log()] starting thread (client mode): 0xa27c1d50
2025-12-03T09:49:06.914 [DEBUG] [Thread-114496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:49:06.930 [DEBUG] [Thread-114496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:49:06.930 [INFO] [Thread-114496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:06.938 [DEBUG] [Thread-114496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] client lang: <none>
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] server lang: <none>
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] kex follows: False
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:49:06.939 [DEBUG] [Thread-114496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:49:06.940 [DEBUG] [Thread-114496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:49:06.940 [DEBUG] [Thread-114496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:49:06.940 [DEBUG] [Thread-114496] [transport.py] [_log()] Compression: none
2025-12-03T09:49:06.940 [DEBUG] [Thread-114496] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:49:06.995 [DEBUG] [Thread-114496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:49:06.995 [DEBUG] [Thread-114496] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:49:06.996 [DEBUG] [Thread-114496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:49:06.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:49:06.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:49:07.050 [DEBUG] [Thread-114496] [transport.py] [_log()] userauth is OK
2025-12-03T09:49:07.050 [DEBUG] [Thread-114496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:49:07.051 [DEBUG] [Thread-114496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:49:07.051 [DEBUG] [Thread-114496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:49:07.051 [DEBUG] [Thread-114496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:49:07.070 [INFO] [Thread-114496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:49:07.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:49:07.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:49:07.904 [DEBUG] [Thread-114496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:49:07.904 [DEBUG] [Thread-114496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:49:07.952 [DEBUG] [Thread-114496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:49:07.952 [DEBUG] [Thread-114496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:49:07.961 [DEBUG] [Thread-114496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:49:07.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:49:07.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:49:07.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:49:07.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:49:07.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:49:07.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:49:07.996 [DEBUG] [Thread-114496] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:49:09.885 [DEBUG] [Thread-114498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:24.927 [DEBUG] [Thread-114499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:38.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:49:38.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:49:38.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:49:38.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 49, 30), 9.24, 53.92, 0.0, 23.73, 14.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:49:38.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:49:30
2025-12-03T09:49:38.740 [DEBUG] [Thread-114500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:38.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:49:38.957 [DEBUG] [Thread-114501] [transport.py] [_log()] starting thread (client mode): 0xa27c10f0
2025-12-03T09:49:38.957 [DEBUG] [Thread-114501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:49:38.975 [DEBUG] [Thread-114501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:49:38.976 [INFO] [Thread-114501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:49:38.979 [DEBUG] [Thread-114501] [transport.py] [_log()] client lang: <none>
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] server lang: <none>
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] kex follows: False
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] Compression: none
2025-12-03T09:49:38.980 [DEBUG] [Thread-114501] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:49:38.990 [DEBUG] [Thread-114501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:49:38.990 [DEBUG] [Thread-114501] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:49:38.991 [DEBUG] [Thread-114501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:49:38.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:49:38.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:49:38.993 [DEBUG] [Thread-114501] [transport.py] [_log()] userauth is OK
2025-12-03T09:49:38.993 [DEBUG] [Thread-114501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:49:38.993 [DEBUG] [Thread-114501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:49:38.994 [DEBUG] [Thread-114501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:49:38.994 [DEBUG] [Thread-114501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:49:39.008 [INFO] [Thread-114501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:49:39.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:49:39.634 [DEBUG] [Thread-114501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:49:39.634 [DEBUG] [Thread-114501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:49:39.634 [DEBUG] [Thread-114501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:49:39.675 [DEBUG] [Thread-114501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:49:39.675 [DEBUG] [Thread-114501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:49:39.678 [DEBUG] [Thread-114501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:49:39.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:49:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:49:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:49:39.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:49:39.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:49:39.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:49:39.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:49:39.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.325746 -999.00  +14.50  16.15     58   +6.60 1 2 1 1 1   888    0 8.51 34.87 ----- 11.3 16.1 151.0 23.2 21.0 -20.8 20.2 -21.0 19.6 -18.6 20.3 -19.2
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.325746
2025-12-03T09:49:39.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:49:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:49:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:49:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:49:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:49:39.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:49:30', tmtdew=9.24, humidity=53.92, cloud=0.0, wind=23.73, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:49:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:49:39.704 [DEBUG] [Thread-114501] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:49:39.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:49:39.801 [DEBUG] [Thread-114504] [transport.py] [_log()] starting thread (client mode): 0xa2784bb0
2025-12-03T09:49:39.801 [DEBUG] [Thread-114504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:49:39.815 [DEBUG] [Thread-114504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:49:39.815 [INFO] [Thread-114504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:49:39.822 [DEBUG] [Thread-114504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:49:39.823 [DEBUG] [Thread-114504] [transport.py] [_log()] client lang: <none>
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] server lang: <none>
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] kex follows: False
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] Compression: none
2025-12-03T09:49:39.824 [DEBUG] [Thread-114504] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:49:39.881 [DEBUG] [Thread-114504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:49:39.882 [DEBUG] [Thread-114504] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:49:39.882 [DEBUG] [Thread-114504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:49:39.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:49:39.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:49:39.938 [DEBUG] [Thread-114504] [transport.py] [_log()] userauth is OK
2025-12-03T09:49:39.938 [DEBUG] [Thread-114504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:49:39.938 [DEBUG] [Thread-114504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:49:39.938 [DEBUG] [Thread-114504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:49:39.939 [DEBUG] [Thread-114504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:49:39.957 [DEBUG] [Thread-114506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:39.959 [INFO] [Thread-114504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:49:39.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:49:39.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:49:40.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:40.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:49:40.786 [DEBUG] [Thread-114504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:49:40.787 [DEBUG] [Thread-114504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:49:40.835 [DEBUG] [Thread-114504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:49:40.835 [DEBUG] [Thread-114504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:49:40.844 [DEBUG] [Thread-114504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:49:40.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:49:40.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:49:40.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:49:40.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:49:40.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:49:40.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:49:40.879 [DEBUG] [Thread-114504] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:49:55.013 [DEBUG] [Thread-114507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:10.041 [DEBUG] [Thread-114508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:50:10.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:50:10.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:50:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 50, 2), 9.33, 53.58, 0.0, 21.17, 14.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:50:11.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:50:02
2025-12-03T09:50:11.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:50:11.897 [DEBUG] [Thread-114509] [transport.py] [_log()] starting thread (client mode): 0xa51cd6f0
2025-12-03T09:50:11.897 [DEBUG] [Thread-114509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:50:11.918 [DEBUG] [Thread-114509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:50:11.918 [INFO] [Thread-114509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] client lang: <none>
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] server lang: <none>
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] kex follows: False
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] Compression: none
2025-12-03T09:50:11.921 [DEBUG] [Thread-114509] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:50:11.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:50:11.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] userauth is OK
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:50:11.940 [DEBUG] [Thread-114509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:50:11.941 [DEBUG] [Thread-114509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:50:11.941 [DEBUG] [Thread-114509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:50:11.950 [INFO] [Thread-114509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:50:11.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:50:12.741 [DEBUG] [Thread-114509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:50:12.741 [DEBUG] [Thread-114509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:50:12.741 [DEBUG] [Thread-114509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:50:12.782 [DEBUG] [Thread-114509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:50:12.782 [DEBUG] [Thread-114509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:50:12.784 [DEBUG] [Thread-114509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:50:12.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:50:12.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:50:12.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:50:12.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:50:12.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:50:12.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:50:12.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.326093 -999.00  +14.90  12.72     58   +6.80 1 2 1 1 1   888    0 8.68 43.13 ----- 13.9 12.7 172.2 24.3 21.2 -21.3 20.3 -20.7 19.7 -18.7 20.3 -20.5
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.326093
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:50:12.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:50:02', tmtdew=9.33, humidity=53.58, cloud=0.0, wind=21.17, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:49:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:50:12.804 [DEBUG] [Thread-114509] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:50:12.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:50:12.893 [DEBUG] [Thread-114512] [transport.py] [_log()] starting thread (client mode): 0xa27c3520
2025-12-03T09:50:12.893 [DEBUG] [Thread-114512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:50:12.907 [DEBUG] [Thread-114512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:50:12.907 [INFO] [Thread-114512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] client lang: <none>
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] server lang: <none>
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] kex follows: False
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] Compression: none
2025-12-03T09:50:12.915 [DEBUG] [Thread-114512] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:50:12.979 [DEBUG] [Thread-114512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:50:12.979 [DEBUG] [Thread-114512] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:50:12.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:50:12.980 [DEBUG] [Thread-114512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:50:12.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:50:13.047 [DEBUG] [Thread-114512] [transport.py] [_log()] userauth is OK
2025-12-03T09:50:13.047 [DEBUG] [Thread-114512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:50:13.047 [DEBUG] [Thread-114512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:50:13.047 [DEBUG] [Thread-114512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:50:13.047 [DEBUG] [Thread-114512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:50:13.064 [INFO] [Thread-114512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:50:13.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:50:13.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:50:13.872 [DEBUG] [Thread-114512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:50:13.872 [DEBUG] [Thread-114512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:50:13.921 [DEBUG] [Thread-114512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:50:13.922 [DEBUG] [Thread-114512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:50:13.930 [DEBUG] [Thread-114512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:50:13.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:50:13.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:50:13.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:50:13.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:50:13.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:50:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:50:13.962 [DEBUG] [Thread-114512] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:50:25.065 [DEBUG] [Thread-114514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:38.774 [DEBUG] [Thread-114515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:40.107 [DEBUG] [Thread-114516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:40.588 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:40.589 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:50:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:50:43.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:50:43.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:50:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 50, 34), 9.61, 52.65, 0.0, 21.23, 14.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:50:44.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:50:34
2025-12-03T09:50:44.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:50:44.924 [DEBUG] [Thread-114517] [transport.py] [_log()] starting thread (client mode): 0xa27ee860
2025-12-03T09:50:44.924 [DEBUG] [Thread-114517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:50:44.944 [DEBUG] [Thread-114517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:50:44.944 [INFO] [Thread-114517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] client lang: <none>
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] server lang: <none>
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] kex follows: False
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] Compression: none
2025-12-03T09:50:44.948 [DEBUG] [Thread-114517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:50:44.965 [DEBUG] [Thread-114517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:50:44.965 [DEBUG] [Thread-114517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:50:44.966 [DEBUG] [Thread-114517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:50:44.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:50:44.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:50:44.967 [DEBUG] [Thread-114517] [transport.py] [_log()] userauth is OK
2025-12-03T09:50:44.968 [DEBUG] [Thread-114517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:50:44.968 [DEBUG] [Thread-114517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:50:44.968 [DEBUG] [Thread-114517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:50:44.968 [DEBUG] [Thread-114517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:50:44.989 [INFO] [Thread-114517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:50:44.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:50:45.608 [DEBUG] [Thread-114517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:50:45.608 [DEBUG] [Thread-114517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:50:45.608 [DEBUG] [Thread-114517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:50:45.649 [DEBUG] [Thread-114517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:50:45.649 [DEBUG] [Thread-114517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:50:45.652 [DEBUG] [Thread-114517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:50:45.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:50:45.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:50:45.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:50:45.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:50:45.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:50:45.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:50:45.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:50:45.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:50:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:50:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.326440 -999.00  +15.10  14.38     57   +6.70 1 2 1 1 1   888    0 8.97 48.83 ----- 18.5 14.4 173.0 23.2 21.2 -21.4 20.4 -19.9 19.8 -18.4 20.3 -20.5
2025-12-03T09:50:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:50:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:50:45.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.326440
2025-12-03T09:50:45.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:50:45.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:50:45.676 [DEBUG] [Thread-114517] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:50:45.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:50:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:50:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:50:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:50:34', tmtdew=9.61, humidity=52.65, cloud=0.0, wind=21.23, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:50:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:50:45.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:50:45.771 [DEBUG] [Thread-114520] [transport.py] [_log()] starting thread (client mode): 0xa2708d90
2025-12-03T09:50:45.771 [DEBUG] [Thread-114520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:50:45.785 [DEBUG] [Thread-114520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:50:45.786 [INFO] [Thread-114520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:50:45.793 [DEBUG] [Thread-114520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] client lang: <none>
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] server lang: <none>
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] kex follows: False
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] Compression: none
2025-12-03T09:50:45.794 [DEBUG] [Thread-114520] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:50:45.849 [DEBUG] [Thread-114520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:50:45.850 [DEBUG] [Thread-114520] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:50:45.850 [DEBUG] [Thread-114520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:50:45.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:50:45.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:50:45.906 [DEBUG] [Thread-114520] [transport.py] [_log()] userauth is OK
2025-12-03T09:50:45.907 [DEBUG] [Thread-114520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:50:45.907 [DEBUG] [Thread-114520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:50:45.907 [DEBUG] [Thread-114520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:50:45.907 [DEBUG] [Thread-114520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:50:45.925 [INFO] [Thread-114520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:50:45.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:50:45.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:50:46.756 [DEBUG] [Thread-114520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:50:46.756 [DEBUG] [Thread-114520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:50:46.803 [DEBUG] [Thread-114520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:50:46.804 [DEBUG] [Thread-114520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:50:46.812 [DEBUG] [Thread-114520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:50:46.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:50:46.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:50:46.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:50:46.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:50:46.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:50:46.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:50:46.852 [DEBUG] [Thread-114520] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:50:55.135 [DEBUG] [Thread-114522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:10.183 [DEBUG] [Thread-114523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:16.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:51:16.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:51:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:51:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 51, 6), 9.82, 51.94, 0.0, 18.26, 14.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:51:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:51:06
2025-12-03T09:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:51:17.817 [DEBUG] [Thread-114524] [transport.py] [_log()] starting thread (client mode): 0xa271d600
2025-12-03T09:51:17.817 [DEBUG] [Thread-114524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:51:17.838 [DEBUG] [Thread-114524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:51:17.838 [INFO] [Thread-114524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:51:17.842 [DEBUG] [Thread-114524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:51:17.842 [DEBUG] [Thread-114524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:51:17.842 [DEBUG] [Thread-114524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:51:17.842 [DEBUG] [Thread-114524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:17.842 [DEBUG] [Thread-114524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] client lang: <none>
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] server lang: <none>
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] kex follows: False
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] Compression: none
2025-12-03T09:51:17.843 [DEBUG] [Thread-114524] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:51:17.861 [DEBUG] [Thread-114524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:51:17.862 [DEBUG] [Thread-114524] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:51:17.862 [DEBUG] [Thread-114524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:51:17.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:51:17.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:51:17.864 [DEBUG] [Thread-114524] [transport.py] [_log()] userauth is OK
2025-12-03T09:51:17.864 [DEBUG] [Thread-114524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:51:17.865 [DEBUG] [Thread-114524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:51:17.865 [DEBUG] [Thread-114524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:51:17.865 [DEBUG] [Thread-114524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:51:17.888 [INFO] [Thread-114524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:51:17.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:51:18.504 [DEBUG] [Thread-114524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:51:18.504 [DEBUG] [Thread-114524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:51:18.505 [DEBUG] [Thread-114524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:51:18.546 [DEBUG] [Thread-114524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:51:18.546 [DEBUG] [Thread-114524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:51:18.549 [DEBUG] [Thread-114524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:51:18.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:51:18.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:51:18.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:51:18.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:51:18.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:51:18.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:51:18.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:51:18.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:51:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:51:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.326788 -999.00  +15.10  15.18     56   +6.60 1 2 1 1 1   888    0 9.27 58.42 ----- 18.3 15.2 169.4 20.1 21.4 -20.8 20.5 -21.8 19.9 -18.5 20.5 -19.8
2025-12-03T09:51:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:51:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:51:18.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.326788
2025-12-03T09:51:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:51:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:51:18.574 [DEBUG] [Thread-114524] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:51:18.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:51:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:51:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:51:18.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:51:06', tmtdew=9.82, humidity=51.94, cloud=0.0, wind=18.26, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:50:34.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:51:18.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:51:18.668 [DEBUG] [Thread-114527] [transport.py] [_log()] starting thread (client mode): 0xa51ce2f0
2025-12-03T09:51:18.668 [DEBUG] [Thread-114527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:51:18.683 [DEBUG] [Thread-114527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:51:18.683 [INFO] [Thread-114527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:51:18.690 [DEBUG] [Thread-114527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:51:18.691 [DEBUG] [Thread-114527] [transport.py] [_log()] client lang: <none>
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] server lang: <none>
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] kex follows: False
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:51:18.692 [DEBUG] [Thread-114527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:51:18.693 [DEBUG] [Thread-114527] [transport.py] [_log()] Compression: none
2025-12-03T09:51:18.693 [DEBUG] [Thread-114527] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:51:18.751 [DEBUG] [Thread-114527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:51:18.751 [DEBUG] [Thread-114527] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:51:18.752 [DEBUG] [Thread-114527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:51:18.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:51:18.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:51:18.807 [DEBUG] [Thread-114527] [transport.py] [_log()] userauth is OK
2025-12-03T09:51:18.807 [DEBUG] [Thread-114527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:51:18.807 [DEBUG] [Thread-114527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:51:18.807 [DEBUG] [Thread-114527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:51:18.808 [DEBUG] [Thread-114527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:51:18.827 [INFO] [Thread-114527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:51:18.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:51:18.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:51:19.669 [DEBUG] [Thread-114527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:51:19.669 [DEBUG] [Thread-114527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:51:19.717 [DEBUG] [Thread-114527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:51:19.717 [DEBUG] [Thread-114527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:51:19.726 [DEBUG] [Thread-114527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:51:19.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:51:19.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:51:19.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:51:19.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:51:19.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:51:19.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:51:19.759 [DEBUG] [Thread-114527] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:51:25.211 [DEBUG] [Thread-114529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:38.815 [DEBUG] [Thread-114530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:40.252 [DEBUG] [Thread-114531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:40.728 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:40.729 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:51:49.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:51:49.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:51:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:51:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 51, 38), 10.04, 51.24, 0.0, 19.8, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:51:50.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:51:38
2025-12-03T09:51:50.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:51:50.723 [DEBUG] [Thread-114532] [transport.py] [_log()] starting thread (client mode): 0xa271dcf0
2025-12-03T09:51:50.724 [DEBUG] [Thread-114532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:51:50.744 [DEBUG] [Thread-114532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:51:50.744 [INFO] [Thread-114532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] client lang: <none>
2025-12-03T09:51:50.748 [DEBUG] [Thread-114532] [transport.py] [_log()] server lang: <none>
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] kex follows: False
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] Compression: none
2025-12-03T09:51:50.749 [DEBUG] [Thread-114532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:51:50.767 [DEBUG] [Thread-114532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:51:50.768 [DEBUG] [Thread-114532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:51:50.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:51:50.769 [DEBUG] [Thread-114532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:51:50.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:51:50.771 [DEBUG] [Thread-114532] [transport.py] [_log()] userauth is OK
2025-12-03T09:51:50.771 [DEBUG] [Thread-114532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:51:50.772 [DEBUG] [Thread-114532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:51:50.772 [DEBUG] [Thread-114532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:51:50.772 [DEBUG] [Thread-114532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:51:50.795 [INFO] [Thread-114532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:51:50.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:51:51.420 [DEBUG] [Thread-114532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:51:51.420 [DEBUG] [Thread-114532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:51:51.420 [DEBUG] [Thread-114532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:51:51.461 [DEBUG] [Thread-114532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:51:51.461 [DEBUG] [Thread-114532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:51:51.464 [DEBUG] [Thread-114532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:51:51.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:51:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:51:51.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:51:51.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:51:51.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:51:51.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:51:51.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:51:51.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:51:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:51:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.327482 -999.00  +15.00  15.05     56   +6.60 1 2 1 1 1   888    0 9.94 79.37 ----- 12.6 15.1 138.0 23.4 21.4 -20.9 20.7 -20.0 20.1 -18.5 20.6 -21.2
2025-12-03T09:51:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:51:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:51:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.327482
2025-12-03T09:51:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:51:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:51:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:51:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:51:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:51:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:51:38', tmtdew=10.04, humidity=51.24, cloud=0.0, wind=19.8, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:51:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:51:51.489 [DEBUG] [Thread-114532] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:51:51.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:51:51.587 [DEBUG] [Thread-114535] [transport.py] [_log()] starting thread (client mode): 0xa27b0310
2025-12-03T09:51:51.587 [DEBUG] [Thread-114535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:51:51.602 [DEBUG] [Thread-114535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:51:51.603 [INFO] [Thread-114535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:51:51.610 [DEBUG] [Thread-114535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:51:51.610 [DEBUG] [Thread-114535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] client lang: <none>
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] server lang: <none>
2025-12-03T09:51:51.611 [DEBUG] [Thread-114535] [transport.py] [_log()] kex follows: False
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] Compression: none
2025-12-03T09:51:51.612 [DEBUG] [Thread-114535] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:51:51.670 [DEBUG] [Thread-114535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:51:51.670 [DEBUG] [Thread-114535] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:51:51.671 [DEBUG] [Thread-114535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:51:51.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:51:51.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:51:51.726 [DEBUG] [Thread-114535] [transport.py] [_log()] userauth is OK
2025-12-03T09:51:51.726 [DEBUG] [Thread-114535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:51:51.726 [DEBUG] [Thread-114535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:51:51.727 [DEBUG] [Thread-114535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:51:51.727 [DEBUG] [Thread-114535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:51:51.745 [INFO] [Thread-114535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:51:51.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:51:51.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:51:52.634 [DEBUG] [Thread-114535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:51:52.634 [DEBUG] [Thread-114535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:51:52.682 [DEBUG] [Thread-114535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:51:52.682 [DEBUG] [Thread-114535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:51:52.691 [DEBUG] [Thread-114535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:51:52.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:51:52.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:51:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:51:52.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:51:52.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:51:52.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:51:52.725 [DEBUG] [Thread-114535] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:51:55.277 [DEBUG] [Thread-114537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:10.316 [DEBUG] [Thread-114538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:22.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:52:22.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:52:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:52:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 52, 10), 10.04, 51.26, 0.0, 22.18, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:52:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:52:10
2025-12-03T09:52:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:52:23.687 [DEBUG] [Thread-114539] [transport.py] [_log()] starting thread (client mode): 0xa27c3790
2025-12-03T09:52:23.687 [DEBUG] [Thread-114539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:52:23.707 [DEBUG] [Thread-114539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:52:23.707 [INFO] [Thread-114539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] client lang: <none>
2025-12-03T09:52:23.711 [DEBUG] [Thread-114539] [transport.py] [_log()] server lang: <none>
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] kex follows: False
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] Compression: none
2025-12-03T09:52:23.712 [DEBUG] [Thread-114539] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:52:23.729 [DEBUG] [Thread-114539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:52:23.730 [DEBUG] [Thread-114539] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:52:23.731 [DEBUG] [Thread-114539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:52:23.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:52:23.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:52:23.733 [DEBUG] [Thread-114539] [transport.py] [_log()] userauth is OK
2025-12-03T09:52:23.733 [DEBUG] [Thread-114539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:52:23.734 [DEBUG] [Thread-114539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:52:23.734 [DEBUG] [Thread-114539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:52:23.734 [DEBUG] [Thread-114539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:52:23.759 [INFO] [Thread-114539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:52:23.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:52:24.410 [DEBUG] [Thread-114539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:52:24.411 [DEBUG] [Thread-114539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:52:24.411 [DEBUG] [Thread-114539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:52:24.452 [DEBUG] [Thread-114539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:52:24.452 [DEBUG] [Thread-114539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:52:24.455 [DEBUG] [Thread-114539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:52:24.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:52:24.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:52:24.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:52:24.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:52:24.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:52:24.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:52:24.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:52:24.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:52:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:52:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.327829 -999.00  +15.10  17.35     57   +6.80 1 2 1 1 1   888    0 9.87 77.77 ----- 12.7 17.4 145.8 26.1 21.4 -21.8 20.8 -20.8 20.0 -19.5 20.6 -20.2
2025-12-03T09:52:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:52:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:52:24.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.327829
2025-12-03T09:52:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:52:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:52:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:52:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:52:24.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:52:24.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:52:10', tmtdew=10.04, humidity=51.26, cloud=0.0, wind=22.18, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:52:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:52:24.481 [DEBUG] [Thread-114539] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:52:24.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:52:24.589 [DEBUG] [Thread-114542] [transport.py] [_log()] starting thread (client mode): 0xa27eb610
2025-12-03T09:52:24.589 [DEBUG] [Thread-114542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:52:24.604 [DEBUG] [Thread-114542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:52:24.604 [INFO] [Thread-114542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:52:24.611 [DEBUG] [Thread-114542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:52:24.612 [DEBUG] [Thread-114542] [transport.py] [_log()] client lang: <none>
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] server lang: <none>
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] kex follows: False
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] Compression: none
2025-12-03T09:52:24.613 [DEBUG] [Thread-114542] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:52:24.674 [DEBUG] [Thread-114542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:52:24.675 [DEBUG] [Thread-114542] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:52:24.675 [DEBUG] [Thread-114542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:52:24.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:52:24.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:52:24.730 [DEBUG] [Thread-114542] [transport.py] [_log()] userauth is OK
2025-12-03T09:52:24.731 [DEBUG] [Thread-114542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:52:24.731 [DEBUG] [Thread-114542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:52:24.731 [DEBUG] [Thread-114542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:52:24.731 [DEBUG] [Thread-114542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:52:24.751 [INFO] [Thread-114542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:52:24.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:52:24.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:52:25.346 [DEBUG] [Thread-114544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:25.632 [DEBUG] [Thread-114542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:52:25.632 [DEBUG] [Thread-114542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:52:25.681 [DEBUG] [Thread-114542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:52:25.681 [DEBUG] [Thread-114542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:52:25.689 [DEBUG] [Thread-114542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:52:25.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:52:25.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:52:25.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:52:25.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:52:25.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:52:25.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:52:25.722 [DEBUG] [Thread-114542] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:52:38.849 [DEBUG] [Thread-114545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:40.386 [DEBUG] [Thread-114546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:40.869 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:40.870 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:55.417 [DEBUG] [Thread-114547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:52:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:52:55.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:52:55.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:52:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 52, 42), 9.73, 51.92, 0.0, 24.1, 15.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:52:56.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:52:42
2025-12-03T09:52:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:52:56.642 [DEBUG] [Thread-114548] [transport.py] [_log()] starting thread (client mode): 0xa2786440
2025-12-03T09:52:56.643 [DEBUG] [Thread-114548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:52:56.664 [DEBUG] [Thread-114548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:52:56.664 [INFO] [Thread-114548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:52:56.667 [DEBUG] [Thread-114548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:52:56.667 [DEBUG] [Thread-114548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:52:56.667 [DEBUG] [Thread-114548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:52:56.667 [DEBUG] [Thread-114548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] client lang: <none>
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] server lang: <none>
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] kex follows: False
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] Compression: none
2025-12-03T09:52:56.668 [DEBUG] [Thread-114548] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:52:56.686 [DEBUG] [Thread-114548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:52:56.687 [DEBUG] [Thread-114548] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:52:56.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:52:56.687 [DEBUG] [Thread-114548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:52:56.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:52:56.690 [DEBUG] [Thread-114548] [transport.py] [_log()] userauth is OK
2025-12-03T09:52:56.690 [DEBUG] [Thread-114548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:52:56.690 [DEBUG] [Thread-114548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:52:56.690 [DEBUG] [Thread-114548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:52:56.690 [DEBUG] [Thread-114548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:52:56.726 [INFO] [Thread-114548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:52:56.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:52:57.369 [DEBUG] [Thread-114548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:52:57.369 [DEBUG] [Thread-114548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:52:57.369 [DEBUG] [Thread-114548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:52:57.410 [DEBUG] [Thread-114548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:52:57.410 [DEBUG] [Thread-114548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:52:57.412 [DEBUG] [Thread-114548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:52:57.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:52:57.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:52:57.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:52:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:52:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:52:57.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:52:57.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.328177 -999.00  +15.10  20.74     57   +6.70 1 2 1 1 1   888    0 9.93 77.99 ----- 22.2 20.7 166.4 27.2 21.4 -22.2 20.8 -20.0 20.1 -20.0 20.6 -20.6
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:52:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.328177
2025-12-03T09:52:57.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:52:57.442 [DEBUG] [Thread-114548] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:52:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:52:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:52:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:52:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:52:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:52:42', tmtdew=9.73, humidity=51.92, cloud=0.0, wind=24.1, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:52:34.493', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:52:57.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:52:57.541 [DEBUG] [Thread-114551] [transport.py] [_log()] starting thread (client mode): 0xa271dc90
2025-12-03T09:52:57.541 [DEBUG] [Thread-114551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:52:57.556 [DEBUG] [Thread-114551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:52:57.556 [INFO] [Thread-114551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:52:57.563 [DEBUG] [Thread-114551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] client lang: <none>
2025-12-03T09:52:57.564 [DEBUG] [Thread-114551] [transport.py] [_log()] server lang: <none>
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] kex follows: False
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] Compression: none
2025-12-03T09:52:57.565 [DEBUG] [Thread-114551] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:52:57.621 [DEBUG] [Thread-114551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:52:57.622 [DEBUG] [Thread-114551] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:52:57.622 [DEBUG] [Thread-114551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:52:57.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:52:57.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:52:57.683 [DEBUG] [Thread-114551] [transport.py] [_log()] userauth is OK
2025-12-03T09:52:57.683 [DEBUG] [Thread-114551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:52:57.683 [DEBUG] [Thread-114551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:52:57.683 [DEBUG] [Thread-114551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:52:57.683 [DEBUG] [Thread-114551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:52:57.702 [INFO] [Thread-114551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:52:57.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:52:57.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:52:58.522 [DEBUG] [Thread-114551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:52:58.522 [DEBUG] [Thread-114551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:52:58.570 [DEBUG] [Thread-114551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:52:58.570 [DEBUG] [Thread-114551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:52:58.579 [DEBUG] [Thread-114551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:52:58.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:52:58.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:52:58.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:52:58.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:52:58.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:52:58.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:52:58.612 [DEBUG] [Thread-114551] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:53:10.449 [DEBUG] [Thread-114553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:25.498 [DEBUG] [Thread-114554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:28.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:53:28.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:53:28.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:53:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 53, 14), 9.81, 51.63, 0.0, 24.07, 14.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:53:29.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:53:14
2025-12-03T09:53:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:53:29.573 [DEBUG] [Thread-114555] [transport.py] [_log()] starting thread (client mode): 0xa271d690
2025-12-03T09:53:29.573 [DEBUG] [Thread-114555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:53:29.592 [DEBUG] [Thread-114555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:53:29.592 [INFO] [Thread-114555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] client lang: <none>
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] server lang: <none>
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] kex follows: False
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] Compression: none
2025-12-03T09:53:29.595 [DEBUG] [Thread-114555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:53:29.611 [DEBUG] [Thread-114555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:53:29.611 [DEBUG] [Thread-114555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:53:29.611 [DEBUG] [Thread-114555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:53:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:53:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:53:29.613 [DEBUG] [Thread-114555] [transport.py] [_log()] userauth is OK
2025-12-03T09:53:29.613 [DEBUG] [Thread-114555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:53:29.613 [DEBUG] [Thread-114555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:53:29.613 [DEBUG] [Thread-114555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:53:29.613 [DEBUG] [Thread-114555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:53:29.627 [INFO] [Thread-114555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:53:29.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:53:30.255 [DEBUG] [Thread-114555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:53:30.255 [DEBUG] [Thread-114555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:53:30.255 [DEBUG] [Thread-114555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:53:30.296 [DEBUG] [Thread-114555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:53:30.296 [DEBUG] [Thread-114555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:53:30.298 [DEBUG] [Thread-114555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:53:30.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:53:30.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:53:30.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:53:30.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:53:30.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:53:30.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:53:30.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:53:30.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:53:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:53:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.328524 -999.00  +15.10  16.57     56   +6.60 1 2 1 1 1   888    0 10.18 85.36 ----- 17.4 16.6 159.7 29.6 21.2 -22.2 20.6 -20.4 20.0 -19.3 20.6 -21.5
2025-12-03T09:53:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:53:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:53:30.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.328524
2025-12-03T09:53:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:53:30.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:53:30.322 [DEBUG] [Thread-114555] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:53:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:53:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:53:30.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:53:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:53:14', tmtdew=9.81, humidity=51.63, cloud=0.0, wind=24.07, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:53:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:53:30.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:53:30.423 [DEBUG] [Thread-114558] [transport.py] [_log()] starting thread (client mode): 0xa27e87f0
2025-12-03T09:53:30.423 [DEBUG] [Thread-114558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:53:30.439 [DEBUG] [Thread-114558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:53:30.439 [INFO] [Thread-114558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:53:30.447 [DEBUG] [Thread-114558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] client lang: <none>
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] server lang: <none>
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] kex follows: False
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] Compression: none
2025-12-03T09:53:30.448 [DEBUG] [Thread-114558] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:53:30.505 [DEBUG] [Thread-114558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:53:30.506 [DEBUG] [Thread-114558] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:53:30.506 [DEBUG] [Thread-114558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:53:30.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:53:30.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:53:30.562 [DEBUG] [Thread-114558] [transport.py] [_log()] userauth is OK
2025-12-03T09:53:30.562 [DEBUG] [Thread-114558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:53:30.563 [DEBUG] [Thread-114558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:53:30.563 [DEBUG] [Thread-114558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:53:30.563 [DEBUG] [Thread-114558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:53:30.581 [INFO] [Thread-114558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:53:30.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:53:30.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:53:31.447 [DEBUG] [Thread-114558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:53:31.447 [DEBUG] [Thread-114558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:53:31.494 [DEBUG] [Thread-114558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:53:31.495 [DEBUG] [Thread-114558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:53:31.503 [DEBUG] [Thread-114558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:53:31.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:53:31.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:53:31.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:53:31.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:53:31.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:53:31.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:53:31.537 [DEBUG] [Thread-114558] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:53:38.924 [DEBUG] [Thread-114560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:40.527 [DEBUG] [Thread-114561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:41.009 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:41.010 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:53:55.570 [DEBUG] [Thread-114562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:54:01.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:54:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:54:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 53, 46), 9.67, 52.44, 0.0, 23.38, 15.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:54:02.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:53:46
2025-12-03T09:54:02.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:54:02.541 [DEBUG] [Thread-114563] [transport.py] [_log()] starting thread (client mode): 0xa27e9c90
2025-12-03T09:54:02.541 [DEBUG] [Thread-114563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:54:02.561 [DEBUG] [Thread-114563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:54:02.561 [INFO] [Thread-114563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] client lang: <none>
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] server lang: <none>
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] kex follows: False
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:54:02.564 [DEBUG] [Thread-114563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:54:02.565 [DEBUG] [Thread-114563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:54:02.565 [DEBUG] [Thread-114563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:54:02.565 [DEBUG] [Thread-114563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:54:02.565 [DEBUG] [Thread-114563] [transport.py] [_log()] Compression: none
2025-12-03T09:54:02.565 [DEBUG] [Thread-114563] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:54:02.581 [DEBUG] [Thread-114563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:54:02.581 [DEBUG] [Thread-114563] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:54:02.581 [DEBUG] [Thread-114563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:54:02.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:54:02.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:54:02.582 [DEBUG] [Thread-114563] [transport.py] [_log()] userauth is OK
2025-12-03T09:54:02.582 [DEBUG] [Thread-114563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:54:02.582 [DEBUG] [Thread-114563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:54:02.582 [DEBUG] [Thread-114563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:54:02.582 [DEBUG] [Thread-114563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:54:02.598 [INFO] [Thread-114563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:54:02.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:54:03.199 [DEBUG] [Thread-114563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:54:03.199 [DEBUG] [Thread-114563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:54:03.199 [DEBUG] [Thread-114563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:54:03.239 [DEBUG] [Thread-114563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:54:03.239 [DEBUG] [Thread-114563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:54:03.242 [DEBUG] [Thread-114563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:54:03.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:54:03.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:54:03.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:54:03.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:54:03.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:54:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.328871 -999.00  +15.00  21.84     56   +6.50 1 2 1 1 1   888    0 10.82 103.54 ----- 16.5 21.8 146.2 26.1 21.2 -21.5 20.6 -20.5 20.0 -19.9 20.6 -20.6
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:54:03.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.328871
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:54:03.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:53:46', tmtdew=9.67, humidity=52.44, cloud=0.0, wind=23.38, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:53:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:54:03.258 [DEBUG] [Thread-114563] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:54:03.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:54:03.344 [DEBUG] [Thread-114566] [transport.py] [_log()] starting thread (client mode): 0xa2708f70
2025-12-03T09:54:03.344 [DEBUG] [Thread-114566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:54:03.366 [DEBUG] [Thread-114566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:54:03.366 [INFO] [Thread-114566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:54:03.376 [DEBUG] [Thread-114566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] client lang: <none>
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] server lang: <none>
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] kex follows: False
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] Compression: none
2025-12-03T09:54:03.377 [DEBUG] [Thread-114566] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:54:03.440 [DEBUG] [Thread-114566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:54:03.440 [DEBUG] [Thread-114566] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:54:03.440 [DEBUG] [Thread-114566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:54:03.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:54:03.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:54:03.504 [DEBUG] [Thread-114566] [transport.py] [_log()] userauth is OK
2025-12-03T09:54:03.504 [DEBUG] [Thread-114566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:54:03.504 [DEBUG] [Thread-114566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:54:03.504 [DEBUG] [Thread-114566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:54:03.505 [DEBUG] [Thread-114566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:54:03.521 [INFO] [Thread-114566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:54:03.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:54:03.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:54:04.337 [DEBUG] [Thread-114566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:54:04.338 [DEBUG] [Thread-114566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:54:04.385 [DEBUG] [Thread-114566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:54:04.385 [DEBUG] [Thread-114566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:54:04.393 [DEBUG] [Thread-114566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:54:04.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:54:04.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:54:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:54:04.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:54:04.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:54:04.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:54:04.425 [DEBUG] [Thread-114566] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:54:10.597 [DEBUG] [Thread-114568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:25.639 [DEBUG] [Thread-114569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:34.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:54:34.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:54:34.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:54:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 54, 18), 9.75, 52.17, 0.0, 23.55, 15.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:54:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:54:18
2025-12-03T09:54:35.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:54:35.379 [DEBUG] [Thread-114570] [transport.py] [_log()] starting thread (client mode): 0xa27855a0
2025-12-03T09:54:35.380 [DEBUG] [Thread-114570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:54:35.400 [DEBUG] [Thread-114570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:54:35.400 [INFO] [Thread-114570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:54:35.403 [DEBUG] [Thread-114570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:54:35.403 [DEBUG] [Thread-114570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:54:35.403 [DEBUG] [Thread-114570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:54:35.403 [DEBUG] [Thread-114570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:35.403 [DEBUG] [Thread-114570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] client lang: <none>
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] server lang: <none>
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] kex follows: False
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] Compression: none
2025-12-03T09:54:35.404 [DEBUG] [Thread-114570] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:54:35.421 [DEBUG] [Thread-114570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:54:35.421 [DEBUG] [Thread-114570] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:54:35.422 [DEBUG] [Thread-114570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:54:35.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:54:35.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:54:35.424 [DEBUG] [Thread-114570] [transport.py] [_log()] userauth is OK
2025-12-03T09:54:35.424 [DEBUG] [Thread-114570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:54:35.424 [DEBUG] [Thread-114570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:54:35.424 [DEBUG] [Thread-114570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:54:35.424 [DEBUG] [Thread-114570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:54:35.458 [INFO] [Thread-114570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:54:35.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:54:36.100 [DEBUG] [Thread-114570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:54:36.100 [DEBUG] [Thread-114570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:54:36.101 [DEBUG] [Thread-114570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:54:36.141 [DEBUG] [Thread-114570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:54:36.141 [DEBUG] [Thread-114570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:54:36.144 [DEBUG] [Thread-114570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:54:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:54:36.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:54:36.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:54:36.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:54:36.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:54:36.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:54:36.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.329218 -999.00  +14.90  22.34     57   +6.60 1 2 1 1 1   888    0 10.51 94.51 ----- 18.4 22.3 133.5 29.4 21.1 -21.3 20.5 -21.3 19.9 -19.5 20.5 -21.4
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:54:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.329218
2025-12-03T09:54:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:54:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:54:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:54:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:54:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:54:36.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:54:18', tmtdew=9.75, humidity=52.17, cloud=0.0, wind=23.55, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:54:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:54:36.168 [DEBUG] [Thread-114570] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:54:36.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:54:36.266 [DEBUG] [Thread-114573] [transport.py] [_log()] starting thread (client mode): 0xa270a110
2025-12-03T09:54:36.266 [DEBUG] [Thread-114573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:54:36.281 [DEBUG] [Thread-114573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:54:36.281 [INFO] [Thread-114573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:54:36.288 [DEBUG] [Thread-114573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] client lang: <none>
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] server lang: <none>
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] kex follows: False
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:54:36.289 [DEBUG] [Thread-114573] [transport.py] [_log()] Compression: none
2025-12-03T09:54:36.290 [DEBUG] [Thread-114573] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:54:36.349 [DEBUG] [Thread-114573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:54:36.349 [DEBUG] [Thread-114573] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:54:36.350 [DEBUG] [Thread-114573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:54:36.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:54:36.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:54:36.406 [DEBUG] [Thread-114573] [transport.py] [_log()] userauth is OK
2025-12-03T09:54:36.406 [DEBUG] [Thread-114573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:54:36.406 [DEBUG] [Thread-114573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:54:36.406 [DEBUG] [Thread-114573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:54:36.407 [DEBUG] [Thread-114573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:54:36.425 [INFO] [Thread-114573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:54:36.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:54:36.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:54:37.215 [DEBUG] [Thread-114573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:54:37.216 [DEBUG] [Thread-114573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:54:37.264 [DEBUG] [Thread-114573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:54:37.264 [DEBUG] [Thread-114573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:54:37.273 [DEBUG] [Thread-114573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:54:37.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:54:37.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:54:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:54:37.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:54:37.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:54:37.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:54:37.308 [DEBUG] [Thread-114573] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:54:38.967 [DEBUG] [Thread-114575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:40.666 [DEBUG] [Thread-114576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:41.150 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:41.151 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:54:55.701 [DEBUG] [Thread-114577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:55:07.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:55:07.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:55:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 54, 50), 9.76, 51.79, 0.0, 24.07, 14.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:55:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:54:50
2025-12-03T09:55:08.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:55:08.273 [DEBUG] [Thread-114578] [transport.py] [_log()] starting thread (client mode): 0xa2787cd0
2025-12-03T09:55:08.273 [DEBUG] [Thread-114578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:55:08.284 [DEBUG] [Thread-114578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:55:08.284 [INFO] [Thread-114578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] client lang: <none>
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] server lang: <none>
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] kex follows: False
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] Compression: none
2025-12-03T09:55:08.287 [DEBUG] [Thread-114578] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:55:08.304 [DEBUG] [Thread-114578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:55:08.304 [DEBUG] [Thread-114578] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:55:08.305 [DEBUG] [Thread-114578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:55:08.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:55:08.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:55:08.306 [DEBUG] [Thread-114578] [transport.py] [_log()] userauth is OK
2025-12-03T09:55:08.306 [DEBUG] [Thread-114578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:55:08.306 [DEBUG] [Thread-114578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:55:08.306 [DEBUG] [Thread-114578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:55:08.306 [DEBUG] [Thread-114578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:55:08.337 [INFO] [Thread-114578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:55:08.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:55:08.887 [DEBUG] [Thread-114578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:55:08.887 [DEBUG] [Thread-114578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:55:08.887 [DEBUG] [Thread-114578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:55:08.928 [DEBUG] [Thread-114578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:55:08.928 [DEBUG] [Thread-114578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:55:08.930 [DEBUG] [Thread-114578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:55:08.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:55:08.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:55:08.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:55:08.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:55:09.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:55:09.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:55:09.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:55:09.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:55:09.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:55:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.329565 -999.00  +15.10  23.61     57   +6.60 1 2 1 1 1   888    0 10.59 93.50 ----- 19.8 23.6 132.2 27.7 21.0 -21.3 20.5 -22.1 20.0 -20.1 20.5 -20.8
2025-12-03T09:55:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:55:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:55:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.329565
2025-12-03T09:55:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:55:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:55:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:55:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:55:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:55:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:54:50', tmtdew=9.76, humidity=51.79, cloud=0.0, wind=24.07, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:54:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:55:09.006 [DEBUG] [Thread-114578] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:55:09.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:55:09.103 [DEBUG] [Thread-114581] [transport.py] [_log()] starting thread (client mode): 0xa27878e0
2025-12-03T09:55:09.103 [DEBUG] [Thread-114581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:55:09.118 [DEBUG] [Thread-114581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:55:09.118 [INFO] [Thread-114581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:55:09.125 [DEBUG] [Thread-114581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:55:09.126 [DEBUG] [Thread-114581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] client lang: <none>
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] server lang: <none>
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] kex follows: False
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:55:09.127 [DEBUG] [Thread-114581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:55:09.128 [DEBUG] [Thread-114581] [transport.py] [_log()] Compression: none
2025-12-03T09:55:09.128 [DEBUG] [Thread-114581] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:55:09.189 [DEBUG] [Thread-114581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:55:09.190 [DEBUG] [Thread-114581] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:55:09.190 [DEBUG] [Thread-114581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:55:09.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:55:09.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:55:09.251 [DEBUG] [Thread-114581] [transport.py] [_log()] userauth is OK
2025-12-03T09:55:09.251 [DEBUG] [Thread-114581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:55:09.251 [DEBUG] [Thread-114581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:55:09.251 [DEBUG] [Thread-114581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:55:09.251 [DEBUG] [Thread-114581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:55:09.270 [INFO] [Thread-114581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:55:09.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:55:09.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:55:10.088 [DEBUG] [Thread-114581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:55:10.088 [DEBUG] [Thread-114581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:55:10.136 [DEBUG] [Thread-114581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:55:10.136 [DEBUG] [Thread-114581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:55:10.145 [DEBUG] [Thread-114581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:55:10.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:55:10.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:55:10.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:55:10.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:55:10.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:55:10.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:55:10.180 [DEBUG] [Thread-114581] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:55:10.736 [DEBUG] [Thread-114583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:25.782 [DEBUG] [Thread-114584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:39.011 [DEBUG] [Thread-114585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:40.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:55:40.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:55:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:55:40.810 [DEBUG] [Thread-114586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 55, 23), 9.68, 52.0, 0.0, 21.83, 14.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:55:40.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:55:23
2025-12-03T09:55:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:55:41.154 [DEBUG] [Thread-114587] [transport.py] [_log()] starting thread (client mode): 0xa51ce1a0
2025-12-03T09:55:41.154 [DEBUG] [Thread-114587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:55:41.173 [DEBUG] [Thread-114587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:55:41.173 [INFO] [Thread-114587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] client lang: <none>
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] server lang: <none>
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] kex follows: False
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] Compression: none
2025-12-03T09:55:41.177 [DEBUG] [Thread-114587] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:55:41.193 [DEBUG] [Thread-114587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:55:41.193 [DEBUG] [Thread-114587] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:55:41.194 [DEBUG] [Thread-114587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:55:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:55:41.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:55:41.195 [DEBUG] [Thread-114587] [transport.py] [_log()] userauth is OK
2025-12-03T09:55:41.195 [DEBUG] [Thread-114587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:55:41.195 [DEBUG] [Thread-114587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:55:41.195 [DEBUG] [Thread-114587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:55:41.195 [DEBUG] [Thread-114587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:55:41.209 [INFO] [Thread-114587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:55:41.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:55:41.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:41.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:55:41.786 [DEBUG] [Thread-114587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:55:41.786 [DEBUG] [Thread-114587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:55:41.787 [DEBUG] [Thread-114587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:55:41.828 [DEBUG] [Thread-114587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:55:41.828 [DEBUG] [Thread-114587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:55:41.830 [DEBUG] [Thread-114587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:55:41.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:55:41.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:55:41.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:55:41.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:55:41.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:55:41.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:55:41.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:55:41.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.330260 -999.00  +14.50  23.03     57   +6.10 1 2 1 1 1   888    0 10.89 103.04 ----- 22.6 23.0 161.0 27.7 20.7 -23.5 20.4 -21.9 19.8 -21.5 20.4 -21.0
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.330260
2025-12-03T09:55:41.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:55:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:55:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:55:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:55:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:55:41.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:55:23', tmtdew=9.68, humidity=52.0, cloud=0.0, wind=21.83, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:55:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:55:41.854 [DEBUG] [Thread-114587] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:55:41.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:55:41.950 [DEBUG] [Thread-114590] [transport.py] [_log()] starting thread (client mode): 0xa27088b0
2025-12-03T09:55:41.950 [DEBUG] [Thread-114590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:55:41.965 [DEBUG] [Thread-114590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:55:41.965 [INFO] [Thread-114590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:55:41.973 [DEBUG] [Thread-114590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] client lang: <none>
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] server lang: <none>
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] kex follows: False
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] Compression: none
2025-12-03T09:55:41.974 [DEBUG] [Thread-114590] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:55:42.030 [DEBUG] [Thread-114590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:55:42.030 [DEBUG] [Thread-114590] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:55:42.031 [DEBUG] [Thread-114590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:55:42.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:55:42.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:55:42.086 [DEBUG] [Thread-114590] [transport.py] [_log()] userauth is OK
2025-12-03T09:55:42.086 [DEBUG] [Thread-114590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:55:42.087 [DEBUG] [Thread-114590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:55:42.087 [DEBUG] [Thread-114590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:55:42.087 [DEBUG] [Thread-114590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:55:42.105 [INFO] [Thread-114590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:55:42.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:55:42.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:55:43.037 [DEBUG] [Thread-114590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:55:43.037 [DEBUG] [Thread-114590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:55:43.085 [DEBUG] [Thread-114590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:55:43.085 [DEBUG] [Thread-114590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:55:43.093 [DEBUG] [Thread-114590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:55:43.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:55:43.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:55:43.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:55:43.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:55:43.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:55:43.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:55:43.128 [DEBUG] [Thread-114590] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:55:55.837 [DEBUG] [Thread-114592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:10.874 [DEBUG] [Thread-114593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:56:13.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:56:13.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 55, 55), 9.92, 51.36, 0.0, 21.55, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:55:55
2025-12-03T09:56:13.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:56:14.097 [DEBUG] [Thread-114594] [transport.py] [_log()] starting thread (client mode): 0xa51ce440
2025-12-03T09:56:14.097 [DEBUG] [Thread-114594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:56:14.117 [DEBUG] [Thread-114594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:56:14.117 [INFO] [Thread-114594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:14.118 [DEBUG] [Thread-114594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] client lang: <none>
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] server lang: <none>
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] kex follows: False
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] Compression: none
2025-12-03T09:56:14.119 [DEBUG] [Thread-114594] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:56:14.127 [DEBUG] [Thread-114594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:56:14.127 [DEBUG] [Thread-114594] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:56:14.128 [DEBUG] [Thread-114594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:56:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:56:14.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:56:14.129 [DEBUG] [Thread-114594] [transport.py] [_log()] userauth is OK
2025-12-03T09:56:14.129 [DEBUG] [Thread-114594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:56:14.129 [DEBUG] [Thread-114594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:56:14.129 [DEBUG] [Thread-114594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:56:14.129 [DEBUG] [Thread-114594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:56:14.161 [INFO] [Thread-114594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:56:14.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:56:14.743 [DEBUG] [Thread-114594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:56:14.744 [DEBUG] [Thread-114594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:56:14.744 [DEBUG] [Thread-114594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:56:14.785 [DEBUG] [Thread-114594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:56:14.785 [DEBUG] [Thread-114594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:56:14.788 [DEBUG] [Thread-114594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:56:14.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:56:14.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:56:14.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:56:14.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:56:14.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:56:14.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:56:14.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:56:14.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.330607 -999.00  +14.30  14.43     57   +6.10 1 2 1 1 1   888    0 10.52 89.80 ----- 11.3 14.4 151.0 26.9 20.6 -21.8 20.1 -20.9 19.7 -20.7 20.2 -22.6
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.330607
2025-12-03T09:56:14.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:56:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:56:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:56:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:56:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:56:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:55:55', tmtdew=9.92, humidity=51.36, cloud=0.0, wind=21.55, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:56:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:56:14.811 [DEBUG] [Thread-114594] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:56:14.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:56:14.907 [DEBUG] [Thread-114597] [transport.py] [_log()] starting thread (client mode): 0xa27eb190
2025-12-03T09:56:14.907 [DEBUG] [Thread-114597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:56:14.922 [DEBUG] [Thread-114597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:56:14.922 [INFO] [Thread-114597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:56:14.930 [DEBUG] [Thread-114597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:56:14.930 [DEBUG] [Thread-114597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:56:14.930 [DEBUG] [Thread-114597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:56:14.930 [DEBUG] [Thread-114597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] client lang: <none>
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] server lang: <none>
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] kex follows: False
2025-12-03T09:56:14.931 [DEBUG] [Thread-114597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] Compression: none
2025-12-03T09:56:14.932 [DEBUG] [Thread-114597] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:56:14.990 [DEBUG] [Thread-114597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:56:14.991 [DEBUG] [Thread-114597] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:56:14.991 [DEBUG] [Thread-114597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:56:14.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:56:14.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:56:15.046 [DEBUG] [Thread-114597] [transport.py] [_log()] userauth is OK
2025-12-03T09:56:15.047 [DEBUG] [Thread-114597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:56:15.047 [DEBUG] [Thread-114597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:56:15.047 [DEBUG] [Thread-114597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:56:15.047 [DEBUG] [Thread-114597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:56:15.067 [INFO] [Thread-114597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:56:15.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:56:15.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:56:15.910 [DEBUG] [Thread-114597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:56:15.910 [DEBUG] [Thread-114597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:56:15.958 [DEBUG] [Thread-114597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:56:15.959 [DEBUG] [Thread-114597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:56:15.967 [DEBUG] [Thread-114597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:56:15.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:56:15.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:56:15.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:56:15.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:56:15.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:56:15.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:56:16.001 [DEBUG] [Thread-114597] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:56:25.924 [DEBUG] [Thread-114599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:39.058 [DEBUG] [Thread-114600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:40.973 [DEBUG] [Thread-114601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:41.439 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:41.439 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:56:46.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:56:46.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:56:46.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:56:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 56, 27), 9.76, 51.92, 0.0, 23.45, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:56:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:56:27
2025-12-03T09:56:46.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:56:46.974 [DEBUG] [Thread-114602] [transport.py] [_log()] starting thread (client mode): 0xa51cfa60
2025-12-03T09:56:46.974 [DEBUG] [Thread-114602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:56:46.995 [DEBUG] [Thread-114602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:56:46.995 [INFO] [Thread-114602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:56:46.998 [DEBUG] [Thread-114602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:56:46.998 [DEBUG] [Thread-114602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:56:46.998 [DEBUG] [Thread-114602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:56:46.998 [DEBUG] [Thread-114602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:46.998 [DEBUG] [Thread-114602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] client lang: <none>
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] server lang: <none>
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] kex follows: False
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] Compression: none
2025-12-03T09:56:46.999 [DEBUG] [Thread-114602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:56:47.017 [DEBUG] [Thread-114602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:56:47.018 [DEBUG] [Thread-114602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:56:47.018 [DEBUG] [Thread-114602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:56:47.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:56:47.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:56:47.020 [DEBUG] [Thread-114602] [transport.py] [_log()] userauth is OK
2025-12-03T09:56:47.020 [DEBUG] [Thread-114602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:56:47.020 [DEBUG] [Thread-114602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:56:47.020 [DEBUG] [Thread-114602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:56:47.020 [DEBUG] [Thread-114602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:56:47.047 [INFO] [Thread-114602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:56:47.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:56:47.642 [DEBUG] [Thread-114602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:56:47.642 [DEBUG] [Thread-114602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:56:47.642 [DEBUG] [Thread-114602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:56:47.683 [DEBUG] [Thread-114602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:56:47.683 [DEBUG] [Thread-114602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:56:47.685 [DEBUG] [Thread-114602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:56:47.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:56:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:56:47.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:56:47.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:56:47.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:56:47.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:56:47.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:56:47.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:56:47.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:56:47.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.330607 -999.00  +14.30  14.43     57   +6.10 1 2 1 1 1   888    0 10.52 89.80 ----- 11.3 14.4 151.0 26.9 20.6 -21.8 20.1 -20.9 19.7 -20.7 20.2 -22.6
2025-12-03T09:56:47.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:56:47.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:56:47.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.330607
2025-12-03T09:56:47.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:56:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:56:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:56:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:56:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:56:47.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:56:27', tmtdew=9.76, humidity=51.92, cloud=0.0, wind=23.45, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:56:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:56:47.715 [DEBUG] [Thread-114602] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:56:47.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:56:47.811 [DEBUG] [Thread-114605] [transport.py] [_log()] starting thread (client mode): 0xa2787010
2025-12-03T09:56:47.811 [DEBUG] [Thread-114605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:56:47.829 [DEBUG] [Thread-114605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:56:47.829 [INFO] [Thread-114605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:56:47.836 [DEBUG] [Thread-114605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] client lang: <none>
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] server lang: <none>
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] kex follows: False
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:56:47.837 [DEBUG] [Thread-114605] [transport.py] [_log()] Compression: none
2025-12-03T09:56:47.838 [DEBUG] [Thread-114605] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:56:47.894 [DEBUG] [Thread-114605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:56:47.895 [DEBUG] [Thread-114605] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:56:47.895 [DEBUG] [Thread-114605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:56:47.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:56:47.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:56:47.950 [DEBUG] [Thread-114605] [transport.py] [_log()] userauth is OK
2025-12-03T09:56:47.950 [DEBUG] [Thread-114605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:56:47.950 [DEBUG] [Thread-114605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:56:47.950 [DEBUG] [Thread-114605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:56:47.950 [DEBUG] [Thread-114605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:56:47.971 [INFO] [Thread-114605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:56:47.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:56:47.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:56:48.830 [DEBUG] [Thread-114605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:56:48.830 [DEBUG] [Thread-114605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:56:48.879 [DEBUG] [Thread-114605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:56:48.879 [DEBUG] [Thread-114605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:56:48.888 [DEBUG] [Thread-114605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:56:48.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:56:48.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:56:48.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:56:48.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:56:48.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:56:48.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:56:48.922 [DEBUG] [Thread-114605] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:56:56.003 [DEBUG] [Thread-114607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:11.049 [DEBUG] [Thread-114608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:18.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:57:18.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:57:18.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:57:19.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 56, 59), 9.35, 53.12, 0.0, 20.01, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:57:19.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:56:59
2025-12-03T09:57:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:57:19.882 [DEBUG] [Thread-114609] [transport.py] [_log()] starting thread (client mode): 0xa271fdc0
2025-12-03T09:57:19.882 [DEBUG] [Thread-114609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:57:19.902 [DEBUG] [Thread-114609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:57:19.902 [INFO] [Thread-114609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] client lang: <none>
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] server lang: <none>
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] kex follows: False
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] Compression: none
2025-12-03T09:57:19.906 [DEBUG] [Thread-114609] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:57:19.922 [DEBUG] [Thread-114609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:57:19.922 [DEBUG] [Thread-114609] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:57:19.922 [DEBUG] [Thread-114609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:57:19.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:57:19.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:57:19.923 [DEBUG] [Thread-114609] [transport.py] [_log()] userauth is OK
2025-12-03T09:57:19.923 [DEBUG] [Thread-114609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:57:19.923 [DEBUG] [Thread-114609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:57:19.923 [DEBUG] [Thread-114609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:57:19.923 [DEBUG] [Thread-114609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:57:19.938 [INFO] [Thread-114609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:57:19.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:57:20.485 [DEBUG] [Thread-114609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:57:20.485 [DEBUG] [Thread-114609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:57:20.485 [DEBUG] [Thread-114609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:57:20.526 [DEBUG] [Thread-114609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:57:20.526 [DEBUG] [Thread-114609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:57:20.528 [DEBUG] [Thread-114609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:57:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:57:20.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:57:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:57:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:57:20.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:57:20.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:57:20.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.330954 -999.00  +14.40  14.62     58   +6.30 1 2 1 1 1   888    0 10.59 95.55 ----- 17.4 14.6 134.8 20.7 20.6 -20.9 20.1 -20.9 19.7 -19.8 20.3 -21.0
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.330954
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:57:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:57:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:57:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:57:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:56:59', tmtdew=9.35, humidity=53.12, cloud=0.0, wind=20.01, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:56:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:57:20.547 [DEBUG] [Thread-114609] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:57:20.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:57:20.637 [DEBUG] [Thread-114612] [transport.py] [_log()] starting thread (client mode): 0xa2787b50
2025-12-03T09:57:20.637 [DEBUG] [Thread-114612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:57:20.652 [DEBUG] [Thread-114612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:57:20.652 [INFO] [Thread-114612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:57:20.659 [DEBUG] [Thread-114612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:57:20.659 [DEBUG] [Thread-114612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:57:20.659 [DEBUG] [Thread-114612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] client lang: <none>
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] server lang: <none>
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] kex follows: False
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] Compression: none
2025-12-03T09:57:20.660 [DEBUG] [Thread-114612] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:57:20.726 [DEBUG] [Thread-114612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:57:20.726 [DEBUG] [Thread-114612] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:57:20.726 [DEBUG] [Thread-114612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:57:20.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:57:20.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:57:20.787 [DEBUG] [Thread-114612] [transport.py] [_log()] userauth is OK
2025-12-03T09:57:20.787 [DEBUG] [Thread-114612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:57:20.787 [DEBUG] [Thread-114612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:57:20.787 [DEBUG] [Thread-114612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:57:20.787 [DEBUG] [Thread-114612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:57:20.804 [INFO] [Thread-114612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:57:20.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:57:20.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:57:21.648 [DEBUG] [Thread-114612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:57:21.648 [DEBUG] [Thread-114612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:57:21.700 [DEBUG] [Thread-114612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:57:21.700 [DEBUG] [Thread-114612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:57:21.712 [DEBUG] [Thread-114612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:57:21.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:57:21.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:57:21.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:57:21.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:57:21.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:57:21.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:57:21.760 [DEBUG] [Thread-114612] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:57:26.080 [DEBUG] [Thread-114614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:39.102 [DEBUG] [Thread-114615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:41.126 [DEBUG] [Thread-114616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:41.579 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:41.580 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:57:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:57:51.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:57:51.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:57:52.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 57, 31), 9.42, 52.9, 0.0, 21.0, 14.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:57:52.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:57:31
2025-12-03T09:57:52.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:57:52.700 [DEBUG] [Thread-114617] [transport.py] [_log()] starting thread (client mode): 0xa27ebb50
2025-12-03T09:57:52.700 [DEBUG] [Thread-114617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:57:52.721 [DEBUG] [Thread-114617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:57:52.721 [INFO] [Thread-114617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] client lang: <none>
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] server lang: <none>
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] kex follows: False
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] Compression: none
2025-12-03T09:57:52.725 [DEBUG] [Thread-114617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:57:52.742 [DEBUG] [Thread-114617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:57:52.743 [DEBUG] [Thread-114617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:57:52.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:57:52.744 [DEBUG] [Thread-114617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:57:52.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:57:52.745 [DEBUG] [Thread-114617] [transport.py] [_log()] userauth is OK
2025-12-03T09:57:52.745 [DEBUG] [Thread-114617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:57:52.746 [DEBUG] [Thread-114617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:57:52.746 [DEBUG] [Thread-114617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:57:52.746 [DEBUG] [Thread-114617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:57:52.769 [INFO] [Thread-114617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:57:52.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:57:53.360 [DEBUG] [Thread-114617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:57:53.360 [DEBUG] [Thread-114617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:57:53.360 [DEBUG] [Thread-114617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:57:53.401 [DEBUG] [Thread-114617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:57:53.401 [DEBUG] [Thread-114617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:57:53.403 [DEBUG] [Thread-114617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:57:53.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:57:53.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:57:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:57:53.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:57:53.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:57:53.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:57:53.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:57:53.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:57:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:57:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.331301 -999.00  +14.40  13.20     58   +6.30 1 2 1 1 1   888    0 10.37 93.84 ----- 10.5 13.2 140.6 20.3 20.6 -21.0 20.1 -20.6 19.8 -20.0 20.2 -21.2
2025-12-03T09:57:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:57:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:57:53.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.331301
2025-12-03T09:57:53.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:57:53.425 [DEBUG] [Thread-114617] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:57:53.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:57:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:57:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:57:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:57:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:57:31', tmtdew=9.42, humidity=52.9, cloud=0.0, wind=21.0, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:57:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:57:53.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:57:53.522 [DEBUG] [Thread-114620] [transport.py] [_log()] starting thread (client mode): 0xa27b1a50
2025-12-03T09:57:53.522 [DEBUG] [Thread-114620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:57:53.538 [DEBUG] [Thread-114620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:57:53.538 [INFO] [Thread-114620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:57:53.546 [DEBUG] [Thread-114620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] client lang: <none>
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] server lang: <none>
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] kex follows: False
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] Compression: none
2025-12-03T09:57:53.547 [DEBUG] [Thread-114620] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:57:53.604 [DEBUG] [Thread-114620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:57:53.605 [DEBUG] [Thread-114620] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:57:53.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:57:53.605 [DEBUG] [Thread-114620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:57:53.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:57:53.662 [DEBUG] [Thread-114620] [transport.py] [_log()] userauth is OK
2025-12-03T09:57:53.662 [DEBUG] [Thread-114620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:57:53.662 [DEBUG] [Thread-114620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:57:53.662 [DEBUG] [Thread-114620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:57:53.662 [DEBUG] [Thread-114620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:57:53.680 [INFO] [Thread-114620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:57:53.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:57:53.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:57:54.562 [DEBUG] [Thread-114620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:57:54.562 [DEBUG] [Thread-114620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:57:54.609 [DEBUG] [Thread-114620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:57:54.609 [DEBUG] [Thread-114620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:57:54.617 [DEBUG] [Thread-114620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:57:54.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:57:54.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:57:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:57:54.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:57:54.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:57:54.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:57:54.651 [DEBUG] [Thread-114620] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:57:56.156 [DEBUG] [Thread-114622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:11.190 [DEBUG] [Thread-114623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:24.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:58:24.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:58:24.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:58:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 58, 3), 9.46, 52.77, 0.0, 19.89, 14.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:58:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:58:03
2025-12-03T09:58:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:58:25.597 [DEBUG] [Thread-114624] [transport.py] [_log()] starting thread (client mode): 0xa27b0640
2025-12-03T09:58:25.598 [DEBUG] [Thread-114624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:58:25.619 [DEBUG] [Thread-114624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:58:25.619 [INFO] [Thread-114624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] client lang: <none>
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] server lang: <none>
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] kex follows: False
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] Compression: none
2025-12-03T09:58:25.622 [DEBUG] [Thread-114624] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:58:25.639 [DEBUG] [Thread-114624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:58:25.640 [DEBUG] [Thread-114624] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:58:25.640 [DEBUG] [Thread-114624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:58:25.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:58:25.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:58:25.642 [DEBUG] [Thread-114624] [transport.py] [_log()] userauth is OK
2025-12-03T09:58:25.643 [DEBUG] [Thread-114624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:58:25.643 [DEBUG] [Thread-114624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:58:25.643 [DEBUG] [Thread-114624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:58:25.643 [DEBUG] [Thread-114624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:58:25.667 [INFO] [Thread-114624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:58:25.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:58:26.224 [DEBUG] [Thread-114626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:26.305 [DEBUG] [Thread-114624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:58:26.305 [DEBUG] [Thread-114624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:58:26.306 [DEBUG] [Thread-114624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:58:26.347 [DEBUG] [Thread-114624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:58:26.347 [DEBUG] [Thread-114624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:58:26.350 [DEBUG] [Thread-114624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:58:26.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:58:26.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:58:26.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:58:26.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:58:26.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:58:26.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:58:26.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:58:26.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.331649 -999.00  +14.60  16.11     57   +6.40 1 2 1 1 1   888    0 10.60 91.00 ----- 15.0 16.1 160.0 24.9 20.5 -21.7 20.1 -20.0 19.7 -20.5 20.2 -20.8
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.331649
2025-12-03T09:58:26.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:58:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:58:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:58:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:58:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:58:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:58:03', tmtdew=9.46, humidity=52.77, cloud=0.0, wind=19.89, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:57:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:58:26.377 [DEBUG] [Thread-114624] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:58:26.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:58:26.475 [DEBUG] [Thread-114628] [transport.py] [_log()] starting thread (client mode): 0xa270a170
2025-12-03T09:58:26.475 [DEBUG] [Thread-114628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:58:26.491 [DEBUG] [Thread-114628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:58:26.491 [INFO] [Thread-114628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] client lang: <none>
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] server lang: <none>
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] kex follows: False
2025-12-03T09:58:26.500 [DEBUG] [Thread-114628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] Compression: none
2025-12-03T09:58:26.501 [DEBUG] [Thread-114628] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:58:26.562 [DEBUG] [Thread-114628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:58:26.563 [DEBUG] [Thread-114628] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:58:26.563 [DEBUG] [Thread-114628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:58:26.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:58:26.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:58:26.619 [DEBUG] [Thread-114628] [transport.py] [_log()] userauth is OK
2025-12-03T09:58:26.619 [DEBUG] [Thread-114628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:58:26.619 [DEBUG] [Thread-114628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:58:26.619 [DEBUG] [Thread-114628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:58:26.619 [DEBUG] [Thread-114628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:58:26.640 [INFO] [Thread-114628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:58:26.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:58:26.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:58:27.476 [DEBUG] [Thread-114628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:58:27.477 [DEBUG] [Thread-114628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:58:27.529 [DEBUG] [Thread-114628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:58:27.529 [DEBUG] [Thread-114628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:58:27.538 [DEBUG] [Thread-114628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:58:27.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:58:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:58:27.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:58:27.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:58:27.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:58:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:58:27.573 [DEBUG] [Thread-114628] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:58:39.145 [DEBUG] [Thread-114630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:41.251 [DEBUG] [Thread-114631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:41.719 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:41.720 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:56.297 [DEBUG] [Thread-114632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:58:57.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:58:57.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:58:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:58:58.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 58, 35), 9.5, 52.62, 0.0, 20.43, 14.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:58:58.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:58:35
2025-12-03T09:58:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:58:58.531 [DEBUG] [Thread-114633] [transport.py] [_log()] starting thread (client mode): 0xa27efbb0
2025-12-03T09:58:58.531 [DEBUG] [Thread-114633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:58:58.551 [DEBUG] [Thread-114633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:58:58.552 [INFO] [Thread-114633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] client lang: <none>
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] server lang: <none>
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] kex follows: False
2025-12-03T09:58:58.555 [DEBUG] [Thread-114633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] Compression: none
2025-12-03T09:58:58.556 [DEBUG] [Thread-114633] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:58:58.572 [DEBUG] [Thread-114633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:58:58.573 [DEBUG] [Thread-114633] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:58:58.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:58:58.574 [DEBUG] [Thread-114633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:58:58.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:58:58.576 [DEBUG] [Thread-114633] [transport.py] [_log()] userauth is OK
2025-12-03T09:58:58.576 [DEBUG] [Thread-114633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:58:58.576 [DEBUG] [Thread-114633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:58:58.576 [DEBUG] [Thread-114633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:58:58.576 [DEBUG] [Thread-114633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:58:58.599 [INFO] [Thread-114633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:58:58.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:58:59.244 [DEBUG] [Thread-114633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:58:59.244 [DEBUG] [Thread-114633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:58:59.245 [DEBUG] [Thread-114633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:58:59.285 [DEBUG] [Thread-114633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:58:59.285 [DEBUG] [Thread-114633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:58:59.288 [DEBUG] [Thread-114633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:58:59.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:58:59.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:58:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:58:59.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:58:59.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:58:59.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:58:59.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.331996 -999.00  +14.50  15.22     57   +6.20 1 2 1 1 1   888    0 10.66 93.03 ----- 19.4 15.2 153.6 20.8 20.4 -21.6 20.1 -21.1 19.6 -20.8 20.2 -21.2
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:58:59.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.331996
2025-12-03T09:58:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:58:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:58:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:58:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:58:59.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:58:59.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:58:35', tmtdew=9.5, humidity=52.62, cloud=0.0, wind=20.43, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:58:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:58:59.314 [DEBUG] [Thread-114633] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:58:59.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:58:59.408 [DEBUG] [Thread-114636] [transport.py] [_log()] starting thread (client mode): 0xa27b4880
2025-12-03T09:58:59.409 [DEBUG] [Thread-114636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:58:59.424 [DEBUG] [Thread-114636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:58:59.424 [INFO] [Thread-114636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:58:59.431 [DEBUG] [Thread-114636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:58:59.431 [DEBUG] [Thread-114636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] client lang: <none>
2025-12-03T09:58:59.432 [DEBUG] [Thread-114636] [transport.py] [_log()] server lang: <none>
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] kex follows: False
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] Compression: none
2025-12-03T09:58:59.433 [DEBUG] [Thread-114636] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:58:59.490 [DEBUG] [Thread-114636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:58:59.491 [DEBUG] [Thread-114636] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:58:59.491 [DEBUG] [Thread-114636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:58:59.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:58:59.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:58:59.546 [DEBUG] [Thread-114636] [transport.py] [_log()] userauth is OK
2025-12-03T09:58:59.546 [DEBUG] [Thread-114636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:58:59.546 [DEBUG] [Thread-114636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:58:59.546 [DEBUG] [Thread-114636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:58:59.546 [DEBUG] [Thread-114636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:58:59.565 [INFO] [Thread-114636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:58:59.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:58:59.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:59:00.396 [DEBUG] [Thread-114636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:59:00.396 [DEBUG] [Thread-114636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:59:00.444 [DEBUG] [Thread-114636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:59:00.444 [DEBUG] [Thread-114636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:59:00.453 [DEBUG] [Thread-114636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:59:00.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:59:00.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:59:00.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:59:00.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:59:00.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:59:00.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:59:00.488 [DEBUG] [Thread-114636] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:59:11.326 [DEBUG] [Thread-114638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:26.362 [DEBUG] [Thread-114639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T09:59:30.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T09:59:30.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T09:59:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 59, 7), 9.48, 52.69, 0.0, 17.03, 14.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T09:59:31.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:59:07
2025-12-03T09:59:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T09:59:31.443 [DEBUG] [Thread-114640] [transport.py] [_log()] starting thread (client mode): 0xa271f2b0
2025-12-03T09:59:31.443 [DEBUG] [Thread-114640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:59:31.464 [DEBUG] [Thread-114640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T09:59:31.464 [INFO] [Thread-114640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T09:59:31.467 [DEBUG] [Thread-114640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:59:31.467 [DEBUG] [Thread-114640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T09:59:31.467 [DEBUG] [Thread-114640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:59:31.467 [DEBUG] [Thread-114640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:59:31.467 [DEBUG] [Thread-114640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] client lang: <none>
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] server lang: <none>
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] kex follows: False
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] Compression: none
2025-12-03T09:59:31.468 [DEBUG] [Thread-114640] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:59:31.486 [DEBUG] [Thread-114640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:59:31.487 [DEBUG] [Thread-114640] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:59:31.487 [DEBUG] [Thread-114640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T09:59:31.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T09:59:31.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:59:31.489 [DEBUG] [Thread-114640] [transport.py] [_log()] userauth is OK
2025-12-03T09:59:31.489 [DEBUG] [Thread-114640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:59:31.489 [DEBUG] [Thread-114640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:59:31.489 [DEBUG] [Thread-114640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T09:59:31.489 [DEBUG] [Thread-114640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:59:31.514 [INFO] [Thread-114640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:59:31.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:59:32.131 [DEBUG] [Thread-114640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:59:32.132 [DEBUG] [Thread-114640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:59:32.132 [DEBUG] [Thread-114640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T09:59:32.173 [DEBUG] [Thread-114640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:59:32.173 [DEBUG] [Thread-114640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:59:32.175 [DEBUG] [Thread-114640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:59:32.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:59:32.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T09:59:32.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T09:59:32.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T09:59:32.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:59:32.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T09:59:32.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:59:32.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.332343 -999.00  +14.30   8.70     57   +6.10 1 2 1 1 1   888    0 10.33 84.53 ----- 12.2 8.7 173.4 23.0 20.4 -21.6 19.9 -20.7 19.6 -20.3 20.1 -22.3
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.332343
2025-12-03T09:59:32.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T09:59:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T09:59:32.197 [DEBUG] [Thread-114640] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:59:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T09:59:32.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T09:59:32.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T09:59:32.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:59:07', tmtdew=9.48, humidity=52.69, cloud=0.0, wind=17.03, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:58:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T09:59:32.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T09:59:32.292 [DEBUG] [Thread-114643] [transport.py] [_log()] starting thread (client mode): 0xa271d540
2025-12-03T09:59:32.292 [DEBUG] [Thread-114643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T09:59:32.307 [DEBUG] [Thread-114643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T09:59:32.307 [INFO] [Thread-114643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T09:59:32.314 [DEBUG] [Thread-114643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T09:59:32.314 [DEBUG] [Thread-114643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T09:59:32.314 [DEBUG] [Thread-114643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] client lang: <none>
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] server lang: <none>
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] kex follows: False
2025-12-03T09:59:32.315 [DEBUG] [Thread-114643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] Compression: none
2025-12-03T09:59:32.316 [DEBUG] [Thread-114643] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T09:59:32.375 [DEBUG] [Thread-114643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T09:59:32.376 [DEBUG] [Thread-114643] [transport.py] [_log()] Switch to new keys ...
2025-12-03T09:59:32.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T09:59:32.377 [DEBUG] [Thread-114643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T09:59:32.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T09:59:32.434 [DEBUG] [Thread-114643] [transport.py] [_log()] userauth is OK
2025-12-03T09:59:32.434 [DEBUG] [Thread-114643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T09:59:32.434 [DEBUG] [Thread-114643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T09:59:32.434 [DEBUG] [Thread-114643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T09:59:32.434 [DEBUG] [Thread-114643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T09:59:32.454 [INFO] [Thread-114643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T09:59:32.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T09:59:32.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T09:59:33.311 [DEBUG] [Thread-114643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T09:59:33.312 [DEBUG] [Thread-114643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T09:59:33.360 [DEBUG] [Thread-114643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T09:59:33.360 [DEBUG] [Thread-114643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T09:59:33.369 [DEBUG] [Thread-114643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T09:59:33.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T09:59:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T09:59:33.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T09:59:33.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T09:59:33.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T09:59:33.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T09:59:33.404 [DEBUG] [Thread-114643] [transport.py] [_log()] EOF in transport thread
2025-12-03T09:59:39.185 [DEBUG] [Thread-114645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:41.386 [DEBUG] [Thread-114646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:41.859 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:41.860 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T09:59:56.433 [DEBUG] [Thread-114647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:03.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:00:03.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:00:03.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:00:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 9, 59, 39), 9.52, 52.72, 0.0, 20.03, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:00:04.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 09:59:39
2025-12-03T10:00:04.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:00:04.391 [DEBUG] [Thread-114648] [transport.py] [_log()] starting thread (client mode): 0xa27b3910
2025-12-03T10:00:04.391 [DEBUG] [Thread-114648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:00:04.411 [DEBUG] [Thread-114648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:00:04.411 [INFO] [Thread-114648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:00:04.414 [DEBUG] [Thread-114648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:00:04.414 [DEBUG] [Thread-114648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:00:04.414 [DEBUG] [Thread-114648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] client lang: <none>
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] server lang: <none>
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] kex follows: False
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] Compression: none
2025-12-03T10:00:04.415 [DEBUG] [Thread-114648] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:00:04.434 [DEBUG] [Thread-114648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:00:04.435 [DEBUG] [Thread-114648] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:00:04.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:00:04.436 [DEBUG] [Thread-114648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:00:04.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:00:04.438 [DEBUG] [Thread-114648] [transport.py] [_log()] userauth is OK
2025-12-03T10:00:04.438 [DEBUG] [Thread-114648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:00:04.438 [DEBUG] [Thread-114648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:00:04.438 [DEBUG] [Thread-114648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:00:04.438 [DEBUG] [Thread-114648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:00:04.462 [INFO] [Thread-114648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:00:04.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:00:05.285 [DEBUG] [Thread-114648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:00:05.285 [DEBUG] [Thread-114648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:00:05.285 [DEBUG] [Thread-114648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:00:05.326 [DEBUG] [Thread-114648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:00:05.326 [DEBUG] [Thread-114648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:00:05.328 [DEBUG] [Thread-114648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:00:05.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:00:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:00:05.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:00:05.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:00:05.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:00:05.369 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:00:05.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:00:05.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:00:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:00:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.332690 -999.00  +14.50  18.84     58   +6.40 1 2 1 1 1   888    0 10.29 84.06 ----- 17.0 18.8 122.4 25.3 20.3 -21.7 19.9 -20.8 19.6 -20.7 20.1 -20.8
2025-12-03T10:00:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:00:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:00:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.332690
2025-12-03T10:00:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:00:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:00:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:00:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:00:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:00:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T09:59:39', tmtdew=9.52, humidity=52.72, cloud=0.0, wind=20.03, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T07:59:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:00:05.372 [DEBUG] [Thread-114648] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:00:05.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:00:05.466 [DEBUG] [Thread-114651] [transport.py] [_log()] starting thread (client mode): 0xa271dc90
2025-12-03T10:00:05.466 [DEBUG] [Thread-114651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:00:05.483 [DEBUG] [Thread-114651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:00:05.483 [INFO] [Thread-114651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:00:05.490 [DEBUG] [Thread-114651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:00:05.490 [DEBUG] [Thread-114651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] client lang: <none>
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] server lang: <none>
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] kex follows: False
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] Compression: none
2025-12-03T10:00:05.491 [DEBUG] [Thread-114651] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:00:05.550 [DEBUG] [Thread-114651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:00:05.550 [DEBUG] [Thread-114651] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:00:05.550 [DEBUG] [Thread-114651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:00:05.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:00:05.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:00:05.613 [DEBUG] [Thread-114651] [transport.py] [_log()] userauth is OK
2025-12-03T10:00:05.613 [DEBUG] [Thread-114651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:00:05.613 [DEBUG] [Thread-114651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:00:05.613 [DEBUG] [Thread-114651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:00:05.614 [DEBUG] [Thread-114651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:00:05.633 [INFO] [Thread-114651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:00:05.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:00:05.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:00:06.488 [DEBUG] [Thread-114651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:00:06.488 [DEBUG] [Thread-114651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:00:06.536 [DEBUG] [Thread-114651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:00:06.536 [DEBUG] [Thread-114651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:00:06.544 [DEBUG] [Thread-114651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:00:06.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:00:06.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:00:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:00:06.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:00:06.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:00:06.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:00:06.579 [DEBUG] [Thread-114651] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:00:11.463 [DEBUG] [Thread-114653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:26.518 [DEBUG] [Thread-114654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:36.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:00:36.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:00:36.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:00:37.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 0, 11), 9.4, 53.12, 0.0, 23.1, 14.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:00:37.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:00:11
2025-12-03T10:00:37.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:00:37.548 [DEBUG] [Thread-114655] [transport.py] [_log()] starting thread (client mode): 0xa27b15d0
2025-12-03T10:00:37.548 [DEBUG] [Thread-114655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:00:37.569 [DEBUG] [Thread-114655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:00:37.569 [INFO] [Thread-114655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] client lang: <none>
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] server lang: <none>
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] kex follows: False
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] Compression: none
2025-12-03T10:00:37.572 [DEBUG] [Thread-114655] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:00:37.591 [DEBUG] [Thread-114655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:00:37.591 [DEBUG] [Thread-114655] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:00:37.592 [DEBUG] [Thread-114655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:00:37.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:00:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:00:37.594 [DEBUG] [Thread-114655] [transport.py] [_log()] userauth is OK
2025-12-03T10:00:37.594 [DEBUG] [Thread-114655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:00:37.594 [DEBUG] [Thread-114655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:00:37.594 [DEBUG] [Thread-114655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:00:37.594 [DEBUG] [Thread-114655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:00:37.630 [INFO] [Thread-114655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:00:37.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:00:38.294 [DEBUG] [Thread-114655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:00:38.294 [DEBUG] [Thread-114655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:00:38.294 [DEBUG] [Thread-114655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:00:38.335 [DEBUG] [Thread-114655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:00:38.335 [DEBUG] [Thread-114655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:00:38.338 [DEBUG] [Thread-114655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:00:38.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:00:38.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:00:38.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:00:38.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:00:38.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:00:38.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:00:38.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:00:38.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.333384 -999.00  +14.90  18.03     58   +6.70 1 2 1 1 1   888    0 9.72 66.05 ----- 18.9 18.0 126.4 21.5 20.4 -20.1 20.1 -19.2 19.8 -18.8 20.2 -19.6
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.333384
2025-12-03T10:00:38.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:00:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:00:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:00:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:00:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:00:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:00:11', tmtdew=9.4, humidity=53.12, cloud=0.0, wind=23.1, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:00:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:00:38.366 [DEBUG] [Thread-114655] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:00:38.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:00:38.462 [DEBUG] [Thread-114658] [transport.py] [_log()] starting thread (client mode): 0xa27b0940
2025-12-03T10:00:38.462 [DEBUG] [Thread-114658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:00:38.477 [DEBUG] [Thread-114658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:00:38.478 [INFO] [Thread-114658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:00:38.485 [DEBUG] [Thread-114658] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:00:38.485 [DEBUG] [Thread-114658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:00:38.486 [DEBUG] [Thread-114658] [transport.py] [_log()] client lang: <none>
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] server lang: <none>
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] kex follows: False
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] Compression: none
2025-12-03T10:00:38.487 [DEBUG] [Thread-114658] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:00:38.541 [DEBUG] [Thread-114658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:00:38.542 [DEBUG] [Thread-114658] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:00:38.542 [DEBUG] [Thread-114658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:00:38.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:00:38.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:00:38.598 [DEBUG] [Thread-114658] [transport.py] [_log()] userauth is OK
2025-12-03T10:00:38.598 [DEBUG] [Thread-114658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:00:38.598 [DEBUG] [Thread-114658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:00:38.598 [DEBUG] [Thread-114658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:00:38.598 [DEBUG] [Thread-114658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:00:38.620 [INFO] [Thread-114658] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:00:38.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:00:38.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:00:39.234 [DEBUG] [Thread-114660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:39.485 [DEBUG] [Thread-114658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:00:39.485 [DEBUG] [Thread-114658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:00:39.533 [DEBUG] [Thread-114658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:00:39.533 [DEBUG] [Thread-114658] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:00:39.542 [DEBUG] [Thread-114658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:00:39.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:00:39.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:00:39.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:00:39.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:00:39.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:00:39.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:00:39.578 [DEBUG] [Thread-114658] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:00:41.546 [DEBUG] [Thread-114661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:41.998 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:41.999 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:00:56.594 [DEBUG] [Thread-114662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:09.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:01:09.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:01:09.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:01:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 0, 43), 9.26, 53.63, 0.0, 24.19, 14.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:01:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:00:43
2025-12-03T10:01:10.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:01:10.582 [DEBUG] [Thread-114663] [transport.py] [_log()] starting thread (client mode): 0xa27b3e50
2025-12-03T10:01:10.582 [DEBUG] [Thread-114663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:01:10.602 [DEBUG] [Thread-114663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:01:10.602 [INFO] [Thread-114663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] client lang: <none>
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] server lang: <none>
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] kex follows: False
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:01:10.605 [DEBUG] [Thread-114663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:01:10.606 [DEBUG] [Thread-114663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:01:10.606 [DEBUG] [Thread-114663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:01:10.606 [DEBUG] [Thread-114663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:01:10.606 [DEBUG] [Thread-114663] [transport.py] [_log()] Compression: none
2025-12-03T10:01:10.606 [DEBUG] [Thread-114663] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:01:10.621 [DEBUG] [Thread-114663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:01:10.621 [DEBUG] [Thread-114663] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:01:10.622 [DEBUG] [Thread-114663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:01:10.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:01:10.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:01:10.622 [DEBUG] [Thread-114663] [transport.py] [_log()] userauth is OK
2025-12-03T10:01:10.623 [DEBUG] [Thread-114663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:01:10.623 [DEBUG] [Thread-114663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:01:10.623 [DEBUG] [Thread-114663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:01:10.623 [DEBUG] [Thread-114663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:01:10.651 [INFO] [Thread-114663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:01:10.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:01:11.273 [DEBUG] [Thread-114663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:01:11.273 [DEBUG] [Thread-114663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:01:11.273 [DEBUG] [Thread-114663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:01:11.314 [DEBUG] [Thread-114663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:01:11.314 [DEBUG] [Thread-114663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:01:11.316 [DEBUG] [Thread-114663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:01:11.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:01:11.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:01:11.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:01:11.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:01:11.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:01:11.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:01:11.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.333732 -999.00  +15.00  17.08     56   +6.40 1 2 1 1 1   888    0 9.79 62.46 ----- 14.8 17.1 156.4 21.2 20.4 -21.5 20.1 -20.0 19.7 -20.8 20.2 -21.0
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.333732
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:01:11.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:00:43', tmtdew=9.26, humidity=53.63, cloud=0.0, wind=24.19, temperature=14.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:00:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:01:11.336 [DEBUG] [Thread-114663] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:01:11.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:01:11.421 [DEBUG] [Thread-114666] [transport.py] [_log()] starting thread (client mode): 0xa271e6b0
2025-12-03T10:01:11.421 [DEBUG] [Thread-114666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:01:11.437 [DEBUG] [Thread-114666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:01:11.438 [INFO] [Thread-114666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] client lang: <none>
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] server lang: <none>
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] kex follows: False
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] Compression: none
2025-12-03T10:01:11.445 [DEBUG] [Thread-114666] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:01:11.501 [DEBUG] [Thread-114666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:01:11.501 [DEBUG] [Thread-114666] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:01:11.502 [DEBUG] [Thread-114666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:01:11.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:01:11.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:01:11.558 [DEBUG] [Thread-114666] [transport.py] [_log()] userauth is OK
2025-12-03T10:01:11.558 [DEBUG] [Thread-114666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:01:11.558 [DEBUG] [Thread-114666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:01:11.558 [DEBUG] [Thread-114666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:01:11.558 [DEBUG] [Thread-114666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:01:11.573 [INFO] [Thread-114666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:01:11.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:01:11.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:01:11.620 [DEBUG] [Thread-114668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:12.468 [DEBUG] [Thread-114666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:01:12.468 [DEBUG] [Thread-114666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:01:12.516 [DEBUG] [Thread-114666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:01:12.517 [DEBUG] [Thread-114666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:01:12.525 [DEBUG] [Thread-114666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:01:12.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:01:12.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:01:12.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:01:12.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:01:12.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:01:12.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:01:12.559 [DEBUG] [Thread-114666] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:01:26.658 [DEBUG] [Thread-114669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:39.276 [DEBUG] [Thread-114670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:41.689 [DEBUG] [Thread-114671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:42.138 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:42.139 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:01:42.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:01:42.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:01:42.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:01:43.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 1, 15), 9.24, 53.71, 0.0, 23.1, 14.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:01:43.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:01:15
2025-12-03T10:01:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:01:43.522 [DEBUG] [Thread-114672] [transport.py] [_log()] starting thread (client mode): 0xa27b4820
2025-12-03T10:01:43.522 [DEBUG] [Thread-114672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:01:43.541 [DEBUG] [Thread-114672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:01:43.541 [INFO] [Thread-114672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:01:43.542 [DEBUG] [Thread-114672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:01:43.542 [DEBUG] [Thread-114672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] client lang: <none>
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] server lang: <none>
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] kex follows: False
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] Compression: none
2025-12-03T10:01:43.543 [DEBUG] [Thread-114672] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:01:43.552 [DEBUG] [Thread-114672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:01:43.552 [DEBUG] [Thread-114672] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:01:43.553 [DEBUG] [Thread-114672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:01:43.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:01:43.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:01:43.554 [DEBUG] [Thread-114672] [transport.py] [_log()] userauth is OK
2025-12-03T10:01:43.554 [DEBUG] [Thread-114672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:01:43.554 [DEBUG] [Thread-114672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:01:43.555 [DEBUG] [Thread-114672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:01:43.555 [DEBUG] [Thread-114672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:01:43.569 [INFO] [Thread-114672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:01:43.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:01:44.195 [DEBUG] [Thread-114672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:01:44.195 [DEBUG] [Thread-114672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:01:44.195 [DEBUG] [Thread-114672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:01:44.237 [DEBUG] [Thread-114672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:01:44.237 [DEBUG] [Thread-114672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:01:44.240 [DEBUG] [Thread-114672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:01:44.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:01:44.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:01:44.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:01:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:01:44.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:01:44.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:01:44.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.334079 -999.00  +14.80  15.35     57   +6.50 1 2 1 1 1   888    0 9.83 64.40 ----- 16.7 15.3 147.2 26.8 20.4 -21.4 20.0 -20.5 19.6 -20.9 20.2 -22.1
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:01:44.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.334079
2025-12-03T10:01:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:01:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:01:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:01:44.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:01:44.263 [DEBUG] [Thread-114672] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:01:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:01:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:01:15', tmtdew=9.24, humidity=53.71, cloud=0.0, wind=23.1, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:01:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:01:44.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:01:44.368 [DEBUG] [Thread-114675] [transport.py] [_log()] starting thread (client mode): 0xa27e9a50
2025-12-03T10:01:44.368 [DEBUG] [Thread-114675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:01:44.383 [DEBUG] [Thread-114675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:01:44.383 [INFO] [Thread-114675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] client lang: <none>
2025-12-03T10:01:44.390 [DEBUG] [Thread-114675] [transport.py] [_log()] server lang: <none>
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] kex follows: False
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] Compression: none
2025-12-03T10:01:44.391 [DEBUG] [Thread-114675] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:01:44.452 [DEBUG] [Thread-114675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:01:44.452 [DEBUG] [Thread-114675] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:01:44.453 [DEBUG] [Thread-114675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:01:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:01:44.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:01:44.511 [DEBUG] [Thread-114675] [transport.py] [_log()] userauth is OK
2025-12-03T10:01:44.511 [DEBUG] [Thread-114675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:01:44.511 [DEBUG] [Thread-114675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:01:44.511 [DEBUG] [Thread-114675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:01:44.511 [DEBUG] [Thread-114675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:01:44.529 [INFO] [Thread-114675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:01:44.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:01:44.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:01:45.365 [DEBUG] [Thread-114675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:01:45.365 [DEBUG] [Thread-114675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:01:45.413 [DEBUG] [Thread-114675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:01:45.413 [DEBUG] [Thread-114675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:01:45.421 [DEBUG] [Thread-114675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:01:45.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:01:45.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:01:45.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:01:45.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:01:45.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:01:45.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:01:45.453 [DEBUG] [Thread-114675] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:01:56.717 [DEBUG] [Thread-114677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:11.762 [DEBUG] [Thread-114678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:15.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:02:15.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:02:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:02:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 1, 47), 8.96, 54.96, 0.0, 26.43, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:02:16.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:01:47
2025-12-03T10:02:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:02:16.422 [DEBUG] [Thread-114679] [transport.py] [_log()] starting thread (client mode): 0xa27ec280
2025-12-03T10:02:16.423 [DEBUG] [Thread-114679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:02:16.443 [DEBUG] [Thread-114679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:02:16.443 [INFO] [Thread-114679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] client lang: <none>
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] server lang: <none>
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] kex follows: False
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:02:16.446 [DEBUG] [Thread-114679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:02:16.447 [DEBUG] [Thread-114679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:02:16.447 [DEBUG] [Thread-114679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:02:16.447 [DEBUG] [Thread-114679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:02:16.447 [DEBUG] [Thread-114679] [transport.py] [_log()] Compression: none
2025-12-03T10:02:16.447 [DEBUG] [Thread-114679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:02:16.464 [DEBUG] [Thread-114679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:02:16.465 [DEBUG] [Thread-114679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:02:16.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:02:16.466 [DEBUG] [Thread-114679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:02:16.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:02:16.468 [DEBUG] [Thread-114679] [transport.py] [_log()] userauth is OK
2025-12-03T10:02:16.469 [DEBUG] [Thread-114679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:02:16.469 [DEBUG] [Thread-114679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:02:16.469 [DEBUG] [Thread-114679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:02:16.469 [DEBUG] [Thread-114679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:02:16.503 [INFO] [Thread-114679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:02:16.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:02:17.141 [DEBUG] [Thread-114679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:02:17.141 [DEBUG] [Thread-114679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:02:17.141 [DEBUG] [Thread-114679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:02:17.182 [DEBUG] [Thread-114679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:02:17.182 [DEBUG] [Thread-114679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:02:17.185 [DEBUG] [Thread-114679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:02:17.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:02:17.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:02:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:02:17.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:02:17.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:02:17.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:02:17.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:02:17.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:02:17.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:02:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.334426 -999.00  +14.90  25.55     57   +6.70 1 2 1 1 1   888    0 9.93 62.68 ----- 25.2 25.6 134.6 31.5 20.5 -20.1 20.0 -19.7 19.7 -19.9 20.1 -20.3
2025-12-03T10:02:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:02:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:02:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.334426
2025-12-03T10:02:17.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:01:47', tmtdew=8.96, humidity=54.96, cloud=0.0, wind=26.43, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:01:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:02:17.211 [DEBUG] [Thread-114679] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:02:17.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:02:17.309 [DEBUG] [Thread-114682] [transport.py] [_log()] starting thread (client mode): 0xa271e6b0
2025-12-03T10:02:17.309 [DEBUG] [Thread-114682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:02:17.324 [DEBUG] [Thread-114682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:02:17.324 [INFO] [Thread-114682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] client lang: <none>
2025-12-03T10:02:17.332 [DEBUG] [Thread-114682] [transport.py] [_log()] server lang: <none>
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] kex follows: False
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] Compression: none
2025-12-03T10:02:17.333 [DEBUG] [Thread-114682] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:02:17.389 [DEBUG] [Thread-114682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:02:17.389 [DEBUG] [Thread-114682] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:02:17.390 [DEBUG] [Thread-114682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:02:17.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:02:17.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:02:17.446 [DEBUG] [Thread-114682] [transport.py] [_log()] userauth is OK
2025-12-03T10:02:17.446 [DEBUG] [Thread-114682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:02:17.446 [DEBUG] [Thread-114682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:02:17.446 [DEBUG] [Thread-114682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:02:17.446 [DEBUG] [Thread-114682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:02:17.467 [INFO] [Thread-114682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:02:17.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:02:17.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:02:18.291 [DEBUG] [Thread-114682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:02:18.291 [DEBUG] [Thread-114682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:02:18.339 [DEBUG] [Thread-114682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:02:18.339 [DEBUG] [Thread-114682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:02:18.348 [DEBUG] [Thread-114682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:02:18.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:02:18.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:02:18.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:02:18.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:02:18.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:02:18.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:02:18.383 [DEBUG] [Thread-114682] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:02:26.794 [DEBUG] [Thread-114684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:39.316 [DEBUG] [Thread-114685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:41.831 [DEBUG] [Thread-114686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:42.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:42.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:02:48.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:02:48.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:02:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:02:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 2, 19), 8.98, 54.86, 0.0, 25.81, 14.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:02:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:02:19
2025-12-03T10:02:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:02:49.327 [DEBUG] [Thread-114687] [transport.py] [_log()] starting thread (client mode): 0xa27b0100
2025-12-03T10:02:49.327 [DEBUG] [Thread-114687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:02:49.347 [DEBUG] [Thread-114687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:02:49.347 [INFO] [Thread-114687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] client lang: <none>
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] server lang: <none>
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] kex follows: False
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] Compression: none
2025-12-03T10:02:49.350 [DEBUG] [Thread-114687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:02:49.376 [DEBUG] [Thread-114687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:02:49.376 [DEBUG] [Thread-114687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:02:49.377 [DEBUG] [Thread-114687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:02:49.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:02:49.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:02:49.379 [DEBUG] [Thread-114687] [transport.py] [_log()] userauth is OK
2025-12-03T10:02:49.379 [DEBUG] [Thread-114687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:02:49.379 [DEBUG] [Thread-114687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:02:49.379 [DEBUG] [Thread-114687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:02:49.379 [DEBUG] [Thread-114687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:02:49.403 [INFO] [Thread-114687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:02:49.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:02:50.004 [DEBUG] [Thread-114687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:02:50.004 [DEBUG] [Thread-114687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:02:50.005 [DEBUG] [Thread-114687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:02:50.045 [DEBUG] [Thread-114687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:02:50.045 [DEBUG] [Thread-114687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:02:50.048 [DEBUG] [Thread-114687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:02:50.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:02:50.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:02:50.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:02:50.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:02:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:02:50.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:02:50.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:02:50.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:02:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:02:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.334774 -999.00  +14.80  19.08     57   +6.50 1 2 1 1 1   888    0 9.74 59.52 ----- 19.5 19.1 138.2 28.3 20.6 -20.5 20.1 -20.0 19.7 -20.3 20.1 -21.5
2025-12-03T10:02:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:02:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:02:50.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.334774
2025-12-03T10:02:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:02:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:02:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:02:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:02:50.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:02:50.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:02:19', tmtdew=8.98, humidity=54.86, cloud=0.0, wind=25.81, temperature=14.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:02:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:02:50.073 [DEBUG] [Thread-114687] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:02:50.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:02:50.168 [DEBUG] [Thread-114690] [transport.py] [_log()] starting thread (client mode): 0xa27ec220
2025-12-03T10:02:50.168 [DEBUG] [Thread-114690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:02:50.184 [DEBUG] [Thread-114690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:02:50.184 [INFO] [Thread-114690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:02:50.192 [DEBUG] [Thread-114690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] client lang: <none>
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] server lang: <none>
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] kex follows: False
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:02:50.193 [DEBUG] [Thread-114690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:02:50.194 [DEBUG] [Thread-114690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:02:50.194 [DEBUG] [Thread-114690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:02:50.194 [DEBUG] [Thread-114690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:02:50.194 [DEBUG] [Thread-114690] [transport.py] [_log()] Compression: none
2025-12-03T10:02:50.194 [DEBUG] [Thread-114690] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:02:50.249 [DEBUG] [Thread-114690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:02:50.250 [DEBUG] [Thread-114690] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:02:50.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:02:50.251 [DEBUG] [Thread-114690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:02:50.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:02:50.306 [DEBUG] [Thread-114690] [transport.py] [_log()] userauth is OK
2025-12-03T10:02:50.306 [DEBUG] [Thread-114690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:02:50.306 [DEBUG] [Thread-114690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:02:50.306 [DEBUG] [Thread-114690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:02:50.306 [DEBUG] [Thread-114690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:02:50.328 [INFO] [Thread-114690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:02:50.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:02:50.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:02:51.195 [DEBUG] [Thread-114690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:02:51.195 [DEBUG] [Thread-114690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:02:51.243 [DEBUG] [Thread-114690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:02:51.243 [DEBUG] [Thread-114690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:02:51.252 [DEBUG] [Thread-114690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:02:51.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:02:51.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:02:51.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:02:51.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:02:51.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:02:51.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:02:51.294 [DEBUG] [Thread-114690] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:02:56.864 [DEBUG] [Thread-114692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:11.909 [DEBUG] [Thread-114693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:21.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:03:21.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:03:21.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:03:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 2, 51), 8.97, 54.56, 0.0, 19.64, 14.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:03:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:02:51
2025-12-03T10:03:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:03:22.261 [DEBUG] [Thread-114694] [transport.py] [_log()] starting thread (client mode): 0xa27ee620
2025-12-03T10:03:22.261 [DEBUG] [Thread-114694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:03:22.280 [DEBUG] [Thread-114694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:03:22.280 [INFO] [Thread-114694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:22.283 [DEBUG] [Thread-114694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] client lang: <none>
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] server lang: <none>
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] kex follows: False
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] Compression: none
2025-12-03T10:03:22.284 [DEBUG] [Thread-114694] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:03:22.299 [DEBUG] [Thread-114694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:03:22.300 [DEBUG] [Thread-114694] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:03:22.300 [DEBUG] [Thread-114694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:03:22.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:03:22.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:03:22.302 [DEBUG] [Thread-114694] [transport.py] [_log()] userauth is OK
2025-12-03T10:03:22.302 [DEBUG] [Thread-114694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:03:22.302 [DEBUG] [Thread-114694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:03:22.302 [DEBUG] [Thread-114694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:03:22.302 [DEBUG] [Thread-114694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:03:22.337 [INFO] [Thread-114694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:03:22.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:03:22.987 [DEBUG] [Thread-114694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:03:22.987 [DEBUG] [Thread-114694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:03:22.988 [DEBUG] [Thread-114694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:03:23.029 [DEBUG] [Thread-114694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:03:23.029 [DEBUG] [Thread-114694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:03:23.032 [DEBUG] [Thread-114694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:03:23.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:03:23.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:03:23.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:03:23.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:03:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:03:23.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:03:23.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:03:23.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.335121 -999.00  +14.50  16.49     58   +6.40 1 2 1 1 1   888    0 9.81 62.22 ----- 17.7 16.5 140.4 23.6 20.6 -20.1 20.2 -19.7 19.7 -19.9 20.1 -21.5
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.335121
2025-12-03T10:03:23.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:03:23.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:02:51', tmtdew=8.97, humidity=54.56, cloud=0.0, wind=19.64, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:02:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:03:23.056 [DEBUG] [Thread-114694] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:03:23.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:03:23.152 [DEBUG] [Thread-114697] [transport.py] [_log()] starting thread (client mode): 0xa27e85b0
2025-12-03T10:03:23.152 [DEBUG] [Thread-114697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:03:23.167 [DEBUG] [Thread-114697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:03:23.167 [INFO] [Thread-114697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:03:23.174 [DEBUG] [Thread-114697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] client lang: <none>
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] server lang: <none>
2025-12-03T10:03:23.175 [DEBUG] [Thread-114697] [transport.py] [_log()] kex follows: False
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] Compression: none
2025-12-03T10:03:23.176 [DEBUG] [Thread-114697] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:03:23.234 [DEBUG] [Thread-114697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:03:23.234 [DEBUG] [Thread-114697] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:03:23.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:03:23.235 [DEBUG] [Thread-114697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:03:23.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:03:23.290 [DEBUG] [Thread-114697] [transport.py] [_log()] userauth is OK
2025-12-03T10:03:23.290 [DEBUG] [Thread-114697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:03:23.290 [DEBUG] [Thread-114697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:03:23.291 [DEBUG] [Thread-114697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:03:23.291 [DEBUG] [Thread-114697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:03:23.309 [INFO] [Thread-114697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:03:23.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:03:23.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:03:24.147 [DEBUG] [Thread-114697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:03:24.147 [DEBUG] [Thread-114697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:03:24.195 [DEBUG] [Thread-114697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:03:24.195 [DEBUG] [Thread-114697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:03:24.204 [DEBUG] [Thread-114697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:03:24.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:03:24.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:03:24.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:03:24.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:03:24.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:03:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:03:24.236 [DEBUG] [Thread-114697] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:03:26.944 [DEBUG] [Thread-114699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:39.361 [DEBUG] [Thread-114700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:41.984 [DEBUG] [Thread-114701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:42.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:42.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:03:54.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:03:54.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:03:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 3, 24), 9.1, 54.15, 0.0, 15.53, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:03:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:03:24
2025-12-03T10:03:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:03:55.171 [DEBUG] [Thread-114702] [transport.py] [_log()] starting thread (client mode): 0xa27c2e00
2025-12-03T10:03:55.171 [DEBUG] [Thread-114702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:03:55.191 [DEBUG] [Thread-114702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:03:55.191 [INFO] [Thread-114702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] client lang: <none>
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] server lang: <none>
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] kex follows: False
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:03:55.194 [DEBUG] [Thread-114702] [transport.py] [_log()] Compression: none
2025-12-03T10:03:55.195 [DEBUG] [Thread-114702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:03:55.211 [DEBUG] [Thread-114702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:03:55.211 [DEBUG] [Thread-114702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:03:55.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:03:55.212 [DEBUG] [Thread-114702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:03:55.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:03:55.214 [DEBUG] [Thread-114702] [transport.py] [_log()] userauth is OK
2025-12-03T10:03:55.214 [DEBUG] [Thread-114702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:03:55.215 [DEBUG] [Thread-114702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:03:55.215 [DEBUG] [Thread-114702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:03:55.215 [DEBUG] [Thread-114702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:03:55.238 [INFO] [Thread-114702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:03:55.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:03:55.878 [DEBUG] [Thread-114702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:03:55.878 [DEBUG] [Thread-114702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:03:55.878 [DEBUG] [Thread-114702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:03:55.919 [DEBUG] [Thread-114702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:03:55.919 [DEBUG] [Thread-114702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:03:55.922 [DEBUG] [Thread-114702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:03:55.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:03:55.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:03:55.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:03:55.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:03:55.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:03:55.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:03:55.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:03:55.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:03:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:03:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.335468 -999.00  +14.40   9.47     57   +6.10 1 2 1 1 1   888    0 9.98 67.46 ----- 10.1 9.5 146.6 18.4 20.7 -21.0 20.2 -20.4 19.8 -20.7 20.2 -21.1
2025-12-03T10:03:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:03:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:03:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.335468
2025-12-03T10:03:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:03:55.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:03:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:03:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:03:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:03:55.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:03:24', tmtdew=9.1, humidity=54.15, cloud=0.0, wind=15.53, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:03:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:03:55.946 [DEBUG] [Thread-114702] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:03:56.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:03:56.048 [DEBUG] [Thread-114705] [transport.py] [_log()] starting thread (client mode): 0xa27c3880
2025-12-03T10:03:56.048 [DEBUG] [Thread-114705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:03:56.063 [DEBUG] [Thread-114705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:03:56.063 [INFO] [Thread-114705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:03:56.079 [DEBUG] [Thread-114705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:03:56.079 [DEBUG] [Thread-114705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:03:56.079 [DEBUG] [Thread-114705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:03:56.079 [DEBUG] [Thread-114705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:56.079 [DEBUG] [Thread-114705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] client lang: <none>
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] server lang: <none>
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] kex follows: False
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] Compression: none
2025-12-03T10:03:56.080 [DEBUG] [Thread-114705] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:03:56.128 [DEBUG] [Thread-114705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:03:56.128 [DEBUG] [Thread-114705] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:03:56.128 [DEBUG] [Thread-114705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:03:56.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:03:56.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:03:56.186 [DEBUG] [Thread-114705] [transport.py] [_log()] userauth is OK
2025-12-03T10:03:56.186 [DEBUG] [Thread-114705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:03:56.186 [DEBUG] [Thread-114705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:03:56.186 [DEBUG] [Thread-114705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:03:56.186 [DEBUG] [Thread-114705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:03:56.205 [INFO] [Thread-114705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:03:56.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:03:56.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:03:57.010 [DEBUG] [Thread-114707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:03:57.082 [DEBUG] [Thread-114705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:03:57.082 [DEBUG] [Thread-114705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:03:57.130 [DEBUG] [Thread-114705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:03:57.130 [DEBUG] [Thread-114705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:03:57.139 [DEBUG] [Thread-114705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:03:57.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:03:57.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:03:57.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:03:57.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:03:57.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:03:57.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:03:57.170 [DEBUG] [Thread-114705] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:04:12.044 [DEBUG] [Thread-114708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:27.072 [DEBUG] [Thread-114709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:27.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:04:27.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:04:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:04:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 3, 56), 9.14, 53.88, 0.0, 19.88, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:04:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:03:56
2025-12-03T10:04:27.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:04:28.144 [DEBUG] [Thread-114710] [transport.py] [_log()] starting thread (client mode): 0xa27c39d0
2025-12-03T10:04:28.144 [DEBUG] [Thread-114710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:04:28.155 [DEBUG] [Thread-114710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:04:28.155 [INFO] [Thread-114710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:04:28.158 [DEBUG] [Thread-114710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:04:28.158 [DEBUG] [Thread-114710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:04:28.158 [DEBUG] [Thread-114710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:04:28.158 [DEBUG] [Thread-114710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:04:28.158 [DEBUG] [Thread-114710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] client lang: <none>
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] server lang: <none>
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] kex follows: False
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:04:28.159 [DEBUG] [Thread-114710] [transport.py] [_log()] Compression: none
2025-12-03T10:04:28.160 [DEBUG] [Thread-114710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:04:28.177 [DEBUG] [Thread-114710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:04:28.177 [DEBUG] [Thread-114710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:04:28.178 [DEBUG] [Thread-114710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:04:28.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:04:28.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:04:28.179 [DEBUG] [Thread-114710] [transport.py] [_log()] userauth is OK
2025-12-03T10:04:28.179 [DEBUG] [Thread-114710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:04:28.180 [DEBUG] [Thread-114710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:04:28.180 [DEBUG] [Thread-114710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:04:28.180 [DEBUG] [Thread-114710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:04:28.204 [INFO] [Thread-114710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:04:28.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:04:28.823 [DEBUG] [Thread-114710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:04:28.823 [DEBUG] [Thread-114710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:04:28.823 [DEBUG] [Thread-114710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:04:28.864 [DEBUG] [Thread-114710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:04:28.864 [DEBUG] [Thread-114710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:04:28.866 [DEBUG] [Thread-114710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:04:28.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:04:28.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:04:28.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:04:28.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:04:28.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:04:28.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.336163 -999.00  +14.60  15.58     58   +6.50 1 2 1 1 1   888    0 9.75 57.84 ----- 13.2 15.6 132.0 26.7 20.8 -21.9 20.4 -21.1 19.9 -21.6 20.4 -20.6
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:04:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.336163
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:04:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:03:56', tmtdew=9.14, humidity=53.88, cloud=0.0, wind=19.88, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:04:04.483', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:04:28.885 [DEBUG] [Thread-114710] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:04:28.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:04:28.971 [DEBUG] [Thread-114713] [transport.py] [_log()] starting thread (client mode): 0xa27c2650
2025-12-03T10:04:28.971 [DEBUG] [Thread-114713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:04:28.989 [DEBUG] [Thread-114713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:04:28.990 [INFO] [Thread-114713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] client lang: <none>
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] server lang: <none>
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] kex follows: False
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] Compression: none
2025-12-03T10:04:28.997 [DEBUG] [Thread-114713] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:04:29.053 [DEBUG] [Thread-114713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:04:29.053 [DEBUG] [Thread-114713] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:04:29.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:04:29.054 [DEBUG] [Thread-114713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:04:29.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:04:29.114 [DEBUG] [Thread-114713] [transport.py] [_log()] userauth is OK
2025-12-03T10:04:29.114 [DEBUG] [Thread-114713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:04:29.114 [DEBUG] [Thread-114713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:04:29.114 [DEBUG] [Thread-114713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:04:29.114 [DEBUG] [Thread-114713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:04:29.128 [INFO] [Thread-114713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:04:29.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:04:29.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:04:30.065 [DEBUG] [Thread-114713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:04:30.065 [DEBUG] [Thread-114713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:04:30.113 [DEBUG] [Thread-114713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:04:30.113 [DEBUG] [Thread-114713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:04:30.121 [DEBUG] [Thread-114713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:04:30.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:04:30.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:04:30.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:04:30.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:04:30.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:04:30.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:04:30.153 [DEBUG] [Thread-114713] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:04:39.410 [DEBUG] [Thread-114715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:42.102 [DEBUG] [Thread-114716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:42.558 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:42.559 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:04:57.148 [DEBUG] [Thread-114717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:00.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:05:00.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:05:00.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:05:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 4, 28), 9.28, 53.37, 0.0, 18.61, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:05:00.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:04:28
2025-12-03T10:05:01.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:05:01.186 [DEBUG] [Thread-114718] [transport.py] [_log()] starting thread (client mode): 0xa27c3ca0
2025-12-03T10:05:01.186 [DEBUG] [Thread-114718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:05:01.205 [DEBUG] [Thread-114718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:05:01.205 [INFO] [Thread-114718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:05:01.208 [DEBUG] [Thread-114718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] client lang: <none>
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] server lang: <none>
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] kex follows: False
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] Compression: none
2025-12-03T10:05:01.209 [DEBUG] [Thread-114718] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:05:01.224 [DEBUG] [Thread-114718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:05:01.224 [DEBUG] [Thread-114718] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:05:01.224 [DEBUG] [Thread-114718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:05:01.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:05:01.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:05:01.225 [DEBUG] [Thread-114718] [transport.py] [_log()] userauth is OK
2025-12-03T10:05:01.225 [DEBUG] [Thread-114718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:05:01.226 [DEBUG] [Thread-114718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:05:01.226 [DEBUG] [Thread-114718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:05:01.226 [DEBUG] [Thread-114718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:05:01.244 [INFO] [Thread-114718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:05:01.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:05:01.840 [DEBUG] [Thread-114718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:05:01.840 [DEBUG] [Thread-114718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:05:01.840 [DEBUG] [Thread-114718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:05:01.881 [DEBUG] [Thread-114718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:05:01.881 [DEBUG] [Thread-114718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:05:01.883 [DEBUG] [Thread-114718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:05:01.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:05:01.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:05:01.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:05:01.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:05:01.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:05:01.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:05:01.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:05:01.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:05:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.336510 -999.00  +14.50  13.01     59   +6.70 1 2 1 1 1   888    0 9.76 55.59 ----- 17.6 13.0 149.9 22.6 20.7 -22.6 20.3 -21.7 19.8 -21.8 20.3 -22.6
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.336510
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:05:01.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:04:28', tmtdew=9.28, humidity=53.37, cloud=0.0, wind=18.61, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:04:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:05:01.902 [DEBUG] [Thread-114718] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:05:01.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:05:01.993 [DEBUG] [Thread-114721] [transport.py] [_log()] starting thread (client mode): 0xa27b0f40
2025-12-03T10:05:01.993 [DEBUG] [Thread-114721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:05:02.011 [DEBUG] [Thread-114721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:05:02.011 [INFO] [Thread-114721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] client lang: <none>
2025-12-03T10:05:02.019 [DEBUG] [Thread-114721] [transport.py] [_log()] server lang: <none>
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] kex follows: False
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] Compression: none
2025-12-03T10:05:02.020 [DEBUG] [Thread-114721] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:05:02.082 [DEBUG] [Thread-114721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:05:02.082 [DEBUG] [Thread-114721] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:05:02.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:05:02.083 [DEBUG] [Thread-114721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:05:02.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:05:02.142 [DEBUG] [Thread-114721] [transport.py] [_log()] userauth is OK
2025-12-03T10:05:02.142 [DEBUG] [Thread-114721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:05:02.142 [DEBUG] [Thread-114721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:05:02.142 [DEBUG] [Thread-114721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:05:02.142 [DEBUG] [Thread-114721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:05:02.160 [INFO] [Thread-114721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:05:02.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:05:02.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:05:03.015 [DEBUG] [Thread-114721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:05:03.016 [DEBUG] [Thread-114721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:05:03.063 [DEBUG] [Thread-114721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:05:03.063 [DEBUG] [Thread-114721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:05:03.073 [DEBUG] [Thread-114721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:05:03.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:05:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:05:03.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:05:03.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:05:03.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:05:03.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:05:03.105 [DEBUG] [Thread-114721] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:05:12.183 [DEBUG] [Thread-114723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:27.233 [DEBUG] [Thread-114724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:33.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:05:33.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:05:33.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:05:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 4, 28), 9.28, 53.37, 0.0, 18.61, 14.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:05:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:04:28
2025-12-03T10:05:33.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:05:34.111 [DEBUG] [Thread-114725] [transport.py] [_log()] starting thread (client mode): 0xa27c3e80
2025-12-03T10:05:34.111 [DEBUG] [Thread-114725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:05:34.131 [DEBUG] [Thread-114725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:05:34.131 [INFO] [Thread-114725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:05:34.133 [DEBUG] [Thread-114725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] client lang: <none>
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] server lang: <none>
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] kex follows: False
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] Compression: none
2025-12-03T10:05:34.134 [DEBUG] [Thread-114725] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:05:34.151 [DEBUG] [Thread-114725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:05:34.151 [DEBUG] [Thread-114725] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:05:34.152 [DEBUG] [Thread-114725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:05:34.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:05:34.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:05:34.153 [DEBUG] [Thread-114725] [transport.py] [_log()] userauth is OK
2025-12-03T10:05:34.153 [DEBUG] [Thread-114725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:05:34.153 [DEBUG] [Thread-114725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:05:34.153 [DEBUG] [Thread-114725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:05:34.153 [DEBUG] [Thread-114725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:05:34.167 [INFO] [Thread-114725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:05:34.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:05:34.817 [DEBUG] [Thread-114725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:05:34.817 [DEBUG] [Thread-114725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:05:34.817 [DEBUG] [Thread-114725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:05:34.858 [DEBUG] [Thread-114725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:05:34.858 [DEBUG] [Thread-114725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:05:34.861 [DEBUG] [Thread-114725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:05:34.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:05:34.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:05:34.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:05:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:05:34.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:05:34.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:05:34.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:05:34.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.336857 -999.00  +14.50  16.79     58   +6.60 1 2 1 1 1   888    0 9.69 53.28 ----- 13.0 16.8 153.0 25.8 20.5 -23.9 20.1 -22.6 19.7 -22.3 20.2 -23.4
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.336857
2025-12-03T10:05:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:05:34.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:05:34.885 [DEBUG] [Thread-114725] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:05:34.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:05:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:05:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:05:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:04:28', tmtdew=9.28, humidity=53.37, cloud=0.0, wind=18.61, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:05:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:05:34.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:05:34.985 [DEBUG] [Thread-114728] [transport.py] [_log()] starting thread (client mode): 0xa27c3cd0
2025-12-03T10:05:34.985 [DEBUG] [Thread-114728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:05:35.000 [DEBUG] [Thread-114728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:05:35.000 [INFO] [Thread-114728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:05:35.007 [DEBUG] [Thread-114728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] client lang: <none>
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] server lang: <none>
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] kex follows: False
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] Compression: none
2025-12-03T10:05:35.008 [DEBUG] [Thread-114728] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:05:35.066 [DEBUG] [Thread-114728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:05:35.066 [DEBUG] [Thread-114728] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:05:35.067 [DEBUG] [Thread-114728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:05:35.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:05:35.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:05:35.122 [DEBUG] [Thread-114728] [transport.py] [_log()] userauth is OK
2025-12-03T10:05:35.122 [DEBUG] [Thread-114728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:05:35.122 [DEBUG] [Thread-114728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:05:35.122 [DEBUG] [Thread-114728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:05:35.122 [DEBUG] [Thread-114728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:05:35.136 [INFO] [Thread-114728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:05:35.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:05:35.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:05:35.949 [DEBUG] [Thread-114728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:05:35.949 [DEBUG] [Thread-114728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:05:35.997 [DEBUG] [Thread-114728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:05:35.997 [DEBUG] [Thread-114728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:05:36.006 [DEBUG] [Thread-114728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:05:36.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:05:36.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:05:36.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:05:36.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:05:36.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:05:36.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:05:36.041 [DEBUG] [Thread-114728] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:05:39.439 [DEBUG] [Thread-114730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:42.259 [DEBUG] [Thread-114731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:42.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:42.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:05:57.291 [DEBUG] [Thread-114732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:06:06.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:06:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:06:06.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 5, 32), 9.17, 53.95, 0.0, 23.43, 14.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:06:06.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:05:32
2025-12-03T10:06:06.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:06:07.015 [DEBUG] [Thread-114733] [transport.py] [_log()] starting thread (client mode): 0xa27c3b20
2025-12-03T10:06:07.015 [DEBUG] [Thread-114733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:06:07.035 [DEBUG] [Thread-114733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:06:07.035 [INFO] [Thread-114733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:06:07.038 [DEBUG] [Thread-114733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:06:07.038 [DEBUG] [Thread-114733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:06:07.038 [DEBUG] [Thread-114733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] client lang: <none>
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] server lang: <none>
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] kex follows: False
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] Compression: none
2025-12-03T10:06:07.039 [DEBUG] [Thread-114733] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:06:07.047 [DEBUG] [Thread-114733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:06:07.047 [DEBUG] [Thread-114733] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:06:07.048 [DEBUG] [Thread-114733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:06:07.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:06:07.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:06:07.049 [DEBUG] [Thread-114733] [transport.py] [_log()] userauth is OK
2025-12-03T10:06:07.049 [DEBUG] [Thread-114733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:06:07.049 [DEBUG] [Thread-114733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:06:07.050 [DEBUG] [Thread-114733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:06:07.050 [DEBUG] [Thread-114733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:06:07.073 [INFO] [Thread-114733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:06:07.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:06:07.740 [DEBUG] [Thread-114733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:06:07.740 [DEBUG] [Thread-114733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:06:07.740 [DEBUG] [Thread-114733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:06:07.781 [DEBUG] [Thread-114733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:06:07.781 [DEBUG] [Thread-114733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:06:07.783 [DEBUG] [Thread-114733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:06:07.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:06:07.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:06:07.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:06:07.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:06:07.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:06:07.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:06:07.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:06:07.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.337204 -999.00  +14.50  16.21     58   +6.40 1 2 1 1 1   888    0 9.52 50.91 ----- 20.4 16.2 139.6 29.1 20.7 -21.0 20.1 -20.2 19.7 -21.0 20.1 -22.9
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.337204
2025-12-03T10:06:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:06:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:06:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:06:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:06:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:06:07.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:05:32', tmtdew=9.17, humidity=53.95, cloud=0.0, wind=23.43, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:05:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:06:07.806 [DEBUG] [Thread-114733] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:06:07.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:06:07.904 [DEBUG] [Thread-114736] [transport.py] [_log()] starting thread (client mode): 0xa27ef3a0
2025-12-03T10:06:07.904 [DEBUG] [Thread-114736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:06:07.918 [DEBUG] [Thread-114736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:06:07.918 [INFO] [Thread-114736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:07.926 [DEBUG] [Thread-114736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] client lang: <none>
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] server lang: <none>
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] kex follows: False
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:06:07.927 [DEBUG] [Thread-114736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:06:07.928 [DEBUG] [Thread-114736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:06:07.928 [DEBUG] [Thread-114736] [transport.py] [_log()] Compression: none
2025-12-03T10:06:07.928 [DEBUG] [Thread-114736] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:06:07.987 [DEBUG] [Thread-114736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:06:07.987 [DEBUG] [Thread-114736] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:06:07.988 [DEBUG] [Thread-114736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:06:07.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:06:07.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:06:08.042 [DEBUG] [Thread-114736] [transport.py] [_log()] userauth is OK
2025-12-03T10:06:08.042 [DEBUG] [Thread-114736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:06:08.042 [DEBUG] [Thread-114736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:06:08.042 [DEBUG] [Thread-114736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:06:08.043 [DEBUG] [Thread-114736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:06:08.062 [INFO] [Thread-114736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:06:08.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:06:08.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:06:08.911 [DEBUG] [Thread-114736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:06:08.911 [DEBUG] [Thread-114736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:06:08.964 [DEBUG] [Thread-114736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:06:08.964 [DEBUG] [Thread-114736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:06:08.976 [DEBUG] [Thread-114736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:06:08.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:06:08.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:06:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:06:09.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:06:09.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:06:09.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:06:09.010 [DEBUG] [Thread-114736] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:06:12.319 [DEBUG] [Thread-114738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:27.358 [DEBUG] [Thread-114739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:06:39.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:06:39.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:06:39.476 [DEBUG] [Thread-114740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 6, 36), 9.56, 52.72, 0.0, 15.67, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:06:39.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:06:36
2025-12-03T10:06:39.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:06:39.977 [DEBUG] [Thread-114741] [transport.py] [_log()] starting thread (client mode): 0xa27ed5d0
2025-12-03T10:06:39.977 [DEBUG] [Thread-114741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:06:39.998 [DEBUG] [Thread-114741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:06:39.999 [INFO] [Thread-114741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] client lang: <none>
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] server lang: <none>
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] kex follows: False
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:06:40.002 [DEBUG] [Thread-114741] [transport.py] [_log()] Compression: none
2025-12-03T10:06:40.003 [DEBUG] [Thread-114741] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:06:40.020 [DEBUG] [Thread-114741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:06:40.020 [DEBUG] [Thread-114741] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:06:40.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:06:40.021 [DEBUG] [Thread-114741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:06:40.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:06:40.023 [DEBUG] [Thread-114741] [transport.py] [_log()] userauth is OK
2025-12-03T10:06:40.023 [DEBUG] [Thread-114741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:06:40.023 [DEBUG] [Thread-114741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:06:40.023 [DEBUG] [Thread-114741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:06:40.023 [DEBUG] [Thread-114741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:06:40.047 [INFO] [Thread-114741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:06:40.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:06:40.661 [DEBUG] [Thread-114741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:06:40.661 [DEBUG] [Thread-114741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:06:40.662 [DEBUG] [Thread-114741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:06:40.703 [DEBUG] [Thread-114741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:06:40.703 [DEBUG] [Thread-114741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:06:40.706 [DEBUG] [Thread-114741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:06:40.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:06:40.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:06:40.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:06:40.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:06:40.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:06:40.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:06:40.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.337551 -999.00  +14.50  14.31     58   +6.40 1 2 1 1 1   888    0 9.89 57.19 ----- 18.2 14.3 142.6 23.2 20.8 -20.7 20.3 -19.9 19.8 -20.8 20.2 -22.4
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:06:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.337551
2025-12-03T10:06:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:06:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:06:40.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:06:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:06:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:06:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:06:36', tmtdew=9.56, humidity=52.72, cloud=0.0, wind=15.67, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:06:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:06:40.733 [DEBUG] [Thread-114741] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:06:40.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:06:40.830 [DEBUG] [Thread-114744] [transport.py] [_log()] starting thread (client mode): 0xa27edf90
2025-12-03T10:06:40.830 [DEBUG] [Thread-114744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:06:40.844 [DEBUG] [Thread-114744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:06:40.844 [INFO] [Thread-114744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] client lang: <none>
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] server lang: <none>
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] kex follows: False
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:06:40.852 [DEBUG] [Thread-114744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:06:40.853 [DEBUG] [Thread-114744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:06:40.853 [DEBUG] [Thread-114744] [transport.py] [_log()] Compression: none
2025-12-03T10:06:40.853 [DEBUG] [Thread-114744] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:06:40.910 [DEBUG] [Thread-114744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:06:40.910 [DEBUG] [Thread-114744] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:06:40.911 [DEBUG] [Thread-114744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:06:40.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:06:40.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:06:40.966 [DEBUG] [Thread-114744] [transport.py] [_log()] userauth is OK
2025-12-03T10:06:40.967 [DEBUG] [Thread-114744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:06:40.967 [DEBUG] [Thread-114744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:06:40.967 [DEBUG] [Thread-114744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:06:40.967 [DEBUG] [Thread-114744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:06:40.992 [INFO] [Thread-114744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:06:40.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:06:40.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:06:41.837 [DEBUG] [Thread-114744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:06:41.837 [DEBUG] [Thread-114744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:06:41.886 [DEBUG] [Thread-114744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:06:41.886 [DEBUG] [Thread-114744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:06:41.898 [DEBUG] [Thread-114744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:06:41.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:06:41.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:06:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:06:41.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:06:41.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:06:41.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:06:41.935 [DEBUG] [Thread-114744] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:06:42.391 [DEBUG] [Thread-114746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:42.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:42.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:06:57.438 [DEBUG] [Thread-114747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:11.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:07:11.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:07:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:07:12.463 [DEBUG] [Thread-114748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 7, 8), 9.63, 52.54, 0.0, 16.94, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:07:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:07:08
2025-12-03T10:07:12.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:07:12.892 [DEBUG] [Thread-114749] [transport.py] [_log()] starting thread (client mode): 0xa27c1a20
2025-12-03T10:07:12.892 [DEBUG] [Thread-114749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:07:12.910 [DEBUG] [Thread-114749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:07:12.910 [INFO] [Thread-114749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] client lang: <none>
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] server lang: <none>
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] kex follows: False
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] Compression: none
2025-12-03T10:07:12.912 [DEBUG] [Thread-114749] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:07:12.921 [DEBUG] [Thread-114749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:07:12.921 [DEBUG] [Thread-114749] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:07:12.921 [DEBUG] [Thread-114749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:07:12.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:07:12.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:07:12.923 [DEBUG] [Thread-114749] [transport.py] [_log()] userauth is OK
2025-12-03T10:07:12.923 [DEBUG] [Thread-114749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:07:12.924 [DEBUG] [Thread-114749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:07:12.924 [DEBUG] [Thread-114749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:07:12.924 [DEBUG] [Thread-114749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:07:12.947 [INFO] [Thread-114749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:07:12.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:07:13.577 [DEBUG] [Thread-114749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:07:13.577 [DEBUG] [Thread-114749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:07:13.578 [DEBUG] [Thread-114749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:07:13.619 [DEBUG] [Thread-114749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:07:13.619 [DEBUG] [Thread-114749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:07:13.622 [DEBUG] [Thread-114749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:07:13.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:07:13.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:07:13.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:07:13.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:07:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:07:13.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:07:13.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.337899 -999.00  +14.50  20.54     57   +6.20 1 2 1 1 1   888    0 9.70 51.79 ----- 18.1 20.5 137.4 22.6 20.9 -21.1 20.4 -20.6 19.9 -20.8 20.3 -20.6
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:07:13.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.337899
2025-12-03T10:07:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:07:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:07:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:07:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:07:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:07:13.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:07:08', tmtdew=9.63, humidity=52.54, cloud=0.0, wind=16.94, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:06:34.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:07:13.647 [DEBUG] [Thread-114749] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:07:13.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:07:13.744 [DEBUG] [Thread-114752] [transport.py] [_log()] starting thread (client mode): 0xa27b7b50
2025-12-03T10:07:13.744 [DEBUG] [Thread-114752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:07:13.760 [DEBUG] [Thread-114752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:07:13.760 [INFO] [Thread-114752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:07:13.767 [DEBUG] [Thread-114752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:07:13.768 [DEBUG] [Thread-114752] [transport.py] [_log()] client lang: <none>
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] server lang: <none>
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] kex follows: False
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] Compression: none
2025-12-03T10:07:13.769 [DEBUG] [Thread-114752] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:07:13.827 [DEBUG] [Thread-114752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:07:13.827 [DEBUG] [Thread-114752] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:07:13.828 [DEBUG] [Thread-114752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:07:13.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:07:13.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:07:13.883 [DEBUG] [Thread-114752] [transport.py] [_log()] userauth is OK
2025-12-03T10:07:13.883 [DEBUG] [Thread-114752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:07:13.883 [DEBUG] [Thread-114752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:07:13.883 [DEBUG] [Thread-114752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:07:13.883 [DEBUG] [Thread-114752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:07:13.902 [INFO] [Thread-114752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:07:13.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:07:13.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:07:14.751 [DEBUG] [Thread-114752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:07:14.751 [DEBUG] [Thread-114752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:07:14.799 [DEBUG] [Thread-114752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:07:14.799 [DEBUG] [Thread-114752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:07:14.809 [DEBUG] [Thread-114752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:07:14.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:07:14.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:07:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:07:14.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:07:14.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:07:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:07:14.846 [DEBUG] [Thread-114752] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:07:27.492 [DEBUG] [Thread-114754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:39.522 [DEBUG] [Thread-114755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:42.542 [DEBUG] [Thread-114756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:42.989 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:42.990 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:07:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:07:44.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:07:44.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:07:45.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 7, 40), 9.52, 52.57, 0.0, 20.8, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:07:45.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:07:40
2025-12-03T10:07:45.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:07:45.789 [DEBUG] [Thread-114757] [transport.py] [_log()] starting thread (client mode): 0xa27b7a60
2025-12-03T10:07:45.789 [DEBUG] [Thread-114757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:07:45.809 [DEBUG] [Thread-114757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:07:45.809 [INFO] [Thread-114757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:07:45.812 [DEBUG] [Thread-114757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:07:45.812 [DEBUG] [Thread-114757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] client lang: <none>
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] server lang: <none>
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] kex follows: False
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] Compression: none
2025-12-03T10:07:45.813 [DEBUG] [Thread-114757] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:07:45.831 [DEBUG] [Thread-114757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:07:45.832 [DEBUG] [Thread-114757] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:07:45.832 [DEBUG] [Thread-114757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:07:45.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:07:45.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:07:45.834 [DEBUG] [Thread-114757] [transport.py] [_log()] userauth is OK
2025-12-03T10:07:45.834 [DEBUG] [Thread-114757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:07:45.834 [DEBUG] [Thread-114757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:07:45.834 [DEBUG] [Thread-114757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:07:45.834 [DEBUG] [Thread-114757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:07:45.852 [INFO] [Thread-114757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:07:45.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:07:46.495 [DEBUG] [Thread-114757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:07:46.495 [DEBUG] [Thread-114757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:07:46.496 [DEBUG] [Thread-114757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:07:46.536 [DEBUG] [Thread-114757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:07:46.536 [DEBUG] [Thread-114757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:07:46.539 [DEBUG] [Thread-114757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:07:46.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:07:46.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:07:46.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:07:46.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:07:46.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:07:46.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:07:46.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.338246 -999.00  +14.40  15.52     57   +6.20 1 2 1 1 1   888    0 9.64 53.63 ----- 17.3 15.5 124.4 22.4 21.0 -23.3 20.6 -20.0 20.0 -20.5 20.4 -21.1
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:07:46.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.338246
2025-12-03T10:07:46.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:07:46.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:07:46.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:07:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:07:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:07:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:07:40', tmtdew=9.52, humidity=52.57, cloud=0.0, wind=20.8, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:07:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:07:46.564 [DEBUG] [Thread-114757] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:07:46.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:07:57.569 [DEBUG] [Thread-114760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:12.613 [DEBUG] [Thread-114761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:27.640 [DEBUG] [Thread-114762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:39.569 [DEBUG] [Thread-114763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:42.671 [DEBUG] [Thread-114764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:43.129 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:43.130 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:08:57.703 [DEBUG] [Thread-114765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:12.731 [DEBUG] [Thread-114766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:27.765 [DEBUG] [Thread-114767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:39.618 [DEBUG] [Thread-114768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:42.797 [DEBUG] [Thread-114769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:43.276 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:43.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:57.826 [DEBUG] [Thread-114770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:09:59.702 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T10:10:12.853 [DEBUG] [Thread-114771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:27.876 [DEBUG] [Thread-114772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:10:29.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:10:29.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:10:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 10, 20), 9.57, 52.8, 0.0, 17.12, 14.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:10:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:10:20
2025-12-03T10:10:30.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:10:30.695 [DEBUG] [Thread-114773] [transport.py] [_log()] starting thread (client mode): 0xa27c3310
2025-12-03T10:10:30.695 [DEBUG] [Thread-114773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:10:30.715 [DEBUG] [Thread-114773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:10:30.715 [INFO] [Thread-114773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:10:30.718 [DEBUG] [Thread-114773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] client lang: <none>
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] server lang: <none>
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] kex follows: False
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] Compression: none
2025-12-03T10:10:30.719 [DEBUG] [Thread-114773] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:10:30.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:10:30.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] userauth is OK
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:10:30.735 [DEBUG] [Thread-114773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:10:30.746 [INFO] [Thread-114773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:10:30.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:10:31.381 [DEBUG] [Thread-114773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:10:31.382 [DEBUG] [Thread-114773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:10:31.382 [DEBUG] [Thread-114773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:10:31.422 [DEBUG] [Thread-114773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:10:31.422 [DEBUG] [Thread-114773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:10:31.424 [DEBUG] [Thread-114773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:10:31.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:10:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:10:31.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:10:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:10:31.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:10:31.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:10:31.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.340329 -999.00  +15.10  18.05     56   +6.50 1 2 1 1 1   888    0 9.42 48.70 ----- 15.6 18.1 139.0 21.4 21.2 -23.0 20.7 -22.6 20.1 -21.9 20.6 -23.4
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.340329
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:10:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:10:20', tmtdew=9.57, humidity=52.8, cloud=0.0, wind=17.12, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:10:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:10:31.442 [DEBUG] [Thread-114773] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:10:31.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:10:31.525 [DEBUG] [Thread-114776] [transport.py] [_log()] starting thread (client mode): 0xa27ec070
2025-12-03T10:10:31.525 [DEBUG] [Thread-114776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:10:31.540 [DEBUG] [Thread-114776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:10:31.540 [INFO] [Thread-114776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] client lang: <none>
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] server lang: <none>
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] kex follows: False
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:10:31.547 [DEBUG] [Thread-114776] [transport.py] [_log()] Compression: none
2025-12-03T10:10:31.548 [DEBUG] [Thread-114776] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:10:31.604 [DEBUG] [Thread-114776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:10:31.605 [DEBUG] [Thread-114776] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:10:31.605 [DEBUG] [Thread-114776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:10:31.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:10:31.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:10:31.662 [DEBUG] [Thread-114776] [transport.py] [_log()] userauth is OK
2025-12-03T10:10:31.662 [DEBUG] [Thread-114776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:10:31.662 [DEBUG] [Thread-114776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:10:31.662 [DEBUG] [Thread-114776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:10:31.662 [DEBUG] [Thread-114776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:10:31.679 [INFO] [Thread-114776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:10:31.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:10:31.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:10:32.553 [DEBUG] [Thread-114776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:10:32.554 [DEBUG] [Thread-114776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:10:32.601 [DEBUG] [Thread-114776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:10:32.601 [DEBUG] [Thread-114776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:10:32.609 [DEBUG] [Thread-114776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:10:32.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:10:32.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:10:32.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:10:32.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:10:32.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:10:32.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:10:32.641 [DEBUG] [Thread-114776] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:10:39.660 [DEBUG] [Thread-114778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:42.900 [DEBUG] [Thread-114779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:43.414 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:43.424 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:10:57.943 [DEBUG] [Thread-114780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:11:02.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:11:02.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:11:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 10, 52), 9.9, 51.67, 0.0, 19.06, 14.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:11:03.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:10:52
2025-12-03T10:11:03.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:11:03.656 [DEBUG] [Thread-114781] [transport.py] [_log()] starting thread (client mode): 0xa27ed420
2025-12-03T10:11:03.656 [DEBUG] [Thread-114781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:11:03.676 [DEBUG] [Thread-114781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:11:03.676 [INFO] [Thread-114781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] client lang: <none>
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] server lang: <none>
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] kex follows: False
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] Compression: none
2025-12-03T10:11:03.680 [DEBUG] [Thread-114781] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:11:03.697 [DEBUG] [Thread-114781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:11:03.697 [DEBUG] [Thread-114781] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:11:03.697 [DEBUG] [Thread-114781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:11:03.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:11:03.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:11:03.698 [DEBUG] [Thread-114781] [transport.py] [_log()] userauth is OK
2025-12-03T10:11:03.698 [DEBUG] [Thread-114781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:11:03.698 [DEBUG] [Thread-114781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:11:03.698 [DEBUG] [Thread-114781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:11:03.698 [DEBUG] [Thread-114781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:11:03.725 [INFO] [Thread-114781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:11:03.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:11:04.380 [DEBUG] [Thread-114781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:11:04.380 [DEBUG] [Thread-114781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:11:04.381 [DEBUG] [Thread-114781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:11:04.422 [DEBUG] [Thread-114781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:11:04.422 [DEBUG] [Thread-114781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:11:04.424 [DEBUG] [Thread-114781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:11:04.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:11:04.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:11:04.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:11:04.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:11:04.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:11:04.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:11:04.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.340676 -999.00  +15.10  16.10     56   +6.50 1 2 1 1 1   888    0 9.69 47.17 ----- 14.3 16.1 130.6 18.8 21.3 -25.8 20.7 -22.4 20.2 -22.8 20.7 -22.2
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.340676
2025-12-03T10:11:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:11:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:11:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:11:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:11:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:11:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:10:52', tmtdew=9.9, humidity=51.67, cloud=0.0, wind=19.06, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:10:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:11:04.444 [DEBUG] [Thread-114781] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:11:04.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:11:04.527 [DEBUG] [Thread-114784] [transport.py] [_log()] starting thread (client mode): 0xa27c3790
2025-12-03T10:11:04.527 [DEBUG] [Thread-114784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:11:04.541 [DEBUG] [Thread-114784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:11:04.541 [INFO] [Thread-114784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] client lang: <none>
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] server lang: <none>
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] kex follows: False
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:11:04.549 [DEBUG] [Thread-114784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:11:04.550 [DEBUG] [Thread-114784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:11:04.550 [DEBUG] [Thread-114784] [transport.py] [_log()] Compression: none
2025-12-03T10:11:04.550 [DEBUG] [Thread-114784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:11:04.606 [DEBUG] [Thread-114784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:11:04.606 [DEBUG] [Thread-114784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:11:04.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:11:04.606 [DEBUG] [Thread-114784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:11:04.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:11:04.662 [DEBUG] [Thread-114784] [transport.py] [_log()] userauth is OK
2025-12-03T10:11:04.662 [DEBUG] [Thread-114784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:11:04.662 [DEBUG] [Thread-114784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:11:04.662 [DEBUG] [Thread-114784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:11:04.662 [DEBUG] [Thread-114784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:11:04.676 [INFO] [Thread-114784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:11:04.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:11:04.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:11:05.527 [DEBUG] [Thread-114784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:11:05.527 [DEBUG] [Thread-114784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:11:05.575 [DEBUG] [Thread-114784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:11:05.575 [DEBUG] [Thread-114784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:11:05.583 [DEBUG] [Thread-114784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:11:05.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:11:05.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:11:05.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:11:05.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:11:05.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:11:05.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:11:05.615 [DEBUG] [Thread-114784] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:11:12.966 [DEBUG] [Thread-114786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:28.006 [DEBUG] [Thread-114787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:35.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:11:35.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:11:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:11:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 11, 24), 10.06, 51.14, 0.0, 18.53, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:11:36.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:11:24
2025-12-03T10:11:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:11:36.621 [DEBUG] [Thread-114788] [transport.py] [_log()] starting thread (client mode): 0xa27c10f0
2025-12-03T10:11:36.621 [DEBUG] [Thread-114788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:11:36.642 [DEBUG] [Thread-114788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:11:36.642 [INFO] [Thread-114788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:11:36.646 [DEBUG] [Thread-114788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] client lang: <none>
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] server lang: <none>
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] kex follows: False
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] Compression: none
2025-12-03T10:11:36.647 [DEBUG] [Thread-114788] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:11:36.666 [DEBUG] [Thread-114788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:11:36.667 [DEBUG] [Thread-114788] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:11:36.667 [DEBUG] [Thread-114788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:11:36.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:11:36.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:11:36.669 [DEBUG] [Thread-114788] [transport.py] [_log()] userauth is OK
2025-12-03T10:11:36.669 [DEBUG] [Thread-114788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:11:36.669 [DEBUG] [Thread-114788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:11:36.669 [DEBUG] [Thread-114788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:11:36.670 [DEBUG] [Thread-114788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:11:36.687 [INFO] [Thread-114788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:11:36.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:11:37.314 [DEBUG] [Thread-114788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:11:37.314 [DEBUG] [Thread-114788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:11:37.314 [DEBUG] [Thread-114788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:11:37.355 [DEBUG] [Thread-114788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:11:37.355 [DEBUG] [Thread-114788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:11:37.358 [DEBUG] [Thread-114788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:11:37.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:11:37.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:11:37.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:11:37.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:11:37.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:11:37.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:11:37.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:11:37.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.341023 -999.00  +15.10  17.65     57   +6.70 1 2 1 1 1   888    0 9.38 43.89 ----- 19.0 17.6 139.4 20.4 21.5 -21.9 20.9 -20.6 20.4 -21.1 20.7 -22.4
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.341023
2025-12-03T10:11:37.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:11:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:11:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:11:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:11:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:11:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:11:24', tmtdew=10.06, humidity=51.14, cloud=0.0, wind=18.53, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:11:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:11:37.382 [DEBUG] [Thread-114788] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:11:37.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:11:37.478 [DEBUG] [Thread-114791] [transport.py] [_log()] starting thread (client mode): 0xa27c1600
2025-12-03T10:11:37.478 [DEBUG] [Thread-114791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:11:37.493 [DEBUG] [Thread-114791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:11:37.493 [INFO] [Thread-114791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:37.501 [DEBUG] [Thread-114791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] client lang: <none>
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] server lang: <none>
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] kex follows: False
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:11:37.502 [DEBUG] [Thread-114791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:11:37.503 [DEBUG] [Thread-114791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:11:37.503 [DEBUG] [Thread-114791] [transport.py] [_log()] Compression: none
2025-12-03T10:11:37.503 [DEBUG] [Thread-114791] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:11:37.558 [DEBUG] [Thread-114791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:11:37.558 [DEBUG] [Thread-114791] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:11:37.559 [DEBUG] [Thread-114791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:11:37.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:11:37.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:11:37.614 [DEBUG] [Thread-114791] [transport.py] [_log()] userauth is OK
2025-12-03T10:11:37.614 [DEBUG] [Thread-114791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:11:37.615 [DEBUG] [Thread-114791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:11:37.615 [DEBUG] [Thread-114791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:11:37.615 [DEBUG] [Thread-114791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:11:37.633 [INFO] [Thread-114791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:11:37.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:11:37.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:11:38.454 [DEBUG] [Thread-114791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:11:38.454 [DEBUG] [Thread-114791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:11:38.502 [DEBUG] [Thread-114791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:11:38.502 [DEBUG] [Thread-114791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:11:38.510 [DEBUG] [Thread-114791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:11:38.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:11:38.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:11:38.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:11:38.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:11:38.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:11:38.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:11:38.543 [DEBUG] [Thread-114791] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:11:39.727 [DEBUG] [Thread-114793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:43.030 [DEBUG] [Thread-114794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:43.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:43.564 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:11:58.070 [DEBUG] [Thread-114795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:08.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:12:08.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:12:08.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:12:09.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 11, 56), 10.24, 50.54, 0.0, 22.76, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:12:09.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:11:56
2025-12-03T10:12:09.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:12:09.588 [DEBUG] [Thread-114796] [transport.py] [_log()] starting thread (client mode): 0xa27b4580
2025-12-03T10:12:09.588 [DEBUG] [Thread-114796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:12:09.608 [DEBUG] [Thread-114796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:12:09.608 [INFO] [Thread-114796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] client lang: <none>
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] server lang: <none>
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] kex follows: False
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] Compression: none
2025-12-03T10:12:09.611 [DEBUG] [Thread-114796] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:12:09.628 [DEBUG] [Thread-114796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:12:09.628 [DEBUG] [Thread-114796] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:12:09.628 [DEBUG] [Thread-114796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:12:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:12:09.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:12:09.629 [DEBUG] [Thread-114796] [transport.py] [_log()] userauth is OK
2025-12-03T10:12:09.629 [DEBUG] [Thread-114796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:12:09.629 [DEBUG] [Thread-114796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:12:09.629 [DEBUG] [Thread-114796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:12:09.629 [DEBUG] [Thread-114796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:12:09.642 [INFO] [Thread-114796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:12:09.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:12:10.274 [DEBUG] [Thread-114796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:12:10.274 [DEBUG] [Thread-114796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:12:10.274 [DEBUG] [Thread-114796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:12:10.315 [DEBUG] [Thread-114796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:12:10.315 [DEBUG] [Thread-114796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:12:10.317 [DEBUG] [Thread-114796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:12:10.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:12:10.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:12:10.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:12:10.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:12:10.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:12:10.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:12:10.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.341371 -999.00  +15.40  20.91     55   +6.50 1 2 1 1 1   888    0 9.43 43.59 ----- 20.5 20.9 148.0 26.6 21.6 -23.8 21.1 -21.8 20.5 -22.0 21.0 -20.5
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.341371
2025-12-03T10:12:10.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:12:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:12:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:12:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:12:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:12:10.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:11:56', tmtdew=10.24, humidity=50.54, cloud=0.0, wind=22.76, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:11:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:12:10.335 [DEBUG] [Thread-114796] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:12:10.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:12:10.421 [DEBUG] [Thread-114799] [transport.py] [_log()] starting thread (client mode): 0xa27b4280
2025-12-03T10:12:10.421 [DEBUG] [Thread-114799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:12:10.435 [DEBUG] [Thread-114799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:12:10.435 [INFO] [Thread-114799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] client lang: <none>
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] server lang: <none>
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] kex follows: False
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] Compression: none
2025-12-03T10:12:10.443 [DEBUG] [Thread-114799] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:12:10.501 [DEBUG] [Thread-114799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:12:10.501 [DEBUG] [Thread-114799] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:12:10.501 [DEBUG] [Thread-114799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:12:10.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:12:10.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:12:10.558 [DEBUG] [Thread-114799] [transport.py] [_log()] userauth is OK
2025-12-03T10:12:10.558 [DEBUG] [Thread-114799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:12:10.558 [DEBUG] [Thread-114799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:12:10.558 [DEBUG] [Thread-114799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:12:10.558 [DEBUG] [Thread-114799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:12:10.572 [INFO] [Thread-114799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:12:10.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:12:10.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:12:11.428 [DEBUG] [Thread-114799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:12:11.428 [DEBUG] [Thread-114799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:12:11.476 [DEBUG] [Thread-114799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:12:11.476 [DEBUG] [Thread-114799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:12:11.485 [DEBUG] [Thread-114799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:12:11.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:12:11.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:12:11.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:12:11.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:12:11.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:12:11.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:12:11.523 [DEBUG] [Thread-114799] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:12:13.092 [DEBUG] [Thread-114801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:28.137 [DEBUG] [Thread-114802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:39.788 [DEBUG] [Thread-114803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:41.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:12:41.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:12:41.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:12:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 12, 28), 10.29, 50.39, 0.0, 22.57, 15.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:12:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:12:28
2025-12-03T10:12:42.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:12:42.530 [DEBUG] [Thread-114804] [transport.py] [_log()] starting thread (client mode): 0xa27b42b0
2025-12-03T10:12:42.530 [DEBUG] [Thread-114804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:12:42.549 [DEBUG] [Thread-114804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:12:42.549 [INFO] [Thread-114804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:12:42.550 [DEBUG] [Thread-114804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] client lang: <none>
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] server lang: <none>
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] kex follows: False
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] Compression: none
2025-12-03T10:12:42.551 [DEBUG] [Thread-114804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:12:42.563 [DEBUG] [Thread-114804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:12:42.563 [DEBUG] [Thread-114804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:12:42.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:12:42.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:12:42.564 [DEBUG] [Thread-114804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:12:42.564 [DEBUG] [Thread-114804] [transport.py] [_log()] userauth is OK
2025-12-03T10:12:42.565 [DEBUG] [Thread-114804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:12:42.565 [DEBUG] [Thread-114804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:12:42.565 [DEBUG] [Thread-114804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:12:42.565 [DEBUG] [Thread-114804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:12:42.594 [INFO] [Thread-114804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:12:42.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:12:43.167 [DEBUG] [Thread-114806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:43.197 [DEBUG] [Thread-114804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:12:43.198 [DEBUG] [Thread-114804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:12:43.198 [DEBUG] [Thread-114804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:12:43.239 [DEBUG] [Thread-114804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:12:43.239 [DEBUG] [Thread-114804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:12:43.242 [DEBUG] [Thread-114804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:12:43.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:12:43.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:12:43.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:12:43.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:12:43.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:12:43.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:12:43.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:12:43.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:12:43.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.341718 -999.00  +15.30  21.82     55   +6.50 1 2 1 1 1   888    0 9.51 39.25 ----- 13.5 21.8 162.8 25.2 21.8 -22.0 21.1 -21.1 20.6 -20.7 21.0 -21.9
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.341718
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:12:43.263 [DEBUG] [Thread-114804] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:12:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:12:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:12:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:12:43.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:12:28', tmtdew=10.29, humidity=50.39, cloud=0.0, wind=22.57, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:12:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:12:43.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:12:43.357 [DEBUG] [Thread-114808] [transport.py] [_log()] starting thread (client mode): 0xa27ee320
2025-12-03T10:12:43.357 [DEBUG] [Thread-114808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:12:43.371 [DEBUG] [Thread-114808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:12:43.372 [INFO] [Thread-114808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] client lang: <none>
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] server lang: <none>
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] kex follows: False
2025-12-03T10:12:43.379 [DEBUG] [Thread-114808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] Compression: none
2025-12-03T10:12:43.380 [DEBUG] [Thread-114808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:12:43.437 [DEBUG] [Thread-114808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:12:43.438 [DEBUG] [Thread-114808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:12:43.438 [DEBUG] [Thread-114808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:12:43.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:12:43.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:12:43.495 [DEBUG] [Thread-114808] [transport.py] [_log()] userauth is OK
2025-12-03T10:12:43.495 [DEBUG] [Thread-114808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:12:43.496 [DEBUG] [Thread-114808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:12:43.496 [DEBUG] [Thread-114808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:12:43.496 [DEBUG] [Thread-114808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:12:43.516 [INFO] [Thread-114808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:12:43.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:12:43.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:12:43.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:43.705 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:12:44.359 [DEBUG] [Thread-114808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:12:44.359 [DEBUG] [Thread-114808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:12:44.411 [DEBUG] [Thread-114808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:12:44.411 [DEBUG] [Thread-114808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:12:44.419 [DEBUG] [Thread-114808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:12:44.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:12:44.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:12:44.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:12:44.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:12:44.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:12:44.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:12:44.449 [DEBUG] [Thread-114808] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:12:58.197 [DEBUG] [Thread-114810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:13.240 [DEBUG] [Thread-114811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:14.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:13:14.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:13:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:13:15.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 13), 10.31, 50.29, 0.0, 22.04, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:13:15.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:13:00
2025-12-03T10:13:15.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:13:15.461 [DEBUG] [Thread-114812] [transport.py] [_log()] starting thread (client mode): 0xa27eead0
2025-12-03T10:13:15.461 [DEBUG] [Thread-114812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:13:15.480 [DEBUG] [Thread-114812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:13:15.480 [INFO] [Thread-114812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] client lang: <none>
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] server lang: <none>
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] kex follows: False
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] Compression: none
2025-12-03T10:13:15.482 [DEBUG] [Thread-114812] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:13:15.492 [DEBUG] [Thread-114812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:13:15.493 [DEBUG] [Thread-114812] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:13:15.493 [DEBUG] [Thread-114812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:13:15.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:13:15.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:13:15.495 [DEBUG] [Thread-114812] [transport.py] [_log()] userauth is OK
2025-12-03T10:13:15.495 [DEBUG] [Thread-114812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:13:15.495 [DEBUG] [Thread-114812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:13:15.495 [DEBUG] [Thread-114812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:13:15.495 [DEBUG] [Thread-114812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:13:15.530 [INFO] [Thread-114812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:13:15.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:13:16.126 [DEBUG] [Thread-114812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:13:16.126 [DEBUG] [Thread-114812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:13:16.127 [DEBUG] [Thread-114812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:13:16.168 [DEBUG] [Thread-114812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:13:16.168 [DEBUG] [Thread-114812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:13:16.170 [DEBUG] [Thread-114812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:13:16.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:13:16.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:13:16.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:13:16.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:13:16.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:13:16.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:13:16.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:13:16.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.342412 -999.00  +15.20  15.75     55   +6.40 1 1 1 1 1   888    0 9.42 35.30 ----- 21.1 15.8 171.8 28.1 22.0 -23.6 21.0 -24.8 20.7 -22.2 21.2 -22.5
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.342412
2025-12-03T10:13:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:13:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:13:16.195 [DEBUG] [Thread-114812] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:13:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:13:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:13:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:13:16.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:13:00', tmtdew=10.31, humidity=50.29, cloud=0.0, wind=22.04, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:13:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:13:16.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:13:16.291 [DEBUG] [Thread-114815] [transport.py] [_log()] starting thread (client mode): 0xa51ce1a0
2025-12-03T10:13:16.291 [DEBUG] [Thread-114815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:13:16.305 [DEBUG] [Thread-114815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:13:16.305 [INFO] [Thread-114815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:16.313 [DEBUG] [Thread-114815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] client lang: <none>
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] server lang: <none>
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] kex follows: False
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:13:16.314 [DEBUG] [Thread-114815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:13:16.315 [DEBUG] [Thread-114815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:13:16.315 [DEBUG] [Thread-114815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:13:16.315 [DEBUG] [Thread-114815] [transport.py] [_log()] Compression: none
2025-12-03T10:13:16.315 [DEBUG] [Thread-114815] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:13:16.370 [DEBUG] [Thread-114815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:13:16.370 [DEBUG] [Thread-114815] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:13:16.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:13:16.371 [DEBUG] [Thread-114815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:13:16.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:13:16.426 [DEBUG] [Thread-114815] [transport.py] [_log()] userauth is OK
2025-12-03T10:13:16.426 [DEBUG] [Thread-114815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:13:16.426 [DEBUG] [Thread-114815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:13:16.427 [DEBUG] [Thread-114815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:13:16.427 [DEBUG] [Thread-114815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:13:16.445 [INFO] [Thread-114815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:13:16.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:13:16.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:13:17.270 [DEBUG] [Thread-114815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:13:17.270 [DEBUG] [Thread-114815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:13:17.319 [DEBUG] [Thread-114815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:13:17.319 [DEBUG] [Thread-114815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:13:17.328 [DEBUG] [Thread-114815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:13:17.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:13:17.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:13:17.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:13:17.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:13:17.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:13:17.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:13:17.365 [DEBUG] [Thread-114815] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:13:28.275 [DEBUG] [Thread-114817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:39.861 [DEBUG] [Thread-114818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:43.314 [DEBUG] [Thread-114819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:43.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:43.844 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:13:47.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:13:47.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:13:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:13:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 13, 32), 10.41, 49.91, 0.0, 22.79, 15.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:13:48.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:13:32
2025-12-03T10:13:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:13:48.374 [DEBUG] [Thread-114820] [transport.py] [_log()] starting thread (client mode): 0xa51cef20
2025-12-03T10:13:48.374 [DEBUG] [Thread-114820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:13:48.387 [DEBUG] [Thread-114820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:13:48.387 [INFO] [Thread-114820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] client lang: <none>
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] server lang: <none>
2025-12-03T10:13:48.390 [DEBUG] [Thread-114820] [transport.py] [_log()] kex follows: False
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] Compression: none
2025-12-03T10:13:48.391 [DEBUG] [Thread-114820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:13:48.402 [DEBUG] [Thread-114820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:13:48.402 [DEBUG] [Thread-114820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:13:48.403 [DEBUG] [Thread-114820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:13:48.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:13:48.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:13:48.405 [DEBUG] [Thread-114820] [transport.py] [_log()] userauth is OK
2025-12-03T10:13:48.405 [DEBUG] [Thread-114820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:13:48.405 [DEBUG] [Thread-114820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:13:48.405 [DEBUG] [Thread-114820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:13:48.405 [DEBUG] [Thread-114820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:13:48.431 [INFO] [Thread-114820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:13:48.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:13:49.040 [DEBUG] [Thread-114820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:13:49.040 [DEBUG] [Thread-114820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:13:49.040 [DEBUG] [Thread-114820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:13:49.081 [DEBUG] [Thread-114820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:13:49.081 [DEBUG] [Thread-114820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:13:49.083 [DEBUG] [Thread-114820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:13:49.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:13:49.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:13:49.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:13:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:13:49.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:13:49.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:13:49.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:13:49.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:13:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:13:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.342760 -999.00  +15.30  21.40     55   +6.40 1 1 1 1 1   888    0 9.29 34.39 ----- 17.9 21.4 179.2 29.5 21.9 -23.8 20.9 -23.6 20.6 -22.7 21.2 -23.1
2025-12-03T10:13:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:13:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:13:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.342760
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:13:49.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:13:32', tmtdew=10.41, humidity=49.91, cloud=0.0, wind=22.79, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:13:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:13:49.104 [DEBUG] [Thread-114820] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:13:49.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:13:49.200 [DEBUG] [Thread-114823] [transport.py] [_log()] starting thread (client mode): 0xa27ec190
2025-12-03T10:13:49.200 [DEBUG] [Thread-114823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:13:49.214 [DEBUG] [Thread-114823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:13:49.214 [INFO] [Thread-114823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:13:49.222 [DEBUG] [Thread-114823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] client lang: <none>
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] server lang: <none>
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] kex follows: False
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] Compression: none
2025-12-03T10:13:49.223 [DEBUG] [Thread-114823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:13:49.282 [DEBUG] [Thread-114823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:13:49.282 [DEBUG] [Thread-114823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:13:49.283 [DEBUG] [Thread-114823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:13:49.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:13:49.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:13:49.338 [DEBUG] [Thread-114823] [transport.py] [_log()] userauth is OK
2025-12-03T10:13:49.338 [DEBUG] [Thread-114823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:13:49.338 [DEBUG] [Thread-114823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:13:49.338 [DEBUG] [Thread-114823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:13:49.338 [DEBUG] [Thread-114823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:13:49.357 [INFO] [Thread-114823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:13:49.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:13:49.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:13:50.217 [DEBUG] [Thread-114823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:13:50.217 [DEBUG] [Thread-114823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:13:50.265 [DEBUG] [Thread-114823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:13:50.265 [DEBUG] [Thread-114823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:13:50.273 [DEBUG] [Thread-114823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:13:50.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:13:50.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:13:50.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:13:50.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:13:50.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:13:50.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:13:50.307 [DEBUG] [Thread-114823] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:13:58.343 [DEBUG] [Thread-114825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:13.385 [DEBUG] [Thread-114826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:20.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:14:20.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:14:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:14:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 14, 4), 9.97, 51.26, 0.0, 25.34, 14.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:14:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:14:04
2025-12-03T10:14:21.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:14:21.293 [DEBUG] [Thread-114827] [transport.py] [_log()] starting thread (client mode): 0xa27ef160
2025-12-03T10:14:21.293 [DEBUG] [Thread-114827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:14:21.307 [DEBUG] [Thread-114827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:14:21.308 [INFO] [Thread-114827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:14:21.310 [DEBUG] [Thread-114827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] client lang: <none>
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] server lang: <none>
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] kex follows: False
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] Compression: none
2025-12-03T10:14:21.311 [DEBUG] [Thread-114827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:14:21.328 [DEBUG] [Thread-114827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:14:21.328 [DEBUG] [Thread-114827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:14:21.328 [DEBUG] [Thread-114827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:14:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:14:21.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:14:21.330 [DEBUG] [Thread-114827] [transport.py] [_log()] userauth is OK
2025-12-03T10:14:21.330 [DEBUG] [Thread-114827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:14:21.331 [DEBUG] [Thread-114827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:14:21.331 [DEBUG] [Thread-114827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:14:21.331 [DEBUG] [Thread-114827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:14:21.348 [INFO] [Thread-114827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:14:21.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:14:21.899 [DEBUG] [Thread-114827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:14:21.899 [DEBUG] [Thread-114827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:14:21.900 [DEBUG] [Thread-114827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:14:21.940 [DEBUG] [Thread-114827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:14:21.940 [DEBUG] [Thread-114827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:14:21.942 [DEBUG] [Thread-114827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:14:21.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:14:21.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:14:21.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:14:21.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:14:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:14:21.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:14:21.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:14:21.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.343107 -999.00  +15.50  19.21     54   +6.50 1 2 1 1 1   888    0 9.25 32.68 ----- 17.5 19.2 150.0 24.2 22.2 -24.6 21.2 -22.3 20.8 -22.8 21.3 -21.6
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.343107
2025-12-03T10:14:21.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:14:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:14:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:14:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:14:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:14:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:14:04', tmtdew=9.97, humidity=51.26, cloud=0.0, wind=25.34, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:14:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:14:21.970 [DEBUG] [Thread-114827] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:14:22.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:14:22.065 [DEBUG] [Thread-114830] [transport.py] [_log()] starting thread (client mode): 0xa27eb970
2025-12-03T10:14:22.065 [DEBUG] [Thread-114830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:14:22.080 [DEBUG] [Thread-114830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:14:22.080 [INFO] [Thread-114830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:14:22.087 [DEBUG] [Thread-114830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:22.088 [DEBUG] [Thread-114830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] client lang: <none>
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] server lang: <none>
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] kex follows: False
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:14:22.089 [DEBUG] [Thread-114830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:14:22.090 [DEBUG] [Thread-114830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:14:22.090 [DEBUG] [Thread-114830] [transport.py] [_log()] Compression: none
2025-12-03T10:14:22.090 [DEBUG] [Thread-114830] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:14:22.146 [DEBUG] [Thread-114830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:14:22.147 [DEBUG] [Thread-114830] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:14:22.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:14:22.148 [DEBUG] [Thread-114830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:14:22.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:14:22.202 [DEBUG] [Thread-114830] [transport.py] [_log()] userauth is OK
2025-12-03T10:14:22.202 [DEBUG] [Thread-114830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:14:22.202 [DEBUG] [Thread-114830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:14:22.203 [DEBUG] [Thread-114830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:14:22.203 [DEBUG] [Thread-114830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:14:22.226 [INFO] [Thread-114830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:14:22.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:14:22.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:14:23.066 [DEBUG] [Thread-114830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:14:23.066 [DEBUG] [Thread-114830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:14:23.114 [DEBUG] [Thread-114830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:14:23.114 [DEBUG] [Thread-114830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:14:23.123 [DEBUG] [Thread-114830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:14:23.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:14:23.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:14:23.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:14:23.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:14:23.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:14:23.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:14:23.157 [DEBUG] [Thread-114830] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:14:28.421 [DEBUG] [Thread-114832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:39.895 [DEBUG] [Thread-114833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:43.462 [DEBUG] [Thread-114834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:43.983 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:43.984 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:14:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:14:53.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:14:53.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:14:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 14, 36), 10.17, 50.56, 0.0, 25.2, 15.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:14:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:14:36
2025-12-03T10:14:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:14:54.137 [DEBUG] [Thread-114835] [transport.py] [_log()] starting thread (client mode): 0xa27b2230
2025-12-03T10:14:54.137 [DEBUG] [Thread-114835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:14:54.157 [DEBUG] [Thread-114835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:14:54.158 [INFO] [Thread-114835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] client lang: <none>
2025-12-03T10:14:54.161 [DEBUG] [Thread-114835] [transport.py] [_log()] server lang: <none>
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] kex follows: False
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] Compression: none
2025-12-03T10:14:54.162 [DEBUG] [Thread-114835] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:14:54.177 [DEBUG] [Thread-114835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:14:54.178 [DEBUG] [Thread-114835] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:14:54.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:14:54.179 [DEBUG] [Thread-114835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:14:54.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:14:54.181 [DEBUG] [Thread-114835] [transport.py] [_log()] userauth is OK
2025-12-03T10:14:54.181 [DEBUG] [Thread-114835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:14:54.181 [DEBUG] [Thread-114835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:14:54.181 [DEBUG] [Thread-114835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:14:54.181 [DEBUG] [Thread-114835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:14:54.205 [INFO] [Thread-114835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:14:54.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:14:54.818 [DEBUG] [Thread-114835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:14:54.818 [DEBUG] [Thread-114835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:14:54.819 [DEBUG] [Thread-114835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:14:54.859 [DEBUG] [Thread-114835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:14:54.859 [DEBUG] [Thread-114835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:14:54.864 [DEBUG] [Thread-114835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:14:54.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:14:54.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:14:54.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:14:54.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:14:54.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:14:54.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:14:54.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.343454 -999.00  +15.60  20.28     54   +6.30 1 2 1 1 1   888    0 9.32 32.40 ----- 19.1 20.3 151.7 31.5 22.3 -24.9 21.2 -22.6 20.7 -22.7 21.4 -22.4
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:14:54.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.343454
2025-12-03T10:14:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:14:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:14:54.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:14:54.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:14:54.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:14:54.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:14:36', tmtdew=10.17, humidity=50.56, cloud=0.0, wind=25.2, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:14:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:14:54.903 [DEBUG] [Thread-114835] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:14:54.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:14:54.999 [DEBUG] [Thread-114838] [transport.py] [_log()] starting thread (client mode): 0xa27c32e0
2025-12-03T10:14:54.999 [DEBUG] [Thread-114838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:14:55.014 [DEBUG] [Thread-114838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:14:55.014 [INFO] [Thread-114838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:14:55.021 [DEBUG] [Thread-114838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:14:55.021 [DEBUG] [Thread-114838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] client lang: <none>
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] server lang: <none>
2025-12-03T10:14:55.022 [DEBUG] [Thread-114838] [transport.py] [_log()] kex follows: False
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] Compression: none
2025-12-03T10:14:55.023 [DEBUG] [Thread-114838] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:14:55.082 [DEBUG] [Thread-114838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:14:55.083 [DEBUG] [Thread-114838] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:14:55.083 [DEBUG] [Thread-114838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:14:55.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:14:55.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:14:55.138 [DEBUG] [Thread-114838] [transport.py] [_log()] userauth is OK
2025-12-03T10:14:55.138 [DEBUG] [Thread-114838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:14:55.138 [DEBUG] [Thread-114838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:14:55.138 [DEBUG] [Thread-114838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:14:55.138 [DEBUG] [Thread-114838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:14:55.159 [INFO] [Thread-114838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:14:55.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:14:55.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:14:55.996 [DEBUG] [Thread-114838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:14:55.997 [DEBUG] [Thread-114838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:14:56.044 [DEBUG] [Thread-114838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:14:56.044 [DEBUG] [Thread-114838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:14:56.053 [DEBUG] [Thread-114838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:14:56.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:14:56.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:14:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:14:56.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:14:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:14:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:14:56.089 [DEBUG] [Thread-114838] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:14:58.488 [DEBUG] [Thread-114840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:13.533 [DEBUG] [Thread-114841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:26.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:15:26.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:15:26.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:15:26.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 15, 9), 10.1, 50.77, 0.0, 26.31, 15.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:15:26.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:15:09
2025-12-03T10:15:26.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:15:27.072 [DEBUG] [Thread-114842] [transport.py] [_log()] starting thread (client mode): 0xa51cc460
2025-12-03T10:15:27.072 [DEBUG] [Thread-114842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:15:27.094 [DEBUG] [Thread-114842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:15:27.094 [INFO] [Thread-114842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:15:27.097 [DEBUG] [Thread-114842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] client lang: <none>
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] server lang: <none>
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] kex follows: False
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] Compression: none
2025-12-03T10:15:27.098 [DEBUG] [Thread-114842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:15:27.114 [DEBUG] [Thread-114842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:15:27.115 [DEBUG] [Thread-114842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:15:27.115 [DEBUG] [Thread-114842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:15:27.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:15:27.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:15:27.117 [DEBUG] [Thread-114842] [transport.py] [_log()] userauth is OK
2025-12-03T10:15:27.117 [DEBUG] [Thread-114842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:15:27.117 [DEBUG] [Thread-114842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:15:27.117 [DEBUG] [Thread-114842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:15:27.117 [DEBUG] [Thread-114842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:15:27.134 [INFO] [Thread-114842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:15:27.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:15:27.750 [DEBUG] [Thread-114842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:15:27.750 [DEBUG] [Thread-114842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:15:27.751 [DEBUG] [Thread-114842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:15:27.791 [DEBUG] [Thread-114842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:15:27.791 [DEBUG] [Thread-114842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:15:27.795 [DEBUG] [Thread-114842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:15:27.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:15:27.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:15:27.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:15:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:15:27.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:15:27.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:15:27.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:15:27.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:15:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:15:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.343801 -999.00  +15.40  16.07     54   +6.20 1 2 1 1 1   888    0 9.32 33.14 ----- 12.2 16.1 159.8 23.9 22.3 -23.6 21.4 -22.1 20.8 -21.5 21.5 -23.2
2025-12-03T10:15:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:15:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:15:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.343801
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:15:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:15:09', tmtdew=10.1, humidity=50.77, cloud=0.0, wind=26.31, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:15:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:15:27.820 [DEBUG] [Thread-114842] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:15:27.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:15:27.916 [DEBUG] [Thread-114845] [transport.py] [_log()] starting thread (client mode): 0xa27edf60
2025-12-03T10:15:27.916 [DEBUG] [Thread-114845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:15:27.931 [DEBUG] [Thread-114845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:15:27.931 [INFO] [Thread-114845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:15:27.939 [DEBUG] [Thread-114845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] client lang: <none>
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] server lang: <none>
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] kex follows: False
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:15:27.940 [DEBUG] [Thread-114845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:15:27.941 [DEBUG] [Thread-114845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:15:27.941 [DEBUG] [Thread-114845] [transport.py] [_log()] Compression: none
2025-12-03T10:15:27.941 [DEBUG] [Thread-114845] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:15:27.998 [DEBUG] [Thread-114845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:15:27.999 [DEBUG] [Thread-114845] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:15:28.000 [DEBUG] [Thread-114845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:15:28.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:15:28.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:15:28.054 [DEBUG] [Thread-114845] [transport.py] [_log()] userauth is OK
2025-12-03T10:15:28.054 [DEBUG] [Thread-114845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:15:28.054 [DEBUG] [Thread-114845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:15:28.054 [DEBUG] [Thread-114845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:15:28.055 [DEBUG] [Thread-114845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:15:28.078 [INFO] [Thread-114845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:15:28.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:15:28.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:15:28.561 [DEBUG] [Thread-114847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:28.915 [DEBUG] [Thread-114845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:15:28.915 [DEBUG] [Thread-114845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:15:28.963 [DEBUG] [Thread-114845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:15:28.963 [DEBUG] [Thread-114845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:15:28.973 [DEBUG] [Thread-114845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:15:28.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:15:28.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:15:28.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:15:29.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:15:29.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:15:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:15:29.009 [DEBUG] [Thread-114845] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:15:39.949 [DEBUG] [Thread-114848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:43.604 [DEBUG] [Thread-114849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:44.123 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:44.124 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:58.632 [DEBUG] [Thread-114850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:15:59.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:15:59.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:15:59.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:15:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 15, 41), 10.13, 50.54, 0.0, 21.19, 15.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:15:59.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:15:41
2025-12-03T10:15:59.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:16:00.011 [DEBUG] [Thread-114851] [transport.py] [_log()] starting thread (client mode): 0xa51cfaf0
2025-12-03T10:16:00.011 [DEBUG] [Thread-114851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:16:00.034 [DEBUG] [Thread-114851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:16:00.034 [INFO] [Thread-114851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] client lang: <none>
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] server lang: <none>
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] kex follows: False
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:16:00.037 [DEBUG] [Thread-114851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:16:00.038 [DEBUG] [Thread-114851] [transport.py] [_log()] Compression: none
2025-12-03T10:16:00.038 [DEBUG] [Thread-114851] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:16:00.054 [DEBUG] [Thread-114851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:16:00.054 [DEBUG] [Thread-114851] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:16:00.055 [DEBUG] [Thread-114851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:16:00.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:16:00.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:16:00.055 [DEBUG] [Thread-114851] [transport.py] [_log()] userauth is OK
2025-12-03T10:16:00.055 [DEBUG] [Thread-114851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:16:00.056 [DEBUG] [Thread-114851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:16:00.056 [DEBUG] [Thread-114851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:16:00.056 [DEBUG] [Thread-114851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:16:00.067 [INFO] [Thread-114851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:16:00.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:16:00.721 [DEBUG] [Thread-114851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:16:00.721 [DEBUG] [Thread-114851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:16:00.721 [DEBUG] [Thread-114851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:16:00.762 [DEBUG] [Thread-114851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:16:00.762 [DEBUG] [Thread-114851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:16:00.765 [DEBUG] [Thread-114851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:16:00.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:16:00.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:16:00.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:16:00.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:16:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:16:00.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:16:00.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.343801 -999.00  +15.40  16.07     54   +6.20 1 2 1 1 1   888    0 9.32 33.14 ----- 12.2 16.1 159.8 23.9 22.3 -23.6 21.4 -22.1 20.8 -21.5 21.5 -23.2
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.343801
2025-12-03T10:16:00.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:16:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:16:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:16:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:16:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:16:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:15:41', tmtdew=10.13, humidity=50.54, cloud=0.0, wind=21.19, temperature=15.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:15:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:16:00.783 [DEBUG] [Thread-114851] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:16:00.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:16:00.869 [DEBUG] [Thread-114854] [transport.py] [_log()] starting thread (client mode): 0xa27853f0
2025-12-03T10:16:00.869 [DEBUG] [Thread-114854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:16:00.884 [DEBUG] [Thread-114854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:16:00.884 [INFO] [Thread-114854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] client lang: <none>
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] server lang: <none>
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] kex follows: False
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:16:00.891 [DEBUG] [Thread-114854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:16:00.892 [DEBUG] [Thread-114854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:16:00.892 [DEBUG] [Thread-114854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:16:00.892 [DEBUG] [Thread-114854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:16:00.892 [DEBUG] [Thread-114854] [transport.py] [_log()] Compression: none
2025-12-03T10:16:00.892 [DEBUG] [Thread-114854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:16:00.955 [DEBUG] [Thread-114854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:16:00.955 [DEBUG] [Thread-114854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:16:00.956 [DEBUG] [Thread-114854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:16:00.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:16:00.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:16:01.014 [DEBUG] [Thread-114854] [transport.py] [_log()] userauth is OK
2025-12-03T10:16:01.014 [DEBUG] [Thread-114854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:16:01.014 [DEBUG] [Thread-114854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:16:01.014 [DEBUG] [Thread-114854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:16:01.014 [DEBUG] [Thread-114854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:16:01.032 [INFO] [Thread-114854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:16:01.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:16:01.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:16:01.886 [DEBUG] [Thread-114854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:16:01.886 [DEBUG] [Thread-114854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:16:01.933 [DEBUG] [Thread-114854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:16:01.933 [DEBUG] [Thread-114854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:16:01.941 [DEBUG] [Thread-114854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:16:01.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:16:01.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:16:01.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:16:01.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:16:01.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:16:01.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:16:01.973 [DEBUG] [Thread-114854] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:16:13.655 [DEBUG] [Thread-114856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:28.702 [DEBUG] [Thread-114857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:31.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:16:31.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:16:32.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:16:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 16, 13), 10.27, 50.11, 0.0, 19.85, 15.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:16:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:16:13
2025-12-03T10:16:32.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:16:32.965 [DEBUG] [Thread-114858] [transport.py] [_log()] starting thread (client mode): 0xa271f820
2025-12-03T10:16:32.965 [DEBUG] [Thread-114858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:16:32.985 [DEBUG] [Thread-114858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:16:32.985 [INFO] [Thread-114858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:16:32.988 [DEBUG] [Thread-114858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:16:32.988 [DEBUG] [Thread-114858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:16:32.988 [DEBUG] [Thread-114858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] client lang: <none>
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] server lang: <none>
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] kex follows: False
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] Compression: none
2025-12-03T10:16:32.989 [DEBUG] [Thread-114858] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:16:33.006 [DEBUG] [Thread-114858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:16:33.007 [DEBUG] [Thread-114858] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:16:33.007 [DEBUG] [Thread-114858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:16:33.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:16:33.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:16:33.009 [DEBUG] [Thread-114858] [transport.py] [_log()] userauth is OK
2025-12-03T10:16:33.009 [DEBUG] [Thread-114858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:16:33.009 [DEBUG] [Thread-114858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:16:33.009 [DEBUG] [Thread-114858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:16:33.010 [DEBUG] [Thread-114858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:16:33.026 [INFO] [Thread-114858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:16:33.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:16:33.673 [DEBUG] [Thread-114858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:16:33.673 [DEBUG] [Thread-114858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:16:33.673 [DEBUG] [Thread-114858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:16:33.714 [DEBUG] [Thread-114858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:16:33.714 [DEBUG] [Thread-114858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:16:33.716 [DEBUG] [Thread-114858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:16:33.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:16:33.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:16:33.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:16:33.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:16:33.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:16:33.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:16:33.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.344148 -999.00  +15.60  15.13     54   +6.40 1 2 1 1 1   888    0 9.41 34.05 ----- 14.9 15.1 150.2 19.3 22.5 -23.5 21.6 -22.1 20.9 -21.2 21.6 -21.6
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:16:33.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.344148
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:16:33.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:16:13', tmtdew=10.27, humidity=50.11, cloud=0.0, wind=19.85, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:15:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:16:33.737 [DEBUG] [Thread-114858] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:16:33.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:16:33.823 [DEBUG] [Thread-114861] [transport.py] [_log()] starting thread (client mode): 0xa2787cd0
2025-12-03T10:16:33.823 [DEBUG] [Thread-114861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:16:33.837 [DEBUG] [Thread-114861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:16:33.838 [INFO] [Thread-114861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:16:33.845 [DEBUG] [Thread-114861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:16:33.845 [DEBUG] [Thread-114861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] client lang: <none>
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] server lang: <none>
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] kex follows: False
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:16:33.846 [DEBUG] [Thread-114861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:16:33.847 [DEBUG] [Thread-114861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:16:33.847 [DEBUG] [Thread-114861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:16:33.847 [DEBUG] [Thread-114861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:16:33.847 [DEBUG] [Thread-114861] [transport.py] [_log()] Compression: none
2025-12-03T10:16:33.847 [DEBUG] [Thread-114861] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:16:33.902 [DEBUG] [Thread-114861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:16:33.902 [DEBUG] [Thread-114861] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:16:33.903 [DEBUG] [Thread-114861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:16:33.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:16:33.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:16:33.958 [DEBUG] [Thread-114861] [transport.py] [_log()] userauth is OK
2025-12-03T10:16:33.958 [DEBUG] [Thread-114861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:16:33.958 [DEBUG] [Thread-114861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:16:33.958 [DEBUG] [Thread-114861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:16:33.959 [DEBUG] [Thread-114861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:16:33.977 [INFO] [Thread-114861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:16:33.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:16:33.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:16:34.790 [DEBUG] [Thread-114861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:16:34.790 [DEBUG] [Thread-114861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:16:34.838 [DEBUG] [Thread-114861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:16:34.838 [DEBUG] [Thread-114861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:16:34.847 [DEBUG] [Thread-114861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:16:34.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:16:34.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:16:34.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:16:34.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:16:34.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:16:34.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:16:34.881 [DEBUG] [Thread-114861] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:16:39.986 [DEBUG] [Thread-114863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:43.730 [DEBUG] [Thread-114864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:44.265 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:44.266 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:16:58.785 [DEBUG] [Thread-114865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:04.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:17:04.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:17:04.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:17:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 16, 45), 11.09, 47.58, 0.0, 21.21, 15.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:17:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:16:45
2025-12-03T10:17:05.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:17:05.874 [DEBUG] [Thread-114866] [transport.py] [_log()] starting thread (client mode): 0xa51cda80
2025-12-03T10:17:05.874 [DEBUG] [Thread-114866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:17:05.894 [DEBUG] [Thread-114866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:17:05.894 [INFO] [Thread-114866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] client lang: <none>
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] server lang: <none>
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] kex follows: False
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:17:05.897 [DEBUG] [Thread-114866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:17:05.898 [DEBUG] [Thread-114866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:17:05.898 [DEBUG] [Thread-114866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:17:05.898 [DEBUG] [Thread-114866] [transport.py] [_log()] Compression: none
2025-12-03T10:17:05.898 [DEBUG] [Thread-114866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:17:05.916 [DEBUG] [Thread-114866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:17:05.917 [DEBUG] [Thread-114866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:17:05.917 [DEBUG] [Thread-114866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:17:05.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:17:05.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:17:05.919 [DEBUG] [Thread-114866] [transport.py] [_log()] userauth is OK
2025-12-03T10:17:05.919 [DEBUG] [Thread-114866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:17:05.919 [DEBUG] [Thread-114866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:17:05.919 [DEBUG] [Thread-114866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:17:05.919 [DEBUG] [Thread-114866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:17:05.937 [INFO] [Thread-114866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:17:05.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:17:06.576 [DEBUG] [Thread-114866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:17:06.576 [DEBUG] [Thread-114866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:17:06.576 [DEBUG] [Thread-114866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:17:06.617 [DEBUG] [Thread-114866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:17:06.617 [DEBUG] [Thread-114866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:17:06.620 [DEBUG] [Thread-114866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:17:06.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:17:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:17:06.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:17:06.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:17:06.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:17:06.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:17:06.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.344496 -999.00  +15.50  15.13     53   +6.10 1 2 1 1 1   888    0 9.54 36.14 ----- 18.0 15.1 161.6 26.4 22.5 -25.1 21.6 -22.6 20.9 -22.6 21.6 -22.8
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:17:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.344496
2025-12-03T10:17:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:17:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:17:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:17:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:17:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:17:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:16:45', tmtdew=11.09, humidity=47.58, cloud=0.0, wind=21.21, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:16:04.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:17:06.645 [DEBUG] [Thread-114866] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:17:06.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:17:06.747 [DEBUG] [Thread-114869] [transport.py] [_log()] starting thread (client mode): 0xa27b46d0
2025-12-03T10:17:06.747 [DEBUG] [Thread-114869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:17:06.762 [DEBUG] [Thread-114869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:17:06.762 [INFO] [Thread-114869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:17:06.769 [DEBUG] [Thread-114869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] client lang: <none>
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] server lang: <none>
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] kex follows: False
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] Compression: none
2025-12-03T10:17:06.770 [DEBUG] [Thread-114869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:17:06.825 [DEBUG] [Thread-114869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:17:06.826 [DEBUG] [Thread-114869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:17:06.826 [DEBUG] [Thread-114869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:17:06.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:17:06.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:17:06.882 [DEBUG] [Thread-114869] [transport.py] [_log()] userauth is OK
2025-12-03T10:17:06.882 [DEBUG] [Thread-114869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:17:06.882 [DEBUG] [Thread-114869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:17:06.882 [DEBUG] [Thread-114869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:17:06.882 [DEBUG] [Thread-114869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:17:06.902 [INFO] [Thread-114869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:17:06.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:17:06.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:17:07.726 [DEBUG] [Thread-114869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:17:07.727 [DEBUG] [Thread-114869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:17:07.777 [DEBUG] [Thread-114869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:17:07.777 [DEBUG] [Thread-114869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:17:07.786 [DEBUG] [Thread-114869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:17:07.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:17:07.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:17:07.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:17:07.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:17:07.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:17:07.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:17:07.822 [DEBUG] [Thread-114869] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:17:13.816 [DEBUG] [Thread-114871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:28.853 [DEBUG] [Thread-114872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:37.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:17:37.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:17:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:17:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 17, 17), 11.04, 47.76, 0.0, 19.64, 15.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:17:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:17:17
2025-12-03T10:17:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:17:38.826 [DEBUG] [Thread-114873] [transport.py] [_log()] starting thread (client mode): 0xa51cf130
2025-12-03T10:17:38.826 [DEBUG] [Thread-114873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:17:38.847 [DEBUG] [Thread-114873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:17:38.847 [INFO] [Thread-114873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:17:38.850 [DEBUG] [Thread-114873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:17:38.850 [DEBUG] [Thread-114873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] client lang: <none>
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] server lang: <none>
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] kex follows: False
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:17:38.851 [DEBUG] [Thread-114873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:17:38.852 [DEBUG] [Thread-114873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:17:38.852 [DEBUG] [Thread-114873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:17:38.852 [DEBUG] [Thread-114873] [transport.py] [_log()] Compression: none
2025-12-03T10:17:38.852 [DEBUG] [Thread-114873] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:17:38.871 [DEBUG] [Thread-114873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:17:38.871 [DEBUG] [Thread-114873] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:17:38.872 [DEBUG] [Thread-114873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:17:38.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:17:38.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:17:38.875 [DEBUG] [Thread-114873] [transport.py] [_log()] userauth is OK
2025-12-03T10:17:38.875 [DEBUG] [Thread-114873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:17:38.875 [DEBUG] [Thread-114873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:17:38.875 [DEBUG] [Thread-114873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:17:38.875 [DEBUG] [Thread-114873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:17:38.902 [INFO] [Thread-114873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:17:38.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:17:39.528 [DEBUG] [Thread-114873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:17:39.528 [DEBUG] [Thread-114873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:17:39.528 [DEBUG] [Thread-114873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:17:39.569 [DEBUG] [Thread-114873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:17:39.569 [DEBUG] [Thread-114873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:17:39.572 [DEBUG] [Thread-114873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:17:39.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:17:39.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:17:39.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:17:39.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:17:39.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:17:39.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:17:39.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:17:39.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.345190 -999.00  +15.30  15.49     52   +5.70 1 2 1 1 1   888    0 9.75 41.45 ----- 13.8 15.5 175.0 21.2 22.8 -22.9 21.8 -22.4 21.1 -20.6 21.8 -22.2
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.345190
2025-12-03T10:17:39.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:17:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:17:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:17:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:17:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:17:39.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:17:17', tmtdew=11.04, humidity=47.76, cloud=0.0, wind=19.64, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:17:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:17:39.596 [DEBUG] [Thread-114873] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:17:39.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:17:39.693 [DEBUG] [Thread-114876] [transport.py] [_log()] starting thread (client mode): 0xa271ce20
2025-12-03T10:17:39.693 [DEBUG] [Thread-114876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:17:39.707 [DEBUG] [Thread-114876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:17:39.707 [INFO] [Thread-114876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] client lang: <none>
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] server lang: <none>
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] kex follows: False
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:17:39.715 [DEBUG] [Thread-114876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:17:39.716 [DEBUG] [Thread-114876] [transport.py] [_log()] Compression: none
2025-12-03T10:17:39.716 [DEBUG] [Thread-114876] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:17:39.782 [DEBUG] [Thread-114876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:17:39.783 [DEBUG] [Thread-114876] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:17:39.783 [DEBUG] [Thread-114876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:17:39.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:17:39.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:17:39.838 [DEBUG] [Thread-114876] [transport.py] [_log()] userauth is OK
2025-12-03T10:17:39.838 [DEBUG] [Thread-114876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:17:39.838 [DEBUG] [Thread-114876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:17:39.838 [DEBUG] [Thread-114876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:17:39.838 [DEBUG] [Thread-114876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:17:39.859 [INFO] [Thread-114876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:17:39.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:17:39.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:17:40.025 [DEBUG] [Thread-114878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:40.692 [DEBUG] [Thread-114876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:17:40.693 [DEBUG] [Thread-114876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:17:40.741 [DEBUG] [Thread-114876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:17:40.741 [DEBUG] [Thread-114876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:17:40.751 [DEBUG] [Thread-114876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:17:40.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:17:40.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:17:40.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:17:40.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:17:40.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:17:40.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:17:40.795 [DEBUG] [Thread-114876] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:17:43.886 [DEBUG] [Thread-114879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:44.406 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:44.407 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:17:58.931 [DEBUG] [Thread-114880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:10.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:18:10.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:18:10.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:18:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 17, 49), 10.64, 49.1, 0.0, 20.63, 15.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:17:49
2025-12-03T10:18:11.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:18:11.775 [DEBUG] [Thread-114881] [transport.py] [_log()] starting thread (client mode): 0xa270b040
2025-12-03T10:18:11.775 [DEBUG] [Thread-114881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:18:11.793 [DEBUG] [Thread-114881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:18:11.793 [INFO] [Thread-114881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:18:11.796 [DEBUG] [Thread-114881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:18:11.796 [DEBUG] [Thread-114881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] client lang: <none>
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] server lang: <none>
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] kex follows: False
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] Compression: none
2025-12-03T10:18:11.797 [DEBUG] [Thread-114881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:18:11.814 [DEBUG] [Thread-114881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:18:11.815 [DEBUG] [Thread-114881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:18:11.815 [DEBUG] [Thread-114881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:18:11.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:18:11.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:18:11.817 [DEBUG] [Thread-114881] [transport.py] [_log()] userauth is OK
2025-12-03T10:18:11.817 [DEBUG] [Thread-114881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:18:11.818 [DEBUG] [Thread-114881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:18:11.818 [DEBUG] [Thread-114881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:18:11.818 [DEBUG] [Thread-114881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:18:11.835 [INFO] [Thread-114881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:18:11.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:18:12.433 [DEBUG] [Thread-114881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:18:12.434 [DEBUG] [Thread-114881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:18:12.434 [DEBUG] [Thread-114881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:18:12.475 [DEBUG] [Thread-114881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:18:12.475 [DEBUG] [Thread-114881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:18:12.477 [DEBUG] [Thread-114881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:18:12.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:18:12.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:18:12.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:18:12.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:18:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:18:12.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:18:12.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.345537 -999.00  +15.30  17.22     53   +5.90 1 2 1 1 1   888    0 9.88 46.35 ----- 13.4 17.2 167.0 21.0 22.9 -23.5 21.8 -22.8 21.2 -21.1 21.9 -23.1
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:18:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.345537
2025-12-03T10:18:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:18:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:18:12.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:18:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:18:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:18:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:17:49', tmtdew=10.64, humidity=49.1, cloud=0.0, wind=20.63, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:17:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:18:12.499 [DEBUG] [Thread-114881] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:18:12.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:18:12.595 [DEBUG] [Thread-114884] [transport.py] [_log()] starting thread (client mode): 0xa27848b0
2025-12-03T10:18:12.596 [DEBUG] [Thread-114884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:18:12.609 [DEBUG] [Thread-114884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:18:12.610 [INFO] [Thread-114884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:18:12.617 [DEBUG] [Thread-114884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:18:12.617 [DEBUG] [Thread-114884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:18:12.617 [DEBUG] [Thread-114884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] client lang: <none>
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] server lang: <none>
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] kex follows: False
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:18:12.618 [DEBUG] [Thread-114884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:18:12.619 [DEBUG] [Thread-114884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:18:12.619 [DEBUG] [Thread-114884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:18:12.619 [DEBUG] [Thread-114884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:18:12.619 [DEBUG] [Thread-114884] [transport.py] [_log()] Compression: none
2025-12-03T10:18:12.619 [DEBUG] [Thread-114884] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:18:12.677 [DEBUG] [Thread-114884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:18:12.678 [DEBUG] [Thread-114884] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:18:12.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:18:12.679 [DEBUG] [Thread-114884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:18:12.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:18:12.734 [DEBUG] [Thread-114884] [transport.py] [_log()] userauth is OK
2025-12-03T10:18:12.734 [DEBUG] [Thread-114884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:18:12.734 [DEBUG] [Thread-114884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:18:12.734 [DEBUG] [Thread-114884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:18:12.734 [DEBUG] [Thread-114884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:18:12.753 [INFO] [Thread-114884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:18:12.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:18:12.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:18:13.567 [DEBUG] [Thread-114884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:18:13.567 [DEBUG] [Thread-114884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:18:13.617 [DEBUG] [Thread-114884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:18:13.618 [DEBUG] [Thread-114884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:18:13.630 [DEBUG] [Thread-114884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:18:13.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:18:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:18:13.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:18:13.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:18:13.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:18:13.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:18:13.680 [DEBUG] [Thread-114884] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:18:13.957 [DEBUG] [Thread-114886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:29.007 [DEBUG] [Thread-114887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:40.068 [DEBUG] [Thread-114888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:18:43.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:18:43.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:18:44.035 [DEBUG] [Thread-114889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 18, 21), 10.7, 48.9, 0.0, 18.44, 15.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:18:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:18:21
2025-12-03T10:18:44.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:18:44.548 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:44.549 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:18:44.675 [DEBUG] [Thread-114890] [transport.py] [_log()] starting thread (client mode): 0xa2786b00
2025-12-03T10:18:44.675 [DEBUG] [Thread-114890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:18:44.695 [DEBUG] [Thread-114890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:18:44.695 [INFO] [Thread-114890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:18:44.698 [DEBUG] [Thread-114890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] client lang: <none>
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] server lang: <none>
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] kex follows: False
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] Compression: none
2025-12-03T10:18:44.699 [DEBUG] [Thread-114890] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:18:44.716 [DEBUG] [Thread-114890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:18:44.717 [DEBUG] [Thread-114890] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:18:44.717 [DEBUG] [Thread-114890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:18:44.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:18:44.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:18:44.719 [DEBUG] [Thread-114890] [transport.py] [_log()] userauth is OK
2025-12-03T10:18:44.719 [DEBUG] [Thread-114890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:18:44.719 [DEBUG] [Thread-114890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:18:44.719 [DEBUG] [Thread-114890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:18:44.719 [DEBUG] [Thread-114890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:18:44.737 [INFO] [Thread-114890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:18:44.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:18:45.374 [DEBUG] [Thread-114890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:18:45.374 [DEBUG] [Thread-114890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:18:45.374 [DEBUG] [Thread-114890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:18:45.415 [DEBUG] [Thread-114890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:18:45.415 [DEBUG] [Thread-114890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:18:45.418 [DEBUG] [Thread-114890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:18:45.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:18:45.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:18:45.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:18:45.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:18:45.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:18:45.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:18:45.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:18:45.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:18:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:18:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.345885 -999.00  +15.50   9.19     53   +6.00 1 2 1 1 1   888    0 9.85 46.83 ----- 11.7 9.2 156.4 14.2 23.1 -23.1 22.0 -23.1 21.4 -20.4 22.1 -21.5
2025-12-03T10:18:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:18:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:18:45.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.345885
2025-12-03T10:18:45.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:18:45.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:18:45.440 [DEBUG] [Thread-114890] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:18:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:18:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:18:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:18:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:18:21', tmtdew=10.7, humidity=48.9, cloud=0.0, wind=18.44, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:18:04.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:18:45.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:18:45.538 [DEBUG] [Thread-114893] [transport.py] [_log()] starting thread (client mode): 0xa51cfc70
2025-12-03T10:18:45.538 [DEBUG] [Thread-114893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:18:45.554 [DEBUG] [Thread-114893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:18:45.554 [INFO] [Thread-114893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:45.562 [DEBUG] [Thread-114893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] client lang: <none>
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] server lang: <none>
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] kex follows: False
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] Compression: none
2025-12-03T10:18:45.563 [DEBUG] [Thread-114893] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:18:45.617 [DEBUG] [Thread-114893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:18:45.618 [DEBUG] [Thread-114893] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:18:45.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:18:45.619 [DEBUG] [Thread-114893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:18:45.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:18:45.675 [DEBUG] [Thread-114893] [transport.py] [_log()] userauth is OK
2025-12-03T10:18:45.675 [DEBUG] [Thread-114893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:18:45.675 [DEBUG] [Thread-114893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:18:45.675 [DEBUG] [Thread-114893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:18:45.675 [DEBUG] [Thread-114893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:18:45.693 [INFO] [Thread-114893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:18:45.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:18:45.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:18:46.522 [DEBUG] [Thread-114893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:18:46.523 [DEBUG] [Thread-114893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:18:46.571 [DEBUG] [Thread-114893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:18:46.571 [DEBUG] [Thread-114893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:18:46.580 [DEBUG] [Thread-114893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:18:46.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:18:46.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:18:46.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:18:46.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:18:46.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:18:46.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:18:46.616 [DEBUG] [Thread-114893] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:18:59.061 [DEBUG] [Thread-114895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:14.107 [DEBUG] [Thread-114896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:16.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:19:16.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:19:16.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:19:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 18, 53), 10.91, 48.18, 0.0, 17.89, 15.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:19:17.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:18:53
2025-12-03T10:19:17.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:19:17.588 [DEBUG] [Thread-114897] [transport.py] [_log()] starting thread (client mode): 0xa2786e60
2025-12-03T10:19:17.588 [DEBUG] [Thread-114897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:19:17.609 [DEBUG] [Thread-114897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:19:17.609 [INFO] [Thread-114897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] client lang: <none>
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] server lang: <none>
2025-12-03T10:19:17.613 [DEBUG] [Thread-114897] [transport.py] [_log()] kex follows: False
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] Compression: none
2025-12-03T10:19:17.614 [DEBUG] [Thread-114897] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:19:17.631 [DEBUG] [Thread-114897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:19:17.632 [DEBUG] [Thread-114897] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:19:17.632 [DEBUG] [Thread-114897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:19:17.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:19:17.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:19:17.634 [DEBUG] [Thread-114897] [transport.py] [_log()] userauth is OK
2025-12-03T10:19:17.634 [DEBUG] [Thread-114897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:19:17.634 [DEBUG] [Thread-114897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:19:17.634 [DEBUG] [Thread-114897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:19:17.634 [DEBUG] [Thread-114897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:19:17.652 [INFO] [Thread-114897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:19:17.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:19:18.333 [DEBUG] [Thread-114897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:19:18.333 [DEBUG] [Thread-114897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:19:18.333 [DEBUG] [Thread-114897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:19:18.374 [DEBUG] [Thread-114897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:19:18.374 [DEBUG] [Thread-114897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:19:18.377 [DEBUG] [Thread-114897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:19:18.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:19:18.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:19:18.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:19:18.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:19:18.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:19:18.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:19:18.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:19:18.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.346232 -999.00  +15.70  20.01     51   +5.90 1 2 1 1 1   888    0 10.01 49.70 ----- 15.4 20.0 151.4 25.0 23.0 -26.7 22.1 -23.1 21.4 -22.6 22.1 -22.3
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.346232
2025-12-03T10:19:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:19:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:19:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:19:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:19:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:19:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:18:53', tmtdew=10.91, humidity=48.18, cloud=0.0, wind=17.89, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:18:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:19:18.404 [DEBUG] [Thread-114897] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:19:18.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:19:18.499 [DEBUG] [Thread-114900] [transport.py] [_log()] starting thread (client mode): 0xa2787820
2025-12-03T10:19:18.499 [DEBUG] [Thread-114900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:19:18.514 [DEBUG] [Thread-114900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:19:18.514 [INFO] [Thread-114900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:18.522 [DEBUG] [Thread-114900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] client lang: <none>
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] server lang: <none>
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] kex follows: False
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] Compression: none
2025-12-03T10:19:18.523 [DEBUG] [Thread-114900] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:19:18.583 [DEBUG] [Thread-114900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:19:18.583 [DEBUG] [Thread-114900] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:19:18.584 [DEBUG] [Thread-114900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:19:18.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:19:18.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:19:18.643 [DEBUG] [Thread-114900] [transport.py] [_log()] userauth is OK
2025-12-03T10:19:18.643 [DEBUG] [Thread-114900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:19:18.643 [DEBUG] [Thread-114900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:19:18.643 [DEBUG] [Thread-114900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:19:18.644 [DEBUG] [Thread-114900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:19:18.665 [INFO] [Thread-114900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:19:18.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:19:18.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:19:19.540 [DEBUG] [Thread-114900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:19:19.541 [DEBUG] [Thread-114900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:19:19.589 [DEBUG] [Thread-114900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:19:19.589 [DEBUG] [Thread-114900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:19:19.598 [DEBUG] [Thread-114900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:19:19.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:19:19.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:19:19.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:19:19.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:19:19.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:19:19.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:19:19.632 [DEBUG] [Thread-114900] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:19:29.133 [DEBUG] [Thread-114902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:40.130 [DEBUG] [Thread-114903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:44.179 [DEBUG] [Thread-114904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:44.690 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:44.691 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:19:49.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:19:49.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:19:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:19:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 19, 25), 10.75, 48.7, 0.0, 22.32, 15.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:19:50.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:19:25
2025-12-03T10:19:50.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:19:50.653 [DEBUG] [Thread-114905] [transport.py] [_log()] starting thread (client mode): 0xa27878e0
2025-12-03T10:19:50.653 [DEBUG] [Thread-114905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:19:50.673 [DEBUG] [Thread-114905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:19:50.673 [INFO] [Thread-114905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] client lang: <none>
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] server lang: <none>
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] kex follows: False
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:19:50.676 [DEBUG] [Thread-114905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:19:50.677 [DEBUG] [Thread-114905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:19:50.677 [DEBUG] [Thread-114905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:19:50.677 [DEBUG] [Thread-114905] [transport.py] [_log()] Compression: none
2025-12-03T10:19:50.677 [DEBUG] [Thread-114905] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:19:50.692 [DEBUG] [Thread-114905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:19:50.693 [DEBUG] [Thread-114905] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:19:50.693 [DEBUG] [Thread-114905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:19:50.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:19:50.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:19:50.694 [DEBUG] [Thread-114905] [transport.py] [_log()] userauth is OK
2025-12-03T10:19:50.694 [DEBUG] [Thread-114905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:19:50.694 [DEBUG] [Thread-114905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:19:50.694 [DEBUG] [Thread-114905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:19:50.694 [DEBUG] [Thread-114905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:19:50.703 [INFO] [Thread-114905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:19:50.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:19:51.342 [DEBUG] [Thread-114905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:19:51.342 [DEBUG] [Thread-114905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:19:51.343 [DEBUG] [Thread-114905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:19:51.383 [DEBUG] [Thread-114905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:19:51.384 [DEBUG] [Thread-114905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:19:51.386 [DEBUG] [Thread-114905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:19:51.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:19:51.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:19:51.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:19:51.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:19:51.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:19:51.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:19:51.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.346579 -999.00  +15.70  15.11     50   +5.60 1 1 1 1 1   888    0 10.36 55.76 ----- 16.2 15.1 145.4 21.7 22.7 -26.1 21.8 -25.1 21.1 -23.3 21.9 -26.2
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:19:51.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.346579
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:19:51.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:19:25', tmtdew=10.75, humidity=48.7, cloud=0.0, wind=22.32, temperature=15.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:19:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:19:51.403 [DEBUG] [Thread-114905] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:19:51.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:19:51.499 [DEBUG] [Thread-114908] [transport.py] [_log()] starting thread (client mode): 0xa27eb220
2025-12-03T10:19:51.499 [DEBUG] [Thread-114908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:19:51.514 [DEBUG] [Thread-114908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:19:51.514 [INFO] [Thread-114908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:19:51.521 [DEBUG] [Thread-114908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:19:51.521 [DEBUG] [Thread-114908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] client lang: <none>
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] server lang: <none>
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] kex follows: False
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] Compression: none
2025-12-03T10:19:51.522 [DEBUG] [Thread-114908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:19:51.584 [DEBUG] [Thread-114908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:19:51.584 [DEBUG] [Thread-114908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:19:51.584 [DEBUG] [Thread-114908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:19:51.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:19:51.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:19:51.642 [DEBUG] [Thread-114908] [transport.py] [_log()] userauth is OK
2025-12-03T10:19:51.642 [DEBUG] [Thread-114908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:19:51.642 [DEBUG] [Thread-114908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:19:51.642 [DEBUG] [Thread-114908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:19:51.642 [DEBUG] [Thread-114908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:19:51.669 [INFO] [Thread-114908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:19:51.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:19:51.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:19:52.517 [DEBUG] [Thread-114908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:19:52.517 [DEBUG] [Thread-114908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:19:52.564 [DEBUG] [Thread-114908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:19:52.564 [DEBUG] [Thread-114908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:19:52.575 [DEBUG] [Thread-114908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:19:52.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:19:52.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:19:52.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:19:52.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:19:52.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:19:52.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:19:52.617 [DEBUG] [Thread-114908] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:19:59.204 [DEBUG] [Thread-114910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:14.241 [DEBUG] [Thread-114911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:20:22.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:20:22.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:20:23.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 19, 57), 10.93, 47.96, 0.0, 22.07, 15.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:20:23.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:19:57
2025-12-03T10:20:23.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:20:23.607 [DEBUG] [Thread-114912] [transport.py] [_log()] starting thread (client mode): 0xa27ea9e0
2025-12-03T10:20:23.607 [DEBUG] [Thread-114912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:20:23.627 [DEBUG] [Thread-114912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:20:23.627 [INFO] [Thread-114912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] client lang: <none>
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] server lang: <none>
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] kex follows: False
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:20:23.631 [DEBUG] [Thread-114912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:20:23.632 [DEBUG] [Thread-114912] [transport.py] [_log()] Compression: none
2025-12-03T10:20:23.632 [DEBUG] [Thread-114912] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:20:23.648 [DEBUG] [Thread-114912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:20:23.649 [DEBUG] [Thread-114912] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:20:23.649 [DEBUG] [Thread-114912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:20:23.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:20:23.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:20:23.651 [DEBUG] [Thread-114912] [transport.py] [_log()] userauth is OK
2025-12-03T10:20:23.651 [DEBUG] [Thread-114912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:20:23.651 [DEBUG] [Thread-114912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:20:23.651 [DEBUG] [Thread-114912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:20:23.651 [DEBUG] [Thread-114912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:20:23.669 [INFO] [Thread-114912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:20:23.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:20:24.333 [DEBUG] [Thread-114912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:20:24.333 [DEBUG] [Thread-114912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:20:24.334 [DEBUG] [Thread-114912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:20:24.375 [DEBUG] [Thread-114912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:20:24.375 [DEBUG] [Thread-114912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:20:24.378 [DEBUG] [Thread-114912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:20:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:20:24.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:20:24.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:20:24.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:20:24.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:20:24.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:20:24.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:20:24.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.346926 -999.00  +15.60  23.63     53   +6.10 1 2 1 1 1   888    0 10.31 55.60 ----- 22.2 23.6 134.4 27.6 22.8 -23.1 21.9 -24.0 21.4 -20.9 22.0 -22.7
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.346926
2025-12-03T10:20:24.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:20:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:20:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:20:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:20:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:20:24.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:19:57', tmtdew=10.93, humidity=47.96, cloud=0.0, wind=22.07, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:19:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:20:24.401 [DEBUG] [Thread-114912] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:20:24.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:20:24.496 [DEBUG] [Thread-114915] [transport.py] [_log()] starting thread (client mode): 0xa270bb20
2025-12-03T10:20:24.496 [DEBUG] [Thread-114915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:20:24.511 [DEBUG] [Thread-114915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:20:24.511 [INFO] [Thread-114915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] client lang: <none>
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] server lang: <none>
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] kex follows: False
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] Compression: none
2025-12-03T10:20:24.519 [DEBUG] [Thread-114915] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:20:24.578 [DEBUG] [Thread-114915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:20:24.578 [DEBUG] [Thread-114915] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:20:24.579 [DEBUG] [Thread-114915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:20:24.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:20:24.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:20:24.634 [DEBUG] [Thread-114915] [transport.py] [_log()] userauth is OK
2025-12-03T10:20:24.634 [DEBUG] [Thread-114915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:20:24.635 [DEBUG] [Thread-114915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:20:24.635 [DEBUG] [Thread-114915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:20:24.635 [DEBUG] [Thread-114915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:20:24.654 [INFO] [Thread-114915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:20:24.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:20:24.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:20:25.504 [DEBUG] [Thread-114915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:20:25.504 [DEBUG] [Thread-114915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:20:25.554 [DEBUG] [Thread-114915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:20:25.554 [DEBUG] [Thread-114915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:20:25.565 [DEBUG] [Thread-114915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:20:25.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:20:25.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:20:25.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:20:25.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:20:25.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:20:25.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:20:25.608 [DEBUG] [Thread-114915] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:20:29.269 [DEBUG] [Thread-114917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:40.186 [DEBUG] [Thread-114918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:44.300 [DEBUG] [Thread-114919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:44.834 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:44.835 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:20:55.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:20:55.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:20:55.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:20:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 20, 29), 11.01, 47.77, 0.0, 25.18, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:20:56.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:20:29
2025-12-03T10:20:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:20:56.598 [DEBUG] [Thread-114920] [transport.py] [_log()] starting thread (client mode): 0xa51cc730
2025-12-03T10:20:56.598 [DEBUG] [Thread-114920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:20:56.615 [DEBUG] [Thread-114920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:20:56.615 [INFO] [Thread-114920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] client lang: <none>
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] server lang: <none>
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] kex follows: False
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] Compression: none
2025-12-03T10:20:56.617 [DEBUG] [Thread-114920] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:20:56.625 [DEBUG] [Thread-114920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:20:56.626 [DEBUG] [Thread-114920] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:20:56.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:20:56.626 [DEBUG] [Thread-114920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:20:56.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:20:56.627 [DEBUG] [Thread-114920] [transport.py] [_log()] userauth is OK
2025-12-03T10:20:56.627 [DEBUG] [Thread-114920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:20:56.628 [DEBUG] [Thread-114920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:20:56.628 [DEBUG] [Thread-114920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:20:56.628 [DEBUG] [Thread-114920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:20:56.641 [INFO] [Thread-114920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:20:56.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:20:57.226 [DEBUG] [Thread-114920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:20:57.226 [DEBUG] [Thread-114920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:20:57.227 [DEBUG] [Thread-114920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:20:57.267 [DEBUG] [Thread-114920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:20:57.267 [DEBUG] [Thread-114920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:20:57.270 [DEBUG] [Thread-114920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:20:57.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:20:57.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:20:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:20:57.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:20:57.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:20:57.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:20:57.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.347274 -999.00  +15.30  18.76     52   +5.60 1 2 1 1 1   888    0 10.70 64.97 ----- 19.2 18.8 125.2 27.0 22.9 -21.8 22.1 -21.7 21.5 -20.1 22.1 -21.3
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.347274
2025-12-03T10:20:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:20:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:20:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:20:29', tmtdew=11.01, humidity=47.77, cloud=0.0, wind=25.18, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:20:04.474', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:20:57.293 [DEBUG] [Thread-114920] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:20:57.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:20:57.398 [DEBUG] [Thread-114923] [transport.py] [_log()] starting thread (client mode): 0xa27e8c10
2025-12-03T10:20:57.398 [DEBUG] [Thread-114923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:20:57.412 [DEBUG] [Thread-114923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:20:57.412 [INFO] [Thread-114923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:20:57.420 [DEBUG] [Thread-114923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] client lang: <none>
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] server lang: <none>
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] kex follows: False
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:20:57.421 [DEBUG] [Thread-114923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:20:57.422 [DEBUG] [Thread-114923] [transport.py] [_log()] Compression: none
2025-12-03T10:20:57.422 [DEBUG] [Thread-114923] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:20:57.478 [DEBUG] [Thread-114923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:20:57.479 [DEBUG] [Thread-114923] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:20:57.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:20:57.480 [DEBUG] [Thread-114923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:20:57.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:20:57.534 [DEBUG] [Thread-114923] [transport.py] [_log()] userauth is OK
2025-12-03T10:20:57.535 [DEBUG] [Thread-114923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:20:57.535 [DEBUG] [Thread-114923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:20:57.535 [DEBUG] [Thread-114923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:20:57.535 [DEBUG] [Thread-114923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:20:57.555 [INFO] [Thread-114923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:20:57.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:20:57.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:20:58.380 [DEBUG] [Thread-114923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:20:58.380 [DEBUG] [Thread-114923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:20:58.429 [DEBUG] [Thread-114923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:20:58.429 [DEBUG] [Thread-114923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:20:58.438 [DEBUG] [Thread-114923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:20:58.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:20:58.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:20:58.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:20:58.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:20:58.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:20:58.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:20:58.472 [DEBUG] [Thread-114923] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:20:59.328 [DEBUG] [Thread-114925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:14.366 [DEBUG] [Thread-114926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:21:28.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:21:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:21:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 21, 1), 10.77, 48.51, 0.0, 23.27, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:21:29.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:21:01
2025-12-03T10:21:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:21:29.393 [DEBUG] [Thread-114927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:29.440 [DEBUG] [Thread-114928] [transport.py] [_log()] starting thread (client mode): 0xa51cf1c0
2025-12-03T10:21:29.440 [DEBUG] [Thread-114928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:21:29.461 [DEBUG] [Thread-114928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:21:29.461 [INFO] [Thread-114928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] client lang: <none>
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] server lang: <none>
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] kex follows: False
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:21:29.464 [DEBUG] [Thread-114928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:21:29.465 [DEBUG] [Thread-114928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:21:29.465 [DEBUG] [Thread-114928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:21:29.465 [DEBUG] [Thread-114928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:21:29.465 [DEBUG] [Thread-114928] [transport.py] [_log()] Compression: none
2025-12-03T10:21:29.465 [DEBUG] [Thread-114928] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:21:29.483 [DEBUG] [Thread-114928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:21:29.483 [DEBUG] [Thread-114928] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:21:29.484 [DEBUG] [Thread-114928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:21:29.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:21:29.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:21:29.486 [DEBUG] [Thread-114928] [transport.py] [_log()] userauth is OK
2025-12-03T10:21:29.486 [DEBUG] [Thread-114928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:21:29.486 [DEBUG] [Thread-114928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:21:29.486 [DEBUG] [Thread-114928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:21:29.486 [DEBUG] [Thread-114928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:21:29.502 [INFO] [Thread-114928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:21:29.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:21:30.134 [DEBUG] [Thread-114928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:21:30.134 [DEBUG] [Thread-114928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:21:30.134 [DEBUG] [Thread-114928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:21:30.175 [DEBUG] [Thread-114928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:21:30.175 [DEBUG] [Thread-114928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:21:30.178 [DEBUG] [Thread-114928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:21:30.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:21:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:21:30.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:21:30.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:21:30.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:21:30.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:21:30.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:21:30.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:21:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:21:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.347621 -999.00  +15.50  24.58     52   +5.80 1 2 1 1 1   888    0 10.89 69.41 ----- 23.8 24.6 141.0 27.1 23.0 -22.4 22.2 -22.1 21.6 -21.1 22.3 -20.6
2025-12-03T10:21:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:21:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:21:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.347621
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:21:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:21:01', tmtdew=10.77, humidity=48.51, cloud=0.0, wind=23.27, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:20:34.454', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:21:30.200 [DEBUG] [Thread-114928] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:21:30.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:21:30.297 [DEBUG] [Thread-114931] [transport.py] [_log()] starting thread (client mode): 0xa2786ec0
2025-12-03T10:21:30.297 [DEBUG] [Thread-114931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:21:30.312 [DEBUG] [Thread-114931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:21:30.312 [INFO] [Thread-114931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:21:30.319 [DEBUG] [Thread-114931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] client lang: <none>
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] server lang: <none>
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] kex follows: False
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:21:30.320 [DEBUG] [Thread-114931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:21:30.321 [DEBUG] [Thread-114931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:21:30.321 [DEBUG] [Thread-114931] [transport.py] [_log()] Compression: none
2025-12-03T10:21:30.321 [DEBUG] [Thread-114931] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:21:30.379 [DEBUG] [Thread-114931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:21:30.380 [DEBUG] [Thread-114931] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:21:30.380 [DEBUG] [Thread-114931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:21:30.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:21:30.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:21:30.439 [DEBUG] [Thread-114931] [transport.py] [_log()] userauth is OK
2025-12-03T10:21:30.439 [DEBUG] [Thread-114931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:21:30.439 [DEBUG] [Thread-114931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:21:30.439 [DEBUG] [Thread-114931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:21:30.439 [DEBUG] [Thread-114931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:21:30.460 [INFO] [Thread-114931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:21:30.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:21:30.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:21:31.269 [DEBUG] [Thread-114931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:21:31.269 [DEBUG] [Thread-114931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:21:31.316 [DEBUG] [Thread-114931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:21:31.317 [DEBUG] [Thread-114931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:21:31.325 [DEBUG] [Thread-114931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:21:31.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:21:31.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:21:31.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:21:31.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:21:31.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:21:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:21:31.359 [DEBUG] [Thread-114931] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:21:40.225 [DEBUG] [Thread-114933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:44.422 [DEBUG] [Thread-114934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:44.980 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:44.981 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:21:59.465 [DEBUG] [Thread-114935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:01.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:22:01.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:22:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:22:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 21, 33), 11.43, 46.8, 0.0, 26.99, 16.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:22:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:21:33
2025-12-03T10:22:02.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:22:02.346 [DEBUG] [Thread-114936] [transport.py] [_log()] starting thread (client mode): 0xa2708f40
2025-12-03T10:22:02.346 [DEBUG] [Thread-114936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:22:02.366 [DEBUG] [Thread-114936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:22:02.366 [INFO] [Thread-114936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:22:02.369 [DEBUG] [Thread-114936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:22:02.369 [DEBUG] [Thread-114936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] client lang: <none>
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] server lang: <none>
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] kex follows: False
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] Compression: none
2025-12-03T10:22:02.370 [DEBUG] [Thread-114936] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:22:02.387 [DEBUG] [Thread-114936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:22:02.387 [DEBUG] [Thread-114936] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:22:02.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:22:02.388 [DEBUG] [Thread-114936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:22:02.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:22:02.390 [DEBUG] [Thread-114936] [transport.py] [_log()] userauth is OK
2025-12-03T10:22:02.391 [DEBUG] [Thread-114936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:22:02.391 [DEBUG] [Thread-114936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:22:02.391 [DEBUG] [Thread-114936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:22:02.391 [DEBUG] [Thread-114936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:22:02.413 [INFO] [Thread-114936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:22:02.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:22:03.156 [DEBUG] [Thread-114936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:22:03.156 [DEBUG] [Thread-114936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:22:03.157 [DEBUG] [Thread-114936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:22:03.197 [DEBUG] [Thread-114936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:22:03.197 [DEBUG] [Thread-114936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:22:03.200 [DEBUG] [Thread-114936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:22:03.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:22:03.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:22:03.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:22:03.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:22:03.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:22:03.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:22:03.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.348315 -999.00  +15.50  17.47     53   +6.10 1 2 1 1 1   888    0 10.94 78.12 ----- 18.4 17.5 127.0 21.2 23.5 -21.9 22.7 -20.6 22.0 -18.9 22.6 -19.0
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:22:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.348315
2025-12-03T10:22:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:22:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:22:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:22:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:22:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:22:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:21:33', tmtdew=11.43, humidity=46.8, cloud=0.0, wind=26.99, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:21:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:22:03.224 [DEBUG] [Thread-114936] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:22:03.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:22:03.322 [DEBUG] [Thread-114939] [transport.py] [_log()] starting thread (client mode): 0xa27c3df0
2025-12-03T10:22:03.322 [DEBUG] [Thread-114939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:22:03.337 [DEBUG] [Thread-114939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:22:03.337 [INFO] [Thread-114939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:22:03.344 [DEBUG] [Thread-114939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] client lang: <none>
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] server lang: <none>
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] kex follows: False
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] Compression: none
2025-12-03T10:22:03.345 [DEBUG] [Thread-114939] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:22:03.402 [DEBUG] [Thread-114939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:22:03.402 [DEBUG] [Thread-114939] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:22:03.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:22:03.403 [DEBUG] [Thread-114939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:22:03.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:22:03.458 [DEBUG] [Thread-114939] [transport.py] [_log()] userauth is OK
2025-12-03T10:22:03.458 [DEBUG] [Thread-114939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:22:03.458 [DEBUG] [Thread-114939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:22:03.459 [DEBUG] [Thread-114939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:22:03.459 [DEBUG] [Thread-114939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:22:03.477 [INFO] [Thread-114939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:22:03.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:22:03.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:22:04.308 [DEBUG] [Thread-114939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:22:04.308 [DEBUG] [Thread-114939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:22:04.356 [DEBUG] [Thread-114939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:22:04.356 [DEBUG] [Thread-114939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:22:04.366 [DEBUG] [Thread-114939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:22:04.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:22:04.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:22:04.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:22:04.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:22:04.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:22:04.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:22:04.403 [DEBUG] [Thread-114939] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:22:14.497 [DEBUG] [Thread-114941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:29.546 [DEBUG] [Thread-114942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:22:34.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:22:34.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:22:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 22, 5), 10.97, 47.86, 0.0, 17.01, 15.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:22:35.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:22:05
2025-12-03T10:22:35.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:22:35.408 [DEBUG] [Thread-114943] [transport.py] [_log()] starting thread (client mode): 0xa270a740
2025-12-03T10:22:35.408 [DEBUG] [Thread-114943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:22:35.428 [DEBUG] [Thread-114943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:22:35.428 [INFO] [Thread-114943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:22:35.430 [DEBUG] [Thread-114943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] client lang: <none>
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] server lang: <none>
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] kex follows: False
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] Compression: none
2025-12-03T10:22:35.431 [DEBUG] [Thread-114943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:22:35.450 [DEBUG] [Thread-114943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:22:35.450 [DEBUG] [Thread-114943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:22:35.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:22:35.451 [DEBUG] [Thread-114943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:22:35.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:22:35.453 [DEBUG] [Thread-114943] [transport.py] [_log()] userauth is OK
2025-12-03T10:22:35.453 [DEBUG] [Thread-114943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:22:35.453 [DEBUG] [Thread-114943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:22:35.453 [DEBUG] [Thread-114943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:22:35.454 [DEBUG] [Thread-114943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:22:35.487 [INFO] [Thread-114943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:22:35.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:22:36.093 [DEBUG] [Thread-114943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:22:36.094 [DEBUG] [Thread-114943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:22:36.094 [DEBUG] [Thread-114943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:22:36.134 [DEBUG] [Thread-114943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:22:36.134 [DEBUG] [Thread-114943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:22:36.137 [DEBUG] [Thread-114943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:22:36.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:22:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:22:36.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:22:36.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:22:36.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:22:36.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:22:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:22:36.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.348662 -999.00  +15.80  14.74     54   +6.50 1 2 1 1 1   888    0 11.22 83.32 ----- 18.0 14.7 128.4 23.4 23.7 -21.5 22.9 -20.6 22.2 -19.2 22.8 -18.7
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.348662
2025-12-03T10:22:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:22:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:22:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:22:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:22:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:22:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:22:05', tmtdew=10.97, humidity=47.86, cloud=0.0, wind=17.01, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:22:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:22:36.159 [DEBUG] [Thread-114943] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:22:36.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:22:36.252 [DEBUG] [Thread-114946] [transport.py] [_log()] starting thread (client mode): 0xa27b7a60
2025-12-03T10:22:36.252 [DEBUG] [Thread-114946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:22:36.267 [DEBUG] [Thread-114946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:22:36.267 [INFO] [Thread-114946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:22:36.274 [DEBUG] [Thread-114946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:22:36.274 [DEBUG] [Thread-114946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] client lang: <none>
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] server lang: <none>
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] kex follows: False
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:22:36.275 [DEBUG] [Thread-114946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:22:36.276 [DEBUG] [Thread-114946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:22:36.276 [DEBUG] [Thread-114946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:22:36.276 [DEBUG] [Thread-114946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:22:36.276 [DEBUG] [Thread-114946] [transport.py] [_log()] Compression: none
2025-12-03T10:22:36.276 [DEBUG] [Thread-114946] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:22:36.334 [DEBUG] [Thread-114946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:22:36.334 [DEBUG] [Thread-114946] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:22:36.335 [DEBUG] [Thread-114946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:22:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:22:36.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:22:36.390 [DEBUG] [Thread-114946] [transport.py] [_log()] userauth is OK
2025-12-03T10:22:36.390 [DEBUG] [Thread-114946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:22:36.390 [DEBUG] [Thread-114946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:22:36.390 [DEBUG] [Thread-114946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:22:36.391 [DEBUG] [Thread-114946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:22:36.412 [INFO] [Thread-114946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:22:36.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:22:36.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:22:37.235 [DEBUG] [Thread-114946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:22:37.236 [DEBUG] [Thread-114946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:22:37.288 [DEBUG] [Thread-114946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:22:37.288 [DEBUG] [Thread-114946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:22:37.297 [DEBUG] [Thread-114946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:22:37.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:22:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:22:37.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:22:37.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:22:37.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:22:37.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:22:37.331 [DEBUG] [Thread-114946] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:22:40.260 [DEBUG] [Thread-114948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:44.574 [DEBUG] [Thread-114949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:45.125 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:45.126 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:22:59.622 [DEBUG] [Thread-114950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:07.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:23:07.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:23:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:23:08.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 22, 38), 11.09, 47.67, 0.0, 23.65, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:23:08.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:22:38
2025-12-03T10:23:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:23:08.392 [DEBUG] [Thread-114951] [transport.py] [_log()] starting thread (client mode): 0xa27e97b0
2025-12-03T10:23:08.393 [DEBUG] [Thread-114951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:23:08.413 [DEBUG] [Thread-114951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:23:08.413 [INFO] [Thread-114951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] client lang: <none>
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] server lang: <none>
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] kex follows: False
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] Compression: none
2025-12-03T10:23:08.417 [DEBUG] [Thread-114951] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:23:08.435 [DEBUG] [Thread-114951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:23:08.435 [DEBUG] [Thread-114951] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:23:08.435 [DEBUG] [Thread-114951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:23:08.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:23:08.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:23:08.436 [DEBUG] [Thread-114951] [transport.py] [_log()] userauth is OK
2025-12-03T10:23:08.436 [DEBUG] [Thread-114951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:23:08.436 [DEBUG] [Thread-114951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:23:08.436 [DEBUG] [Thread-114951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:23:08.436 [DEBUG] [Thread-114951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:23:08.444 [INFO] [Thread-114951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:23:08.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:23:09.227 [DEBUG] [Thread-114951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:23:09.227 [DEBUG] [Thread-114951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:23:09.227 [DEBUG] [Thread-114951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:23:09.268 [DEBUG] [Thread-114951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:23:09.268 [DEBUG] [Thread-114951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:23:09.270 [DEBUG] [Thread-114951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:23:09.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:23:09.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:23:09.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:23:09.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:23:09.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:23:09.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:23:09.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:23:09.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.349010 -999.00  +16.30  20.10     52   +6.60 1 2 1 1 1   888    0 11.33 84.56 ----- 22.6 20.1 163.2 26.4 23.8 -21.8 23.0 -21.5 22.3 -19.0 22.9 -19.1
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.349010
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:23:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:22:38', tmtdew=11.09, humidity=47.67, cloud=0.0, wind=23.65, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:22:34.464', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:23:09.288 [DEBUG] [Thread-114951] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:23:09.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:23:09.376 [DEBUG] [Thread-114954] [transport.py] [_log()] starting thread (client mode): 0xa27e81f0
2025-12-03T10:23:09.376 [DEBUG] [Thread-114954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:23:09.399 [DEBUG] [Thread-114954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:23:09.399 [INFO] [Thread-114954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:23:09.410 [DEBUG] [Thread-114954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] client lang: <none>
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] server lang: <none>
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] kex follows: False
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] Compression: none
2025-12-03T10:23:09.411 [DEBUG] [Thread-114954] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:23:09.471 [DEBUG] [Thread-114954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:23:09.471 [DEBUG] [Thread-114954] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:23:09.471 [DEBUG] [Thread-114954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:23:09.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:23:09.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:23:09.540 [DEBUG] [Thread-114954] [transport.py] [_log()] userauth is OK
2025-12-03T10:23:09.540 [DEBUG] [Thread-114954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:23:09.540 [DEBUG] [Thread-114954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:23:09.540 [DEBUG] [Thread-114954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:23:09.540 [DEBUG] [Thread-114954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:23:09.561 [INFO] [Thread-114954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:23:09.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:23:09.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:23:10.415 [DEBUG] [Thread-114954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:23:10.415 [DEBUG] [Thread-114954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:23:10.464 [DEBUG] [Thread-114954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:23:10.464 [DEBUG] [Thread-114954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:23:10.472 [DEBUG] [Thread-114954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:23:10.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:23:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:23:10.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:23:10.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:23:10.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:23:10.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:23:10.507 [DEBUG] [Thread-114954] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:23:14.653 [DEBUG] [Thread-114956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:29.691 [DEBUG] [Thread-114957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:40.301 [DEBUG] [Thread-114958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:40.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:23:40.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:23:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:23:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 23, 10), 10.93, 48.16, 0.0, 28.87, 16.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:23:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:23:10
2025-12-03T10:23:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:23:41.493 [DEBUG] [Thread-114959] [transport.py] [_log()] starting thread (client mode): 0xa27ea530
2025-12-03T10:23:41.494 [DEBUG] [Thread-114959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:23:41.512 [DEBUG] [Thread-114959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:23:41.512 [INFO] [Thread-114959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] client lang: <none>
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] server lang: <none>
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] kex follows: False
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:23:41.516 [DEBUG] [Thread-114959] [transport.py] [_log()] Compression: none
2025-12-03T10:23:41.517 [DEBUG] [Thread-114959] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:23:41.535 [DEBUG] [Thread-114959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:23:41.536 [DEBUG] [Thread-114959] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:23:41.536 [DEBUG] [Thread-114959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:23:41.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:23:41.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:23:41.538 [DEBUG] [Thread-114959] [transport.py] [_log()] userauth is OK
2025-12-03T10:23:41.538 [DEBUG] [Thread-114959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:23:41.539 [DEBUG] [Thread-114959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:23:41.539 [DEBUG] [Thread-114959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:23:41.539 [DEBUG] [Thread-114959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:23:41.574 [INFO] [Thread-114959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:23:41.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:23:42.185 [DEBUG] [Thread-114959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:23:42.185 [DEBUG] [Thread-114959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:23:42.185 [DEBUG] [Thread-114959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:23:42.225 [DEBUG] [Thread-114959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:23:42.226 [DEBUG] [Thread-114959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:23:42.228 [DEBUG] [Thread-114959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:23:42.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:23:42.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:23:42.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:23:42.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:23:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:23:42.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:23:42.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.349357 -999.00  +16.10  22.63     52   +6.40 1 1 1 1 1   888    0 11.61 93.94 ----- 22.2 22.6 186.2 31.3 23.7 -22.3 22.5 -28.2 21.6 -21.4 22.8 -22.6
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.349357
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:23:42.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:23:10', tmtdew=10.93, humidity=48.16, cloud=0.0, wind=28.87, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:23:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:23:42.249 [DEBUG] [Thread-114959] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:23:42.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:23:42.349 [DEBUG] [Thread-114962] [transport.py] [_log()] starting thread (client mode): 0xa271f700
2025-12-03T10:23:42.350 [DEBUG] [Thread-114962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:23:42.364 [DEBUG] [Thread-114962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:23:42.364 [INFO] [Thread-114962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] client lang: <none>
2025-12-03T10:23:42.372 [DEBUG] [Thread-114962] [transport.py] [_log()] server lang: <none>
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] kex follows: False
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] Compression: none
2025-12-03T10:23:42.373 [DEBUG] [Thread-114962] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:23:42.429 [DEBUG] [Thread-114962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:23:42.429 [DEBUG] [Thread-114962] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:23:42.429 [DEBUG] [Thread-114962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:23:42.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:23:42.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:23:42.486 [DEBUG] [Thread-114962] [transport.py] [_log()] userauth is OK
2025-12-03T10:23:42.486 [DEBUG] [Thread-114962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:23:42.486 [DEBUG] [Thread-114962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:23:42.486 [DEBUG] [Thread-114962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:23:42.486 [DEBUG] [Thread-114962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:23:42.500 [INFO] [Thread-114962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:23:42.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:23:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:23:43.320 [DEBUG] [Thread-114962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:23:43.320 [DEBUG] [Thread-114962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:23:43.369 [DEBUG] [Thread-114962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:23:43.369 [DEBUG] [Thread-114962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:23:43.377 [DEBUG] [Thread-114962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:23:43.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:23:43.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:23:43.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:23:43.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:23:43.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:23:43.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:23:43.410 [DEBUG] [Thread-114962] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:23:44.718 [DEBUG] [Thread-114964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:45.286 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:45.286 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:23:59.751 [DEBUG] [Thread-114965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:13.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:24:13.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:24:13.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:24:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 23, 42), 10.72, 48.85, 0.0, 23.2, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:24:14.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:23:42
2025-12-03T10:24:14.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:24:14.385 [DEBUG] [Thread-114966] [transport.py] [_log()] starting thread (client mode): 0xa27b6b30
2025-12-03T10:24:14.385 [DEBUG] [Thread-114966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:24:14.407 [DEBUG] [Thread-114966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:24:14.407 [INFO] [Thread-114966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] client lang: <none>
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] server lang: <none>
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] kex follows: False
2025-12-03T10:24:14.410 [DEBUG] [Thread-114966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] Compression: none
2025-12-03T10:24:14.411 [DEBUG] [Thread-114966] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:24:14.425 [DEBUG] [Thread-114966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:24:14.425 [DEBUG] [Thread-114966] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:24:14.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:24:14.425 [DEBUG] [Thread-114966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:24:14.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:24:14.426 [DEBUG] [Thread-114966] [transport.py] [_log()] userauth is OK
2025-12-03T10:24:14.426 [DEBUG] [Thread-114966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:24:14.426 [DEBUG] [Thread-114966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:24:14.426 [DEBUG] [Thread-114966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:24:14.426 [DEBUG] [Thread-114966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:24:14.436 [INFO] [Thread-114966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:24:14.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:24:14.776 [DEBUG] [Thread-114968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:15.190 [DEBUG] [Thread-114966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:24:15.190 [DEBUG] [Thread-114966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:24:15.191 [DEBUG] [Thread-114966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:24:15.232 [DEBUG] [Thread-114966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:24:15.232 [DEBUG] [Thread-114966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:24:15.234 [DEBUG] [Thread-114966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:24:15.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:24:15.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:24:15.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:24:15.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:24:15.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:24:15.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:24:15.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.349704 -999.00  +15.90  23.29     53   +6.40 1 2 1 1 1   888    0 12.21 105.09 ----- 19.3 23.3 159.0 28.7 23.9 -22.8 22.8 -20.2 22.3 -19.3 23.0 -20.6
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.349704
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:24:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:23:42', tmtdew=10.72, humidity=48.85, cloud=0.0, wind=23.2, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:23:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:24:15.252 [DEBUG] [Thread-114966] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:24:15.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:24:15.337 [DEBUG] [Thread-114970] [transport.py] [_log()] starting thread (client mode): 0xa27c0970
2025-12-03T10:24:15.337 [DEBUG] [Thread-114970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:24:15.355 [DEBUG] [Thread-114970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:24:15.355 [INFO] [Thread-114970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:24:15.363 [DEBUG] [Thread-114970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:24:15.363 [DEBUG] [Thread-114970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:24:15.363 [DEBUG] [Thread-114970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:24:15.363 [DEBUG] [Thread-114970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] client lang: <none>
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] server lang: <none>
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] kex follows: False
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] Compression: none
2025-12-03T10:24:15.364 [DEBUG] [Thread-114970] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:24:15.421 [DEBUG] [Thread-114970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:24:15.421 [DEBUG] [Thread-114970] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:24:15.421 [DEBUG] [Thread-114970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:24:15.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:24:15.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:24:15.482 [DEBUG] [Thread-114970] [transport.py] [_log()] userauth is OK
2025-12-03T10:24:15.482 [DEBUG] [Thread-114970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:24:15.482 [DEBUG] [Thread-114970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:24:15.482 [DEBUG] [Thread-114970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:24:15.482 [DEBUG] [Thread-114970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:24:15.495 [INFO] [Thread-114970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:24:15.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:24:15.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:24:16.309 [DEBUG] [Thread-114970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:24:16.309 [DEBUG] [Thread-114970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:24:16.358 [DEBUG] [Thread-114970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:24:16.358 [DEBUG] [Thread-114970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:24:16.367 [DEBUG] [Thread-114970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:24:16.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:24:16.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:24:16.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:24:16.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:24:16.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:24:16.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:24:16.401 [DEBUG] [Thread-114970] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:24:29.802 [DEBUG] [Thread-114972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:40.368 [DEBUG] [Thread-114973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:44.848 [DEBUG] [Thread-114974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:45.426 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:45.427 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:24:46.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:24:46.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:24:46.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:24:47.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 24, 14), 10.84, 48.5, 0.0, 27.84, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:24:47.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:24:14
2025-12-03T10:24:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:24:47.479 [DEBUG] [Thread-114975] [transport.py] [_log()] starting thread (client mode): 0xa271c850
2025-12-03T10:24:47.479 [DEBUG] [Thread-114975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:24:47.499 [DEBUG] [Thread-114975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:24:47.499 [INFO] [Thread-114975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] client lang: <none>
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] server lang: <none>
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] kex follows: False
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] Compression: none
2025-12-03T10:24:47.503 [DEBUG] [Thread-114975] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:24:47.519 [DEBUG] [Thread-114975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:24:47.519 [DEBUG] [Thread-114975] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:24:47.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:24:47.519 [DEBUG] [Thread-114975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:24:47.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:24:47.520 [DEBUG] [Thread-114975] [transport.py] [_log()] userauth is OK
2025-12-03T10:24:47.520 [DEBUG] [Thread-114975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:24:47.520 [DEBUG] [Thread-114975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:24:47.520 [DEBUG] [Thread-114975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:24:47.520 [DEBUG] [Thread-114975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:24:47.537 [INFO] [Thread-114975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:24:47.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:24:48.155 [DEBUG] [Thread-114975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:24:48.155 [DEBUG] [Thread-114975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:24:48.155 [DEBUG] [Thread-114975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:24:48.196 [DEBUG] [Thread-114975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:24:48.196 [DEBUG] [Thread-114975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:24:48.197 [DEBUG] [Thread-114975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:24:48.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:24:48.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:24:48.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:24:48.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:24:48.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:24:48.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:24:48.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.350051 -999.00  +15.90  15.84     53   +6.40 1 2 1 1 1   888    0 12.28 109.84 ----- 18.0 15.8 149.4 28.7 23.8 -24.5 22.9 -22.8 22.2 -21.6 23.1 -19.8
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.350051
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:24:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:24:14', tmtdew=10.84, humidity=48.5, cloud=0.0, wind=27.84, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:24:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:24:48.216 [DEBUG] [Thread-114975] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:24:48.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:24:48.301 [DEBUG] [Thread-114978] [transport.py] [_log()] starting thread (client mode): 0xa27c1390
2025-12-03T10:24:48.301 [DEBUG] [Thread-114978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:24:48.315 [DEBUG] [Thread-114978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:24:48.315 [INFO] [Thread-114978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] client lang: <none>
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] server lang: <none>
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] kex follows: False
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] Compression: none
2025-12-03T10:24:48.325 [DEBUG] [Thread-114978] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:24:48.381 [DEBUG] [Thread-114978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:24:48.381 [DEBUG] [Thread-114978] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:24:48.381 [DEBUG] [Thread-114978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:24:48.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:24:48.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:24:48.440 [DEBUG] [Thread-114978] [transport.py] [_log()] userauth is OK
2025-12-03T10:24:48.440 [DEBUG] [Thread-114978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:24:48.440 [DEBUG] [Thread-114978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:24:48.440 [DEBUG] [Thread-114978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:24:48.440 [DEBUG] [Thread-114978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:24:48.459 [INFO] [Thread-114978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:24:48.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:24:48.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:24:49.322 [DEBUG] [Thread-114978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:24:49.322 [DEBUG] [Thread-114978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:24:49.370 [DEBUG] [Thread-114978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:24:49.370 [DEBUG] [Thread-114978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:24:49.378 [DEBUG] [Thread-114978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:24:49.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:24:49.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:24:49.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:24:49.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:24:49.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:24:49.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:24:49.425 [DEBUG] [Thread-114978] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:24:59.882 [DEBUG] [Thread-114980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:14.929 [DEBUG] [Thread-114981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:19.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:25:19.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:25:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:25:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 24, 46), 11.09, 47.65, 0.0, 23.11, 16.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:25:20.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:24:46
2025-12-03T10:25:20.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:25:20.465 [DEBUG] [Thread-114982] [transport.py] [_log()] starting thread (client mode): 0xa27b4640
2025-12-03T10:25:20.465 [DEBUG] [Thread-114982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:25:20.486 [DEBUG] [Thread-114982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:25:20.486 [INFO] [Thread-114982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] client lang: <none>
2025-12-03T10:25:20.490 [DEBUG] [Thread-114982] [transport.py] [_log()] server lang: <none>
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] kex follows: False
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] Compression: none
2025-12-03T10:25:20.491 [DEBUG] [Thread-114982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:25:20.508 [DEBUG] [Thread-114982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:25:20.509 [DEBUG] [Thread-114982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:25:20.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:25:20.510 [DEBUG] [Thread-114982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:25:20.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:25:20.511 [DEBUG] [Thread-114982] [transport.py] [_log()] userauth is OK
2025-12-03T10:25:20.511 [DEBUG] [Thread-114982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:25:20.511 [DEBUG] [Thread-114982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:25:20.512 [DEBUG] [Thread-114982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:25:20.512 [DEBUG] [Thread-114982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:25:20.534 [INFO] [Thread-114982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:25:20.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:25:21.578 [DEBUG] [Thread-114982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:25:21.579 [DEBUG] [Thread-114982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:25:21.579 [DEBUG] [Thread-114982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:25:21.619 [DEBUG] [Thread-114982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:25:21.619 [DEBUG] [Thread-114982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:25:21.622 [DEBUG] [Thread-114982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:25:21.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:25:21.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:25:21.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:25:21.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:25:21.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:25:21.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:25:21.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.350398 -999.00  +16.00  14.61     53   +6.50 1 2 1 1 1   888    0 11.96 103.37 ----- 17.0 14.6 157.0 18.5 23.6 -24.6 22.8 -23.0 22.1 -21.4 22.9 -22.5
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.350398
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:25:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:25:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:25:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:25:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:25:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:24:46', tmtdew=11.09, humidity=47.65, cloud=0.0, wind=23.11, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:24:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:25:21.644 [DEBUG] [Thread-114982] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:25:21.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:25:21.740 [DEBUG] [Thread-114985] [transport.py] [_log()] starting thread (client mode): 0xa27b51b0
2025-12-03T10:25:21.741 [DEBUG] [Thread-114985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:25:21.755 [DEBUG] [Thread-114985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:25:21.756 [INFO] [Thread-114985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:25:21.763 [DEBUG] [Thread-114985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:25:21.763 [DEBUG] [Thread-114985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:25:21.763 [DEBUG] [Thread-114985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:25:21.763 [DEBUG] [Thread-114985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] client lang: <none>
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] server lang: <none>
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] kex follows: False
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:25:21.764 [DEBUG] [Thread-114985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:25:21.765 [DEBUG] [Thread-114985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:25:21.765 [DEBUG] [Thread-114985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:25:21.765 [DEBUG] [Thread-114985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:25:21.765 [DEBUG] [Thread-114985] [transport.py] [_log()] Compression: none
2025-12-03T10:25:21.765 [DEBUG] [Thread-114985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:25:21.822 [DEBUG] [Thread-114985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:25:21.822 [DEBUG] [Thread-114985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:25:21.823 [DEBUG] [Thread-114985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:25:21.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:25:21.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:25:21.878 [DEBUG] [Thread-114985] [transport.py] [_log()] userauth is OK
2025-12-03T10:25:21.878 [DEBUG] [Thread-114985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:25:21.878 [DEBUG] [Thread-114985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:25:21.878 [DEBUG] [Thread-114985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:25:21.879 [DEBUG] [Thread-114985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:25:21.897 [INFO] [Thread-114985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:25:21.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:25:21.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:25:22.744 [DEBUG] [Thread-114985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:25:22.744 [DEBUG] [Thread-114985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:25:22.793 [DEBUG] [Thread-114985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:25:22.794 [DEBUG] [Thread-114985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:25:22.802 [DEBUG] [Thread-114985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:25:22.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:25:22.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:25:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:25:22.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:25:22.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:25:22.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:25:22.835 [DEBUG] [Thread-114985] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:25:29.956 [DEBUG] [Thread-114987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:40.397 [DEBUG] [Thread-114988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:45.002 [DEBUG] [Thread-114989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:45.566 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:45.567 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:25:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:25:52.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:25:52.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:25:53.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 25, 50), 11.02, 48.07, 0.0, 24.86, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:25:53.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:25:50
2025-12-03T10:25:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:25:53.851 [DEBUG] [Thread-114990] [transport.py] [_log()] starting thread (client mode): 0xa270aef0
2025-12-03T10:25:53.851 [DEBUG] [Thread-114990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:25:53.871 [DEBUG] [Thread-114990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:25:53.872 [INFO] [Thread-114990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:25:53.874 [DEBUG] [Thread-114990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] client lang: <none>
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] server lang: <none>
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] kex follows: False
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] Compression: none
2025-12-03T10:25:53.875 [DEBUG] [Thread-114990] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:25:53.893 [DEBUG] [Thread-114990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:25:53.894 [DEBUG] [Thread-114990] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:25:53.894 [DEBUG] [Thread-114990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:25:53.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:25:53.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:25:53.896 [DEBUG] [Thread-114990] [transport.py] [_log()] userauth is OK
2025-12-03T10:25:53.896 [DEBUG] [Thread-114990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:25:53.896 [DEBUG] [Thread-114990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:25:53.896 [DEBUG] [Thread-114990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:25:53.896 [DEBUG] [Thread-114990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:25:53.919 [INFO] [Thread-114990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:25:53.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:25:54.540 [DEBUG] [Thread-114990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:25:54.540 [DEBUG] [Thread-114990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:25:54.541 [DEBUG] [Thread-114990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:25:54.581 [DEBUG] [Thread-114990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:25:54.581 [DEBUG] [Thread-114990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:25:54.583 [DEBUG] [Thread-114990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:25:54.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:25:54.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:25:54.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:25:54.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:25:54.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:25:54.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:25:54.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:25:54.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.351093 -999.00  +16.00  15.74     52   +6.30 1 2 1 1 1   888    0 12.58 121.41 ----- 19.6 15.7 140.4 25.0 23.2 -22.7 22.5 -23.7 22.0 -20.9 22.6 -24.5
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.351093
2025-12-03T10:25:54.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:25:54.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:25:54.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:25:54.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:25:54.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:25:54.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:25:50', tmtdew=11.02, humidity=48.07, cloud=0.0, wind=24.86, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:25:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:25:54.608 [DEBUG] [Thread-114990] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:25:54.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:25:54.703 [DEBUG] [Thread-114993] [transport.py] [_log()] starting thread (client mode): 0xa51cdbd0
2025-12-03T10:25:54.703 [DEBUG] [Thread-114993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:25:54.718 [DEBUG] [Thread-114993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:25:54.719 [INFO] [Thread-114993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] client lang: <none>
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] server lang: <none>
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] kex follows: False
2025-12-03T10:25:54.726 [DEBUG] [Thread-114993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] Compression: none
2025-12-03T10:25:54.727 [DEBUG] [Thread-114993] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:25:54.781 [DEBUG] [Thread-114993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:25:54.781 [DEBUG] [Thread-114993] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:25:54.781 [DEBUG] [Thread-114993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:25:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:25:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:25:54.838 [DEBUG] [Thread-114993] [transport.py] [_log()] userauth is OK
2025-12-03T10:25:54.838 [DEBUG] [Thread-114993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:25:54.838 [DEBUG] [Thread-114993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:25:54.838 [DEBUG] [Thread-114993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:25:54.838 [DEBUG] [Thread-114993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:25:54.857 [INFO] [Thread-114993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:25:54.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:25:54.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:25:55.687 [DEBUG] [Thread-114993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:25:55.688 [DEBUG] [Thread-114993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:25:55.736 [DEBUG] [Thread-114993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:25:55.736 [DEBUG] [Thread-114993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:25:55.745 [DEBUG] [Thread-114993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:25:55.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:25:55.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:25:55.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:25:55.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:25:55.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:25:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:25:55.779 [DEBUG] [Thread-114993] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:26:00.033 [DEBUG] [Thread-114995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:15.075 [DEBUG] [Thread-114996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:26:25.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:26:25.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:26:26.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 26, 22), 10.99, 48.13, 0.0, 28.13, 15.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:26:26.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:26:22
2025-12-03T10:26:26.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:26:26.784 [DEBUG] [Thread-114997] [transport.py] [_log()] starting thread (client mode): 0xa271d750
2025-12-03T10:26:26.784 [DEBUG] [Thread-114997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:26:26.803 [DEBUG] [Thread-114997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:26:26.803 [INFO] [Thread-114997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:26:26.807 [DEBUG] [Thread-114997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] client lang: <none>
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] server lang: <none>
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] kex follows: False
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:26:26.808 [DEBUG] [Thread-114997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:26:26.809 [DEBUG] [Thread-114997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:26:26.809 [DEBUG] [Thread-114997] [transport.py] [_log()] Compression: none
2025-12-03T10:26:26.809 [DEBUG] [Thread-114997] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:26:26.826 [DEBUG] [Thread-114997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:26:26.827 [DEBUG] [Thread-114997] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:26:26.827 [DEBUG] [Thread-114997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:26:26.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:26:26.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:26:26.829 [DEBUG] [Thread-114997] [transport.py] [_log()] userauth is OK
2025-12-03T10:26:26.829 [DEBUG] [Thread-114997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:26:26.830 [DEBUG] [Thread-114997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:26:26.830 [DEBUG] [Thread-114997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:26:26.830 [DEBUG] [Thread-114997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:26:26.853 [INFO] [Thread-114997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:26:26.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:26:27.469 [DEBUG] [Thread-114997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:26:27.469 [DEBUG] [Thread-114997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:26:27.469 [DEBUG] [Thread-114997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:26:27.510 [DEBUG] [Thread-114997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:26:27.510 [DEBUG] [Thread-114997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:26:27.513 [DEBUG] [Thread-114997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:26:27.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:26:27.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:26:27.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:26:27.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:26:27.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:26:27.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:26:27.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.351440 -999.00  +15.90  11.79     52   +6.20 1 2 1 1 1   888    0 12.46 119.87 ----- 21.2 11.8 156.1 26.9 23.1 -23.0 22.5 -21.0 22.0 -20.9 22.7 -22.2
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:26:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.351440
2025-12-03T10:26:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:26:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:26:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:26:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:26:27.539 [DEBUG] [Thread-114997] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:26:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:26:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:26:22', tmtdew=10.99, humidity=48.13, cloud=0.0, wind=28.13, temperature=15.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:26:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:26:27.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:26:27.636 [DEBUG] [Thread-115000] [transport.py] [_log()] starting thread (client mode): 0xa271c850
2025-12-03T10:26:27.636 [DEBUG] [Thread-115000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:26:27.651 [DEBUG] [Thread-115000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:26:27.651 [INFO] [Thread-115000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:27.659 [DEBUG] [Thread-115000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] client lang: <none>
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] server lang: <none>
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] kex follows: False
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] Compression: none
2025-12-03T10:26:27.660 [DEBUG] [Thread-115000] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:26:27.722 [DEBUG] [Thread-115000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:26:27.723 [DEBUG] [Thread-115000] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:26:27.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:26:27.724 [DEBUG] [Thread-115000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:26:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:26:27.779 [DEBUG] [Thread-115000] [transport.py] [_log()] userauth is OK
2025-12-03T10:26:27.779 [DEBUG] [Thread-115000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:26:27.779 [DEBUG] [Thread-115000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:26:27.779 [DEBUG] [Thread-115000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:26:27.779 [DEBUG] [Thread-115000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:26:27.799 [INFO] [Thread-115000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:26:27.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:26:27.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:26:28.671 [DEBUG] [Thread-115000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:26:28.671 [DEBUG] [Thread-115000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:26:28.719 [DEBUG] [Thread-115000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:26:28.719 [DEBUG] [Thread-115000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:26:28.728 [DEBUG] [Thread-115000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:26:28.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:26:28.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:26:28.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:26:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:26:28.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:26:28.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:26:28.762 [DEBUG] [Thread-115000] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:26:30.099 [DEBUG] [Thread-115002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:40.450 [DEBUG] [Thread-115003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:45.145 [DEBUG] [Thread-115004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:45.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:45.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:26:58.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:26:58.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:26:58.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:26:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 26, 54), 10.65, 49.28, 0.0, 23.68, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:26:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:26:54
2025-12-03T10:26:59.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:26:59.798 [DEBUG] [Thread-115005] [transport.py] [_log()] starting thread (client mode): 0xa27c3fa0
2025-12-03T10:26:59.798 [DEBUG] [Thread-115005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:26:59.820 [DEBUG] [Thread-115005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:26:59.820 [INFO] [Thread-115005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] client lang: <none>
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] server lang: <none>
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] kex follows: False
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] Compression: none
2025-12-03T10:26:59.823 [DEBUG] [Thread-115005] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:26:59.839 [DEBUG] [Thread-115005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:26:59.839 [DEBUG] [Thread-115005] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:26:59.839 [DEBUG] [Thread-115005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:26:59.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:26:59.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:26:59.840 [DEBUG] [Thread-115005] [transport.py] [_log()] userauth is OK
2025-12-03T10:26:59.840 [DEBUG] [Thread-115005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:26:59.840 [DEBUG] [Thread-115005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:26:59.840 [DEBUG] [Thread-115005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:26:59.840 [DEBUG] [Thread-115005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:26:59.855 [INFO] [Thread-115005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:26:59.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:27:00.177 [DEBUG] [Thread-115007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:00.487 [DEBUG] [Thread-115005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:27:00.487 [DEBUG] [Thread-115005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:27:00.487 [DEBUG] [Thread-115005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:27:00.527 [DEBUG] [Thread-115005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:27:00.527 [DEBUG] [Thread-115005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:27:00.530 [DEBUG] [Thread-115005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:27:00.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:27:00.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:27:00.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:27:00.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:27:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:27:00.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:27:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.351787 -999.00  +15.80  19.09     53   +6.40 1 1 1 1 1   888    0 12.53 119.48 ----- 16.0 19.1 172.2 29.1 23.1 -22.2 22.1 -26.7 21.9 -21.0 22.7 -22.7
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.351787
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:27:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:26:54', tmtdew=10.65, humidity=49.28, cloud=0.0, wind=23.68, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:26:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:27:00.547 [DEBUG] [Thread-115005] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:27:00.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:27:00.632 [DEBUG] [Thread-115009] [transport.py] [_log()] starting thread (client mode): 0xa27b23b0
2025-12-03T10:27:00.632 [DEBUG] [Thread-115009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:27:00.647 [DEBUG] [Thread-115009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:27:00.647 [INFO] [Thread-115009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] client lang: <none>
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] server lang: <none>
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] kex follows: False
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] Compression: none
2025-12-03T10:27:00.656 [DEBUG] [Thread-115009] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:27:00.713 [DEBUG] [Thread-115009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:27:00.714 [DEBUG] [Thread-115009] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:27:00.714 [DEBUG] [Thread-115009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:27:00.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:27:00.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:27:00.771 [DEBUG] [Thread-115009] [transport.py] [_log()] userauth is OK
2025-12-03T10:27:00.771 [DEBUG] [Thread-115009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:27:00.771 [DEBUG] [Thread-115009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:27:00.771 [DEBUG] [Thread-115009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:27:00.771 [DEBUG] [Thread-115009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:27:00.786 [INFO] [Thread-115009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:27:00.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:27:00.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:27:01.643 [DEBUG] [Thread-115009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:27:01.643 [DEBUG] [Thread-115009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:27:01.690 [DEBUG] [Thread-115009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:27:01.691 [DEBUG] [Thread-115009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:27:01.699 [DEBUG] [Thread-115009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:27:01.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:27:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:27:01.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:27:01.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:27:01.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:27:01.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:27:01.731 [DEBUG] [Thread-115009] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:27:15.204 [DEBUG] [Thread-115011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:30.257 [DEBUG] [Thread-115012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:31.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:27:31.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:27:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:27:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 27, 27), 10.74, 48.92, 0.0, 22.32, 15.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:27:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:27:27
2025-12-03T10:27:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:27:32.730 [DEBUG] [Thread-115013] [transport.py] [_log()] starting thread (client mode): 0xa271c0d0
2025-12-03T10:27:32.730 [DEBUG] [Thread-115013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:27:32.751 [DEBUG] [Thread-115013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:27:32.751 [INFO] [Thread-115013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:27:32.754 [DEBUG] [Thread-115013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] client lang: <none>
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] server lang: <none>
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] kex follows: False
2025-12-03T10:27:32.755 [DEBUG] [Thread-115013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] Compression: none
2025-12-03T10:27:32.756 [DEBUG] [Thread-115013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:27:32.774 [DEBUG] [Thread-115013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:27:32.775 [DEBUG] [Thread-115013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:27:32.775 [DEBUG] [Thread-115013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:27:32.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:27:32.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:27:32.777 [DEBUG] [Thread-115013] [transport.py] [_log()] userauth is OK
2025-12-03T10:27:32.777 [DEBUG] [Thread-115013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:27:32.777 [DEBUG] [Thread-115013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:27:32.777 [DEBUG] [Thread-115013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:27:32.777 [DEBUG] [Thread-115013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:27:32.800 [INFO] [Thread-115013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:27:32.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:27:33.392 [DEBUG] [Thread-115013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:27:33.392 [DEBUG] [Thread-115013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:27:33.393 [DEBUG] [Thread-115013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:27:33.433 [DEBUG] [Thread-115013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:27:33.433 [DEBUG] [Thread-115013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:27:33.436 [DEBUG] [Thread-115013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:27:33.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:27:33.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:27:33.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:27:33.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:27:33.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:27:33.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:27:33.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:27:33.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.352134 -999.00  +15.80  18.27     53   +6.20 1 2 1 1 1   888    0 12.58 120.59 ----- 16.1 18.3 166.2 24.8 23.2 -21.7 22.4 -21.2 22.1 -19.7 22.7 -22.0
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.352134
2025-12-03T10:27:33.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:27:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:27:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:27:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:27:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:27:33.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:27:27', tmtdew=10.74, humidity=48.92, cloud=0.0, wind=22.32, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:27:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:27:33.462 [DEBUG] [Thread-115013] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:27:33.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:27:33.562 [DEBUG] [Thread-115016] [transport.py] [_log()] starting thread (client mode): 0xa27b2230
2025-12-03T10:27:33.563 [DEBUG] [Thread-115016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:27:33.581 [DEBUG] [Thread-115016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:27:33.581 [INFO] [Thread-115016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:27:33.589 [DEBUG] [Thread-115016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] client lang: <none>
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] server lang: <none>
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] kex follows: False
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] Compression: none
2025-12-03T10:27:33.590 [DEBUG] [Thread-115016] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:27:33.647 [DEBUG] [Thread-115016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:27:33.647 [DEBUG] [Thread-115016] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:27:33.648 [DEBUG] [Thread-115016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:27:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:27:33.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:27:33.703 [DEBUG] [Thread-115016] [transport.py] [_log()] userauth is OK
2025-12-03T10:27:33.703 [DEBUG] [Thread-115016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:27:33.703 [DEBUG] [Thread-115016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:27:33.703 [DEBUG] [Thread-115016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:27:33.703 [DEBUG] [Thread-115016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:27:33.722 [INFO] [Thread-115016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:27:33.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:27:33.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:27:34.565 [DEBUG] [Thread-115016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:27:34.565 [DEBUG] [Thread-115016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:27:34.613 [DEBUG] [Thread-115016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:27:34.614 [DEBUG] [Thread-115016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:27:34.623 [DEBUG] [Thread-115016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:27:34.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:27:34.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:27:34.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:27:34.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:27:34.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:27:34.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:27:34.658 [DEBUG] [Thread-115016] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:27:40.478 [DEBUG] [Thread-115018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:45.285 [DEBUG] [Thread-115019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:45.848 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:27:45.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:00.326 [DEBUG] [Thread-115020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:28:04.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:28:04.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:28:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 27, 59), 10.77, 48.88, 0.0, 25.21, 15.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:28:05.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:27:59
2025-12-03T10:28:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:28:05.649 [DEBUG] [Thread-115021] [transport.py] [_log()] starting thread (client mode): 0xa51ce500
2025-12-03T10:28:05.649 [DEBUG] [Thread-115021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:28:05.670 [DEBUG] [Thread-115021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:28:05.671 [INFO] [Thread-115021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:05.674 [DEBUG] [Thread-115021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] client lang: <none>
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] server lang: <none>
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] kex follows: False
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:28:05.675 [DEBUG] [Thread-115021] [transport.py] [_log()] Compression: none
2025-12-03T10:28:05.676 [DEBUG] [Thread-115021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:28:05.694 [DEBUG] [Thread-115021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:28:05.695 [DEBUG] [Thread-115021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:28:05.695 [DEBUG] [Thread-115021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:28:05.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:28:05.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:28:05.697 [DEBUG] [Thread-115021] [transport.py] [_log()] userauth is OK
2025-12-03T10:28:05.697 [DEBUG] [Thread-115021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:28:05.697 [DEBUG] [Thread-115021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:28:05.698 [DEBUG] [Thread-115021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:28:05.698 [DEBUG] [Thread-115021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:28:05.722 [INFO] [Thread-115021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:28:05.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:28:06.365 [DEBUG] [Thread-115021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:28:06.366 [DEBUG] [Thread-115021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:28:06.366 [DEBUG] [Thread-115021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:28:06.407 [DEBUG] [Thread-115021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:28:06.407 [DEBUG] [Thread-115021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:28:06.410 [DEBUG] [Thread-115021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:28:06.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:28:06.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:28:06.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:28:06.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:28:06.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:28:06.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:28:06.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:28:06.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:28:06.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:28:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.352482 -999.00  +15.90  10.89     53   +6.50 1 2 1 1 1   888    0 12.41 108.31 ----- 14.1 10.9 158.6 25.6 23.4 -22.0 22.3 -21.3 22.1 -19.7 22.7 -20.6
2025-12-03T10:28:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:28:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:28:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.352482
2025-12-03T10:28:06.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:28:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:28:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:28:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:28:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:28:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:27:59', tmtdew=10.77, humidity=48.88, cloud=0.0, wind=25.21, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:27:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:28:06.435 [DEBUG] [Thread-115021] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:28:06.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:28:06.532 [DEBUG] [Thread-115024] [transport.py] [_log()] starting thread (client mode): 0xa27c2410
2025-12-03T10:28:06.532 [DEBUG] [Thread-115024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:28:06.549 [DEBUG] [Thread-115024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:28:06.549 [INFO] [Thread-115024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:28:06.559 [DEBUG] [Thread-115024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:28:06.560 [DEBUG] [Thread-115024] [transport.py] [_log()] client lang: <none>
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] server lang: <none>
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] kex follows: False
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] Compression: none
2025-12-03T10:28:06.561 [DEBUG] [Thread-115024] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:28:06.621 [DEBUG] [Thread-115024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:28:06.622 [DEBUG] [Thread-115024] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:28:06.622 [DEBUG] [Thread-115024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:28:06.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:28:06.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:28:06.684 [DEBUG] [Thread-115024] [transport.py] [_log()] userauth is OK
2025-12-03T10:28:06.684 [DEBUG] [Thread-115024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:28:06.684 [DEBUG] [Thread-115024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:28:06.685 [DEBUG] [Thread-115024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:28:06.685 [DEBUG] [Thread-115024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:28:06.706 [INFO] [Thread-115024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:28:06.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:28:06.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:28:07.546 [DEBUG] [Thread-115024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:28:07.547 [DEBUG] [Thread-115024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:28:07.595 [DEBUG] [Thread-115024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:28:07.595 [DEBUG] [Thread-115024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:28:07.604 [DEBUG] [Thread-115024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:28:07.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:28:07.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:28:07.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:28:07.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:28:07.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:28:07.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:28:07.638 [DEBUG] [Thread-115024] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:28:15.351 [DEBUG] [Thread-115026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:30.388 [DEBUG] [Thread-115027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:37.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:28:37.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:28:37.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:28:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 28, 31), 10.99, 48.24, 0.0, 23.52, 15.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:28:38.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:28:31
2025-12-03T10:28:38.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:28:38.642 [DEBUG] [Thread-115028] [transport.py] [_log()] starting thread (client mode): 0xa271ffd0
2025-12-03T10:28:38.642 [DEBUG] [Thread-115028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:28:38.662 [DEBUG] [Thread-115028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:28:38.662 [INFO] [Thread-115028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:28:38.665 [DEBUG] [Thread-115028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:28:38.665 [DEBUG] [Thread-115028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:28:38.665 [DEBUG] [Thread-115028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:28:38.665 [DEBUG] [Thread-115028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:38.665 [DEBUG] [Thread-115028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] client lang: <none>
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] server lang: <none>
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] kex follows: False
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] Compression: none
2025-12-03T10:28:38.666 [DEBUG] [Thread-115028] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:28:38.685 [DEBUG] [Thread-115028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:28:38.686 [DEBUG] [Thread-115028] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:28:38.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:28:38.687 [DEBUG] [Thread-115028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:28:38.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:28:38.688 [DEBUG] [Thread-115028] [transport.py] [_log()] userauth is OK
2025-12-03T10:28:38.688 [DEBUG] [Thread-115028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:28:38.688 [DEBUG] [Thread-115028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:28:38.688 [DEBUG] [Thread-115028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:28:38.689 [DEBUG] [Thread-115028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:28:38.703 [INFO] [Thread-115028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:28:38.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:28:39.358 [DEBUG] [Thread-115028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:28:39.358 [DEBUG] [Thread-115028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:28:39.358 [DEBUG] [Thread-115028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:28:39.399 [DEBUG] [Thread-115028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:28:39.399 [DEBUG] [Thread-115028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:28:39.402 [DEBUG] [Thread-115028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:28:39.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:28:39.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:28:39.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:28:39.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:28:39.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:28:39.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:28:39.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:28:39.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.352829 -999.00  +16.20  25.70     52   +6.50 1 2 1 1 1   888    0 12.02 103.86 ----- 19.6 25.7 139.4 31.9 23.1 -24.3 22.3 -23.2 21.9 -21.9 22.6 -22.4
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.352829
2025-12-03T10:28:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:28:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:28:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:28:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:28:39.426 [DEBUG] [Thread-115028] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:28:39.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:28:39.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:28:31', tmtdew=10.99, humidity=48.24, cloud=0.0, wind=23.52, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:28:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:28:39.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:28:39.523 [DEBUG] [Thread-115031] [transport.py] [_log()] starting thread (client mode): 0xa27b2500
2025-12-03T10:28:39.524 [DEBUG] [Thread-115031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:28:39.544 [DEBUG] [Thread-115031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:28:39.544 [INFO] [Thread-115031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:28:39.559 [DEBUG] [Thread-115031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] client lang: <none>
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] server lang: <none>
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] kex follows: False
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] Compression: none
2025-12-03T10:28:39.560 [DEBUG] [Thread-115031] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:28:39.617 [DEBUG] [Thread-115031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:28:39.618 [DEBUG] [Thread-115031] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:28:39.618 [DEBUG] [Thread-115031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:28:39.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:28:39.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:28:39.674 [DEBUG] [Thread-115031] [transport.py] [_log()] userauth is OK
2025-12-03T10:28:39.674 [DEBUG] [Thread-115031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:28:39.674 [DEBUG] [Thread-115031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:28:39.674 [DEBUG] [Thread-115031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:28:39.674 [DEBUG] [Thread-115031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:28:39.696 [INFO] [Thread-115031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:28:39.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:28:39.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:28:40.513 [DEBUG] [Thread-115033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:40.540 [DEBUG] [Thread-115031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:28:40.540 [DEBUG] [Thread-115031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:28:40.587 [DEBUG] [Thread-115031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:28:40.587 [DEBUG] [Thread-115031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:28:40.596 [DEBUG] [Thread-115031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:28:40.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:28:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:28:40.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:28:40.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:28:40.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:28:40.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:28:40.629 [DEBUG] [Thread-115031] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:28:45.417 [DEBUG] [Thread-115034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:45.991 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:28:45.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:00.455 [DEBUG] [Thread-115035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:29:10.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:29:10.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:29:11.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 29, 3), 11.08, 47.96, 0.0, 24.95, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:29:11.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:29:03
2025-12-03T10:29:11.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:29:11.618 [DEBUG] [Thread-115036] [transport.py] [_log()] starting thread (client mode): 0xa2787ca0
2025-12-03T10:29:11.618 [DEBUG] [Thread-115036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:29:11.638 [DEBUG] [Thread-115036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:29:11.638 [INFO] [Thread-115036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:29:11.641 [DEBUG] [Thread-115036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:29:11.641 [DEBUG] [Thread-115036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] client lang: <none>
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] server lang: <none>
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] kex follows: False
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] Compression: none
2025-12-03T10:29:11.642 [DEBUG] [Thread-115036] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:29:11.659 [DEBUG] [Thread-115036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:29:11.660 [DEBUG] [Thread-115036] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:29:11.660 [DEBUG] [Thread-115036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:29:11.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:29:11.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:29:11.662 [DEBUG] [Thread-115036] [transport.py] [_log()] userauth is OK
2025-12-03T10:29:11.662 [DEBUG] [Thread-115036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:29:11.662 [DEBUG] [Thread-115036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:29:11.662 [DEBUG] [Thread-115036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:29:11.662 [DEBUG] [Thread-115036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:29:11.680 [INFO] [Thread-115036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:29:11.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:29:12.312 [DEBUG] [Thread-115036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:29:12.312 [DEBUG] [Thread-115036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:29:12.313 [DEBUG] [Thread-115036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:29:12.353 [DEBUG] [Thread-115036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:29:12.353 [DEBUG] [Thread-115036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:29:12.355 [DEBUG] [Thread-115036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:29:12.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:29:12.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:29:12.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:29:12.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:29:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:29:12.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:29:12.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.353176 -999.00  +16.40  24.72     51   +6.40 1 2 1 1 1   888    0 12.04 96.70 ----- 20.8 24.7 122.0 29.5 23.0 -24.3 22.4 -22.3 22.0 -21.5 22.6 -20.9
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:29:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.353176
2025-12-03T10:29:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:29:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:29:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:29:12.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:29:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:29:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:29:03', tmtdew=11.08, humidity=47.96, cloud=0.0, wind=24.95, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:28:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:29:12.378 [DEBUG] [Thread-115036] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:29:12.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:29:12.474 [DEBUG] [Thread-115039] [transport.py] [_log()] starting thread (client mode): 0xa27b41f0
2025-12-03T10:29:12.474 [DEBUG] [Thread-115039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:29:12.489 [DEBUG] [Thread-115039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:29:12.489 [INFO] [Thread-115039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:12.497 [DEBUG] [Thread-115039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] client lang: <none>
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] server lang: <none>
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] kex follows: False
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:29:12.498 [DEBUG] [Thread-115039] [transport.py] [_log()] Compression: none
2025-12-03T10:29:12.499 [DEBUG] [Thread-115039] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:29:12.554 [DEBUG] [Thread-115039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:29:12.555 [DEBUG] [Thread-115039] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:29:12.555 [DEBUG] [Thread-115039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:29:12.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:29:12.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:29:12.610 [DEBUG] [Thread-115039] [transport.py] [_log()] userauth is OK
2025-12-03T10:29:12.611 [DEBUG] [Thread-115039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:29:12.611 [DEBUG] [Thread-115039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:29:12.611 [DEBUG] [Thread-115039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:29:12.611 [DEBUG] [Thread-115039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:29:12.630 [INFO] [Thread-115039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:29:12.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:29:12.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:29:13.454 [DEBUG] [Thread-115039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:29:13.454 [DEBUG] [Thread-115039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:29:13.503 [DEBUG] [Thread-115039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:29:13.503 [DEBUG] [Thread-115039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:29:13.512 [DEBUG] [Thread-115039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:29:13.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:29:13.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:29:13.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:29:13.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:29:13.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:29:13.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:29:13.547 [DEBUG] [Thread-115039] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:29:15.480 [DEBUG] [Thread-115041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:30.524 [DEBUG] [Thread-115042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:40.561 [DEBUG] [Thread-115043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:43.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:29:43.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:29:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:29:44.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 29, 35), 10.86, 48.47, 0.0, 20.86, 15.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:29:44.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:29:35
2025-12-03T10:29:44.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:29:44.538 [DEBUG] [Thread-115044] [transport.py] [_log()] starting thread (client mode): 0xa2787af0
2025-12-03T10:29:44.538 [DEBUG] [Thread-115044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:29:44.558 [DEBUG] [Thread-115044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:29:44.558 [INFO] [Thread-115044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:29:44.561 [DEBUG] [Thread-115044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:29:44.561 [DEBUG] [Thread-115044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] client lang: <none>
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] server lang: <none>
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] kex follows: False
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] Compression: none
2025-12-03T10:29:44.562 [DEBUG] [Thread-115044] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:29:44.581 [DEBUG] [Thread-115044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:29:44.581 [DEBUG] [Thread-115044] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:29:44.582 [DEBUG] [Thread-115044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:29:44.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:29:44.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:29:44.584 [DEBUG] [Thread-115044] [transport.py] [_log()] userauth is OK
2025-12-03T10:29:44.584 [DEBUG] [Thread-115044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:29:44.584 [DEBUG] [Thread-115044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:29:44.584 [DEBUG] [Thread-115044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:29:44.584 [DEBUG] [Thread-115044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:29:44.599 [INFO] [Thread-115044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:29:44.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:29:45.244 [DEBUG] [Thread-115044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:29:45.244 [DEBUG] [Thread-115044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:29:45.244 [DEBUG] [Thread-115044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:29:45.286 [DEBUG] [Thread-115044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:29:45.286 [DEBUG] [Thread-115044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:29:45.289 [DEBUG] [Thread-115044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:29:45.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:29:45.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:29:45.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:29:45.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:29:45.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:29:45.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:29:45.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:29:45.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:29:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:29:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.353523 -999.00  +16.00  20.97     51   +6.10 1 2 1 1 1   888    0 12.03 91.08 ----- 17.1 21.0 120.2 27.7 22.9 -23.1 22.4 -23.4 22.0 -22.3 22.6 -22.3
2025-12-03T10:29:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:29:45.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:29:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.353523
2025-12-03T10:29:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:29:45.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:29:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:29:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:29:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:29:45.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:29:35', tmtdew=10.86, humidity=48.47, cloud=0.0, wind=20.86, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:29:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:29:45.314 [DEBUG] [Thread-115044] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:29:45.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:29:45.410 [DEBUG] [Thread-115047] [transport.py] [_log()] starting thread (client mode): 0xa27846d0
2025-12-03T10:29:45.410 [DEBUG] [Thread-115047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:29:45.425 [DEBUG] [Thread-115047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:29:45.425 [INFO] [Thread-115047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:29:45.433 [DEBUG] [Thread-115047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:29:45.433 [DEBUG] [Thread-115047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:29:45.433 [DEBUG] [Thread-115047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:29:45.433 [DEBUG] [Thread-115047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] client lang: <none>
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] server lang: <none>
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] kex follows: False
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:29:45.434 [DEBUG] [Thread-115047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:29:45.435 [DEBUG] [Thread-115047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:29:45.435 [DEBUG] [Thread-115047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:29:45.435 [DEBUG] [Thread-115047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:29:45.435 [DEBUG] [Thread-115047] [transport.py] [_log()] Compression: none
2025-12-03T10:29:45.435 [DEBUG] [Thread-115047] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:29:45.490 [DEBUG] [Thread-115047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:29:45.490 [DEBUG] [Thread-115047] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:29:45.491 [DEBUG] [Thread-115047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:29:45.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:29:45.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:29:45.546 [DEBUG] [Thread-115047] [transport.py] [_log()] userauth is OK
2025-12-03T10:29:45.547 [DEBUG] [Thread-115047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:29:45.547 [DEBUG] [Thread-115047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:29:45.547 [DEBUG] [Thread-115047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:29:45.547 [DEBUG] [Thread-115047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:29:45.553 [DEBUG] [Thread-115049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:45.565 [INFO] [Thread-115047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:29:45.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:29:45.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:29:46.135 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:46.137 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:29:46.394 [DEBUG] [Thread-115047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:29:46.394 [DEBUG] [Thread-115047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:29:46.443 [DEBUG] [Thread-115047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:29:46.443 [DEBUG] [Thread-115047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:29:46.452 [DEBUG] [Thread-115047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:29:46.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:29:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:29:46.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:29:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:29:46.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:29:46.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:29:46.486 [DEBUG] [Thread-115047] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:30:00.593 [DEBUG] [Thread-115050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:15.620 [DEBUG] [Thread-115051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:30:16.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:30:16.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:30:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 30, 7), 10.91, 48.27, 0.0, 20.56, 15.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:30:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:30:07
2025-12-03T10:30:17.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:30:17.466 [DEBUG] [Thread-115052] [transport.py] [_log()] starting thread (client mode): 0xa27b4cd0
2025-12-03T10:30:17.467 [DEBUG] [Thread-115052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:30:17.488 [DEBUG] [Thread-115052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:30:17.488 [INFO] [Thread-115052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] client lang: <none>
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] server lang: <none>
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] kex follows: False
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:30:17.491 [DEBUG] [Thread-115052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:30:17.492 [DEBUG] [Thread-115052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:30:17.492 [DEBUG] [Thread-115052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:30:17.492 [DEBUG] [Thread-115052] [transport.py] [_log()] Compression: none
2025-12-03T10:30:17.492 [DEBUG] [Thread-115052] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:30:17.508 [DEBUG] [Thread-115052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:30:17.508 [DEBUG] [Thread-115052] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:30:17.509 [DEBUG] [Thread-115052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:30:17.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:30:17.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:30:17.511 [DEBUG] [Thread-115052] [transport.py] [_log()] userauth is OK
2025-12-03T10:30:17.511 [DEBUG] [Thread-115052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:30:17.511 [DEBUG] [Thread-115052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:30:17.511 [DEBUG] [Thread-115052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:30:17.511 [DEBUG] [Thread-115052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:30:17.535 [INFO] [Thread-115052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:30:17.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:30:18.176 [DEBUG] [Thread-115052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:30:18.176 [DEBUG] [Thread-115052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:30:18.176 [DEBUG] [Thread-115052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:30:18.217 [DEBUG] [Thread-115052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:30:18.217 [DEBUG] [Thread-115052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:30:18.220 [DEBUG] [Thread-115052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:30:18.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:30:18.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:30:18.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:30:18.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:30:18.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:30:18.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:30:18.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.354218 -999.00  +16.00  22.84     52   +6.30 1 2 1 1 1   888    0 11.61 83.26 ----- 29.4 22.8 131.8 26.8 22.9 -22.5 22.5 -22.3 22.1 -21.7 22.6 -20.8
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:30:18.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.354218
2025-12-03T10:30:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:30:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:30:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:30:18.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:30:18.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:30:18.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:30:07', tmtdew=10.91, humidity=48.27, cloud=0.0, wind=20.56, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:30:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:30:18.244 [DEBUG] [Thread-115052] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:30:18.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:30:18.338 [DEBUG] [Thread-115055] [transport.py] [_log()] starting thread (client mode): 0xa27b4520
2025-12-03T10:30:18.338 [DEBUG] [Thread-115055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:30:18.354 [DEBUG] [Thread-115055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:30:18.354 [INFO] [Thread-115055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:30:18.361 [DEBUG] [Thread-115055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:30:18.361 [DEBUG] [Thread-115055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] client lang: <none>
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] server lang: <none>
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] kex follows: False
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] Compression: none
2025-12-03T10:30:18.362 [DEBUG] [Thread-115055] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:30:18.418 [DEBUG] [Thread-115055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:30:18.418 [DEBUG] [Thread-115055] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:30:18.419 [DEBUG] [Thread-115055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:30:18.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:30:18.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:30:18.474 [DEBUG] [Thread-115055] [transport.py] [_log()] userauth is OK
2025-12-03T10:30:18.475 [DEBUG] [Thread-115055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:30:18.475 [DEBUG] [Thread-115055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:30:18.475 [DEBUG] [Thread-115055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:30:18.475 [DEBUG] [Thread-115055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:30:18.495 [INFO] [Thread-115055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:30:18.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:30:18.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:30:19.338 [DEBUG] [Thread-115055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:30:19.338 [DEBUG] [Thread-115055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:30:19.386 [DEBUG] [Thread-115055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:30:19.386 [DEBUG] [Thread-115055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:30:19.394 [DEBUG] [Thread-115055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:30:19.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:30:19.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:30:19.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:30:19.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:30:19.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:30:19.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:30:19.429 [DEBUG] [Thread-115055] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:30:30.649 [DEBUG] [Thread-115057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:40.599 [DEBUG] [Thread-115058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:45.689 [DEBUG] [Thread-115059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:46.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:46.279 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:30:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:30:49.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:30:49.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:30:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 30, 39), 11.08, 47.63, 0.0, 23.5, 15.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:30:50.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:30:39
2025-12-03T10:30:50.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:30:50.459 [DEBUG] [Thread-115060] [transport.py] [_log()] starting thread (client mode): 0xa27ec670
2025-12-03T10:30:50.459 [DEBUG] [Thread-115060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:30:50.478 [DEBUG] [Thread-115060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:30:50.478 [INFO] [Thread-115060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:30:50.480 [DEBUG] [Thread-115060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:30:50.480 [DEBUG] [Thread-115060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] client lang: <none>
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] server lang: <none>
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] kex follows: False
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] Compression: none
2025-12-03T10:30:50.481 [DEBUG] [Thread-115060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:30:50.489 [DEBUG] [Thread-115060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:30:50.489 [DEBUG] [Thread-115060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:30:50.489 [DEBUG] [Thread-115060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:30:50.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:30:50.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:30:50.490 [DEBUG] [Thread-115060] [transport.py] [_log()] userauth is OK
2025-12-03T10:30:50.490 [DEBUG] [Thread-115060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:30:50.490 [DEBUG] [Thread-115060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:30:50.490 [DEBUG] [Thread-115060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:30:50.490 [DEBUG] [Thread-115060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:30:50.499 [INFO] [Thread-115060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:30:50.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:30:51.121 [DEBUG] [Thread-115060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:30:51.121 [DEBUG] [Thread-115060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:30:51.121 [DEBUG] [Thread-115060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:30:51.162 [DEBUG] [Thread-115060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:30:51.162 [DEBUG] [Thread-115060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:30:51.164 [DEBUG] [Thread-115060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:30:51.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:30:51.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:30:51.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:30:51.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:30:51.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:30:51.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:30:51.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:30:51.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.354565 -999.00  +15.90  21.78     52   +6.00 1 2 1 1 1   888    0 11.60 85.96 ----- 18.3 21.8 120.4 32.9 23.0 -21.8 22.6 -21.0 22.2 -19.5 22.6 -20.8
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.354565
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:30:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:30:39', tmtdew=11.08, humidity=47.63, cloud=0.0, wind=23.5, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:30:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:30:51.175 [DEBUG] [Thread-115060] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:30:51.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:30:51.259 [DEBUG] [Thread-115063] [transport.py] [_log()] starting thread (client mode): 0xa27edab0
2025-12-03T10:30:51.260 [DEBUG] [Thread-115063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:30:51.275 [DEBUG] [Thread-115063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:30:51.275 [INFO] [Thread-115063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] client lang: <none>
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] server lang: <none>
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] kex follows: False
2025-12-03T10:30:51.282 [DEBUG] [Thread-115063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] Compression: none
2025-12-03T10:30:51.283 [DEBUG] [Thread-115063] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:30:51.336 [DEBUG] [Thread-115063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:30:51.337 [DEBUG] [Thread-115063] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:30:51.337 [DEBUG] [Thread-115063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:30:51.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:30:51.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:30:51.394 [DEBUG] [Thread-115063] [transport.py] [_log()] userauth is OK
2025-12-03T10:30:51.394 [DEBUG] [Thread-115063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:30:51.394 [DEBUG] [Thread-115063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:30:51.394 [DEBUG] [Thread-115063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:30:51.394 [DEBUG] [Thread-115063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:30:51.408 [INFO] [Thread-115063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:30:51.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:30:51.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:30:52.298 [DEBUG] [Thread-115063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:30:52.298 [DEBUG] [Thread-115063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:30:52.345 [DEBUG] [Thread-115063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:30:52.345 [DEBUG] [Thread-115063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:30:52.353 [DEBUG] [Thread-115063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:30:52.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:30:52.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:30:52.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:30:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:30:52.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:30:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:30:52.385 [DEBUG] [Thread-115063] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:31:00.717 [DEBUG] [Thread-115065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:15.759 [DEBUG] [Thread-115066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:22.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:31:22.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:31:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:31:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 31, 11), 10.7, 48.88, 0.0, 21.19, 15.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:31:23.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:31:11
2025-12-03T10:31:23.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:31:23.363 [DEBUG] [Thread-115067] [transport.py] [_log()] starting thread (client mode): 0xa27ec460
2025-12-03T10:31:23.363 [DEBUG] [Thread-115067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:31:23.382 [DEBUG] [Thread-115067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:31:23.382 [INFO] [Thread-115067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:23.385 [DEBUG] [Thread-115067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] client lang: <none>
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] server lang: <none>
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] kex follows: False
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] Compression: none
2025-12-03T10:31:23.386 [DEBUG] [Thread-115067] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:31:23.406 [DEBUG] [Thread-115067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:31:23.406 [DEBUG] [Thread-115067] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:31:23.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:31:23.406 [DEBUG] [Thread-115067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:31:23.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:31:23.407 [DEBUG] [Thread-115067] [transport.py] [_log()] userauth is OK
2025-12-03T10:31:23.407 [DEBUG] [Thread-115067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:31:23.407 [DEBUG] [Thread-115067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:31:23.407 [DEBUG] [Thread-115067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:31:23.407 [DEBUG] [Thread-115067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:31:23.433 [INFO] [Thread-115067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:31:23.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:31:24.043 [DEBUG] [Thread-115067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:31:24.044 [DEBUG] [Thread-115067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:31:24.044 [DEBUG] [Thread-115067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:31:24.084 [DEBUG] [Thread-115067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:31:24.085 [DEBUG] [Thread-115067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:31:24.087 [DEBUG] [Thread-115067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:31:24.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:31:24.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:31:24.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:31:24.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:31:24.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:31:24.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:31:24.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:31:24.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:31:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:31:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.354912 -999.00  +15.70  18.35     52   +6.10 1 2 1 1 1   888    0 11.76 88.82 ----- 19.5 18.4 118.6 24.4 23.2 -20.6 22.7 -20.6 22.3 -19.3 22.7 -20.0
2025-12-03T10:31:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:31:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:31:24.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.354912
2025-12-03T10:31:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:31:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:31:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:31:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:31:24.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:31:24.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:31:11', tmtdew=10.7, humidity=48.88, cloud=0.0, wind=21.19, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:31:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:31:24.115 [DEBUG] [Thread-115067] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:31:24.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:31:24.209 [DEBUG] [Thread-115070] [transport.py] [_log()] starting thread (client mode): 0xa27b4850
2025-12-03T10:31:24.209 [DEBUG] [Thread-115070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:31:24.225 [DEBUG] [Thread-115070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:31:24.225 [INFO] [Thread-115070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:24.237 [DEBUG] [Thread-115070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] client lang: <none>
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] server lang: <none>
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] kex follows: False
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:31:24.238 [DEBUG] [Thread-115070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:31:24.239 [DEBUG] [Thread-115070] [transport.py] [_log()] Compression: none
2025-12-03T10:31:24.239 [DEBUG] [Thread-115070] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:31:24.291 [DEBUG] [Thread-115070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:31:24.292 [DEBUG] [Thread-115070] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:31:24.292 [DEBUG] [Thread-115070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:31:24.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:31:24.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:31:24.350 [DEBUG] [Thread-115070] [transport.py] [_log()] userauth is OK
2025-12-03T10:31:24.351 [DEBUG] [Thread-115070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:31:24.351 [DEBUG] [Thread-115070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:31:24.351 [DEBUG] [Thread-115070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:31:24.351 [DEBUG] [Thread-115070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:31:24.370 [INFO] [Thread-115070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:31:24.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:31:24.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:31:25.215 [DEBUG] [Thread-115070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:31:25.215 [DEBUG] [Thread-115070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:31:25.263 [DEBUG] [Thread-115070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:31:25.263 [DEBUG] [Thread-115070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:31:25.271 [DEBUG] [Thread-115070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:31:25.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:31:25.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:31:25.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:31:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:31:25.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:31:25.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:31:25.303 [DEBUG] [Thread-115070] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:31:30.788 [DEBUG] [Thread-115072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:40.645 [DEBUG] [Thread-115073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:45.835 [DEBUG] [Thread-115074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:46.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:46.419 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:31:55.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:31:55.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:31:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:31:56.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 31, 43), 11.13, 47.53, 0.0, 21.67, 16.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:31:56.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:31:43
2025-12-03T10:31:56.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:31:56.319 [DEBUG] [Thread-115075] [transport.py] [_log()] starting thread (client mode): 0xa2785ed0
2025-12-03T10:31:56.319 [DEBUG] [Thread-115075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:31:56.339 [DEBUG] [Thread-115075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:31:56.339 [INFO] [Thread-115075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:56.342 [DEBUG] [Thread-115075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] client lang: <none>
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] server lang: <none>
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] kex follows: False
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] Compression: none
2025-12-03T10:31:56.343 [DEBUG] [Thread-115075] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:31:56.361 [DEBUG] [Thread-115075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:31:56.362 [DEBUG] [Thread-115075] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:31:56.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:31:56.363 [DEBUG] [Thread-115075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:31:56.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:31:56.365 [DEBUG] [Thread-115075] [transport.py] [_log()] userauth is OK
2025-12-03T10:31:56.365 [DEBUG] [Thread-115075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:31:56.366 [DEBUG] [Thread-115075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:31:56.366 [DEBUG] [Thread-115075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:31:56.366 [DEBUG] [Thread-115075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:31:56.383 [INFO] [Thread-115075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:31:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:31:56.962 [DEBUG] [Thread-115075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:31:56.962 [DEBUG] [Thread-115075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:31:56.962 [DEBUG] [Thread-115075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:31:57.003 [DEBUG] [Thread-115075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:31:57.003 [DEBUG] [Thread-115075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:31:57.006 [DEBUG] [Thread-115075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:31:57.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:31:57.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:31:57.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:31:57.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:31:57.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:31:57.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:31:57.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:31:57.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:31:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:31:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.355259 -999.00  +16.00  13.54     53   +6.50 1 2 1 1 1   888    0 11.89 85.02 ----- 16.4 13.5 147.6 15.7 23.4 -21.6 22.9 -19.9 22.4 -19.2 22.9 -18.9
2025-12-03T10:31:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:31:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:31:57.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.355259
2025-12-03T10:31:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:31:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:31:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:31:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:31:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:31:57.026 [DEBUG] [Thread-115075] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:31:57.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:31:43', tmtdew=11.13, humidity=47.53, cloud=0.0, wind=21.67, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:31:34.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:31:57.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:31:57.122 [DEBUG] [Thread-115078] [transport.py] [_log()] starting thread (client mode): 0xa2784d00
2025-12-03T10:31:57.123 [DEBUG] [Thread-115078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:31:57.140 [DEBUG] [Thread-115078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:31:57.140 [INFO] [Thread-115078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:31:57.148 [DEBUG] [Thread-115078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] client lang: <none>
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] server lang: <none>
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] kex follows: False
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] Compression: none
2025-12-03T10:31:57.149 [DEBUG] [Thread-115078] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:31:57.206 [DEBUG] [Thread-115078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:31:57.207 [DEBUG] [Thread-115078] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:31:57.207 [DEBUG] [Thread-115078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:31:57.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:31:57.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:31:57.263 [DEBUG] [Thread-115078] [transport.py] [_log()] userauth is OK
2025-12-03T10:31:57.263 [DEBUG] [Thread-115078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:31:57.264 [DEBUG] [Thread-115078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:31:57.264 [DEBUG] [Thread-115078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:31:57.264 [DEBUG] [Thread-115078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:31:57.283 [INFO] [Thread-115078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:31:57.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:31:57.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:31:58.133 [DEBUG] [Thread-115078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:31:58.133 [DEBUG] [Thread-115078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:31:58.181 [DEBUG] [Thread-115078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:31:58.181 [DEBUG] [Thread-115078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:31:58.190 [DEBUG] [Thread-115078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:31:58.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:31:58.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:31:58.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:31:58.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:31:58.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:31:58.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:31:58.224 [DEBUG] [Thread-115078] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:32:00.869 [DEBUG] [Thread-115080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:15.911 [DEBUG] [Thread-115081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:28.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:32:28.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:32:28.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:32:28.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 32, 15), 11.1, 47.6, 0.0, 21.37, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:32:28.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:32:15
2025-12-03T10:32:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:32:29.177 [DEBUG] [Thread-115082] [transport.py] [_log()] starting thread (client mode): 0xa27ed060
2025-12-03T10:32:29.177 [DEBUG] [Thread-115082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:32:29.196 [DEBUG] [Thread-115082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:32:29.196 [INFO] [Thread-115082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:32:29.199 [DEBUG] [Thread-115082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] client lang: <none>
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] server lang: <none>
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] kex follows: False
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] Compression: none
2025-12-03T10:32:29.200 [DEBUG] [Thread-115082] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:32:29.217 [DEBUG] [Thread-115082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:32:29.218 [DEBUG] [Thread-115082] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:32:29.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:32:29.219 [DEBUG] [Thread-115082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:32:29.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:32:29.220 [DEBUG] [Thread-115082] [transport.py] [_log()] userauth is OK
2025-12-03T10:32:29.221 [DEBUG] [Thread-115082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:32:29.221 [DEBUG] [Thread-115082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:32:29.221 [DEBUG] [Thread-115082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:32:29.221 [DEBUG] [Thread-115082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:32:29.236 [INFO] [Thread-115082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:32:29.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:32:29.835 [DEBUG] [Thread-115082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:32:29.836 [DEBUG] [Thread-115082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:32:29.836 [DEBUG] [Thread-115082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:32:29.877 [DEBUG] [Thread-115082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:32:29.877 [DEBUG] [Thread-115082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:32:29.879 [DEBUG] [Thread-115082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:32:29.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:32:29.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:32:29.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:32:29.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:32:29.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:32:29.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:32:29.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:32:29.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:32:29.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:32:29.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.355259 -999.00  +16.00  13.54     53   +6.50 1 2 1 1 1   888    0 11.89 85.02 ----- 16.4 13.5 147.6 15.7 23.4 -21.6 22.9 -19.9 22.4 -19.2 22.9 -18.9
2025-12-03T10:32:29.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:32:29.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:32:29.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.355259
2025-12-03T10:32:29.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:32:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:32:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:32:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:32:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:32:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:32:15', tmtdew=11.1, humidity=47.6, cloud=0.0, wind=21.37, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:31:34.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:32:29.903 [DEBUG] [Thread-115082] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:32:29.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:32:29.999 [DEBUG] [Thread-115085] [transport.py] [_log()] starting thread (client mode): 0xa270aa40
2025-12-03T10:32:29.999 [DEBUG] [Thread-115085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:32:30.014 [DEBUG] [Thread-115085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:32:30.014 [INFO] [Thread-115085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:32:30.021 [DEBUG] [Thread-115085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] client lang: <none>
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] server lang: <none>
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] kex follows: False
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] Compression: none
2025-12-03T10:32:30.022 [DEBUG] [Thread-115085] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:32:30.083 [DEBUG] [Thread-115085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:32:30.084 [DEBUG] [Thread-115085] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:32:30.084 [DEBUG] [Thread-115085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:32:30.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:32:30.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:32:30.138 [DEBUG] [Thread-115085] [transport.py] [_log()] userauth is OK
2025-12-03T10:32:30.139 [DEBUG] [Thread-115085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:32:30.139 [DEBUG] [Thread-115085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:32:30.139 [DEBUG] [Thread-115085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:32:30.139 [DEBUG] [Thread-115085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:32:30.158 [INFO] [Thread-115085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:32:30.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:32:30.934 [DEBUG] [Thread-115087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:31.070 [DEBUG] [Thread-115085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:32:31.070 [DEBUG] [Thread-115085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:32:31.118 [DEBUG] [Thread-115085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:32:31.118 [DEBUG] [Thread-115085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:32:31.126 [DEBUG] [Thread-115085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:32:31.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:32:31.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:32:31.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:32:31.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:32:31.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:32:31.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:32:31.161 [DEBUG] [Thread-115085] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:32:40.688 [DEBUG] [Thread-115088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:45.975 [DEBUG] [Thread-115089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:46.561 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:32:46.561 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:01.001 [DEBUG] [Thread-115090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:01.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:33:01.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:33:01.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:33:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 32, 47), 11.0, 47.95, 0.0, 22.29, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:33:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:32:47
2025-12-03T10:33:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:33:02.143 [DEBUG] [Thread-115091] [transport.py] [_log()] starting thread (client mode): 0xa27b7b80
2025-12-03T10:33:02.143 [DEBUG] [Thread-115091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:33:02.164 [DEBUG] [Thread-115091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:33:02.164 [INFO] [Thread-115091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:33:02.167 [DEBUG] [Thread-115091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:33:02.167 [DEBUG] [Thread-115091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:33:02.167 [DEBUG] [Thread-115091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:33:02.167 [DEBUG] [Thread-115091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:02.167 [DEBUG] [Thread-115091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] client lang: <none>
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] server lang: <none>
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] kex follows: False
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:33:02.168 [DEBUG] [Thread-115091] [transport.py] [_log()] Compression: none
2025-12-03T10:33:02.169 [DEBUG] [Thread-115091] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:33:02.186 [DEBUG] [Thread-115091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:33:02.187 [DEBUG] [Thread-115091] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:33:02.187 [DEBUG] [Thread-115091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:33:02.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:33:02.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:33:02.189 [DEBUG] [Thread-115091] [transport.py] [_log()] userauth is OK
2025-12-03T10:33:02.189 [DEBUG] [Thread-115091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:33:02.189 [DEBUG] [Thread-115091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:33:02.189 [DEBUG] [Thread-115091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:33:02.189 [DEBUG] [Thread-115091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:33:02.225 [INFO] [Thread-115091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:33:02.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:33:02.878 [DEBUG] [Thread-115091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:33:02.879 [DEBUG] [Thread-115091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:33:02.879 [DEBUG] [Thread-115091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:33:02.920 [DEBUG] [Thread-115091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:33:02.920 [DEBUG] [Thread-115091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:33:02.923 [DEBUG] [Thread-115091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:33:02.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:33:02.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:33:02.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:33:02.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:33:02.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:33:02.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:33:02.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:33:02.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:33:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:33:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.355607 -999.00  +16.20  24.16     53   +6.80 1 2 1 1 1   888    0 11.66 80.65 ----- 23.5 24.2 167.6 28.4 23.4 -20.7 22.8 -20.4 22.4 -19.4 23.0 -19.4
2025-12-03T10:33:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:33:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:33:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.355607
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:33:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:32:47', tmtdew=11.0, humidity=47.95, cloud=0.0, wind=22.29, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:32:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:33:02.950 [DEBUG] [Thread-115091] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:33:03.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:33:03.037 [DEBUG] [Thread-115094] [transport.py] [_log()] starting thread (client mode): 0xa27878e0
2025-12-03T10:33:03.037 [DEBUG] [Thread-115094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:33:03.052 [DEBUG] [Thread-115094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:33:03.052 [INFO] [Thread-115094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:03.060 [DEBUG] [Thread-115094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] client lang: <none>
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] server lang: <none>
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] kex follows: False
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] Compression: none
2025-12-03T10:33:03.061 [DEBUG] [Thread-115094] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:33:03.119 [DEBUG] [Thread-115094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:33:03.120 [DEBUG] [Thread-115094] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:33:03.120 [DEBUG] [Thread-115094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:33:03.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:33:03.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:33:03.182 [DEBUG] [Thread-115094] [transport.py] [_log()] userauth is OK
2025-12-03T10:33:03.182 [DEBUG] [Thread-115094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:33:03.183 [DEBUG] [Thread-115094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:33:03.183 [DEBUG] [Thread-115094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:33:03.183 [DEBUG] [Thread-115094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:33:03.203 [INFO] [Thread-115094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:33:03.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:33:03.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:33:04.033 [DEBUG] [Thread-115094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:33:04.034 [DEBUG] [Thread-115094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:33:04.082 [DEBUG] [Thread-115094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:33:04.082 [DEBUG] [Thread-115094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:33:04.091 [DEBUG] [Thread-115094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:33:04.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:33:04.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:33:04.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:33:04.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:33:04.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:33:04.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:33:04.125 [DEBUG] [Thread-115094] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:33:16.031 [DEBUG] [Thread-115096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:31.074 [DEBUG] [Thread-115097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:34.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:33:34.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:33:34.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:33:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 33, 19), 10.95, 48.13, 0.0, 27.86, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:33:34.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:33:19
2025-12-03T10:33:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:33:35.104 [DEBUG] [Thread-115098] [transport.py] [_log()] starting thread (client mode): 0xa2784af0
2025-12-03T10:33:35.105 [DEBUG] [Thread-115098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:33:35.115 [DEBUG] [Thread-115098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:33:35.115 [INFO] [Thread-115098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:33:35.118 [DEBUG] [Thread-115098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:33:35.118 [DEBUG] [Thread-115098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:33:35.118 [DEBUG] [Thread-115098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:33:35.118 [DEBUG] [Thread-115098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] client lang: <none>
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] server lang: <none>
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] kex follows: False
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] Compression: none
2025-12-03T10:33:35.119 [DEBUG] [Thread-115098] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:33:35.135 [DEBUG] [Thread-115098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:33:35.135 [DEBUG] [Thread-115098] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:33:35.136 [DEBUG] [Thread-115098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:33:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:33:35.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:33:35.137 [DEBUG] [Thread-115098] [transport.py] [_log()] userauth is OK
2025-12-03T10:33:35.137 [DEBUG] [Thread-115098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:33:35.137 [DEBUG] [Thread-115098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:33:35.137 [DEBUG] [Thread-115098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:33:35.138 [DEBUG] [Thread-115098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:33:35.172 [INFO] [Thread-115098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:33:35.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:33:35.821 [DEBUG] [Thread-115098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:33:35.821 [DEBUG] [Thread-115098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:33:35.822 [DEBUG] [Thread-115098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:33:35.862 [DEBUG] [Thread-115098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:33:35.862 [DEBUG] [Thread-115098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:33:35.865 [DEBUG] [Thread-115098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:33:35.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:33:35.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:33:35.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:33:35.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:33:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:33:35.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:33:35.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:33:35.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:33:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:33:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.355954 -999.00  +16.30  27.67     52   +6.60 1 2 1 1 1   888    0 11.50 75.13 ----- 25.7 27.7 164.4 36.4 23.2 -23.0 22.7 -20.6 22.2 -20.6 22.8 -22.7
2025-12-03T10:33:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:33:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:33:35.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.355954
2025-12-03T10:33:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:33:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:33:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:33:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:33:35.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:33:35.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:33:19', tmtdew=10.95, humidity=48.13, cloud=0.0, wind=27.86, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:32:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:33:35.892 [DEBUG] [Thread-115098] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:33:35.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:33:35.988 [DEBUG] [Thread-115101] [transport.py] [_log()] starting thread (client mode): 0xa27e83a0
2025-12-03T10:33:35.988 [DEBUG] [Thread-115101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:33:36.003 [DEBUG] [Thread-115101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:33:36.003 [INFO] [Thread-115101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:33:36.010 [DEBUG] [Thread-115101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:33:36.010 [DEBUG] [Thread-115101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] client lang: <none>
2025-12-03T10:33:36.011 [DEBUG] [Thread-115101] [transport.py] [_log()] server lang: <none>
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] kex follows: False
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] Compression: none
2025-12-03T10:33:36.012 [DEBUG] [Thread-115101] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:33:36.071 [DEBUG] [Thread-115101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:33:36.071 [DEBUG] [Thread-115101] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:33:36.072 [DEBUG] [Thread-115101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:33:36.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:33:36.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:33:36.126 [DEBUG] [Thread-115101] [transport.py] [_log()] userauth is OK
2025-12-03T10:33:36.127 [DEBUG] [Thread-115101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:33:36.127 [DEBUG] [Thread-115101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:33:36.127 [DEBUG] [Thread-115101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:33:36.127 [DEBUG] [Thread-115101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:33:36.148 [INFO] [Thread-115101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:33:36.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:33:37.004 [DEBUG] [Thread-115101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:33:37.004 [DEBUG] [Thread-115101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:33:37.052 [DEBUG] [Thread-115101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:33:37.052 [DEBUG] [Thread-115101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:33:37.060 [DEBUG] [Thread-115101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:33:37.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:33:37.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:33:37.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:33:37.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:33:37.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:33:37.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:33:37.095 [DEBUG] [Thread-115101] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:33:40.732 [DEBUG] [Thread-115103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:46.103 [DEBUG] [Thread-115104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:46.700 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:33:46.701 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:01.145 [DEBUG] [Thread-115105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:34:07.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:34:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:34:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 33, 51), 10.78, 48.66, 0.0, 31.87, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:34:07.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:33:51
2025-12-03T10:34:07.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:34:08.088 [DEBUG] [Thread-115106] [transport.py] [_log()] starting thread (client mode): 0xa27ef550
2025-12-03T10:34:08.088 [DEBUG] [Thread-115106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:34:08.107 [DEBUG] [Thread-115106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:34:08.107 [INFO] [Thread-115106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:34:08.110 [DEBUG] [Thread-115106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:34:08.110 [DEBUG] [Thread-115106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:34:08.110 [DEBUG] [Thread-115106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:34:08.110 [DEBUG] [Thread-115106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:08.110 [DEBUG] [Thread-115106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] client lang: <none>
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] server lang: <none>
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] kex follows: False
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] Compression: none
2025-12-03T10:34:08.111 [DEBUG] [Thread-115106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:34:08.131 [DEBUG] [Thread-115106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:34:08.131 [DEBUG] [Thread-115106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:34:08.132 [DEBUG] [Thread-115106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:34:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:34:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:34:08.134 [DEBUG] [Thread-115106] [transport.py] [_log()] userauth is OK
2025-12-03T10:34:08.134 [DEBUG] [Thread-115106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:34:08.134 [DEBUG] [Thread-115106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:34:08.134 [DEBUG] [Thread-115106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:34:08.134 [DEBUG] [Thread-115106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:34:08.154 [INFO] [Thread-115106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:34:08.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:34:08.775 [DEBUG] [Thread-115106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:34:08.775 [DEBUG] [Thread-115106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:34:08.775 [DEBUG] [Thread-115106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:34:08.816 [DEBUG] [Thread-115106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:34:08.816 [DEBUG] [Thread-115106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:34:08.819 [DEBUG] [Thread-115106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:34:08.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:34:08.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:34:08.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:34:08.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:34:08.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:34:08.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:34:08.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.356301 -999.00  +16.20  24.72     53   +6.90 1 2 1 1 1   888    0 11.44 73.59 ----- 27.8 24.7 139.0 31.9 23.3 -20.8 22.6 -21.6 22.2 -19.1 22.8 -21.5
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:34:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.356301
2025-12-03T10:34:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:34:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:34:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:34:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:34:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:34:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:33:51', tmtdew=10.78, humidity=48.66, cloud=0.0, wind=31.87, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:33:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:34:08.842 [DEBUG] [Thread-115106] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:34:08.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:34:08.937 [DEBUG] [Thread-115109] [transport.py] [_log()] starting thread (client mode): 0xa27edc30
2025-12-03T10:34:08.937 [DEBUG] [Thread-115109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:34:08.951 [DEBUG] [Thread-115109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:34:08.951 [INFO] [Thread-115109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:34:08.959 [DEBUG] [Thread-115109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:34:08.959 [DEBUG] [Thread-115109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:34:08.959 [DEBUG] [Thread-115109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] client lang: <none>
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] server lang: <none>
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] kex follows: False
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] Compression: none
2025-12-03T10:34:08.960 [DEBUG] [Thread-115109] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:34:09.018 [DEBUG] [Thread-115109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:34:09.018 [DEBUG] [Thread-115109] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:34:09.018 [DEBUG] [Thread-115109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:34:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:34:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:34:09.074 [DEBUG] [Thread-115109] [transport.py] [_log()] userauth is OK
2025-12-03T10:34:09.074 [DEBUG] [Thread-115109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:34:09.075 [DEBUG] [Thread-115109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:34:09.075 [DEBUG] [Thread-115109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:34:09.075 [DEBUG] [Thread-115109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:34:09.093 [INFO] [Thread-115109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:34:09.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:34:09.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:34:09.893 [DEBUG] [Thread-115109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:34:09.893 [DEBUG] [Thread-115109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:34:09.941 [DEBUG] [Thread-115109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:34:09.941 [DEBUG] [Thread-115109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:34:09.953 [DEBUG] [Thread-115109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:34:09.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:34:09.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:34:09.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:34:09.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:34:09.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:34:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:34:09.996 [DEBUG] [Thread-115109] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:34:16.167 [DEBUG] [Thread-115111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:31.212 [DEBUG] [Thread-115112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:39.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:34:39.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:34:40.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:34:40.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 34, 23), 10.83, 48.5, 0.0, 32.85, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:34:40.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:34:23
2025-12-03T10:34:40.768 [DEBUG] [Thread-115113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:40.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:34:40.967 [DEBUG] [Thread-115114] [transport.py] [_log()] starting thread (client mode): 0xa270a170
2025-12-03T10:34:40.967 [DEBUG] [Thread-115114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:34:40.987 [DEBUG] [Thread-115114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:34:40.987 [INFO] [Thread-115114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:34:40.990 [DEBUG] [Thread-115114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:34:40.990 [DEBUG] [Thread-115114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:34:40.990 [DEBUG] [Thread-115114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] client lang: <none>
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] server lang: <none>
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] kex follows: False
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] Compression: none
2025-12-03T10:34:40.991 [DEBUG] [Thread-115114] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:34:41.008 [DEBUG] [Thread-115114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:34:41.008 [DEBUG] [Thread-115114] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:34:41.009 [DEBUG] [Thread-115114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:34:41.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:34:41.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:34:41.009 [DEBUG] [Thread-115114] [transport.py] [_log()] userauth is OK
2025-12-03T10:34:41.009 [DEBUG] [Thread-115114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:34:41.009 [DEBUG] [Thread-115114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:34:41.009 [DEBUG] [Thread-115114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:34:41.010 [DEBUG] [Thread-115114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:34:41.019 [INFO] [Thread-115114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:34:41.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:34:41.650 [DEBUG] [Thread-115114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:34:41.650 [DEBUG] [Thread-115114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:34:41.650 [DEBUG] [Thread-115114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:34:41.691 [DEBUG] [Thread-115114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:34:41.692 [DEBUG] [Thread-115114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:34:41.694 [DEBUG] [Thread-115114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:34:41.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:34:41.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:34:41.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:34:41.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:34:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:34:41.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:34:41.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:34:41.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:34:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:34:41.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.356995 -999.00  +16.10  23.70     53   +6.50 1 2 1 1 1   888    0 11.31 66.71 ----- 25.0 23.7 133.0 34.5 23.1 -22.2 22.6 -21.7 22.1 -20.2 22.7 -20.7
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.356995
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:34:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:34:23', tmtdew=10.83, humidity=48.5, cloud=0.0, wind=32.85, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:34:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:34:41.714 [DEBUG] [Thread-115114] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:34:41.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:34:41.799 [DEBUG] [Thread-115117] [transport.py] [_log()] starting thread (client mode): 0xa27ecdc0
2025-12-03T10:34:41.799 [DEBUG] [Thread-115117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:34:41.815 [DEBUG] [Thread-115117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:34:41.816 [INFO] [Thread-115117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] client lang: <none>
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] server lang: <none>
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] kex follows: False
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:34:41.823 [DEBUG] [Thread-115117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:34:41.824 [DEBUG] [Thread-115117] [transport.py] [_log()] Compression: none
2025-12-03T10:34:41.824 [DEBUG] [Thread-115117] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:34:41.885 [DEBUG] [Thread-115117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:34:41.885 [DEBUG] [Thread-115117] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:34:41.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:34:41.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:34:41.886 [DEBUG] [Thread-115117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:34:41.943 [DEBUG] [Thread-115117] [transport.py] [_log()] userauth is OK
2025-12-03T10:34:41.943 [DEBUG] [Thread-115117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:34:41.943 [DEBUG] [Thread-115117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:34:41.943 [DEBUG] [Thread-115117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:34:41.943 [DEBUG] [Thread-115117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:34:41.957 [INFO] [Thread-115117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:34:41.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:34:41.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:34:42.814 [DEBUG] [Thread-115117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:34:42.815 [DEBUG] [Thread-115117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:34:42.866 [DEBUG] [Thread-115117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:34:42.866 [DEBUG] [Thread-115117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:34:42.874 [DEBUG] [Thread-115117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:34:42.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:34:42.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:34:42.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:34:42.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:34:42.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:34:42.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:34:42.908 [DEBUG] [Thread-115117] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:34:46.239 [DEBUG] [Thread-115119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:46.840 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:34:46.841 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:01.277 [DEBUG] [Thread-115120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:35:12.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:35:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:35:13.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 34, 55), 10.73, 48.98, 0.0, 27.21, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:35:13.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:34:55
2025-12-03T10:35:13.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:35:13.853 [DEBUG] [Thread-115121] [transport.py] [_log()] starting thread (client mode): 0xa27e8700
2025-12-03T10:35:13.853 [DEBUG] [Thread-115121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:35:13.876 [DEBUG] [Thread-115121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:35:13.876 [INFO] [Thread-115121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:35:13.879 [DEBUG] [Thread-115121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] client lang: <none>
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] server lang: <none>
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] kex follows: False
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] Compression: none
2025-12-03T10:35:13.880 [DEBUG] [Thread-115121] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:35:13.896 [DEBUG] [Thread-115121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:35:13.896 [DEBUG] [Thread-115121] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:35:13.897 [DEBUG] [Thread-115121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:35:13.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:35:13.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:35:13.898 [DEBUG] [Thread-115121] [transport.py] [_log()] userauth is OK
2025-12-03T10:35:13.899 [DEBUG] [Thread-115121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:35:13.899 [DEBUG] [Thread-115121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:35:13.899 [DEBUG] [Thread-115121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:35:13.899 [DEBUG] [Thread-115121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:35:13.916 [INFO] [Thread-115121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:35:13.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:35:14.735 [DEBUG] [Thread-115121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:35:14.735 [DEBUG] [Thread-115121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:35:14.736 [DEBUG] [Thread-115121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:35:14.776 [DEBUG] [Thread-115121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:35:14.776 [DEBUG] [Thread-115121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:35:14.779 [DEBUG] [Thread-115121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:35:14.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:35:14.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:35:14.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:35:14.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:35:14.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:35:14.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:35:14.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:35:14.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:35:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:35:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.357343 -999.00  +16.00  21.12     53   +6.60 1 2 1 1 1   888    0 11.46 67.60 ----- 17.3 21.1 129.6 30.0 23.1 -21.4 22.7 -21.3 22.2 -20.3 22.7 -20.6
2025-12-03T10:35:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:35:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:35:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.357343
2025-12-03T10:35:14.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:35:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:35:14.807 [DEBUG] [Thread-115121] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:35:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:35:14.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:35:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:35:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:34:55', tmtdew=10.73, humidity=48.98, cloud=0.0, wind=27.21, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:34:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:35:14.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:35:14.902 [DEBUG] [Thread-115124] [transport.py] [_log()] starting thread (client mode): 0xa27c2500
2025-12-03T10:35:14.903 [DEBUG] [Thread-115124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:35:14.919 [DEBUG] [Thread-115124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:35:14.919 [INFO] [Thread-115124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:14.926 [DEBUG] [Thread-115124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] client lang: <none>
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] server lang: <none>
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] kex follows: False
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] Compression: none
2025-12-03T10:35:14.927 [DEBUG] [Thread-115124] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:35:14.986 [DEBUG] [Thread-115124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:35:14.986 [DEBUG] [Thread-115124] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:35:14.987 [DEBUG] [Thread-115124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:35:14.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:35:14.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:35:15.042 [DEBUG] [Thread-115124] [transport.py] [_log()] userauth is OK
2025-12-03T10:35:15.042 [DEBUG] [Thread-115124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:35:15.043 [DEBUG] [Thread-115124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:35:15.043 [DEBUG] [Thread-115124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:35:15.043 [DEBUG] [Thread-115124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:35:15.064 [INFO] [Thread-115124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:35:15.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:35:15.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:35:15.905 [DEBUG] [Thread-115124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:35:15.905 [DEBUG] [Thread-115124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:35:15.953 [DEBUG] [Thread-115124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:35:15.953 [DEBUG] [Thread-115124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:35:15.962 [DEBUG] [Thread-115124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:35:15.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:35:15.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:35:15.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:35:15.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:35:15.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:35:15.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:35:15.997 [DEBUG] [Thread-115124] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:35:16.307 [DEBUG] [Thread-115126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:31.348 [DEBUG] [Thread-115127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:40.813 [DEBUG] [Thread-115128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:46.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:35:46.020 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:35:46.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:35:46.375 [DEBUG] [Thread-115129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 35, 27), 10.58, 49.44, 0.0, 28.64, 15.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:35:46.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:35:27
2025-12-03T10:35:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:35:46.971 [DEBUG] [Thread-115130] [transport.py] [_log()] starting thread (client mode): 0xa27ee980
2025-12-03T10:35:46.971 [DEBUG] [Thread-115130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:35:46.982 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:46.983 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:35:46.992 [DEBUG] [Thread-115130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:35:46.992 [INFO] [Thread-115130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] client lang: <none>
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] server lang: <none>
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] kex follows: False
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:35:46.993 [DEBUG] [Thread-115130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:35:46.994 [DEBUG] [Thread-115130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:35:46.994 [DEBUG] [Thread-115130] [transport.py] [_log()] Compression: none
2025-12-03T10:35:46.994 [DEBUG] [Thread-115130] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:35:47.002 [DEBUG] [Thread-115130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:35:47.002 [DEBUG] [Thread-115130] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:35:47.002 [DEBUG] [Thread-115130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:35:47.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:35:47.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:35:47.004 [DEBUG] [Thread-115130] [transport.py] [_log()] userauth is OK
2025-12-03T10:35:47.004 [DEBUG] [Thread-115130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:35:47.004 [DEBUG] [Thread-115130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:35:47.005 [DEBUG] [Thread-115130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:35:47.005 [DEBUG] [Thread-115130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:35:47.040 [INFO] [Thread-115130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:35:47.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:35:47.641 [DEBUG] [Thread-115130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:35:47.641 [DEBUG] [Thread-115130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:35:47.642 [DEBUG] [Thread-115130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:35:47.683 [DEBUG] [Thread-115130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:35:47.683 [DEBUG] [Thread-115130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:35:47.686 [DEBUG] [Thread-115130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:35:47.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:35:47.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:35:47.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:35:47.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:35:47.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:35:47.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:35:47.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.357690 -999.00  +15.90  29.01     53   +6.30 1 2 1 1 1   888    0 11.35 65.77 ----- 19.7 29.0 144.4 31.2 22.9 -21.4 22.5 -22.4 22.1 -20.3 22.6 -23.5
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:35:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.357690
2025-12-03T10:35:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:35:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:35:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:35:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:35:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:35:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:35:27', tmtdew=10.58, humidity=49.44, cloud=0.0, wind=28.64, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:35:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:35:47.710 [DEBUG] [Thread-115130] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:35:47.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:35:47.806 [DEBUG] [Thread-115133] [transport.py] [_log()] starting thread (client mode): 0xa27c2a70
2025-12-03T10:35:47.806 [DEBUG] [Thread-115133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:35:47.821 [DEBUG] [Thread-115133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:35:47.821 [INFO] [Thread-115133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:47.829 [DEBUG] [Thread-115133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] client lang: <none>
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] server lang: <none>
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] kex follows: False
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:35:47.830 [DEBUG] [Thread-115133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:35:47.831 [DEBUG] [Thread-115133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:35:47.831 [DEBUG] [Thread-115133] [transport.py] [_log()] Compression: none
2025-12-03T10:35:47.831 [DEBUG] [Thread-115133] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:35:47.886 [DEBUG] [Thread-115133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:35:47.887 [DEBUG] [Thread-115133] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:35:47.888 [DEBUG] [Thread-115133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:35:47.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:35:47.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:35:47.942 [DEBUG] [Thread-115133] [transport.py] [_log()] userauth is OK
2025-12-03T10:35:47.942 [DEBUG] [Thread-115133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:35:47.943 [DEBUG] [Thread-115133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:35:47.943 [DEBUG] [Thread-115133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:35:47.943 [DEBUG] [Thread-115133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:35:47.965 [INFO] [Thread-115133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:35:47.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:35:47.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:35:48.805 [DEBUG] [Thread-115133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:35:48.805 [DEBUG] [Thread-115133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:35:48.853 [DEBUG] [Thread-115133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:35:48.853 [DEBUG] [Thread-115133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:35:48.862 [DEBUG] [Thread-115133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:35:48.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:35:48.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:35:48.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:35:48.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:35:48.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:35:48.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:35:48.896 [DEBUG] [Thread-115133] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:36:01.400 [DEBUG] [Thread-115135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:16.437 [DEBUG] [Thread-115136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:36:18.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:36:18.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:36:19.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 35, 59), 10.67, 49.13, 0.0, 22.21, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:36:19.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:35:59
2025-12-03T10:36:19.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:36:19.873 [DEBUG] [Thread-115137] [transport.py] [_log()] starting thread (client mode): 0xa27c33a0
2025-12-03T10:36:19.873 [DEBUG] [Thread-115137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:36:19.892 [DEBUG] [Thread-115137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:36:19.892 [INFO] [Thread-115137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:36:19.895 [DEBUG] [Thread-115137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] client lang: <none>
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] server lang: <none>
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] kex follows: False
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] Compression: none
2025-12-03T10:36:19.896 [DEBUG] [Thread-115137] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:36:19.914 [DEBUG] [Thread-115137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:36:19.915 [DEBUG] [Thread-115137] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:36:19.915 [DEBUG] [Thread-115137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:36:19.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:36:19.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:36:19.917 [DEBUG] [Thread-115137] [transport.py] [_log()] userauth is OK
2025-12-03T10:36:19.917 [DEBUG] [Thread-115137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:36:19.917 [DEBUG] [Thread-115137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:36:19.917 [DEBUG] [Thread-115137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:36:19.917 [DEBUG] [Thread-115137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:36:19.940 [INFO] [Thread-115137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:36:19.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:36:20.588 [DEBUG] [Thread-115137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:36:20.589 [DEBUG] [Thread-115137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:36:20.589 [DEBUG] [Thread-115137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:36:20.630 [DEBUG] [Thread-115137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:36:20.630 [DEBUG] [Thread-115137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:36:20.633 [DEBUG] [Thread-115137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:36:20.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:36:20.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:36:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:36:20.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:36:20.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:36:20.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:36:20.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:36:20.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:36:20.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:36:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.358037 -999.00  +15.60  19.38     54   +6.30 1 2 1 1 1   888    0 11.22 66.13 ----- 15.1 19.4 143.3 27.0 22.7 -21.9 22.4 -21.8 21.9 -20.4 22.5 -21.6
2025-12-03T10:36:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:36:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:36:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.358037
2025-12-03T10:36:20.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:36:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:36:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:36:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:36:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:36:20.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:35:59', tmtdew=10.67, humidity=49.13, cloud=0.0, wind=22.21, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:35:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:36:20.658 [DEBUG] [Thread-115137] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:36:20.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:36:20.758 [DEBUG] [Thread-115140] [transport.py] [_log()] starting thread (client mode): 0xa51cfd30
2025-12-03T10:36:20.758 [DEBUG] [Thread-115140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:36:20.779 [DEBUG] [Thread-115140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:36:20.779 [INFO] [Thread-115140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:36:20.790 [DEBUG] [Thread-115140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] client lang: <none>
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] server lang: <none>
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] kex follows: False
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] Compression: none
2025-12-03T10:36:20.791 [DEBUG] [Thread-115140] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:36:20.845 [DEBUG] [Thread-115140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:36:20.845 [DEBUG] [Thread-115140] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:36:20.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:36:20.846 [DEBUG] [Thread-115140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:36:20.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:36:20.902 [DEBUG] [Thread-115140] [transport.py] [_log()] userauth is OK
2025-12-03T10:36:20.902 [DEBUG] [Thread-115140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:36:20.902 [DEBUG] [Thread-115140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:36:20.902 [DEBUG] [Thread-115140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:36:20.902 [DEBUG] [Thread-115140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:36:20.917 [INFO] [Thread-115140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:36:20.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:36:20.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:36:21.774 [DEBUG] [Thread-115140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:36:21.774 [DEBUG] [Thread-115140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:36:21.823 [DEBUG] [Thread-115140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:36:21.823 [DEBUG] [Thread-115140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:36:21.832 [DEBUG] [Thread-115140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:36:21.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:36:21.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:36:21.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:36:21.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:36:21.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:36:21.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:36:21.866 [DEBUG] [Thread-115140] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:36:31.467 [DEBUG] [Thread-115142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:40.841 [DEBUG] [Thread-115143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:46.521 [DEBUG] [Thread-115144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:47.139 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:47.140 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:36:51.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:36:51.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:36:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:36:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 36, 31), 10.64, 49.22, 0.0, 21.65, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:36:52.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:36:31
2025-12-03T10:36:52.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:36:52.831 [DEBUG] [Thread-115145] [transport.py] [_log()] starting thread (client mode): 0xa27ee410
2025-12-03T10:36:52.831 [DEBUG] [Thread-115145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:36:52.852 [DEBUG] [Thread-115145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:36:52.852 [INFO] [Thread-115145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:36:52.855 [DEBUG] [Thread-115145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:36:52.855 [DEBUG] [Thread-115145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:36:52.855 [DEBUG] [Thread-115145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] client lang: <none>
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] server lang: <none>
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] kex follows: False
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] Compression: none
2025-12-03T10:36:52.856 [DEBUG] [Thread-115145] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:36:52.872 [DEBUG] [Thread-115145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:36:52.873 [DEBUG] [Thread-115145] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:36:52.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:36:52.874 [DEBUG] [Thread-115145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:36:52.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:36:52.876 [DEBUG] [Thread-115145] [transport.py] [_log()] userauth is OK
2025-12-03T10:36:52.876 [DEBUG] [Thread-115145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:36:52.876 [DEBUG] [Thread-115145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:36:52.876 [DEBUG] [Thread-115145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:36:52.876 [DEBUG] [Thread-115145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:36:52.909 [INFO] [Thread-115145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:36:52.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:36:53.589 [DEBUG] [Thread-115145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:36:53.589 [DEBUG] [Thread-115145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:36:53.589 [DEBUG] [Thread-115145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:36:53.630 [DEBUG] [Thread-115145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:36:53.630 [DEBUG] [Thread-115145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:36:53.633 [DEBUG] [Thread-115145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:36:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:36:53.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:36:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:36:53.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:36:53.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:36:53.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:36:53.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:36:53.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.358384 -999.00  +15.90  14.75     54   +6.60 1 2 1 1 1   888    0 11.50 62.57 ----- 14.6 14.8 133.3 19.5 22.7 -21.9 22.3 -21.4 21.9 -20.8 22.4 -21.7
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.358384
2025-12-03T10:36:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:36:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:36:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:36:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:36:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:36:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:36:31', tmtdew=10.64, humidity=49.22, cloud=0.0, wind=21.65, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:36:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:36:53.656 [DEBUG] [Thread-115145] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:36:53.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:36:53.755 [DEBUG] [Thread-115148] [transport.py] [_log()] starting thread (client mode): 0xa27ef4f0
2025-12-03T10:36:53.755 [DEBUG] [Thread-115148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:36:53.775 [DEBUG] [Thread-115148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:36:53.775 [INFO] [Thread-115148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:53.785 [DEBUG] [Thread-115148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] client lang: <none>
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] server lang: <none>
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] kex follows: False
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] Compression: none
2025-12-03T10:36:53.786 [DEBUG] [Thread-115148] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:36:53.843 [DEBUG] [Thread-115148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:36:53.844 [DEBUG] [Thread-115148] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:36:53.844 [DEBUG] [Thread-115148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:36:53.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:36:53.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:36:53.906 [DEBUG] [Thread-115148] [transport.py] [_log()] userauth is OK
2025-12-03T10:36:53.906 [DEBUG] [Thread-115148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:36:53.907 [DEBUG] [Thread-115148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:36:53.907 [DEBUG] [Thread-115148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:36:53.907 [DEBUG] [Thread-115148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:36:53.926 [INFO] [Thread-115148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:36:53.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:36:53.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:36:54.766 [DEBUG] [Thread-115148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:36:54.766 [DEBUG] [Thread-115148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:36:54.815 [DEBUG] [Thread-115148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:36:54.815 [DEBUG] [Thread-115148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:36:54.824 [DEBUG] [Thread-115148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:36:54.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:36:54.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:36:54.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:36:54.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:36:54.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:36:54.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:36:54.858 [DEBUG] [Thread-115148] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:37:01.551 [DEBUG] [Thread-115150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:16.596 [DEBUG] [Thread-115151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:24.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:37:24.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:37:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:37:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 37, 3), 10.59, 49.36, 0.0, 23.11, 15.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:37:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:37:03
2025-12-03T10:37:25.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:37:25.821 [DEBUG] [Thread-115152] [transport.py] [_log()] starting thread (client mode): 0xa2785ed0
2025-12-03T10:37:25.821 [DEBUG] [Thread-115152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:37:25.842 [DEBUG] [Thread-115152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:37:25.842 [INFO] [Thread-115152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:37:25.843 [DEBUG] [Thread-115152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:37:25.843 [DEBUG] [Thread-115152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:37:25.843 [DEBUG] [Thread-115152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:37:25.843 [DEBUG] [Thread-115152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] client lang: <none>
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] server lang: <none>
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] kex follows: False
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] Compression: none
2025-12-03T10:37:25.844 [DEBUG] [Thread-115152] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:37:25.864 [DEBUG] [Thread-115152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:37:25.865 [DEBUG] [Thread-115152] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:37:25.865 [DEBUG] [Thread-115152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:37:25.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:37:25.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:37:25.867 [DEBUG] [Thread-115152] [transport.py] [_log()] userauth is OK
2025-12-03T10:37:25.867 [DEBUG] [Thread-115152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:37:25.867 [DEBUG] [Thread-115152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:37:25.868 [DEBUG] [Thread-115152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:37:25.868 [DEBUG] [Thread-115152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:37:25.888 [INFO] [Thread-115152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:37:25.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:37:26.532 [DEBUG] [Thread-115152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:37:26.532 [DEBUG] [Thread-115152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:37:26.532 [DEBUG] [Thread-115152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:37:26.573 [DEBUG] [Thread-115152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:37:26.573 [DEBUG] [Thread-115152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:37:26.576 [DEBUG] [Thread-115152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:37:26.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:37:26.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:37:26.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:37:26.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:37:26.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:37:26.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:37:26.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:37:26.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.358732 -999.00  +16.10  20.91     52   +6.40 1 2 1 1 1   888    0 11.14 59.11 ----- 16.3 20.9 153.8 26.9 22.6 -22.8 22.0 -22.6 21.7 -22.2 22.3 -22.7
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.358732
2025-12-03T10:37:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:37:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:37:26.601 [DEBUG] [Thread-115152] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:37:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:37:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:37:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:37:26.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:37:03', tmtdew=10.59, humidity=49.36, cloud=0.0, wind=23.11, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:36:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:37:26.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:37:26.697 [DEBUG] [Thread-115155] [transport.py] [_log()] starting thread (client mode): 0xa27c1a50
2025-12-03T10:37:26.698 [DEBUG] [Thread-115155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:37:26.712 [DEBUG] [Thread-115155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:37:26.712 [INFO] [Thread-115155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:37:26.719 [DEBUG] [Thread-115155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:37:26.719 [DEBUG] [Thread-115155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:37:26.719 [DEBUG] [Thread-115155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:37:26.719 [DEBUG] [Thread-115155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:26.719 [DEBUG] [Thread-115155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] client lang: <none>
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] server lang: <none>
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] kex follows: False
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] Compression: none
2025-12-03T10:37:26.720 [DEBUG] [Thread-115155] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:37:26.778 [DEBUG] [Thread-115155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:37:26.779 [DEBUG] [Thread-115155] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:37:26.779 [DEBUG] [Thread-115155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:37:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:37:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:37:26.838 [DEBUG] [Thread-115155] [transport.py] [_log()] userauth is OK
2025-12-03T10:37:26.838 [DEBUG] [Thread-115155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:37:26.839 [DEBUG] [Thread-115155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:37:26.839 [DEBUG] [Thread-115155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:37:26.839 [DEBUG] [Thread-115155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:37:26.857 [INFO] [Thread-115155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:37:26.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:37:26.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:37:27.685 [DEBUG] [Thread-115155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:37:27.685 [DEBUG] [Thread-115155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:37:27.734 [DEBUG] [Thread-115155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:37:27.734 [DEBUG] [Thread-115155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:37:27.743 [DEBUG] [Thread-115155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:37:27.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:37:27.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:37:27.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:37:27.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:37:27.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:37:27.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:37:27.777 [DEBUG] [Thread-115155] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:37:31.625 [DEBUG] [Thread-115157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:40.877 [DEBUG] [Thread-115158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:46.676 [DEBUG] [Thread-115159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:47.286 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:47.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:37:57.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:37:57.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:37:57.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:37:58.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 37, 35), 10.2, 50.8, 0.0, 22.76, 15.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:37:58.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:37:35
2025-12-03T10:37:58.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:37:58.792 [DEBUG] [Thread-115160] [transport.py] [_log()] starting thread (client mode): 0xa27094e0
2025-12-03T10:37:58.793 [DEBUG] [Thread-115160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:37:58.812 [DEBUG] [Thread-115160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:37:58.812 [INFO] [Thread-115160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] client lang: <none>
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] server lang: <none>
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] kex follows: False
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:37:58.815 [DEBUG] [Thread-115160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:37:58.816 [DEBUG] [Thread-115160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:37:58.816 [DEBUG] [Thread-115160] [transport.py] [_log()] Compression: none
2025-12-03T10:37:58.816 [DEBUG] [Thread-115160] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:37:58.833 [DEBUG] [Thread-115160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:37:58.834 [DEBUG] [Thread-115160] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:37:58.834 [DEBUG] [Thread-115160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:37:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:37:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:37:58.835 [DEBUG] [Thread-115160] [transport.py] [_log()] userauth is OK
2025-12-03T10:37:58.835 [DEBUG] [Thread-115160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:37:58.835 [DEBUG] [Thread-115160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:37:58.835 [DEBUG] [Thread-115160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:37:58.835 [DEBUG] [Thread-115160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:37:58.847 [INFO] [Thread-115160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:37:58.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:37:59.496 [DEBUG] [Thread-115160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:37:59.496 [DEBUG] [Thread-115160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:37:59.496 [DEBUG] [Thread-115160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:37:59.537 [DEBUG] [Thread-115160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:37:59.537 [DEBUG] [Thread-115160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:37:59.539 [DEBUG] [Thread-115160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:37:59.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:37:59.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:37:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:37:59.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:37:59.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:37:59.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:37:59.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.359079 -999.00  +15.70  23.70     53   +6.20 1 2 1 1 1   888    0 11.16 60.90 ----- 18.5 23.7 131.8 25.1 22.3 -23.5 21.9 -22.2 21.6 -20.5 22.1 -23.3
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.359079
2025-12-03T10:37:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:37:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:37:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:37:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:37:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:37:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:37:35', tmtdew=10.2, humidity=50.8, cloud=0.0, wind=22.76, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:37:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:37:59.557 [DEBUG] [Thread-115160] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:37:59.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:37:59.641 [DEBUG] [Thread-115163] [transport.py] [_log()] starting thread (client mode): 0xa27b0f40
2025-12-03T10:37:59.641 [DEBUG] [Thread-115163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:37:59.655 [DEBUG] [Thread-115163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:37:59.656 [INFO] [Thread-115163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] client lang: <none>
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] server lang: <none>
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] kex follows: False
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:37:59.663 [DEBUG] [Thread-115163] [transport.py] [_log()] Compression: none
2025-12-03T10:37:59.664 [DEBUG] [Thread-115163] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:37:59.721 [DEBUG] [Thread-115163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:37:59.721 [DEBUG] [Thread-115163] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:37:59.721 [DEBUG] [Thread-115163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:37:59.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:37:59.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:37:59.778 [DEBUG] [Thread-115163] [transport.py] [_log()] userauth is OK
2025-12-03T10:37:59.778 [DEBUG] [Thread-115163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:37:59.778 [DEBUG] [Thread-115163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:37:59.778 [DEBUG] [Thread-115163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:37:59.778 [DEBUG] [Thread-115163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:37:59.796 [INFO] [Thread-115163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:37:59.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:37:59.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:38:00.614 [DEBUG] [Thread-115163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:38:00.614 [DEBUG] [Thread-115163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:38:00.662 [DEBUG] [Thread-115163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:38:00.662 [DEBUG] [Thread-115163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:38:00.672 [DEBUG] [Thread-115163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:38:00.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:38:00.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:38:00.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:38:00.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:38:00.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:38:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:38:00.708 [DEBUG] [Thread-115163] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:38:01.703 [DEBUG] [Thread-115165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:16.752 [DEBUG] [Thread-115166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:38:30.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:38:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:38:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 38, 7), 10.55, 49.68, 0.0, 20.89, 15.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:38:31.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:38:07
2025-12-03T10:38:31.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:38:31.662 [DEBUG] [Thread-115167] [transport.py] [_log()] starting thread (client mode): 0xa27c0700
2025-12-03T10:38:31.662 [DEBUG] [Thread-115167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:38:31.681 [DEBUG] [Thread-115167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:38:31.681 [INFO] [Thread-115167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:38:31.684 [DEBUG] [Thread-115167] [transport.py] [_log()] client lang: <none>
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] server lang: <none>
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] kex follows: False
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] Compression: none
2025-12-03T10:38:31.685 [DEBUG] [Thread-115167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:38:31.703 [DEBUG] [Thread-115167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:38:31.704 [DEBUG] [Thread-115167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:38:31.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:38:31.705 [DEBUG] [Thread-115167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:38:31.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:38:31.707 [DEBUG] [Thread-115167] [transport.py] [_log()] userauth is OK
2025-12-03T10:38:31.707 [DEBUG] [Thread-115167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:38:31.707 [DEBUG] [Thread-115167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:38:31.707 [DEBUG] [Thread-115167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:38:31.707 [DEBUG] [Thread-115167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:38:31.731 [INFO] [Thread-115167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:38:31.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:38:31.784 [DEBUG] [Thread-115169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:32.369 [DEBUG] [Thread-115167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:38:32.370 [DEBUG] [Thread-115167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:38:32.370 [DEBUG] [Thread-115167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:38:32.410 [DEBUG] [Thread-115167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:38:32.410 [DEBUG] [Thread-115167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:38:32.412 [DEBUG] [Thread-115167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:38:32.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:38:32.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:38:32.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:38:32.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:38:32.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:38:32.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:38:32.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:38:32.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:38:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:38:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.359426 -999.00  +15.90  15.16     53   +6.40 1 2 1 1 1   888    0 11.25 52.44 ----- 20.5 15.2 129.3 26.1 22.2 -22.1 22.0 -21.4 21.6 -21.1 22.1 -21.6
2025-12-03T10:38:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:38:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:38:32.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.359426
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:38:32.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:38:07', tmtdew=10.55, humidity=49.68, cloud=0.0, wind=20.89, temperature=15.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:37:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:38:32.437 [DEBUG] [Thread-115167] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:38:32.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:38:32.535 [DEBUG] [Thread-115171] [transport.py] [_log()] starting thread (client mode): 0xa2708520
2025-12-03T10:38:32.535 [DEBUG] [Thread-115171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:38:32.554 [DEBUG] [Thread-115171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:38:32.554 [INFO] [Thread-115171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:38:32.561 [DEBUG] [Thread-115171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:38:32.561 [DEBUG] [Thread-115171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] client lang: <none>
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] server lang: <none>
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] kex follows: False
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] Compression: none
2025-12-03T10:38:32.562 [DEBUG] [Thread-115171] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:38:32.618 [DEBUG] [Thread-115171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:38:32.618 [DEBUG] [Thread-115171] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:38:32.618 [DEBUG] [Thread-115171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:38:32.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:38:32.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:38:32.680 [DEBUG] [Thread-115171] [transport.py] [_log()] userauth is OK
2025-12-03T10:38:32.680 [DEBUG] [Thread-115171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:38:32.680 [DEBUG] [Thread-115171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:38:32.680 [DEBUG] [Thread-115171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:38:32.681 [DEBUG] [Thread-115171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:38:32.701 [INFO] [Thread-115171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:38:32.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:38:32.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:38:33.543 [DEBUG] [Thread-115171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:38:33.543 [DEBUG] [Thread-115171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:38:33.593 [DEBUG] [Thread-115171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:38:33.593 [DEBUG] [Thread-115171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:38:33.603 [DEBUG] [Thread-115171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:38:33.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:38:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:38:33.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:38:33.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:38:33.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:38:33.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:38:33.647 [DEBUG] [Thread-115171] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:38:40.933 [DEBUG] [Thread-115173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:46.810 [DEBUG] [Thread-115174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:47.430 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:38:47.431 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:01.854 [DEBUG] [Thread-115175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:03.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:39:03.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:39:03.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:39:04.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 38, 39), 10.8, 48.48, 0.0, 20.31, 15.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:39:04.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:38:39
2025-12-03T10:39:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:39:04.608 [DEBUG] [Thread-115176] [transport.py] [_log()] starting thread (client mode): 0xa27277c0
2025-12-03T10:39:04.608 [DEBUG] [Thread-115176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:39:04.628 [DEBUG] [Thread-115176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:39:04.628 [INFO] [Thread-115176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] client lang: <none>
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] server lang: <none>
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] kex follows: False
2025-12-03T10:39:04.632 [DEBUG] [Thread-115176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] Compression: none
2025-12-03T10:39:04.633 [DEBUG] [Thread-115176] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:39:04.651 [DEBUG] [Thread-115176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:39:04.651 [DEBUG] [Thread-115176] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:39:04.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:39:04.652 [DEBUG] [Thread-115176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:39:04.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:39:04.654 [DEBUG] [Thread-115176] [transport.py] [_log()] userauth is OK
2025-12-03T10:39:04.654 [DEBUG] [Thread-115176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:39:04.655 [DEBUG] [Thread-115176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:39:04.655 [DEBUG] [Thread-115176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:39:04.655 [DEBUG] [Thread-115176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:39:04.678 [INFO] [Thread-115176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:39:04.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:39:05.320 [DEBUG] [Thread-115176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:39:05.320 [DEBUG] [Thread-115176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:39:05.320 [DEBUG] [Thread-115176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:39:05.361 [DEBUG] [Thread-115176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:39:05.361 [DEBUG] [Thread-115176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:39:05.364 [DEBUG] [Thread-115176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:39:05.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:39:05.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:39:05.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:39:05.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:39:05.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:39:05.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:39:05.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.360120 -999.00  +15.70  12.52     52   +5.90 1 2 1 1 1   888    0 10.82 44.57 ----- 11.7 12.5 128.2 22.5 21.9 -22.7 21.7 -20.9 21.5 -20.6 21.9 -21.6
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:39:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.360120
2025-12-03T10:39:05.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:39:05.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:39:05.387 [DEBUG] [Thread-115176] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:39:05.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:39:05.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:39:05.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:39:05.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:38:39', tmtdew=10.8, humidity=48.48, cloud=0.0, wind=20.31, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:38:34.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:39:05.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:39:05.475 [DEBUG] [Thread-115179] [transport.py] [_log()] starting thread (client mode): 0xa51cd6f0
2025-12-03T10:39:05.475 [DEBUG] [Thread-115179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:39:05.493 [DEBUG] [Thread-115179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:39:05.493 [INFO] [Thread-115179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] client lang: <none>
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] server lang: <none>
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] kex follows: False
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:39:05.501 [DEBUG] [Thread-115179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:39:05.502 [DEBUG] [Thread-115179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:39:05.502 [DEBUG] [Thread-115179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:39:05.502 [DEBUG] [Thread-115179] [transport.py] [_log()] Compression: none
2025-12-03T10:39:05.502 [DEBUG] [Thread-115179] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:39:05.562 [DEBUG] [Thread-115179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:39:05.562 [DEBUG] [Thread-115179] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:39:05.563 [DEBUG] [Thread-115179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:39:05.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:39:05.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:39:05.618 [DEBUG] [Thread-115179] [transport.py] [_log()] userauth is OK
2025-12-03T10:39:05.619 [DEBUG] [Thread-115179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:39:05.619 [DEBUG] [Thread-115179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:39:05.619 [DEBUG] [Thread-115179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:39:05.619 [DEBUG] [Thread-115179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:39:05.638 [INFO] [Thread-115179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:39:05.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:39:05.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:39:06.482 [DEBUG] [Thread-115179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:39:06.482 [DEBUG] [Thread-115179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:39:06.530 [DEBUG] [Thread-115179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:39:06.530 [DEBUG] [Thread-115179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:39:06.539 [DEBUG] [Thread-115179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:39:06.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:39:06.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:39:06.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:39:06.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:39:06.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:39:06.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:39:06.572 [DEBUG] [Thread-115179] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:39:16.881 [DEBUG] [Thread-115181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:31.920 [DEBUG] [Thread-115182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:39:36.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:39:36.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:39:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 39, 11), 10.83, 48.39, 0.0, 17.52, 15.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:39:37.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:39:11
2025-12-03T10:39:37.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:39:37.527 [DEBUG] [Thread-115183] [transport.py] [_log()] starting thread (client mode): 0xa2724ca0
2025-12-03T10:39:37.527 [DEBUG] [Thread-115183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:39:37.549 [DEBUG] [Thread-115183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:39:37.549 [INFO] [Thread-115183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:39:37.552 [DEBUG] [Thread-115183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] client lang: <none>
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] server lang: <none>
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] kex follows: False
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:39:37.553 [DEBUG] [Thread-115183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:39:37.554 [DEBUG] [Thread-115183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:39:37.554 [DEBUG] [Thread-115183] [transport.py] [_log()] Compression: none
2025-12-03T10:39:37.554 [DEBUG] [Thread-115183] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:39:37.581 [DEBUG] [Thread-115183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:39:37.582 [DEBUG] [Thread-115183] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:39:37.582 [DEBUG] [Thread-115183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:39:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:39:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:39:37.584 [DEBUG] [Thread-115183] [transport.py] [_log()] userauth is OK
2025-12-03T10:39:37.584 [DEBUG] [Thread-115183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:39:37.584 [DEBUG] [Thread-115183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:39:37.584 [DEBUG] [Thread-115183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:39:37.584 [DEBUG] [Thread-115183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:39:37.619 [INFO] [Thread-115183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:39:37.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:39:38.210 [DEBUG] [Thread-115183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:39:38.210 [DEBUG] [Thread-115183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:39:38.211 [DEBUG] [Thread-115183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:39:38.252 [DEBUG] [Thread-115183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:39:38.252 [DEBUG] [Thread-115183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:39:38.254 [DEBUG] [Thread-115183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:39:38.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:39:38.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:39:38.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:39:38.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:39:38.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:39:38.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:39:38.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:39:38.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:39:38.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:39:38.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.360468 -999.00  +15.80  14.84     52   +6.10 1 2 1 1 1   888    0 10.93 49.20 ----- 12.6 14.8 168.2 20.4 22.0 -21.7 21.6 -20.7 21.4 -21.0 21.9 -20.8
2025-12-03T10:39:38.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:39:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:39:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.360468
2025-12-03T10:39:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:39:38.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:39:38.278 [DEBUG] [Thread-115183] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:39:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:39:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:39:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:39:38.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:39:11', tmtdew=10.83, humidity=48.39, cloud=0.0, wind=17.52, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:39:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:39:38.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:39:38.374 [DEBUG] [Thread-115186] [transport.py] [_log()] starting thread (client mode): 0xa27e9de0
2025-12-03T10:39:38.374 [DEBUG] [Thread-115186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:39:38.388 [DEBUG] [Thread-115186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:39:38.389 [INFO] [Thread-115186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:39:38.396 [DEBUG] [Thread-115186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:39:38.396 [DEBUG] [Thread-115186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:39:38.396 [DEBUG] [Thread-115186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:39:38.396 [DEBUG] [Thread-115186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:38.396 [DEBUG] [Thread-115186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] client lang: <none>
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] server lang: <none>
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] kex follows: False
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:39:38.397 [DEBUG] [Thread-115186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:39:38.398 [DEBUG] [Thread-115186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:39:38.398 [DEBUG] [Thread-115186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:39:38.398 [DEBUG] [Thread-115186] [transport.py] [_log()] Compression: none
2025-12-03T10:39:38.398 [DEBUG] [Thread-115186] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:39:38.455 [DEBUG] [Thread-115186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:39:38.455 [DEBUG] [Thread-115186] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:39:38.455 [DEBUG] [Thread-115186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:39:38.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:39:38.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:39:38.510 [DEBUG] [Thread-115186] [transport.py] [_log()] userauth is OK
2025-12-03T10:39:38.511 [DEBUG] [Thread-115186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:39:38.511 [DEBUG] [Thread-115186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:39:38.511 [DEBUG] [Thread-115186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:39:38.511 [DEBUG] [Thread-115186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:39:38.529 [INFO] [Thread-115186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:39:38.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:39:38.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:39:39.332 [DEBUG] [Thread-115186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:39:39.332 [DEBUG] [Thread-115186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:39:39.381 [DEBUG] [Thread-115186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:39:39.381 [DEBUG] [Thread-115186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:39:39.389 [DEBUG] [Thread-115186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:39:39.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:39:39.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:39:39.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:39:39.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:39:39.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:39:39.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:39:39.424 [DEBUG] [Thread-115186] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:39:40.968 [DEBUG] [Thread-115188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:46.948 [DEBUG] [Thread-115189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:47.571 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:39:47.572 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:01.990 [DEBUG] [Thread-115190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:09.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:40:09.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:40:09.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:40:10.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 39, 43), 10.88, 48.46, 0.0, 21.63, 15.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:40:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:39:43
2025-12-03T10:40:10.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:40:10.406 [DEBUG] [Thread-115191] [transport.py] [_log()] starting thread (client mode): 0xa27b3a00
2025-12-03T10:40:10.406 [DEBUG] [Thread-115191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:40:10.427 [DEBUG] [Thread-115191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:40:10.427 [INFO] [Thread-115191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] client lang: <none>
2025-12-03T10:40:10.430 [DEBUG] [Thread-115191] [transport.py] [_log()] server lang: <none>
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] kex follows: False
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] Compression: none
2025-12-03T10:40:10.431 [DEBUG] [Thread-115191] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:40:10.447 [DEBUG] [Thread-115191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:40:10.448 [DEBUG] [Thread-115191] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:40:10.448 [DEBUG] [Thread-115191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:40:10.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:40:10.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:40:10.450 [DEBUG] [Thread-115191] [transport.py] [_log()] userauth is OK
2025-12-03T10:40:10.450 [DEBUG] [Thread-115191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:40:10.450 [DEBUG] [Thread-115191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:40:10.450 [DEBUG] [Thread-115191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:40:10.450 [DEBUG] [Thread-115191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:40:10.474 [INFO] [Thread-115191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:40:10.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:40:11.070 [DEBUG] [Thread-115191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:40:11.070 [DEBUG] [Thread-115191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:40:11.070 [DEBUG] [Thread-115191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:40:11.111 [DEBUG] [Thread-115191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:40:11.111 [DEBUG] [Thread-115191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:40:11.113 [DEBUG] [Thread-115191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:40:11.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:40:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:40:11.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:40:11.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:40:11.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:40:11.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:40:11.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:40:11.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.360815 -999.00  +15.90  11.04     52   +6.10 1 2 1 1 1   888    0 11.22 49.23 ----- 11.9 11.0 147.6 19.9 21.9 -21.9 21.6 -21.5 21.4 -20.6 21.9 -21.8
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.360815
2025-12-03T10:40:11.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:40:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:40:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:40:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:40:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:40:11.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:39:43', tmtdew=10.88, humidity=48.46, cloud=0.0, wind=21.63, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:39:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:40:11.138 [DEBUG] [Thread-115191] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:40:11.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:40:11.233 [DEBUG] [Thread-115194] [transport.py] [_log()] starting thread (client mode): 0xa27b00a0
2025-12-03T10:40:11.233 [DEBUG] [Thread-115194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:40:11.247 [DEBUG] [Thread-115194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:40:11.247 [INFO] [Thread-115194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] client lang: <none>
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] server lang: <none>
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] kex follows: False
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:40:11.257 [DEBUG] [Thread-115194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:40:11.258 [DEBUG] [Thread-115194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:40:11.258 [DEBUG] [Thread-115194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:40:11.258 [DEBUG] [Thread-115194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:40:11.258 [DEBUG] [Thread-115194] [transport.py] [_log()] Compression: none
2025-12-03T10:40:11.258 [DEBUG] [Thread-115194] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:40:11.314 [DEBUG] [Thread-115194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:40:11.314 [DEBUG] [Thread-115194] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:40:11.315 [DEBUG] [Thread-115194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:40:11.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:40:11.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:40:11.370 [DEBUG] [Thread-115194] [transport.py] [_log()] userauth is OK
2025-12-03T10:40:11.370 [DEBUG] [Thread-115194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:40:11.371 [DEBUG] [Thread-115194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:40:11.371 [DEBUG] [Thread-115194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:40:11.371 [DEBUG] [Thread-115194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:40:11.389 [INFO] [Thread-115194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:40:11.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:40:11.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:40:12.222 [DEBUG] [Thread-115194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:40:12.222 [DEBUG] [Thread-115194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:40:12.271 [DEBUG] [Thread-115194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:40:12.271 [DEBUG] [Thread-115194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:40:12.280 [DEBUG] [Thread-115194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:40:12.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:40:12.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:40:12.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:40:12.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:40:12.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:40:12.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:40:12.323 [DEBUG] [Thread-115194] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:40:17.018 [DEBUG] [Thread-115196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:32.047 [DEBUG] [Thread-115197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:41.013 [DEBUG] [Thread-115198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:42.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:40:42.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:40:42.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:40:42.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 40, 15), 10.99, 48.14, 0.0, 22.44, 15.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:40:42.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:40:15
2025-12-03T10:40:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:40:43.269 [DEBUG] [Thread-115199] [transport.py] [_log()] starting thread (client mode): 0xa2725090
2025-12-03T10:40:43.269 [DEBUG] [Thread-115199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:40:43.290 [DEBUG] [Thread-115199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:40:43.290 [INFO] [Thread-115199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] client lang: <none>
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] server lang: <none>
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] kex follows: False
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:40:43.294 [DEBUG] [Thread-115199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:40:43.295 [DEBUG] [Thread-115199] [transport.py] [_log()] Compression: none
2025-12-03T10:40:43.295 [DEBUG] [Thread-115199] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:40:43.313 [DEBUG] [Thread-115199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:40:43.313 [DEBUG] [Thread-115199] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:40:43.314 [DEBUG] [Thread-115199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:40:43.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:40:43.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:40:43.315 [DEBUG] [Thread-115199] [transport.py] [_log()] userauth is OK
2025-12-03T10:40:43.315 [DEBUG] [Thread-115199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:40:43.316 [DEBUG] [Thread-115199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:40:43.316 [DEBUG] [Thread-115199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:40:43.316 [DEBUG] [Thread-115199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:40:43.351 [INFO] [Thread-115199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:40:43.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:40:43.991 [DEBUG] [Thread-115199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:40:43.991 [DEBUG] [Thread-115199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:40:43.992 [DEBUG] [Thread-115199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:40:44.032 [DEBUG] [Thread-115199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:40:44.032 [DEBUG] [Thread-115199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:40:44.035 [DEBUG] [Thread-115199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:40:44.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:40:44.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:40:44.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:40:44.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:40:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:40:44.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:40:44.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:40:44.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.361162 -999.00  +16.00  14.68     53   +6.50 1 2 1 1 1   888    0 10.83 47.94 ----- 21.9 14.7 162.7 20.2 22.0 -22.0 21.2 -25.7 21.4 -19.7 21.7 -21.2
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.361162
2025-12-03T10:40:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:40:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:40:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:40:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:40:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:40:44.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:40:15', tmtdew=10.99, humidity=48.14, cloud=0.0, wind=22.44, temperature=15.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:40:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:40:44.058 [DEBUG] [Thread-115199] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:40:44.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:40:44.157 [DEBUG] [Thread-115202] [transport.py] [_log()] starting thread (client mode): 0xa51ce290
2025-12-03T10:40:44.157 [DEBUG] [Thread-115202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:40:44.171 [DEBUG] [Thread-115202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:40:44.171 [INFO] [Thread-115202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:40:44.179 [DEBUG] [Thread-115202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] client lang: <none>
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] server lang: <none>
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] kex follows: False
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] Compression: none
2025-12-03T10:40:44.180 [DEBUG] [Thread-115202] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:40:44.238 [DEBUG] [Thread-115202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:40:44.238 [DEBUG] [Thread-115202] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:40:44.238 [DEBUG] [Thread-115202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:40:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:40:44.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:40:44.294 [DEBUG] [Thread-115202] [transport.py] [_log()] userauth is OK
2025-12-03T10:40:44.295 [DEBUG] [Thread-115202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:40:44.295 [DEBUG] [Thread-115202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:40:44.295 [DEBUG] [Thread-115202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:40:44.295 [DEBUG] [Thread-115202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:40:44.313 [INFO] [Thread-115202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:40:44.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:40:44.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:40:45.191 [DEBUG] [Thread-115202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:40:45.191 [DEBUG] [Thread-115202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:40:45.240 [DEBUG] [Thread-115202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:40:45.240 [DEBUG] [Thread-115202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:40:45.249 [DEBUG] [Thread-115202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:40:45.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:40:45.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:40:45.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:40:45.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:40:45.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:40:45.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:40:45.282 [DEBUG] [Thread-115202] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:40:47.078 [DEBUG] [Thread-115204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:47.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:40:47.710 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:02.133 [DEBUG] [Thread-115205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:41:15.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:41:15.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:41:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 40, 47), 11.02, 48.13, 0.0, 20.93, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:41:15.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:40:47
2025-12-03T10:41:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:41:16.258 [DEBUG] [Thread-115206] [transport.py] [_log()] starting thread (client mode): 0xa51ccfa0
2025-12-03T10:41:16.258 [DEBUG] [Thread-115206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:41:16.270 [DEBUG] [Thread-115206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:41:16.270 [INFO] [Thread-115206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] client lang: <none>
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] server lang: <none>
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] kex follows: False
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] Compression: none
2025-12-03T10:41:16.271 [DEBUG] [Thread-115206] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:41:16.278 [DEBUG] [Thread-115206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:41:16.278 [DEBUG] [Thread-115206] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:41:16.278 [DEBUG] [Thread-115206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:41:16.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:41:16.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:41:16.279 [DEBUG] [Thread-115206] [transport.py] [_log()] userauth is OK
2025-12-03T10:41:16.279 [DEBUG] [Thread-115206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:41:16.279 [DEBUG] [Thread-115206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:41:16.279 [DEBUG] [Thread-115206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:41:16.279 [DEBUG] [Thread-115206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:41:16.288 [INFO] [Thread-115206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:41:16.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:41:16.954 [DEBUG] [Thread-115206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:41:16.954 [DEBUG] [Thread-115206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:41:16.955 [DEBUG] [Thread-115206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:41:16.996 [DEBUG] [Thread-115206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:41:16.996 [DEBUG] [Thread-115206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:41:16.999 [DEBUG] [Thread-115206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:41:17.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:41:17.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:41:17.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:41:17.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:41:17.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:41:17.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:41:17.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:41:17.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:41:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:41:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.361509 -999.00  +16.00  18.53     52   +6.30 1 2 1 1 1   888    0 11.04 43.17 ----- 14.8 18.5 153.2 22.9 21.9 -21.0 21.4 -20.5 21.4 -20.5 21.9 -21.4
2025-12-03T10:41:17.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:41:17.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:41:17.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.361509
2025-12-03T10:41:17.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:41:17.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:41:17.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:41:17.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:41:17.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:41:17.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:40:47', tmtdew=11.02, humidity=48.13, cloud=0.0, wind=20.93, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:40:34.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:41:17.023 [DEBUG] [Thread-115206] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:41:17.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:41:17.121 [DEBUG] [Thread-115209] [transport.py] [_log()] starting thread (client mode): 0xa2787af0
2025-12-03T10:41:17.121 [DEBUG] [Thread-115209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:41:17.137 [DEBUG] [Thread-115209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:41:17.137 [INFO] [Thread-115209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:41:17.144 [DEBUG] [Thread-115209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:41:17.144 [DEBUG] [Thread-115209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] client lang: <none>
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] server lang: <none>
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] kex follows: False
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] Compression: none
2025-12-03T10:41:17.145 [DEBUG] [Thread-115209] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:41:17.164 [DEBUG] [Thread-115211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:17.201 [DEBUG] [Thread-115209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:41:17.202 [DEBUG] [Thread-115209] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:41:17.202 [DEBUG] [Thread-115209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:41:17.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:41:17.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:41:17.258 [DEBUG] [Thread-115209] [transport.py] [_log()] userauth is OK
2025-12-03T10:41:17.258 [DEBUG] [Thread-115209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:41:17.258 [DEBUG] [Thread-115209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:41:17.258 [DEBUG] [Thread-115209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:41:17.259 [DEBUG] [Thread-115209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:41:17.278 [INFO] [Thread-115209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:41:17.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:41:17.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:41:18.103 [DEBUG] [Thread-115209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:41:18.103 [DEBUG] [Thread-115209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:41:18.151 [DEBUG] [Thread-115209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:41:18.151 [DEBUG] [Thread-115209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:41:18.160 [DEBUG] [Thread-115209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:41:18.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:41:18.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:41:18.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:41:18.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:41:18.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:41:18.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:41:18.194 [DEBUG] [Thread-115209] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:41:32.204 [DEBUG] [Thread-115212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:41.068 [DEBUG] [Thread-115213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:47.233 [DEBUG] [Thread-115214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:47.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:47.853 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:41:48.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:41:48.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:41:48.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:41:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 41, 19), 11.02, 48.13, 0.0, 20.78, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:41:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:41:19
2025-12-03T10:41:49.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:41:49.175 [DEBUG] [Thread-115215] [transport.py] [_log()] starting thread (client mode): 0xa2724ee0
2025-12-03T10:41:49.175 [DEBUG] [Thread-115215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:41:49.197 [DEBUG] [Thread-115215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:41:49.197 [INFO] [Thread-115215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] client lang: <none>
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] server lang: <none>
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] kex follows: False
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] Compression: none
2025-12-03T10:41:49.200 [DEBUG] [Thread-115215] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:41:49.216 [DEBUG] [Thread-115215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:41:49.216 [DEBUG] [Thread-115215] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:41:49.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:41:49.216 [DEBUG] [Thread-115215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:41:49.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:41:49.217 [DEBUG] [Thread-115215] [transport.py] [_log()] userauth is OK
2025-12-03T10:41:49.217 [DEBUG] [Thread-115215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:41:49.217 [DEBUG] [Thread-115215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:41:49.217 [DEBUG] [Thread-115215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:41:49.217 [DEBUG] [Thread-115215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:41:49.226 [INFO] [Thread-115215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:41:49.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:41:49.879 [DEBUG] [Thread-115215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:41:49.879 [DEBUG] [Thread-115215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:41:49.879 [DEBUG] [Thread-115215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:41:49.920 [DEBUG] [Thread-115215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:41:49.920 [DEBUG] [Thread-115215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:41:49.922 [DEBUG] [Thread-115215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:41:49.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:41:49.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:41:49.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:41:49.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:41:49.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:41:49.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:41:49.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.361857 -999.00  +15.90  22.36     53   +6.40 1 2 1 1 1   888    0 10.69 35.53 ----- 25.0 22.4 143.8 30.6 21.9 -21.1 21.4 -20.6 21.2 -20.2 21.8 -20.9
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.361857
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:41:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:41:19', tmtdew=11.02, humidity=48.13, cloud=0.0, wind=20.78, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:41:04.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:41:49.943 [DEBUG] [Thread-115215] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:41:50.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:41:50.027 [DEBUG] [Thread-115218] [transport.py] [_log()] starting thread (client mode): 0xa2725270
2025-12-03T10:41:50.027 [DEBUG] [Thread-115218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:41:50.042 [DEBUG] [Thread-115218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:41:50.042 [INFO] [Thread-115218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] client lang: <none>
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] server lang: <none>
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] kex follows: False
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] Compression: none
2025-12-03T10:41:50.050 [DEBUG] [Thread-115218] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:41:50.105 [DEBUG] [Thread-115218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:41:50.105 [DEBUG] [Thread-115218] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:41:50.106 [DEBUG] [Thread-115218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:41:50.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:41:50.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:41:50.163 [DEBUG] [Thread-115218] [transport.py] [_log()] userauth is OK
2025-12-03T10:41:50.163 [DEBUG] [Thread-115218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:41:50.163 [DEBUG] [Thread-115218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:41:50.163 [DEBUG] [Thread-115218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:41:50.163 [DEBUG] [Thread-115218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:41:50.179 [INFO] [Thread-115218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:41:50.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:41:50.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:41:51.037 [DEBUG] [Thread-115218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:41:51.037 [DEBUG] [Thread-115218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:41:51.086 [DEBUG] [Thread-115218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:41:51.086 [DEBUG] [Thread-115218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:41:51.095 [DEBUG] [Thread-115218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:41:51.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:41:51.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:41:51.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:41:51.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:41:51.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:41:51.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:41:51.132 [DEBUG] [Thread-115218] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:42:02.258 [DEBUG] [Thread-115220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:17.304 [DEBUG] [Thread-115221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:21.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:42:21.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:42:21.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:42:21.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 41, 51), 11.27, 47.32, 0.0, 27.31, 16.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:42:21.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:41:51
2025-12-03T10:42:21.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:42:22.139 [DEBUG] [Thread-115222] [transport.py] [_log()] starting thread (client mode): 0xa2726620
2025-12-03T10:42:22.139 [DEBUG] [Thread-115222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:42:22.159 [DEBUG] [Thread-115222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:42:22.159 [INFO] [Thread-115222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:42:22.162 [DEBUG] [Thread-115222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:42:22.162 [DEBUG] [Thread-115222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:42:22.162 [DEBUG] [Thread-115222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] client lang: <none>
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] server lang: <none>
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] kex follows: False
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] Compression: none
2025-12-03T10:42:22.163 [DEBUG] [Thread-115222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:42:22.179 [DEBUG] [Thread-115222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:42:22.180 [DEBUG] [Thread-115222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:42:22.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:42:22.181 [DEBUG] [Thread-115222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:42:22.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:42:22.182 [DEBUG] [Thread-115222] [transport.py] [_log()] userauth is OK
2025-12-03T10:42:22.183 [DEBUG] [Thread-115222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:42:22.183 [DEBUG] [Thread-115222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:42:22.183 [DEBUG] [Thread-115222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:42:22.183 [DEBUG] [Thread-115222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:42:22.206 [INFO] [Thread-115222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:42:22.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:42:22.939 [DEBUG] [Thread-115222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:42:22.939 [DEBUG] [Thread-115222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:42:22.939 [DEBUG] [Thread-115222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:42:22.980 [DEBUG] [Thread-115222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:42:22.980 [DEBUG] [Thread-115222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:42:22.983 [DEBUG] [Thread-115222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:42:22.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:42:22.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:42:22.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:42:22.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:42:23.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:42:23.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:42:23.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:42:23.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.362204 -999.00  +16.00  25.11     52   +6.30 1 2 1 1 1   888    0 10.51 29.97 ----- 26.1 25.1 131.6 33.0 21.8 -20.5 21.5 -20.3 21.3 -19.7 21.7 -21.8
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.362204
2025-12-03T10:42:23.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:42:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:42:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:42:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:42:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:42:23.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:41:51', tmtdew=11.27, humidity=47.32, cloud=0.0, wind=27.31, temperature=16.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:41:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:42:23.007 [DEBUG] [Thread-115222] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:42:23.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:42:23.112 [DEBUG] [Thread-115225] [transport.py] [_log()] starting thread (client mode): 0xa27b2d40
2025-12-03T10:42:23.113 [DEBUG] [Thread-115225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:42:23.127 [DEBUG] [Thread-115225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:42:23.127 [INFO] [Thread-115225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:23.135 [DEBUG] [Thread-115225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] client lang: <none>
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] server lang: <none>
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] kex follows: False
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:42:23.136 [DEBUG] [Thread-115225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:42:23.137 [DEBUG] [Thread-115225] [transport.py] [_log()] Compression: none
2025-12-03T10:42:23.137 [DEBUG] [Thread-115225] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:42:23.194 [DEBUG] [Thread-115225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:42:23.195 [DEBUG] [Thread-115225] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:42:23.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:42:23.196 [DEBUG] [Thread-115225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:42:23.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:42:23.250 [DEBUG] [Thread-115225] [transport.py] [_log()] userauth is OK
2025-12-03T10:42:23.251 [DEBUG] [Thread-115225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:42:23.251 [DEBUG] [Thread-115225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:42:23.251 [DEBUG] [Thread-115225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:42:23.251 [DEBUG] [Thread-115225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:42:23.273 [INFO] [Thread-115225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:42:23.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:42:23.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:42:24.121 [DEBUG] [Thread-115225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:42:24.121 [DEBUG] [Thread-115225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:42:24.168 [DEBUG] [Thread-115225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:42:24.168 [DEBUG] [Thread-115225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:42:24.176 [DEBUG] [Thread-115225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:42:24.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:42:24.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:42:24.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:42:24.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:42:24.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:42:24.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:42:24.208 [DEBUG] [Thread-115225] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:42:32.338 [DEBUG] [Thread-115227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:41.128 [DEBUG] [Thread-115228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:47.387 [DEBUG] [Thread-115229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:47.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:47.994 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:42:54.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:42:54.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:42:54.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:42:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 42, 23), 11.08, 47.85, 0.0, 26.98, 15.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:42:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:42:23
2025-12-03T10:42:55.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:42:55.168 [DEBUG] [Thread-115230] [transport.py] [_log()] starting thread (client mode): 0xa51ce9b0
2025-12-03T10:42:55.168 [DEBUG] [Thread-115230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:42:55.190 [DEBUG] [Thread-115230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:42:55.190 [INFO] [Thread-115230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:42:55.193 [DEBUG] [Thread-115230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:42:55.193 [DEBUG] [Thread-115230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:42:55.193 [DEBUG] [Thread-115230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:42:55.193 [DEBUG] [Thread-115230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] client lang: <none>
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] server lang: <none>
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] kex follows: False
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:42:55.194 [DEBUG] [Thread-115230] [transport.py] [_log()] Compression: none
2025-12-03T10:42:55.195 [DEBUG] [Thread-115230] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:42:55.210 [DEBUG] [Thread-115230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:42:55.211 [DEBUG] [Thread-115230] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:42:55.211 [DEBUG] [Thread-115230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:42:55.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:42:55.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:42:55.213 [DEBUG] [Thread-115230] [transport.py] [_log()] userauth is OK
2025-12-03T10:42:55.214 [DEBUG] [Thread-115230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:42:55.214 [DEBUG] [Thread-115230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:42:55.214 [DEBUG] [Thread-115230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:42:55.214 [DEBUG] [Thread-115230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:42:55.239 [INFO] [Thread-115230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:42:55.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:42:55.895 [DEBUG] [Thread-115230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:42:55.896 [DEBUG] [Thread-115230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:42:55.896 [DEBUG] [Thread-115230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:42:55.937 [DEBUG] [Thread-115230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:42:55.937 [DEBUG] [Thread-115230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:42:55.940 [DEBUG] [Thread-115230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:42:55.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:42:55.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:42:55.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:42:55.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:42:55.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:42:55.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:42:55.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:42:55.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.362898 -999.00  +16.00  19.16     52   +6.30 1 2 1 1 1   888    0 10.30 20.45 ----- 20.2 19.2 135.4 28.6 21.9 -20.0 21.7 -20.2 21.4 -20.0 21.8 -20.0
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.362898
2025-12-03T10:42:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:42:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:42:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:42:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:42:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:42:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:42:23', tmtdew=11.08, humidity=47.85, cloud=0.0, wind=26.98, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:42:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:42:55.964 [DEBUG] [Thread-115230] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:42:56.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:42:56.062 [DEBUG] [Thread-115233] [transport.py] [_log()] starting thread (client mode): 0xa51cf0a0
2025-12-03T10:42:56.062 [DEBUG] [Thread-115233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:42:56.077 [DEBUG] [Thread-115233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:42:56.077 [INFO] [Thread-115233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] client lang: <none>
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] server lang: <none>
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] kex follows: False
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:42:56.085 [DEBUG] [Thread-115233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:42:56.086 [DEBUG] [Thread-115233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:42:56.086 [DEBUG] [Thread-115233] [transport.py] [_log()] Compression: none
2025-12-03T10:42:56.086 [DEBUG] [Thread-115233] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:42:56.144 [DEBUG] [Thread-115233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:42:56.145 [DEBUG] [Thread-115233] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:42:56.145 [DEBUG] [Thread-115233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:42:56.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:42:56.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:42:56.202 [DEBUG] [Thread-115233] [transport.py] [_log()] userauth is OK
2025-12-03T10:42:56.202 [DEBUG] [Thread-115233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:42:56.202 [DEBUG] [Thread-115233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:42:56.202 [DEBUG] [Thread-115233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:42:56.202 [DEBUG] [Thread-115233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:42:56.216 [INFO] [Thread-115233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:42:56.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:42:56.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:42:57.040 [DEBUG] [Thread-115233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:42:57.040 [DEBUG] [Thread-115233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:42:57.087 [DEBUG] [Thread-115233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:42:57.087 [DEBUG] [Thread-115233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:42:57.095 [DEBUG] [Thread-115233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:42:57.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:42:57.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:42:57.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:42:57.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:42:57.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:42:57.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:42:57.127 [DEBUG] [Thread-115233] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:43:02.417 [DEBUG] [Thread-115235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:17.458 [DEBUG] [Thread-115236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:43:27.146 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:43:27.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:43:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 42, 55), 11.11, 47.58, 0.0, 24.65, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:43:27.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:42:55
2025-12-03T10:43:27.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:43:28.089 [DEBUG] [Thread-115237] [transport.py] [_log()] starting thread (client mode): 0xa2727c70
2025-12-03T10:43:28.090 [DEBUG] [Thread-115237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:43:28.109 [DEBUG] [Thread-115237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:43:28.109 [INFO] [Thread-115237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:43:28.113 [DEBUG] [Thread-115237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] client lang: <none>
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] server lang: <none>
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] kex follows: False
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] Compression: none
2025-12-03T10:43:28.114 [DEBUG] [Thread-115237] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:43:28.132 [DEBUG] [Thread-115237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:43:28.132 [DEBUG] [Thread-115237] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:43:28.132 [DEBUG] [Thread-115237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:43:28.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:43:28.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:43:28.133 [DEBUG] [Thread-115237] [transport.py] [_log()] userauth is OK
2025-12-03T10:43:28.133 [DEBUG] [Thread-115237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:43:28.133 [DEBUG] [Thread-115237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:43:28.133 [DEBUG] [Thread-115237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:43:28.133 [DEBUG] [Thread-115237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:43:28.156 [INFO] [Thread-115237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:43:28.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:43:28.893 [DEBUG] [Thread-115237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:43:28.893 [DEBUG] [Thread-115237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:43:28.893 [DEBUG] [Thread-115237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:43:28.934 [DEBUG] [Thread-115237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:43:28.934 [DEBUG] [Thread-115237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:43:28.936 [DEBUG] [Thread-115237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:43:28.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:43:28.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:43:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:43:28.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:43:28.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:43:28.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:43:28.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.363245 -999.00  +15.90  19.16     52   +6.10 1 2 1 1 1   888    0 10.04 17.68 ----- 26.8 19.2 136.0 24.1 21.9 -21.0 21.7 -20.0 21.4 -21.4 21.9 -20.3
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.363245
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:43:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:42:55', tmtdew=11.11, humidity=47.58, cloud=0.0, wind=24.65, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:43:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:43:28.953 [DEBUG] [Thread-115237] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:43:29.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:43:29.039 [DEBUG] [Thread-115240] [transport.py] [_log()] starting thread (client mode): 0xa27e9d50
2025-12-03T10:43:29.039 [DEBUG] [Thread-115240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:43:29.054 [DEBUG] [Thread-115240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:43:29.054 [INFO] [Thread-115240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:43:29.061 [DEBUG] [Thread-115240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] client lang: <none>
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] server lang: <none>
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] kex follows: False
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] Compression: none
2025-12-03T10:43:29.062 [DEBUG] [Thread-115240] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:43:29.117 [DEBUG] [Thread-115240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:43:29.118 [DEBUG] [Thread-115240] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:43:29.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:43:29.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:43:29.118 [DEBUG] [Thread-115240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:43:29.174 [DEBUG] [Thread-115240] [transport.py] [_log()] userauth is OK
2025-12-03T10:43:29.174 [DEBUG] [Thread-115240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:43:29.174 [DEBUG] [Thread-115240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:43:29.174 [DEBUG] [Thread-115240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:43:29.174 [DEBUG] [Thread-115240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:43:29.188 [INFO] [Thread-115240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:43:29.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:43:29.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:43:30.065 [DEBUG] [Thread-115240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:43:30.065 [DEBUG] [Thread-115240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:43:30.113 [DEBUG] [Thread-115240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:43:30.114 [DEBUG] [Thread-115240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:43:30.122 [DEBUG] [Thread-115240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:43:30.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:43:30.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:43:30.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:43:30.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:43:30.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:43:30.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:43:30.156 [DEBUG] [Thread-115240] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:43:32.489 [DEBUG] [Thread-115242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:41.173 [DEBUG] [Thread-115243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:47.529 [DEBUG] [Thread-115244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:48.133 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:43:48.133 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:00.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:44:00.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:44:00.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:44:00.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 43, 27), 11.03, 47.8, 0.0, 28.05, 15.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:44:00.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:43:27
2025-12-03T10:44:01.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:44:01.209 [DEBUG] [Thread-115245] [transport.py] [_log()] starting thread (client mode): 0xa27b3a00
2025-12-03T10:44:01.209 [DEBUG] [Thread-115245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:44:01.229 [DEBUG] [Thread-115245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:44:01.229 [INFO] [Thread-115245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:01.232 [DEBUG] [Thread-115245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] client lang: <none>
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] server lang: <none>
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] kex follows: False
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] Compression: none
2025-12-03T10:44:01.233 [DEBUG] [Thread-115245] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:44:01.250 [DEBUG] [Thread-115245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:44:01.250 [DEBUG] [Thread-115245] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:44:01.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:44:01.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] userauth is OK
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:44:01.251 [DEBUG] [Thread-115245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:44:01.260 [INFO] [Thread-115245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:44:01.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:44:01.862 [DEBUG] [Thread-115245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:44:01.863 [DEBUG] [Thread-115245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:44:01.863 [DEBUG] [Thread-115245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:44:01.903 [DEBUG] [Thread-115245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:44:01.904 [DEBUG] [Thread-115245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:44:01.906 [DEBUG] [Thread-115245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:44:01.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:44:01.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:44:01.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:44:01.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:44:01.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:44:01.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:44:01.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.363593 -999.00  +16.00  21.00     52   +6.30 1 2 1 1 1   888    0 10.02 14.47 ----- 20.4 21.0 122.6 27.0 22.0 -21.8 21.7 -21.3 21.4 -21.1 21.8 -20.9
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.363593
2025-12-03T10:44:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:44:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:44:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:44:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:44:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:44:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:43:27', tmtdew=11.03, humidity=47.8, cloud=0.0, wind=28.05, temperature=15.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:43:34.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:44:01.925 [DEBUG] [Thread-115245] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:44:02.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:44:02.018 [DEBUG] [Thread-115248] [transport.py] [_log()] starting thread (client mode): 0xa27c3520
2025-12-03T10:44:02.018 [DEBUG] [Thread-115248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:44:02.034 [DEBUG] [Thread-115248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:44:02.034 [INFO] [Thread-115248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] client lang: <none>
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] server lang: <none>
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] kex follows: False
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] Compression: none
2025-12-03T10:44:02.042 [DEBUG] [Thread-115248] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:44:02.097 [DEBUG] [Thread-115248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:44:02.097 [DEBUG] [Thread-115248] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:44:02.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:44:02.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:44:02.097 [DEBUG] [Thread-115248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:44:02.154 [DEBUG] [Thread-115248] [transport.py] [_log()] userauth is OK
2025-12-03T10:44:02.154 [DEBUG] [Thread-115248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:44:02.154 [DEBUG] [Thread-115248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:44:02.154 [DEBUG] [Thread-115248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:44:02.154 [DEBUG] [Thread-115248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:44:02.168 [INFO] [Thread-115248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:44:02.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:44:02.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:44:02.556 [DEBUG] [Thread-115250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:03.014 [DEBUG] [Thread-115248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:44:03.014 [DEBUG] [Thread-115248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:44:03.061 [DEBUG] [Thread-115248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:44:03.062 [DEBUG] [Thread-115248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:44:03.071 [DEBUG] [Thread-115248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:44:03.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:44:03.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:44:03.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:44:03.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:44:03.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:44:03.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:44:03.117 [DEBUG] [Thread-115248] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:44:17.610 [DEBUG] [Thread-115251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:32.639 [DEBUG] [Thread-115252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:44:33.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:44:33.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:44:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 43, 59), 10.77, 48.45, 0.0, 25.81, 15.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:44:33.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:43:59
2025-12-03T10:44:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:44:34.138 [DEBUG] [Thread-115253] [transport.py] [_log()] starting thread (client mode): 0xa27c26e0
2025-12-03T10:44:34.138 [DEBUG] [Thread-115253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:44:34.153 [DEBUG] [Thread-115253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:44:34.153 [INFO] [Thread-115253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] client lang: <none>
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] server lang: <none>
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] kex follows: False
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:44:34.156 [DEBUG] [Thread-115253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:44:34.157 [DEBUG] [Thread-115253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:44:34.157 [DEBUG] [Thread-115253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:44:34.157 [DEBUG] [Thread-115253] [transport.py] [_log()] Compression: none
2025-12-03T10:44:34.157 [DEBUG] [Thread-115253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:44:34.172 [DEBUG] [Thread-115253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:44:34.172 [DEBUG] [Thread-115253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:44:34.173 [DEBUG] [Thread-115253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:44:34.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:44:34.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:44:34.173 [DEBUG] [Thread-115253] [transport.py] [_log()] userauth is OK
2025-12-03T10:44:34.174 [DEBUG] [Thread-115253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:44:34.174 [DEBUG] [Thread-115253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:44:34.174 [DEBUG] [Thread-115253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:44:34.174 [DEBUG] [Thread-115253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:44:34.189 [INFO] [Thread-115253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:44:34.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:44:34.742 [DEBUG] [Thread-115253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:44:34.742 [DEBUG] [Thread-115253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:44:34.743 [DEBUG] [Thread-115253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:44:34.783 [DEBUG] [Thread-115253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:44:34.783 [DEBUG] [Thread-115253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:44:34.785 [DEBUG] [Thread-115253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:44:34.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:44:34.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:44:34.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:44:34.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:44:34.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:44:34.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:44:34.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:44:34.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:44:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:44:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.363940 -999.00  +15.90  22.18     51   +5.90 1 2 1 1 1   888    0 9.92 11.90 ----- 17.0 22.2 141.6 29.3 21.9 -21.9 21.7 -22.5 21.4 -21.4 21.7 -23.1
2025-12-03T10:44:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:44:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:44:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.363940
2025-12-03T10:44:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:44:34.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:43:59', tmtdew=10.77, humidity=48.45, cloud=0.0, wind=25.81, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:44:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:44:34.807 [DEBUG] [Thread-115253] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:44:34.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:44:34.903 [DEBUG] [Thread-115256] [transport.py] [_log()] starting thread (client mode): 0xa270a800
2025-12-03T10:44:34.903 [DEBUG] [Thread-115256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:44:34.918 [DEBUG] [Thread-115256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:44:34.918 [INFO] [Thread-115256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:44:34.925 [DEBUG] [Thread-115256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] client lang: <none>
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] server lang: <none>
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] kex follows: False
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:44:34.926 [DEBUG] [Thread-115256] [transport.py] [_log()] Compression: none
2025-12-03T10:44:34.927 [DEBUG] [Thread-115256] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:44:34.982 [DEBUG] [Thread-115256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:44:34.982 [DEBUG] [Thread-115256] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:44:34.982 [DEBUG] [Thread-115256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:44:34.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:44:34.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:44:35.038 [DEBUG] [Thread-115256] [transport.py] [_log()] userauth is OK
2025-12-03T10:44:35.038 [DEBUG] [Thread-115256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:44:35.038 [DEBUG] [Thread-115256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:44:35.039 [DEBUG] [Thread-115256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:44:35.039 [DEBUG] [Thread-115256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:44:35.058 [INFO] [Thread-115256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:44:35.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:44:35.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:44:35.874 [DEBUG] [Thread-115256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:44:35.874 [DEBUG] [Thread-115256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:44:35.922 [DEBUG] [Thread-115256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:44:35.922 [DEBUG] [Thread-115256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:44:35.931 [DEBUG] [Thread-115256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:44:35.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:44:35.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:44:35.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:44:35.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:44:35.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:44:35.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:44:35.965 [DEBUG] [Thread-115256] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:44:41.224 [DEBUG] [Thread-115258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:47.664 [DEBUG] [Thread-115259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:48.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:44:48.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:02.700 [DEBUG] [Thread-115260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:45:05.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:45:05.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:45:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 44, 32), 10.79, 48.38, 0.0, 24.79, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:45:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:44:32
2025-12-03T10:45:06.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:45:06.962 [DEBUG] [Thread-115261] [transport.py] [_log()] starting thread (client mode): 0xa51ce7d0
2025-12-03T10:45:06.962 [DEBUG] [Thread-115261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:45:06.983 [DEBUG] [Thread-115261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:45:06.983 [INFO] [Thread-115261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:45:06.984 [DEBUG] [Thread-115261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] client lang: <none>
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] server lang: <none>
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] kex follows: False
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] Compression: none
2025-12-03T10:45:06.985 [DEBUG] [Thread-115261] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:45:06.998 [DEBUG] [Thread-115261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:45:06.998 [DEBUG] [Thread-115261] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:45:06.999 [DEBUG] [Thread-115261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:45:06.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:45:06.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:45:07.000 [DEBUG] [Thread-115261] [transport.py] [_log()] userauth is OK
2025-12-03T10:45:07.000 [DEBUG] [Thread-115261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:45:07.000 [DEBUG] [Thread-115261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:45:07.000 [DEBUG] [Thread-115261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:45:07.001 [DEBUG] [Thread-115261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:45:07.014 [INFO] [Thread-115261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:45:07.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:45:07.826 [DEBUG] [Thread-115261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:45:07.826 [DEBUG] [Thread-115261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:45:07.827 [DEBUG] [Thread-115261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:45:07.867 [DEBUG] [Thread-115261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:45:07.867 [DEBUG] [Thread-115261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:45:07.870 [DEBUG] [Thread-115261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:45:07.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:45:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:45:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:45:07.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:45:07.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:45:07.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:45:07.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:45:07.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.364287 -999.00  +15.70  19.66     51   +5.90 1 2 1 1 1   888    0 10.08 11.60 ----- 20.7 19.7 138.2 26.2 21.9 -22.1 21.6 -22.2 21.3 -21.6 21.7 -22.9
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.364287
2025-12-03T10:45:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:45:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:44:32', tmtdew=10.79, humidity=48.38, cloud=0.0, wind=24.79, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:44:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:45:07.917 [DEBUG] [Thread-115261] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:45:08.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:45:08.021 [DEBUG] [Thread-115264] [transport.py] [_log()] starting thread (client mode): 0xa27c1570
2025-12-03T10:45:08.021 [DEBUG] [Thread-115264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:45:08.035 [DEBUG] [Thread-115264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:45:08.035 [INFO] [Thread-115264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:08.043 [DEBUG] [Thread-115264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] client lang: <none>
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] server lang: <none>
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] kex follows: False
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:45:08.044 [DEBUG] [Thread-115264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:45:08.045 [DEBUG] [Thread-115264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:45:08.045 [DEBUG] [Thread-115264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:45:08.045 [DEBUG] [Thread-115264] [transport.py] [_log()] Compression: none
2025-12-03T10:45:08.045 [DEBUG] [Thread-115264] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:45:08.103 [DEBUG] [Thread-115264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:45:08.103 [DEBUG] [Thread-115264] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:45:08.104 [DEBUG] [Thread-115264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:45:08.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:45:08.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:45:08.159 [DEBUG] [Thread-115264] [transport.py] [_log()] userauth is OK
2025-12-03T10:45:08.159 [DEBUG] [Thread-115264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:45:08.159 [DEBUG] [Thread-115264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:45:08.160 [DEBUG] [Thread-115264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:45:08.160 [DEBUG] [Thread-115264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:45:08.177 [INFO] [Thread-115264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:45:08.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:45:08.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:45:09.043 [DEBUG] [Thread-115264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:45:09.043 [DEBUG] [Thread-115264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:45:09.091 [DEBUG] [Thread-115264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:45:09.091 [DEBUG] [Thread-115264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:45:09.100 [DEBUG] [Thread-115264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:45:09.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:45:09.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:45:09.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:45:09.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:45:09.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:45:09.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:45:09.134 [DEBUG] [Thread-115264] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:45:17.725 [DEBUG] [Thread-115266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:32.771 [DEBUG] [Thread-115267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:39.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:45:39.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:45:39.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:45:39.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 45, 36), 11.08, 47.46, 0.0, 21.42, 15.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:45:39.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:45:36
2025-12-03T10:45:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:45:40.170 [DEBUG] [Thread-115268] [transport.py] [_log()] starting thread (client mode): 0xa27e8070
2025-12-03T10:45:40.170 [DEBUG] [Thread-115268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:45:40.190 [DEBUG] [Thread-115268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:45:40.190 [INFO] [Thread-115268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:45:40.193 [DEBUG] [Thread-115268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] client lang: <none>
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] server lang: <none>
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] kex follows: False
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] Compression: none
2025-12-03T10:45:40.194 [DEBUG] [Thread-115268] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:45:40.208 [DEBUG] [Thread-115268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:45:40.209 [DEBUG] [Thread-115268] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:45:40.209 [DEBUG] [Thread-115268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:45:40.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:45:40.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:45:40.210 [DEBUG] [Thread-115268] [transport.py] [_log()] userauth is OK
2025-12-03T10:45:40.210 [DEBUG] [Thread-115268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:45:40.210 [DEBUG] [Thread-115268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:45:40.210 [DEBUG] [Thread-115268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:45:40.210 [DEBUG] [Thread-115268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:45:40.220 [INFO] [Thread-115268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:45:40.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:45:40.794 [DEBUG] [Thread-115268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:45:40.794 [DEBUG] [Thread-115268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:45:40.794 [DEBUG] [Thread-115268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:45:40.835 [DEBUG] [Thread-115268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:45:40.836 [DEBUG] [Thread-115268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:45:40.838 [DEBUG] [Thread-115268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:45:40.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:45:40.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:45:40.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:45:40.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:45:40.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:45:40.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.364634 -999.00  +15.70  19.99     51   +5.60 1 2 1 1 1   888    0 10.01 11.70 ----- 18.8 20.0 134.6 24.6 21.9 -21.8 21.6 -21.9 21.4 -22.9 21.7 -22.0
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:45:40.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.364634
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:45:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:45:36', tmtdew=11.08, humidity=47.46, cloud=0.0, wind=21.42, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:45:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:45:40.855 [DEBUG] [Thread-115268] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:45:40.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:45:40.941 [DEBUG] [Thread-115271] [transport.py] [_log()] starting thread (client mode): 0xa51ce200
2025-12-03T10:45:40.941 [DEBUG] [Thread-115271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:45:40.956 [DEBUG] [Thread-115271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:45:40.956 [INFO] [Thread-115271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] client lang: <none>
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] server lang: <none>
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] kex follows: False
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] Compression: none
2025-12-03T10:45:40.964 [DEBUG] [Thread-115271] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:45:41.021 [DEBUG] [Thread-115271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:45:41.021 [DEBUG] [Thread-115271] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:45:41.021 [DEBUG] [Thread-115271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:45:41.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:45:41.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:45:41.078 [DEBUG] [Thread-115271] [transport.py] [_log()] userauth is OK
2025-12-03T10:45:41.078 [DEBUG] [Thread-115271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:45:41.078 [DEBUG] [Thread-115271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:45:41.078 [DEBUG] [Thread-115271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:45:41.078 [DEBUG] [Thread-115271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:45:41.092 [INFO] [Thread-115271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:45:41.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:45:41.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:45:41.253 [DEBUG] [Thread-115273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:41.941 [DEBUG] [Thread-115271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:45:41.941 [DEBUG] [Thread-115271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:45:41.990 [DEBUG] [Thread-115271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:45:41.990 [DEBUG] [Thread-115271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:45:41.998 [DEBUG] [Thread-115271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:45:42.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:45:42.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:45:42.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:45:42.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:45:42.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:45:42.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:45:42.030 [DEBUG] [Thread-115271] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:45:47.798 [DEBUG] [Thread-115274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:48.417 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:45:48.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:02.846 [DEBUG] [Thread-115275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:46:12.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:46:12.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:46:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 46, 8), 11.09, 47.41, 0.0, 18.84, 15.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:46:12.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:46:08
2025-12-03T10:46:12.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:46:13.028 [DEBUG] [Thread-115276] [transport.py] [_log()] starting thread (client mode): 0xa27e9fc0
2025-12-03T10:46:13.028 [DEBUG] [Thread-115276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:46:13.047 [DEBUG] [Thread-115276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:46:13.047 [INFO] [Thread-115276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] client lang: <none>
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] server lang: <none>
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] kex follows: False
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:46:13.050 [DEBUG] [Thread-115276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:46:13.051 [DEBUG] [Thread-115276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:46:13.051 [DEBUG] [Thread-115276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:46:13.051 [DEBUG] [Thread-115276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:46:13.051 [DEBUG] [Thread-115276] [transport.py] [_log()] Compression: none
2025-12-03T10:46:13.051 [DEBUG] [Thread-115276] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:46:13.067 [DEBUG] [Thread-115276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:46:13.068 [DEBUG] [Thread-115276] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:46:13.068 [DEBUG] [Thread-115276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:46:13.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:46:13.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:46:13.070 [DEBUG] [Thread-115276] [transport.py] [_log()] userauth is OK
2025-12-03T10:46:13.070 [DEBUG] [Thread-115276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:46:13.070 [DEBUG] [Thread-115276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:46:13.070 [DEBUG] [Thread-115276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:46:13.070 [DEBUG] [Thread-115276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:46:13.084 [INFO] [Thread-115276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:46:13.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:46:13.712 [DEBUG] [Thread-115276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:46:13.712 [DEBUG] [Thread-115276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:46:13.712 [DEBUG] [Thread-115276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:46:13.753 [DEBUG] [Thread-115276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:46:13.753 [DEBUG] [Thread-115276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:46:13.756 [DEBUG] [Thread-115276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:46:13.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:46:13.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:46:13.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:46:13.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:46:13.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:46:13.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:46:13.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:46:13.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:46:13.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:46:13.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.364981 -999.00  +15.70  18.08     51   +5.70 1 2 1 1 1   888    0 9.98 11.57 ----- 14.6 18.1 136.2 23.5 21.9 -21.7 21.7 -22.3 21.3 -22.2 21.7 -22.1
2025-12-03T10:46:13.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:46:13.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:46:13.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.364981
2025-12-03T10:46:13.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:46:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:46:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:46:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:46:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:46:13.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:46:08', tmtdew=11.09, humidity=47.41, cloud=0.0, wind=18.84, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:45:34.358', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:46:13.779 [DEBUG] [Thread-115276] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:46:13.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:46:13.877 [DEBUG] [Thread-115279] [transport.py] [_log()] starting thread (client mode): 0xa271d750
2025-12-03T10:46:13.877 [DEBUG] [Thread-115279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:46:13.891 [DEBUG] [Thread-115279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:46:13.891 [INFO] [Thread-115279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:46:13.898 [DEBUG] [Thread-115279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:46:13.899 [DEBUG] [Thread-115279] [transport.py] [_log()] client lang: <none>
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] server lang: <none>
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] kex follows: False
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] Compression: none
2025-12-03T10:46:13.900 [DEBUG] [Thread-115279] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:46:13.959 [DEBUG] [Thread-115279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:46:13.959 [DEBUG] [Thread-115279] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:46:13.960 [DEBUG] [Thread-115279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:46:13.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:46:13.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:46:14.014 [DEBUG] [Thread-115279] [transport.py] [_log()] userauth is OK
2025-12-03T10:46:14.015 [DEBUG] [Thread-115279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:46:14.015 [DEBUG] [Thread-115279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:46:14.015 [DEBUG] [Thread-115279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:46:14.015 [DEBUG] [Thread-115279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:46:14.034 [INFO] [Thread-115279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:46:14.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:46:14.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:46:14.866 [DEBUG] [Thread-115279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:46:14.866 [DEBUG] [Thread-115279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:46:14.915 [DEBUG] [Thread-115279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:46:14.915 [DEBUG] [Thread-115279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:46:14.924 [DEBUG] [Thread-115279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:46:14.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:46:14.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:46:14.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:46:14.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:46:14.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:46:14.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:46:14.959 [DEBUG] [Thread-115279] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:46:17.869 [DEBUG] [Thread-115281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:32.911 [DEBUG] [Thread-115282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:41.282 [DEBUG] [Thread-115283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:44.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:46:44.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:46:44.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:46:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 46, 40), 10.89, 48.2, 0.0, 19.46, 15.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:46:45.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:46:40
2025-12-03T10:46:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:46:45.922 [DEBUG] [Thread-115284] [transport.py] [_log()] starting thread (client mode): 0xa27c2bf0
2025-12-03T10:46:45.922 [DEBUG] [Thread-115284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:46:45.943 [DEBUG] [Thread-115284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:46:45.943 [INFO] [Thread-115284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] client lang: <none>
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] server lang: <none>
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] kex follows: False
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:46:45.944 [DEBUG] [Thread-115284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:46:45.945 [DEBUG] [Thread-115284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:46:45.945 [DEBUG] [Thread-115284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:46:45.945 [DEBUG] [Thread-115284] [transport.py] [_log()] Compression: none
2025-12-03T10:46:45.945 [DEBUG] [Thread-115284] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:46:45.952 [DEBUG] [Thread-115284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:46:45.953 [DEBUG] [Thread-115284] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:46:45.953 [DEBUG] [Thread-115284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:46:45.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:46:45.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:46:45.954 [DEBUG] [Thread-115284] [transport.py] [_log()] userauth is OK
2025-12-03T10:46:45.954 [DEBUG] [Thread-115284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:46:45.954 [DEBUG] [Thread-115284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:46:45.954 [DEBUG] [Thread-115284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:46:45.954 [DEBUG] [Thread-115284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:46:45.967 [INFO] [Thread-115284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:46:45.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:46:46.588 [DEBUG] [Thread-115284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:46:46.589 [DEBUG] [Thread-115284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:46:46.589 [DEBUG] [Thread-115284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:46:46.630 [DEBUG] [Thread-115284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:46:46.630 [DEBUG] [Thread-115284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:46:46.633 [DEBUG] [Thread-115284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:46:46.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:46:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:46:46.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:46:46.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:46:46.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:46:46.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:46:46.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:46:46.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:46:46.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:46:46.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.365329 -999.00  +15.70  13.51     52   +6.10 1 2 1 1 1   888    0 10.09 10.74 ----- 13.3 13.5 119.6 20.6 21.9 -22.1 21.7 -22.2 21.3 -22.9 21.7 -22.3
2025-12-03T10:46:46.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:46:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:46:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.365329
2025-12-03T10:46:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:46:46.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:46:46.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:46:46.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:46:46.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:46:46.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:46:40', tmtdew=10.89, humidity=48.2, cloud=0.0, wind=19.46, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:46:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:46:46.659 [DEBUG] [Thread-115284] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:46:46.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:46:46.752 [DEBUG] [Thread-115287] [transport.py] [_log()] starting thread (client mode): 0xa27eb7c0
2025-12-03T10:46:46.752 [DEBUG] [Thread-115287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:46:46.766 [DEBUG] [Thread-115287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:46:46.766 [INFO] [Thread-115287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] client lang: <none>
2025-12-03T10:46:46.774 [DEBUG] [Thread-115287] [transport.py] [_log()] server lang: <none>
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] kex follows: False
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] Compression: none
2025-12-03T10:46:46.775 [DEBUG] [Thread-115287] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:46:46.830 [DEBUG] [Thread-115287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:46:46.830 [DEBUG] [Thread-115287] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:46:46.831 [DEBUG] [Thread-115287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:46:46.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:46:46.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:46:46.886 [DEBUG] [Thread-115287] [transport.py] [_log()] userauth is OK
2025-12-03T10:46:46.886 [DEBUG] [Thread-115287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:46:46.886 [DEBUG] [Thread-115287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:46:46.887 [DEBUG] [Thread-115287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:46:46.887 [DEBUG] [Thread-115287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:46:46.905 [INFO] [Thread-115287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:46:46.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:46:46.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:46:47.807 [DEBUG] [Thread-115287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:46:47.807 [DEBUG] [Thread-115287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:46:47.855 [DEBUG] [Thread-115287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:46:47.855 [DEBUG] [Thread-115287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:46:47.864 [DEBUG] [Thread-115287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:46:47.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:46:47.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:46:47.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:46:47.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:46:47.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:46:47.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:46:47.898 [DEBUG] [Thread-115287] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:46:47.940 [DEBUG] [Thread-115289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:48.557 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:46:48.558 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:02.982 [DEBUG] [Thread-115290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:17.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:47:17.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:47:17.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:47:18.011 [DEBUG] [Thread-115291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:18.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 47, 12), 10.76, 48.63, 0.0, 19.0, 15.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:47:18.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:47:12
2025-12-03T10:47:18.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:47:18.869 [DEBUG] [Thread-115292] [transport.py] [_log()] starting thread (client mode): 0xa27b0250
2025-12-03T10:47:18.869 [DEBUG] [Thread-115292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:47:18.886 [DEBUG] [Thread-115292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:47:18.886 [INFO] [Thread-115292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] client lang: <none>
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] server lang: <none>
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] kex follows: False
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:47:18.888 [DEBUG] [Thread-115292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:47:18.889 [DEBUG] [Thread-115292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:47:18.889 [DEBUG] [Thread-115292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:47:18.889 [DEBUG] [Thread-115292] [transport.py] [_log()] Compression: none
2025-12-03T10:47:18.889 [DEBUG] [Thread-115292] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:47:18.899 [DEBUG] [Thread-115292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:47:18.899 [DEBUG] [Thread-115292] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:47:18.900 [DEBUG] [Thread-115292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:47:18.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:47:18.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:47:18.901 [DEBUG] [Thread-115292] [transport.py] [_log()] userauth is OK
2025-12-03T10:47:18.901 [DEBUG] [Thread-115292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:47:18.901 [DEBUG] [Thread-115292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:47:18.901 [DEBUG] [Thread-115292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:47:18.901 [DEBUG] [Thread-115292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:47:18.921 [INFO] [Thread-115292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:47:18.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:47:19.538 [DEBUG] [Thread-115292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:47:19.538 [DEBUG] [Thread-115292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:47:19.539 [DEBUG] [Thread-115292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:47:19.579 [DEBUG] [Thread-115292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:47:19.579 [DEBUG] [Thread-115292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:47:19.582 [DEBUG] [Thread-115292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:47:19.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:47:19.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:47:19.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:47:19.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:47:19.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:47:19.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:47:19.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:47:19.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.366023 -999.00  +16.00  21.72     51   +5.90 1 2 1 1 1   888    0 10.00 11.47 ----- 16.8 21.7 159.2 23.5 22.1 -20.9 21.8 -21.9 21.3 -21.6 21.9 -21.0
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.366023
2025-12-03T10:47:19.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:47:19.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:47:19.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:47:19.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:47:19.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:47:19.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:47:12', tmtdew=10.76, humidity=48.63, cloud=0.0, wind=19.0, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:47:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:47:19.609 [DEBUG] [Thread-115292] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:47:19.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:47:19.705 [DEBUG] [Thread-115295] [transport.py] [_log()] starting thread (client mode): 0xa27ea890
2025-12-03T10:47:19.705 [DEBUG] [Thread-115295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:47:19.720 [DEBUG] [Thread-115295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:47:19.720 [INFO] [Thread-115295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] client lang: <none>
2025-12-03T10:47:19.727 [DEBUG] [Thread-115295] [transport.py] [_log()] server lang: <none>
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] kex follows: False
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] Compression: none
2025-12-03T10:47:19.728 [DEBUG] [Thread-115295] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:47:19.786 [DEBUG] [Thread-115295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:47:19.787 [DEBUG] [Thread-115295] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:47:19.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:47:19.788 [DEBUG] [Thread-115295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:47:19.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:47:19.843 [DEBUG] [Thread-115295] [transport.py] [_log()] userauth is OK
2025-12-03T10:47:19.843 [DEBUG] [Thread-115295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:47:19.843 [DEBUG] [Thread-115295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:47:19.843 [DEBUG] [Thread-115295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:47:19.843 [DEBUG] [Thread-115295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:47:19.861 [INFO] [Thread-115295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:47:19.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:47:19.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:47:20.716 [DEBUG] [Thread-115295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:47:20.717 [DEBUG] [Thread-115295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:47:20.765 [DEBUG] [Thread-115295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:47:20.765 [DEBUG] [Thread-115295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:47:20.773 [DEBUG] [Thread-115295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:47:20.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:47:20.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:47:20.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:47:20.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:47:20.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:47:20.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:47:20.804 [DEBUG] [Thread-115295] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:47:33.038 [DEBUG] [Thread-115297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:41.329 [DEBUG] [Thread-115298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:48.085 [DEBUG] [Thread-115299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:48.706 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:48.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:47:50.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:47:50.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:47:50.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:47:51.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 47, 44), 10.84, 48.04, 0.0, 23.91, 15.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:47:51.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:47:44
2025-12-03T10:47:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:47:51.776 [DEBUG] [Thread-115300] [transport.py] [_log()] starting thread (client mode): 0xa27b7a60
2025-12-03T10:47:51.776 [DEBUG] [Thread-115300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:47:51.797 [DEBUG] [Thread-115300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:47:51.797 [INFO] [Thread-115300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:47:51.801 [DEBUG] [Thread-115300] [transport.py] [_log()] client lang: <none>
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] server lang: <none>
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] kex follows: False
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] Compression: none
2025-12-03T10:47:51.802 [DEBUG] [Thread-115300] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:47:51.820 [DEBUG] [Thread-115300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:47:51.821 [DEBUG] [Thread-115300] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:47:51.821 [DEBUG] [Thread-115300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:47:51.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:47:51.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:47:51.823 [DEBUG] [Thread-115300] [transport.py] [_log()] userauth is OK
2025-12-03T10:47:51.823 [DEBUG] [Thread-115300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:47:51.823 [DEBUG] [Thread-115300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:47:51.823 [DEBUG] [Thread-115300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:47:51.823 [DEBUG] [Thread-115300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:47:51.841 [INFO] [Thread-115300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:47:51.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:47:52.439 [DEBUG] [Thread-115300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:47:52.439 [DEBUG] [Thread-115300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:47:52.440 [DEBUG] [Thread-115300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:47:52.480 [DEBUG] [Thread-115300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:47:52.480 [DEBUG] [Thread-115300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:47:52.482 [DEBUG] [Thread-115300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:47:52.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:47:52.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:47:52.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:47:52.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:47:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:47:52.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:47:52.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:47:52.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:47:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:47:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.366370 -999.00  +16.00  14.60     51   +6.00 1 2 1 1 1   888    0 9.98 12.50 ----- 20.4 14.6 146.6 24.2 22.1 -21.5 21.8 -21.4 21.4 -21.2 22.0 -20.5
2025-12-03T10:47:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:47:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:47:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.366370
2025-12-03T10:47:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:47:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:47:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:47:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:47:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:47:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:47:44', tmtdew=10.84, humidity=48.04, cloud=0.0, wind=23.91, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:47:34.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:47:52.504 [DEBUG] [Thread-115300] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:47:52.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:47:52.598 [DEBUG] [Thread-115303] [transport.py] [_log()] starting thread (client mode): 0xa271ff40
2025-12-03T10:47:52.598 [DEBUG] [Thread-115303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:47:52.612 [DEBUG] [Thread-115303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:47:52.612 [INFO] [Thread-115303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] client lang: <none>
2025-12-03T10:47:52.620 [DEBUG] [Thread-115303] [transport.py] [_log()] server lang: <none>
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] kex follows: False
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] Compression: none
2025-12-03T10:47:52.621 [DEBUG] [Thread-115303] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:47:52.678 [DEBUG] [Thread-115303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:47:52.678 [DEBUG] [Thread-115303] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:47:52.679 [DEBUG] [Thread-115303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:47:52.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:47:52.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:47:52.734 [DEBUG] [Thread-115303] [transport.py] [_log()] userauth is OK
2025-12-03T10:47:52.735 [DEBUG] [Thread-115303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:47:52.735 [DEBUG] [Thread-115303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:47:52.735 [DEBUG] [Thread-115303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:47:52.735 [DEBUG] [Thread-115303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:47:52.753 [INFO] [Thread-115303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:47:52.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:47:52.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:47:53.603 [DEBUG] [Thread-115303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:47:53.603 [DEBUG] [Thread-115303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:47:53.651 [DEBUG] [Thread-115303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:47:53.651 [DEBUG] [Thread-115303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:47:53.660 [DEBUG] [Thread-115303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:47:53.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:47:53.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:47:53.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:47:53.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:47:53.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:47:53.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:47:53.694 [DEBUG] [Thread-115303] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:48:03.116 [DEBUG] [Thread-115305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:18.168 [DEBUG] [Thread-115306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:23.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:48:23.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:48:23.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:48:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 48, 16), 11.0, 47.58, 0.0, 23.54, 15.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:48:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:48:16
2025-12-03T10:48:24.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:48:24.670 [DEBUG] [Thread-115307] [transport.py] [_log()] starting thread (client mode): 0xa271e9e0
2025-12-03T10:48:24.671 [DEBUG] [Thread-115307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:48:24.690 [DEBUG] [Thread-115307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:48:24.690 [INFO] [Thread-115307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:24.693 [DEBUG] [Thread-115307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] client lang: <none>
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] server lang: <none>
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] kex follows: False
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] Compression: none
2025-12-03T10:48:24.694 [DEBUG] [Thread-115307] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:48:24.712 [DEBUG] [Thread-115307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:48:24.713 [DEBUG] [Thread-115307] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:48:24.714 [DEBUG] [Thread-115307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:48:24.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:48:24.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:48:24.756 [DEBUG] [Thread-115307] [transport.py] [_log()] userauth is OK
2025-12-03T10:48:24.756 [DEBUG] [Thread-115307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:48:24.756 [DEBUG] [Thread-115307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:48:24.756 [DEBUG] [Thread-115307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:48:24.756 [DEBUG] [Thread-115307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:48:24.776 [INFO] [Thread-115307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:48:24.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:48:25.390 [DEBUG] [Thread-115307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:48:25.390 [DEBUG] [Thread-115307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:48:25.390 [DEBUG] [Thread-115307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:48:25.431 [DEBUG] [Thread-115307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:48:25.431 [DEBUG] [Thread-115307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:48:25.434 [DEBUG] [Thread-115307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:48:25.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:48:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:48:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:48:25.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:48:25.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:48:25.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:48:25.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:48:25.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:48:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:48:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.366718 -999.00  +16.10  16.62     51   +6.00 1 2 1 1 1   888    0 10.27 13.52 ----- 23.6 16.6 152.1 26.2 22.3 -20.4 21.9 -20.4 21.5 -20.8 22.1 -21.0
2025-12-03T10:48:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:48:25.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:48:25.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.366718
2025-12-03T10:48:25.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:48:25.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:48:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:48:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:48:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:48:25.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:48:16', tmtdew=11.0, humidity=47.58, cloud=0.0, wind=23.54, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:48:04.435', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:48:25.460 [DEBUG] [Thread-115307] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:48:25.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:48:25.558 [DEBUG] [Thread-115310] [transport.py] [_log()] starting thread (client mode): 0xa27090c0
2025-12-03T10:48:25.558 [DEBUG] [Thread-115310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:48:25.577 [DEBUG] [Thread-115310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:48:25.577 [INFO] [Thread-115310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:25.587 [DEBUG] [Thread-115310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] client lang: <none>
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] server lang: <none>
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] kex follows: False
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] Compression: none
2025-12-03T10:48:25.588 [DEBUG] [Thread-115310] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:48:25.646 [DEBUG] [Thread-115310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:48:25.647 [DEBUG] [Thread-115310] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:48:25.647 [DEBUG] [Thread-115310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:48:25.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:48:25.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:48:25.702 [DEBUG] [Thread-115310] [transport.py] [_log()] userauth is OK
2025-12-03T10:48:25.702 [DEBUG] [Thread-115310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:48:25.703 [DEBUG] [Thread-115310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:48:25.703 [DEBUG] [Thread-115310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:48:25.703 [DEBUG] [Thread-115310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:48:25.722 [INFO] [Thread-115310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:48:25.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:48:25.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:48:26.578 [DEBUG] [Thread-115310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:48:26.578 [DEBUG] [Thread-115310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:48:26.625 [DEBUG] [Thread-115310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:48:26.625 [DEBUG] [Thread-115310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:48:26.634 [DEBUG] [Thread-115310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:48:26.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:48:26.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:48:26.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:48:26.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:48:26.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:48:26.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:48:26.668 [DEBUG] [Thread-115310] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:48:33.195 [DEBUG] [Thread-115312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:41.363 [DEBUG] [Thread-115313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:48.239 [DEBUG] [Thread-115314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:48.846 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:48.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:48:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:48:56.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:48:56.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:48:57.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 48, 48), 11.34, 46.78, 0.0, 25.53, 15.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:48:57.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:48:48
2025-12-03T10:48:57.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:48:57.639 [DEBUG] [Thread-115315] [transport.py] [_log()] starting thread (client mode): 0xa27c1bd0
2025-12-03T10:48:57.639 [DEBUG] [Thread-115315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:48:57.659 [DEBUG] [Thread-115315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:48:57.660 [INFO] [Thread-115315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:48:57.662 [DEBUG] [Thread-115315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] client lang: <none>
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] server lang: <none>
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] kex follows: False
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] Compression: none
2025-12-03T10:48:57.663 [DEBUG] [Thread-115315] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:48:57.682 [DEBUG] [Thread-115315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:48:57.682 [DEBUG] [Thread-115315] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:48:57.682 [DEBUG] [Thread-115315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:48:57.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:48:57.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:48:57.683 [DEBUG] [Thread-115315] [transport.py] [_log()] userauth is OK
2025-12-03T10:48:57.683 [DEBUG] [Thread-115315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:48:57.683 [DEBUG] [Thread-115315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:48:57.683 [DEBUG] [Thread-115315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:48:57.684 [DEBUG] [Thread-115315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:48:57.694 [INFO] [Thread-115315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:48:57.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:48:58.301 [DEBUG] [Thread-115315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:48:58.302 [DEBUG] [Thread-115315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:48:58.302 [DEBUG] [Thread-115315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:48:58.343 [DEBUG] [Thread-115315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:48:58.343 [DEBUG] [Thread-115315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:48:58.348 [DEBUG] [Thread-115315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:48:58.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:48:58.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:48:58.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:48:58.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:48:58.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:48:58.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:48:58.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:48:58.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:48:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:48:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.367065 -999.00  +16.40  20.28     50   +6.00 1 2 1 1 1   888    0 10.02 14.53 ----- 19.7 20.3 145.6 24.9 22.6 -20.0 22.1 -21.0 21.6 -19.6 22.2 -21.1
2025-12-03T10:48:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:48:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:48:58.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.367065
2025-12-03T10:48:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:48:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:48:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:48:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:48:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:48:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:48:48', tmtdew=11.34, humidity=46.78, cloud=0.0, wind=25.53, temperature=15.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:48:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:48:58.374 [DEBUG] [Thread-115315] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:48:58.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:48:58.469 [DEBUG] [Thread-115318] [transport.py] [_log()] starting thread (client mode): 0xa27b4d30
2025-12-03T10:48:58.469 [DEBUG] [Thread-115318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:48:58.485 [DEBUG] [Thread-115318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:48:58.485 [INFO] [Thread-115318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:48:58.492 [DEBUG] [Thread-115318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] client lang: <none>
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] server lang: <none>
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] kex follows: False
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] Compression: none
2025-12-03T10:48:58.493 [DEBUG] [Thread-115318] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:48:58.550 [DEBUG] [Thread-115318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:48:58.550 [DEBUG] [Thread-115318] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:48:58.551 [DEBUG] [Thread-115318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:48:58.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:48:58.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:48:58.606 [DEBUG] [Thread-115318] [transport.py] [_log()] userauth is OK
2025-12-03T10:48:58.606 [DEBUG] [Thread-115318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:48:58.606 [DEBUG] [Thread-115318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:48:58.606 [DEBUG] [Thread-115318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:48:58.606 [DEBUG] [Thread-115318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:48:58.625 [INFO] [Thread-115318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:48:58.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:48:58.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:48:59.435 [DEBUG] [Thread-115318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:48:59.435 [DEBUG] [Thread-115318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:48:59.486 [DEBUG] [Thread-115318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:48:59.486 [DEBUG] [Thread-115318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:48:59.499 [DEBUG] [Thread-115318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:48:59.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:48:59.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:48:59.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:48:59.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:48:59.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:48:59.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:48:59.533 [DEBUG] [Thread-115318] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:49:03.267 [DEBUG] [Thread-115320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:18.310 [DEBUG] [Thread-115321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:29.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:49:29.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:49:29.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:49:30.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 49, 20), 11.43, 46.5, 0.0, 24.9, 15.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:49:30.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:49:20
2025-12-03T10:49:30.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:49:30.504 [DEBUG] [Thread-115322] [transport.py] [_log()] starting thread (client mode): 0xa27c2200
2025-12-03T10:49:30.504 [DEBUG] [Thread-115322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:49:30.524 [DEBUG] [Thread-115322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:49:30.524 [INFO] [Thread-115322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:49:30.525 [DEBUG] [Thread-115322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] client lang: <none>
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] server lang: <none>
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] kex follows: False
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] Compression: none
2025-12-03T10:49:30.526 [DEBUG] [Thread-115322] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:49:30.541 [DEBUG] [Thread-115322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:49:30.541 [DEBUG] [Thread-115322] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:49:30.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:49:30.541 [DEBUG] [Thread-115322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:49:30.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:49:30.542 [DEBUG] [Thread-115322] [transport.py] [_log()] userauth is OK
2025-12-03T10:49:30.542 [DEBUG] [Thread-115322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:49:30.542 [DEBUG] [Thread-115322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:49:30.542 [DEBUG] [Thread-115322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:49:30.542 [DEBUG] [Thread-115322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:49:30.551 [INFO] [Thread-115322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:49:30.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:49:31.176 [DEBUG] [Thread-115322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:49:31.176 [DEBUG] [Thread-115322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:49:31.176 [DEBUG] [Thread-115322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:49:31.218 [DEBUG] [Thread-115322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:49:31.218 [DEBUG] [Thread-115322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:49:31.220 [DEBUG] [Thread-115322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:49:31.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:49:31.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:49:31.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:49:31.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:49:31.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:49:31.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:49:31.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.367412 -999.00  +16.50  19.38     47   +5.40 1 2 1 1 1   888    0 10.33 20.78 ----- 15.1 19.4 148.6 24.3 22.8 -21.8 22.3 -21.4 21.8 -20.8 22.4 -21.0
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:49:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.367412
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:49:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:49:20', tmtdew=11.43, humidity=46.5, cloud=0.0, wind=24.9, temperature=15.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:49:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:49:31.240 [DEBUG] [Thread-115322] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:49:31.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:49:31.331 [DEBUG] [Thread-115325] [transport.py] [_log()] starting thread (client mode): 0xa51ce7d0
2025-12-03T10:49:31.331 [DEBUG] [Thread-115325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:49:31.346 [DEBUG] [Thread-115325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:49:31.347 [INFO] [Thread-115325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:49:31.354 [DEBUG] [Thread-115325] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:49:31.354 [DEBUG] [Thread-115325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:49:31.354 [DEBUG] [Thread-115325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:49:31.354 [DEBUG] [Thread-115325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] client lang: <none>
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] server lang: <none>
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] kex follows: False
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] Compression: none
2025-12-03T10:49:31.355 [DEBUG] [Thread-115325] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:49:31.413 [DEBUG] [Thread-115325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:49:31.413 [DEBUG] [Thread-115325] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:49:31.413 [DEBUG] [Thread-115325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:49:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:49:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:49:31.470 [DEBUG] [Thread-115325] [transport.py] [_log()] userauth is OK
2025-12-03T10:49:31.470 [DEBUG] [Thread-115325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:49:31.470 [DEBUG] [Thread-115325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:49:31.470 [DEBUG] [Thread-115325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:49:31.470 [DEBUG] [Thread-115325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:49:31.484 [INFO] [Thread-115325] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:49:31.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:49:31.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:49:32.329 [DEBUG] [Thread-115325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:49:32.329 [DEBUG] [Thread-115325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:49:32.377 [DEBUG] [Thread-115325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:49:32.377 [DEBUG] [Thread-115325] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:49:32.386 [DEBUG] [Thread-115325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:49:32.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:49:32.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:49:32.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:49:32.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:49:32.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:49:32.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:49:32.422 [DEBUG] [Thread-115325] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:49:33.336 [DEBUG] [Thread-115327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:41.420 [DEBUG] [Thread-115328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:48.382 [DEBUG] [Thread-115329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:48.988 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:49:48.989 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:50:02.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:50:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:50:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 49, 52), 12.07, 44.75, 0.0, 22.92, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:50:03.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:49:52
2025-12-03T10:50:03.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:50:03.369 [DEBUG] [Thread-115330] [transport.py] [_log()] starting thread (client mode): 0xa270ac50
2025-12-03T10:50:03.369 [DEBUG] [Thread-115330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:50:03.386 [DEBUG] [Thread-115330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:50:03.386 [INFO] [Thread-115330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] client lang: <none>
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] server lang: <none>
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] kex follows: False
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] Compression: none
2025-12-03T10:50:03.388 [DEBUG] [Thread-115330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:50:03.396 [DEBUG] [Thread-115330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:50:03.396 [DEBUG] [Thread-115330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:50:03.396 [DEBUG] [Thread-115330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:50:03.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:50:03.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:50:03.398 [DEBUG] [Thread-115330] [transport.py] [_log()] userauth is OK
2025-12-03T10:50:03.398 [DEBUG] [Thread-115330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:50:03.398 [DEBUG] [Thread-115330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:50:03.398 [DEBUG] [Thread-115330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:50:03.398 [DEBUG] [Thread-115330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:50:03.412 [DEBUG] [Thread-115332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:03.415 [INFO] [Thread-115330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:50:03.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:50:04.039 [DEBUG] [Thread-115330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:50:04.039 [DEBUG] [Thread-115330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:50:04.039 [DEBUG] [Thread-115330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:50:04.080 [DEBUG] [Thread-115330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:50:04.080 [DEBUG] [Thread-115330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:50:04.083 [DEBUG] [Thread-115330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:50:04.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:50:04.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:50:04.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:50:04.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:50:04.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:50:04.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:50:04.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:50:04.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:50:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:50:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.367759 -999.00  +16.50  21.31     47   +5.20 1 2 1 1 1   888    0 10.76 27.15 ----- 24.8 21.3 154.4 30.0 22.9 -21.0 22.3 -21.3 21.8 -21.0 22.5 -21.1
2025-12-03T10:50:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:50:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:50:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.367759
2025-12-03T10:50:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:50:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:50:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:50:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:50:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:50:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:49:52', tmtdew=12.07, humidity=44.75, cloud=0.0, wind=22.92, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:49:34.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:50:04.106 [DEBUG] [Thread-115330] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:50:04.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:50:04.202 [DEBUG] [Thread-115334] [transport.py] [_log()] starting thread (client mode): 0xa2726da0
2025-12-03T10:50:04.202 [DEBUG] [Thread-115334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:50:04.217 [DEBUG] [Thread-115334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:50:04.217 [INFO] [Thread-115334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] client lang: <none>
2025-12-03T10:50:04.225 [DEBUG] [Thread-115334] [transport.py] [_log()] server lang: <none>
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] kex follows: False
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] Compression: none
2025-12-03T10:50:04.226 [DEBUG] [Thread-115334] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:50:04.281 [DEBUG] [Thread-115334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:50:04.282 [DEBUG] [Thread-115334] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:50:04.282 [DEBUG] [Thread-115334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:50:04.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:50:04.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:50:04.338 [DEBUG] [Thread-115334] [transport.py] [_log()] userauth is OK
2025-12-03T10:50:04.338 [DEBUG] [Thread-115334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:50:04.338 [DEBUG] [Thread-115334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:50:04.338 [DEBUG] [Thread-115334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:50:04.338 [DEBUG] [Thread-115334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:50:04.357 [INFO] [Thread-115334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:50:04.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:50:04.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:50:05.303 [DEBUG] [Thread-115334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:50:05.304 [DEBUG] [Thread-115334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:50:05.354 [DEBUG] [Thread-115334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:50:05.354 [DEBUG] [Thread-115334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:50:05.363 [DEBUG] [Thread-115334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:50:05.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:50:05.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:50:05.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:50:05.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:50:05.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:50:05.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:50:05.396 [DEBUG] [Thread-115334] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:50:18.442 [DEBUG] [Thread-115336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:33.484 [DEBUG] [Thread-115337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:35.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:50:35.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:50:35.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:50:36.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 50, 24), 12.29, 44.09, 0.0, 24.67, 16.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:50:36.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:50:24
2025-12-03T10:50:36.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:50:36.354 [DEBUG] [Thread-115338] [transport.py] [_log()] starting thread (client mode): 0xa27ecee0
2025-12-03T10:50:36.354 [DEBUG] [Thread-115338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:50:36.374 [DEBUG] [Thread-115338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:50:36.374 [INFO] [Thread-115338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:50:36.377 [DEBUG] [Thread-115338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:50:36.377 [DEBUG] [Thread-115338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:50:36.377 [DEBUG] [Thread-115338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:50:36.377 [DEBUG] [Thread-115338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] client lang: <none>
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] server lang: <none>
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] kex follows: False
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] Compression: none
2025-12-03T10:50:36.378 [DEBUG] [Thread-115338] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:50:36.390 [DEBUG] [Thread-115338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:50:36.391 [DEBUG] [Thread-115338] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:50:36.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:50:36.392 [DEBUG] [Thread-115338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:50:36.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:50:36.436 [DEBUG] [Thread-115338] [transport.py] [_log()] userauth is OK
2025-12-03T10:50:36.436 [DEBUG] [Thread-115338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:50:36.436 [DEBUG] [Thread-115338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:50:36.436 [DEBUG] [Thread-115338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:50:36.436 [DEBUG] [Thread-115338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:50:36.456 [INFO] [Thread-115338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:50:36.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:50:37.067 [DEBUG] [Thread-115338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:50:37.067 [DEBUG] [Thread-115338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:50:37.067 [DEBUG] [Thread-115338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:50:37.108 [DEBUG] [Thread-115338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:50:37.108 [DEBUG] [Thread-115338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:50:37.111 [DEBUG] [Thread-115338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:50:37.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:50:37.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:50:37.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:50:37.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:50:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:50:37.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:50:37.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.368106 -999.00  +16.60  15.49     47   +5.30 1 2 1 1 1   888    0 10.91 33.70 ----- 20.9 15.5 159.2 27.1 23.1 -20.9 22.5 -21.5 21.9 -20.2 22.6 -22.0
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:50:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.368106
2025-12-03T10:50:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:50:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:50:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:50:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:50:37.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:50:37.143 [DEBUG] [Thread-115338] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:50:37.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:50:24', tmtdew=12.29, humidity=44.09, cloud=0.0, wind=24.67, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:50:04.358', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:50:37.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:50:37.241 [DEBUG] [Thread-115341] [transport.py] [_log()] starting thread (client mode): 0xa271f850
2025-12-03T10:50:37.241 [DEBUG] [Thread-115341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:50:37.255 [DEBUG] [Thread-115341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:50:37.256 [INFO] [Thread-115341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:50:37.264 [DEBUG] [Thread-115341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] client lang: <none>
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] server lang: <none>
2025-12-03T10:50:37.273 [DEBUG] [Thread-115341] [transport.py] [_log()] kex follows: False
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] Compression: none
2025-12-03T10:50:37.274 [DEBUG] [Thread-115341] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:50:37.321 [DEBUG] [Thread-115341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:50:37.322 [DEBUG] [Thread-115341] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:50:37.322 [DEBUG] [Thread-115341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:50:37.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:50:37.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:50:37.378 [DEBUG] [Thread-115341] [transport.py] [_log()] userauth is OK
2025-12-03T10:50:37.378 [DEBUG] [Thread-115341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:50:37.378 [DEBUG] [Thread-115341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:50:37.378 [DEBUG] [Thread-115341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:50:37.379 [DEBUG] [Thread-115341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:50:37.400 [INFO] [Thread-115341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:50:37.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:50:37.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:50:38.243 [DEBUG] [Thread-115341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:50:38.243 [DEBUG] [Thread-115341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:50:38.291 [DEBUG] [Thread-115341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:50:38.291 [DEBUG] [Thread-115341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:50:38.301 [DEBUG] [Thread-115341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:50:38.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:50:38.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:50:38.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:50:38.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:50:38.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:50:38.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:50:38.335 [DEBUG] [Thread-115341] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:50:41.453 [DEBUG] [Thread-115343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:48.512 [DEBUG] [Thread-115344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:49.128 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:50:49.129 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:03.546 [DEBUG] [Thread-115345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:08.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:51:08.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:51:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:51:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 50, 56), 12.94, 42.16, 0.0, 20.89, 16.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:51:09.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:50:56
2025-12-03T10:51:09.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:51:09.276 [DEBUG] [Thread-115346] [transport.py] [_log()] starting thread (client mode): 0xa270a170
2025-12-03T10:51:09.276 [DEBUG] [Thread-115346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:51:09.299 [DEBUG] [Thread-115346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:51:09.299 [INFO] [Thread-115346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] client lang: <none>
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] server lang: <none>
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] kex follows: False
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:51:09.301 [DEBUG] [Thread-115346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:51:09.302 [DEBUG] [Thread-115346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:51:09.302 [DEBUG] [Thread-115346] [transport.py] [_log()] Compression: none
2025-12-03T10:51:09.302 [DEBUG] [Thread-115346] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:51:09.312 [DEBUG] [Thread-115346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:51:09.312 [DEBUG] [Thread-115346] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:51:09.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:51:09.313 [DEBUG] [Thread-115346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:51:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:51:09.315 [DEBUG] [Thread-115346] [transport.py] [_log()] userauth is OK
2025-12-03T10:51:09.315 [DEBUG] [Thread-115346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:51:09.315 [DEBUG] [Thread-115346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:51:09.315 [DEBUG] [Thread-115346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:51:09.315 [DEBUG] [Thread-115346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:51:09.332 [INFO] [Thread-115346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:51:09.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:51:09.893 [DEBUG] [Thread-115346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:51:09.894 [DEBUG] [Thread-115346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:51:09.894 [DEBUG] [Thread-115346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:51:09.934 [DEBUG] [Thread-115346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:51:09.934 [DEBUG] [Thread-115346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:51:09.937 [DEBUG] [Thread-115346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:51:09.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:51:09.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:51:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:51:09.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:51:09.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:51:09.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:51:09.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:51:09.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:51:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:51:09.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.368454 -999.00  +16.40  17.01     48   +5.30 1 2 1 1 1   888    0 11.23 42.38 ----- 16.6 17.0 141.6 28.5 23.2 -21.9 22.5 -21.9 21.9 -21.8 22.6 -21.2
2025-12-03T10:51:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:51:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:51:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.368454
2025-12-03T10:51:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:51:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:51:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:51:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:51:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:51:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:50:56', tmtdew=12.94, humidity=42.16, cloud=0.0, wind=20.89, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:50:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:51:09.960 [DEBUG] [Thread-115346] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:51:10.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:51:10.060 [DEBUG] [Thread-115349] [transport.py] [_log()] starting thread (client mode): 0xa27ec220
2025-12-03T10:51:10.060 [DEBUG] [Thread-115349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:51:10.077 [DEBUG] [Thread-115349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:51:10.077 [INFO] [Thread-115349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:51:10.088 [DEBUG] [Thread-115349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] client lang: <none>
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] server lang: <none>
2025-12-03T10:51:10.089 [DEBUG] [Thread-115349] [transport.py] [_log()] kex follows: False
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] Compression: none
2025-12-03T10:51:10.090 [DEBUG] [Thread-115349] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:51:10.145 [DEBUG] [Thread-115349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:51:10.146 [DEBUG] [Thread-115349] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:51:10.146 [DEBUG] [Thread-115349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:51:10.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:51:10.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:51:10.202 [DEBUG] [Thread-115349] [transport.py] [_log()] userauth is OK
2025-12-03T10:51:10.202 [DEBUG] [Thread-115349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:51:10.202 [DEBUG] [Thread-115349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:51:10.202 [DEBUG] [Thread-115349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:51:10.203 [DEBUG] [Thread-115349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:51:10.221 [INFO] [Thread-115349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:51:10.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:51:10.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:51:11.033 [DEBUG] [Thread-115349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:51:11.033 [DEBUG] [Thread-115349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:51:11.081 [DEBUG] [Thread-115349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:51:11.081 [DEBUG] [Thread-115349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:51:11.090 [DEBUG] [Thread-115349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:51:11.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:51:11.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:51:11.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:51:11.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:51:11.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:51:11.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:51:11.124 [DEBUG] [Thread-115349] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:51:18.571 [DEBUG] [Thread-115351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:33.612 [DEBUG] [Thread-115352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:41.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:51:41.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:51:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:51:41.482 [DEBUG] [Thread-115353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 51, 28), 12.74, 42.72, 0.0, 20.36, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:51:41.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:51:28
2025-12-03T10:51:41.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:51:42.096 [DEBUG] [Thread-115354] [transport.py] [_log()] starting thread (client mode): 0xa27096c0
2025-12-03T10:51:42.096 [DEBUG] [Thread-115354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:51:42.116 [DEBUG] [Thread-115354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:51:42.116 [INFO] [Thread-115354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] client lang: <none>
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] server lang: <none>
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] kex follows: False
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:51:42.119 [DEBUG] [Thread-115354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:51:42.120 [DEBUG] [Thread-115354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:51:42.120 [DEBUG] [Thread-115354] [transport.py] [_log()] Compression: none
2025-12-03T10:51:42.120 [DEBUG] [Thread-115354] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:51:42.138 [DEBUG] [Thread-115354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:51:42.138 [DEBUG] [Thread-115354] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:51:42.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:51:42.139 [DEBUG] [Thread-115354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:51:42.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:51:42.141 [DEBUG] [Thread-115354] [transport.py] [_log()] userauth is OK
2025-12-03T10:51:42.141 [DEBUG] [Thread-115354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:51:42.141 [DEBUG] [Thread-115354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:51:42.142 [DEBUG] [Thread-115354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:51:42.142 [DEBUG] [Thread-115354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:51:42.176 [INFO] [Thread-115354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:51:42.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:51:42.832 [DEBUG] [Thread-115354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:51:42.832 [DEBUG] [Thread-115354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:51:42.833 [DEBUG] [Thread-115354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:51:42.874 [DEBUG] [Thread-115354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:51:42.874 [DEBUG] [Thread-115354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:51:42.877 [DEBUG] [Thread-115354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:51:42.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:51:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:51:42.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:51:42.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:51:42.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:51:42.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:51:42.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.368454 -999.00  +16.40  17.01     48   +5.30 1 2 1 1 1   888    0 11.23 42.38 ----- 16.6 17.0 141.6 28.5 23.2 -21.9 22.5 -21.9 21.9 -21.8 22.6 -21.2
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:51:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.368454
2025-12-03T10:51:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:51:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:51:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:51:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:51:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:51:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:51:28', tmtdew=12.74, humidity=42.72, cloud=0.0, wind=20.36, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:50:34.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:51:42.905 [DEBUG] [Thread-115354] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:51:43.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:51:43.013 [DEBUG] [Thread-115357] [transport.py] [_log()] starting thread (client mode): 0xa270a020
2025-12-03T10:51:43.013 [DEBUG] [Thread-115357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:51:43.028 [DEBUG] [Thread-115357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:51:43.028 [INFO] [Thread-115357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] client lang: <none>
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] server lang: <none>
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] kex follows: False
2025-12-03T10:51:43.036 [DEBUG] [Thread-115357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] Compression: none
2025-12-03T10:51:43.037 [DEBUG] [Thread-115357] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:51:43.094 [DEBUG] [Thread-115357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:51:43.095 [DEBUG] [Thread-115357] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:51:43.095 [DEBUG] [Thread-115357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:51:43.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:51:43.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:51:43.150 [DEBUG] [Thread-115357] [transport.py] [_log()] userauth is OK
2025-12-03T10:51:43.150 [DEBUG] [Thread-115357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:51:43.150 [DEBUG] [Thread-115357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:51:43.151 [DEBUG] [Thread-115357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:51:43.151 [DEBUG] [Thread-115357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:51:43.169 [INFO] [Thread-115357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:51:43.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:51:43.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:51:44.047 [DEBUG] [Thread-115357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:51:44.047 [DEBUG] [Thread-115357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:51:44.095 [DEBUG] [Thread-115357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:51:44.095 [DEBUG] [Thread-115357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:51:44.104 [DEBUG] [Thread-115357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:51:44.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:51:44.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:51:44.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:51:44.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:51:44.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:51:44.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:51:44.139 [DEBUG] [Thread-115357] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:51:48.644 [DEBUG] [Thread-115359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:49.272 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:51:49.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:03.697 [DEBUG] [Thread-115360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:52:14.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:52:14.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:52:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 52), 12.56, 42.8, 0.0, 19.52, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:52:14.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:52:00
2025-12-03T10:52:14.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:52:15.104 [DEBUG] [Thread-115361] [transport.py] [_log()] starting thread (client mode): 0xa27ef2e0
2025-12-03T10:52:15.104 [DEBUG] [Thread-115361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:52:15.134 [DEBUG] [Thread-115361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:52:15.134 [INFO] [Thread-115361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:52:15.138 [DEBUG] [Thread-115361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:52:15.138 [DEBUG] [Thread-115361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:52:15.138 [DEBUG] [Thread-115361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] client lang: <none>
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] server lang: <none>
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] kex follows: False
2025-12-03T10:52:15.139 [DEBUG] [Thread-115361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] Compression: none
2025-12-03T10:52:15.140 [DEBUG] [Thread-115361] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:52:15.159 [DEBUG] [Thread-115361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:52:15.160 [DEBUG] [Thread-115361] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:52:15.160 [DEBUG] [Thread-115361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:52:15.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:52:15.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:52:15.162 [DEBUG] [Thread-115361] [transport.py] [_log()] userauth is OK
2025-12-03T10:52:15.162 [DEBUG] [Thread-115361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:52:15.162 [DEBUG] [Thread-115361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:52:15.162 [DEBUG] [Thread-115361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:52:15.162 [DEBUG] [Thread-115361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:52:15.180 [INFO] [Thread-115361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:52:15.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:52:15.954 [DEBUG] [Thread-115361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:52:15.954 [DEBUG] [Thread-115361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:52:15.954 [DEBUG] [Thread-115361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:52:15.995 [DEBUG] [Thread-115361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:52:15.995 [DEBUG] [Thread-115361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:52:15.998 [DEBUG] [Thread-115361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:52:16.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:52:16.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:52:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:52:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:52:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:52:16.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:52:16.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.369148 -999.00  +16.70  15.38     47   +5.40 1 2 1 1 1   888    0 11.13 49.12 ----- 17.7 15.4 159.7 18.8 23.5 -20.9 22.9 -21.5 22.2 -20.6 23.0 -20.6
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:52:16.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.369148
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:52:16.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:52:00', tmtdew=12.56, humidity=42.8, cloud=0.0, wind=19.52, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:51:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:52:16.018 [DEBUG] [Thread-115361] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:52:16.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:52:16.116 [DEBUG] [Thread-115364] [transport.py] [_log()] starting thread (client mode): 0xa27eef50
2025-12-03T10:52:16.116 [DEBUG] [Thread-115364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:52:16.131 [DEBUG] [Thread-115364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:52:16.131 [INFO] [Thread-115364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:52:16.138 [DEBUG] [Thread-115364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] client lang: <none>
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] server lang: <none>
2025-12-03T10:52:16.139 [DEBUG] [Thread-115364] [transport.py] [_log()] kex follows: False
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] Compression: none
2025-12-03T10:52:16.140 [DEBUG] [Thread-115364] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:52:16.197 [DEBUG] [Thread-115364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:52:16.198 [DEBUG] [Thread-115364] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:52:16.198 [DEBUG] [Thread-115364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:52:16.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:52:16.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:52:16.254 [DEBUG] [Thread-115364] [transport.py] [_log()] userauth is OK
2025-12-03T10:52:16.254 [DEBUG] [Thread-115364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:52:16.254 [DEBUG] [Thread-115364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:52:16.254 [DEBUG] [Thread-115364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:52:16.254 [DEBUG] [Thread-115364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:52:16.274 [INFO] [Thread-115364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:52:16.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:52:16.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:52:17.111 [DEBUG] [Thread-115364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:52:17.112 [DEBUG] [Thread-115364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:52:17.160 [DEBUG] [Thread-115364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:52:17.160 [DEBUG] [Thread-115364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:52:17.169 [DEBUG] [Thread-115364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:52:17.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:52:17.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:52:17.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:52:17.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:52:17.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:52:17.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:52:17.203 [DEBUG] [Thread-115364] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:52:18.730 [DEBUG] [Thread-115366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:33.773 [DEBUG] [Thread-115367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:41.527 [DEBUG] [Thread-115368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:47.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:52:47.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:52:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:52:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 52, 32), 12.47, 43.12, 0.0, 23.25, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:52:47.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:52:32
2025-12-03T10:52:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:52:48.223 [DEBUG] [Thread-115369] [transport.py] [_log()] starting thread (client mode): 0xa27ed870
2025-12-03T10:52:48.223 [DEBUG] [Thread-115369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:52:48.244 [DEBUG] [Thread-115369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:52:48.244 [INFO] [Thread-115369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] client lang: <none>
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] server lang: <none>
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] kex follows: False
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:52:48.247 [DEBUG] [Thread-115369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:52:48.248 [DEBUG] [Thread-115369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:52:48.248 [DEBUG] [Thread-115369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:52:48.248 [DEBUG] [Thread-115369] [transport.py] [_log()] Compression: none
2025-12-03T10:52:48.248 [DEBUG] [Thread-115369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:52:48.263 [DEBUG] [Thread-115369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:52:48.263 [DEBUG] [Thread-115369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:52:48.263 [DEBUG] [Thread-115369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:52:48.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:52:48.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:52:48.264 [DEBUG] [Thread-115369] [transport.py] [_log()] userauth is OK
2025-12-03T10:52:48.264 [DEBUG] [Thread-115369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:52:48.264 [DEBUG] [Thread-115369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:52:48.265 [DEBUG] [Thread-115369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:52:48.265 [DEBUG] [Thread-115369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:52:48.282 [INFO] [Thread-115369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:52:48.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:52:48.801 [DEBUG] [Thread-115371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:48.927 [DEBUG] [Thread-115369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:52:48.927 [DEBUG] [Thread-115369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:52:48.927 [DEBUG] [Thread-115369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:52:48.968 [DEBUG] [Thread-115369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:52:48.968 [DEBUG] [Thread-115369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:52:48.970 [DEBUG] [Thread-115369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:52:48.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:52:48.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:52:48.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:52:48.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:52:48.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:52:48.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:52:48.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.369495 -999.00  +17.10  13.71     46   +5.60 1 2 1 1 1   888    0 11.52 50.70 ----- 25.7 13.7 152.2 26.5 23.6 -21.2 22.9 -23.0 22.3 -20.5 23.1 -21.9
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.369495
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:52:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:52:32', tmtdew=12.47, humidity=43.12, cloud=0.0, wind=23.25, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:52:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:52:48.990 [DEBUG] [Thread-115369] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:52:49.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:52:49.074 [DEBUG] [Thread-115373] [transport.py] [_log()] starting thread (client mode): 0xa27b4b80
2025-12-03T10:52:49.075 [DEBUG] [Thread-115373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:52:49.089 [DEBUG] [Thread-115373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:52:49.089 [INFO] [Thread-115373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] client lang: <none>
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] server lang: <none>
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] kex follows: False
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] Compression: none
2025-12-03T10:52:49.097 [DEBUG] [Thread-115373] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:52:49.153 [DEBUG] [Thread-115373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:52:49.153 [DEBUG] [Thread-115373] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:52:49.153 [DEBUG] [Thread-115373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:52:49.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:52:49.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:52:49.212 [DEBUG] [Thread-115373] [transport.py] [_log()] userauth is OK
2025-12-03T10:52:49.212 [DEBUG] [Thread-115373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:52:49.212 [DEBUG] [Thread-115373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:52:49.212 [DEBUG] [Thread-115373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:52:49.212 [DEBUG] [Thread-115373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:52:49.226 [INFO] [Thread-115373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:52:49.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:52:49.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:52:49.428 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:49.428 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:52:50.074 [DEBUG] [Thread-115373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:52:50.074 [DEBUG] [Thread-115373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:52:50.123 [DEBUG] [Thread-115373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:52:50.123 [DEBUG] [Thread-115373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:52:50.131 [DEBUG] [Thread-115373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:52:50.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:52:50.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:52:50.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:52:50.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:52:50.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:52:50.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:52:50.164 [DEBUG] [Thread-115373] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:53:03.827 [DEBUG] [Thread-115375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:18.872 [DEBUG] [Thread-115376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:20.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:53:20.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:53:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:53:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 53, 4), 12.83, 42.12, 0.0, 19.73, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:53:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:53:04
2025-12-03T10:53:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:53:21.142 [DEBUG] [Thread-115377] [transport.py] [_log()] starting thread (client mode): 0xa27ee620
2025-12-03T10:53:21.142 [DEBUG] [Thread-115377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:53:21.157 [DEBUG] [Thread-115377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:53:21.157 [INFO] [Thread-115377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] client lang: <none>
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] server lang: <none>
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] kex follows: False
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] Compression: none
2025-12-03T10:53:21.160 [DEBUG] [Thread-115377] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:53:21.179 [DEBUG] [Thread-115377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:53:21.179 [DEBUG] [Thread-115377] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:53:21.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:53:21.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:53:21.180 [DEBUG] [Thread-115377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:53:21.181 [DEBUG] [Thread-115377] [transport.py] [_log()] userauth is OK
2025-12-03T10:53:21.181 [DEBUG] [Thread-115377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:53:21.181 [DEBUG] [Thread-115377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:53:21.181 [DEBUG] [Thread-115377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:53:21.181 [DEBUG] [Thread-115377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:53:21.199 [INFO] [Thread-115377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:53:21.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:53:21.840 [DEBUG] [Thread-115377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:53:21.840 [DEBUG] [Thread-115377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:53:21.841 [DEBUG] [Thread-115377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:53:21.881 [DEBUG] [Thread-115377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:53:21.881 [DEBUG] [Thread-115377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:53:21.884 [DEBUG] [Thread-115377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:53:21.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:53:21.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:53:21.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:53:21.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:53:21.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:53:21.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:53:21.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:53:21.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.369842 -999.00  +16.70  17.33     47   +5.30 1 2 1 1 1   888    0 11.88 60.84 ----- 16.9 17.3 136.2 24.7 23.7 -22.7 23.0 -21.9 22.3 -21.1 23.1 -21.6
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.369842
2025-12-03T10:53:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:53:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:53:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:53:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:53:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:53:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:53:04', tmtdew=12.83, humidity=42.12, cloud=0.0, wind=19.73, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:52:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:53:21.908 [DEBUG] [Thread-115377] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:53:21.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:53:22.007 [DEBUG] [Thread-115380] [transport.py] [_log()] starting thread (client mode): 0xa27ec490
2025-12-03T10:53:22.007 [DEBUG] [Thread-115380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:53:22.022 [DEBUG] [Thread-115380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:53:22.022 [INFO] [Thread-115380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:22.030 [DEBUG] [Thread-115380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] client lang: <none>
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] server lang: <none>
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] kex follows: False
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] Compression: none
2025-12-03T10:53:22.031 [DEBUG] [Thread-115380] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:53:22.086 [DEBUG] [Thread-115380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:53:22.086 [DEBUG] [Thread-115380] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:53:22.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:53:22.087 [DEBUG] [Thread-115380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:53:22.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:53:22.142 [DEBUG] [Thread-115380] [transport.py] [_log()] userauth is OK
2025-12-03T10:53:22.142 [DEBUG] [Thread-115380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:53:22.142 [DEBUG] [Thread-115380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:53:22.142 [DEBUG] [Thread-115380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:53:22.142 [DEBUG] [Thread-115380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:53:22.161 [INFO] [Thread-115380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:53:22.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:53:22.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:53:23.067 [DEBUG] [Thread-115380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:53:23.067 [DEBUG] [Thread-115380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:53:23.115 [DEBUG] [Thread-115380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:53:23.115 [DEBUG] [Thread-115380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:53:23.124 [DEBUG] [Thread-115380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:53:23.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:53:23.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:53:23.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:53:23.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:53:23.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:53:23.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:53:23.155 [DEBUG] [Thread-115380] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:53:33.899 [DEBUG] [Thread-115382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:41.563 [DEBUG] [Thread-115383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:48.944 [DEBUG] [Thread-115384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:49.571 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:49.572 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:53:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:53:53.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:53:53.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:53:53.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 53, 36), 12.7, 42.51, 0.0, 18.28, 16.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:53:53.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:53:36
2025-12-03T10:53:53.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:53:54.130 [DEBUG] [Thread-115385] [transport.py] [_log()] starting thread (client mode): 0xa270a560
2025-12-03T10:53:54.130 [DEBUG] [Thread-115385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:53:54.150 [DEBUG] [Thread-115385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:53:54.150 [INFO] [Thread-115385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:53:54.153 [DEBUG] [Thread-115385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] client lang: <none>
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] server lang: <none>
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] kex follows: False
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] Compression: none
2025-12-03T10:53:54.154 [DEBUG] [Thread-115385] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:53:54.172 [DEBUG] [Thread-115385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:53:54.172 [DEBUG] [Thread-115385] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:53:54.173 [DEBUG] [Thread-115385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:53:54.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:53:54.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:53:54.175 [DEBUG] [Thread-115385] [transport.py] [_log()] userauth is OK
2025-12-03T10:53:54.175 [DEBUG] [Thread-115385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:53:54.175 [DEBUG] [Thread-115385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:53:54.175 [DEBUG] [Thread-115385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:53:54.175 [DEBUG] [Thread-115385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:53:54.190 [INFO] [Thread-115385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:53:54.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:53:54.826 [DEBUG] [Thread-115385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:53:54.826 [DEBUG] [Thread-115385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:53:54.826 [DEBUG] [Thread-115385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:53:54.867 [DEBUG] [Thread-115385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:53:54.867 [DEBUG] [Thread-115385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:53:54.870 [DEBUG] [Thread-115385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:53:54.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:53:54.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:53:54.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:53:54.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:53:54.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:53:54.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:53:54.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:53:54.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:53:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:53:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.370190 -999.00  +16.50  15.36     48   +5.60 1 2 1 1 1   888    0 11.68 61.70 ----- 16.2 15.4 143.8 19.9 23.9 -22.5 23.1 -22.5 22.5 -21.9 23.2 -21.8
2025-12-03T10:53:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:53:54.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:53:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.370190
2025-12-03T10:53:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:53:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:53:54.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:53:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:53:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:53:54.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:53:36', tmtdew=12.7, humidity=42.51, cloud=0.0, wind=18.28, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:53:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:53:54.896 [DEBUG] [Thread-115385] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:53:54.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:53:55.002 [DEBUG] [Thread-115388] [transport.py] [_log()] starting thread (client mode): 0xa271f370
2025-12-03T10:53:55.002 [DEBUG] [Thread-115388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:53:55.017 [DEBUG] [Thread-115388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:53:55.017 [INFO] [Thread-115388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:53:55.024 [DEBUG] [Thread-115388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:53:55.024 [DEBUG] [Thread-115388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:53:55.024 [DEBUG] [Thread-115388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:53:55.024 [DEBUG] [Thread-115388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:55.024 [DEBUG] [Thread-115388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] client lang: <none>
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] server lang: <none>
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] kex follows: False
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] Compression: none
2025-12-03T10:53:55.025 [DEBUG] [Thread-115388] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:53:55.081 [DEBUG] [Thread-115388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:53:55.082 [DEBUG] [Thread-115388] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:53:55.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:53:55.082 [DEBUG] [Thread-115388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:53:55.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:53:55.138 [DEBUG] [Thread-115388] [transport.py] [_log()] userauth is OK
2025-12-03T10:53:55.138 [DEBUG] [Thread-115388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:53:55.138 [DEBUG] [Thread-115388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:53:55.139 [DEBUG] [Thread-115388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:53:55.139 [DEBUG] [Thread-115388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:53:55.156 [INFO] [Thread-115388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:53:55.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:53:55.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:53:56.001 [DEBUG] [Thread-115388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:53:56.001 [DEBUG] [Thread-115388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:53:56.049 [DEBUG] [Thread-115388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:53:56.049 [DEBUG] [Thread-115388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:53:56.058 [DEBUG] [Thread-115388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:53:56.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:53:56.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:53:56.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:53:56.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:53:56.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:53:56.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:53:56.089 [DEBUG] [Thread-115388] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:54:03.972 [DEBUG] [Thread-115390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:19.002 [DEBUG] [Thread-115391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:54:26.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:54:26.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:54:26.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 54, 8), 12.44, 43.34, 0.0, 18.49, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:54:26.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:54:08
2025-12-03T10:54:26.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:54:27.057 [DEBUG] [Thread-115392] [transport.py] [_log()] starting thread (client mode): 0xa27edba0
2025-12-03T10:54:27.058 [DEBUG] [Thread-115392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:54:27.078 [DEBUG] [Thread-115392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:54:27.078 [INFO] [Thread-115392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:54:27.081 [DEBUG] [Thread-115392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] client lang: <none>
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] server lang: <none>
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] kex follows: False
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] Compression: none
2025-12-03T10:54:27.082 [DEBUG] [Thread-115392] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:54:27.101 [DEBUG] [Thread-115392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:54:27.101 [DEBUG] [Thread-115392] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:54:27.102 [DEBUG] [Thread-115392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:54:27.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:54:27.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:54:27.104 [DEBUG] [Thread-115392] [transport.py] [_log()] userauth is OK
2025-12-03T10:54:27.104 [DEBUG] [Thread-115392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:54:27.104 [DEBUG] [Thread-115392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:54:27.104 [DEBUG] [Thread-115392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:54:27.104 [DEBUG] [Thread-115392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:54:27.138 [INFO] [Thread-115392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:54:27.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:54:27.936 [DEBUG] [Thread-115392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:54:27.936 [DEBUG] [Thread-115392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:54:27.937 [DEBUG] [Thread-115392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:54:27.977 [DEBUG] [Thread-115392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:54:27.977 [DEBUG] [Thread-115392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:54:27.980 [DEBUG] [Thread-115392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:54:27.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:54:27.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:54:27.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:54:27.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:54:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:54:28.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:54:28.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.370537 -999.00  +16.40  17.06     49   +5.60 1 2 1 1 1   888    0 11.84 63.29 ----- 13.9 17.1 155.8 19.1 23.9 -22.8 23.1 -22.2 22.5 -22.1 23.3 -21.2
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:54:28.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.370537
2025-12-03T10:54:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:54:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:54:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:54:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:54:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:54:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:54:08', tmtdew=12.44, humidity=43.34, cloud=0.0, wind=18.49, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:53:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:54:28.007 [DEBUG] [Thread-115392] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:54:28.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:54:28.105 [DEBUG] [Thread-115395] [transport.py] [_log()] starting thread (client mode): 0xa27ea890
2025-12-03T10:54:28.105 [DEBUG] [Thread-115395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:54:28.121 [DEBUG] [Thread-115395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:54:28.121 [INFO] [Thread-115395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:54:28.128 [DEBUG] [Thread-115395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] client lang: <none>
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] server lang: <none>
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] kex follows: False
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:54:28.129 [DEBUG] [Thread-115395] [transport.py] [_log()] Compression: none
2025-12-03T10:54:28.130 [DEBUG] [Thread-115395] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:54:28.190 [DEBUG] [Thread-115395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:54:28.190 [DEBUG] [Thread-115395] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:54:28.191 [DEBUG] [Thread-115395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:54:28.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:54:28.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:54:28.246 [DEBUG] [Thread-115395] [transport.py] [_log()] userauth is OK
2025-12-03T10:54:28.246 [DEBUG] [Thread-115395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:54:28.246 [DEBUG] [Thread-115395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:54:28.247 [DEBUG] [Thread-115395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:54:28.247 [DEBUG] [Thread-115395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:54:28.266 [INFO] [Thread-115395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:54:28.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:54:28.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:54:29.151 [DEBUG] [Thread-115395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:54:29.151 [DEBUG] [Thread-115395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:54:29.199 [DEBUG] [Thread-115395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:54:29.199 [DEBUG] [Thread-115395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:54:29.211 [DEBUG] [Thread-115395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:54:29.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:54:29.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:54:29.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:54:29.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:54:29.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:54:29.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:54:29.251 [DEBUG] [Thread-115395] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:54:34.030 [DEBUG] [Thread-115397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:41.602 [DEBUG] [Thread-115398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:49.080 [DEBUG] [Thread-115399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:49.712 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:49.713 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:54:59.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:54:59.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:54:59.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:54:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 54, 40), 12.75, 42.65, 0.0, 22.9, 17.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:54:59.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:54:40
2025-12-03T10:55:00.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:55:00.214 [DEBUG] [Thread-115400] [transport.py] [_log()] starting thread (client mode): 0xa271ece0
2025-12-03T10:55:00.214 [DEBUG] [Thread-115400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:55:00.234 [DEBUG] [Thread-115400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:55:00.234 [INFO] [Thread-115400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:00.237 [DEBUG] [Thread-115400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] client lang: <none>
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] server lang: <none>
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] kex follows: False
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] Compression: none
2025-12-03T10:55:00.238 [DEBUG] [Thread-115400] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:55:00.257 [DEBUG] [Thread-115400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:55:00.257 [DEBUG] [Thread-115400] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:55:00.257 [DEBUG] [Thread-115400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:55:00.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:55:00.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:55:00.259 [DEBUG] [Thread-115400] [transport.py] [_log()] userauth is OK
2025-12-03T10:55:00.259 [DEBUG] [Thread-115400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:55:00.259 [DEBUG] [Thread-115400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:55:00.259 [DEBUG] [Thread-115400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:55:00.260 [DEBUG] [Thread-115400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:55:00.274 [INFO] [Thread-115400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:55:00.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:55:00.881 [DEBUG] [Thread-115400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:55:00.881 [DEBUG] [Thread-115400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:55:00.882 [DEBUG] [Thread-115400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:55:00.922 [DEBUG] [Thread-115400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:55:00.922 [DEBUG] [Thread-115400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:55:00.924 [DEBUG] [Thread-115400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:55:00.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:55:00.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:55:00.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:55:00.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:55:00.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:55:00.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:55:00.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.370884 -999.00  +16.40  17.68     49   +5.70 1 2 1 1 1   888    0 11.87 66.15 ----- 14.8 17.7 141.6 26.4 24.0 -22.8 23.2 -22.4 22.6 -21.7 23.4 -21.5
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:55:00.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.370884
2025-12-03T10:55:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:55:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:55:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:55:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:55:00.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:55:00.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:54:40', tmtdew=12.75, humidity=42.65, cloud=0.0, wind=22.9, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:54:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:55:00.952 [DEBUG] [Thread-115400] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:55:01.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:55:01.058 [DEBUG] [Thread-115403] [transport.py] [_log()] starting thread (client mode): 0xa27b5090
2025-12-03T10:55:01.058 [DEBUG] [Thread-115403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:55:01.077 [DEBUG] [Thread-115403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:55:01.077 [INFO] [Thread-115403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:55:01.084 [DEBUG] [Thread-115403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:01.085 [DEBUG] [Thread-115403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] client lang: <none>
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] server lang: <none>
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] kex follows: False
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] Compression: none
2025-12-03T10:55:01.086 [DEBUG] [Thread-115403] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:55:01.142 [DEBUG] [Thread-115403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:55:01.142 [DEBUG] [Thread-115403] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:55:01.142 [DEBUG] [Thread-115403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:55:01.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:55:01.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:55:01.198 [DEBUG] [Thread-115403] [transport.py] [_log()] userauth is OK
2025-12-03T10:55:01.198 [DEBUG] [Thread-115403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:55:01.198 [DEBUG] [Thread-115403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:55:01.198 [DEBUG] [Thread-115403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:55:01.199 [DEBUG] [Thread-115403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:55:01.217 [INFO] [Thread-115403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:55:01.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:55:01.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:55:02.073 [DEBUG] [Thread-115403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:55:02.074 [DEBUG] [Thread-115403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:55:02.121 [DEBUG] [Thread-115403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:55:02.122 [DEBUG] [Thread-115403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:55:02.130 [DEBUG] [Thread-115403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:55:02.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:55:02.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:55:02.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:55:02.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:55:02.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:55:02.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:55:02.164 [DEBUG] [Thread-115403] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:55:04.114 [DEBUG] [Thread-115405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:19.161 [DEBUG] [Thread-115406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:55:32.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:55:32.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:55:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 55, 12), 12.68, 42.82, 0.0, 21.26, 16.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:55:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:55:12
2025-12-03T10:55:32.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:55:33.124 [DEBUG] [Thread-115407] [transport.py] [_log()] starting thread (client mode): 0xa27b7b80
2025-12-03T10:55:33.124 [DEBUG] [Thread-115407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:55:33.144 [DEBUG] [Thread-115407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:55:33.144 [INFO] [Thread-115407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] client lang: <none>
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] server lang: <none>
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] kex follows: False
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] Compression: none
2025-12-03T10:55:33.147 [DEBUG] [Thread-115407] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:55:33.163 [DEBUG] [Thread-115407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:55:33.164 [DEBUG] [Thread-115407] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:55:33.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:55:33.165 [DEBUG] [Thread-115407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:55:33.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:55:33.166 [DEBUG] [Thread-115407] [transport.py] [_log()] userauth is OK
2025-12-03T10:55:33.167 [DEBUG] [Thread-115407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:55:33.167 [DEBUG] [Thread-115407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:55:33.167 [DEBUG] [Thread-115407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:55:33.167 [DEBUG] [Thread-115407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:55:33.182 [INFO] [Thread-115407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:55:33.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:55:33.845 [DEBUG] [Thread-115407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:55:33.845 [DEBUG] [Thread-115407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:55:33.846 [DEBUG] [Thread-115407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:55:33.887 [DEBUG] [Thread-115407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:55:33.887 [DEBUG] [Thread-115407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:55:33.890 [DEBUG] [Thread-115407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:55:33.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:55:33.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:55:33.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:55:33.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:55:33.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:55:33.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:55:33.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:55:33.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:55:33.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:55:33.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.371231 -999.00  +16.70  15.12     48   +5.70 1 2 1 1 1   888    0 12.12 67.34 ----- 15.7 15.1 148.2 22.0 24.1 -22.9 23.3 -22.4 22.8 -21.2 23.4 -22.1
2025-12-03T10:55:33.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:55:33.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:55:33.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.371231
2025-12-03T10:55:33.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:55:33.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:55:33.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:55:33.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:55:33.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:55:33.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:55:12', tmtdew=12.68, humidity=42.82, cloud=0.0, wind=21.26, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:54:34.358', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:55:33.912 [DEBUG] [Thread-115407] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:55:33.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:55:34.011 [DEBUG] [Thread-115410] [transport.py] [_log()] starting thread (client mode): 0xa271c760
2025-12-03T10:55:34.011 [DEBUG] [Thread-115410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:55:34.026 [DEBUG] [Thread-115410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:55:34.026 [INFO] [Thread-115410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:55:34.034 [DEBUG] [Thread-115410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] client lang: <none>
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] server lang: <none>
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] kex follows: False
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:55:34.035 [DEBUG] [Thread-115410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:55:34.036 [DEBUG] [Thread-115410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:55:34.036 [DEBUG] [Thread-115410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:55:34.036 [DEBUG] [Thread-115410] [transport.py] [_log()] Compression: none
2025-12-03T10:55:34.036 [DEBUG] [Thread-115410] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:55:34.089 [DEBUG] [Thread-115410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:55:34.090 [DEBUG] [Thread-115410] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:55:34.090 [DEBUG] [Thread-115410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:55:34.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:55:34.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:55:34.146 [DEBUG] [Thread-115410] [transport.py] [_log()] userauth is OK
2025-12-03T10:55:34.146 [DEBUG] [Thread-115410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:55:34.147 [DEBUG] [Thread-115410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:55:34.147 [DEBUG] [Thread-115410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:55:34.147 [DEBUG] [Thread-115410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:55:34.165 [INFO] [Thread-115410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:55:34.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:55:34.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:55:34.189 [DEBUG] [Thread-115412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:34.988 [DEBUG] [Thread-115410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:55:34.989 [DEBUG] [Thread-115410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:55:35.036 [DEBUG] [Thread-115410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:55:35.037 [DEBUG] [Thread-115410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:55:35.045 [DEBUG] [Thread-115410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:55:35.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:55:35.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:55:35.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:55:35.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:55:35.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:55:35.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:55:35.080 [DEBUG] [Thread-115410] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:55:41.650 [DEBUG] [Thread-115413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:49.238 [DEBUG] [Thread-115414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:49.862 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:55:49.863 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:04.267 [DEBUG] [Thread-115415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:05.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:56:05.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:56:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:56:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 55, 44), 12.8, 42.27, 0.0, 20.01, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:56:05.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:55:44
2025-12-03T10:56:05.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:56:06.050 [DEBUG] [Thread-115416] [transport.py] [_log()] starting thread (client mode): 0xa270a8c0
2025-12-03T10:56:06.050 [DEBUG] [Thread-115416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:56:06.071 [DEBUG] [Thread-115416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:56:06.071 [INFO] [Thread-115416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:06.074 [DEBUG] [Thread-115416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] client lang: <none>
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] server lang: <none>
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] kex follows: False
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] Compression: none
2025-12-03T10:56:06.075 [DEBUG] [Thread-115416] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:56:06.094 [DEBUG] [Thread-115416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:56:06.094 [DEBUG] [Thread-115416] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:56:06.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:56:06.096 [DEBUG] [Thread-115416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:56:06.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:56:06.098 [DEBUG] [Thread-115416] [transport.py] [_log()] userauth is OK
2025-12-03T10:56:06.098 [DEBUG] [Thread-115416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:56:06.098 [DEBUG] [Thread-115416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:56:06.099 [DEBUG] [Thread-115416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:56:06.099 [DEBUG] [Thread-115416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:56:06.121 [INFO] [Thread-115416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:56:06.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:56:06.741 [DEBUG] [Thread-115416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:56:06.741 [DEBUG] [Thread-115416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:56:06.741 [DEBUG] [Thread-115416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:56:06.782 [DEBUG] [Thread-115416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:56:06.782 [DEBUG] [Thread-115416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:56:06.784 [DEBUG] [Thread-115416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:56:06.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:56:06.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:56:06.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:56:06.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:56:06.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:56:06.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:56:06.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:56:06.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.371926 -999.00  +17.00  16.63     47   +5.70 1 2 1 1 1   888    0 12.08 73.99 ----- 16.2 16.6 153.8 23.4 24.3 -23.1 23.4 -22.1 22.9 -20.8 23.6 -21.8
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.371926
2025-12-03T10:56:06.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:56:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:56:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:56:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:56:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:56:06.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:55:44', tmtdew=12.8, humidity=42.27, cloud=0.0, wind=20.01, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:55:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:56:06.810 [DEBUG] [Thread-115416] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:56:06.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:56:06.907 [DEBUG] [Thread-115419] [transport.py] [_log()] starting thread (client mode): 0xa27eb700
2025-12-03T10:56:06.907 [DEBUG] [Thread-115419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:56:06.922 [DEBUG] [Thread-115419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:56:06.922 [INFO] [Thread-115419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:56:06.929 [DEBUG] [Thread-115419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] client lang: <none>
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] server lang: <none>
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] kex follows: False
2025-12-03T10:56:06.931 [DEBUG] [Thread-115419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] Compression: none
2025-12-03T10:56:06.932 [DEBUG] [Thread-115419] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:56:06.990 [DEBUG] [Thread-115419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:56:06.990 [DEBUG] [Thread-115419] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:56:06.991 [DEBUG] [Thread-115419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:56:06.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:56:06.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:56:07.046 [DEBUG] [Thread-115419] [transport.py] [_log()] userauth is OK
2025-12-03T10:56:07.046 [DEBUG] [Thread-115419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:56:07.046 [DEBUG] [Thread-115419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:56:07.047 [DEBUG] [Thread-115419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:56:07.047 [DEBUG] [Thread-115419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:56:07.066 [INFO] [Thread-115419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:56:07.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:56:07.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:56:07.886 [DEBUG] [Thread-115419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:56:07.887 [DEBUG] [Thread-115419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:56:07.934 [DEBUG] [Thread-115419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:56:07.934 [DEBUG] [Thread-115419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:56:07.943 [DEBUG] [Thread-115419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:56:07.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:56:07.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:56:07.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:56:07.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:56:07.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:56:07.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:56:07.977 [DEBUG] [Thread-115419] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:56:19.298 [DEBUG] [Thread-115421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:34.341 [DEBUG] [Thread-115422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:56:37.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:56:37.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:56:38.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 56, 16), 12.79, 42.29, 0.0, 22.44, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:56:38.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:56:16
2025-12-03T10:56:38.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:56:38.986 [DEBUG] [Thread-115423] [transport.py] [_log()] starting thread (client mode): 0xa27e8760
2025-12-03T10:56:38.986 [DEBUG] [Thread-115423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:56:39.006 [DEBUG] [Thread-115423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:56:39.006 [INFO] [Thread-115423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] client lang: <none>
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] server lang: <none>
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] kex follows: False
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] Compression: none
2025-12-03T10:56:39.010 [DEBUG] [Thread-115423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:56:39.025 [DEBUG] [Thread-115423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:56:39.026 [DEBUG] [Thread-115423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:56:39.026 [DEBUG] [Thread-115423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:56:39.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:56:39.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:56:39.027 [DEBUG] [Thread-115423] [transport.py] [_log()] userauth is OK
2025-12-03T10:56:39.027 [DEBUG] [Thread-115423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:56:39.027 [DEBUG] [Thread-115423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:56:39.027 [DEBUG] [Thread-115423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:56:39.027 [DEBUG] [Thread-115423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:56:39.044 [INFO] [Thread-115423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:56:39.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:56:39.678 [DEBUG] [Thread-115423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:56:39.678 [DEBUG] [Thread-115423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:56:39.678 [DEBUG] [Thread-115423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:56:39.720 [DEBUG] [Thread-115423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:56:39.720 [DEBUG] [Thread-115423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:56:39.722 [DEBUG] [Thread-115423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:56:39.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:56:39.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:56:39.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:56:39.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:56:39.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:56:39.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:56:39.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.372273 -999.00  +17.20  17.96     48   +6.10 1 2 1 1 1   888    0 12.87 83.61 ----- 15.7 18.0 137.8 23.0 24.4 -22.2 23.5 -21.9 22.9 -21.4 23.8 -21.0
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.372273
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:56:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:56:16', tmtdew=12.79, humidity=42.29, cloud=0.0, wind=22.44, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:56:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:56:39.743 [DEBUG] [Thread-115423] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:56:39.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:56:39.829 [DEBUG] [Thread-115426] [transport.py] [_log()] starting thread (client mode): 0xa27ed960
2025-12-03T10:56:39.829 [DEBUG] [Thread-115426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:56:39.843 [DEBUG] [Thread-115426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:56:39.843 [INFO] [Thread-115426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] client lang: <none>
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] server lang: <none>
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] kex follows: False
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] Compression: none
2025-12-03T10:56:39.851 [DEBUG] [Thread-115426] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:56:39.909 [DEBUG] [Thread-115426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:56:39.909 [DEBUG] [Thread-115426] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:56:39.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:56:39.909 [DEBUG] [Thread-115426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:56:39.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:56:39.967 [DEBUG] [Thread-115426] [transport.py] [_log()] userauth is OK
2025-12-03T10:56:39.967 [DEBUG] [Thread-115426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:56:39.967 [DEBUG] [Thread-115426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:56:39.967 [DEBUG] [Thread-115426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:56:39.967 [DEBUG] [Thread-115426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:56:39.985 [INFO] [Thread-115426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:56:39.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:56:39.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:56:40.842 [DEBUG] [Thread-115426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:56:40.842 [DEBUG] [Thread-115426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:56:40.891 [DEBUG] [Thread-115426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:56:40.891 [DEBUG] [Thread-115426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:56:40.899 [DEBUG] [Thread-115426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:56:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:56:40.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:56:40.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:56:40.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:56:40.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:56:40.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:56:40.931 [DEBUG] [Thread-115426] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:56:41.681 [DEBUG] [Thread-115428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:49.367 [DEBUG] [Thread-115429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:50.001 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:56:50.001 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:04.405 [DEBUG] [Thread-115430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:57:10.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:57:10.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:57:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 56, 48), 12.46, 43.51, 0.0, 19.11, 16.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:57:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:56:48
2025-12-03T10:57:11.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:57:11.896 [DEBUG] [Thread-115431] [transport.py] [_log()] starting thread (client mode): 0xa27e8070
2025-12-03T10:57:11.896 [DEBUG] [Thread-115431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:57:11.914 [DEBUG] [Thread-115431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:57:11.914 [INFO] [Thread-115431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] client lang: <none>
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] server lang: <none>
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] kex follows: False
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] Compression: none
2025-12-03T10:57:11.917 [DEBUG] [Thread-115431] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:57:11.932 [DEBUG] [Thread-115431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:57:11.933 [DEBUG] [Thread-115431] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:57:11.933 [DEBUG] [Thread-115431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:57:11.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:57:11.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:57:11.934 [DEBUG] [Thread-115431] [transport.py] [_log()] userauth is OK
2025-12-03T10:57:11.934 [DEBUG] [Thread-115431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:57:11.934 [DEBUG] [Thread-115431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:57:11.934 [DEBUG] [Thread-115431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:57:11.934 [DEBUG] [Thread-115431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:57:11.948 [INFO] [Thread-115431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:57:11.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:57:12.565 [DEBUG] [Thread-115431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:57:12.566 [DEBUG] [Thread-115431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:57:12.566 [DEBUG] [Thread-115431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:57:12.606 [DEBUG] [Thread-115431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:57:12.607 [DEBUG] [Thread-115431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:57:12.608 [DEBUG] [Thread-115431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:57:12.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:57:12.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:57:12.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:57:12.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:57:12.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:57:12.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:57:12.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.372620 -999.00  +17.40  19.97     47   +6.00 1 2 1 1 1   888    0 13.10 88.89 ----- 23.8 20.0 129.6 23.2 24.6 -21.1 23.7 -22.4 23.1 -20.3 23.9 -22.0
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:57:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.372620
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:57:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:56:48', tmtdew=12.46, humidity=43.51, cloud=0.0, wind=19.11, temperature=16.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:56:34.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:57:12.627 [DEBUG] [Thread-115431] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:57:12.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:57:12.709 [DEBUG] [Thread-115434] [transport.py] [_log()] starting thread (client mode): 0xa27c1660
2025-12-03T10:57:12.710 [DEBUG] [Thread-115434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:57:12.724 [DEBUG] [Thread-115434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:57:12.724 [INFO] [Thread-115434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] client lang: <none>
2025-12-03T10:57:12.731 [DEBUG] [Thread-115434] [transport.py] [_log()] server lang: <none>
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] kex follows: False
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] Compression: none
2025-12-03T10:57:12.732 [DEBUG] [Thread-115434] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:57:12.789 [DEBUG] [Thread-115434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:57:12.789 [DEBUG] [Thread-115434] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:57:12.789 [DEBUG] [Thread-115434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:57:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:57:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:57:12.846 [DEBUG] [Thread-115434] [transport.py] [_log()] userauth is OK
2025-12-03T10:57:12.846 [DEBUG] [Thread-115434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:57:12.846 [DEBUG] [Thread-115434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:57:12.846 [DEBUG] [Thread-115434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:57:12.846 [DEBUG] [Thread-115434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:57:12.860 [INFO] [Thread-115434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:57:12.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:57:12.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:57:13.687 [DEBUG] [Thread-115434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:57:13.688 [DEBUG] [Thread-115434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:57:13.737 [DEBUG] [Thread-115434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:57:13.737 [DEBUG] [Thread-115434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:57:13.749 [DEBUG] [Thread-115434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:57:13.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:57:13.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:57:13.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:57:13.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:57:13.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:57:13.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:57:13.798 [DEBUG] [Thread-115434] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:57:19.428 [DEBUG] [Thread-115436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:34.462 [DEBUG] [Thread-115437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:41.727 [DEBUG] [Thread-115438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:43.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:57:43.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:57:43.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:57:44.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 57, 21), 12.36, 43.87, 0.0, 21.47, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:57:44.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:57:21
2025-12-03T10:57:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:57:44.745 [DEBUG] [Thread-115439] [transport.py] [_log()] starting thread (client mode): 0xa2725e40
2025-12-03T10:57:44.745 [DEBUG] [Thread-115439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:57:44.765 [DEBUG] [Thread-115439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:57:44.766 [INFO] [Thread-115439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] client lang: <none>
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] server lang: <none>
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] kex follows: False
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:57:44.769 [DEBUG] [Thread-115439] [transport.py] [_log()] Compression: none
2025-12-03T10:57:44.770 [DEBUG] [Thread-115439] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:57:44.786 [DEBUG] [Thread-115439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:57:44.786 [DEBUG] [Thread-115439] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:57:44.787 [DEBUG] [Thread-115439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:57:44.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:57:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:57:44.789 [DEBUG] [Thread-115439] [transport.py] [_log()] userauth is OK
2025-12-03T10:57:44.789 [DEBUG] [Thread-115439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:57:44.789 [DEBUG] [Thread-115439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:57:44.789 [DEBUG] [Thread-115439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:57:44.789 [DEBUG] [Thread-115439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:57:44.810 [INFO] [Thread-115439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:57:44.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:57:45.434 [DEBUG] [Thread-115439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:57:45.434 [DEBUG] [Thread-115439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:57:45.434 [DEBUG] [Thread-115439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:57:45.474 [DEBUG] [Thread-115439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:57:45.474 [DEBUG] [Thread-115439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:57:45.476 [DEBUG] [Thread-115439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:57:45.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:57:45.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:57:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:57:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:57:45.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:57:45.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:57:45.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.372967 -999.00  +16.90  24.07     48   +5.80 1 2 1 1 1   888    0 13.01 90.03 ----- 20.8 24.1 126.4 27.4 24.3 -27.3 23.9 -22.5 23.1 -21.4 23.9 -21.6
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.372967
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:57:45.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:57:21', tmtdew=12.36, humidity=43.87, cloud=0.0, wind=21.47, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:57:04.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:57:45.495 [DEBUG] [Thread-115439] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:57:45.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:57:45.579 [DEBUG] [Thread-115442] [transport.py] [_log()] starting thread (client mode): 0xa2724310
2025-12-03T10:57:45.579 [DEBUG] [Thread-115442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:57:45.595 [DEBUG] [Thread-115442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:57:45.595 [INFO] [Thread-115442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:57:45.602 [DEBUG] [Thread-115442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] client lang: <none>
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] server lang: <none>
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] kex follows: False
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] Compression: none
2025-12-03T10:57:45.603 [DEBUG] [Thread-115442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:57:45.661 [DEBUG] [Thread-115442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:57:45.661 [DEBUG] [Thread-115442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:57:45.661 [DEBUG] [Thread-115442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:57:45.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:57:45.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:57:45.718 [DEBUG] [Thread-115442] [transport.py] [_log()] userauth is OK
2025-12-03T10:57:45.718 [DEBUG] [Thread-115442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:57:45.718 [DEBUG] [Thread-115442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:57:45.718 [DEBUG] [Thread-115442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:57:45.718 [DEBUG] [Thread-115442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:57:45.732 [INFO] [Thread-115442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:57:45.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:57:45.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:57:46.562 [DEBUG] [Thread-115442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:57:46.562 [DEBUG] [Thread-115442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:57:46.610 [DEBUG] [Thread-115442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:57:46.610 [DEBUG] [Thread-115442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:57:46.619 [DEBUG] [Thread-115442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:57:46.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:57:46.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:57:46.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:57:46.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:57:46.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:57:46.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:57:46.653 [DEBUG] [Thread-115442] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:57:49.491 [DEBUG] [Thread-115444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:50.140 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:57:50.141 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:04.538 [DEBUG] [Thread-115445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:58:16.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:58:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:58:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 57, 53), 12.43, 43.84, 0.0, 26.66, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:58:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:57:53
2025-12-03T10:58:17.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:58:17.602 [DEBUG] [Thread-115446] [transport.py] [_log()] starting thread (client mode): 0xa271c490
2025-12-03T10:58:17.602 [DEBUG] [Thread-115446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:58:17.624 [DEBUG] [Thread-115446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:58:17.624 [INFO] [Thread-115446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:58:17.627 [DEBUG] [Thread-115446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:58:17.627 [DEBUG] [Thread-115446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:58:17.627 [DEBUG] [Thread-115446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] client lang: <none>
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] server lang: <none>
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] kex follows: False
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:58:17.628 [DEBUG] [Thread-115446] [transport.py] [_log()] Compression: none
2025-12-03T10:58:17.629 [DEBUG] [Thread-115446] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:58:17.645 [DEBUG] [Thread-115446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:58:17.646 [DEBUG] [Thread-115446] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:58:17.646 [DEBUG] [Thread-115446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:58:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:58:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:58:17.648 [DEBUG] [Thread-115446] [transport.py] [_log()] userauth is OK
2025-12-03T10:58:17.649 [DEBUG] [Thread-115446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:58:17.649 [DEBUG] [Thread-115446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:58:17.649 [DEBUG] [Thread-115446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:58:17.649 [DEBUG] [Thread-115446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:58:17.674 [INFO] [Thread-115446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:58:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:58:18.295 [DEBUG] [Thread-115446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:58:18.295 [DEBUG] [Thread-115446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:58:18.295 [DEBUG] [Thread-115446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:58:18.336 [DEBUG] [Thread-115446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:58:18.336 [DEBUG] [Thread-115446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:58:18.338 [DEBUG] [Thread-115446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:58:18.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:58:18.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:58:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:58:18.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:58:18.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:58:18.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:58:18.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:58:18.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.373315 -999.00  +16.80  18.71     48   +5.80 1 2 1 1 1   888    0 12.87 88.83 ----- 18.3 18.7 129.4 25.1 24.6 -22.6 24.0 -22.5 23.4 -20.0 24.0 -22.2
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.373315
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:58:18.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:57:53', tmtdew=12.43, humidity=43.84, cloud=0.0, wind=26.66, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:57:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:58:18.360 [DEBUG] [Thread-115446] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:58:18.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:58:18.443 [DEBUG] [Thread-115449] [transport.py] [_log()] starting thread (client mode): 0xa2786530
2025-12-03T10:58:18.443 [DEBUG] [Thread-115449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:58:18.457 [DEBUG] [Thread-115449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:58:18.458 [INFO] [Thread-115449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] client lang: <none>
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] server lang: <none>
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] kex follows: False
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:58:18.465 [DEBUG] [Thread-115449] [transport.py] [_log()] Compression: none
2025-12-03T10:58:18.466 [DEBUG] [Thread-115449] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:58:18.521 [DEBUG] [Thread-115449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:58:18.521 [DEBUG] [Thread-115449] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:58:18.521 [DEBUG] [Thread-115449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:58:18.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:58:18.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:58:18.578 [DEBUG] [Thread-115449] [transport.py] [_log()] userauth is OK
2025-12-03T10:58:18.579 [DEBUG] [Thread-115449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:58:18.579 [DEBUG] [Thread-115449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:58:18.579 [DEBUG] [Thread-115449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:58:18.579 [DEBUG] [Thread-115449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:58:18.593 [INFO] [Thread-115449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:58:18.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:58:18.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:58:19.398 [DEBUG] [Thread-115449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:58:19.398 [DEBUG] [Thread-115449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:58:19.447 [DEBUG] [Thread-115449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:58:19.447 [DEBUG] [Thread-115449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:58:19.455 [DEBUG] [Thread-115449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:58:19.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:58:19.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:58:19.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:58:19.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:58:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:58:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:58:19.489 [DEBUG] [Thread-115449] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:58:19.569 [DEBUG] [Thread-115451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:34.615 [DEBUG] [Thread-115452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:41.784 [DEBUG] [Thread-115453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:58:49.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:58:49.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:58:49.641 [DEBUG] [Thread-115454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 58, 25), 12.68, 43.09, 0.0, 23.91, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:58:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:58:25
2025-12-03T10:58:50.280 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:50.281 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:58:50.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:58:50.451 [DEBUG] [Thread-115455] [transport.py] [_log()] starting thread (client mode): 0xa271e920
2025-12-03T10:58:50.451 [DEBUG] [Thread-115455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:58:50.469 [DEBUG] [Thread-115455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:58:50.469 [INFO] [Thread-115455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] client lang: <none>
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] server lang: <none>
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] kex follows: False
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:58:50.471 [DEBUG] [Thread-115455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:58:50.472 [DEBUG] [Thread-115455] [transport.py] [_log()] Compression: none
2025-12-03T10:58:50.472 [DEBUG] [Thread-115455] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:58:50.480 [DEBUG] [Thread-115455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:58:50.480 [DEBUG] [Thread-115455] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:58:50.480 [DEBUG] [Thread-115455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:58:50.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:58:50.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:58:50.482 [DEBUG] [Thread-115455] [transport.py] [_log()] userauth is OK
2025-12-03T10:58:50.482 [DEBUG] [Thread-115455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:58:50.482 [DEBUG] [Thread-115455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:58:50.482 [DEBUG] [Thread-115455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:58:50.482 [DEBUG] [Thread-115455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:58:50.500 [INFO] [Thread-115455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:58:50.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:58:51.151 [DEBUG] [Thread-115455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:58:51.151 [DEBUG] [Thread-115455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:58:51.151 [DEBUG] [Thread-115455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:58:51.192 [DEBUG] [Thread-115455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:58:51.192 [DEBUG] [Thread-115455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:58:51.194 [DEBUG] [Thread-115455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:58:51.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:58:51.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:58:51.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:58:51.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:58:51.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:58:51.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:58:51.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.373662 -999.00  +16.80  14.67     48   +6.00 1 2 1 1 1   888    0 13.01 91.61 ----- 18.2 14.7 125.8 27.1 24.6 -23.0 24.1 -23.3 23.5 -21.4 24.1 -22.3
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.373662
2025-12-03T10:58:51.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:58:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:58:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:58:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:58:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T10:58:51.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:58:25', tmtdew=12.68, humidity=43.09, cloud=0.0, wind=23.91, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:58:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:58:51.214 [DEBUG] [Thread-115455] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:58:51.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:58:51.295 [DEBUG] [Thread-115458] [transport.py] [_log()] starting thread (client mode): 0xa2726410
2025-12-03T10:58:51.295 [DEBUG] [Thread-115458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:58:51.311 [DEBUG] [Thread-115458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:58:51.311 [INFO] [Thread-115458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] client lang: <none>
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] server lang: <none>
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] kex follows: False
2025-12-03T10:58:51.318 [DEBUG] [Thread-115458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] Compression: none
2025-12-03T10:58:51.319 [DEBUG] [Thread-115458] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:58:51.377 [DEBUG] [Thread-115458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:58:51.377 [DEBUG] [Thread-115458] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:58:51.377 [DEBUG] [Thread-115458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:58:51.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:58:51.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:58:51.434 [DEBUG] [Thread-115458] [transport.py] [_log()] userauth is OK
2025-12-03T10:58:51.434 [DEBUG] [Thread-115458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:58:51.434 [DEBUG] [Thread-115458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:58:51.434 [DEBUG] [Thread-115458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:58:51.434 [DEBUG] [Thread-115458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:58:51.454 [INFO] [Thread-115458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:58:51.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:58:51.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:58:52.335 [DEBUG] [Thread-115458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:58:52.335 [DEBUG] [Thread-115458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:58:52.383 [DEBUG] [Thread-115458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:58:52.383 [DEBUG] [Thread-115458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:58:52.392 [DEBUG] [Thread-115458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:58:52.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:58:52.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:58:52.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:58:52.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:58:52.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:58:52.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:58:52.428 [DEBUG] [Thread-115458] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:59:04.667 [DEBUG] [Thread-115460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:19.718 [DEBUG] [Thread-115461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:59:22.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:59:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:59:23.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 58, 57), 12.55, 43.02, 0.0, 19.62, 16.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:59:23.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:58:57
2025-12-03T10:59:23.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:59:23.395 [DEBUG] [Thread-115462] [transport.py] [_log()] starting thread (client mode): 0xa27c3700
2025-12-03T10:59:23.395 [DEBUG] [Thread-115462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:59:23.415 [DEBUG] [Thread-115462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:59:23.415 [INFO] [Thread-115462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:59:23.418 [DEBUG] [Thread-115462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:59:23.418 [DEBUG] [Thread-115462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:59:23.418 [DEBUG] [Thread-115462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:59:23.418 [DEBUG] [Thread-115462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] client lang: <none>
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] server lang: <none>
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] kex follows: False
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] Compression: none
2025-12-03T10:59:23.419 [DEBUG] [Thread-115462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:59:23.435 [DEBUG] [Thread-115462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:59:23.435 [DEBUG] [Thread-115462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:59:23.436 [DEBUG] [Thread-115462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:59:23.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:59:23.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:59:23.437 [DEBUG] [Thread-115462] [transport.py] [_log()] userauth is OK
2025-12-03T10:59:23.438 [DEBUG] [Thread-115462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:59:23.438 [DEBUG] [Thread-115462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:59:23.438 [DEBUG] [Thread-115462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:59:23.438 [DEBUG] [Thread-115462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:59:23.455 [INFO] [Thread-115462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:59:23.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:59:24.090 [DEBUG] [Thread-115462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:59:24.090 [DEBUG] [Thread-115462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:59:24.091 [DEBUG] [Thread-115462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:59:24.132 [DEBUG] [Thread-115462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:59:24.132 [DEBUG] [Thread-115462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:59:24.134 [DEBUG] [Thread-115462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:59:24.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:59:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:59:24.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:59:24.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:59:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:59:24.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:59:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:59:24.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.374009 -999.00  +16.60  17.83     49   +5.90 1 1 1 1 1   888    0 13.22 93.17 ----- 18.5 17.8 116.0 22.8 24.6 -24.5 24.0 -24.4 23.5 -22.0 24.0 -23.7
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.374009
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:59:24.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:58:57', tmtdew=12.55, humidity=43.02, cloud=0.0, wind=19.62, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:58:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:59:24.156 [DEBUG] [Thread-115462] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:59:24.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:59:24.237 [DEBUG] [Thread-115465] [transport.py] [_log()] starting thread (client mode): 0xa27ed630
2025-12-03T10:59:24.237 [DEBUG] [Thread-115465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:59:24.251 [DEBUG] [Thread-115465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:59:24.251 [INFO] [Thread-115465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] client lang: <none>
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] server lang: <none>
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] kex follows: False
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:59:24.259 [DEBUG] [Thread-115465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:59:24.260 [DEBUG] [Thread-115465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:59:24.260 [DEBUG] [Thread-115465] [transport.py] [_log()] Compression: none
2025-12-03T10:59:24.260 [DEBUG] [Thread-115465] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:59:24.318 [DEBUG] [Thread-115465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:59:24.319 [DEBUG] [Thread-115465] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:59:24.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:59:24.320 [DEBUG] [Thread-115465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:59:24.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:59:24.376 [DEBUG] [Thread-115465] [transport.py] [_log()] userauth is OK
2025-12-03T10:59:24.376 [DEBUG] [Thread-115465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:59:24.376 [DEBUG] [Thread-115465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:59:24.376 [DEBUG] [Thread-115465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:59:24.376 [DEBUG] [Thread-115465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:59:24.395 [INFO] [Thread-115465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:59:24.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:59:24.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:59:25.279 [DEBUG] [Thread-115465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:59:25.279 [DEBUG] [Thread-115465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:59:25.326 [DEBUG] [Thread-115465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:59:25.327 [DEBUG] [Thread-115465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:59:25.335 [DEBUG] [Thread-115465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:59:25.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:59:25.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:59:25.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:59:25.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:59:25.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:59:25.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:59:25.370 [DEBUG] [Thread-115465] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:59:34.752 [DEBUG] [Thread-115467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:41.857 [DEBUG] [Thread-115468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:49.794 [DEBUG] [Thread-115469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:50.420 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:50.421 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T10:59:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T10:59:55.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T10:59:55.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T10:59:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 10, 59, 29), 12.48, 43.21, 0.0, 17.03, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T10:59:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 10:59:29
2025-12-03T10:59:56.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T10:59:56.330 [DEBUG] [Thread-115470] [transport.py] [_log()] starting thread (client mode): 0xa51ce7a0
2025-12-03T10:59:56.331 [DEBUG] [Thread-115470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:59:56.351 [DEBUG] [Thread-115470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T10:59:56.351 [INFO] [Thread-115470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T10:59:56.354 [DEBUG] [Thread-115470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:59:56.354 [DEBUG] [Thread-115470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T10:59:56.354 [DEBUG] [Thread-115470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] client lang: <none>
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] server lang: <none>
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] kex follows: False
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:59:56.355 [DEBUG] [Thread-115470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:59:56.356 [DEBUG] [Thread-115470] [transport.py] [_log()] Compression: none
2025-12-03T10:59:56.356 [DEBUG] [Thread-115470] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:59:56.371 [DEBUG] [Thread-115470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:59:56.372 [DEBUG] [Thread-115470] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:59:56.372 [DEBUG] [Thread-115470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T10:59:56.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T10:59:56.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:59:56.374 [DEBUG] [Thread-115470] [transport.py] [_log()] userauth is OK
2025-12-03T10:59:56.374 [DEBUG] [Thread-115470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:59:56.374 [DEBUG] [Thread-115470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:59:56.374 [DEBUG] [Thread-115470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T10:59:56.374 [DEBUG] [Thread-115470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:59:56.394 [INFO] [Thread-115470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:59:56.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:59:57.031 [DEBUG] [Thread-115470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:59:57.032 [DEBUG] [Thread-115470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:59:57.032 [DEBUG] [Thread-115470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T10:59:57.073 [DEBUG] [Thread-115470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:59:57.073 [DEBUG] [Thread-115470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:59:57.076 [DEBUG] [Thread-115470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:59:57.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:59:57.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T10:59:57.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T10:59:57.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T10:59:57.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:59:57.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T10:59:57.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.374356 -999.00  +16.40  16.87     49   +6.00 1 1 1 1 1   888    0 13.03 94.28 ----- 15.4 16.9 126.0 26.0 24.1 -25.1 23.9 -24.4 23.3 -24.2 23.9 -23.3
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T10:59:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.374356
2025-12-03T10:59:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T10:59:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T10:59:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T10:59:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T10:59:57.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T10:59:57.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T10:59:29', tmtdew=12.48, humidity=43.21, cloud=0.0, wind=17.03, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T08:59:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T10:59:57.103 [DEBUG] [Thread-115470] [transport.py] [_log()] EOF in transport thread
2025-12-03T10:59:57.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T10:59:57.197 [DEBUG] [Thread-115473] [transport.py] [_log()] starting thread (client mode): 0xa51cf370
2025-12-03T10:59:57.197 [DEBUG] [Thread-115473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T10:59:57.212 [DEBUG] [Thread-115473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T10:59:57.212 [INFO] [Thread-115473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T10:59:57.219 [DEBUG] [Thread-115473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T10:59:57.219 [DEBUG] [Thread-115473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] client lang: <none>
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] server lang: <none>
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] kex follows: False
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T10:59:57.220 [DEBUG] [Thread-115473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T10:59:57.221 [DEBUG] [Thread-115473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T10:59:57.221 [DEBUG] [Thread-115473] [transport.py] [_log()] Compression: none
2025-12-03T10:59:57.221 [DEBUG] [Thread-115473] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T10:59:57.277 [DEBUG] [Thread-115473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T10:59:57.278 [DEBUG] [Thread-115473] [transport.py] [_log()] Switch to new keys ...
2025-12-03T10:59:57.278 [DEBUG] [Thread-115473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T10:59:57.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T10:59:57.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T10:59:57.335 [DEBUG] [Thread-115473] [transport.py] [_log()] userauth is OK
2025-12-03T10:59:57.335 [DEBUG] [Thread-115473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T10:59:57.335 [DEBUG] [Thread-115473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T10:59:57.335 [DEBUG] [Thread-115473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T10:59:57.335 [DEBUG] [Thread-115473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T10:59:57.354 [INFO] [Thread-115473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T10:59:57.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T10:59:57.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T10:59:58.201 [DEBUG] [Thread-115473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T10:59:58.201 [DEBUG] [Thread-115473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T10:59:58.249 [DEBUG] [Thread-115473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T10:59:58.249 [DEBUG] [Thread-115473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T10:59:58.258 [DEBUG] [Thread-115473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T10:59:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T10:59:58.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T10:59:58.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T10:59:58.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T10:59:58.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T10:59:58.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T10:59:58.293 [DEBUG] [Thread-115473] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:00:04.821 [DEBUG] [Thread-115475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:19.866 [DEBUG] [Thread-115476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:28.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:00:28.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:00:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:00:29.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 0, 1), 12.44, 43.34, 0.0, 20.61, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:00:29.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:00:01
2025-12-03T11:00:29.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:00:29.307 [DEBUG] [Thread-115477] [transport.py] [_log()] starting thread (client mode): 0xa27e9870
2025-12-03T11:00:29.307 [DEBUG] [Thread-115477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:00:29.327 [DEBUG] [Thread-115477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:00:29.327 [INFO] [Thread-115477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] client lang: <none>
2025-12-03T11:00:29.330 [DEBUG] [Thread-115477] [transport.py] [_log()] server lang: <none>
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] kex follows: False
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] Compression: none
2025-12-03T11:00:29.331 [DEBUG] [Thread-115477] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:00:29.348 [DEBUG] [Thread-115477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:00:29.348 [DEBUG] [Thread-115477] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:00:29.348 [DEBUG] [Thread-115477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:00:29.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:00:29.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:00:29.349 [DEBUG] [Thread-115477] [transport.py] [_log()] userauth is OK
2025-12-03T11:00:29.349 [DEBUG] [Thread-115477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:00:29.349 [DEBUG] [Thread-115477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:00:29.350 [DEBUG] [Thread-115477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:00:29.350 [DEBUG] [Thread-115477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:00:29.361 [INFO] [Thread-115477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:00:29.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:00:29.991 [DEBUG] [Thread-115477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:00:29.991 [DEBUG] [Thread-115477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:00:29.991 [DEBUG] [Thread-115477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:00:30.032 [DEBUG] [Thread-115477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:00:30.032 [DEBUG] [Thread-115477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:00:30.034 [DEBUG] [Thread-115477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:00:30.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:00:30.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:00:30.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:00:30.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:00:30.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:00:30.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:00:30.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.375051 -999.00  +16.90  16.93     49   +6.10 1 2 1 1 1   888    0 13.25 96.29 ----- 18.4 16.9 136.0 22.4 24.4 -23.4 24.0 -23.7 23.4 -21.6 24.0 -22.3
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.375051
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:00:30.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:00:01', tmtdew=12.44, humidity=43.34, cloud=0.0, wind=20.61, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:00:04.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:00:30.053 [DEBUG] [Thread-115477] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:00:30.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:00:30.145 [DEBUG] [Thread-115480] [transport.py] [_log()] starting thread (client mode): 0xa27c01c0
2025-12-03T11:00:30.145 [DEBUG] [Thread-115480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:00:30.160 [DEBUG] [Thread-115480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:00:30.160 [INFO] [Thread-115480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] client lang: <none>
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] server lang: <none>
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] kex follows: False
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] Compression: none
2025-12-03T11:00:30.168 [DEBUG] [Thread-115480] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:00:30.225 [DEBUG] [Thread-115480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:00:30.225 [DEBUG] [Thread-115480] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:00:30.226 [DEBUG] [Thread-115480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:00:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:00:30.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:00:30.283 [DEBUG] [Thread-115480] [transport.py] [_log()] userauth is OK
2025-12-03T11:00:30.283 [DEBUG] [Thread-115480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:00:30.283 [DEBUG] [Thread-115480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:00:30.283 [DEBUG] [Thread-115480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:00:30.283 [DEBUG] [Thread-115480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:00:30.303 [INFO] [Thread-115480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:00:30.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:00:30.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:00:31.163 [DEBUG] [Thread-115480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:00:31.163 [DEBUG] [Thread-115480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:00:31.211 [DEBUG] [Thread-115480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:00:31.211 [DEBUG] [Thread-115480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:00:31.219 [DEBUG] [Thread-115480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:00:31.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:00:31.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:00:31.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:00:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:00:31.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:00:31.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:00:31.255 [DEBUG] [Thread-115480] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:00:34.890 [DEBUG] [Thread-115482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:41.893 [DEBUG] [Thread-115483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:49.929 [DEBUG] [Thread-115484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:50.559 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:00:50.560 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:01.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:01:01.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:01:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:01:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 0, 33), 12.55, 43.21, 0.0, 14.08, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:01:01.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:00:33
2025-12-03T11:01:02.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:01:02.206 [DEBUG] [Thread-115485] [transport.py] [_log()] starting thread (client mode): 0xa27e9690
2025-12-03T11:01:02.206 [DEBUG] [Thread-115485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:01:02.226 [DEBUG] [Thread-115485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:01:02.226 [INFO] [Thread-115485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] client lang: <none>
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] server lang: <none>
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] kex follows: False
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] Compression: none
2025-12-03T11:01:02.229 [DEBUG] [Thread-115485] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:01:02.245 [DEBUG] [Thread-115485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:01:02.245 [DEBUG] [Thread-115485] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:01:02.245 [DEBUG] [Thread-115485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:01:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:01:02.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:01:02.246 [DEBUG] [Thread-115485] [transport.py] [_log()] userauth is OK
2025-12-03T11:01:02.246 [DEBUG] [Thread-115485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:01:02.246 [DEBUG] [Thread-115485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:01:02.246 [DEBUG] [Thread-115485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:01:02.246 [DEBUG] [Thread-115485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:01:02.256 [INFO] [Thread-115485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:01:02.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:01:02.884 [DEBUG] [Thread-115485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:01:02.884 [DEBUG] [Thread-115485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:01:02.885 [DEBUG] [Thread-115485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:01:02.925 [DEBUG] [Thread-115485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:01:02.925 [DEBUG] [Thread-115485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:01:02.928 [DEBUG] [Thread-115485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:01:02.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:01:02.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:01:02.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:01:02.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:01:02.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:01:02.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:01:02.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:01:02.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.375398 -999.00  +16.70  18.14     48   +5.90 1 1 1 1 1   888    0 13.68 106.09 ----- 13.7 18.1 132.6 20.6 24.3 -25.0 23.8 -24.7 23.4 -23.5 23.8 -24.4
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.375398
2025-12-03T11:01:02.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:00:33', tmtdew=12.55, humidity=43.21, cloud=0.0, wind=14.08, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:00:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:01:02.951 [DEBUG] [Thread-115485] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:01:03.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:01:03.047 [DEBUG] [Thread-115488] [transport.py] [_log()] starting thread (client mode): 0xa27efb20
2025-12-03T11:01:03.047 [DEBUG] [Thread-115488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:01:03.062 [DEBUG] [Thread-115488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:01:03.062 [INFO] [Thread-115488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:01:03.069 [DEBUG] [Thread-115488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:01:03.069 [DEBUG] [Thread-115488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:01:03.069 [DEBUG] [Thread-115488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] client lang: <none>
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] server lang: <none>
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] kex follows: False
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] Compression: none
2025-12-03T11:01:03.070 [DEBUG] [Thread-115488] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:01:03.126 [DEBUG] [Thread-115488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:01:03.127 [DEBUG] [Thread-115488] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:01:03.127 [DEBUG] [Thread-115488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:01:03.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:01:03.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:01:03.183 [DEBUG] [Thread-115488] [transport.py] [_log()] userauth is OK
2025-12-03T11:01:03.183 [DEBUG] [Thread-115488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:01:03.183 [DEBUG] [Thread-115488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:01:03.183 [DEBUG] [Thread-115488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:01:03.183 [DEBUG] [Thread-115488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:01:03.202 [INFO] [Thread-115488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:01:03.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:01:03.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:01:04.046 [DEBUG] [Thread-115488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:01:04.046 [DEBUG] [Thread-115488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:01:04.095 [DEBUG] [Thread-115488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:01:04.095 [DEBUG] [Thread-115488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:01:04.104 [DEBUG] [Thread-115488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:01:04.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:01:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:01:04.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:01:04.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:01:04.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:01:04.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:01:04.139 [DEBUG] [Thread-115488] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:01:04.960 [DEBUG] [Thread-115490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:20.000 [DEBUG] [Thread-115491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:34.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:01:34.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:01:34.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:01:34.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 1, 5), 11.74, 45.65, 0.0, 19.57, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:01:34.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:01:05
2025-12-03T11:01:34.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:01:35.028 [DEBUG] [Thread-115492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:35.097 [DEBUG] [Thread-115493] [transport.py] [_log()] starting thread (client mode): 0xa27b1930
2025-12-03T11:01:35.098 [DEBUG] [Thread-115493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:01:35.118 [DEBUG] [Thread-115493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:01:35.118 [INFO] [Thread-115493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] client lang: <none>
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] server lang: <none>
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] kex follows: False
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] Compression: none
2025-12-03T11:01:35.122 [DEBUG] [Thread-115493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:01:35.141 [DEBUG] [Thread-115493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:01:35.141 [DEBUG] [Thread-115493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:01:35.141 [DEBUG] [Thread-115493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:01:35.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:01:35.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:01:35.142 [DEBUG] [Thread-115493] [transport.py] [_log()] userauth is OK
2025-12-03T11:01:35.142 [DEBUG] [Thread-115493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:01:35.142 [DEBUG] [Thread-115493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:01:35.142 [DEBUG] [Thread-115493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:01:35.142 [DEBUG] [Thread-115493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:01:35.157 [INFO] [Thread-115493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:01:35.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:01:35.781 [DEBUG] [Thread-115493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:01:35.782 [DEBUG] [Thread-115493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:01:35.782 [DEBUG] [Thread-115493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:01:35.823 [DEBUG] [Thread-115493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:01:35.823 [DEBUG] [Thread-115493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:01:35.826 [DEBUG] [Thread-115493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:01:35.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:01:35.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:01:35.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:01:35.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:01:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:01:35.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:01:35.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.375745 -999.00  +16.80  11.12     48   +6.00 1 2 1 1 1   888    0 13.39 108.56 ----- 11.7 11.1 167.8 15.3 24.4 -22.8 23.9 -24.0 23.4 -21.5 24.1 -20.7
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:01:35.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.375745
2025-12-03T11:01:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:01:35.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:01:35.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:01:35.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:01:35.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:01:35.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:01:05', tmtdew=11.74, humidity=45.65, cloud=0.0, wind=19.57, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:01:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:01:35.863 [DEBUG] [Thread-115493] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:01:35.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:01:35.960 [DEBUG] [Thread-115496] [transport.py] [_log()] starting thread (client mode): 0xa51cc3a0
2025-12-03T11:01:35.960 [DEBUG] [Thread-115496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:01:35.975 [DEBUG] [Thread-115496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:01:35.975 [INFO] [Thread-115496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:01:35.992 [DEBUG] [Thread-115496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] client lang: <none>
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] server lang: <none>
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] kex follows: False
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] Compression: none
2025-12-03T11:01:35.993 [DEBUG] [Thread-115496] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:01:36.042 [DEBUG] [Thread-115496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:01:36.042 [DEBUG] [Thread-115496] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:01:36.043 [DEBUG] [Thread-115496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:01:36.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:01:36.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:01:36.098 [DEBUG] [Thread-115496] [transport.py] [_log()] userauth is OK
2025-12-03T11:01:36.099 [DEBUG] [Thread-115496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:01:36.099 [DEBUG] [Thread-115496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:01:36.099 [DEBUG] [Thread-115496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:01:36.099 [DEBUG] [Thread-115496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:01:36.117 [INFO] [Thread-115496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:01:36.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:01:36.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:01:37.010 [DEBUG] [Thread-115496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:01:37.011 [DEBUG] [Thread-115496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:01:37.059 [DEBUG] [Thread-115496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:01:37.059 [DEBUG] [Thread-115496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:01:37.067 [DEBUG] [Thread-115496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:01:37.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:01:37.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:01:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:01:37.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:01:37.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:01:37.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:01:37.101 [DEBUG] [Thread-115496] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:01:41.933 [DEBUG] [Thread-115498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:50.056 [DEBUG] [Thread-115499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:50.733 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:01:50.734 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:05.093 [DEBUG] [Thread-115500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:02:07.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:02:07.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:02:07.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 1, 37), 11.77, 45.75, 0.0, 17.94, 15.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:02:07.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:01:37
2025-12-03T11:02:07.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:02:08.058 [DEBUG] [Thread-115501] [transport.py] [_log()] starting thread (client mode): 0xa2787ca0
2025-12-03T11:02:08.058 [DEBUG] [Thread-115501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:02:08.079 [DEBUG] [Thread-115501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:02:08.079 [INFO] [Thread-115501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] client lang: <none>
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] server lang: <none>
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] kex follows: False
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:02:08.083 [DEBUG] [Thread-115501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:02:08.084 [DEBUG] [Thread-115501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:02:08.084 [DEBUG] [Thread-115501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:02:08.084 [DEBUG] [Thread-115501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:02:08.084 [DEBUG] [Thread-115501] [transport.py] [_log()] Compression: none
2025-12-03T11:02:08.084 [DEBUG] [Thread-115501] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:02:08.102 [DEBUG] [Thread-115501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:02:08.102 [DEBUG] [Thread-115501] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:02:08.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:02:08.103 [DEBUG] [Thread-115501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:02:08.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:02:08.106 [DEBUG] [Thread-115501] [transport.py] [_log()] userauth is OK
2025-12-03T11:02:08.106 [DEBUG] [Thread-115501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:02:08.106 [DEBUG] [Thread-115501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:02:08.106 [DEBUG] [Thread-115501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:02:08.106 [DEBUG] [Thread-115501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:02:08.141 [INFO] [Thread-115501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:02:08.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:02:08.770 [DEBUG] [Thread-115501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:02:08.770 [DEBUG] [Thread-115501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:02:08.771 [DEBUG] [Thread-115501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:02:08.812 [DEBUG] [Thread-115501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:02:08.812 [DEBUG] [Thread-115501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:02:08.815 [DEBUG] [Thread-115501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:02:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:02:08.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:02:08.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:02:08.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:02:08.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:02:08.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:02:08.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:02:08.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:02:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:02:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.376092 -999.00  +17.00  14.03     47   +5.80 1 2 1 1 1   888    0 13.59 104.38 ----- 12.5 14.0 168.4 16.4 24.7 -22.2 24.1 -21.9 23.6 -20.2 24.3 -22.4
2025-12-03T11:02:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:02:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:02:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.376092
2025-12-03T11:02:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:02:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:02:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:02:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:02:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:02:08.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:01:37', tmtdew=11.77, humidity=45.75, cloud=0.0, wind=17.94, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:01:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:02:08.839 [DEBUG] [Thread-115501] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:02:08.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:02:08.934 [DEBUG] [Thread-115504] [transport.py] [_log()] starting thread (client mode): 0xa51ccdf0
2025-12-03T11:02:08.934 [DEBUG] [Thread-115504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:02:08.949 [DEBUG] [Thread-115504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:02:08.949 [INFO] [Thread-115504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:02:08.956 [DEBUG] [Thread-115504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] client lang: <none>
2025-12-03T11:02:08.957 [DEBUG] [Thread-115504] [transport.py] [_log()] server lang: <none>
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] kex follows: False
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] Compression: none
2025-12-03T11:02:08.958 [DEBUG] [Thread-115504] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:02:09.015 [DEBUG] [Thread-115504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:02:09.016 [DEBUG] [Thread-115504] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:02:09.016 [DEBUG] [Thread-115504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:02:09.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:02:09.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:02:09.070 [DEBUG] [Thread-115504] [transport.py] [_log()] userauth is OK
2025-12-03T11:02:09.070 [DEBUG] [Thread-115504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:02:09.070 [DEBUG] [Thread-115504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:02:09.071 [DEBUG] [Thread-115504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:02:09.071 [DEBUG] [Thread-115504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:02:09.094 [INFO] [Thread-115504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:02:09.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:02:09.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:02:09.936 [DEBUG] [Thread-115504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:02:09.936 [DEBUG] [Thread-115504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:02:09.984 [DEBUG] [Thread-115504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:02:09.984 [DEBUG] [Thread-115504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:02:09.992 [DEBUG] [Thread-115504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:02:10.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:02:10.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:02:10.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:02:10.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:02:10.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:02:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:02:10.024 [DEBUG] [Thread-115504] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:02:20.121 [DEBUG] [Thread-115506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:35.177 [DEBUG] [Thread-115507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:02:40.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:02:40.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:02:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 2, 9), 11.95, 45.26, 0.0, 17.47, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:02:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:02:09
2025-12-03T11:02:40.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:02:40.993 [DEBUG] [Thread-115508] [transport.py] [_log()] starting thread (client mode): 0xa27c2e00
2025-12-03T11:02:40.993 [DEBUG] [Thread-115508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:02:41.014 [DEBUG] [Thread-115508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:02:41.014 [INFO] [Thread-115508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] client lang: <none>
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] server lang: <none>
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] kex follows: False
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:02:41.017 [DEBUG] [Thread-115508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:02:41.018 [DEBUG] [Thread-115508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:02:41.018 [DEBUG] [Thread-115508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:02:41.018 [DEBUG] [Thread-115508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:02:41.018 [DEBUG] [Thread-115508] [transport.py] [_log()] Compression: none
2025-12-03T11:02:41.018 [DEBUG] [Thread-115508] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:02:41.037 [DEBUG] [Thread-115508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:02:41.037 [DEBUG] [Thread-115508] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:02:41.038 [DEBUG] [Thread-115508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:02:41.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:02:41.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:02:41.040 [DEBUG] [Thread-115508] [transport.py] [_log()] userauth is OK
2025-12-03T11:02:41.040 [DEBUG] [Thread-115508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:02:41.040 [DEBUG] [Thread-115508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:02:41.040 [DEBUG] [Thread-115508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:02:41.040 [DEBUG] [Thread-115508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:02:41.064 [INFO] [Thread-115508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:02:41.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:02:41.714 [DEBUG] [Thread-115508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:02:41.714 [DEBUG] [Thread-115508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:02:41.714 [DEBUG] [Thread-115508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:02:41.714 [DEBUG] [Thread-115508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:02:41.714 [DEBUG] [Thread-115508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:02:41.716 [DEBUG] [Thread-115508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:02:41.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:02:41.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:02:41.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:02:41.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:02:41.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:02:41.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:02:41.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:02:41.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:02:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:02:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.376440 -999.00  +17.10  11.48     47   +5.90 1 2 1 1 1   888    0 13.70 111.10 ----- 18.8 11.5 132.3 17.1 24.8 -23.4 23.9 -22.9 23.6 -20.9 24.2 -22.4
2025-12-03T11:02:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:02:41.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.376440
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:02:41.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:02:09', tmtdew=11.95, humidity=45.26, cloud=0.0, wind=17.47, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:02:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:02:41.735 [DEBUG] [Thread-115508] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:02:41.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:02:41.826 [DEBUG] [Thread-115511] [transport.py] [_log()] starting thread (client mode): 0xa5163460
2025-12-03T11:02:41.826 [DEBUG] [Thread-115511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:02:41.842 [DEBUG] [Thread-115511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:02:41.842 [INFO] [Thread-115511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] client lang: <none>
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] server lang: <none>
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] kex follows: False
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:02:41.856 [DEBUG] [Thread-115511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:02:41.857 [DEBUG] [Thread-115511] [transport.py] [_log()] Compression: none
2025-12-03T11:02:41.857 [DEBUG] [Thread-115511] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:02:41.910 [DEBUG] [Thread-115511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:02:41.910 [DEBUG] [Thread-115511] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:02:41.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:02:41.910 [DEBUG] [Thread-115511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:02:41.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:02:41.970 [DEBUG] [Thread-115513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:41.970 [DEBUG] [Thread-115511] [transport.py] [_log()] userauth is OK
2025-12-03T11:02:41.970 [DEBUG] [Thread-115511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:02:41.970 [DEBUG] [Thread-115511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:02:41.970 [DEBUG] [Thread-115511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:02:41.970 [DEBUG] [Thread-115511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:02:41.986 [INFO] [Thread-115511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:02:41.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:02:41.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:02:42.827 [DEBUG] [Thread-115511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:02:42.827 [DEBUG] [Thread-115511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:02:42.875 [DEBUG] [Thread-115511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:02:42.875 [DEBUG] [Thread-115511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:02:42.884 [DEBUG] [Thread-115511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:02:42.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:02:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:02:42.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:02:42.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:02:42.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:02:42.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:02:42.915 [DEBUG] [Thread-115511] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:02:50.207 [DEBUG] [Thread-115514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:50.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:02:50.885 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:05.247 [DEBUG] [Thread-115515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:12.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:03:12.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:03:12.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:03:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 2, 41), 12.16, 44.46, 0.0, 15.76, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:03:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:02:41
2025-12-03T11:03:13.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:03:13.891 [DEBUG] [Thread-115516] [transport.py] [_log()] starting thread (client mode): 0xa51600d0
2025-12-03T11:03:13.891 [DEBUG] [Thread-115516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:03:13.911 [DEBUG] [Thread-115516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:03:13.911 [INFO] [Thread-115516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] client lang: <none>
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] server lang: <none>
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] kex follows: False
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] Compression: none
2025-12-03T11:03:13.914 [DEBUG] [Thread-115516] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:03:13.930 [DEBUG] [Thread-115516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:03:13.931 [DEBUG] [Thread-115516] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:03:13.931 [DEBUG] [Thread-115516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:03:13.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:03:13.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:03:13.931 [DEBUG] [Thread-115516] [transport.py] [_log()] userauth is OK
2025-12-03T11:03:13.931 [DEBUG] [Thread-115516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:03:13.932 [DEBUG] [Thread-115516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:03:13.932 [DEBUG] [Thread-115516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:03:13.932 [DEBUG] [Thread-115516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:03:13.942 [INFO] [Thread-115516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:03:13.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:03:14.555 [DEBUG] [Thread-115516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:03:14.555 [DEBUG] [Thread-115516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:03:14.555 [DEBUG] [Thread-115516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:03:14.595 [DEBUG] [Thread-115516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:03:14.595 [DEBUG] [Thread-115516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:03:14.597 [DEBUG] [Thread-115516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:03:14.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:03:14.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:03:14.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:03:14.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:03:14.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:03:14.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:03:14.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.376787 -999.00  +16.80  15.67     46   +5.30 1 1 1 1 1   888    0 13.63 102.15 ----- 16.9 15.7 139.8 20.7 24.7 -24.0 23.9 -26.8 23.7 -22.2 24.0 -26.6
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.376787
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:03:14.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:02:41', tmtdew=12.16, humidity=44.46, cloud=0.0, wind=15.76, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:02:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:03:14.617 [DEBUG] [Thread-115516] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:03:14.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:03:14.709 [DEBUG] [Thread-115519] [transport.py] [_log()] starting thread (client mode): 0xa5162cb0
2025-12-03T11:03:14.709 [DEBUG] [Thread-115519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:03:14.724 [DEBUG] [Thread-115519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:03:14.724 [INFO] [Thread-115519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] client lang: <none>
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] server lang: <none>
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] kex follows: False
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] Compression: none
2025-12-03T11:03:14.731 [DEBUG] [Thread-115519] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:03:14.789 [DEBUG] [Thread-115519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:03:14.789 [DEBUG] [Thread-115519] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:03:14.789 [DEBUG] [Thread-115519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:03:14.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:03:14.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:03:14.852 [DEBUG] [Thread-115519] [transport.py] [_log()] userauth is OK
2025-12-03T11:03:14.852 [DEBUG] [Thread-115519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:03:14.852 [DEBUG] [Thread-115519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:03:14.852 [DEBUG] [Thread-115519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:03:14.852 [DEBUG] [Thread-115519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:03:14.866 [INFO] [Thread-115519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:03:14.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:03:14.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:03:15.679 [DEBUG] [Thread-115519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:03:15.680 [DEBUG] [Thread-115519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:03:15.728 [DEBUG] [Thread-115519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:03:15.728 [DEBUG] [Thread-115519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:03:15.737 [DEBUG] [Thread-115519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:03:15.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:03:15.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:03:15.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:03:15.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:03:15.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:03:15.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:03:15.772 [DEBUG] [Thread-115519] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:03:20.270 [DEBUG] [Thread-115521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:35.320 [DEBUG] [Thread-115522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:42.007 [DEBUG] [Thread-115523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:45.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:03:45.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:03:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:03:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 3, 13), 12.14, 44.52, 0.0, 15.55, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:03:46.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:03:13
2025-12-03T11:03:46.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:03:46.820 [DEBUG] [Thread-115524] [transport.py] [_log()] starting thread (client mode): 0xa5163df0
2025-12-03T11:03:46.820 [DEBUG] [Thread-115524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:03:46.840 [DEBUG] [Thread-115524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:03:46.840 [INFO] [Thread-115524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] client lang: <none>
2025-12-03T11:03:46.841 [DEBUG] [Thread-115524] [transport.py] [_log()] server lang: <none>
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] kex follows: False
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] Compression: none
2025-12-03T11:03:46.842 [DEBUG] [Thread-115524] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:03:46.850 [DEBUG] [Thread-115524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:03:46.850 [DEBUG] [Thread-115524] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:03:46.850 [DEBUG] [Thread-115524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:03:46.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:03:46.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:03:46.851 [DEBUG] [Thread-115524] [transport.py] [_log()] userauth is OK
2025-12-03T11:03:46.851 [DEBUG] [Thread-115524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:03:46.851 [DEBUG] [Thread-115524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:03:46.851 [DEBUG] [Thread-115524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:03:46.851 [DEBUG] [Thread-115524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:03:46.880 [INFO] [Thread-115524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:03:46.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:03:47.489 [DEBUG] [Thread-115524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:03:47.489 [DEBUG] [Thread-115524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:03:47.489 [DEBUG] [Thread-115524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:03:47.530 [DEBUG] [Thread-115524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:03:47.530 [DEBUG] [Thread-115524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:03:47.532 [DEBUG] [Thread-115524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:03:47.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:03:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:03:47.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:03:47.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:03:47.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:03:47.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:03:47.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.377134 -999.00  +16.60  10.46     47   +5.40 1 1 1 1 1   888    0 13.62 101.66 ----- 10.8 10.5 132.2 17.0 24.3 -25.3 23.8 -24.7 23.3 -23.7 23.9 -24.4
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.377134
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:03:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:03:13', tmtdew=12.14, humidity=44.52, cloud=0.0, wind=15.55, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:03:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:03:47.549 [DEBUG] [Thread-115524] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:03:47.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:03:47.634 [DEBUG] [Thread-115527] [transport.py] [_log()] starting thread (client mode): 0xa51618a0
2025-12-03T11:03:47.634 [DEBUG] [Thread-115527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:03:47.649 [DEBUG] [Thread-115527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:03:47.649 [INFO] [Thread-115527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:03:47.656 [DEBUG] [Thread-115527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:03:47.656 [DEBUG] [Thread-115527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:03:47.656 [DEBUG] [Thread-115527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:03:47.656 [DEBUG] [Thread-115527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:47.656 [DEBUG] [Thread-115527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] client lang: <none>
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] server lang: <none>
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] kex follows: False
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] Compression: none
2025-12-03T11:03:47.657 [DEBUG] [Thread-115527] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:03:47.713 [DEBUG] [Thread-115527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:03:47.713 [DEBUG] [Thread-115527] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:03:47.713 [DEBUG] [Thread-115527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:03:47.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:03:47.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:03:47.773 [DEBUG] [Thread-115527] [transport.py] [_log()] userauth is OK
2025-12-03T11:03:47.773 [DEBUG] [Thread-115527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:03:47.773 [DEBUG] [Thread-115527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:03:47.773 [DEBUG] [Thread-115527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:03:47.773 [DEBUG] [Thread-115527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:03:47.787 [INFO] [Thread-115527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:03:47.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:03:47.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:03:48.616 [DEBUG] [Thread-115527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:03:48.616 [DEBUG] [Thread-115527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:03:48.664 [DEBUG] [Thread-115527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:03:48.664 [DEBUG] [Thread-115527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:03:48.673 [DEBUG] [Thread-115527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:03:48.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:03:48.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:03:48.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:03:48.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:03:48.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:03:48.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:03:48.708 [DEBUG] [Thread-115527] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:03:50.350 [DEBUG] [Thread-115529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:51.023 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:03:51.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:05.402 [DEBUG] [Thread-115530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:18.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:04:18.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:04:18.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:04:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 3, 45), 12.52, 43.18, 0.0, 16.0, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:04:19.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:03:45
2025-12-03T11:04:19.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:04:19.723 [DEBUG] [Thread-115531] [transport.py] [_log()] starting thread (client mode): 0xa5163a60
2025-12-03T11:04:19.723 [DEBUG] [Thread-115531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:04:19.743 [DEBUG] [Thread-115531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:04:19.743 [INFO] [Thread-115531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] client lang: <none>
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] server lang: <none>
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] kex follows: False
2025-12-03T11:04:19.747 [DEBUG] [Thread-115531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] Compression: none
2025-12-03T11:04:19.748 [DEBUG] [Thread-115531] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:04:19.764 [DEBUG] [Thread-115531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:04:19.765 [DEBUG] [Thread-115531] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:04:19.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:04:19.766 [DEBUG] [Thread-115531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:04:19.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:04:19.768 [DEBUG] [Thread-115531] [transport.py] [_log()] userauth is OK
2025-12-03T11:04:19.768 [DEBUG] [Thread-115531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:04:19.768 [DEBUG] [Thread-115531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:04:19.768 [DEBUG] [Thread-115531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:04:19.768 [DEBUG] [Thread-115531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:04:19.792 [INFO] [Thread-115531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:04:19.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:04:20.425 [DEBUG] [Thread-115531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:04:20.426 [DEBUG] [Thread-115531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:04:20.426 [DEBUG] [Thread-115531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:04:20.431 [DEBUG] [Thread-115533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:20.467 [DEBUG] [Thread-115531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:04:20.467 [DEBUG] [Thread-115531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:04:20.470 [DEBUG] [Thread-115531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:04:20.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:04:20.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:04:20.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:04:20.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:04:20.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:04:20.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:04:20.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:04:20.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.377829 -999.00  +16.50  12.45     48   +5.70 1 2 1 1 1   888    0 13.56 103.12 ----- 12.9 12.4 137.2 19.2 24.2 -23.0 23.8 -21.8 23.4 -21.7 24.0 -21.7
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.377829
2025-12-03T11:04:20.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:04:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:04:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:04:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:04:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:04:20.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:03:45', tmtdew=12.52, humidity=43.18, cloud=0.0, wind=16.0, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:04:04.426', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:04:20.489 [DEBUG] [Thread-115531] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:04:20.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:04:20.588 [DEBUG] [Thread-115535] [transport.py] [_log()] starting thread (client mode): 0xa5163430
2025-12-03T11:04:20.588 [DEBUG] [Thread-115535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:04:20.602 [DEBUG] [Thread-115535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:04:20.602 [INFO] [Thread-115535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:20.609 [DEBUG] [Thread-115535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] client lang: <none>
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] server lang: <none>
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] kex follows: False
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] Compression: none
2025-12-03T11:04:20.610 [DEBUG] [Thread-115535] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:04:20.666 [DEBUG] [Thread-115535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:04:20.667 [DEBUG] [Thread-115535] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:04:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:04:20.667 [DEBUG] [Thread-115535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:04:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:04:20.732 [DEBUG] [Thread-115535] [transport.py] [_log()] userauth is OK
2025-12-03T11:04:20.733 [DEBUG] [Thread-115535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:04:20.733 [DEBUG] [Thread-115535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:04:20.733 [DEBUG] [Thread-115535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:04:20.733 [DEBUG] [Thread-115535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:04:20.750 [INFO] [Thread-115535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:04:20.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:04:20.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:04:21.574 [DEBUG] [Thread-115535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:04:21.574 [DEBUG] [Thread-115535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:04:21.621 [DEBUG] [Thread-115535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:04:21.621 [DEBUG] [Thread-115535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:04:21.629 [DEBUG] [Thread-115535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:04:21.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:04:21.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:04:21.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:04:21.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:04:21.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:04:21.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:04:21.661 [DEBUG] [Thread-115535] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:04:35.462 [DEBUG] [Thread-115537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:42.041 [DEBUG] [Thread-115538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:50.505 [DEBUG] [Thread-115539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:51.164 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:51.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:04:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:04:51.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:04:51.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:04:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 4, 17), 12.4, 43.48, 0.0, 15.0, 16.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:04:52.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:04:17
2025-12-03T11:04:52.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:04:52.648 [DEBUG] [Thread-115540] [transport.py] [_log()] starting thread (client mode): 0xa5162ce0
2025-12-03T11:04:52.648 [DEBUG] [Thread-115540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:04:52.668 [DEBUG] [Thread-115540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:04:52.668 [INFO] [Thread-115540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] client lang: <none>
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] server lang: <none>
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] kex follows: False
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] Compression: none
2025-12-03T11:04:52.671 [DEBUG] [Thread-115540] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:04:52.689 [DEBUG] [Thread-115540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:04:52.689 [DEBUG] [Thread-115540] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:04:52.690 [DEBUG] [Thread-115540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:04:52.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:04:52.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:04:52.691 [DEBUG] [Thread-115540] [transport.py] [_log()] userauth is OK
2025-12-03T11:04:52.692 [DEBUG] [Thread-115540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:04:52.692 [DEBUG] [Thread-115540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:04:52.692 [DEBUG] [Thread-115540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:04:52.692 [DEBUG] [Thread-115540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:04:52.716 [INFO] [Thread-115540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:04:52.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:04:53.355 [DEBUG] [Thread-115540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:04:53.355 [DEBUG] [Thread-115540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:04:53.356 [DEBUG] [Thread-115540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:04:53.396 [DEBUG] [Thread-115540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:04:53.396 [DEBUG] [Thread-115540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:04:53.399 [DEBUG] [Thread-115540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:04:53.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:04:53.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:04:53.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:04:53.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:04:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:04:53.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:04:53.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:04:53.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.378176 -999.00  +16.90  13.83     48   +6.00 1 2 1 1 1   888    0 13.43 95.28 ----- 10.4 13.8 167.2 21.8 24.2 -23.6 23.8 -22.3 23.4 -22.1 24.1 -21.7
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.378176
2025-12-03T11:04:53.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:04:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:04:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:04:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:04:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:04:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:04:17', tmtdew=12.4, humidity=43.48, cloud=0.0, wind=15.0, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:04:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:04:53.423 [DEBUG] [Thread-115540] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:04:53.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:04:53.515 [DEBUG] [Thread-115543] [transport.py] [_log()] starting thread (client mode): 0xa5161030
2025-12-03T11:04:53.516 [DEBUG] [Thread-115543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:04:53.531 [DEBUG] [Thread-115543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:04:53.532 [INFO] [Thread-115543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] client lang: <none>
2025-12-03T11:04:53.539 [DEBUG] [Thread-115543] [transport.py] [_log()] server lang: <none>
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] kex follows: False
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] Compression: none
2025-12-03T11:04:53.540 [DEBUG] [Thread-115543] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:04:53.598 [DEBUG] [Thread-115543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:04:53.598 [DEBUG] [Thread-115543] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:04:53.599 [DEBUG] [Thread-115543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:04:53.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:04:53.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:04:53.654 [DEBUG] [Thread-115543] [transport.py] [_log()] userauth is OK
2025-12-03T11:04:53.654 [DEBUG] [Thread-115543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:04:53.655 [DEBUG] [Thread-115543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:04:53.655 [DEBUG] [Thread-115543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:04:53.655 [DEBUG] [Thread-115543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:04:53.673 [INFO] [Thread-115543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:04:53.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:04:53.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:04:54.510 [DEBUG] [Thread-115543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:04:54.510 [DEBUG] [Thread-115543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:04:54.558 [DEBUG] [Thread-115543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:04:54.558 [DEBUG] [Thread-115543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:04:54.566 [DEBUG] [Thread-115543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:04:54.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:04:54.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:04:54.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:04:54.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:04:54.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:04:54.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:04:54.600 [DEBUG] [Thread-115543] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:05:05.532 [DEBUG] [Thread-115545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:20.573 [DEBUG] [Thread-115546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:24.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:05:24.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:05:24.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:05:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 5, 21), 12.67, 42.91, 0.0, 18.39, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:05:25.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:05:21
2025-12-03T11:05:25.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:05:25.558 [DEBUG] [Thread-115547] [transport.py] [_log()] starting thread (client mode): 0xa5162470
2025-12-03T11:05:25.559 [DEBUG] [Thread-115547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:05:25.578 [DEBUG] [Thread-115547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:05:25.578 [INFO] [Thread-115547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] client lang: <none>
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] server lang: <none>
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] kex follows: False
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:05:25.582 [DEBUG] [Thread-115547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:05:25.583 [DEBUG] [Thread-115547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:05:25.583 [DEBUG] [Thread-115547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:05:25.583 [DEBUG] [Thread-115547] [transport.py] [_log()] Compression: none
2025-12-03T11:05:25.583 [DEBUG] [Thread-115547] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:05:25.601 [DEBUG] [Thread-115547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:05:25.601 [DEBUG] [Thread-115547] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:05:25.601 [DEBUG] [Thread-115547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:05:25.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:05:25.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:05:25.603 [DEBUG] [Thread-115547] [transport.py] [_log()] userauth is OK
2025-12-03T11:05:25.604 [DEBUG] [Thread-115547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:05:25.604 [DEBUG] [Thread-115547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:05:25.604 [DEBUG] [Thread-115547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:05:25.604 [DEBUG] [Thread-115547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:05:25.639 [INFO] [Thread-115547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:05:25.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:05:26.280 [DEBUG] [Thread-115547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:05:26.280 [DEBUG] [Thread-115547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:05:26.280 [DEBUG] [Thread-115547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:05:26.321 [DEBUG] [Thread-115547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:05:26.321 [DEBUG] [Thread-115547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:05:26.324 [DEBUG] [Thread-115547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:05:26.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:05:26.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:05:26.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:05:26.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:05:26.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:05:26.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:05:26.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.378523 -999.00  +17.30  19.44     47   +6.00 1 2 1 1 1   888    0 13.04 88.21 ----- 19.6 19.4 167.6 23.4 24.5 -21.3 23.9 -23.0 23.6 -20.2 24.1 -22.7
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:05:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.378523
2025-12-03T11:05:26.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:05:26.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:05:26.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:05:26.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:05:26.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:05:26.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:05:21', tmtdew=12.67, humidity=42.91, cloud=0.0, wind=18.39, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:05:04.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:05:26.349 [DEBUG] [Thread-115547] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:05:26.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:05:26.445 [DEBUG] [Thread-115550] [transport.py] [_log()] starting thread (client mode): 0xa51633d0
2025-12-03T11:05:26.445 [DEBUG] [Thread-115550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:05:26.460 [DEBUG] [Thread-115550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:05:26.460 [INFO] [Thread-115550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:05:26.467 [DEBUG] [Thread-115550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:05:26.467 [DEBUG] [Thread-115550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:05:26.467 [DEBUG] [Thread-115550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:05:26.467 [DEBUG] [Thread-115550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] client lang: <none>
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] server lang: <none>
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] kex follows: False
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] Compression: none
2025-12-03T11:05:26.468 [DEBUG] [Thread-115550] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:05:26.526 [DEBUG] [Thread-115550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:05:26.526 [DEBUG] [Thread-115550] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:05:26.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:05:26.527 [DEBUG] [Thread-115550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:05:26.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:05:26.582 [DEBUG] [Thread-115550] [transport.py] [_log()] userauth is OK
2025-12-03T11:05:26.582 [DEBUG] [Thread-115550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:05:26.583 [DEBUG] [Thread-115550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:05:26.583 [DEBUG] [Thread-115550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:05:26.583 [DEBUG] [Thread-115550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:05:26.605 [INFO] [Thread-115550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:05:26.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:05:26.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:05:27.420 [DEBUG] [Thread-115550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:05:27.420 [DEBUG] [Thread-115550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:05:27.468 [DEBUG] [Thread-115550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:05:27.468 [DEBUG] [Thread-115550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:05:27.476 [DEBUG] [Thread-115550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:05:27.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:05:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:05:27.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:05:27.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:05:27.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:05:27.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:05:27.510 [DEBUG] [Thread-115550] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:05:35.603 [DEBUG] [Thread-115552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:42.073 [DEBUG] [Thread-115553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:50.645 [DEBUG] [Thread-115554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:51.313 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:51.314 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:05:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:05:57.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:05:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:05:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 5, 53), 12.83, 42.52, 0.0, 19.8, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:05:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:05:53
2025-12-03T11:05:58.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:05:58.486 [DEBUG] [Thread-115555] [transport.py] [_log()] starting thread (client mode): 0xa5160af0
2025-12-03T11:05:58.487 [DEBUG] [Thread-115555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:05:58.508 [DEBUG] [Thread-115555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:05:58.509 [INFO] [Thread-115555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:58.512 [DEBUG] [Thread-115555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] client lang: <none>
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] server lang: <none>
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] kex follows: False
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] Compression: none
2025-12-03T11:05:58.513 [DEBUG] [Thread-115555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:05:58.529 [DEBUG] [Thread-115555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:05:58.530 [DEBUG] [Thread-115555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:05:58.530 [DEBUG] [Thread-115555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:05:58.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:05:58.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:05:58.532 [DEBUG] [Thread-115555] [transport.py] [_log()] userauth is OK
2025-12-03T11:05:58.532 [DEBUG] [Thread-115555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:05:58.533 [DEBUG] [Thread-115555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:05:58.533 [DEBUG] [Thread-115555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:05:58.533 [DEBUG] [Thread-115555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:05:58.556 [INFO] [Thread-115555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:05:58.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:05:59.209 [DEBUG] [Thread-115555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:05:59.209 [DEBUG] [Thread-115555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:05:59.209 [DEBUG] [Thread-115555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:05:59.250 [DEBUG] [Thread-115555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:05:59.250 [DEBUG] [Thread-115555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:05:59.253 [DEBUG] [Thread-115555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:05:59.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:05:59.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:05:59.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:05:59.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:05:59.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:05:59.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:05:59.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:05:59.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.378870 -999.00  +17.10  17.43     46   +5.50 1 2 1 1 1   888    0 13.39 91.34 ----- 14.8 17.4 136.6 26.9 24.4 -23.7 23.8 -23.3 23.5 -22.1 24.0 -23.3
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.378870
2025-12-03T11:05:59.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:05:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:05:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:05:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:05:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:05:59.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:05:53', tmtdew=12.83, humidity=42.52, cloud=0.0, wind=19.8, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:05:34.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:05:59.288 [DEBUG] [Thread-115555] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:05:59.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:05:59.369 [DEBUG] [Thread-115558] [transport.py] [_log()] starting thread (client mode): 0xa27b6ce0
2025-12-03T11:05:59.369 [DEBUG] [Thread-115558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:05:59.384 [DEBUG] [Thread-115558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:05:59.385 [INFO] [Thread-115558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:05:59.392 [DEBUG] [Thread-115558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:05:59.392 [DEBUG] [Thread-115558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:05:59.392 [DEBUG] [Thread-115558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] client lang: <none>
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] server lang: <none>
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] kex follows: False
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:05:59.393 [DEBUG] [Thread-115558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:05:59.394 [DEBUG] [Thread-115558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:05:59.394 [DEBUG] [Thread-115558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:05:59.394 [DEBUG] [Thread-115558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:05:59.394 [DEBUG] [Thread-115558] [transport.py] [_log()] Compression: none
2025-12-03T11:05:59.394 [DEBUG] [Thread-115558] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:05:59.449 [DEBUG] [Thread-115558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:05:59.450 [DEBUG] [Thread-115558] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:05:59.450 [DEBUG] [Thread-115558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:05:59.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:05:59.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:05:59.506 [DEBUG] [Thread-115558] [transport.py] [_log()] userauth is OK
2025-12-03T11:05:59.507 [DEBUG] [Thread-115558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:05:59.507 [DEBUG] [Thread-115558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:05:59.507 [DEBUG] [Thread-115558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:05:59.507 [DEBUG] [Thread-115558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:05:59.526 [INFO] [Thread-115558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:05:59.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:05:59.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:06:00.347 [DEBUG] [Thread-115558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:06:00.347 [DEBUG] [Thread-115558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:06:00.395 [DEBUG] [Thread-115558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:06:00.395 [DEBUG] [Thread-115558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:06:00.404 [DEBUG] [Thread-115558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:06:00.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:06:00.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:06:00.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:06:00.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:06:00.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:06:00.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:06:00.438 [DEBUG] [Thread-115558] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:06:05.679 [DEBUG] [Thread-115560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:20.727 [DEBUG] [Thread-115561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:30.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:06:30.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:06:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:06:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 6, 25), 12.8, 42.62, 0.0, 20.7, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:06:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:06:25
2025-12-03T11:06:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:06:31.414 [DEBUG] [Thread-115562] [transport.py] [_log()] starting thread (client mode): 0xa51635e0
2025-12-03T11:06:31.415 [DEBUG] [Thread-115562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:06:31.435 [DEBUG] [Thread-115562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:06:31.435 [INFO] [Thread-115562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] client lang: <none>
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] server lang: <none>
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] kex follows: False
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] Compression: none
2025-12-03T11:06:31.438 [DEBUG] [Thread-115562] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:06:31.456 [DEBUG] [Thread-115562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:06:31.456 [DEBUG] [Thread-115562] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:06:31.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:06:31.457 [DEBUG] [Thread-115562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:06:31.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:06:31.459 [DEBUG] [Thread-115562] [transport.py] [_log()] userauth is OK
2025-12-03T11:06:31.459 [DEBUG] [Thread-115562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:06:31.459 [DEBUG] [Thread-115562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:06:31.459 [DEBUG] [Thread-115562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:06:31.459 [DEBUG] [Thread-115562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:06:31.483 [INFO] [Thread-115562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:06:31.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:06:32.134 [DEBUG] [Thread-115562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:06:32.134 [DEBUG] [Thread-115562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:06:32.134 [DEBUG] [Thread-115562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:06:32.175 [DEBUG] [Thread-115562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:06:32.175 [DEBUG] [Thread-115562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:06:32.178 [DEBUG] [Thread-115562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:06:32.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:06:32.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:06:32.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:06:32.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:06:32.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:06:32.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:06:32.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:06:32.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.379217 -999.00  +17.00  18.36     46   +5.50 1 1 1 1 1   888    0 13.29 87.28 ----- 18.4 18.4 162.4 20.5 24.3 -24.9 23.7 -23.8 23.4 -22.7 23.9 -23.7
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.379217
2025-12-03T11:06:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:06:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:06:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:06:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:06:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:06:32.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:06:25', tmtdew=12.8, humidity=42.62, cloud=0.0, wind=20.7, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:06:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:06:32.203 [DEBUG] [Thread-115562] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:06:32.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:06:32.297 [DEBUG] [Thread-115565] [transport.py] [_log()] starting thread (client mode): 0xa5163fa0
2025-12-03T11:06:32.297 [DEBUG] [Thread-115565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:06:32.312 [DEBUG] [Thread-115565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:06:32.312 [INFO] [Thread-115565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:06:32.320 [DEBUG] [Thread-115565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] client lang: <none>
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] server lang: <none>
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] kex follows: False
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:06:32.321 [DEBUG] [Thread-115565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:06:32.322 [DEBUG] [Thread-115565] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:06:32.322 [DEBUG] [Thread-115565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:06:32.322 [DEBUG] [Thread-115565] [transport.py] [_log()] Compression: none
2025-12-03T11:06:32.322 [DEBUG] [Thread-115565] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:06:32.378 [DEBUG] [Thread-115565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:06:32.379 [DEBUG] [Thread-115565] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:06:32.380 [DEBUG] [Thread-115565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:06:32.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:06:32.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:06:32.434 [DEBUG] [Thread-115565] [transport.py] [_log()] userauth is OK
2025-12-03T11:06:32.435 [DEBUG] [Thread-115565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:06:32.435 [DEBUG] [Thread-115565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:06:32.435 [DEBUG] [Thread-115565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:06:32.435 [DEBUG] [Thread-115565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:06:32.457 [INFO] [Thread-115565] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:06:32.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:06:32.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:06:33.274 [DEBUG] [Thread-115565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:06:33.274 [DEBUG] [Thread-115565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:06:33.322 [DEBUG] [Thread-115565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:06:33.322 [DEBUG] [Thread-115565] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:06:33.331 [DEBUG] [Thread-115565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:06:33.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:06:33.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:06:33.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:06:33.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:06:33.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:06:33.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:06:33.365 [DEBUG] [Thread-115565] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:06:35.755 [DEBUG] [Thread-115567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:42.123 [DEBUG] [Thread-115568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:50.800 [DEBUG] [Thread-115569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:51.467 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:06:51.468 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:03.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:07:03.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:07:03.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:07:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 6, 57), 12.84, 42.16, 0.0, 18.4, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:07:04.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:06:57
2025-12-03T11:07:04.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:07:04.333 [DEBUG] [Thread-115570] [transport.py] [_log()] starting thread (client mode): 0xa5163f40
2025-12-03T11:07:04.333 [DEBUG] [Thread-115570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:07:04.353 [DEBUG] [Thread-115570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:07:04.353 [INFO] [Thread-115570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:04.356 [DEBUG] [Thread-115570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] client lang: <none>
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] server lang: <none>
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] kex follows: False
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] Compression: none
2025-12-03T11:07:04.357 [DEBUG] [Thread-115570] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:07:04.373 [DEBUG] [Thread-115570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:07:04.374 [DEBUG] [Thread-115570] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:07:04.375 [DEBUG] [Thread-115570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:07:04.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:07:04.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:07:04.377 [DEBUG] [Thread-115570] [transport.py] [_log()] userauth is OK
2025-12-03T11:07:04.377 [DEBUG] [Thread-115570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:07:04.377 [DEBUG] [Thread-115570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:07:04.377 [DEBUG] [Thread-115570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:07:04.377 [DEBUG] [Thread-115570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:07:04.392 [INFO] [Thread-115570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:07:04.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:07:05.037 [DEBUG] [Thread-115570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:07:05.037 [DEBUG] [Thread-115570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:07:05.037 [DEBUG] [Thread-115570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:07:05.078 [DEBUG] [Thread-115570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:07:05.078 [DEBUG] [Thread-115570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:07:05.081 [DEBUG] [Thread-115570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:07:05.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:07:05.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:07:05.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:07:05.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:07:05.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:07:05.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:07:05.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:07:05.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:07:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:07:05.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.379565 -999.00  +16.60   8.69     45   +4.90 1 2 1 1 1   888    0 13.33 84.18 ----- 6.5 8.7 122.2 20.1 24.3 -23.3 23.7 -22.4 23.3 -23.3 24.0 -21.9
2025-12-03T11:07:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:07:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:07:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.379565
2025-12-03T11:07:05.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:07:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:07:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:07:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:07:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:07:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:06:57', tmtdew=12.84, humidity=42.16, cloud=0.0, wind=18.4, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:06:34.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:07:05.107 [DEBUG] [Thread-115570] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:07:05.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:07:05.201 [DEBUG] [Thread-115573] [transport.py] [_log()] starting thread (client mode): 0xa51611b0
2025-12-03T11:07:05.201 [DEBUG] [Thread-115573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:07:05.216 [DEBUG] [Thread-115573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:07:05.216 [INFO] [Thread-115573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:07:05.223 [DEBUG] [Thread-115573] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] client lang: <none>
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] server lang: <none>
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] kex follows: False
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] Compression: none
2025-12-03T11:07:05.224 [DEBUG] [Thread-115573] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:07:05.281 [DEBUG] [Thread-115573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:07:05.282 [DEBUG] [Thread-115573] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:07:05.282 [DEBUG] [Thread-115573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:07:05.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:07:05.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:07:05.338 [DEBUG] [Thread-115573] [transport.py] [_log()] userauth is OK
2025-12-03T11:07:05.338 [DEBUG] [Thread-115573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:07:05.339 [DEBUG] [Thread-115573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:07:05.339 [DEBUG] [Thread-115573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:07:05.339 [DEBUG] [Thread-115573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:07:05.357 [INFO] [Thread-115573] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:07:05.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:07:05.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:07:05.826 [DEBUG] [Thread-115575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:06.188 [DEBUG] [Thread-115573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:07:06.188 [DEBUG] [Thread-115573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:07:06.236 [DEBUG] [Thread-115573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:07:06.236 [DEBUG] [Thread-115573] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:07:06.245 [DEBUG] [Thread-115573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:07:06.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:07:06.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:07:06.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:07:06.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:07:06.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:07:06.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:07:06.279 [DEBUG] [Thread-115573] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:07:20.868 [DEBUG] [Thread-115576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:35.890 [DEBUG] [Thread-115577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:07:36.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:07:36.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:07:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 7, 29), 13.03, 41.66, 0.0, 20.82, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:07:37.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:07:29
2025-12-03T11:07:37.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:07:37.290 [DEBUG] [Thread-115578] [transport.py] [_log()] starting thread (client mode): 0xa5161d50
2025-12-03T11:07:37.290 [DEBUG] [Thread-115578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:07:37.310 [DEBUG] [Thread-115578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:07:37.310 [INFO] [Thread-115578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] client lang: <none>
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] server lang: <none>
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] kex follows: False
2025-12-03T11:07:37.313 [DEBUG] [Thread-115578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] Compression: none
2025-12-03T11:07:37.314 [DEBUG] [Thread-115578] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:07:37.330 [DEBUG] [Thread-115578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:07:37.331 [DEBUG] [Thread-115578] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:07:37.331 [DEBUG] [Thread-115578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:07:37.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:07:37.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:07:37.331 [DEBUG] [Thread-115578] [transport.py] [_log()] userauth is OK
2025-12-03T11:07:37.332 [DEBUG] [Thread-115578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:07:37.332 [DEBUG] [Thread-115578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:07:37.332 [DEBUG] [Thread-115578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:07:37.332 [DEBUG] [Thread-115578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:07:37.347 [INFO] [Thread-115578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:07:37.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:07:37.984 [DEBUG] [Thread-115578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:07:37.984 [DEBUG] [Thread-115578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:07:37.984 [DEBUG] [Thread-115578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:07:38.025 [DEBUG] [Thread-115578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:07:38.025 [DEBUG] [Thread-115578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:07:38.027 [DEBUG] [Thread-115578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:07:38.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:07:38.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:07:38.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:07:38.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:07:38.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:07:38.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:07:38.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.379912 -999.00  +16.80  14.08     46   +5.30 1 2 1 1 1   888    0 13.16 80.25 ----- 12.9 14.1 157.0 19.4 24.4 -23.3 23.7 -23.8 23.4 -22.1 23.9 -24.4
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.379912
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:07:38.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:07:29', tmtdew=13.03, humidity=41.66, cloud=0.0, wind=20.82, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:07:04.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:07:38.047 [DEBUG] [Thread-115578] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:07:38.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:07:38.133 [DEBUG] [Thread-115581] [transport.py] [_log()] starting thread (client mode): 0xa27b6020
2025-12-03T11:07:38.133 [DEBUG] [Thread-115581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:07:38.149 [DEBUG] [Thread-115581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:07:38.149 [INFO] [Thread-115581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:07:38.156 [DEBUG] [Thread-115581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] client lang: <none>
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] server lang: <none>
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] kex follows: False
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] Compression: none
2025-12-03T11:07:38.157 [DEBUG] [Thread-115581] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:07:38.213 [DEBUG] [Thread-115581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:07:38.213 [DEBUG] [Thread-115581] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:07:38.213 [DEBUG] [Thread-115581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:07:38.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:07:38.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:07:38.270 [DEBUG] [Thread-115581] [transport.py] [_log()] userauth is OK
2025-12-03T11:07:38.270 [DEBUG] [Thread-115581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:07:38.270 [DEBUG] [Thread-115581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:07:38.270 [DEBUG] [Thread-115581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:07:38.270 [DEBUG] [Thread-115581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:07:38.284 [INFO] [Thread-115581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:07:38.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:07:38.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:07:39.117 [DEBUG] [Thread-115581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:07:39.117 [DEBUG] [Thread-115581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:07:39.164 [DEBUG] [Thread-115581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:07:39.171 [DEBUG] [Thread-115581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:07:39.179 [DEBUG] [Thread-115581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:07:39.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:07:39.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:07:39.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:07:39.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:07:39.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:07:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:07:39.211 [DEBUG] [Thread-115581] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:07:42.159 [DEBUG] [Thread-115583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:50.917 [DEBUG] [Thread-115584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:51.619 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:07:51.620 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:05.963 [DEBUG] [Thread-115585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:08:09.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:08:09.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:08:09.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 8, 1), 13.28, 40.95, 0.0, 18.77, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:08:09.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:08:01
2025-12-03T11:08:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:08:10.199 [DEBUG] [Thread-115586] [transport.py] [_log()] starting thread (client mode): 0xa27b5360
2025-12-03T11:08:10.200 [DEBUG] [Thread-115586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:08:10.219 [DEBUG] [Thread-115586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:08:10.219 [INFO] [Thread-115586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:10.222 [DEBUG] [Thread-115586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] client lang: <none>
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] server lang: <none>
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] kex follows: False
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] Compression: none
2025-12-03T11:08:10.223 [DEBUG] [Thread-115586] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:08:10.232 [DEBUG] [Thread-115586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:08:10.232 [DEBUG] [Thread-115586] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:08:10.233 [DEBUG] [Thread-115586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:08:10.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:08:10.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:08:10.234 [DEBUG] [Thread-115586] [transport.py] [_log()] userauth is OK
2025-12-03T11:08:10.234 [DEBUG] [Thread-115586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:08:10.234 [DEBUG] [Thread-115586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:08:10.234 [DEBUG] [Thread-115586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:08:10.234 [DEBUG] [Thread-115586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:08:10.258 [INFO] [Thread-115586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:08:10.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:08:10.888 [DEBUG] [Thread-115586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:08:10.888 [DEBUG] [Thread-115586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:08:10.889 [DEBUG] [Thread-115586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:08:10.929 [DEBUG] [Thread-115586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:08:10.929 [DEBUG] [Thread-115586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:08:10.932 [DEBUG] [Thread-115586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:08:10.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:08:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:08:10.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:08:10.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:08:10.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:08:10.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:08:10.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.380259 -999.00  +16.70  16.05     46   +5.20 1 1 1 1 1   888    0 12.93 78.98 ----- 19.5 16.1 152.6 22.6 24.3 -25.2 23.6 -24.1 23.3 -23.6 23.9 -24.2
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:08:10.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.380259
2025-12-03T11:08:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:08:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:08:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:08:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:08:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:08:10.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:08:01', tmtdew=13.28, humidity=40.95, cloud=0.0, wind=18.77, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:07:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:08:10.958 [DEBUG] [Thread-115586] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:08:11.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:08:11.053 [DEBUG] [Thread-115589] [transport.py] [_log()] starting thread (client mode): 0xa27b6620
2025-12-03T11:08:11.053 [DEBUG] [Thread-115589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:08:11.068 [DEBUG] [Thread-115589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:08:11.068 [INFO] [Thread-115589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] client lang: <none>
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] server lang: <none>
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] kex follows: False
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] Compression: none
2025-12-03T11:08:11.076 [DEBUG] [Thread-115589] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:08:11.134 [DEBUG] [Thread-115589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:08:11.135 [DEBUG] [Thread-115589] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:08:11.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:08:11.136 [DEBUG] [Thread-115589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:08:11.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:08:11.190 [DEBUG] [Thread-115589] [transport.py] [_log()] userauth is OK
2025-12-03T11:08:11.191 [DEBUG] [Thread-115589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:08:11.191 [DEBUG] [Thread-115589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:08:11.191 [DEBUG] [Thread-115589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:08:11.191 [DEBUG] [Thread-115589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:08:11.209 [INFO] [Thread-115589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:08:11.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:08:11.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:08:12.078 [DEBUG] [Thread-115589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:08:12.079 [DEBUG] [Thread-115589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:08:12.128 [DEBUG] [Thread-115589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:08:12.129 [DEBUG] [Thread-115589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:08:12.137 [DEBUG] [Thread-115589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:08:12.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:08:12.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:08:12.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:08:12.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:08:12.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:08:12.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:08:12.172 [DEBUG] [Thread-115589] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:08:20.991 [DEBUG] [Thread-115591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:36.034 [DEBUG] [Thread-115592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:08:42.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:08:42.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:08:42.199 [DEBUG] [Thread-115593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 8, 33), 13.58, 40.39, 0.0, 20.54, 17.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:08:42.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:08:33
2025-12-03T11:08:42.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:08:43.141 [DEBUG] [Thread-115594] [transport.py] [_log()] starting thread (client mode): 0xa27b6ad0
2025-12-03T11:08:43.141 [DEBUG] [Thread-115594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:08:43.155 [DEBUG] [Thread-115594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:08:43.155 [INFO] [Thread-115594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] client lang: <none>
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] server lang: <none>
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] kex follows: False
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] Compression: none
2025-12-03T11:08:43.158 [DEBUG] [Thread-115594] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:08:43.174 [DEBUG] [Thread-115594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:08:43.174 [DEBUG] [Thread-115594] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:08:43.175 [DEBUG] [Thread-115594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:08:43.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:08:43.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:08:43.176 [DEBUG] [Thread-115594] [transport.py] [_log()] userauth is OK
2025-12-03T11:08:43.176 [DEBUG] [Thread-115594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:08:43.176 [DEBUG] [Thread-115594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:08:43.176 [DEBUG] [Thread-115594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:08:43.176 [DEBUG] [Thread-115594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:08:43.200 [INFO] [Thread-115594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:08:43.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:08:43.778 [DEBUG] [Thread-115594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:08:43.778 [DEBUG] [Thread-115594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:08:43.778 [DEBUG] [Thread-115594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:08:43.819 [DEBUG] [Thread-115594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:08:43.819 [DEBUG] [Thread-115594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:08:43.822 [DEBUG] [Thread-115594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:08:43.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:08:43.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:08:43.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:08:43.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:08:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:08:43.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:08:43.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:08:43.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:08:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:08:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.380953 -999.00  +16.60   8.87     46   +5.20 1 2 1 1 1   888    0 13.37 86.10 ----- 12.7 8.9 146.6 14.2 24.3 -23.8 23.5 -22.8 23.1 -22.6 23.9 -23.6
2025-12-03T11:08:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:08:43.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:08:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.380953
2025-12-03T11:08:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:08:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:08:43.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:08:43.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:08:43.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:08:43.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:08:33', tmtdew=13.58, humidity=40.39, cloud=0.0, wind=20.54, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:08:34.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:08:43.848 [DEBUG] [Thread-115594] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:08:43.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:08:43.944 [DEBUG] [Thread-115597] [transport.py] [_log()] starting thread (client mode): 0xa27b7e50
2025-12-03T11:08:43.944 [DEBUG] [Thread-115597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:08:43.959 [DEBUG] [Thread-115597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:08:43.959 [INFO] [Thread-115597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:08:43.967 [DEBUG] [Thread-115597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] client lang: <none>
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] server lang: <none>
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] kex follows: False
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] Compression: none
2025-12-03T11:08:43.968 [DEBUG] [Thread-115597] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:08:44.026 [DEBUG] [Thread-115597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:08:44.026 [DEBUG] [Thread-115597] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:08:44.026 [DEBUG] [Thread-115597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:08:44.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:08:44.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:08:44.082 [DEBUG] [Thread-115597] [transport.py] [_log()] userauth is OK
2025-12-03T11:08:44.082 [DEBUG] [Thread-115597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:08:44.082 [DEBUG] [Thread-115597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:08:44.082 [DEBUG] [Thread-115597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:08:44.082 [DEBUG] [Thread-115597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:08:44.102 [INFO] [Thread-115597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:08:44.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:08:44.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:08:44.992 [DEBUG] [Thread-115597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:08:44.992 [DEBUG] [Thread-115597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:08:45.040 [DEBUG] [Thread-115597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:08:45.040 [DEBUG] [Thread-115597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:08:45.049 [DEBUG] [Thread-115597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:08:45.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:08:45.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:08:45.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:08:45.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:08:45.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:08:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:08:45.083 [DEBUG] [Thread-115597] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:08:51.062 [DEBUG] [Thread-115599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:51.762 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:08:51.763 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:06.095 [DEBUG] [Thread-115600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:15.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:09:15.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:09:15.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:09:15.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 9, 5), 12.8, 42.5, 0.0, 16.34, 16.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:09:15.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:09:05
2025-12-03T11:09:15.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:09:16.023 [DEBUG] [Thread-115601] [transport.py] [_log()] starting thread (client mode): 0xa51620b0
2025-12-03T11:09:16.024 [DEBUG] [Thread-115601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:09:16.037 [DEBUG] [Thread-115601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:09:16.037 [INFO] [Thread-115601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] client lang: <none>
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] server lang: <none>
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] kex follows: False
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] Compression: none
2025-12-03T11:09:16.039 [DEBUG] [Thread-115601] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:09:16.047 [DEBUG] [Thread-115601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:09:16.047 [DEBUG] [Thread-115601] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:09:16.047 [DEBUG] [Thread-115601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:09:16.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:09:16.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:09:16.048 [DEBUG] [Thread-115601] [transport.py] [_log()] userauth is OK
2025-12-03T11:09:16.048 [DEBUG] [Thread-115601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:09:16.048 [DEBUG] [Thread-115601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:09:16.048 [DEBUG] [Thread-115601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:09:16.048 [DEBUG] [Thread-115601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:09:16.066 [INFO] [Thread-115601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:09:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:09:16.659 [DEBUG] [Thread-115601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:09:16.659 [DEBUG] [Thread-115601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:09:16.660 [DEBUG] [Thread-115601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:09:16.700 [DEBUG] [Thread-115601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:09:16.700 [DEBUG] [Thread-115601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:09:16.703 [DEBUG] [Thread-115601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:09:16.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:09:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:09:16.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:09:16.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:09:16.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:09:16.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:09:16.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.381301 -999.00  +16.60  20.89     44   +4.50 1 1 1 1 1   888    0 13.47 86.34 ----- 17.7 20.9 168.8 28.3 24.1 -25.4 23.3 -24.0 23.1 -22.8 23.7 -24.7
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:09:16.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.381301
2025-12-03T11:09:16.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:09:16.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:09:16.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:09:16.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:09:16.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:09:16.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:09:05', tmtdew=12.8, humidity=42.5, cloud=0.0, wind=16.34, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:09:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:09:16.729 [DEBUG] [Thread-115601] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:09:16.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:09:16.825 [DEBUG] [Thread-115604] [transport.py] [_log()] starting thread (client mode): 0xa27c1360
2025-12-03T11:09:16.825 [DEBUG] [Thread-115604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:09:16.840 [DEBUG] [Thread-115604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:09:16.840 [INFO] [Thread-115604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] client lang: <none>
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] server lang: <none>
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] kex follows: False
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:09:16.848 [DEBUG] [Thread-115604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:09:16.849 [DEBUG] [Thread-115604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:09:16.849 [DEBUG] [Thread-115604] [transport.py] [_log()] Compression: none
2025-12-03T11:09:16.849 [DEBUG] [Thread-115604] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:09:16.906 [DEBUG] [Thread-115604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:09:16.907 [DEBUG] [Thread-115604] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:09:16.907 [DEBUG] [Thread-115604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:09:16.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:09:16.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:09:16.963 [DEBUG] [Thread-115604] [transport.py] [_log()] userauth is OK
2025-12-03T11:09:16.963 [DEBUG] [Thread-115604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:09:16.963 [DEBUG] [Thread-115604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:09:16.964 [DEBUG] [Thread-115604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:09:16.964 [DEBUG] [Thread-115604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:09:16.982 [INFO] [Thread-115604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:09:16.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:09:16.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:09:17.810 [DEBUG] [Thread-115604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:09:17.810 [DEBUG] [Thread-115604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:09:17.858 [DEBUG] [Thread-115604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:09:17.858 [DEBUG] [Thread-115604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:09:17.866 [DEBUG] [Thread-115604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:09:17.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:09:17.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:09:17.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:09:17.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:09:17.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:09:17.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:09:17.901 [DEBUG] [Thread-115604] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:09:21.122 [DEBUG] [Thread-115606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:36.162 [DEBUG] [Thread-115607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:42.253 [DEBUG] [Thread-115608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:09:47.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:09:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:09:48.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 9, 37), 13.24, 40.9, 0.0, 16.29, 16.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:09:48.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:09:37
2025-12-03T11:09:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:09:48.879 [DEBUG] [Thread-115609] [transport.py] [_log()] starting thread (client mode): 0xa27c3c10
2025-12-03T11:09:48.879 [DEBUG] [Thread-115609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:09:48.899 [DEBUG] [Thread-115609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:09:48.899 [INFO] [Thread-115609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] client lang: <none>
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] server lang: <none>
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] kex follows: False
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:09:48.900 [DEBUG] [Thread-115609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:09:48.901 [DEBUG] [Thread-115609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:09:48.901 [DEBUG] [Thread-115609] [transport.py] [_log()] Compression: none
2025-12-03T11:09:48.901 [DEBUG] [Thread-115609] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:09:48.920 [DEBUG] [Thread-115609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:09:48.920 [DEBUG] [Thread-115609] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:09:48.921 [DEBUG] [Thread-115609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:09:48.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:09:48.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:09:48.922 [DEBUG] [Thread-115609] [transport.py] [_log()] userauth is OK
2025-12-03T11:09:48.923 [DEBUG] [Thread-115609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:09:48.923 [DEBUG] [Thread-115609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:09:48.923 [DEBUG] [Thread-115609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:09:48.923 [DEBUG] [Thread-115609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:09:48.948 [INFO] [Thread-115609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:09:48.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:09:49.567 [DEBUG] [Thread-115609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:09:49.567 [DEBUG] [Thread-115609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:09:49.567 [DEBUG] [Thread-115609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:09:49.608 [DEBUG] [Thread-115609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:09:49.608 [DEBUG] [Thread-115609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:09:49.611 [DEBUG] [Thread-115609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:09:49.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:09:49.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:09:49.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:09:49.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:09:49.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:09:49.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:09:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:09:49.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.381301 -999.00  +16.60  20.89     44   +4.50 1 1 1 1 1   888    0 13.47 86.34 ----- 17.7 20.9 168.8 28.3 24.1 -25.4 23.3 -24.0 23.1 -22.8 23.7 -24.7
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.381301
2025-12-03T11:09:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:09:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:09:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:09:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:09:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:09:49.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:09:37', tmtdew=13.24, humidity=40.9, cloud=0.0, wind=16.29, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:09:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:09:49.635 [DEBUG] [Thread-115609] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:09:49.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:09:49.729 [DEBUG] [Thread-115612] [transport.py] [_log()] starting thread (client mode): 0xa27c07c0
2025-12-03T11:09:49.729 [DEBUG] [Thread-115612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:09:49.744 [DEBUG] [Thread-115612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:09:49.744 [INFO] [Thread-115612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] client lang: <none>
2025-12-03T11:09:49.752 [DEBUG] [Thread-115612] [transport.py] [_log()] server lang: <none>
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] kex follows: False
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] Compression: none
2025-12-03T11:09:49.753 [DEBUG] [Thread-115612] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:09:49.810 [DEBUG] [Thread-115612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:09:49.810 [DEBUG] [Thread-115612] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:09:49.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:09:49.811 [DEBUG] [Thread-115612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:09:49.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:09:49.867 [DEBUG] [Thread-115612] [transport.py] [_log()] userauth is OK
2025-12-03T11:09:49.867 [DEBUG] [Thread-115612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:09:49.867 [DEBUG] [Thread-115612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:09:49.867 [DEBUG] [Thread-115612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:09:49.867 [DEBUG] [Thread-115612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:09:49.886 [INFO] [Thread-115612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:09:49.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:09:49.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:09:50.746 [DEBUG] [Thread-115612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:09:50.746 [DEBUG] [Thread-115612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:09:50.794 [DEBUG] [Thread-115612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:09:50.794 [DEBUG] [Thread-115612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:09:50.803 [DEBUG] [Thread-115612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:09:50.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:09:50.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:09:50.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:09:50.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:09:50.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:09:50.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:09:50.842 [DEBUG] [Thread-115612] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:09:51.194 [DEBUG] [Thread-115614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:51.901 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:09:51.902 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:06.237 [DEBUG] [Thread-115615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:20.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:10:20.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:10:20.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:10:21.267 [DEBUG] [Thread-115616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 10, 9), 13.13, 41.16, 0.0, 15.99, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:10:21.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:10:09
2025-12-03T11:10:21.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:10:21.815 [DEBUG] [Thread-115617] [transport.py] [_log()] starting thread (client mode): 0xa27c3b50
2025-12-03T11:10:21.816 [DEBUG] [Thread-115617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:10:21.836 [DEBUG] [Thread-115617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:10:21.837 [INFO] [Thread-115617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:21.840 [DEBUG] [Thread-115617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] client lang: <none>
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] server lang: <none>
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] kex follows: False
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] Compression: none
2025-12-03T11:10:21.841 [DEBUG] [Thread-115617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:10:21.860 [DEBUG] [Thread-115617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:10:21.860 [DEBUG] [Thread-115617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:10:21.861 [DEBUG] [Thread-115617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:10:21.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:10:21.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:10:21.863 [DEBUG] [Thread-115617] [transport.py] [_log()] userauth is OK
2025-12-03T11:10:21.864 [DEBUG] [Thread-115617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:10:21.864 [DEBUG] [Thread-115617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:10:21.864 [DEBUG] [Thread-115617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:10:21.864 [DEBUG] [Thread-115617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:10:21.882 [INFO] [Thread-115617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:10:21.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:10:22.538 [DEBUG] [Thread-115617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:10:22.538 [DEBUG] [Thread-115617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:10:22.539 [DEBUG] [Thread-115617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:10:22.579 [DEBUG] [Thread-115617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:10:22.579 [DEBUG] [Thread-115617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:10:22.582 [DEBUG] [Thread-115617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:10:22.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:10:22.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:10:22.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:10:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:10:22.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:10:22.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:10:22.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.381648 -999.00  +16.50  11.08     45   +4.60 1 1 1 1 1   888    0 13.45 85.41 ----- 12.1 11.1 154.8 18.3 24.0 -25.9 23.2 -23.9 22.9 -23.9 23.6 -24.9
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:10:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.381648
2025-12-03T11:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:10:22.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:10:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:10:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:10:09', tmtdew=13.13, humidity=41.16, cloud=0.0, wind=15.99, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:09:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:10:22.607 [DEBUG] [Thread-115617] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:10:22.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:10:22.703 [DEBUG] [Thread-115620] [transport.py] [_log()] starting thread (client mode): 0xa27b6fb0
2025-12-03T11:10:22.703 [DEBUG] [Thread-115620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:10:22.718 [DEBUG] [Thread-115620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:10:22.718 [INFO] [Thread-115620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:10:22.725 [DEBUG] [Thread-115620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:10:22.725 [DEBUG] [Thread-115620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:10:22.725 [DEBUG] [Thread-115620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] client lang: <none>
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] server lang: <none>
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] kex follows: False
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] Compression: none
2025-12-03T11:10:22.726 [DEBUG] [Thread-115620] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:10:22.783 [DEBUG] [Thread-115620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:10:22.784 [DEBUG] [Thread-115620] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:10:22.784 [DEBUG] [Thread-115620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:10:22.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:10:22.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:10:22.839 [DEBUG] [Thread-115620] [transport.py] [_log()] userauth is OK
2025-12-03T11:10:22.839 [DEBUG] [Thread-115620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:10:22.840 [DEBUG] [Thread-115620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:10:22.840 [DEBUG] [Thread-115620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:10:22.840 [DEBUG] [Thread-115620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:10:22.858 [INFO] [Thread-115620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:10:22.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:10:22.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:10:23.681 [DEBUG] [Thread-115620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:10:23.681 [DEBUG] [Thread-115620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:10:23.729 [DEBUG] [Thread-115620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:10:23.729 [DEBUG] [Thread-115620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:10:23.737 [DEBUG] [Thread-115620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:10:23.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:10:23.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:10:23.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:10:23.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:10:23.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:10:23.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:10:23.771 [DEBUG] [Thread-115620] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:10:36.298 [DEBUG] [Thread-115622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:42.282 [DEBUG] [Thread-115623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:51.337 [DEBUG] [Thread-115624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:52.043 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:52.043 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:10:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:10:53.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:10:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:10:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 10, 41), 13.09, 41.45, 0.0, 19.89, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:10:54.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:10:41
2025-12-03T11:10:54.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:10:54.740 [DEBUG] [Thread-115625] [transport.py] [_log()] starting thread (client mode): 0xa27c16f0
2025-12-03T11:10:54.740 [DEBUG] [Thread-115625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:10:54.760 [DEBUG] [Thread-115625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:10:54.760 [INFO] [Thread-115625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] client lang: <none>
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] server lang: <none>
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] kex follows: False
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:10:54.763 [DEBUG] [Thread-115625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:10:54.764 [DEBUG] [Thread-115625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:10:54.764 [DEBUG] [Thread-115625] [transport.py] [_log()] Compression: none
2025-12-03T11:10:54.764 [DEBUG] [Thread-115625] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:10:54.780 [DEBUG] [Thread-115625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:10:54.780 [DEBUG] [Thread-115625] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:10:54.780 [DEBUG] [Thread-115625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:10:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:10:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:10:54.782 [DEBUG] [Thread-115625] [transport.py] [_log()] userauth is OK
2025-12-03T11:10:54.783 [DEBUG] [Thread-115625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:10:54.783 [DEBUG] [Thread-115625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:10:54.783 [DEBUG] [Thread-115625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:10:54.783 [DEBUG] [Thread-115625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:10:54.800 [INFO] [Thread-115625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:10:54.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:10:55.434 [DEBUG] [Thread-115625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:10:55.434 [DEBUG] [Thread-115625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:10:55.434 [DEBUG] [Thread-115625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:10:55.475 [DEBUG] [Thread-115625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:10:55.475 [DEBUG] [Thread-115625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:10:55.478 [DEBUG] [Thread-115625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:10:55.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:10:55.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:10:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:10:55.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:10:55.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:10:55.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:10:55.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:10:55.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:10:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:10:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.381995 -999.00  +16.60  19.68     46   +4.90 1 2 1 1 1   888    0 13.61 90.80 ----- 16.2 19.7 125.4 24.2 24.2 -22.8 23.4 -22.8 22.9 -21.4 23.9 -22.9
2025-12-03T11:10:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:10:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:10:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.381995
2025-12-03T11:10:55.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:10:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:10:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:10:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:10:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:10:55.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:10:41', tmtdew=13.09, humidity=41.45, cloud=0.0, wind=19.89, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:10:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:10:55.504 [DEBUG] [Thread-115625] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:10:55.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:10:55.599 [DEBUG] [Thread-115628] [transport.py] [_log()] starting thread (client mode): 0xa27c3580
2025-12-03T11:10:55.599 [DEBUG] [Thread-115628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:10:55.614 [DEBUG] [Thread-115628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:10:55.614 [INFO] [Thread-115628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] client lang: <none>
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] server lang: <none>
2025-12-03T11:10:55.624 [DEBUG] [Thread-115628] [transport.py] [_log()] kex follows: False
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] Compression: none
2025-12-03T11:10:55.625 [DEBUG] [Thread-115628] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:10:55.681 [DEBUG] [Thread-115628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:10:55.682 [DEBUG] [Thread-115628] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:10:55.682 [DEBUG] [Thread-115628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:10:55.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:10:55.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:10:55.739 [DEBUG] [Thread-115628] [transport.py] [_log()] userauth is OK
2025-12-03T11:10:55.739 [DEBUG] [Thread-115628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:10:55.739 [DEBUG] [Thread-115628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:10:55.740 [DEBUG] [Thread-115628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:10:55.740 [DEBUG] [Thread-115628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:10:55.759 [INFO] [Thread-115628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:10:55.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:10:55.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:10:56.597 [DEBUG] [Thread-115628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:10:56.598 [DEBUG] [Thread-115628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:10:56.645 [DEBUG] [Thread-115628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:10:56.646 [DEBUG] [Thread-115628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:10:56.654 [DEBUG] [Thread-115628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:10:56.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:10:56.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:10:56.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:10:56.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:10:56.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:10:56.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:10:56.689 [DEBUG] [Thread-115628] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:11:06.368 [DEBUG] [Thread-115630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:21.409 [DEBUG] [Thread-115631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:26.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:11:26.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:11:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:11:27.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 11, 13), 12.92, 41.93, 0.0, 18.83, 16.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:11:27.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:11:13
2025-12-03T11:11:27.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:11:27.730 [DEBUG] [Thread-115632] [transport.py] [_log()] starting thread (client mode): 0xa27c3910
2025-12-03T11:11:27.730 [DEBUG] [Thread-115632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:11:27.750 [DEBUG] [Thread-115632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:11:27.750 [INFO] [Thread-115632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] client lang: <none>
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] server lang: <none>
2025-12-03T11:11:27.753 [DEBUG] [Thread-115632] [transport.py] [_log()] kex follows: False
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] Compression: none
2025-12-03T11:11:27.754 [DEBUG] [Thread-115632] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:11:27.770 [DEBUG] [Thread-115632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:11:27.770 [DEBUG] [Thread-115632] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:11:27.770 [DEBUG] [Thread-115632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:11:27.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:11:27.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:11:27.771 [DEBUG] [Thread-115632] [transport.py] [_log()] userauth is OK
2025-12-03T11:11:27.771 [DEBUG] [Thread-115632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:11:27.771 [DEBUG] [Thread-115632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:11:27.771 [DEBUG] [Thread-115632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:11:27.771 [DEBUG] [Thread-115632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:11:27.788 [INFO] [Thread-115632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:11:27.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:11:28.422 [DEBUG] [Thread-115632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:11:28.422 [DEBUG] [Thread-115632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:11:28.422 [DEBUG] [Thread-115632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:11:28.463 [DEBUG] [Thread-115632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:11:28.463 [DEBUG] [Thread-115632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:11:28.465 [DEBUG] [Thread-115632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:11:28.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:11:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:11:28.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:11:28.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:11:28.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:11:28.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:11:28.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.382342 -999.00  +16.80  11.18     46   +5.30 1 2 1 1 1   888    0 13.39 85.03 ----- 10.2 11.2 157.8 12.7 24.3 -22.7 23.6 -22.2 23.1 -21.5 24.0 -22.1
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.382342
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:11:28.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:11:13', tmtdew=12.92, humidity=41.93, cloud=0.0, wind=18.83, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:10:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:11:28.483 [DEBUG] [Thread-115632] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:11:28.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:11:28.569 [DEBUG] [Thread-115635] [transport.py] [_log()] starting thread (client mode): 0xa27c1a20
2025-12-03T11:11:28.569 [DEBUG] [Thread-115635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:11:28.583 [DEBUG] [Thread-115635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:11:28.583 [INFO] [Thread-115635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] client lang: <none>
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] server lang: <none>
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] kex follows: False
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] Compression: none
2025-12-03T11:11:28.591 [DEBUG] [Thread-115635] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:11:28.649 [DEBUG] [Thread-115635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:11:28.649 [DEBUG] [Thread-115635] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:11:28.649 [DEBUG] [Thread-115635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:11:28.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:11:28.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:11:28.707 [DEBUG] [Thread-115635] [transport.py] [_log()] userauth is OK
2025-12-03T11:11:28.707 [DEBUG] [Thread-115635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:11:28.707 [DEBUG] [Thread-115635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:11:28.707 [DEBUG] [Thread-115635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:11:28.707 [DEBUG] [Thread-115635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:11:28.721 [INFO] [Thread-115635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:11:28.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:11:28.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:11:29.576 [DEBUG] [Thread-115635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:11:29.576 [DEBUG] [Thread-115635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:11:29.624 [DEBUG] [Thread-115635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:11:29.624 [DEBUG] [Thread-115635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:11:29.632 [DEBUG] [Thread-115635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:11:29.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:11:29.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:11:29.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:11:29.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:11:29.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:11:29.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:11:29.672 [DEBUG] [Thread-115635] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:11:36.436 [DEBUG] [Thread-115637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:42.355 [DEBUG] [Thread-115638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:51.480 [DEBUG] [Thread-115639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:52.182 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:52.183 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:11:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:11:59.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:11:59.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:12:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 11, 45), 13.3, 40.76, 0.0, 17.61, 16.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:12:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:11:45
2025-12-03T11:12:00.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:12:00.666 [DEBUG] [Thread-115640] [transport.py] [_log()] starting thread (client mode): 0xa27c21a0
2025-12-03T11:12:00.666 [DEBUG] [Thread-115640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:12:00.687 [DEBUG] [Thread-115640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:12:00.687 [INFO] [Thread-115640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] client lang: <none>
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] server lang: <none>
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] kex follows: False
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:12:00.690 [DEBUG] [Thread-115640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:12:00.691 [DEBUG] [Thread-115640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:12:00.691 [DEBUG] [Thread-115640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:12:00.691 [DEBUG] [Thread-115640] [transport.py] [_log()] Compression: none
2025-12-03T11:12:00.691 [DEBUG] [Thread-115640] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:12:00.707 [DEBUG] [Thread-115640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:12:00.707 [DEBUG] [Thread-115640] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:12:00.708 [DEBUG] [Thread-115640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:12:00.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:12:00.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:12:00.710 [DEBUG] [Thread-115640] [transport.py] [_log()] userauth is OK
2025-12-03T11:12:00.710 [DEBUG] [Thread-115640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:12:00.710 [DEBUG] [Thread-115640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:12:00.710 [DEBUG] [Thread-115640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:12:00.710 [DEBUG] [Thread-115640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:12:00.727 [INFO] [Thread-115640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:12:00.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:12:01.373 [DEBUG] [Thread-115640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:12:01.373 [DEBUG] [Thread-115640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:12:01.374 [DEBUG] [Thread-115640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:12:01.414 [DEBUG] [Thread-115640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:12:01.414 [DEBUG] [Thread-115640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:12:01.416 [DEBUG] [Thread-115640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:12:01.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:12:01.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:12:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:12:01.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:12:01.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:12:01.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:12:01.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.382690 -999.00  +17.20  14.46     45   +5.30 1 2 1 1 1   888    0 13.52 79.61 ----- 18.2 14.5 136.8 19.8 24.4 -23.3 23.6 -23.0 23.2 -22.8 24.0 -23.2
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:12:01.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.382690
2025-12-03T11:12:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:12:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:12:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:12:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:12:01.442 [DEBUG] [Thread-115640] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:12:01.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:12:01.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:11:45', tmtdew=13.3, humidity=40.76, cloud=0.0, wind=17.61, temperature=16.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:11:04.416', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:12:01.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:12:01.539 [DEBUG] [Thread-115643] [transport.py] [_log()] starting thread (client mode): 0xa27c0a30
2025-12-03T11:12:01.539 [DEBUG] [Thread-115643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:12:01.554 [DEBUG] [Thread-115643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:12:01.554 [INFO] [Thread-115643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] client lang: <none>
2025-12-03T11:12:01.562 [DEBUG] [Thread-115643] [transport.py] [_log()] server lang: <none>
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] kex follows: False
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] Compression: none
2025-12-03T11:12:01.563 [DEBUG] [Thread-115643] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:12:01.620 [DEBUG] [Thread-115643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:12:01.621 [DEBUG] [Thread-115643] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:12:01.621 [DEBUG] [Thread-115643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:12:01.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:12:01.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:12:01.677 [DEBUG] [Thread-115643] [transport.py] [_log()] userauth is OK
2025-12-03T11:12:01.677 [DEBUG] [Thread-115643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:12:01.677 [DEBUG] [Thread-115643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:12:01.677 [DEBUG] [Thread-115643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:12:01.677 [DEBUG] [Thread-115643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:12:01.691 [INFO] [Thread-115643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:12:01.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:12:01.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:12:02.559 [DEBUG] [Thread-115643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:12:02.559 [DEBUG] [Thread-115643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:12:02.610 [DEBUG] [Thread-115643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:12:02.610 [DEBUG] [Thread-115643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:12:02.618 [DEBUG] [Thread-115643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:12:02.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:12:02.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:12:02.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:12:02.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:12:02.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:12:02.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:12:02.652 [DEBUG] [Thread-115643] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:12:06.511 [DEBUG] [Thread-115645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:21.543 [DEBUG] [Thread-115646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:12:32.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:12:32.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:12:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 12, 18), 13.36, 40.6, 0.0, 17.89, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:12:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:12:18
2025-12-03T11:12:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:12:33.616 [DEBUG] [Thread-115647] [transport.py] [_log()] starting thread (client mode): 0xa27b6200
2025-12-03T11:12:33.616 [DEBUG] [Thread-115647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:12:33.636 [DEBUG] [Thread-115647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:12:33.636 [INFO] [Thread-115647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] client lang: <none>
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] server lang: <none>
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] kex follows: False
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] Compression: none
2025-12-03T11:12:33.639 [DEBUG] [Thread-115647] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:12:33.655 [DEBUG] [Thread-115647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:12:33.655 [DEBUG] [Thread-115647] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:12:33.656 [DEBUG] [Thread-115647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:12:33.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:12:33.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:12:33.657 [DEBUG] [Thread-115647] [transport.py] [_log()] userauth is OK
2025-12-03T11:12:33.657 [DEBUG] [Thread-115647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:12:33.658 [DEBUG] [Thread-115647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:12:33.658 [DEBUG] [Thread-115647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:12:33.658 [DEBUG] [Thread-115647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:12:33.675 [INFO] [Thread-115647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:12:33.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:12:34.348 [DEBUG] [Thread-115647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:12:34.348 [DEBUG] [Thread-115647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:12:34.349 [DEBUG] [Thread-115647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:12:34.389 [DEBUG] [Thread-115647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:12:34.389 [DEBUG] [Thread-115647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:12:34.392 [DEBUG] [Thread-115647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:12:34.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:12:34.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:12:34.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:12:34.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:12:34.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:12:34.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:12:34.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:12:34.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:12:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:12:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.383037 -999.00  +17.20  16.62     44   +5.10 1 2 1 1 1   888    0 13.38 82.89 ----- 15.8 16.6 133.4 20.8 24.5 -23.0 23.7 -23.0 23.4 -22.4 24.1 -23.4
2025-12-03T11:12:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:12:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:12:34.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.383037
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:12:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:12:18', tmtdew=13.36, humidity=40.6, cloud=0.0, wind=17.89, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:11:34.397', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:12:34.420 [DEBUG] [Thread-115647] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:12:34.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:12:34.517 [DEBUG] [Thread-115650] [transport.py] [_log()] starting thread (client mode): 0xa27b6860
2025-12-03T11:12:34.517 [DEBUG] [Thread-115650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:12:34.532 [DEBUG] [Thread-115650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:12:34.532 [INFO] [Thread-115650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:12:34.539 [DEBUG] [Thread-115650] [transport.py] [_log()] client lang: <none>
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] server lang: <none>
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] kex follows: False
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] Compression: none
2025-12-03T11:12:34.540 [DEBUG] [Thread-115650] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:12:34.598 [DEBUG] [Thread-115650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:12:34.598 [DEBUG] [Thread-115650] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:12:34.599 [DEBUG] [Thread-115650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:12:34.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:12:34.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:12:34.655 [DEBUG] [Thread-115650] [transport.py] [_log()] userauth is OK
2025-12-03T11:12:34.655 [DEBUG] [Thread-115650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:12:34.655 [DEBUG] [Thread-115650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:12:34.655 [DEBUG] [Thread-115650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:12:34.655 [DEBUG] [Thread-115650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:12:34.677 [INFO] [Thread-115650] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:12:34.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:12:34.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:12:35.510 [DEBUG] [Thread-115650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:12:35.510 [DEBUG] [Thread-115650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:12:35.558 [DEBUG] [Thread-115650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:12:35.558 [DEBUG] [Thread-115650] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:12:35.567 [DEBUG] [Thread-115650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:12:35.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:12:35.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:12:35.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:12:35.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:12:35.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:12:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:12:35.602 [DEBUG] [Thread-115650] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:12:36.572 [DEBUG] [Thread-115652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:42.403 [DEBUG] [Thread-115653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:51.621 [DEBUG] [Thread-115654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:52.324 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:12:52.326 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:05.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:13:05.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:13:05.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:13:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 12, 50), 13.25, 41.1, 0.0, 11.84, 16.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:13:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:12:50
2025-12-03T11:13:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:13:06.565 [DEBUG] [Thread-115655] [transport.py] [_log()] starting thread (client mode): 0xa27b4b50
2025-12-03T11:13:06.565 [DEBUG] [Thread-115655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:13:06.584 [DEBUG] [Thread-115655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:13:06.584 [INFO] [Thread-115655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:13:06.587 [DEBUG] [Thread-115655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:13:06.587 [DEBUG] [Thread-115655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:13:06.587 [DEBUG] [Thread-115655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:13:06.587 [DEBUG] [Thread-115655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:06.587 [DEBUG] [Thread-115655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] client lang: <none>
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] server lang: <none>
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] kex follows: False
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] Compression: none
2025-12-03T11:13:06.588 [DEBUG] [Thread-115655] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:13:06.605 [DEBUG] [Thread-115655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:13:06.605 [DEBUG] [Thread-115655] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:13:06.606 [DEBUG] [Thread-115655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:13:06.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:13:06.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:13:06.607 [DEBUG] [Thread-115655] [transport.py] [_log()] userauth is OK
2025-12-03T11:13:06.607 [DEBUG] [Thread-115655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:13:06.608 [DEBUG] [Thread-115655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:13:06.608 [DEBUG] [Thread-115655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:13:06.608 [DEBUG] [Thread-115655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:13:06.625 [INFO] [Thread-115655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:13:06.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:13:06.647 [DEBUG] [Thread-115657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:07.259 [DEBUG] [Thread-115655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:13:07.259 [DEBUG] [Thread-115655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:13:07.259 [DEBUG] [Thread-115655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:13:07.300 [DEBUG] [Thread-115655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:13:07.300 [DEBUG] [Thread-115655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:13:07.303 [DEBUG] [Thread-115655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:13:07.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:13:07.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:13:07.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:13:07.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:13:07.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:13:07.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:13:07.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.383732 -999.00  +16.70  12.64     46   +5.20 1 2 1 1 1   888    0 13.48 78.64 ----- 14.2 12.6 124.7 16.3 24.6 -24.8 23.9 -22.7 23.4 -23.1 24.2 -23.8
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:13:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.383732
2025-12-03T11:13:07.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:13:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:13:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:13:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:13:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:13:07.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:12:50', tmtdew=13.25, humidity=41.1, cloud=0.0, wind=11.84, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:12:34.445', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:13:07.326 [DEBUG] [Thread-115655] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:13:07.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:13:07.426 [DEBUG] [Thread-115659] [transport.py] [_log()] starting thread (client mode): 0xa27c0790
2025-12-03T11:13:07.427 [DEBUG] [Thread-115659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:13:07.442 [DEBUG] [Thread-115659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:13:07.442 [INFO] [Thread-115659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:13:07.449 [DEBUG] [Thread-115659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:13:07.449 [DEBUG] [Thread-115659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:13:07.449 [DEBUG] [Thread-115659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] client lang: <none>
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] server lang: <none>
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] kex follows: False
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] Compression: none
2025-12-03T11:13:07.450 [DEBUG] [Thread-115659] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:13:07.510 [DEBUG] [Thread-115659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:13:07.510 [DEBUG] [Thread-115659] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:13:07.511 [DEBUG] [Thread-115659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:13:07.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:13:07.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:13:07.568 [DEBUG] [Thread-115659] [transport.py] [_log()] userauth is OK
2025-12-03T11:13:07.569 [DEBUG] [Thread-115659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:13:07.569 [DEBUG] [Thread-115659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:13:07.569 [DEBUG] [Thread-115659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:13:07.569 [DEBUG] [Thread-115659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:13:07.588 [INFO] [Thread-115659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:13:07.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:13:07.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:13:08.434 [DEBUG] [Thread-115659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:13:08.434 [DEBUG] [Thread-115659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:13:08.481 [DEBUG] [Thread-115659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:13:08.482 [DEBUG] [Thread-115659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:13:08.490 [DEBUG] [Thread-115659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:13:08.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:13:08.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:13:08.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:13:08.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:13:08.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:13:08.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:13:08.524 [DEBUG] [Thread-115659] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:13:21.680 [DEBUG] [Thread-115661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:36.716 [DEBUG] [Thread-115662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:38.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:13:38.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:13:38.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:13:39.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 13, 22), 13.07, 41.56, 0.0, 14.06, 16.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:13:39.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:13:22
2025-12-03T11:13:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:13:39.479 [DEBUG] [Thread-115663] [transport.py] [_log()] starting thread (client mode): 0xa27c1420
2025-12-03T11:13:39.479 [DEBUG] [Thread-115663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:13:39.498 [DEBUG] [Thread-115663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:13:39.498 [INFO] [Thread-115663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] client lang: <none>
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] server lang: <none>
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] kex follows: False
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:13:39.501 [DEBUG] [Thread-115663] [transport.py] [_log()] Compression: none
2025-12-03T11:13:39.502 [DEBUG] [Thread-115663] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:13:39.521 [DEBUG] [Thread-115663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:13:39.521 [DEBUG] [Thread-115663] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:13:39.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:13:39.522 [DEBUG] [Thread-115663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:13:39.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:13:39.524 [DEBUG] [Thread-115663] [transport.py] [_log()] userauth is OK
2025-12-03T11:13:39.524 [DEBUG] [Thread-115663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:13:39.524 [DEBUG] [Thread-115663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:13:39.524 [DEBUG] [Thread-115663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:13:39.524 [DEBUG] [Thread-115663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:13:39.559 [INFO] [Thread-115663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:13:39.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:13:40.180 [DEBUG] [Thread-115663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:13:40.180 [DEBUG] [Thread-115663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:13:40.181 [DEBUG] [Thread-115663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:13:40.221 [DEBUG] [Thread-115663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:13:40.221 [DEBUG] [Thread-115663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:13:40.224 [DEBUG] [Thread-115663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:13:40.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:13:40.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:13:40.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:13:40.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:13:40.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:13:40.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:13:40.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:13:40.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.384078 -999.00  +16.90  16.34     46   +5.20 1 2 1 1 1   888    0 13.47 74.82 ----- 16.5 16.3 110.8 19.9 24.6 -23.2 24.0 -22.7 23.4 -23.0 24.2 -23.4
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.384078
2025-12-03T11:13:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:13:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:13:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:13:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:13:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:13:40.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:13:22', tmtdew=13.07, humidity=41.56, cloud=0.0, wind=14.06, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:13:04.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:13:40.247 [DEBUG] [Thread-115663] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:13:40.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:13:40.344 [DEBUG] [Thread-115666] [transport.py] [_log()] starting thread (client mode): 0xa27c07c0
2025-12-03T11:13:40.344 [DEBUG] [Thread-115666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:13:40.358 [DEBUG] [Thread-115666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:13:40.358 [INFO] [Thread-115666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:13:40.366 [DEBUG] [Thread-115666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:13:40.366 [DEBUG] [Thread-115666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:13:40.366 [DEBUG] [Thread-115666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:13:40.366 [DEBUG] [Thread-115666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:40.366 [DEBUG] [Thread-115666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] client lang: <none>
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] server lang: <none>
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] kex follows: False
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:13:40.367 [DEBUG] [Thread-115666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:13:40.368 [DEBUG] [Thread-115666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:13:40.368 [DEBUG] [Thread-115666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:13:40.368 [DEBUG] [Thread-115666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:13:40.368 [DEBUG] [Thread-115666] [transport.py] [_log()] Compression: none
2025-12-03T11:13:40.368 [DEBUG] [Thread-115666] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:13:40.426 [DEBUG] [Thread-115666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:13:40.426 [DEBUG] [Thread-115666] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:13:40.427 [DEBUG] [Thread-115666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:13:40.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:13:40.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:13:40.482 [DEBUG] [Thread-115666] [transport.py] [_log()] userauth is OK
2025-12-03T11:13:40.482 [DEBUG] [Thread-115666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:13:40.482 [DEBUG] [Thread-115666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:13:40.483 [DEBUG] [Thread-115666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:13:40.483 [DEBUG] [Thread-115666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:13:40.502 [INFO] [Thread-115666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:13:40.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:13:40.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:13:41.342 [DEBUG] [Thread-115666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:13:41.342 [DEBUG] [Thread-115666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:13:41.390 [DEBUG] [Thread-115666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:13:41.390 [DEBUG] [Thread-115666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:13:41.399 [DEBUG] [Thread-115666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:13:41.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:13:41.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:13:41.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:13:41.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:13:41.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:13:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:13:41.434 [DEBUG] [Thread-115666] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:13:42.452 [DEBUG] [Thread-115668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:51.750 [DEBUG] [Thread-115669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:52.481 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:13:52.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:06.794 [DEBUG] [Thread-115670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:14:11.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:14:11.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:14:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 13, 54), 13.05, 41.6, 0.0, 16.6, 16.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:14:12.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:13:54
2025-12-03T11:14:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:14:12.425 [DEBUG] [Thread-115671] [transport.py] [_log()] starting thread (client mode): 0xa27c3d30
2025-12-03T11:14:12.425 [DEBUG] [Thread-115671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:14:12.446 [DEBUG] [Thread-115671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:14:12.446 [INFO] [Thread-115671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] client lang: <none>
2025-12-03T11:14:12.449 [DEBUG] [Thread-115671] [transport.py] [_log()] server lang: <none>
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] kex follows: False
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] Compression: none
2025-12-03T11:14:12.450 [DEBUG] [Thread-115671] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:14:12.467 [DEBUG] [Thread-115671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:14:12.468 [DEBUG] [Thread-115671] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:14:12.469 [DEBUG] [Thread-115671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:14:12.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:14:12.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:14:12.471 [DEBUG] [Thread-115671] [transport.py] [_log()] userauth is OK
2025-12-03T11:14:12.471 [DEBUG] [Thread-115671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:14:12.471 [DEBUG] [Thread-115671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:14:12.472 [DEBUG] [Thread-115671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:14:12.472 [DEBUG] [Thread-115671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:14:12.496 [INFO] [Thread-115671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:14:12.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:14:13.140 [DEBUG] [Thread-115671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:14:13.140 [DEBUG] [Thread-115671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:14:13.141 [DEBUG] [Thread-115671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:14:13.182 [DEBUG] [Thread-115671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:14:13.182 [DEBUG] [Thread-115671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:14:13.185 [DEBUG] [Thread-115671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:14:13.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:14:13.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:14:13.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:14:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:14:13.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:14:13.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:14:13.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:14:13.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:14:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:14:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.384426 -999.00  +17.00   9.80     45   +5.20 1 2 1 1 1   888    0 13.59 77.54 ----- 12.4 9.8 119.2 18.7 24.6 -26.3 24.1 -23.0 23.6 -22.6 24.3 -22.4
2025-12-03T11:14:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:14:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:14:13.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.384426
2025-12-03T11:14:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:14:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:14:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:14:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:14:13.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:14:13.208 [DEBUG] [Thread-115671] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:14:13.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:13:54', tmtdew=13.05, humidity=41.6, cloud=0.0, wind=16.6, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:13:34.406', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:14:13.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:14:13.310 [DEBUG] [Thread-115674] [transport.py] [_log()] starting thread (client mode): 0xa27c10c0
2025-12-03T11:14:13.310 [DEBUG] [Thread-115674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:14:13.324 [DEBUG] [Thread-115674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:14:13.324 [INFO] [Thread-115674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] client lang: <none>
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] server lang: <none>
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] kex follows: False
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] Compression: none
2025-12-03T11:14:13.332 [DEBUG] [Thread-115674] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:14:13.390 [DEBUG] [Thread-115674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:14:13.391 [DEBUG] [Thread-115674] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:14:13.391 [DEBUG] [Thread-115674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:14:13.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:14:13.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:14:13.447 [DEBUG] [Thread-115674] [transport.py] [_log()] userauth is OK
2025-12-03T11:14:13.447 [DEBUG] [Thread-115674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:14:13.448 [DEBUG] [Thread-115674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:14:13.448 [DEBUG] [Thread-115674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:14:13.448 [DEBUG] [Thread-115674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:14:13.469 [INFO] [Thread-115674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:14:13.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:14:13.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:14:14.294 [DEBUG] [Thread-115674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:14:14.294 [DEBUG] [Thread-115674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:14:14.342 [DEBUG] [Thread-115674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:14:14.342 [DEBUG] [Thread-115674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:14:14.350 [DEBUG] [Thread-115674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:14:14.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:14:14.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:14:14.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:14:14.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:14:14.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:14:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:14:14.384 [DEBUG] [Thread-115674] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:14:21.827 [DEBUG] [Thread-115676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:36.875 [DEBUG] [Thread-115677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:42.482 [DEBUG] [Thread-115678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:44.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:14:44.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:14:44.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:14:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 14, 26), 13.03, 41.74, 0.0, 17.86, 16.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:14:45.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:14:26
2025-12-03T11:14:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:14:45.409 [DEBUG] [Thread-115679] [transport.py] [_log()] starting thread (client mode): 0xa27c2530
2025-12-03T11:14:45.409 [DEBUG] [Thread-115679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:14:45.429 [DEBUG] [Thread-115679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:14:45.429 [INFO] [Thread-115679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] client lang: <none>
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] server lang: <none>
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] kex follows: False
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] Compression: none
2025-12-03T11:14:45.433 [DEBUG] [Thread-115679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:14:45.451 [DEBUG] [Thread-115679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:14:45.452 [DEBUG] [Thread-115679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:14:45.452 [DEBUG] [Thread-115679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:14:45.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:14:45.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:14:45.454 [DEBUG] [Thread-115679] [transport.py] [_log()] userauth is OK
2025-12-03T11:14:45.454 [DEBUG] [Thread-115679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:14:45.454 [DEBUG] [Thread-115679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:14:45.454 [DEBUG] [Thread-115679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:14:45.454 [DEBUG] [Thread-115679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:14:45.475 [INFO] [Thread-115679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:14:45.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:14:46.088 [DEBUG] [Thread-115679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:14:46.088 [DEBUG] [Thread-115679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:14:46.089 [DEBUG] [Thread-115679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:14:46.129 [DEBUG] [Thread-115679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:14:46.129 [DEBUG] [Thread-115679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:14:46.132 [DEBUG] [Thread-115679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:14:46.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:14:46.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:14:46.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:14:46.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:14:46.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:14:46.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:14:46.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:14:46.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.384773 -999.00  +16.70  12.07     46   +5.20 1 1 1 1 1   888    0 13.57 80.21 ----- 12.7 12.1 136.6 20.9 24.6 -24.1 24.2 -23.6 23.7 -23.2 24.3 -24.3
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.384773
2025-12-03T11:14:46.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:14:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:14:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:14:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:14:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:14:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:14:26', tmtdew=13.03, humidity=41.74, cloud=0.0, wind=17.86, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:14:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:14:46.158 [DEBUG] [Thread-115679] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:14:46.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:14:46.255 [DEBUG] [Thread-115682] [transport.py] [_log()] starting thread (client mode): 0xa27c1ed0
2025-12-03T11:14:46.255 [DEBUG] [Thread-115682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:14:46.269 [DEBUG] [Thread-115682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:14:46.269 [INFO] [Thread-115682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:14:46.277 [DEBUG] [Thread-115682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:14:46.277 [DEBUG] [Thread-115682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:14:46.277 [DEBUG] [Thread-115682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:14:46.277 [DEBUG] [Thread-115682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] client lang: <none>
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] server lang: <none>
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] kex follows: False
2025-12-03T11:14:46.278 [DEBUG] [Thread-115682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] Compression: none
2025-12-03T11:14:46.279 [DEBUG] [Thread-115682] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:14:46.337 [DEBUG] [Thread-115682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:14:46.337 [DEBUG] [Thread-115682] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:14:46.338 [DEBUG] [Thread-115682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:14:46.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:14:46.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:14:46.393 [DEBUG] [Thread-115682] [transport.py] [_log()] userauth is OK
2025-12-03T11:14:46.393 [DEBUG] [Thread-115682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:14:46.393 [DEBUG] [Thread-115682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:14:46.394 [DEBUG] [Thread-115682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:14:46.394 [DEBUG] [Thread-115682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:14:46.412 [INFO] [Thread-115682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:14:46.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:14:46.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:14:47.245 [DEBUG] [Thread-115682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:14:47.245 [DEBUG] [Thread-115682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:14:47.295 [DEBUG] [Thread-115682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:14:47.296 [DEBUG] [Thread-115682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:14:47.304 [DEBUG] [Thread-115682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:14:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:14:47.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:14:47.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:14:47.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:14:47.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:14:47.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:14:47.339 [DEBUG] [Thread-115682] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:14:51.901 [DEBUG] [Thread-115684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:52.630 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:14:52.631 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:06.944 [DEBUG] [Thread-115685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:17.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:15:17.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:15:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:15:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 14, 58), 13.49, 40.8, 0.0, 18.56, 17.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:15:18.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:14:58
2025-12-03T11:15:18.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:15:18.337 [DEBUG] [Thread-115686] [transport.py] [_log()] starting thread (client mode): 0xa27c0760
2025-12-03T11:15:18.338 [DEBUG] [Thread-115686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:15:18.357 [DEBUG] [Thread-115686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:15:18.357 [INFO] [Thread-115686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] client lang: <none>
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] server lang: <none>
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] kex follows: False
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:15:18.360 [DEBUG] [Thread-115686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:15:18.361 [DEBUG] [Thread-115686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:15:18.361 [DEBUG] [Thread-115686] [transport.py] [_log()] Compression: none
2025-12-03T11:15:18.361 [DEBUG] [Thread-115686] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:15:18.376 [DEBUG] [Thread-115686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:15:18.376 [DEBUG] [Thread-115686] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:15:18.376 [DEBUG] [Thread-115686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:15:18.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:15:18.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:15:18.377 [DEBUG] [Thread-115686] [transport.py] [_log()] userauth is OK
2025-12-03T11:15:18.378 [DEBUG] [Thread-115686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:15:18.378 [DEBUG] [Thread-115686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:15:18.378 [DEBUG] [Thread-115686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:15:18.378 [DEBUG] [Thread-115686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:15:18.390 [INFO] [Thread-115686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:15:18.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:15:19.034 [DEBUG] [Thread-115686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:15:19.034 [DEBUG] [Thread-115686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:15:19.034 [DEBUG] [Thread-115686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:15:19.075 [DEBUG] [Thread-115686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:15:19.075 [DEBUG] [Thread-115686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:15:19.077 [DEBUG] [Thread-115686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:15:19.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:15:19.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:15:19.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:15:19.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:15:19.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:15:19.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:15:19.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.385120 -999.00  +16.90  18.19     46   +5.40 1 1 1 1 1   888    0 13.87 82.97 ----- 25.4 18.2 151.8 24.6 24.7 -26.0 24.1 -24.7 23.6 -24.5 24.1 -25.0
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.385120
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:15:19.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:14:58', tmtdew=13.49, humidity=40.8, cloud=0.0, wind=18.56, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:14:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:15:19.096 [DEBUG] [Thread-115686] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:15:19.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:15:19.181 [DEBUG] [Thread-115689] [transport.py] [_log()] starting thread (client mode): 0xa27c26e0
2025-12-03T11:15:19.181 [DEBUG] [Thread-115689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:15:19.196 [DEBUG] [Thread-115689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:15:19.196 [INFO] [Thread-115689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:15:19.203 [DEBUG] [Thread-115689] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] client lang: <none>
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] server lang: <none>
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] kex follows: False
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] Compression: none
2025-12-03T11:15:19.204 [DEBUG] [Thread-115689] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:15:19.261 [DEBUG] [Thread-115689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:15:19.262 [DEBUG] [Thread-115689] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:15:19.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:15:19.262 [DEBUG] [Thread-115689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:15:19.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:15:19.318 [DEBUG] [Thread-115689] [transport.py] [_log()] userauth is OK
2025-12-03T11:15:19.318 [DEBUG] [Thread-115689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:15:19.319 [DEBUG] [Thread-115689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:15:19.319 [DEBUG] [Thread-115689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:15:19.319 [DEBUG] [Thread-115689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:15:19.332 [INFO] [Thread-115689] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:15:19.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:15:19.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:15:20.135 [DEBUG] [Thread-115689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:15:20.135 [DEBUG] [Thread-115689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:15:20.185 [DEBUG] [Thread-115689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:15:20.185 [DEBUG] [Thread-115689] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:15:20.196 [DEBUG] [Thread-115689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:15:20.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:15:20.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:15:20.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:15:20.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:15:20.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:15:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:15:20.231 [DEBUG] [Thread-115689] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:15:21.971 [DEBUG] [Thread-115691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:37.002 [DEBUG] [Thread-115692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:42.525 [DEBUG] [Thread-115693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:15:50.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:15:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:15:50.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 15, 30), 13.48, 40.82, 0.0, 20.33, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:15:50.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:15:30
2025-12-03T11:15:51.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:15:51.209 [DEBUG] [Thread-115694] [transport.py] [_log()] starting thread (client mode): 0xa27c38b0
2025-12-03T11:15:51.209 [DEBUG] [Thread-115694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:15:51.228 [DEBUG] [Thread-115694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:15:51.228 [INFO] [Thread-115694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] client lang: <none>
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] server lang: <none>
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] kex follows: False
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] Compression: none
2025-12-03T11:15:51.232 [DEBUG] [Thread-115694] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:15:51.250 [DEBUG] [Thread-115694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:15:51.250 [DEBUG] [Thread-115694] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:15:51.251 [DEBUG] [Thread-115694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:15:51.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:15:51.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:15:51.253 [DEBUG] [Thread-115694] [transport.py] [_log()] userauth is OK
2025-12-03T11:15:51.253 [DEBUG] [Thread-115694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:15:51.253 [DEBUG] [Thread-115694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:15:51.253 [DEBUG] [Thread-115694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:15:51.253 [DEBUG] [Thread-115694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:15:51.274 [INFO] [Thread-115694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:15:51.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:15:52.022 [DEBUG] [Thread-115694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:15:52.023 [DEBUG] [Thread-115694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:15:52.023 [DEBUG] [Thread-115694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:15:52.031 [DEBUG] [Thread-115696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:52.064 [DEBUG] [Thread-115694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:15:52.064 [DEBUG] [Thread-115694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:15:52.067 [DEBUG] [Thread-115694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:15:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:15:52.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:15:52.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:15:52.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:15:52.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:15:52.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:15:52.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.385467 -999.00  +16.70  14.20     45   +5.00 1 1 1 1 1   888    0 13.23 77.15 ----- 13.9 14.2 131.8 27.8 24.6 -25.8 24.0 -24.8 23.5 -24.0 24.1 -24.8
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:15:52.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.385467
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:15:52.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:15:30', tmtdew=13.48, humidity=40.82, cloud=0.0, wind=20.33, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:15:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:15:52.093 [DEBUG] [Thread-115694] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:15:52.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:15:52.188 [DEBUG] [Thread-115698] [transport.py] [_log()] starting thread (client mode): 0xa27c2710
2025-12-03T11:15:52.188 [DEBUG] [Thread-115698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:15:52.202 [DEBUG] [Thread-115698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:15:52.202 [INFO] [Thread-115698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] client lang: <none>
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] server lang: <none>
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] kex follows: False
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:15:52.210 [DEBUG] [Thread-115698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:15:52.211 [DEBUG] [Thread-115698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:15:52.211 [DEBUG] [Thread-115698] [transport.py] [_log()] Compression: none
2025-12-03T11:15:52.211 [DEBUG] [Thread-115698] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:15:52.271 [DEBUG] [Thread-115698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:15:52.272 [DEBUG] [Thread-115698] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:15:52.272 [DEBUG] [Thread-115698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:15:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:15:52.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:15:52.327 [DEBUG] [Thread-115698] [transport.py] [_log()] userauth is OK
2025-12-03T11:15:52.328 [DEBUG] [Thread-115698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:15:52.328 [DEBUG] [Thread-115698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:15:52.328 [DEBUG] [Thread-115698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:15:52.328 [DEBUG] [Thread-115698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:15:52.346 [INFO] [Thread-115698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:15:52.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:15:52.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:15:52.770 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:52.771 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:15:53.191 [DEBUG] [Thread-115698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:15:53.191 [DEBUG] [Thread-115698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:15:53.239 [DEBUG] [Thread-115698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:15:53.239 [DEBUG] [Thread-115698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:15:53.248 [DEBUG] [Thread-115698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:15:53.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:15:53.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:15:53.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:15:53.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:15:53.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:15:53.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:15:53.282 [DEBUG] [Thread-115698] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:16:07.058 [DEBUG] [Thread-115700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:22.100 [DEBUG] [Thread-115701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:23.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:16:23.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:16:23.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:16:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 16, 2), 13.83, 39.94, 0.0, 19.48, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:16:23.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:16:02
2025-12-03T11:16:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:16:24.257 [DEBUG] [Thread-115702] [transport.py] [_log()] starting thread (client mode): 0xa27c21a0
2025-12-03T11:16:24.257 [DEBUG] [Thread-115702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:16:24.271 [DEBUG] [Thread-115702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:16:24.271 [INFO] [Thread-115702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] client lang: <none>
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] server lang: <none>
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] kex follows: False
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:16:24.274 [DEBUG] [Thread-115702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:16:24.275 [DEBUG] [Thread-115702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:16:24.275 [DEBUG] [Thread-115702] [transport.py] [_log()] Compression: none
2025-12-03T11:16:24.275 [DEBUG] [Thread-115702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:16:24.291 [DEBUG] [Thread-115702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:16:24.292 [DEBUG] [Thread-115702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:16:24.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:16:24.292 [DEBUG] [Thread-115702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:16:24.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:16:24.336 [DEBUG] [Thread-115702] [transport.py] [_log()] userauth is OK
2025-12-03T11:16:24.337 [DEBUG] [Thread-115702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:16:24.337 [DEBUG] [Thread-115702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:16:24.337 [DEBUG] [Thread-115702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:16:24.337 [DEBUG] [Thread-115702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:16:24.371 [INFO] [Thread-115702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:16:24.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:16:24.986 [DEBUG] [Thread-115702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:16:24.987 [DEBUG] [Thread-115702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:16:24.987 [DEBUG] [Thread-115702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:16:25.028 [DEBUG] [Thread-115702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:16:25.028 [DEBUG] [Thread-115702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:16:25.031 [DEBUG] [Thread-115702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:16:25.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:16:25.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:16:25.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:16:25.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:16:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:16:25.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:16:25.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:16:25.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.385815 -999.00  +17.00  15.14     45   +5.20 1 1 1 1 1   888    0 13.28 71.29 ----- 19.9 15.1 143.6 18.4 24.6 -25.9 23.9 -26.5 23.5 -24.3 24.1 -26.4
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.385815
2025-12-03T11:16:25.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:16:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:16:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:16:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:16:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:16:25.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:16:02', tmtdew=13.83, humidity=39.94, cloud=0.0, wind=19.48, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:15:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:16:25.056 [DEBUG] [Thread-115702] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:16:25.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:16:25.150 [DEBUG] [Thread-115705] [transport.py] [_log()] starting thread (client mode): 0xa27c2c50
2025-12-03T11:16:25.150 [DEBUG] [Thread-115705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:16:25.169 [DEBUG] [Thread-115705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:16:25.169 [INFO] [Thread-115705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:25.177 [DEBUG] [Thread-115705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] client lang: <none>
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] server lang: <none>
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] kex follows: False
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:16:25.178 [DEBUG] [Thread-115705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:16:25.179 [DEBUG] [Thread-115705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:16:25.179 [DEBUG] [Thread-115705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:16:25.179 [DEBUG] [Thread-115705] [transport.py] [_log()] Compression: none
2025-12-03T11:16:25.179 [DEBUG] [Thread-115705] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:16:25.240 [DEBUG] [Thread-115705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:16:25.240 [DEBUG] [Thread-115705] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:16:25.241 [DEBUG] [Thread-115705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:16:25.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:16:25.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:16:25.297 [DEBUG] [Thread-115705] [transport.py] [_log()] userauth is OK
2025-12-03T11:16:25.297 [DEBUG] [Thread-115705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:16:25.297 [DEBUG] [Thread-115705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:16:25.297 [DEBUG] [Thread-115705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:16:25.297 [DEBUG] [Thread-115705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:16:25.317 [INFO] [Thread-115705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:16:25.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:16:25.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:16:26.182 [DEBUG] [Thread-115705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:16:26.182 [DEBUG] [Thread-115705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:16:26.231 [DEBUG] [Thread-115705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:16:26.231 [DEBUG] [Thread-115705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:16:26.240 [DEBUG] [Thread-115705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:16:26.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:16:26.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:16:26.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:16:26.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:16:26.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:16:26.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:16:26.275 [DEBUG] [Thread-115705] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:16:37.132 [DEBUG] [Thread-115707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:42.559 [DEBUG] [Thread-115708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:52.176 [DEBUG] [Thread-115709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:52.911 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:52.912 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:16:56.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:16:56.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:16:56.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:16:56.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 16, 34), 13.5, 40.6, 0.0, 19.02, 16.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:16:56.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:16:34
2025-12-03T11:16:57.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:16:57.263 [DEBUG] [Thread-115710] [transport.py] [_log()] starting thread (client mode): 0xa27b7820
2025-12-03T11:16:57.263 [DEBUG] [Thread-115710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:16:57.283 [DEBUG] [Thread-115710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:16:57.283 [INFO] [Thread-115710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:16:57.285 [DEBUG] [Thread-115710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] client lang: <none>
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] server lang: <none>
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] kex follows: False
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:16:57.286 [DEBUG] [Thread-115710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:16:57.287 [DEBUG] [Thread-115710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:16:57.287 [DEBUG] [Thread-115710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:16:57.287 [DEBUG] [Thread-115710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:16:57.287 [DEBUG] [Thread-115710] [transport.py] [_log()] Compression: none
2025-12-03T11:16:57.287 [DEBUG] [Thread-115710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:16:57.305 [DEBUG] [Thread-115710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:16:57.306 [DEBUG] [Thread-115710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:16:57.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:16:57.307 [DEBUG] [Thread-115710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:16:57.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:16:57.309 [DEBUG] [Thread-115710] [transport.py] [_log()] userauth is OK
2025-12-03T11:16:57.309 [DEBUG] [Thread-115710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:16:57.309 [DEBUG] [Thread-115710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:16:57.310 [DEBUG] [Thread-115710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:16:57.310 [DEBUG] [Thread-115710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:16:57.344 [INFO] [Thread-115710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:16:57.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:16:58.016 [DEBUG] [Thread-115710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:16:58.016 [DEBUG] [Thread-115710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:16:58.016 [DEBUG] [Thread-115710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:16:58.056 [DEBUG] [Thread-115710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:16:58.057 [DEBUG] [Thread-115710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:16:58.060 [DEBUG] [Thread-115710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:16:58.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:16:58.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:16:58.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:16:58.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:16:58.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:16:58.083 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:16:58.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:16:58.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:16:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:16:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.386162 -999.00  +17.00  17.42     45   +5.20 1 1 1 1 1   888    0 13.24 67.89 ----- 17.4 17.4 145.8 21.6 24.6 -26.0 23.9 -25.2 23.5 -24.5 24.1 -24.6
2025-12-03T11:16:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.386162
2025-12-03T11:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:16:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:16:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:16:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:16:58.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:16:34', tmtdew=13.5, humidity=40.6, cloud=0.0, wind=19.02, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:16:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:16:58.085 [DEBUG] [Thread-115710] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:16:58.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:16:58.177 [DEBUG] [Thread-115713] [transport.py] [_log()] starting thread (client mode): 0xa27b5420
2025-12-03T11:16:58.177 [DEBUG] [Thread-115713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:16:58.193 [DEBUG] [Thread-115713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:16:58.193 [INFO] [Thread-115713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:16:58.201 [DEBUG] [Thread-115713] [transport.py] [_log()] client lang: <none>
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] server lang: <none>
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] kex follows: False
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] Compression: none
2025-12-03T11:16:58.202 [DEBUG] [Thread-115713] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:16:58.259 [DEBUG] [Thread-115713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:16:58.259 [DEBUG] [Thread-115713] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:16:58.259 [DEBUG] [Thread-115713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:16:58.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:16:58.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:16:58.314 [DEBUG] [Thread-115713] [transport.py] [_log()] userauth is OK
2025-12-03T11:16:58.314 [DEBUG] [Thread-115713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:16:58.314 [DEBUG] [Thread-115713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:16:58.315 [DEBUG] [Thread-115713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:16:58.315 [DEBUG] [Thread-115713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:16:58.334 [INFO] [Thread-115713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:16:58.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:16:58.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:16:59.202 [DEBUG] [Thread-115713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:16:59.202 [DEBUG] [Thread-115713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:16:59.250 [DEBUG] [Thread-115713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:16:59.250 [DEBUG] [Thread-115713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:16:59.259 [DEBUG] [Thread-115713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:16:59.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:16:59.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:16:59.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:16:59.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:16:59.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:16:59.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:16:59.293 [DEBUG] [Thread-115713] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:17:07.203 [DEBUG] [Thread-115715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:22.240 [DEBUG] [Thread-115716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:29.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:17:29.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:17:29.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:17:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 17, 6), 13.03, 41.78, 0.0, 16.15, 16.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:17:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:17:06
2025-12-03T11:17:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:17:30.279 [DEBUG] [Thread-115717] [transport.py] [_log()] starting thread (client mode): 0xa27b7670
2025-12-03T11:17:30.279 [DEBUG] [Thread-115717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:17:30.299 [DEBUG] [Thread-115717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:17:30.299 [INFO] [Thread-115717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] client lang: <none>
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] server lang: <none>
2025-12-03T11:17:30.302 [DEBUG] [Thread-115717] [transport.py] [_log()] kex follows: False
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] Compression: none
2025-12-03T11:17:30.303 [DEBUG] [Thread-115717] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:17:30.321 [DEBUG] [Thread-115717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:17:30.321 [DEBUG] [Thread-115717] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:17:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:17:30.322 [DEBUG] [Thread-115717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:17:30.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:17:30.364 [DEBUG] [Thread-115717] [transport.py] [_log()] userauth is OK
2025-12-03T11:17:30.364 [DEBUG] [Thread-115717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:17:30.365 [DEBUG] [Thread-115717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:17:30.365 [DEBUG] [Thread-115717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:17:30.365 [DEBUG] [Thread-115717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:17:30.400 [INFO] [Thread-115717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:17:30.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:17:31.028 [DEBUG] [Thread-115717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:17:31.029 [DEBUG] [Thread-115717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:17:31.029 [DEBUG] [Thread-115717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:17:31.070 [DEBUG] [Thread-115717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:17:31.070 [DEBUG] [Thread-115717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:17:31.073 [DEBUG] [Thread-115717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:17:31.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:17:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:17:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:17:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:17:31.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:17:31.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:17:31.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:17:31.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:17:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:17:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.386856 -999.00  +16.80  15.50     46   +5.30 1 1 1 1 1   888    0 13.17 61.93 ----- 13.5 15.5 182.4 22.6 24.5 -24.8 23.7 -26.2 23.4 -23.7 24.1 -24.6
2025-12-03T11:17:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:17:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:17:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.386856
2025-12-03T11:17:31.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:17:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:17:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:17:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:17:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:17:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:17:06', tmtdew=13.03, humidity=41.78, cloud=0.0, wind=16.15, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:17:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:17:31.097 [DEBUG] [Thread-115717] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:17:31.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:17:31.194 [DEBUG] [Thread-115720] [transport.py] [_log()] starting thread (client mode): 0xa27c0d30
2025-12-03T11:17:31.194 [DEBUG] [Thread-115720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:17:31.209 [DEBUG] [Thread-115720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:17:31.209 [INFO] [Thread-115720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:17:31.216 [DEBUG] [Thread-115720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] client lang: <none>
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] server lang: <none>
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] kex follows: False
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] Compression: none
2025-12-03T11:17:31.217 [DEBUG] [Thread-115720] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:17:31.275 [DEBUG] [Thread-115720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:17:31.276 [DEBUG] [Thread-115720] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:17:31.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:17:31.277 [DEBUG] [Thread-115720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:17:31.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:17:31.335 [DEBUG] [Thread-115720] [transport.py] [_log()] userauth is OK
2025-12-03T11:17:31.335 [DEBUG] [Thread-115720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:17:31.335 [DEBUG] [Thread-115720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:17:31.336 [DEBUG] [Thread-115720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:17:31.336 [DEBUG] [Thread-115720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:17:31.355 [INFO] [Thread-115720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:17:31.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:17:31.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:17:32.233 [DEBUG] [Thread-115720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:17:32.233 [DEBUG] [Thread-115720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:17:32.281 [DEBUG] [Thread-115720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:17:32.281 [DEBUG] [Thread-115720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:17:32.292 [DEBUG] [Thread-115720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:17:32.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:17:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:17:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:17:32.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:17:32.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:17:32.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:17:32.328 [DEBUG] [Thread-115720] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:17:37.273 [DEBUG] [Thread-115722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:42.611 [DEBUG] [Thread-115723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:52.315 [DEBUG] [Thread-115724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:53.059 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:17:53.060 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:02.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:18:02.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:18:02.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:18:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 17, 38), 12.95, 41.78, 0.0, 15.23, 16.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:18:02.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:17:38
2025-12-03T11:18:03.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:18:03.274 [DEBUG] [Thread-115725] [transport.py] [_log()] starting thread (client mode): 0xa27b65f0
2025-12-03T11:18:03.275 [DEBUG] [Thread-115725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:18:03.286 [DEBUG] [Thread-115725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:18:03.286 [INFO] [Thread-115725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] client lang: <none>
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] server lang: <none>
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] kex follows: False
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] Compression: none
2025-12-03T11:18:03.288 [DEBUG] [Thread-115725] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:18:03.301 [DEBUG] [Thread-115725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:18:03.301 [DEBUG] [Thread-115725] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:18:03.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:18:03.302 [DEBUG] [Thread-115725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:18:03.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:18:03.303 [DEBUG] [Thread-115725] [transport.py] [_log()] userauth is OK
2025-12-03T11:18:03.303 [DEBUG] [Thread-115725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:18:03.303 [DEBUG] [Thread-115725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:18:03.303 [DEBUG] [Thread-115725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:18:03.303 [DEBUG] [Thread-115725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:18:03.317 [INFO] [Thread-115725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:18:03.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:18:03.899 [DEBUG] [Thread-115725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:18:03.899 [DEBUG] [Thread-115725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:18:03.899 [DEBUG] [Thread-115725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:18:03.940 [DEBUG] [Thread-115725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:18:03.940 [DEBUG] [Thread-115725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:18:03.943 [DEBUG] [Thread-115725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:18:03.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:18:03.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:18:03.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:18:03.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:18:03.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:18:03.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:18:03.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:18:03.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:18:03.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:18:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.387203 -999.00  +16.80  12.27     46   +5.30 1 1 1 1 1   888    0 12.93 52.36 ----- 11.4 12.3 191.2 19.4 24.5 -26.0 23.5 -26.1 23.5 -23.5 24.1 -24.7
2025-12-03T11:18:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:18:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:18:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.387203
2025-12-03T11:18:03.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:18:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:18:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:18:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:18:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:18:03.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:17:38', tmtdew=12.95, humidity=41.78, cloud=0.0, wind=15.23, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:17:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:18:03.972 [DEBUG] [Thread-115725] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:18:04.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:18:04.058 [DEBUG] [Thread-115728] [transport.py] [_log()] starting thread (client mode): 0xa27b7910
2025-12-03T11:18:04.058 [DEBUG] [Thread-115728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:18:04.072 [DEBUG] [Thread-115728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:18:04.072 [INFO] [Thread-115728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] client lang: <none>
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] server lang: <none>
2025-12-03T11:18:04.080 [DEBUG] [Thread-115728] [transport.py] [_log()] kex follows: False
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] Compression: none
2025-12-03T11:18:04.081 [DEBUG] [Thread-115728] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:18:04.135 [DEBUG] [Thread-115728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:18:04.135 [DEBUG] [Thread-115728] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:18:04.136 [DEBUG] [Thread-115728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:18:04.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:18:04.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:18:04.192 [DEBUG] [Thread-115728] [transport.py] [_log()] userauth is OK
2025-12-03T11:18:04.192 [DEBUG] [Thread-115728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:18:04.193 [DEBUG] [Thread-115728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:18:04.193 [DEBUG] [Thread-115728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:18:04.193 [DEBUG] [Thread-115728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:18:04.211 [INFO] [Thread-115728] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:18:04.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:18:04.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:18:05.061 [DEBUG] [Thread-115728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:18:05.061 [DEBUG] [Thread-115728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:18:05.109 [DEBUG] [Thread-115728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:18:05.109 [DEBUG] [Thread-115728] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:18:05.118 [DEBUG] [Thread-115728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:18:05.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:18:05.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:18:05.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:18:05.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:18:05.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:18:05.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:18:05.152 [DEBUG] [Thread-115728] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:18:07.343 [DEBUG] [Thread-115730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:22.390 [DEBUG] [Thread-115731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:18:35.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:18:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:18:35.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 18, 10), 13.23, 41.07, 0.0, 18.63, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:18:35.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:18:10
2025-12-03T11:18:35.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:18:36.150 [DEBUG] [Thread-115732] [transport.py] [_log()] starting thread (client mode): 0xa27b7040
2025-12-03T11:18:36.150 [DEBUG] [Thread-115732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:18:36.171 [DEBUG] [Thread-115732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:18:36.171 [INFO] [Thread-115732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] client lang: <none>
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] server lang: <none>
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] kex follows: False
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] Compression: none
2025-12-03T11:18:36.174 [DEBUG] [Thread-115732] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:18:36.191 [DEBUG] [Thread-115732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:18:36.191 [DEBUG] [Thread-115732] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:18:36.191 [DEBUG] [Thread-115732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:18:36.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:18:36.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:18:36.192 [DEBUG] [Thread-115732] [transport.py] [_log()] userauth is OK
2025-12-03T11:18:36.192 [DEBUG] [Thread-115732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:18:36.192 [DEBUG] [Thread-115732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:18:36.192 [DEBUG] [Thread-115732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:18:36.192 [DEBUG] [Thread-115732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:18:36.208 [INFO] [Thread-115732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:18:36.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:18:36.848 [DEBUG] [Thread-115732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:18:36.848 [DEBUG] [Thread-115732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:18:36.848 [DEBUG] [Thread-115732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:18:36.890 [DEBUG] [Thread-115732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:18:36.890 [DEBUG] [Thread-115732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:18:36.892 [DEBUG] [Thread-115732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:18:36.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:18:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:18:36.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:18:36.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:18:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:18:36.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:18:36.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.387551 -999.00  +17.00   8.10     46   +5.40 1 1 1 1 1   888    0 13.05 52.02 ----- 8.7 8.1 162.0 12.4 24.7 -24.5 23.8 -23.5 23.5 -22.7 24.2 -23.5
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.387551
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:18:36.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:18:10', tmtdew=13.23, humidity=41.07, cloud=0.0, wind=18.63, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:18:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:18:36.911 [DEBUG] [Thread-115732] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:18:36.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:18:36.997 [DEBUG] [Thread-115735] [transport.py] [_log()] starting thread (client mode): 0xa27c1810
2025-12-03T11:18:36.997 [DEBUG] [Thread-115735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:18:37.013 [DEBUG] [Thread-115735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:18:37.013 [INFO] [Thread-115735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] client lang: <none>
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] server lang: <none>
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] kex follows: False
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] Compression: none
2025-12-03T11:18:37.021 [DEBUG] [Thread-115735] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:18:37.075 [DEBUG] [Thread-115735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:18:37.076 [DEBUG] [Thread-115735] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:18:37.076 [DEBUG] [Thread-115735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:18:37.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:18:37.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:18:37.133 [DEBUG] [Thread-115735] [transport.py] [_log()] userauth is OK
2025-12-03T11:18:37.133 [DEBUG] [Thread-115735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:18:37.133 [DEBUG] [Thread-115735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:18:37.133 [DEBUG] [Thread-115735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:18:37.133 [DEBUG] [Thread-115735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:18:37.147 [INFO] [Thread-115735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:18:37.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:18:37.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:18:37.416 [DEBUG] [Thread-115737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:38.001 [DEBUG] [Thread-115735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:18:38.001 [DEBUG] [Thread-115735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:18:38.049 [DEBUG] [Thread-115735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:18:38.049 [DEBUG] [Thread-115735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:18:38.058 [DEBUG] [Thread-115735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:18:38.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:18:38.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:18:38.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:18:38.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:18:38.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:18:38.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:18:38.093 [DEBUG] [Thread-115735] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:18:42.645 [DEBUG] [Thread-115738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:52.452 [DEBUG] [Thread-115739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:53.214 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:18:53.216 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:07.483 [DEBUG] [Thread-115740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:08.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:19:08.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:19:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:19:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 18, 42), 14.33, 38.1, 0.0, 16.78, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:19:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:18:42
2025-12-03T11:19:08.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:19:09.058 [DEBUG] [Thread-115741] [transport.py] [_log()] starting thread (client mode): 0xa27b4a90
2025-12-03T11:19:09.058 [DEBUG] [Thread-115741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:19:09.077 [DEBUG] [Thread-115741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:19:09.077 [INFO] [Thread-115741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] client lang: <none>
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] server lang: <none>
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] kex follows: False
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] Compression: none
2025-12-03T11:19:09.079 [DEBUG] [Thread-115741] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:19:09.096 [DEBUG] [Thread-115741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:19:09.097 [DEBUG] [Thread-115741] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:19:09.097 [DEBUG] [Thread-115741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:19:09.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:19:09.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:19:09.099 [DEBUG] [Thread-115741] [transport.py] [_log()] userauth is OK
2025-12-03T11:19:09.099 [DEBUG] [Thread-115741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:19:09.100 [DEBUG] [Thread-115741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:19:09.100 [DEBUG] [Thread-115741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:19:09.100 [DEBUG] [Thread-115741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:19:09.117 [INFO] [Thread-115741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:19:09.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:19:09.894 [DEBUG] [Thread-115741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:19:09.894 [DEBUG] [Thread-115741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:19:09.895 [DEBUG] [Thread-115741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:19:09.936 [DEBUG] [Thread-115741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:19:09.936 [DEBUG] [Thread-115741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:19:09.938 [DEBUG] [Thread-115741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:19:09.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:19:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:19:09.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:19:09.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:19:09.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:19:09.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:19:09.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:19:09.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.387898 -999.00  +17.10  19.73     42   +4.30 1 1 1 1 1   888    0 12.79 49.12 ----- 18.8 19.7 128.0 24.5 24.8 -24.3 24.0 -23.6 23.6 -23.1 24.4 -23.0
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.387898
2025-12-03T11:19:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:19:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:19:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:19:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:19:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:19:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:18:42', tmtdew=14.33, humidity=38.1, cloud=0.0, wind=16.78, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:18:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:19:09.962 [DEBUG] [Thread-115741] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:19:10.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:19:10.057 [DEBUG] [Thread-115744] [transport.py] [_log()] starting thread (client mode): 0xa27b73a0
2025-12-03T11:19:10.057 [DEBUG] [Thread-115744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:19:10.072 [DEBUG] [Thread-115744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:19:10.072 [INFO] [Thread-115744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:19:10.079 [DEBUG] [Thread-115744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:19:10.079 [DEBUG] [Thread-115744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:19:10.079 [DEBUG] [Thread-115744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] client lang: <none>
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] server lang: <none>
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] kex follows: False
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] Compression: none
2025-12-03T11:19:10.080 [DEBUG] [Thread-115744] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:19:10.138 [DEBUG] [Thread-115744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:19:10.138 [DEBUG] [Thread-115744] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:19:10.139 [DEBUG] [Thread-115744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:19:10.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:19:10.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:19:10.194 [DEBUG] [Thread-115744] [transport.py] [_log()] userauth is OK
2025-12-03T11:19:10.194 [DEBUG] [Thread-115744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:19:10.194 [DEBUG] [Thread-115744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:19:10.194 [DEBUG] [Thread-115744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:19:10.195 [DEBUG] [Thread-115744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:19:10.213 [INFO] [Thread-115744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:19:10.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:19:10.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:19:11.097 [DEBUG] [Thread-115744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:19:11.097 [DEBUG] [Thread-115744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:19:11.144 [DEBUG] [Thread-115744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:19:11.144 [DEBUG] [Thread-115744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:19:11.154 [DEBUG] [Thread-115744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:19:11.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:19:11.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:19:11.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:19:11.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:19:11.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:19:11.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:19:11.186 [DEBUG] [Thread-115744] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:19:22.511 [DEBUG] [Thread-115746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:37.556 [DEBUG] [Thread-115747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:41.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:19:41.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:19:41.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:19:41.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 19, 14), 14.23, 38.33, 0.0, 15.9, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:19:41.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:19:14
2025-12-03T11:19:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:19:42.136 [DEBUG] [Thread-115748] [transport.py] [_log()] starting thread (client mode): 0xa27b4700
2025-12-03T11:19:42.136 [DEBUG] [Thread-115748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:19:42.152 [DEBUG] [Thread-115748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:19:42.152 [INFO] [Thread-115748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:19:42.154 [DEBUG] [Thread-115748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:19:42.154 [DEBUG] [Thread-115748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:19:42.154 [DEBUG] [Thread-115748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:19:42.154 [DEBUG] [Thread-115748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:42.154 [DEBUG] [Thread-115748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] client lang: <none>
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] server lang: <none>
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] kex follows: False
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] Compression: none
2025-12-03T11:19:42.155 [DEBUG] [Thread-115748] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:19:42.163 [DEBUG] [Thread-115748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:19:42.163 [DEBUG] [Thread-115748] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:19:42.163 [DEBUG] [Thread-115748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:19:42.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:19:42.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:19:42.164 [DEBUG] [Thread-115748] [transport.py] [_log()] userauth is OK
2025-12-03T11:19:42.164 [DEBUG] [Thread-115748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:19:42.164 [DEBUG] [Thread-115748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:19:42.165 [DEBUG] [Thread-115748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:19:42.165 [DEBUG] [Thread-115748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:19:42.197 [INFO] [Thread-115748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:19:42.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:19:42.681 [DEBUG] [Thread-115750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:42.837 [DEBUG] [Thread-115748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:19:42.837 [DEBUG] [Thread-115748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:19:42.838 [DEBUG] [Thread-115748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:19:42.878 [DEBUG] [Thread-115748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:19:42.878 [DEBUG] [Thread-115748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:19:42.881 [DEBUG] [Thread-115748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:19:42.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:19:42.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:19:42.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:19:42.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:19:42.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:19:42.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:19:42.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:19:42.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:19:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:19:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.388245 -999.00  +17.10  14.72     42   +4.10 1 1 1 1 1   888    0 13.16 51.38 ----- 12.3 14.7 148.0 21.3 24.9 -23.8 24.1 -24.1 23.6 -23.5 24.4 -24.4
2025-12-03T11:19:42.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:19:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:19:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.388245
2025-12-03T11:19:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:19:42.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:19:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:19:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:19:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:19:42.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:19:14', tmtdew=14.23, humidity=38.33, cloud=0.0, wind=15.9, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:19:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:19:42.905 [DEBUG] [Thread-115748] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:19:42.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:19:43.001 [DEBUG] [Thread-115752] [transport.py] [_log()] starting thread (client mode): 0xa27b7010
2025-12-03T11:19:43.001 [DEBUG] [Thread-115752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:19:43.016 [DEBUG] [Thread-115752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:19:43.016 [INFO] [Thread-115752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:43.024 [DEBUG] [Thread-115752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] client lang: <none>
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] server lang: <none>
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] kex follows: False
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] Compression: none
2025-12-03T11:19:43.025 [DEBUG] [Thread-115752] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:19:43.082 [DEBUG] [Thread-115752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:19:43.083 [DEBUG] [Thread-115752] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:19:43.083 [DEBUG] [Thread-115752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:19:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:19:43.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:19:43.139 [DEBUG] [Thread-115752] [transport.py] [_log()] userauth is OK
2025-12-03T11:19:43.139 [DEBUG] [Thread-115752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:19:43.139 [DEBUG] [Thread-115752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:19:43.139 [DEBUG] [Thread-115752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:19:43.139 [DEBUG] [Thread-115752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:19:43.158 [INFO] [Thread-115752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:19:43.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:19:43.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:19:43.982 [DEBUG] [Thread-115752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:19:43.982 [DEBUG] [Thread-115752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:19:44.031 [DEBUG] [Thread-115752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:19:44.031 [DEBUG] [Thread-115752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:19:44.039 [DEBUG] [Thread-115752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:19:44.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:19:44.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:19:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:19:44.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:19:44.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:19:44.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:19:44.073 [DEBUG] [Thread-115752] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:19:52.582 [DEBUG] [Thread-115754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:53.357 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:19:53.358 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:07.628 [DEBUG] [Thread-115755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:14.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:20:14.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:20:14.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:20:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 19, 46), 14.86, 36.76, 0.0, 13.76, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:20:14.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:19:46
2025-12-03T11:20:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:20:15.033 [DEBUG] [Thread-115756] [transport.py] [_log()] starting thread (client mode): 0xa5160550
2025-12-03T11:20:15.033 [DEBUG] [Thread-115756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:20:15.049 [DEBUG] [Thread-115756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:20:15.049 [INFO] [Thread-115756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] client lang: <none>
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] server lang: <none>
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] kex follows: False
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] Compression: none
2025-12-03T11:20:15.053 [DEBUG] [Thread-115756] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:20:15.071 [DEBUG] [Thread-115756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:20:15.071 [DEBUG] [Thread-115756] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:20:15.072 [DEBUG] [Thread-115756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:20:15.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:20:15.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:20:15.073 [DEBUG] [Thread-115756] [transport.py] [_log()] userauth is OK
2025-12-03T11:20:15.074 [DEBUG] [Thread-115756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:20:15.074 [DEBUG] [Thread-115756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:20:15.074 [DEBUG] [Thread-115756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:20:15.074 [DEBUG] [Thread-115756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:20:15.097 [INFO] [Thread-115756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:20:15.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:20:16.143 [DEBUG] [Thread-115756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:20:16.144 [DEBUG] [Thread-115756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:20:16.144 [DEBUG] [Thread-115756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:20:16.185 [DEBUG] [Thread-115756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:20:16.185 [DEBUG] [Thread-115756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:20:16.188 [DEBUG] [Thread-115756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:20:16.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:20:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:20:16.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:20:16.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:20:16.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:20:16.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:20:16.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:20:16.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.388592 -999.00  +17.20  14.57     42   +4.20 1 1 1 1 1   888    0 13.19 57.82 ----- 9.5 14.6 168.6 17.1 25.0 -24.0 24.2 -23.8 23.8 -22.3 24.6 -23.9
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.388592
2025-12-03T11:20:16.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:20:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:20:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:20:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:20:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:20:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:19:46', tmtdew=14.86, humidity=36.76, cloud=0.0, wind=13.76, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:19:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:20:16.209 [DEBUG] [Thread-115756] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:20:16.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:20:16.306 [DEBUG] [Thread-115759] [transport.py] [_log()] starting thread (client mode): 0xa5163a30
2025-12-03T11:20:16.306 [DEBUG] [Thread-115759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:20:16.321 [DEBUG] [Thread-115759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:20:16.322 [INFO] [Thread-115759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:20:16.329 [DEBUG] [Thread-115759] [transport.py] [_log()] client lang: <none>
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] server lang: <none>
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] kex follows: False
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] Compression: none
2025-12-03T11:20:16.330 [DEBUG] [Thread-115759] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:20:16.388 [DEBUG] [Thread-115759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:20:16.388 [DEBUG] [Thread-115759] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:20:16.389 [DEBUG] [Thread-115759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:20:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:20:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:20:16.444 [DEBUG] [Thread-115759] [transport.py] [_log()] userauth is OK
2025-12-03T11:20:16.444 [DEBUG] [Thread-115759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:20:16.444 [DEBUG] [Thread-115759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:20:16.444 [DEBUG] [Thread-115759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:20:16.444 [DEBUG] [Thread-115759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:20:16.463 [INFO] [Thread-115759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:20:16.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:20:16.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:20:17.287 [DEBUG] [Thread-115759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:20:17.287 [DEBUG] [Thread-115759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:20:17.335 [DEBUG] [Thread-115759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:20:17.335 [DEBUG] [Thread-115759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:20:17.344 [DEBUG] [Thread-115759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:20:17.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:20:17.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:20:17.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:20:17.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:20:17.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:20:17.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:20:17.378 [DEBUG] [Thread-115759] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:20:22.657 [DEBUG] [Thread-115761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:37.706 [DEBUG] [Thread-115762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:42.729 [DEBUG] [Thread-115763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:20:47.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:20:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:20:48.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 20, 18), 15.02, 36.38, 0.0, 13.97, 16.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:20:48.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:20:18
2025-12-03T11:20:48.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:20:48.327 [DEBUG] [Thread-115764] [transport.py] [_log()] starting thread (client mode): 0xa27b63e0
2025-12-03T11:20:48.327 [DEBUG] [Thread-115764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:20:48.347 [DEBUG] [Thread-115764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:20:48.347 [INFO] [Thread-115764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] client lang: <none>
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] server lang: <none>
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] kex follows: False
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:20:48.351 [DEBUG] [Thread-115764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:20:48.352 [DEBUG] [Thread-115764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:20:48.352 [DEBUG] [Thread-115764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:20:48.352 [DEBUG] [Thread-115764] [transport.py] [_log()] Compression: none
2025-12-03T11:20:48.352 [DEBUG] [Thread-115764] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:20:48.368 [DEBUG] [Thread-115764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:20:48.369 [DEBUG] [Thread-115764] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:20:48.370 [DEBUG] [Thread-115764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:20:48.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:20:48.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:20:48.371 [DEBUG] [Thread-115764] [transport.py] [_log()] userauth is OK
2025-12-03T11:20:48.372 [DEBUG] [Thread-115764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:20:48.372 [DEBUG] [Thread-115764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:20:48.372 [DEBUG] [Thread-115764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:20:48.372 [DEBUG] [Thread-115764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:20:48.408 [INFO] [Thread-115764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:20:48.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:20:49.072 [DEBUG] [Thread-115764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:20:49.073 [DEBUG] [Thread-115764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:20:49.073 [DEBUG] [Thread-115764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:20:49.114 [DEBUG] [Thread-115764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:20:49.114 [DEBUG] [Thread-115764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:20:49.117 [DEBUG] [Thread-115764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:20:49.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:20:49.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:20:49.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:20:49.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:20:49.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:20:49.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:20:49.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:20:49.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.388940 -999.00  +17.30  13.36     41   +4.20 1 1 1 1 1   888    0 13.26 65.65 ----- 12.7 13.4 130.2 16.8 25.1 -24.0 24.3 -23.7 23.8 -22.9 24.6 -23.1
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.388940
2025-12-03T11:20:49.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:20:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:20:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:20:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:20:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:20:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:20:18', tmtdew=15.02, humidity=36.38, cloud=0.0, wind=13.97, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:20:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:20:49.140 [DEBUG] [Thread-115764] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:20:49.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:20:49.235 [DEBUG] [Thread-115767] [transport.py] [_log()] starting thread (client mode): 0xa27b66e0
2025-12-03T11:20:49.235 [DEBUG] [Thread-115767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:20:49.250 [DEBUG] [Thread-115767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:20:49.250 [INFO] [Thread-115767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] client lang: <none>
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] server lang: <none>
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] kex follows: False
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:20:49.259 [DEBUG] [Thread-115767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:20:49.260 [DEBUG] [Thread-115767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:20:49.260 [DEBUG] [Thread-115767] [transport.py] [_log()] Compression: none
2025-12-03T11:20:49.260 [DEBUG] [Thread-115767] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:20:49.317 [DEBUG] [Thread-115767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:20:49.317 [DEBUG] [Thread-115767] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:20:49.317 [DEBUG] [Thread-115767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:20:49.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:20:49.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:20:49.373 [DEBUG] [Thread-115767] [transport.py] [_log()] userauth is OK
2025-12-03T11:20:49.373 [DEBUG] [Thread-115767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:20:49.373 [DEBUG] [Thread-115767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:20:49.373 [DEBUG] [Thread-115767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:20:49.373 [DEBUG] [Thread-115767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:20:49.393 [INFO] [Thread-115767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:20:49.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:20:49.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:20:50.229 [DEBUG] [Thread-115767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:20:50.229 [DEBUG] [Thread-115767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:20:50.277 [DEBUG] [Thread-115767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:20:50.277 [DEBUG] [Thread-115767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:20:50.285 [DEBUG] [Thread-115767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:20:50.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:20:50.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:20:50.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:20:50.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:20:50.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:20:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:20:50.320 [DEBUG] [Thread-115767] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:20:52.737 [DEBUG] [Thread-115769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:53.497 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:20:53.498 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:07.766 [DEBUG] [Thread-115770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:20.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:21:20.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:21:20.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:21:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 20, 50), 14.73, 37.28, 0.0, 12.35, 16.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:21:21.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:20:50
2025-12-03T11:21:21.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:21:21.295 [DEBUG] [Thread-115771] [transport.py] [_log()] starting thread (client mode): 0xa27c1810
2025-12-03T11:21:21.295 [DEBUG] [Thread-115771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:21:21.315 [DEBUG] [Thread-115771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:21:21.315 [INFO] [Thread-115771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] client lang: <none>
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] server lang: <none>
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] kex follows: False
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] Compression: none
2025-12-03T11:21:21.319 [DEBUG] [Thread-115771] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:21:21.336 [DEBUG] [Thread-115771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:21:21.337 [DEBUG] [Thread-115771] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:21:21.337 [DEBUG] [Thread-115771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:21:21.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:21:21.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:21:21.380 [DEBUG] [Thread-115771] [transport.py] [_log()] userauth is OK
2025-12-03T11:21:21.380 [DEBUG] [Thread-115771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:21:21.380 [DEBUG] [Thread-115771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:21:21.381 [DEBUG] [Thread-115771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:21:21.381 [DEBUG] [Thread-115771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:21:21.413 [INFO] [Thread-115771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:21:21.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:21:21.983 [DEBUG] [Thread-115771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:21:21.983 [DEBUG] [Thread-115771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:21:21.984 [DEBUG] [Thread-115771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:21:22.024 [DEBUG] [Thread-115771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:21:22.024 [DEBUG] [Thread-115771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:21:22.026 [DEBUG] [Thread-115771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:21:22.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:21:22.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:21:22.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:21:22.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:21:22.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:21:22.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:21:22.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:21:22.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.389634 -999.00  +17.50  16.53     41   +4.30 1 1 1 1 1   888    0 14.62 93.84 ----- 16.9 16.5 142.8 22.3 25.2 -25.2 24.4 -25.0 23.9 -24.5 24.7 -24.2
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.389634
2025-12-03T11:21:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:21:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:21:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:21:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:21:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:21:22.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:20:50', tmtdew=14.73, humidity=37.28, cloud=0.0, wind=12.35, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:21:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:21:22.051 [DEBUG] [Thread-115771] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:21:22.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:21:22.147 [DEBUG] [Thread-115774] [transport.py] [_log()] starting thread (client mode): 0xa27b5d50
2025-12-03T11:21:22.147 [DEBUG] [Thread-115774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:21:22.162 [DEBUG] [Thread-115774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:21:22.162 [INFO] [Thread-115774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:21:22.170 [DEBUG] [Thread-115774] [transport.py] [_log()] client lang: <none>
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] server lang: <none>
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] kex follows: False
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] Compression: none
2025-12-03T11:21:22.171 [DEBUG] [Thread-115774] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:21:22.229 [DEBUG] [Thread-115774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:21:22.230 [DEBUG] [Thread-115774] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:21:22.230 [DEBUG] [Thread-115774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:21:22.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:21:22.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:21:22.286 [DEBUG] [Thread-115774] [transport.py] [_log()] userauth is OK
2025-12-03T11:21:22.286 [DEBUG] [Thread-115774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:21:22.286 [DEBUG] [Thread-115774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:21:22.286 [DEBUG] [Thread-115774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:21:22.287 [DEBUG] [Thread-115774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:21:22.306 [INFO] [Thread-115774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:21:22.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:21:22.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:21:22.794 [DEBUG] [Thread-115776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:23.138 [DEBUG] [Thread-115774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:21:23.138 [DEBUG] [Thread-115774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:21:23.185 [DEBUG] [Thread-115774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:21:23.186 [DEBUG] [Thread-115774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:21:23.194 [DEBUG] [Thread-115774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:21:23.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:21:23.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:21:23.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:21:23.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:21:23.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:21:23.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:21:23.225 [DEBUG] [Thread-115774] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:21:37.843 [DEBUG] [Thread-115777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:42.764 [DEBUG] [Thread-115778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:52.870 [DEBUG] [Thread-115779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:21:53.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:21:53.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:21:53.637 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:53.637 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:21:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 21, 23), 14.76, 37.18, 0.0, 11.79, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:21:53.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:21:23
2025-12-03T11:21:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:21:54.214 [DEBUG] [Thread-115780] [transport.py] [_log()] starting thread (client mode): 0xa51636d0
2025-12-03T11:21:54.214 [DEBUG] [Thread-115780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:21:54.234 [DEBUG] [Thread-115780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:21:54.234 [INFO] [Thread-115780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:21:54.237 [DEBUG] [Thread-115780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] client lang: <none>
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] server lang: <none>
2025-12-03T11:21:54.238 [DEBUG] [Thread-115780] [transport.py] [_log()] kex follows: False
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] Compression: none
2025-12-03T11:21:54.239 [DEBUG] [Thread-115780] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:21:54.258 [DEBUG] [Thread-115780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:21:54.259 [DEBUG] [Thread-115780] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:21:54.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:21:54.260 [DEBUG] [Thread-115780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:21:54.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:21:54.262 [DEBUG] [Thread-115780] [transport.py] [_log()] userauth is OK
2025-12-03T11:21:54.262 [DEBUG] [Thread-115780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:21:54.262 [DEBUG] [Thread-115780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:21:54.262 [DEBUG] [Thread-115780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:21:54.262 [DEBUG] [Thread-115780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:21:54.285 [INFO] [Thread-115780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:21:54.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:21:54.917 [DEBUG] [Thread-115780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:21:54.917 [DEBUG] [Thread-115780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:21:54.917 [DEBUG] [Thread-115780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:21:54.959 [DEBUG] [Thread-115780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:21:54.959 [DEBUG] [Thread-115780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:21:54.962 [DEBUG] [Thread-115780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:21:54.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:21:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:21:54.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:21:54.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:21:54.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:21:54.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:21:54.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:21:54.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:21:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:21:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.389981 -999.00  +17.40  19.86     42   +4.60 1 1 1 1 1   888    0 14.49 93.24 ----- 19.3 19.9 135.4 22.4 25.2 -25.4 24.4 -25.3 24.1 -23.9 24.8 -25.2
2025-12-03T11:21:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:21:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:21:54.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.389981
2025-12-03T11:21:54.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:21:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:21:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:21:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:21:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:21:54.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:21:23', tmtdew=14.76, humidity=37.18, cloud=0.0, wind=11.79, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:21:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:21:54.999 [DEBUG] [Thread-115780] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:21:55.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:21:55.079 [DEBUG] [Thread-115783] [transport.py] [_log()] starting thread (client mode): 0xa5160cd0
2025-12-03T11:21:55.080 [DEBUG] [Thread-115783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:21:55.095 [DEBUG] [Thread-115783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:21:55.095 [INFO] [Thread-115783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] client lang: <none>
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] server lang: <none>
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] kex follows: False
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:21:55.103 [DEBUG] [Thread-115783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:21:55.104 [DEBUG] [Thread-115783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:21:55.104 [DEBUG] [Thread-115783] [transport.py] [_log()] Compression: none
2025-12-03T11:21:55.104 [DEBUG] [Thread-115783] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:21:55.162 [DEBUG] [Thread-115783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:21:55.162 [DEBUG] [Thread-115783] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:21:55.162 [DEBUG] [Thread-115783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:21:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:21:55.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:21:55.218 [DEBUG] [Thread-115783] [transport.py] [_log()] userauth is OK
2025-12-03T11:21:55.219 [DEBUG] [Thread-115783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:21:55.219 [DEBUG] [Thread-115783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:21:55.219 [DEBUG] [Thread-115783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:21:55.219 [DEBUG] [Thread-115783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:21:55.235 [INFO] [Thread-115783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:21:55.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:21:55.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:21:56.136 [DEBUG] [Thread-115783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:21:56.136 [DEBUG] [Thread-115783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:21:56.185 [DEBUG] [Thread-115783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:21:56.185 [DEBUG] [Thread-115783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:21:56.192 [DEBUG] [Thread-115783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:21:56.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:21:56.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:21:56.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:21:56.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:21:56.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:21:56.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:21:56.224 [DEBUG] [Thread-115783] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:22:07.899 [DEBUG] [Thread-115785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:22.942 [DEBUG] [Thread-115786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:26.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:22:26.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:22:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:22:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 21, 54), 14.41, 38.21, 0.0, 22.89, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:22:26.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:21:54
2025-12-03T11:22:27.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:22:27.243 [DEBUG] [Thread-115787] [transport.py] [_log()] starting thread (client mode): 0xa51619f0
2025-12-03T11:22:27.243 [DEBUG] [Thread-115787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:22:27.262 [DEBUG] [Thread-115787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:22:27.262 [INFO] [Thread-115787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] client lang: <none>
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] server lang: <none>
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] kex follows: False
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] Compression: none
2025-12-03T11:22:27.264 [DEBUG] [Thread-115787] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:22:27.280 [DEBUG] [Thread-115787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:22:27.280 [DEBUG] [Thread-115787] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:22:27.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:22:27.281 [DEBUG] [Thread-115787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:22:27.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:22:27.281 [DEBUG] [Thread-115787] [transport.py] [_log()] userauth is OK
2025-12-03T11:22:27.281 [DEBUG] [Thread-115787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:22:27.282 [DEBUG] [Thread-115787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:22:27.282 [DEBUG] [Thread-115787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:22:27.282 [DEBUG] [Thread-115787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:22:27.293 [INFO] [Thread-115787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:22:27.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:22:27.850 [DEBUG] [Thread-115787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:22:27.850 [DEBUG] [Thread-115787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:22:27.850 [DEBUG] [Thread-115787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:22:27.891 [DEBUG] [Thread-115787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:22:27.892 [DEBUG] [Thread-115787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:22:27.894 [DEBUG] [Thread-115787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:22:27.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:22:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:22:27.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:22:27.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:22:27.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:22:27.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:22:27.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.390328 -999.00  +17.00  14.13     44   +4.60 1 1 1 1 1   888    0 14.84 104.14 ----- 12.1 14.1 141.8 22.0 25.1 -26.5 24.4 -25.7 24.0 -25.1 24.6 -25.9
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.390328
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:22:27.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:21:54', tmtdew=14.41, humidity=38.21, cloud=0.0, wind=22.89, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:22:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:22:27.912 [DEBUG] [Thread-115787] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:22:27.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:22:27.998 [DEBUG] [Thread-115790] [transport.py] [_log()] starting thread (client mode): 0xa5163ac0
2025-12-03T11:22:27.999 [DEBUG] [Thread-115790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:22:28.013 [DEBUG] [Thread-115790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:22:28.013 [INFO] [Thread-115790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] client lang: <none>
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] server lang: <none>
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] kex follows: False
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] Compression: none
2025-12-03T11:22:28.021 [DEBUG] [Thread-115790] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:22:28.078 [DEBUG] [Thread-115790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:22:28.078 [DEBUG] [Thread-115790] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:22:28.078 [DEBUG] [Thread-115790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:22:28.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:22:28.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:22:28.135 [DEBUG] [Thread-115790] [transport.py] [_log()] userauth is OK
2025-12-03T11:22:28.135 [DEBUG] [Thread-115790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:22:28.135 [DEBUG] [Thread-115790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:22:28.135 [DEBUG] [Thread-115790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:22:28.135 [DEBUG] [Thread-115790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:22:28.149 [INFO] [Thread-115790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:22:28.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:22:28.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:22:28.998 [DEBUG] [Thread-115790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:22:28.998 [DEBUG] [Thread-115790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:22:29.046 [DEBUG] [Thread-115790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:22:29.047 [DEBUG] [Thread-115790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:22:29.055 [DEBUG] [Thread-115790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:22:29.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:22:29.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:22:29.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:22:29.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:22:29.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:22:29.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:22:29.086 [DEBUG] [Thread-115790] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:22:37.972 [DEBUG] [Thread-115792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:42.801 [DEBUG] [Thread-115793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:53.014 [DEBUG] [Thread-115794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:53.777 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:53.778 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:22:59.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:22:59.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:22:59.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:22:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 22, 27), 14.42, 38.23, 0.0, 21.16, 17.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:22:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:22:27
2025-12-03T11:22:59.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:23:00.127 [DEBUG] [Thread-115795] [transport.py] [_log()] starting thread (client mode): 0xa51638e0
2025-12-03T11:23:00.127 [DEBUG] [Thread-115795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:23:00.147 [DEBUG] [Thread-115795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:23:00.147 [INFO] [Thread-115795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:00.150 [DEBUG] [Thread-115795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] client lang: <none>
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] server lang: <none>
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] kex follows: False
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] Compression: none
2025-12-03T11:23:00.151 [DEBUG] [Thread-115795] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:23:00.167 [DEBUG] [Thread-115795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:23:00.167 [DEBUG] [Thread-115795] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:23:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:23:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:23:00.167 [DEBUG] [Thread-115795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:23:00.208 [DEBUG] [Thread-115795] [transport.py] [_log()] userauth is OK
2025-12-03T11:23:00.208 [DEBUG] [Thread-115795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:23:00.208 [DEBUG] [Thread-115795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:23:00.208 [DEBUG] [Thread-115795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:23:00.208 [DEBUG] [Thread-115795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:23:00.238 [INFO] [Thread-115795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:23:00.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:23:00.865 [DEBUG] [Thread-115795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:23:00.865 [DEBUG] [Thread-115795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:23:00.865 [DEBUG] [Thread-115795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:23:00.906 [DEBUG] [Thread-115795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:23:00.906 [DEBUG] [Thread-115795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:23:00.908 [DEBUG] [Thread-115795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:23:00.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:23:00.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:23:00.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:23:00.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:23:00.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:23:00.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:23:00.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:23:00.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:23:00.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.390676 -999.00  +16.90  17.53     45   +4.90 1 1 1 1 1   888    0 14.90 112.22 ----- 15.9 17.5 133.6 20.1 25.1 -25.8 24.4 -25.9 23.9 -23.4 24.6 -25.0
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.390676
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:23:00.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:22:27', tmtdew=14.42, humidity=38.23, cloud=0.0, wind=21.16, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:22:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:23:00.925 [DEBUG] [Thread-115795] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:23:00.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:23:01.008 [DEBUG] [Thread-115798] [transport.py] [_log()] starting thread (client mode): 0xa27c21a0
2025-12-03T11:23:01.008 [DEBUG] [Thread-115798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:23:01.023 [DEBUG] [Thread-115798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:23:01.024 [INFO] [Thread-115798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] client lang: <none>
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] server lang: <none>
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] kex follows: False
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:23:01.031 [DEBUG] [Thread-115798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:23:01.032 [DEBUG] [Thread-115798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:23:01.032 [DEBUG] [Thread-115798] [transport.py] [_log()] Compression: none
2025-12-03T11:23:01.032 [DEBUG] [Thread-115798] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:23:01.086 [DEBUG] [Thread-115798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:23:01.086 [DEBUG] [Thread-115798] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:23:01.087 [DEBUG] [Thread-115798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:23:01.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:23:01.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:23:01.144 [DEBUG] [Thread-115798] [transport.py] [_log()] userauth is OK
2025-12-03T11:23:01.144 [DEBUG] [Thread-115798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:23:01.144 [DEBUG] [Thread-115798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:23:01.144 [DEBUG] [Thread-115798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:23:01.144 [DEBUG] [Thread-115798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:23:01.161 [INFO] [Thread-115798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:23:01.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:23:01.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:23:02.031 [DEBUG] [Thread-115798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:23:02.031 [DEBUG] [Thread-115798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:23:02.079 [DEBUG] [Thread-115798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:23:02.079 [DEBUG] [Thread-115798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:23:02.088 [DEBUG] [Thread-115798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:23:02.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:23:02.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:23:02.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:23:02.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:23:02.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:23:02.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:23:02.122 [DEBUG] [Thread-115798] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:23:08.036 [DEBUG] [Thread-115800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:23.077 [DEBUG] [Thread-115801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:23:32.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:23:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:23:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 22, 59), 14.2, 38.91, 0.0, 17.34, 16.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:23:32.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:22:59
2025-12-03T11:23:33.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:23:33.154 [DEBUG] [Thread-115802] [transport.py] [_log()] starting thread (client mode): 0xa5160ca0
2025-12-03T11:23:33.155 [DEBUG] [Thread-115802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:23:33.173 [DEBUG] [Thread-115802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:23:33.173 [INFO] [Thread-115802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:23:33.176 [DEBUG] [Thread-115802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] client lang: <none>
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] server lang: <none>
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] kex follows: False
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] Compression: none
2025-12-03T11:23:33.177 [DEBUG] [Thread-115802] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:23:33.192 [DEBUG] [Thread-115802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:23:33.192 [DEBUG] [Thread-115802] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:23:33.192 [DEBUG] [Thread-115802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:23:33.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:23:33.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:23:33.193 [DEBUG] [Thread-115802] [transport.py] [_log()] userauth is OK
2025-12-03T11:23:33.193 [DEBUG] [Thread-115802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:23:33.193 [DEBUG] [Thread-115802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:23:33.193 [DEBUG] [Thread-115802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:23:33.193 [DEBUG] [Thread-115802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:23:33.202 [INFO] [Thread-115802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:23:33.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:23:33.784 [DEBUG] [Thread-115802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:23:33.784 [DEBUG] [Thread-115802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:23:33.785 [DEBUG] [Thread-115802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:23:33.826 [DEBUG] [Thread-115802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:23:33.826 [DEBUG] [Thread-115802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:23:33.829 [DEBUG] [Thread-115802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:23:33.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:23:33.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:23:33.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:23:33.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:23:33.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:23:33.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:23:33.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:23:33.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:23:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:23:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.391023 -999.00  +16.90  12.83     45   +5.00 1 1 1 1 1   888    0 15.45 118.06 ----- 11.4 12.8 119.0 17.4 25.0 -26.0 24.5 -25.0 24.1 -24.0 24.8 -24.7
2025-12-03T11:23:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:23:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:23:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.391023
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:23:33.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:22:59', tmtdew=14.2, humidity=38.91, cloud=0.0, wind=17.34, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:23:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:23:33.854 [DEBUG] [Thread-115802] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:23:33.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:23:33.951 [DEBUG] [Thread-115805] [transport.py] [_log()] starting thread (client mode): 0xa5162c80
2025-12-03T11:23:33.951 [DEBUG] [Thread-115805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:23:33.966 [DEBUG] [Thread-115805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:23:33.966 [INFO] [Thread-115805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:33.974 [DEBUG] [Thread-115805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] client lang: <none>
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] server lang: <none>
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] kex follows: False
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:23:33.975 [DEBUG] [Thread-115805] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:23:33.976 [DEBUG] [Thread-115805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:23:33.976 [DEBUG] [Thread-115805] [transport.py] [_log()] Compression: none
2025-12-03T11:23:33.976 [DEBUG] [Thread-115805] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:23:34.031 [DEBUG] [Thread-115805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:23:34.031 [DEBUG] [Thread-115805] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:23:34.032 [DEBUG] [Thread-115805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:23:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:23:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:23:34.089 [DEBUG] [Thread-115805] [transport.py] [_log()] userauth is OK
2025-12-03T11:23:34.089 [DEBUG] [Thread-115805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:23:34.089 [DEBUG] [Thread-115805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:23:34.089 [DEBUG] [Thread-115805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:23:34.089 [DEBUG] [Thread-115805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:23:34.112 [INFO] [Thread-115805] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:23:34.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:23:34.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:23:34.943 [DEBUG] [Thread-115805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:23:34.943 [DEBUG] [Thread-115805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:23:34.994 [DEBUG] [Thread-115805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:23:34.994 [DEBUG] [Thread-115805] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:23:35.005 [DEBUG] [Thread-115805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:23:35.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:23:35.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:23:35.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:23:35.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:23:35.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:23:35.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:23:35.055 [DEBUG] [Thread-115805] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:23:38.112 [DEBUG] [Thread-115807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:42.829 [DEBUG] [Thread-115808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:53.162 [DEBUG] [Thread-115809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:53.919 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:23:53.920 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:05.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:24:05.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:24:05.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:24:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 23, 31), 13.94, 39.52, 0.0, 13.98, 16.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:24:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:23:31
2025-12-03T11:24:05.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:24:06.035 [DEBUG] [Thread-115810] [transport.py] [_log()] starting thread (client mode): 0xa27b6fb0
2025-12-03T11:24:06.035 [DEBUG] [Thread-115810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:24:06.056 [DEBUG] [Thread-115810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:24:06.056 [INFO] [Thread-115810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] client lang: <none>
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] server lang: <none>
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] kex follows: False
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] Compression: none
2025-12-03T11:24:06.060 [DEBUG] [Thread-115810] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:24:06.076 [DEBUG] [Thread-115810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:24:06.077 [DEBUG] [Thread-115810] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:24:06.077 [DEBUG] [Thread-115810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:24:06.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:24:06.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:24:06.079 [DEBUG] [Thread-115810] [transport.py] [_log()] userauth is OK
2025-12-03T11:24:06.080 [DEBUG] [Thread-115810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:24:06.080 [DEBUG] [Thread-115810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:24:06.080 [DEBUG] [Thread-115810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:24:06.080 [DEBUG] [Thread-115810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:24:06.115 [INFO] [Thread-115810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:24:06.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:24:06.785 [DEBUG] [Thread-115810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:24:06.785 [DEBUG] [Thread-115810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:24:06.786 [DEBUG] [Thread-115810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:24:06.827 [DEBUG] [Thread-115810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:24:06.827 [DEBUG] [Thread-115810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:24:06.830 [DEBUG] [Thread-115810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:24:06.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:24:06.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:24:06.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:24:06.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:24:06.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:24:06.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:24:06.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:24:06.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.391370 -999.00  +17.00   8.09     44   +4.80 1 1 1 1 1   888    0 15.19 108.64 ----- 8.6 8.1 128.6 13.5 25.1 -25.3 24.6 -25.4 24.0 -24.4 24.8 -23.9
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.391370
2025-12-03T11:24:06.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:24:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:24:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:24:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:24:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:24:06.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:23:31', tmtdew=13.94, humidity=39.52, cloud=0.0, wind=13.98, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:23:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:24:06.858 [DEBUG] [Thread-115810] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:24:06.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:24:06.954 [DEBUG] [Thread-115813] [transport.py] [_log()] starting thread (client mode): 0xa2709960
2025-12-03T11:24:06.954 [DEBUG] [Thread-115813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:24:06.968 [DEBUG] [Thread-115813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:24:06.968 [INFO] [Thread-115813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] client lang: <none>
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] server lang: <none>
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] kex follows: False
2025-12-03T11:24:06.976 [DEBUG] [Thread-115813] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] Compression: none
2025-12-03T11:24:06.977 [DEBUG] [Thread-115813] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:24:07.033 [DEBUG] [Thread-115813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:24:07.033 [DEBUG] [Thread-115813] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:24:07.034 [DEBUG] [Thread-115813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:24:07.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:24:07.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:24:07.090 [DEBUG] [Thread-115813] [transport.py] [_log()] userauth is OK
2025-12-03T11:24:07.090 [DEBUG] [Thread-115813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:24:07.090 [DEBUG] [Thread-115813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:24:07.090 [DEBUG] [Thread-115813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:24:07.090 [DEBUG] [Thread-115813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:24:07.108 [INFO] [Thread-115813] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:24:07.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:24:07.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:24:07.953 [DEBUG] [Thread-115813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:24:07.953 [DEBUG] [Thread-115813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:24:08.001 [DEBUG] [Thread-115813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:24:08.001 [DEBUG] [Thread-115813] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:24:08.009 [DEBUG] [Thread-115813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:24:08.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:24:08.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:24:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:24:08.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:24:08.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:24:08.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:24:08.044 [DEBUG] [Thread-115813] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:24:08.189 [DEBUG] [Thread-115815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:23.232 [DEBUG] [Thread-115816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:24:38.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:24:38.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:24:38.257 [DEBUG] [Thread-115817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:38.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 24, 35), 14.05, 38.84, 0.0, 18.74, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:24:38.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:24:35
2025-12-03T11:24:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:24:39.003 [DEBUG] [Thread-115818] [transport.py] [_log()] starting thread (client mode): 0xa270a530
2025-12-03T11:24:39.003 [DEBUG] [Thread-115818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:24:39.024 [DEBUG] [Thread-115818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:24:39.024 [INFO] [Thread-115818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] client lang: <none>
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] server lang: <none>
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] kex follows: False
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] Compression: none
2025-12-03T11:24:39.027 [DEBUG] [Thread-115818] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:24:39.046 [DEBUG] [Thread-115818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:24:39.046 [DEBUG] [Thread-115818] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:24:39.046 [DEBUG] [Thread-115818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:24:39.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:24:39.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:24:39.048 [DEBUG] [Thread-115818] [transport.py] [_log()] userauth is OK
2025-12-03T11:24:39.049 [DEBUG] [Thread-115818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:24:39.049 [DEBUG] [Thread-115818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:24:39.049 [DEBUG] [Thread-115818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:24:39.049 [DEBUG] [Thread-115818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:24:39.072 [INFO] [Thread-115818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:24:39.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:24:39.704 [DEBUG] [Thread-115818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:24:39.705 [DEBUG] [Thread-115818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:24:39.705 [DEBUG] [Thread-115818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:24:39.746 [DEBUG] [Thread-115818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:24:39.746 [DEBUG] [Thread-115818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:24:39.749 [DEBUG] [Thread-115818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:24:39.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:24:39.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:24:39.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:24:39.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:24:39.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:24:39.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:24:39.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:24:39.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:24:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:24:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.391717 -999.00  +17.10  19.48     44   +4.80 1 1 1 1 1   888    0 14.61 103.01 ----- 20.7 19.5 110.4 21.9 24.9 -28.7 24.5 -26.0 24.1 -24.6 24.8 -24.9
2025-12-03T11:24:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:24:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:24:39.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.391717
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:24:39.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:24:35', tmtdew=14.05, humidity=38.84, cloud=0.0, wind=18.74, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:24:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:24:39.768 [DEBUG] [Thread-115818] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:24:39.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:24:39.864 [DEBUG] [Thread-115821] [transport.py] [_log()] starting thread (client mode): 0xa2708820
2025-12-03T11:24:39.864 [DEBUG] [Thread-115821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:24:39.879 [DEBUG] [Thread-115821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:24:39.879 [INFO] [Thread-115821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] client lang: <none>
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] server lang: <none>
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] kex follows: False
2025-12-03T11:24:39.887 [DEBUG] [Thread-115821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] Compression: none
2025-12-03T11:24:39.888 [DEBUG] [Thread-115821] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:24:39.946 [DEBUG] [Thread-115821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:24:39.946 [DEBUG] [Thread-115821] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:24:39.947 [DEBUG] [Thread-115821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:24:39.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:24:39.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:24:40.002 [DEBUG] [Thread-115821] [transport.py] [_log()] userauth is OK
2025-12-03T11:24:40.003 [DEBUG] [Thread-115821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:24:40.003 [DEBUG] [Thread-115821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:24:40.003 [DEBUG] [Thread-115821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:24:40.003 [DEBUG] [Thread-115821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:24:40.022 [INFO] [Thread-115821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:24:40.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:24:40.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:24:40.872 [DEBUG] [Thread-115821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:24:40.872 [DEBUG] [Thread-115821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:24:40.921 [DEBUG] [Thread-115821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:24:40.921 [DEBUG] [Thread-115821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:24:40.930 [DEBUG] [Thread-115821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:24:40.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:24:40.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:24:40.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:24:40.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:24:40.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:24:40.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:24:40.965 [DEBUG] [Thread-115821] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:24:42.878 [DEBUG] [Thread-115823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:53.283 [DEBUG] [Thread-115824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:54.057 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:24:54.058 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:08.334 [DEBUG] [Thread-115825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:10.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:25:10.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:25:10.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:25:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 25, 7), 14.21, 38.39, 0.0, 16.18, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:25:11.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:25:07
2025-12-03T11:25:11.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:25:11.962 [DEBUG] [Thread-115826] [transport.py] [_log()] starting thread (client mode): 0xa2708700
2025-12-03T11:25:11.962 [DEBUG] [Thread-115826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:25:11.982 [DEBUG] [Thread-115826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:25:11.982 [INFO] [Thread-115826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:25:11.985 [DEBUG] [Thread-115826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] client lang: <none>
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] server lang: <none>
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] kex follows: False
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] Compression: none
2025-12-03T11:25:11.986 [DEBUG] [Thread-115826] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:25:12.003 [DEBUG] [Thread-115826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:25:12.003 [DEBUG] [Thread-115826] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:25:12.004 [DEBUG] [Thread-115826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:25:12.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:25:12.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:25:12.006 [DEBUG] [Thread-115826] [transport.py] [_log()] userauth is OK
2025-12-03T11:25:12.006 [DEBUG] [Thread-115826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:25:12.006 [DEBUG] [Thread-115826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:25:12.007 [DEBUG] [Thread-115826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:25:12.007 [DEBUG] [Thread-115826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:25:12.024 [INFO] [Thread-115826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:25:12.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:25:12.688 [DEBUG] [Thread-115826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:25:12.688 [DEBUG] [Thread-115826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:25:12.689 [DEBUG] [Thread-115826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:25:12.729 [DEBUG] [Thread-115826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:25:12.729 [DEBUG] [Thread-115826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:25:12.732 [DEBUG] [Thread-115826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:25:12.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:25:12.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:25:12.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:25:12.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:25:12.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:25:12.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:25:12.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:25:12.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.392064 -999.00  +17.30  16.25     43   +4.80 1 1 1 1 1   888    0 14.67 95.19 ----- 12.2 16.2 136.6 20.7 25.1 -26.4 24.7 -24.9 24.2 -23.5 24.9 -22.9
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.392064
2025-12-03T11:25:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:25:12.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:25:12.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:25:12.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:25:12.760 [DEBUG] [Thread-115826] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:25:12.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:25:12.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:25:07', tmtdew=14.21, humidity=38.39, cloud=0.0, wind=16.18, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:24:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:25:12.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:25:12.857 [DEBUG] [Thread-115829] [transport.py] [_log()] starting thread (client mode): 0xa270bd90
2025-12-03T11:25:12.857 [DEBUG] [Thread-115829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:25:12.871 [DEBUG] [Thread-115829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:25:12.871 [INFO] [Thread-115829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] client lang: <none>
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] server lang: <none>
2025-12-03T11:25:12.879 [DEBUG] [Thread-115829] [transport.py] [_log()] kex follows: False
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] Compression: none
2025-12-03T11:25:12.880 [DEBUG] [Thread-115829] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:25:12.938 [DEBUG] [Thread-115829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:25:12.939 [DEBUG] [Thread-115829] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:25:12.939 [DEBUG] [Thread-115829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:25:12.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:25:12.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:25:12.995 [DEBUG] [Thread-115829] [transport.py] [_log()] userauth is OK
2025-12-03T11:25:12.995 [DEBUG] [Thread-115829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:25:12.995 [DEBUG] [Thread-115829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:25:12.995 [DEBUG] [Thread-115829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:25:12.996 [DEBUG] [Thread-115829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:25:13.014 [INFO] [Thread-115829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:25:13.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:25:13.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:25:13.872 [DEBUG] [Thread-115829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:25:13.872 [DEBUG] [Thread-115829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:25:13.920 [DEBUG] [Thread-115829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:25:13.920 [DEBUG] [Thread-115829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:25:13.928 [DEBUG] [Thread-115829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:25:13.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:25:13.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:25:13.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:25:13.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:25:13.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:25:13.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:25:13.963 [DEBUG] [Thread-115829] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:25:23.361 [DEBUG] [Thread-115831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:38.409 [DEBUG] [Thread-115832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:42.906 [DEBUG] [Thread-115833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:43.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:25:43.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:25:43.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:25:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 25, 39), 14.07, 39.14, 0.0, 13.85, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:25:44.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:25:39
2025-12-03T11:25:44.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:25:44.932 [DEBUG] [Thread-115834] [transport.py] [_log()] starting thread (client mode): 0xa2708e80
2025-12-03T11:25:44.932 [DEBUG] [Thread-115834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:25:44.954 [DEBUG] [Thread-115834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:25:44.954 [INFO] [Thread-115834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] client lang: <none>
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] server lang: <none>
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] kex follows: False
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:25:44.957 [DEBUG] [Thread-115834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:25:44.958 [DEBUG] [Thread-115834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:25:44.958 [DEBUG] [Thread-115834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:25:44.958 [DEBUG] [Thread-115834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:25:44.958 [DEBUG] [Thread-115834] [transport.py] [_log()] Compression: none
2025-12-03T11:25:44.958 [DEBUG] [Thread-115834] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:25:44.975 [DEBUG] [Thread-115834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:25:44.975 [DEBUG] [Thread-115834] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:25:44.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:25:44.976 [DEBUG] [Thread-115834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:25:44.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:25:44.978 [DEBUG] [Thread-115834] [transport.py] [_log()] userauth is OK
2025-12-03T11:25:44.978 [DEBUG] [Thread-115834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:25:44.978 [DEBUG] [Thread-115834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:25:44.978 [DEBUG] [Thread-115834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:25:44.978 [DEBUG] [Thread-115834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:25:45.001 [INFO] [Thread-115834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:25:45.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:25:45.599 [DEBUG] [Thread-115834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:25:45.599 [DEBUG] [Thread-115834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:25:45.599 [DEBUG] [Thread-115834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:25:45.640 [DEBUG] [Thread-115834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:25:45.640 [DEBUG] [Thread-115834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:25:45.643 [DEBUG] [Thread-115834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:25:45.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:25:45.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:25:45.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:25:45.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:25:45.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:25:45.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:25:45.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:25:45.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:25:45.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:25:45.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.392759 -999.00  +18.00  12.90     42   +5.10 1 1 1 1 1   888    0 14.75 95.49 ----- 12.1 12.9 163.8 14.4 25.6 -25.6 25.0 -24.4 24.6 -22.1 25.2 -23.9
2025-12-03T11:25:45.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:25:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:25:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.392759
2025-12-03T11:25:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:25:45.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:25:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:25:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:25:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:25:45.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:25:39', tmtdew=14.07, humidity=39.14, cloud=0.0, wind=13.85, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:25:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:25:45.665 [DEBUG] [Thread-115834] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:25:45.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:25:45.762 [DEBUG] [Thread-115837] [transport.py] [_log()] starting thread (client mode): 0xa5162c20
2025-12-03T11:25:45.763 [DEBUG] [Thread-115837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:25:45.778 [DEBUG] [Thread-115837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:25:45.779 [INFO] [Thread-115837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:45.786 [DEBUG] [Thread-115837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] client lang: <none>
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] server lang: <none>
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] kex follows: False
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] Compression: none
2025-12-03T11:25:45.787 [DEBUG] [Thread-115837] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:25:45.843 [DEBUG] [Thread-115837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:25:45.844 [DEBUG] [Thread-115837] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:25:45.844 [DEBUG] [Thread-115837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:25:45.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:25:45.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:25:45.900 [DEBUG] [Thread-115837] [transport.py] [_log()] userauth is OK
2025-12-03T11:25:45.900 [DEBUG] [Thread-115837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:25:45.900 [DEBUG] [Thread-115837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:25:45.900 [DEBUG] [Thread-115837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:25:45.900 [DEBUG] [Thread-115837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:25:45.919 [INFO] [Thread-115837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:25:45.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:25:45.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:25:46.787 [DEBUG] [Thread-115837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:25:46.787 [DEBUG] [Thread-115837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:25:46.835 [DEBUG] [Thread-115837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:25:46.835 [DEBUG] [Thread-115837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:25:46.843 [DEBUG] [Thread-115837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:25:46.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:25:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:25:46.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:25:46.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:25:46.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:25:46.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:25:46.878 [DEBUG] [Thread-115837] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:25:53.431 [DEBUG] [Thread-115839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:54.197 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:25:54.200 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:08.475 [DEBUG] [Thread-115840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:26:16.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:26:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:26:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 26, 11), 14.26, 38.66, 0.0, 12.53, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:26:17.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:26:11
2025-12-03T11:26:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:26:17.897 [DEBUG] [Thread-115841] [transport.py] [_log()] starting thread (client mode): 0xa270bc40
2025-12-03T11:26:17.897 [DEBUG] [Thread-115841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:26:17.908 [DEBUG] [Thread-115841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:26:17.908 [INFO] [Thread-115841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] client lang: <none>
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] server lang: <none>
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] kex follows: False
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] Compression: none
2025-12-03T11:26:17.910 [DEBUG] [Thread-115841] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:26:17.922 [DEBUG] [Thread-115841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:26:17.922 [DEBUG] [Thread-115841] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:26:17.923 [DEBUG] [Thread-115841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:26:17.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:26:17.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:26:17.923 [DEBUG] [Thread-115841] [transport.py] [_log()] userauth is OK
2025-12-03T11:26:17.923 [DEBUG] [Thread-115841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:26:17.924 [DEBUG] [Thread-115841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:26:17.924 [DEBUG] [Thread-115841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:26:17.924 [DEBUG] [Thread-115841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:26:17.937 [INFO] [Thread-115841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:26:17.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:26:18.583 [DEBUG] [Thread-115841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:26:18.584 [DEBUG] [Thread-115841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:26:18.584 [DEBUG] [Thread-115841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:26:18.625 [DEBUG] [Thread-115841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:26:18.625 [DEBUG] [Thread-115841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:26:18.628 [DEBUG] [Thread-115841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:26:18.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:26:18.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:26:18.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:26:18.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:26:18.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:26:18.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:26:18.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.393106 -999.00  +18.20   9.84     40   +4.40 1 1 1 1 1   888    0 15.38 111.97 ----- 11.8 9.8 152.1 16.6 25.7 -24.5 24.8 -27.8 24.6 -23.0 25.3 -24.3
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.393106
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:26:11', tmtdew=14.26, humidity=38.66, cloud=0.0, wind=12.53, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:26:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:26:18.646 [DEBUG] [Thread-115841] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:26:18.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:26:18.732 [DEBUG] [Thread-115844] [transport.py] [_log()] starting thread (client mode): 0xa2709e70
2025-12-03T11:26:18.732 [DEBUG] [Thread-115844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:26:18.746 [DEBUG] [Thread-115844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:26:18.746 [INFO] [Thread-115844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] client lang: <none>
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] server lang: <none>
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] kex follows: False
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] Compression: none
2025-12-03T11:26:18.754 [DEBUG] [Thread-115844] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:26:18.811 [DEBUG] [Thread-115844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:26:18.811 [DEBUG] [Thread-115844] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:26:18.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:26:18.811 [DEBUG] [Thread-115844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:26:18.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:26:18.868 [DEBUG] [Thread-115844] [transport.py] [_log()] userauth is OK
2025-12-03T11:26:18.868 [DEBUG] [Thread-115844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:26:18.868 [DEBUG] [Thread-115844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:26:18.868 [DEBUG] [Thread-115844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:26:18.868 [DEBUG] [Thread-115844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:26:18.884 [INFO] [Thread-115844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:26:18.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:26:18.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:26:19.749 [DEBUG] [Thread-115844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:26:19.749 [DEBUG] [Thread-115844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:26:19.797 [DEBUG] [Thread-115844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:26:19.797 [DEBUG] [Thread-115844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:26:19.805 [DEBUG] [Thread-115844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:26:19.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:26:19.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:26:19.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:26:19.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:26:19.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:26:19.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:26:19.837 [DEBUG] [Thread-115844] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:26:23.503 [DEBUG] [Thread-115846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:38.557 [DEBUG] [Thread-115847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:42.954 [DEBUG] [Thread-115848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:49.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:26:49.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:26:49.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:26:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 26, 43), 15.07, 36.3, 0.0, 17.58, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:26:50.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:26:43
2025-12-03T11:26:50.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:26:50.819 [DEBUG] [Thread-115849] [transport.py] [_log()] starting thread (client mode): 0xa270aaa0
2025-12-03T11:26:50.819 [DEBUG] [Thread-115849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:26:50.839 [DEBUG] [Thread-115849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:26:50.839 [INFO] [Thread-115849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:26:50.843 [DEBUG] [Thread-115849] [transport.py] [_log()] client lang: <none>
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] server lang: <none>
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] kex follows: False
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] Compression: none
2025-12-03T11:26:50.844 [DEBUG] [Thread-115849] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:26:50.854 [DEBUG] [Thread-115849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:26:50.855 [DEBUG] [Thread-115849] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:26:50.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:26:50.856 [DEBUG] [Thread-115849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:26:50.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:26:50.896 [DEBUG] [Thread-115849] [transport.py] [_log()] userauth is OK
2025-12-03T11:26:50.896 [DEBUG] [Thread-115849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:26:50.896 [DEBUG] [Thread-115849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:26:50.896 [DEBUG] [Thread-115849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:26:50.896 [DEBUG] [Thread-115849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:26:50.914 [INFO] [Thread-115849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:26:50.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:26:51.530 [DEBUG] [Thread-115849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:26:51.530 [DEBUG] [Thread-115849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:26:51.530 [DEBUG] [Thread-115849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:26:51.571 [DEBUG] [Thread-115849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:26:51.571 [DEBUG] [Thread-115849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:26:51.574 [DEBUG] [Thread-115849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:26:51.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:26:51.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:26:51.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:26:51.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:26:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:26:51.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:26:51.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:26:51.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:26:51.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:26:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.393453 -999.00  +18.30  12.84     38   +3.70 1 1 1 1 1   888    0 15.01 108.34 ----- 19.8 12.8 166.2 26.7 25.7 -25.8 24.8 -31.1 24.6 -24.4 25.3 -26.7
2025-12-03T11:26:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:26:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:26:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.393453
2025-12-03T11:26:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:26:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:26:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:26:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:26:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:26:51.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:26:43', tmtdew=15.07, humidity=36.3, cloud=0.0, wind=17.58, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:26:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:26:51.602 [DEBUG] [Thread-115849] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:26:51.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:26:51.696 [DEBUG] [Thread-115852] [transport.py] [_log()] starting thread (client mode): 0xa2708490
2025-12-03T11:26:51.697 [DEBUG] [Thread-115852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:26:51.711 [DEBUG] [Thread-115852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:26:51.711 [INFO] [Thread-115852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] client lang: <none>
2025-12-03T11:26:51.719 [DEBUG] [Thread-115852] [transport.py] [_log()] server lang: <none>
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] kex follows: False
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] Compression: none
2025-12-03T11:26:51.720 [DEBUG] [Thread-115852] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:26:51.777 [DEBUG] [Thread-115852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:26:51.778 [DEBUG] [Thread-115852] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:26:51.778 [DEBUG] [Thread-115852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:26:51.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:26:51.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:26:51.833 [DEBUG] [Thread-115852] [transport.py] [_log()] userauth is OK
2025-12-03T11:26:51.833 [DEBUG] [Thread-115852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:26:51.833 [DEBUG] [Thread-115852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:26:51.833 [DEBUG] [Thread-115852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:26:51.833 [DEBUG] [Thread-115852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:26:51.852 [INFO] [Thread-115852] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:26:51.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:26:51.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:26:52.729 [DEBUG] [Thread-115852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:26:52.729 [DEBUG] [Thread-115852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:26:52.777 [DEBUG] [Thread-115852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:26:52.777 [DEBUG] [Thread-115852] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:26:52.786 [DEBUG] [Thread-115852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:26:52.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:26:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:26:52.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:26:52.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:26:52.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:26:52.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:26:52.820 [DEBUG] [Thread-115852] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:26:53.590 [DEBUG] [Thread-115854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:54.340 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:26:54.341 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:08.635 [DEBUG] [Thread-115855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:27:22.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:27:22.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:27:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 27, 15), 15.24, 35.91, 0.0, 22.02, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:27:23.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:27:15
2025-12-03T11:27:23.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:27:23.662 [DEBUG] [Thread-115856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:23.800 [DEBUG] [Thread-115857] [transport.py] [_log()] starting thread (client mode): 0xa270b8b0
2025-12-03T11:27:23.801 [DEBUG] [Thread-115857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:27:23.820 [DEBUG] [Thread-115857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:27:23.820 [INFO] [Thread-115857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] client lang: <none>
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] server lang: <none>
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] kex follows: False
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:27:23.823 [DEBUG] [Thread-115857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:27:23.824 [DEBUG] [Thread-115857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:27:23.824 [DEBUG] [Thread-115857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:27:23.824 [DEBUG] [Thread-115857] [transport.py] [_log()] Compression: none
2025-12-03T11:27:23.824 [DEBUG] [Thread-115857] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:27:23.832 [DEBUG] [Thread-115857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:27:23.832 [DEBUG] [Thread-115857] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:27:23.833 [DEBUG] [Thread-115857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:27:23.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:27:23.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:27:23.834 [DEBUG] [Thread-115857] [transport.py] [_log()] userauth is OK
2025-12-03T11:27:23.834 [DEBUG] [Thread-115857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:27:23.834 [DEBUG] [Thread-115857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:27:23.834 [DEBUG] [Thread-115857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:27:23.835 [DEBUG] [Thread-115857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:27:23.852 [INFO] [Thread-115857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:27:23.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:27:24.464 [DEBUG] [Thread-115857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:27:24.464 [DEBUG] [Thread-115857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:27:24.464 [DEBUG] [Thread-115857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:27:24.505 [DEBUG] [Thread-115857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:27:24.505 [DEBUG] [Thread-115857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:27:24.507 [DEBUG] [Thread-115857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:27:24.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:27:24.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:27:24.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:27:24.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:27:24.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:27:24.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:27:24.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:27:24.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:27:24.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:27:24.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.393801 -999.00  +18.00  19.61     38   +3.70 1 1 1 1 1   888    0 15.02 102.65 ----- 16.2 19.6 182.6 21.9 25.6 -26.8 24.4 -28.2 24.5 -24.8 25.2 -25.3
2025-12-03T11:27:24.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:27:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:27:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.393801
2025-12-03T11:27:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:27:24.531 [DEBUG] [Thread-115857] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:27:24.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:27:15', tmtdew=15.24, humidity=35.91, cloud=0.0, wind=22.02, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:27:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:27:24.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:27:24.628 [DEBUG] [Thread-115860] [transport.py] [_log()] starting thread (client mode): 0xa5161db0
2025-12-03T11:27:24.628 [DEBUG] [Thread-115860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:27:24.643 [DEBUG] [Thread-115860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:27:24.643 [INFO] [Thread-115860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:27:24.650 [DEBUG] [Thread-115860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:27:24.650 [DEBUG] [Thread-115860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] client lang: <none>
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] server lang: <none>
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] kex follows: False
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:27:24.651 [DEBUG] [Thread-115860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:27:24.652 [DEBUG] [Thread-115860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:27:24.652 [DEBUG] [Thread-115860] [transport.py] [_log()] Compression: none
2025-12-03T11:27:24.652 [DEBUG] [Thread-115860] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:27:24.709 [DEBUG] [Thread-115860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:27:24.710 [DEBUG] [Thread-115860] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:27:24.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:27:24.710 [DEBUG] [Thread-115860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:27:24.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:27:24.765 [DEBUG] [Thread-115860] [transport.py] [_log()] userauth is OK
2025-12-03T11:27:24.766 [DEBUG] [Thread-115860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:27:24.766 [DEBUG] [Thread-115860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:27:24.766 [DEBUG] [Thread-115860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:27:24.766 [DEBUG] [Thread-115860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:27:24.784 [INFO] [Thread-115860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:27:24.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:27:24.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:27:25.651 [DEBUG] [Thread-115860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:27:25.651 [DEBUG] [Thread-115860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:27:25.699 [DEBUG] [Thread-115860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:27:25.700 [DEBUG] [Thread-115860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:27:25.708 [DEBUG] [Thread-115860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:27:25.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:27:25.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:27:25.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:27:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:27:25.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:27:25.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:27:25.742 [DEBUG] [Thread-115860] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:27:38.687 [DEBUG] [Thread-115862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:42.995 [DEBUG] [Thread-115863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:53.719 [DEBUG] [Thread-115864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:54.484 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:54.486 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:27:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:27:55.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:27:55.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:27:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 27, 47), 15.43, 35.31, 0.0, 17.15, 17.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:27:56.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:27:47
2025-12-03T11:27:56.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:27:56.734 [DEBUG] [Thread-115865] [transport.py] [_log()] starting thread (client mode): 0xa5160b50
2025-12-03T11:27:56.734 [DEBUG] [Thread-115865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:27:56.748 [DEBUG] [Thread-115865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:27:56.748 [INFO] [Thread-115865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] client lang: <none>
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] server lang: <none>
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] kex follows: False
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] Compression: none
2025-12-03T11:27:56.751 [DEBUG] [Thread-115865] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:27:56.768 [DEBUG] [Thread-115865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:27:56.768 [DEBUG] [Thread-115865] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:27:56.769 [DEBUG] [Thread-115865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:27:56.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:27:56.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:27:56.770 [DEBUG] [Thread-115865] [transport.py] [_log()] userauth is OK
2025-12-03T11:27:56.770 [DEBUG] [Thread-115865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:27:56.770 [DEBUG] [Thread-115865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:27:56.770 [DEBUG] [Thread-115865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:27:56.770 [DEBUG] [Thread-115865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:27:56.783 [INFO] [Thread-115865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:27:56.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:27:57.405 [DEBUG] [Thread-115865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:27:57.405 [DEBUG] [Thread-115865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:27:57.406 [DEBUG] [Thread-115865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:27:57.447 [DEBUG] [Thread-115865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:27:57.447 [DEBUG] [Thread-115865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:27:57.450 [DEBUG] [Thread-115865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:27:57.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:27:57.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:27:57.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:27:57.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:27:57.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:27:57.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:27:57.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:27:57.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.394148 -999.00  +17.90  16.80     39   +4.00 1 1 1 1 1   888    0 15.51 111.74 ----- 14.4 16.8 171.0 20.1 25.6 -25.9 24.5 -27.7 24.5 -23.8 25.2 -25.2
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.394148
2025-12-03T11:27:57.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:27:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:27:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:27:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:27:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:27:57.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:27:47', tmtdew=15.43, humidity=35.31, cloud=0.0, wind=17.15, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:27:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:27:57.470 [DEBUG] [Thread-115865] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:27:57.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:27:57.565 [DEBUG] [Thread-115868] [transport.py] [_log()] starting thread (client mode): 0xa51632b0
2025-12-03T11:27:57.565 [DEBUG] [Thread-115868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:27:57.580 [DEBUG] [Thread-115868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:27:57.580 [INFO] [Thread-115868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:27:57.588 [DEBUG] [Thread-115868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] client lang: <none>
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] server lang: <none>
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] kex follows: False
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] Compression: none
2025-12-03T11:27:57.589 [DEBUG] [Thread-115868] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:27:57.646 [DEBUG] [Thread-115868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:27:57.646 [DEBUG] [Thread-115868] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:27:57.647 [DEBUG] [Thread-115868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:27:57.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:27:57.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:27:57.702 [DEBUG] [Thread-115868] [transport.py] [_log()] userauth is OK
2025-12-03T11:27:57.703 [DEBUG] [Thread-115868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:27:57.703 [DEBUG] [Thread-115868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:27:57.703 [DEBUG] [Thread-115868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:27:57.703 [DEBUG] [Thread-115868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:27:57.725 [INFO] [Thread-115868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:27:57.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:27:57.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:27:58.552 [DEBUG] [Thread-115868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:27:58.552 [DEBUG] [Thread-115868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:27:58.600 [DEBUG] [Thread-115868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:27:58.600 [DEBUG] [Thread-115868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:27:58.609 [DEBUG] [Thread-115868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:27:58.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:27:58.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:27:58.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:27:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:27:58.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:27:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:27:58.644 [DEBUG] [Thread-115868] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:28:08.748 [DEBUG] [Thread-115870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:23.786 [DEBUG] [Thread-115871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:28.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:28:28.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:28:28.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:28:29.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 28, 19), 15.4, 35.36, 0.0, 19.5, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:28:29.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:28:19
2025-12-03T11:28:29.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:28:29.633 [DEBUG] [Thread-115872] [transport.py] [_log()] starting thread (client mode): 0xa5161300
2025-12-03T11:28:29.633 [DEBUG] [Thread-115872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:28:29.653 [DEBUG] [Thread-115872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:28:29.653 [INFO] [Thread-115872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] client lang: <none>
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] server lang: <none>
2025-12-03T11:28:29.654 [DEBUG] [Thread-115872] [transport.py] [_log()] kex follows: False
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] Compression: none
2025-12-03T11:28:29.655 [DEBUG] [Thread-115872] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:28:29.663 [DEBUG] [Thread-115872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:28:29.663 [DEBUG] [Thread-115872] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:28:29.664 [DEBUG] [Thread-115872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:28:29.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:28:29.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:28:29.665 [DEBUG] [Thread-115872] [transport.py] [_log()] userauth is OK
2025-12-03T11:28:29.665 [DEBUG] [Thread-115872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:28:29.665 [DEBUG] [Thread-115872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:28:29.665 [DEBUG] [Thread-115872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:28:29.666 [DEBUG] [Thread-115872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:28:29.683 [INFO] [Thread-115872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:28:29.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:28:30.239 [DEBUG] [Thread-115872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:28:30.239 [DEBUG] [Thread-115872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:28:30.239 [DEBUG] [Thread-115872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:28:30.280 [DEBUG] [Thread-115872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:28:30.280 [DEBUG] [Thread-115872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:28:30.283 [DEBUG] [Thread-115872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:28:30.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:28:30.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:28:30.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:28:30.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:28:30.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:28:30.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:28:30.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.394495 -999.00  +17.90  14.39     40   +4.20 1 1 1 1 1   888    0 15.67 115.16 ----- 16.8 14.4 165.0 22.6 25.6 -26.3 24.4 -26.3 24.4 -24.1 25.2 -25.4
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:28:30.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.394495
2025-12-03T11:28:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:28:30.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:28:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:28:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:28:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:28:30.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:28:19', tmtdew=15.4, humidity=35.36, cloud=0.0, wind=19.5, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:28:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:28:30.307 [DEBUG] [Thread-115872] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:28:30.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:28:30.414 [DEBUG] [Thread-115875] [transport.py] [_log()] starting thread (client mode): 0xa5163d00
2025-12-03T11:28:30.414 [DEBUG] [Thread-115875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:28:30.429 [DEBUG] [Thread-115875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:28:30.429 [INFO] [Thread-115875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:28:30.439 [DEBUG] [Thread-115875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:28:30.439 [DEBUG] [Thread-115875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] client lang: <none>
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] server lang: <none>
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] kex follows: False
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] Compression: none
2025-12-03T11:28:30.440 [DEBUG] [Thread-115875] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:28:30.500 [DEBUG] [Thread-115875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:28:30.500 [DEBUG] [Thread-115875] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:28:30.501 [DEBUG] [Thread-115875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:28:30.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:28:30.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:28:30.558 [DEBUG] [Thread-115875] [transport.py] [_log()] userauth is OK
2025-12-03T11:28:30.559 [DEBUG] [Thread-115875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:28:30.559 [DEBUG] [Thread-115875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:28:30.559 [DEBUG] [Thread-115875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:28:30.559 [DEBUG] [Thread-115875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:28:30.577 [INFO] [Thread-115875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:28:30.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:28:30.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:28:31.404 [DEBUG] [Thread-115875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:28:31.404 [DEBUG] [Thread-115875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:28:31.452 [DEBUG] [Thread-115875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:28:31.452 [DEBUG] [Thread-115875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:28:31.461 [DEBUG] [Thread-115875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:28:31.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:28:31.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:28:31.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:28:31.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:28:31.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:28:31.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:28:31.495 [DEBUG] [Thread-115875] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:28:38.822 [DEBUG] [Thread-115877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:43.041 [DEBUG] [Thread-115878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:53.862 [DEBUG] [Thread-115879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:54.625 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:28:54.625 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:01.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:29:01.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:29:01.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:29:02.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 28, 51), 15.38, 35.83, 0.0, 21.6, 17.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:29:02.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:28:51
2025-12-03T11:29:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:29:02.464 [DEBUG] [Thread-115880] [transport.py] [_log()] starting thread (client mode): 0xa5162b60
2025-12-03T11:29:02.464 [DEBUG] [Thread-115880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:29:02.484 [DEBUG] [Thread-115880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:29:02.484 [INFO] [Thread-115880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] client lang: <none>
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] server lang: <none>
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] kex follows: False
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] Compression: none
2025-12-03T11:29:02.488 [DEBUG] [Thread-115880] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:29:02.504 [DEBUG] [Thread-115880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:29:02.505 [DEBUG] [Thread-115880] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:29:02.505 [DEBUG] [Thread-115880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:29:02.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:29:02.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:29:02.507 [DEBUG] [Thread-115880] [transport.py] [_log()] userauth is OK
2025-12-03T11:29:02.507 [DEBUG] [Thread-115880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:29:02.507 [DEBUG] [Thread-115880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:29:02.507 [DEBUG] [Thread-115880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:29:02.507 [DEBUG] [Thread-115880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:29:02.524 [INFO] [Thread-115880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:29:02.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:29:03.283 [DEBUG] [Thread-115880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:29:03.283 [DEBUG] [Thread-115880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:29:03.283 [DEBUG] [Thread-115880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:29:03.324 [DEBUG] [Thread-115880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:29:03.324 [DEBUG] [Thread-115880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:29:03.327 [DEBUG] [Thread-115880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:29:03.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:29:03.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:29:03.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:29:03.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:29:03.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:29:03.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:29:03.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:29:03.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.394495 -999.00  +17.90  14.39     40   +4.20 1 1 1 1 1   888    0 15.67 115.16 ----- 16.8 14.4 165.0 22.6 25.6 -26.3 24.4 -26.3 24.4 -24.1 25.2 -25.4
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.394495
2025-12-03T11:29:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:29:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:29:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:29:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:29:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:29:03.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:28:51', tmtdew=15.38, humidity=35.83, cloud=0.0, wind=21.6, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:28:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:29:03.350 [DEBUG] [Thread-115880] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:29:03.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:29:03.458 [DEBUG] [Thread-115883] [transport.py] [_log()] starting thread (client mode): 0xa5161f90
2025-12-03T11:29:03.458 [DEBUG] [Thread-115883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:29:03.472 [DEBUG] [Thread-115883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:29:03.472 [INFO] [Thread-115883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] client lang: <none>
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] server lang: <none>
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] kex follows: False
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] Compression: none
2025-12-03T11:29:03.480 [DEBUG] [Thread-115883] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:29:03.539 [DEBUG] [Thread-115883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:29:03.539 [DEBUG] [Thread-115883] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:29:03.540 [DEBUG] [Thread-115883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:29:03.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:29:03.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:29:03.599 [DEBUG] [Thread-115883] [transport.py] [_log()] userauth is OK
2025-12-03T11:29:03.599 [DEBUG] [Thread-115883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:29:03.599 [DEBUG] [Thread-115883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:29:03.599 [DEBUG] [Thread-115883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:29:03.599 [DEBUG] [Thread-115883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:29:03.619 [INFO] [Thread-115883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:29:03.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:29:03.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:29:04.466 [DEBUG] [Thread-115883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:29:04.467 [DEBUG] [Thread-115883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:29:04.515 [DEBUG] [Thread-115883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:29:04.515 [DEBUG] [Thread-115883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:29:04.524 [DEBUG] [Thread-115883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:29:04.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:29:04.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:29:04.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:29:04.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:29:04.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:29:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:29:04.557 [DEBUG] [Thread-115883] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:29:08.889 [DEBUG] [Thread-115885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:23.932 [DEBUG] [Thread-115886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:34.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:29:34.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:29:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:29:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 29, 23), 15.36, 35.84, 0.0, 17.73, 17.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:29:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:29:23
2025-12-03T11:29:35.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:29:35.579 [DEBUG] [Thread-115887] [transport.py] [_log()] starting thread (client mode): 0xa5162890
2025-12-03T11:29:35.579 [DEBUG] [Thread-115887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:29:35.600 [DEBUG] [Thread-115887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:29:35.600 [INFO] [Thread-115887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:35.603 [DEBUG] [Thread-115887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] client lang: <none>
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] server lang: <none>
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] kex follows: False
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] Compression: none
2025-12-03T11:29:35.604 [DEBUG] [Thread-115887] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:29:35.621 [DEBUG] [Thread-115887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:29:35.621 [DEBUG] [Thread-115887] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:29:35.621 [DEBUG] [Thread-115887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:29:35.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:29:35.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:29:35.622 [DEBUG] [Thread-115887] [transport.py] [_log()] userauth is OK
2025-12-03T11:29:35.623 [DEBUG] [Thread-115887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:29:35.623 [DEBUG] [Thread-115887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:29:35.623 [DEBUG] [Thread-115887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:29:35.623 [DEBUG] [Thread-115887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:29:35.641 [INFO] [Thread-115887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:29:35.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:29:36.294 [DEBUG] [Thread-115887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:29:36.294 [DEBUG] [Thread-115887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:29:36.294 [DEBUG] [Thread-115887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:29:36.336 [DEBUG] [Thread-115887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:29:36.336 [DEBUG] [Thread-115887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:29:36.339 [DEBUG] [Thread-115887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:29:36.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:29:36.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:29:36.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:29:36.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:29:36.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:29:36.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:29:36.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:29:36.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.394842 -999.00  +17.80  17.36     40   +4.10 1 1 1 1 1   888    0 15.34 113.70 ----- 16.3 17.4 180.0 20.7 25.6 -26.4 24.3 -31.8 24.4 -23.8 25.1 -26.5
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.394842
2025-12-03T11:29:36.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:29:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:29:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:29:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:29:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:29:36.364 [DEBUG] [Thread-115887] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:29:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:29:23', tmtdew=15.36, humidity=35.84, cloud=0.0, wind=17.73, temperature=17.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:28:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:29:36.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:29:36.474 [DEBUG] [Thread-115890] [transport.py] [_log()] starting thread (client mode): 0xa27b6500
2025-12-03T11:29:36.474 [DEBUG] [Thread-115890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:29:36.490 [DEBUG] [Thread-115890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:29:36.490 [INFO] [Thread-115890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:29:36.498 [DEBUG] [Thread-115890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] client lang: <none>
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] server lang: <none>
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] kex follows: False
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:29:36.499 [DEBUG] [Thread-115890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:29:36.500 [DEBUG] [Thread-115890] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:29:36.500 [DEBUG] [Thread-115890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:29:36.500 [DEBUG] [Thread-115890] [transport.py] [_log()] Compression: none
2025-12-03T11:29:36.500 [DEBUG] [Thread-115890] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:29:36.556 [DEBUG] [Thread-115890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:29:36.557 [DEBUG] [Thread-115890] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:29:36.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:29:36.558 [DEBUG] [Thread-115890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:29:36.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:29:36.612 [DEBUG] [Thread-115890] [transport.py] [_log()] userauth is OK
2025-12-03T11:29:36.612 [DEBUG] [Thread-115890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:29:36.612 [DEBUG] [Thread-115890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:29:36.613 [DEBUG] [Thread-115890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:29:36.613 [DEBUG] [Thread-115890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:29:36.635 [INFO] [Thread-115890] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:29:36.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:29:36.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:29:37.483 [DEBUG] [Thread-115890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:29:37.484 [DEBUG] [Thread-115890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:29:37.534 [DEBUG] [Thread-115890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:29:37.534 [DEBUG] [Thread-115890] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:29:37.542 [DEBUG] [Thread-115890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:29:37.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:29:37.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:29:37.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:29:37.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:29:37.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:29:37.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:29:37.577 [DEBUG] [Thread-115890] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:29:38.961 [DEBUG] [Thread-115892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:43.098 [DEBUG] [Thread-115893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:54.016 [DEBUG] [Thread-115894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:54.766 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:29:54.768 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:07.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:30:07.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:30:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:30:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 29, 55), 15.18, 36.18, 0.0, 10.53, 17.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:30:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:29:55
2025-12-03T11:30:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:30:08.563 [DEBUG] [Thread-115895] [transport.py] [_log()] starting thread (client mode): 0xa5161240
2025-12-03T11:30:08.564 [DEBUG] [Thread-115895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:30:08.584 [DEBUG] [Thread-115895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:30:08.584 [INFO] [Thread-115895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] client lang: <none>
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] server lang: <none>
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] kex follows: False
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:30:08.587 [DEBUG] [Thread-115895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:30:08.588 [DEBUG] [Thread-115895] [transport.py] [_log()] Compression: none
2025-12-03T11:30:08.588 [DEBUG] [Thread-115895] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:30:08.605 [DEBUG] [Thread-115895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:30:08.605 [DEBUG] [Thread-115895] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:30:08.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:30:08.606 [DEBUG] [Thread-115895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:30:08.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:30:08.608 [DEBUG] [Thread-115895] [transport.py] [_log()] userauth is OK
2025-12-03T11:30:08.608 [DEBUG] [Thread-115895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:30:08.608 [DEBUG] [Thread-115895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:30:08.608 [DEBUG] [Thread-115895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:30:08.608 [DEBUG] [Thread-115895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:30:08.632 [INFO] [Thread-115895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:30:08.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:30:09.044 [DEBUG] [Thread-115897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:09.768 [DEBUG] [Thread-115895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:30:09.768 [DEBUG] [Thread-115895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:30:09.768 [DEBUG] [Thread-115895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:30:09.809 [DEBUG] [Thread-115895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:30:09.809 [DEBUG] [Thread-115895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:30:09.811 [DEBUG] [Thread-115895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:30:09.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:30:09.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:30:09.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:30:09.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:30:09.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:30:09.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:30:09.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.395189 -999.00  +17.80  12.73     40   +4.10 1 1 1 1 1   888    0 15.65 118.78 ----- 16.9 12.7 163.4 19.6 25.6 -25.3 24.3 -27.2 24.2 -24.4 25.2 -26.0
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.395189
2025-12-03T11:30:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:30:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:30:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:30:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:30:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:30:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:29:55', tmtdew=15.18, humidity=36.18, cloud=0.0, wind=10.53, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:29:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:30:09.838 [DEBUG] [Thread-115895] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:30:09.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:30:09.923 [DEBUG] [Thread-115899] [transport.py] [_log()] starting thread (client mode): 0xa5160a60
2025-12-03T11:30:09.923 [DEBUG] [Thread-115899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:30:09.937 [DEBUG] [Thread-115899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:30:09.937 [INFO] [Thread-115899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] client lang: <none>
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] server lang: <none>
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] kex follows: False
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] Compression: none
2025-12-03T11:30:09.945 [DEBUG] [Thread-115899] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:30:10.003 [DEBUG] [Thread-115899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:30:10.003 [DEBUG] [Thread-115899] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:30:10.004 [DEBUG] [Thread-115899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:30:10.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:30:10.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:30:10.060 [DEBUG] [Thread-115899] [transport.py] [_log()] userauth is OK
2025-12-03T11:30:10.060 [DEBUG] [Thread-115899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:30:10.060 [DEBUG] [Thread-115899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:30:10.060 [DEBUG] [Thread-115899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:30:10.060 [DEBUG] [Thread-115899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:30:10.078 [INFO] [Thread-115899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:30:10.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:30:10.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:30:10.915 [DEBUG] [Thread-115899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:30:10.915 [DEBUG] [Thread-115899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:30:10.964 [DEBUG] [Thread-115899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:30:10.964 [DEBUG] [Thread-115899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:30:10.972 [DEBUG] [Thread-115899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:30:10.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:30:10.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:30:10.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:30:10.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:30:10.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:30:10.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:30:11.005 [DEBUG] [Thread-115899] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:30:24.070 [DEBUG] [Thread-115901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:39.113 [DEBUG] [Thread-115902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:41.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:30:41.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:30:41.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:30:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 30, 27), 15.25, 36.01, 0.0, 10.36, 17.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:30:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:30:27
2025-12-03T11:30:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:30:41.990 [DEBUG] [Thread-115903] [transport.py] [_log()] starting thread (client mode): 0xa51612a0
2025-12-03T11:30:41.990 [DEBUG] [Thread-115903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:30:42.010 [DEBUG] [Thread-115903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:30:42.011 [INFO] [Thread-115903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] client lang: <none>
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] server lang: <none>
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] kex follows: False
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] Compression: none
2025-12-03T11:30:42.014 [DEBUG] [Thread-115903] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:30:42.031 [DEBUG] [Thread-115903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:30:42.031 [DEBUG] [Thread-115903] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:30:42.032 [DEBUG] [Thread-115903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:30:42.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:30:42.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:30:42.034 [DEBUG] [Thread-115903] [transport.py] [_log()] userauth is OK
2025-12-03T11:30:42.034 [DEBUG] [Thread-115903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:30:42.034 [DEBUG] [Thread-115903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:30:42.034 [DEBUG] [Thread-115903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:30:42.034 [DEBUG] [Thread-115903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:30:42.072 [INFO] [Thread-115903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:30:42.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:30:42.685 [DEBUG] [Thread-115903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:30:42.685 [DEBUG] [Thread-115903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:30:42.685 [DEBUG] [Thread-115903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:30:42.726 [DEBUG] [Thread-115903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:30:42.726 [DEBUG] [Thread-115903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:30:42.729 [DEBUG] [Thread-115903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:30:42.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:30:42.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:30:42.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:30:42.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:30:42.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:30:42.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:30:42.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:30:42.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:30:42.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:30:42.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.395884 -999.00  +17.30   3.97     40   +3.80 1 1 1 1 1   888    0 15.45 111.84 ----- 4.0 4.0 183.4 12.3 25.7 -25.3 24.6 -24.0 24.5 -23.1 25.5 -23.4
2025-12-03T11:30:42.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:30:42.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:30:42.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.395884
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:30:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:30:27', tmtdew=15.25, humidity=36.01, cloud=0.0, wind=10.36, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:30:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:30:42.754 [DEBUG] [Thread-115903] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:30:42.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:30:42.852 [DEBUG] [Thread-115906] [transport.py] [_log()] starting thread (client mode): 0xa5163c70
2025-12-03T11:30:42.852 [DEBUG] [Thread-115906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:30:42.867 [DEBUG] [Thread-115906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:30:42.867 [INFO] [Thread-115906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:30:42.875 [DEBUG] [Thread-115906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] client lang: <none>
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] server lang: <none>
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] kex follows: False
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] Compression: none
2025-12-03T11:30:42.876 [DEBUG] [Thread-115906] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:30:42.932 [DEBUG] [Thread-115906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:30:42.933 [DEBUG] [Thread-115906] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:30:42.933 [DEBUG] [Thread-115906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:30:42.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:30:42.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:30:42.989 [DEBUG] [Thread-115906] [transport.py] [_log()] userauth is OK
2025-12-03T11:30:42.989 [DEBUG] [Thread-115906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:30:42.990 [DEBUG] [Thread-115906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:30:42.990 [DEBUG] [Thread-115906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:30:42.990 [DEBUG] [Thread-115906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:30:43.008 [INFO] [Thread-115906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:30:43.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:30:43.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:30:43.158 [DEBUG] [Thread-115908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:43.863 [DEBUG] [Thread-115906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:30:43.863 [DEBUG] [Thread-115906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:30:43.911 [DEBUG] [Thread-115906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:30:43.911 [DEBUG] [Thread-115906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:30:43.920 [DEBUG] [Thread-115906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:30:43.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:30:43.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:30:43.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:30:43.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:30:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:30:43.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:30:43.955 [DEBUG] [Thread-115906] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:30:54.142 [DEBUG] [Thread-115909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:54.908 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:30:54.909 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:09.194 [DEBUG] [Thread-115910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:13.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:31:13.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:31:13.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:31:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 30, 59), 14.9, 37.03, 0.0, 10.83, 17.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:31:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:30:59
2025-12-03T11:31:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:31:14.928 [DEBUG] [Thread-115911] [transport.py] [_log()] starting thread (client mode): 0xa5161840
2025-12-03T11:31:14.929 [DEBUG] [Thread-115911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:31:14.949 [DEBUG] [Thread-115911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:31:14.949 [INFO] [Thread-115911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:31:14.952 [DEBUG] [Thread-115911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:31:14.952 [DEBUG] [Thread-115911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] client lang: <none>
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] server lang: <none>
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] kex follows: False
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] Compression: none
2025-12-03T11:31:14.953 [DEBUG] [Thread-115911] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:31:14.970 [DEBUG] [Thread-115911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:31:14.971 [DEBUG] [Thread-115911] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:31:14.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:31:14.972 [DEBUG] [Thread-115911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:31:14.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:31:14.974 [DEBUG] [Thread-115911] [transport.py] [_log()] userauth is OK
2025-12-03T11:31:14.974 [DEBUG] [Thread-115911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:31:14.974 [DEBUG] [Thread-115911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:31:14.974 [DEBUG] [Thread-115911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:31:14.975 [DEBUG] [Thread-115911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:31:14.989 [INFO] [Thread-115911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:31:14.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:31:15.816 [DEBUG] [Thread-115911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:31:15.816 [DEBUG] [Thread-115911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:31:15.816 [DEBUG] [Thread-115911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:31:15.857 [DEBUG] [Thread-115911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:31:15.857 [DEBUG] [Thread-115911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:31:15.860 [DEBUG] [Thread-115911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:31:15.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:31:15.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:31:15.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:31:15.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:31:15.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:31:15.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:31:15.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.396231 -999.00  +17.50   9.88     40   +4.10 1 1 1 1 1   888    0 15.58 110.74 ----- 11.7 9.9 197.8 13.1 25.9 -26.1 24.4 -28.2 24.6 -24.4 25.4 -24.3
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:31:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.396231
2025-12-03T11:31:15.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:31:15.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:31:15.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:31:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:31:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:31:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:30:59', tmtdew=14.9, humidity=37.03, cloud=0.0, wind=10.83, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:30:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:31:15.884 [DEBUG] [Thread-115911] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:31:15.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:31:15.980 [DEBUG] [Thread-115914] [transport.py] [_log()] starting thread (client mode): 0xa27c3280
2025-12-03T11:31:15.981 [DEBUG] [Thread-115914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:31:15.995 [DEBUG] [Thread-115914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:31:15.995 [INFO] [Thread-115914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:31:16.003 [DEBUG] [Thread-115914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:31:16.003 [DEBUG] [Thread-115914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:31:16.003 [DEBUG] [Thread-115914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] client lang: <none>
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] server lang: <none>
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] kex follows: False
2025-12-03T11:31:16.004 [DEBUG] [Thread-115914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] Compression: none
2025-12-03T11:31:16.005 [DEBUG] [Thread-115914] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:31:16.061 [DEBUG] [Thread-115914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:31:16.061 [DEBUG] [Thread-115914] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:31:16.062 [DEBUG] [Thread-115914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:31:16.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:31:16.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:31:16.121 [DEBUG] [Thread-115914] [transport.py] [_log()] userauth is OK
2025-12-03T11:31:16.121 [DEBUG] [Thread-115914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:31:16.121 [DEBUG] [Thread-115914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:31:16.121 [DEBUG] [Thread-115914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:31:16.122 [DEBUG] [Thread-115914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:31:16.141 [INFO] [Thread-115914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:31:16.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:31:16.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:31:16.989 [DEBUG] [Thread-115914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:31:16.989 [DEBUG] [Thread-115914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:31:17.037 [DEBUG] [Thread-115914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:31:17.037 [DEBUG] [Thread-115914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:31:17.049 [DEBUG] [Thread-115914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:31:17.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:31:17.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:31:17.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:31:17.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:31:17.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:31:17.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:31:17.092 [DEBUG] [Thread-115914] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:31:24.222 [DEBUG] [Thread-115916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:39.262 [DEBUG] [Thread-115917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:43.204 [DEBUG] [Thread-115918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:47.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:31:47.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:31:47.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:31:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 31, 31), 15.11, 36.56, 0.0, 12.65, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:31:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:31:31
2025-12-03T11:31:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:31:48.072 [DEBUG] [Thread-115919] [transport.py] [_log()] starting thread (client mode): 0xa5160070
2025-12-03T11:31:48.072 [DEBUG] [Thread-115919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:31:48.092 [DEBUG] [Thread-115919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:31:48.092 [INFO] [Thread-115919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:31:48.095 [DEBUG] [Thread-115919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] client lang: <none>
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] server lang: <none>
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] kex follows: False
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] Compression: none
2025-12-03T11:31:48.096 [DEBUG] [Thread-115919] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:31:48.116 [DEBUG] [Thread-115919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:31:48.116 [DEBUG] [Thread-115919] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:31:48.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:31:48.117 [DEBUG] [Thread-115919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:31:48.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:31:48.119 [DEBUG] [Thread-115919] [transport.py] [_log()] userauth is OK
2025-12-03T11:31:48.119 [DEBUG] [Thread-115919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:31:48.119 [DEBUG] [Thread-115919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:31:48.119 [DEBUG] [Thread-115919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:31:48.119 [DEBUG] [Thread-115919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:31:48.153 [INFO] [Thread-115919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:31:48.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:31:48.844 [DEBUG] [Thread-115919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:31:48.844 [DEBUG] [Thread-115919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:31:48.845 [DEBUG] [Thread-115919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:31:48.886 [DEBUG] [Thread-115919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:31:48.886 [DEBUG] [Thread-115919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:31:48.889 [DEBUG] [Thread-115919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:31:48.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:31:48.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:31:48.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:31:48.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:31:48.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:31:48.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:31:48.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:31:48.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:31:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:31:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.396578 -999.00  +17.90  16.14     39   +4.00 1 1 1 1 1   888    0 16.07 129.96 ----- 14.9 16.1 166.6 21.6 25.8 -26.3 24.8 -25.0 24.6 -24.0 25.5 -26.2
2025-12-03T11:31:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:31:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:31:48.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.396578
2025-12-03T11:31:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:31:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:31:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:31:48.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:31:48.912 [DEBUG] [Thread-115919] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:31:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:31:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:31:31', tmtdew=15.11, humidity=36.56, cloud=0.0, wind=12.65, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:31:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:31:48.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:31:49.007 [DEBUG] [Thread-115922] [transport.py] [_log()] starting thread (client mode): 0xa5163c10
2025-12-03T11:31:49.007 [DEBUG] [Thread-115922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:31:49.022 [DEBUG] [Thread-115922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:31:49.022 [INFO] [Thread-115922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:31:49.030 [DEBUG] [Thread-115922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] client lang: <none>
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] server lang: <none>
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] kex follows: False
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] Compression: none
2025-12-03T11:31:49.031 [DEBUG] [Thread-115922] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:31:49.085 [DEBUG] [Thread-115922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:31:49.086 [DEBUG] [Thread-115922] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:31:49.086 [DEBUG] [Thread-115922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:31:49.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:31:49.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:31:49.142 [DEBUG] [Thread-115922] [transport.py] [_log()] userauth is OK
2025-12-03T11:31:49.142 [DEBUG] [Thread-115922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:31:49.142 [DEBUG] [Thread-115922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:31:49.142 [DEBUG] [Thread-115922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:31:49.143 [DEBUG] [Thread-115922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:31:49.161 [INFO] [Thread-115922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:31:49.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:31:49.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:31:49.994 [DEBUG] [Thread-115922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:31:49.994 [DEBUG] [Thread-115922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:31:50.041 [DEBUG] [Thread-115922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:31:50.042 [DEBUG] [Thread-115922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:31:50.050 [DEBUG] [Thread-115922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:31:50.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:31:50.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:31:50.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:31:50.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:31:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:31:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:31:50.085 [DEBUG] [Thread-115922] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:31:54.294 [DEBUG] [Thread-115924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:55.048 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:31:55.049 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:09.331 [DEBUG] [Thread-115925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:32:20.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:32:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:32:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 32, 3), 15.61, 35.45, 0.0, 14.64, 17.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:32:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:32:03
2025-12-03T11:32:20.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:32:21.055 [DEBUG] [Thread-115926] [transport.py] [_log()] starting thread (client mode): 0xa27c3f70
2025-12-03T11:32:21.055 [DEBUG] [Thread-115926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:32:21.075 [DEBUG] [Thread-115926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:32:21.075 [INFO] [Thread-115926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:32:21.078 [DEBUG] [Thread-115926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] client lang: <none>
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] server lang: <none>
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] kex follows: False
2025-12-03T11:32:21.079 [DEBUG] [Thread-115926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] Compression: none
2025-12-03T11:32:21.080 [DEBUG] [Thread-115926] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:32:21.100 [DEBUG] [Thread-115926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:32:21.101 [DEBUG] [Thread-115926] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:32:21.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:32:21.102 [DEBUG] [Thread-115926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:32:21.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:32:21.144 [DEBUG] [Thread-115926] [transport.py] [_log()] userauth is OK
2025-12-03T11:32:21.144 [DEBUG] [Thread-115926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:32:21.145 [DEBUG] [Thread-115926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:32:21.145 [DEBUG] [Thread-115926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:32:21.145 [DEBUG] [Thread-115926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:32:21.167 [INFO] [Thread-115926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:32:21.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:32:21.954 [DEBUG] [Thread-115926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:32:21.954 [DEBUG] [Thread-115926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:32:21.955 [DEBUG] [Thread-115926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:32:21.995 [DEBUG] [Thread-115926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:32:21.995 [DEBUG] [Thread-115926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:32:21.998 [DEBUG] [Thread-115926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:32:22.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:32:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:32:22.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:32:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:32:22.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:32:22.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:32:22.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:32:22.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.396925 -999.00  +18.00  19.20     39   +4.10 1 1 1 1 1   888    0 16.65 133.14 ----- 19.9 19.2 163.2 26.7 25.8 -27.1 24.8 -25.4 24.5 -24.2 25.5 -24.8
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.396925
2025-12-03T11:32:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:32:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:32:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:32:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:32:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:32:22.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:32:03', tmtdew=15.61, humidity=35.45, cloud=0.0, wind=14.64, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:31:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:32:22.025 [DEBUG] [Thread-115926] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:32:22.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:32:22.121 [DEBUG] [Thread-115929] [transport.py] [_log()] starting thread (client mode): 0xa27c25c0
2025-12-03T11:32:22.121 [DEBUG] [Thread-115929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:32:22.135 [DEBUG] [Thread-115929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:32:22.135 [INFO] [Thread-115929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:32:22.143 [DEBUG] [Thread-115929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:32:22.143 [DEBUG] [Thread-115929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:32:22.144 [DEBUG] [Thread-115929] [transport.py] [_log()] client lang: <none>
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] server lang: <none>
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] kex follows: False
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:32:22.145 [DEBUG] [Thread-115929] [transport.py] [_log()] Compression: none
2025-12-03T11:32:22.146 [DEBUG] [Thread-115929] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:32:22.203 [DEBUG] [Thread-115929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:32:22.204 [DEBUG] [Thread-115929] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:32:22.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:32:22.205 [DEBUG] [Thread-115929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:32:22.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:32:22.259 [DEBUG] [Thread-115929] [transport.py] [_log()] userauth is OK
2025-12-03T11:32:22.259 [DEBUG] [Thread-115929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:32:22.259 [DEBUG] [Thread-115929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:32:22.259 [DEBUG] [Thread-115929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:32:22.259 [DEBUG] [Thread-115929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:32:22.277 [INFO] [Thread-115929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:32:22.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:32:22.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:32:23.121 [DEBUG] [Thread-115929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:32:23.121 [DEBUG] [Thread-115929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:32:23.169 [DEBUG] [Thread-115929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:32:23.170 [DEBUG] [Thread-115929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:32:23.178 [DEBUG] [Thread-115929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:32:23.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:32:23.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:32:23.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:32:23.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:32:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:32:23.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:32:23.213 [DEBUG] [Thread-115929] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:32:24.359 [DEBUG] [Thread-115931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:39.402 [DEBUG] [Thread-115932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:43.249 [DEBUG] [Thread-115933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:32:53.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:32:53.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:32:53.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 32, 35), 16.43, 33.47, 0.0, 14.59, 17.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:32:53.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:32:35
2025-12-03T11:32:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:32:54.170 [DEBUG] [Thread-115934] [transport.py] [_log()] starting thread (client mode): 0xa27c0be0
2025-12-03T11:32:54.170 [DEBUG] [Thread-115934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:32:54.189 [DEBUG] [Thread-115934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:32:54.189 [INFO] [Thread-115934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:32:54.192 [DEBUG] [Thread-115934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] client lang: <none>
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] server lang: <none>
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] kex follows: False
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] Compression: none
2025-12-03T11:32:54.193 [DEBUG] [Thread-115934] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:32:54.211 [DEBUG] [Thread-115934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:32:54.211 [DEBUG] [Thread-115934] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:32:54.212 [DEBUG] [Thread-115934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:32:54.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:32:54.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:32:54.213 [DEBUG] [Thread-115934] [transport.py] [_log()] userauth is OK
2025-12-03T11:32:54.214 [DEBUG] [Thread-115934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:32:54.214 [DEBUG] [Thread-115934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:32:54.214 [DEBUG] [Thread-115934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:32:54.214 [DEBUG] [Thread-115934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:32:54.237 [INFO] [Thread-115934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:32:54.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:32:54.430 [DEBUG] [Thread-115936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:54.856 [DEBUG] [Thread-115934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:32:54.857 [DEBUG] [Thread-115934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:32:54.857 [DEBUG] [Thread-115934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:32:54.898 [DEBUG] [Thread-115934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:32:54.898 [DEBUG] [Thread-115934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:32:54.901 [DEBUG] [Thread-115934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:32:54.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:32:54.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:32:54.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:32:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:32:54.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:32:54.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:32:54.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:32:54.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.397273 -999.00  +18.10  16.14     39   +4.10 1 1 1 1 1   888    0 16.41 134.13 ----- 18.8 16.1 175.8 27.4 25.9 -25.9 24.7 -24.6 24.5 -25.2 25.5 -28.1
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.397273
2025-12-03T11:32:54.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:32:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:32:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:32:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:32:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:32:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:32:35', tmtdew=16.43, humidity=33.47, cloud=0.0, wind=14.59, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:32:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:32:54.925 [DEBUG] [Thread-115934] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:32:55.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:32:55.019 [DEBUG] [Thread-115938] [transport.py] [_log()] starting thread (client mode): 0xa5161de0
2025-12-03T11:32:55.019 [DEBUG] [Thread-115938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:32:55.035 [DEBUG] [Thread-115938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:32:55.035 [INFO] [Thread-115938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:55.043 [DEBUG] [Thread-115938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] client lang: <none>
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] server lang: <none>
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] kex follows: False
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] Compression: none
2025-12-03T11:32:55.044 [DEBUG] [Thread-115938] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:32:55.098 [DEBUG] [Thread-115938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:32:55.099 [DEBUG] [Thread-115938] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:32:55.099 [DEBUG] [Thread-115938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:32:55.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:32:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:32:55.155 [DEBUG] [Thread-115938] [transport.py] [_log()] userauth is OK
2025-12-03T11:32:55.155 [DEBUG] [Thread-115938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:32:55.155 [DEBUG] [Thread-115938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:32:55.155 [DEBUG] [Thread-115938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:32:55.156 [DEBUG] [Thread-115938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:32:55.175 [INFO] [Thread-115938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:32:55.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:32:55.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:32:55.193 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:55.194 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:32:56.042 [DEBUG] [Thread-115938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:32:56.042 [DEBUG] [Thread-115938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:32:56.090 [DEBUG] [Thread-115938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:32:56.090 [DEBUG] [Thread-115938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:32:56.100 [DEBUG] [Thread-115938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:32:56.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:32:56.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:32:56.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:32:56.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:32:56.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:32:56.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:32:56.140 [DEBUG] [Thread-115938] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:33:09.455 [DEBUG] [Thread-115940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:24.489 [DEBUG] [Thread-115941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:33:26.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:33:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:33:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 33, 7), 16.32, 33.65, 0.0, 15.24, 17.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:33:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:33:07
2025-12-03T11:33:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:33:27.129 [DEBUG] [Thread-115942] [transport.py] [_log()] starting thread (client mode): 0xa51609a0
2025-12-03T11:33:27.129 [DEBUG] [Thread-115942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:33:27.150 [DEBUG] [Thread-115942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:33:27.150 [INFO] [Thread-115942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] client lang: <none>
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] server lang: <none>
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] kex follows: False
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] Compression: none
2025-12-03T11:33:27.153 [DEBUG] [Thread-115942] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:33:27.168 [DEBUG] [Thread-115942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:33:27.169 [DEBUG] [Thread-115942] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:33:27.169 [DEBUG] [Thread-115942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:33:27.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:33:27.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:33:27.170 [DEBUG] [Thread-115942] [transport.py] [_log()] userauth is OK
2025-12-03T11:33:27.170 [DEBUG] [Thread-115942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:33:27.170 [DEBUG] [Thread-115942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:33:27.170 [DEBUG] [Thread-115942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:33:27.170 [DEBUG] [Thread-115942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:33:27.185 [INFO] [Thread-115942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:33:27.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:33:28.016 [DEBUG] [Thread-115942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:33:28.016 [DEBUG] [Thread-115942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:33:28.016 [DEBUG] [Thread-115942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:33:28.057 [DEBUG] [Thread-115942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:33:28.057 [DEBUG] [Thread-115942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:33:28.060 [DEBUG] [Thread-115942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:33:28.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:33:28.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:33:28.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:33:28.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:33:28.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:33:28.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:33:28.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.397620 -999.00  +18.00  12.33     40   +4.20 1 1 1 1 1   888    0 16.65 130.53 ----- 13.3 12.3 186.8 23.8 25.8 -25.9 24.4 -25.4 24.5 -24.8 25.4 -25.3
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.397620
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:33:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:33:07', tmtdew=16.32, humidity=33.65, cloud=0.0, wind=15.24, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:32:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:33:28.078 [DEBUG] [Thread-115942] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:33:28.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:33:28.164 [DEBUG] [Thread-115945] [transport.py] [_log()] starting thread (client mode): 0xa27b6050
2025-12-03T11:33:28.165 [DEBUG] [Thread-115945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:33:28.179 [DEBUG] [Thread-115945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:33:28.180 [INFO] [Thread-115945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] client lang: <none>
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] server lang: <none>
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] kex follows: False
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:33:28.187 [DEBUG] [Thread-115945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:33:28.188 [DEBUG] [Thread-115945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:33:28.188 [DEBUG] [Thread-115945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:33:28.188 [DEBUG] [Thread-115945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:33:28.188 [DEBUG] [Thread-115945] [transport.py] [_log()] Compression: none
2025-12-03T11:33:28.188 [DEBUG] [Thread-115945] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:33:28.245 [DEBUG] [Thread-115945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:33:28.245 [DEBUG] [Thread-115945] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:33:28.245 [DEBUG] [Thread-115945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:33:28.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:33:28.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:33:28.303 [DEBUG] [Thread-115945] [transport.py] [_log()] userauth is OK
2025-12-03T11:33:28.303 [DEBUG] [Thread-115945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:33:28.303 [DEBUG] [Thread-115945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:33:28.303 [DEBUG] [Thread-115945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:33:28.303 [DEBUG] [Thread-115945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:33:28.321 [INFO] [Thread-115945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:33:28.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:33:28.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:33:29.200 [DEBUG] [Thread-115945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:33:29.200 [DEBUG] [Thread-115945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:33:29.248 [DEBUG] [Thread-115945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:33:29.248 [DEBUG] [Thread-115945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:33:29.258 [DEBUG] [Thread-115945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:33:29.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:33:29.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:33:29.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:33:29.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:33:29.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:33:29.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:33:29.293 [DEBUG] [Thread-115945] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:33:39.513 [DEBUG] [Thread-115947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:43.309 [DEBUG] [Thread-115948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:54.554 [DEBUG] [Thread-115949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:55.334 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:55.335 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:33:59.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:33:59.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:33:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:33:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 33, 39), 16.38, 33.27, 0.0, 20.36, 17.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:33:59.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:33:39
2025-12-03T11:34:00.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:34:00.261 [DEBUG] [Thread-115950] [transport.py] [_log()] starting thread (client mode): 0xa27c0c70
2025-12-03T11:34:00.262 [DEBUG] [Thread-115950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:34:00.281 [DEBUG] [Thread-115950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:34:00.281 [INFO] [Thread-115950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:34:00.284 [DEBUG] [Thread-115950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:34:00.284 [DEBUG] [Thread-115950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:34:00.284 [DEBUG] [Thread-115950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:34:00.284 [DEBUG] [Thread-115950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:00.284 [DEBUG] [Thread-115950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] client lang: <none>
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] server lang: <none>
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] kex follows: False
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] Compression: none
2025-12-03T11:34:00.285 [DEBUG] [Thread-115950] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:34:00.305 [DEBUG] [Thread-115950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:34:00.305 [DEBUG] [Thread-115950] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:34:00.306 [DEBUG] [Thread-115950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:34:00.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:34:00.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:34:00.308 [DEBUG] [Thread-115950] [transport.py] [_log()] userauth is OK
2025-12-03T11:34:00.308 [DEBUG] [Thread-115950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:34:00.308 [DEBUG] [Thread-115950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:34:00.308 [DEBUG] [Thread-115950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:34:00.308 [DEBUG] [Thread-115950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:34:00.342 [INFO] [Thread-115950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:34:00.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:34:00.973 [DEBUG] [Thread-115950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:34:00.973 [DEBUG] [Thread-115950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:34:00.973 [DEBUG] [Thread-115950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:34:01.014 [DEBUG] [Thread-115950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:34:01.014 [DEBUG] [Thread-115950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:34:01.017 [DEBUG] [Thread-115950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:34:01.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:34:01.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:34:01.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:34:01.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:34:01.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:34:01.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:34:01.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:34:01.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.397967 -999.00  +17.80  22.51     39   +3.90 1 1 1 1 1   888    0 16.53 133.85 ----- 17.0 22.5 171.2 31.2 25.7 -27.5 24.6 -25.0 24.4 -25.2 25.4 -23.9
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.397967
2025-12-03T11:34:01.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:34:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:34:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:34:01.041 [DEBUG] [Thread-115950] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:34:01.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:34:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:34:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:33:39', tmtdew=16.38, humidity=33.27, cloud=0.0, wind=20.36, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:33:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:34:01.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:34:01.140 [DEBUG] [Thread-115953] [transport.py] [_log()] starting thread (client mode): 0xa27c3ee0
2025-12-03T11:34:01.141 [DEBUG] [Thread-115953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:34:01.156 [DEBUG] [Thread-115953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:34:01.156 [INFO] [Thread-115953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:34:01.163 [DEBUG] [Thread-115953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] client lang: <none>
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] server lang: <none>
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] kex follows: False
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] Compression: none
2025-12-03T11:34:01.164 [DEBUG] [Thread-115953] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:34:01.223 [DEBUG] [Thread-115953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:34:01.223 [DEBUG] [Thread-115953] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:34:01.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:34:01.223 [DEBUG] [Thread-115953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:34:01.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:34:01.280 [DEBUG] [Thread-115953] [transport.py] [_log()] userauth is OK
2025-12-03T11:34:01.280 [DEBUG] [Thread-115953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:34:01.280 [DEBUG] [Thread-115953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:34:01.280 [DEBUG] [Thread-115953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:34:01.280 [DEBUG] [Thread-115953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:34:01.294 [INFO] [Thread-115953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:34:01.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:34:01.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:34:02.212 [DEBUG] [Thread-115953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:34:02.212 [DEBUG] [Thread-115953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:34:02.259 [DEBUG] [Thread-115953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:34:02.259 [DEBUG] [Thread-115953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:34:02.268 [DEBUG] [Thread-115953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:34:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:34:02.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:34:02.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:34:02.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:34:02.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:34:02.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:34:02.299 [DEBUG] [Thread-115953] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:34:09.579 [DEBUG] [Thread-115955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:24.619 [DEBUG] [Thread-115956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:34:32.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:34:32.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:34:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 34, 11), 16.51, 33.02, 0.0, 19.82, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:34:32.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:34:11
2025-12-03T11:34:33.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:34:33.250 [DEBUG] [Thread-115957] [transport.py] [_log()] starting thread (client mode): 0xa27b5840
2025-12-03T11:34:33.250 [DEBUG] [Thread-115957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:34:33.272 [DEBUG] [Thread-115957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:34:33.272 [INFO] [Thread-115957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] client lang: <none>
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] server lang: <none>
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] kex follows: False
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:34:33.275 [DEBUG] [Thread-115957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:34:33.276 [DEBUG] [Thread-115957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:34:33.276 [DEBUG] [Thread-115957] [transport.py] [_log()] Compression: none
2025-12-03T11:34:33.276 [DEBUG] [Thread-115957] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:34:33.293 [DEBUG] [Thread-115957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:34:33.293 [DEBUG] [Thread-115957] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:34:33.294 [DEBUG] [Thread-115957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:34:33.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:34:33.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:34:33.295 [DEBUG] [Thread-115957] [transport.py] [_log()] userauth is OK
2025-12-03T11:34:33.296 [DEBUG] [Thread-115957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:34:33.296 [DEBUG] [Thread-115957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:34:33.296 [DEBUG] [Thread-115957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:34:33.296 [DEBUG] [Thread-115957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:34:33.319 [INFO] [Thread-115957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:34:33.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:34:34.108 [DEBUG] [Thread-115957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:34:34.108 [DEBUG] [Thread-115957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:34:34.108 [DEBUG] [Thread-115957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:34:34.149 [DEBUG] [Thread-115957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:34:34.149 [DEBUG] [Thread-115957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:34:34.151 [DEBUG] [Thread-115957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:34:34.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:34:34.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:34:34.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:34:34.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:34:34.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:34:34.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:34:34.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.398314 -999.00  +17.70  11.68     38   +3.40 1 1 1 1 1   888    0 16.52 134.23 ----- 10.2 11.7 150.2 22.5 25.8 -25.8 24.8 -24.7 24.6 -23.8 25.6 -24.2
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:34:34.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.398314
2025-12-03T11:34:34.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:34:34.171 [DEBUG] [Thread-115957] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:34:34.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:34:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:34:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:34:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:34:34.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:34:11', tmtdew=16.51, humidity=33.02, cloud=0.0, wind=19.82, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:33:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:34:34.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:34:34.260 [DEBUG] [Thread-115960] [transport.py] [_log()] starting thread (client mode): 0xa27c0be0
2025-12-03T11:34:34.261 [DEBUG] [Thread-115960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:34:34.275 [DEBUG] [Thread-115960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:34:34.275 [INFO] [Thread-115960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:34.283 [DEBUG] [Thread-115960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] client lang: <none>
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] server lang: <none>
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] kex follows: False
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:34:34.284 [DEBUG] [Thread-115960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:34:34.285 [DEBUG] [Thread-115960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:34:34.285 [DEBUG] [Thread-115960] [transport.py] [_log()] Compression: none
2025-12-03T11:34:34.285 [DEBUG] [Thread-115960] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:34:34.341 [DEBUG] [Thread-115960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:34:34.342 [DEBUG] [Thread-115960] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:34:34.342 [DEBUG] [Thread-115960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:34:34.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:34:34.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:34:34.397 [DEBUG] [Thread-115960] [transport.py] [_log()] userauth is OK
2025-12-03T11:34:34.397 [DEBUG] [Thread-115960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:34:34.397 [DEBUG] [Thread-115960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:34:34.397 [DEBUG] [Thread-115960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:34:34.397 [DEBUG] [Thread-115960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:34:34.416 [INFO] [Thread-115960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:34:34.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:34:34.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:34:35.259 [DEBUG] [Thread-115960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:34:35.259 [DEBUG] [Thread-115960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:34:35.308 [DEBUG] [Thread-115960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:34:35.308 [DEBUG] [Thread-115960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:34:35.317 [DEBUG] [Thread-115960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:34:35.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:34:35.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:34:35.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:34:35.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:34:35.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:34:35.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:34:35.352 [DEBUG] [Thread-115960] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:34:39.654 [DEBUG] [Thread-115962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:43.338 [DEBUG] [Thread-115963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:54.697 [DEBUG] [Thread-115964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:55.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:34:55.483 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:05.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:35:05.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:35:05.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:35:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 34, 43), 16.52, 33.08, 0.0, 16.71, 17.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:35:06.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:34:43
2025-12-03T11:35:06.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:35:06.330 [DEBUG] [Thread-115965] [transport.py] [_log()] starting thread (client mode): 0xa5160970
2025-12-03T11:35:06.330 [DEBUG] [Thread-115965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:35:06.350 [DEBUG] [Thread-115965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:35:06.350 [INFO] [Thread-115965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] client lang: <none>
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] server lang: <none>
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] kex follows: False
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] Compression: none
2025-12-03T11:35:06.354 [DEBUG] [Thread-115965] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:35:06.371 [DEBUG] [Thread-115965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:35:06.371 [DEBUG] [Thread-115965] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:35:06.372 [DEBUG] [Thread-115965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:35:06.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:35:06.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:35:06.374 [DEBUG] [Thread-115965] [transport.py] [_log()] userauth is OK
2025-12-03T11:35:06.374 [DEBUG] [Thread-115965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:35:06.374 [DEBUG] [Thread-115965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:35:06.374 [DEBUG] [Thread-115965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:35:06.374 [DEBUG] [Thread-115965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:35:06.398 [INFO] [Thread-115965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:35:06.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:35:07.289 [DEBUG] [Thread-115965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:35:07.290 [DEBUG] [Thread-115965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:35:07.290 [DEBUG] [Thread-115965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:35:07.331 [DEBUG] [Thread-115965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:35:07.331 [DEBUG] [Thread-115965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:35:07.334 [DEBUG] [Thread-115965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:35:07.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:35:07.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:35:07.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:35:07.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:35:07.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:35:07.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:35:07.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:35:07.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:35:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:35:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.399009 -999.00  +17.80  15.07     39   +3.80 1 1 1 1 1   888    0 16.52 126.58 ----- 15.0 15.1 192.0 19.9 25.8 -27.0 24.3 -29.3 24.6 -24.9 25.6 -25.2
2025-12-03T11:35:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:35:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:35:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.399009
2025-12-03T11:35:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:35:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:35:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:35:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:35:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:35:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:34:43', tmtdew=16.52, humidity=33.08, cloud=0.0, wind=16.71, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:34:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:35:07.369 [DEBUG] [Thread-115965] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:35:07.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:35:07.457 [DEBUG] [Thread-115968] [transport.py] [_log()] starting thread (client mode): 0xa27c3a30
2025-12-03T11:35:07.457 [DEBUG] [Thread-115968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:35:07.472 [DEBUG] [Thread-115968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:35:07.472 [INFO] [Thread-115968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:07.480 [DEBUG] [Thread-115968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] client lang: <none>
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] server lang: <none>
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] kex follows: False
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] Compression: none
2025-12-03T11:35:07.481 [DEBUG] [Thread-115968] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:35:07.537 [DEBUG] [Thread-115968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:35:07.538 [DEBUG] [Thread-115968] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:35:07.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:35:07.539 [DEBUG] [Thread-115968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:35:07.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:35:07.593 [DEBUG] [Thread-115968] [transport.py] [_log()] userauth is OK
2025-12-03T11:35:07.593 [DEBUG] [Thread-115968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:35:07.593 [DEBUG] [Thread-115968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:35:07.593 [DEBUG] [Thread-115968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:35:07.593 [DEBUG] [Thread-115968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:35:07.613 [INFO] [Thread-115968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:35:07.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:35:07.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:35:08.445 [DEBUG] [Thread-115968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:35:08.445 [DEBUG] [Thread-115968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:35:08.494 [DEBUG] [Thread-115968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:35:08.494 [DEBUG] [Thread-115968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:35:08.503 [DEBUG] [Thread-115968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:35:08.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:35:08.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:35:08.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:35:08.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:35:08.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:35:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:35:08.538 [DEBUG] [Thread-115968] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:35:09.725 [DEBUG] [Thread-115970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:24.772 [DEBUG] [Thread-115971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:38.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:35:38.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:35:38.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:35:39.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 35, 15), 16.41, 33.29, 0.0, 14.38, 17.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:35:39.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:35:15
2025-12-03T11:35:39.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:35:39.512 [DEBUG] [Thread-115972] [transport.py] [_log()] starting thread (client mode): 0xa27c13c0
2025-12-03T11:35:39.512 [DEBUG] [Thread-115972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:35:39.531 [DEBUG] [Thread-115972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:35:39.531 [INFO] [Thread-115972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] client lang: <none>
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] server lang: <none>
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] kex follows: False
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] Compression: none
2025-12-03T11:35:39.535 [DEBUG] [Thread-115972] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:35:39.552 [DEBUG] [Thread-115972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:35:39.552 [DEBUG] [Thread-115972] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:35:39.553 [DEBUG] [Thread-115972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:35:39.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:35:39.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:35:39.555 [DEBUG] [Thread-115972] [transport.py] [_log()] userauth is OK
2025-12-03T11:35:39.555 [DEBUG] [Thread-115972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:35:39.555 [DEBUG] [Thread-115972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:35:39.555 [DEBUG] [Thread-115972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:35:39.555 [DEBUG] [Thread-115972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:35:39.589 [INFO] [Thread-115972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:35:39.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:35:39.798 [DEBUG] [Thread-115974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:40.412 [DEBUG] [Thread-115972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:35:40.412 [DEBUG] [Thread-115972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:35:40.413 [DEBUG] [Thread-115972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:35:40.453 [DEBUG] [Thread-115972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:35:40.453 [DEBUG] [Thread-115972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:35:40.456 [DEBUG] [Thread-115972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:35:40.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:35:40.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:35:40.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:35:40.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:35:40.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:35:40.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:35:40.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:35:40.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.399356 -999.00  +18.00  11.72     40   +4.40 1 1 1 1 1   888    0 16.51 125.14 ----- 13.3 11.7 176.8 17.2 25.9 -26.2 24.6 -25.6 24.6 -23.4 25.5 -26.4
2025-12-03T11:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.399356
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:35:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:35:15', tmtdew=16.41, humidity=33.29, cloud=0.0, wind=14.38, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:35:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:35:40.480 [DEBUG] [Thread-115972] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:35:40.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:35:40.575 [DEBUG] [Thread-115976] [transport.py] [_log()] starting thread (client mode): 0xa27c1b70
2025-12-03T11:35:40.576 [DEBUG] [Thread-115976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:35:40.591 [DEBUG] [Thread-115976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:35:40.591 [INFO] [Thread-115976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:40.599 [DEBUG] [Thread-115976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] client lang: <none>
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] server lang: <none>
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] kex follows: False
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:35:40.600 [DEBUG] [Thread-115976] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:35:40.601 [DEBUG] [Thread-115976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:35:40.601 [DEBUG] [Thread-115976] [transport.py] [_log()] Compression: none
2025-12-03T11:35:40.601 [DEBUG] [Thread-115976] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:35:40.658 [DEBUG] [Thread-115976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:35:40.658 [DEBUG] [Thread-115976] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:35:40.659 [DEBUG] [Thread-115976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:35:40.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:35:40.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:35:40.714 [DEBUG] [Thread-115976] [transport.py] [_log()] userauth is OK
2025-12-03T11:35:40.714 [DEBUG] [Thread-115976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:35:40.714 [DEBUG] [Thread-115976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:35:40.714 [DEBUG] [Thread-115976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:35:40.714 [DEBUG] [Thread-115976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:35:40.736 [INFO] [Thread-115976] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:35:40.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:35:40.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:35:41.576 [DEBUG] [Thread-115976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:35:41.576 [DEBUG] [Thread-115976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:35:41.625 [DEBUG] [Thread-115976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:35:41.625 [DEBUG] [Thread-115976] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:35:41.634 [DEBUG] [Thread-115976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:35:41.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:35:41.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:35:41.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:35:41.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:35:41.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:35:41.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:35:41.668 [DEBUG] [Thread-115976] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:35:43.384 [DEBUG] [Thread-115978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:54.832 [DEBUG] [Thread-115979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:55.621 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:35:55.622 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:09.878 [DEBUG] [Thread-115980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:11.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:36:11.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:36:11.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:36:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 35, 47), 15.94, 34.61, 0.0, 12.79, 17.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:36:12.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:35:47
2025-12-03T11:36:12.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:36:12.654 [DEBUG] [Thread-115981] [transport.py] [_log()] starting thread (client mode): 0xa27b5b70
2025-12-03T11:36:12.655 [DEBUG] [Thread-115981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:36:12.674 [DEBUG] [Thread-115981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:36:12.674 [INFO] [Thread-115981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] client lang: <none>
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] server lang: <none>
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] kex follows: False
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] Compression: none
2025-12-03T11:36:12.676 [DEBUG] [Thread-115981] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:36:12.684 [DEBUG] [Thread-115981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:36:12.685 [DEBUG] [Thread-115981] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:36:12.685 [DEBUG] [Thread-115981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:36:12.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:36:12.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:36:12.687 [DEBUG] [Thread-115981] [transport.py] [_log()] userauth is OK
2025-12-03T11:36:12.687 [DEBUG] [Thread-115981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:36:12.687 [DEBUG] [Thread-115981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:36:12.687 [DEBUG] [Thread-115981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:36:12.687 [DEBUG] [Thread-115981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:36:12.704 [INFO] [Thread-115981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:36:12.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:36:13.339 [DEBUG] [Thread-115981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:36:13.339 [DEBUG] [Thread-115981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:36:13.339 [DEBUG] [Thread-115981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:36:13.380 [DEBUG] [Thread-115981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:36:13.380 [DEBUG] [Thread-115981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:36:13.383 [DEBUG] [Thread-115981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:36:13.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:36:13.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:36:13.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:36:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:36:13.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:36:13.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:36:13.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:36:13.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.399703 -999.00  +17.90   8.83     41   +4.60 1 1 1 1 1   888    0 17.01 136.18 ----- 9.2 8.8 177.4 18.9 25.8 -25.5 24.6 -29.5 24.7 -23.4 25.6 -24.6
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.399703
2025-12-03T11:36:13.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:36:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:36:13.407 [DEBUG] [Thread-115981] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:36:13.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:36:13.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:36:13.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:36:13.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:35:47', tmtdew=15.94, humidity=34.61, cloud=0.0, wind=12.79, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:35:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:36:13.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:36:13.505 [DEBUG] [Thread-115984] [transport.py] [_log()] starting thread (client mode): 0xa27b43d0
2025-12-03T11:36:13.505 [DEBUG] [Thread-115984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:36:13.520 [DEBUG] [Thread-115984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:36:13.520 [INFO] [Thread-115984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] client lang: <none>
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] server lang: <none>
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] kex follows: False
2025-12-03T11:36:13.531 [DEBUG] [Thread-115984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] Compression: none
2025-12-03T11:36:13.532 [DEBUG] [Thread-115984] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:36:13.588 [DEBUG] [Thread-115984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:36:13.588 [DEBUG] [Thread-115984] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:36:13.588 [DEBUG] [Thread-115984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:36:13.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:36:13.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:36:13.649 [DEBUG] [Thread-115984] [transport.py] [_log()] userauth is OK
2025-12-03T11:36:13.649 [DEBUG] [Thread-115984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:36:13.649 [DEBUG] [Thread-115984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:36:13.649 [DEBUG] [Thread-115984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:36:13.649 [DEBUG] [Thread-115984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:36:13.668 [INFO] [Thread-115984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:36:13.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:36:13.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:36:14.530 [DEBUG] [Thread-115984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:36:14.530 [DEBUG] [Thread-115984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:36:14.583 [DEBUG] [Thread-115984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:36:14.583 [DEBUG] [Thread-115984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:36:14.591 [DEBUG] [Thread-115984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:36:14.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:36:14.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:36:14.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:36:14.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:36:14.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:36:14.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:36:14.625 [DEBUG] [Thread-115984] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:36:24.906 [DEBUG] [Thread-115986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:39.954 [DEBUG] [Thread-115987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:43.440 [DEBUG] [Thread-115988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:44.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:36:44.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:36:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:36:45.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 36, 19), 15.81, 34.89, 0.0, 10.43, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:36:45.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:36:19
2025-12-03T11:36:45.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:36:45.578 [DEBUG] [Thread-115989] [transport.py] [_log()] starting thread (client mode): 0xa27c26b0
2025-12-03T11:36:45.578 [DEBUG] [Thread-115989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:36:45.598 [DEBUG] [Thread-115989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:36:45.598 [INFO] [Thread-115989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:36:45.601 [DEBUG] [Thread-115989] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:36:45.601 [DEBUG] [Thread-115989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:36:45.601 [DEBUG] [Thread-115989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:36:45.601 [DEBUG] [Thread-115989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] client lang: <none>
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] server lang: <none>
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] kex follows: False
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] Compression: none
2025-12-03T11:36:45.602 [DEBUG] [Thread-115989] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:36:45.619 [DEBUG] [Thread-115989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:36:45.620 [DEBUG] [Thread-115989] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:36:45.620 [DEBUG] [Thread-115989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:36:45.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:36:45.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:36:45.622 [DEBUG] [Thread-115989] [transport.py] [_log()] userauth is OK
2025-12-03T11:36:45.622 [DEBUG] [Thread-115989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:36:45.622 [DEBUG] [Thread-115989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:36:45.622 [DEBUG] [Thread-115989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:36:45.622 [DEBUG] [Thread-115989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:36:45.646 [INFO] [Thread-115989] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:36:45.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:36:46.413 [DEBUG] [Thread-115989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:36:46.413 [DEBUG] [Thread-115989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:36:46.413 [DEBUG] [Thread-115989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:36:46.453 [DEBUG] [Thread-115989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:36:46.454 [DEBUG] [Thread-115989] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:36:46.456 [DEBUG] [Thread-115989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:36:46.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:36:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:36:46.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:36:46.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:36:46.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:36:46.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:36:46.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.400050 -999.00  +18.20   5.48     41   +4.80 1 1 1 1 1   888    0 17.18 138.88 ----- 7.5 5.5 144.8 8.6 26.1 -24.4 24.9 -23.9 24.9 -22.6 25.6 -24.6
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:36:46.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.400050
2025-12-03T11:36:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:36:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:36:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:36:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:36:46.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:36:46.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:36:19', tmtdew=15.81, humidity=34.89, cloud=0.0, wind=10.43, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:36:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:36:46.482 [DEBUG] [Thread-115989] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:36:46.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:36:46.576 [DEBUG] [Thread-115992] [transport.py] [_log()] starting thread (client mode): 0xa27c01f0
2025-12-03T11:36:46.576 [DEBUG] [Thread-115992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:36:46.591 [DEBUG] [Thread-115992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:36:46.591 [INFO] [Thread-115992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:36:46.598 [DEBUG] [Thread-115992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] client lang: <none>
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] server lang: <none>
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] kex follows: False
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] Compression: none
2025-12-03T11:36:46.599 [DEBUG] [Thread-115992] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:36:46.658 [DEBUG] [Thread-115992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:36:46.659 [DEBUG] [Thread-115992] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:36:46.659 [DEBUG] [Thread-115992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:36:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:36:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:36:46.724 [DEBUG] [Thread-115992] [transport.py] [_log()] userauth is OK
2025-12-03T11:36:46.725 [DEBUG] [Thread-115992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:36:46.725 [DEBUG] [Thread-115992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:36:46.725 [DEBUG] [Thread-115992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:36:46.725 [DEBUG] [Thread-115992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:36:46.744 [INFO] [Thread-115992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:36:46.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:36:46.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:36:47.615 [DEBUG] [Thread-115992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:36:47.615 [DEBUG] [Thread-115992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:36:47.663 [DEBUG] [Thread-115992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:36:47.663 [DEBUG] [Thread-115992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:36:47.672 [DEBUG] [Thread-115992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:36:47.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:36:47.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:36:47.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:36:47.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:36:47.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:36:47.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:36:47.707 [DEBUG] [Thread-115992] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:36:54.980 [DEBUG] [Thread-115994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:55.760 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:36:55.761 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:10.024 [DEBUG] [Thread-115995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:37:17.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:37:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:37:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 36, 51), 15.15, 36.43, 0.0, 16.38, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:37:18.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:36:51
2025-12-03T11:37:18.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:37:18.739 [DEBUG] [Thread-115996] [transport.py] [_log()] starting thread (client mode): 0xa27b4400
2025-12-03T11:37:18.739 [DEBUG] [Thread-115996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:37:18.759 [DEBUG] [Thread-115996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:37:18.759 [INFO] [Thread-115996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] client lang: <none>
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] server lang: <none>
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] kex follows: False
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] Compression: none
2025-12-03T11:37:18.763 [DEBUG] [Thread-115996] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:37:18.778 [DEBUG] [Thread-115996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:37:18.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:37:18.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] userauth is OK
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:37:18.779 [DEBUG] [Thread-115996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:37:18.788 [INFO] [Thread-115996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:37:18.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:37:19.429 [DEBUG] [Thread-115996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:37:19.429 [DEBUG] [Thread-115996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:37:19.429 [DEBUG] [Thread-115996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:37:19.470 [DEBUG] [Thread-115996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:37:19.470 [DEBUG] [Thread-115996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:37:19.472 [DEBUG] [Thread-115996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:37:19.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:37:19.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:37:19.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:37:19.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:37:19.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:37:19.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:37:19.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:37:19.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.400398 -999.00  +18.30  10.99     37   +3.60 1 1 1 1 1   888    0 16.90 140.64 ----- 10.4 11.0 107.8 18.9 26.0 -30.4 25.1 -24.5 24.9 -23.2 25.8 -23.0
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.400398
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:37:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:36:51', tmtdew=15.15, humidity=36.43, cloud=0.0, wind=16.38, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:36:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:37:19.484 [DEBUG] [Thread-115996] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:37:19.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:37:19.570 [DEBUG] [Thread-115999] [transport.py] [_log()] starting thread (client mode): 0xa27b6aa0
2025-12-03T11:37:19.570 [DEBUG] [Thread-115999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:37:19.588 [DEBUG] [Thread-115999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:37:19.588 [INFO] [Thread-115999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:37:19.595 [DEBUG] [Thread-115999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:37:19.595 [DEBUG] [Thread-115999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:37:19.595 [DEBUG] [Thread-115999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:37:19.595 [DEBUG] [Thread-115999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:19.595 [DEBUG] [Thread-115999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] client lang: <none>
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] server lang: <none>
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] kex follows: False
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] Compression: none
2025-12-03T11:37:19.596 [DEBUG] [Thread-115999] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:37:19.658 [DEBUG] [Thread-115999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:37:19.658 [DEBUG] [Thread-115999] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:37:19.658 [DEBUG] [Thread-115999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:37:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:37:19.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:37:19.714 [DEBUG] [Thread-115999] [transport.py] [_log()] userauth is OK
2025-12-03T11:37:19.714 [DEBUG] [Thread-115999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:37:19.715 [DEBUG] [Thread-115999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:37:19.715 [DEBUG] [Thread-115999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:37:19.715 [DEBUG] [Thread-115999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:37:19.732 [INFO] [Thread-115999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:37:19.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:37:19.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:37:20.542 [DEBUG] [Thread-115999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:37:20.542 [DEBUG] [Thread-115999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:37:20.590 [DEBUG] [Thread-115999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:37:20.590 [DEBUG] [Thread-115999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:37:20.598 [DEBUG] [Thread-115999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:37:20.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:37:20.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:37:20.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:37:20.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:37:20.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:37:20.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:37:20.630 [DEBUG] [Thread-115999] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:37:25.053 [DEBUG] [Thread-116001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:40.082 [DEBUG] [Thread-116002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:43.487 [DEBUG] [Thread-116003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:50.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:37:50.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:37:50.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:37:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 37, 23), 14.58, 37.82, 0.0, 19.37, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:37:51.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:37:23
2025-12-03T11:37:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:37:51.591 [DEBUG] [Thread-116004] [transport.py] [_log()] starting thread (client mode): 0xa27b7220
2025-12-03T11:37:51.591 [DEBUG] [Thread-116004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:37:51.612 [DEBUG] [Thread-116004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:37:51.612 [INFO] [Thread-116004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] client lang: <none>
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] server lang: <none>
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] kex follows: False
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] Compression: none
2025-12-03T11:37:51.615 [DEBUG] [Thread-116004] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:37:51.633 [DEBUG] [Thread-116004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:37:51.634 [DEBUG] [Thread-116004] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:37:51.634 [DEBUG] [Thread-116004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:37:51.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:37:51.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:37:51.636 [DEBUG] [Thread-116004] [transport.py] [_log()] userauth is OK
2025-12-03T11:37:51.636 [DEBUG] [Thread-116004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:37:51.636 [DEBUG] [Thread-116004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:37:51.636 [DEBUG] [Thread-116004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:37:51.637 [DEBUG] [Thread-116004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:37:51.660 [INFO] [Thread-116004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:37:51.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:37:52.447 [DEBUG] [Thread-116004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:37:52.448 [DEBUG] [Thread-116004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:37:52.448 [DEBUG] [Thread-116004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:37:52.489 [DEBUG] [Thread-116004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:37:52.489 [DEBUG] [Thread-116004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:37:52.492 [DEBUG] [Thread-116004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:37:52.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:37:52.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:37:52.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:37:52.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:37:52.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:37:52.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:37:52.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:37:52.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:37:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:37:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.400745 -999.00  +18.20  15.86     37   +3.40 1 1 1 1 1   888    0 16.76 132.82 ----- 14.7 15.9 121.8 19.8 26.1 -24.8 25.4 -24.5 25.1 -23.0 25.9 -24.0
2025-12-03T11:37:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:37:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:37:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.400745
2025-12-03T11:37:52.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:37:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:37:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:37:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:37:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:37:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:37:23', tmtdew=14.58, humidity=37.82, cloud=0.0, wind=19.37, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:37:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:37:52.517 [DEBUG] [Thread-116004] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:37:52.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:37:52.612 [DEBUG] [Thread-116007] [transport.py] [_log()] starting thread (client mode): 0xa27b4130
2025-12-03T11:37:52.612 [DEBUG] [Thread-116007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:37:52.630 [DEBUG] [Thread-116007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:37:52.631 [INFO] [Thread-116007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:37:52.638 [DEBUG] [Thread-116007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:37:52.639 [DEBUG] [Thread-116007] [transport.py] [_log()] client lang: <none>
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] server lang: <none>
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] kex follows: False
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:37:52.640 [DEBUG] [Thread-116007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:37:52.641 [DEBUG] [Thread-116007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:37:52.641 [DEBUG] [Thread-116007] [transport.py] [_log()] Compression: none
2025-12-03T11:37:52.641 [DEBUG] [Thread-116007] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:37:52.695 [DEBUG] [Thread-116007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:37:52.696 [DEBUG] [Thread-116007] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:37:52.696 [DEBUG] [Thread-116007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:37:52.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:37:52.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:37:52.751 [DEBUG] [Thread-116007] [transport.py] [_log()] userauth is OK
2025-12-03T11:37:52.752 [DEBUG] [Thread-116007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:37:52.752 [DEBUG] [Thread-116007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:37:52.752 [DEBUG] [Thread-116007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:37:52.752 [DEBUG] [Thread-116007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:37:52.772 [INFO] [Thread-116007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:37:52.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:37:52.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:37:53.645 [DEBUG] [Thread-116007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:37:53.645 [DEBUG] [Thread-116007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:37:53.693 [DEBUG] [Thread-116007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:37:53.693 [DEBUG] [Thread-116007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:37:53.702 [DEBUG] [Thread-116007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:37:53.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:37:53.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:37:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:37:53.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:37:53.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:37:53.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:37:53.737 [DEBUG] [Thread-116007] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:37:55.111 [DEBUG] [Thread-116009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:55.899 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:37:55.900 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:10.143 [DEBUG] [Thread-116010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:23.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:38:23.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:38:23.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:38:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 37, 55), 15.12, 36.53, 0.0, 16.09, 17.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:38:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:37:55
2025-12-03T11:38:24.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:38:24.709 [DEBUG] [Thread-116011] [transport.py] [_log()] starting thread (client mode): 0xa27c2c80
2025-12-03T11:38:24.709 [DEBUG] [Thread-116011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:38:24.729 [DEBUG] [Thread-116011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:38:24.729 [INFO] [Thread-116011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] client lang: <none>
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] server lang: <none>
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] kex follows: False
2025-12-03T11:38:24.733 [DEBUG] [Thread-116011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] Compression: none
2025-12-03T11:38:24.734 [DEBUG] [Thread-116011] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:38:24.752 [DEBUG] [Thread-116011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:38:24.753 [DEBUG] [Thread-116011] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:38:24.753 [DEBUG] [Thread-116011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:38:24.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:38:24.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:38:24.756 [DEBUG] [Thread-116011] [transport.py] [_log()] userauth is OK
2025-12-03T11:38:24.756 [DEBUG] [Thread-116011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:38:24.756 [DEBUG] [Thread-116011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:38:24.756 [DEBUG] [Thread-116011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:38:24.756 [DEBUG] [Thread-116011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:38:24.779 [INFO] [Thread-116011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:38:24.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:38:25.172 [DEBUG] [Thread-116013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:25.405 [DEBUG] [Thread-116011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:38:25.405 [DEBUG] [Thread-116011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:38:25.405 [DEBUG] [Thread-116011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:38:25.446 [DEBUG] [Thread-116011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:38:25.446 [DEBUG] [Thread-116011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:38:25.449 [DEBUG] [Thread-116011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:38:25.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:38:25.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:38:25.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:38:25.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:38:25.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:38:25.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:38:25.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:38:25.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.401092 -999.00  +18.60  21.66     40   +4.70 1 1 1 1 1   888    0 17.05 138.59 ----- 23.8 21.7 170.8 27.3 26.1 -25.9 25.2 -24.8 25.1 -23.5 25.9 -24.3
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.401092
2025-12-03T11:38:25.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:38:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:38:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:38:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:38:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:38:25.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:37:55', tmtdew=15.12, humidity=36.53, cloud=0.0, wind=16.09, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:37:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:38:25.475 [DEBUG] [Thread-116011] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:38:25.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:38:25.569 [DEBUG] [Thread-116015] [transport.py] [_log()] starting thread (client mode): 0xa27c1270
2025-12-03T11:38:25.569 [DEBUG] [Thread-116015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:38:25.583 [DEBUG] [Thread-116015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:38:25.583 [INFO] [Thread-116015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] client lang: <none>
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] server lang: <none>
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] kex follows: False
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:38:25.591 [DEBUG] [Thread-116015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:38:25.592 [DEBUG] [Thread-116015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:38:25.592 [DEBUG] [Thread-116015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:38:25.592 [DEBUG] [Thread-116015] [transport.py] [_log()] Compression: none
2025-12-03T11:38:25.592 [DEBUG] [Thread-116015] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:38:25.651 [DEBUG] [Thread-116015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:38:25.652 [DEBUG] [Thread-116015] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:38:25.652 [DEBUG] [Thread-116015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:38:25.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:38:25.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:38:25.708 [DEBUG] [Thread-116015] [transport.py] [_log()] userauth is OK
2025-12-03T11:38:25.708 [DEBUG] [Thread-116015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:38:25.708 [DEBUG] [Thread-116015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:38:25.708 [DEBUG] [Thread-116015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:38:25.708 [DEBUG] [Thread-116015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:38:25.730 [INFO] [Thread-116015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:38:25.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:38:25.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:38:26.551 [DEBUG] [Thread-116015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:38:26.551 [DEBUG] [Thread-116015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:38:26.599 [DEBUG] [Thread-116015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:38:26.599 [DEBUG] [Thread-116015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:38:26.611 [DEBUG] [Thread-116015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:38:26.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:38:26.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:38:26.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:38:26.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:38:26.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:38:26.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:38:26.648 [DEBUG] [Thread-116015] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:38:40.200 [DEBUG] [Thread-116017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:43.526 [DEBUG] [Thread-116018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:55.253 [DEBUG] [Thread-116019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:56.039 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:56.041 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:38:56.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:38:56.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:38:56.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:38:57.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 38, 27), 15.32, 36.01, 0.0, 15.16, 17.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:38:57.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:38:27
2025-12-03T11:38:57.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:38:57.622 [DEBUG] [Thread-116020] [transport.py] [_log()] starting thread (client mode): 0xa2709570
2025-12-03T11:38:57.622 [DEBUG] [Thread-116020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:38:57.642 [DEBUG] [Thread-116020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:38:57.642 [INFO] [Thread-116020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:38:57.645 [DEBUG] [Thread-116020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:38:57.645 [DEBUG] [Thread-116020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:38:57.645 [DEBUG] [Thread-116020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:38:57.645 [DEBUG] [Thread-116020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] client lang: <none>
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] server lang: <none>
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] kex follows: False
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] Compression: none
2025-12-03T11:38:57.646 [DEBUG] [Thread-116020] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:38:57.665 [DEBUG] [Thread-116020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:38:57.665 [DEBUG] [Thread-116020] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:38:57.665 [DEBUG] [Thread-116020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:38:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:38:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:38:57.667 [DEBUG] [Thread-116020] [transport.py] [_log()] userauth is OK
2025-12-03T11:38:57.667 [DEBUG] [Thread-116020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:38:57.667 [DEBUG] [Thread-116020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:38:57.667 [DEBUG] [Thread-116020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:38:57.667 [DEBUG] [Thread-116020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:38:57.701 [INFO] [Thread-116020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:38:57.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:38:58.878 [DEBUG] [Thread-116020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:38:58.878 [DEBUG] [Thread-116020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:38:58.878 [DEBUG] [Thread-116020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:38:58.918 [DEBUG] [Thread-116020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:38:58.918 [DEBUG] [Thread-116020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:38:58.921 [DEBUG] [Thread-116020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:38:58.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:38:58.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:38:58.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:38:58.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:38:58.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:38:58.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:38:58.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:38:58.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:38:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:38:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.401787 -999.00  +19.00  10.36     38   +4.60 1 1 1 1 1   888    0 17.00 133.71 ----- 12.6 10.4 140.2 19.4 26.4 -26.6 25.6 -25.4 25.4 -22.6 26.1 -24.1
2025-12-03T11:38:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:38:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:38:58.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.401787
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:38:58.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:38:27', tmtdew=15.32, humidity=36.01, cloud=0.0, wind=15.16, temperature=17.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:38:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:38:58.944 [DEBUG] [Thread-116020] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:38:59.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:38:59.037 [DEBUG] [Thread-116023] [transport.py] [_log()] starting thread (client mode): 0xa2708ca0
2025-12-03T11:38:59.037 [DEBUG] [Thread-116023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:38:59.052 [DEBUG] [Thread-116023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:38:59.052 [INFO] [Thread-116023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:38:59.059 [DEBUG] [Thread-116023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] client lang: <none>
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] server lang: <none>
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] kex follows: False
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:38:59.060 [DEBUG] [Thread-116023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:38:59.061 [DEBUG] [Thread-116023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:38:59.061 [DEBUG] [Thread-116023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:38:59.061 [DEBUG] [Thread-116023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:38:59.061 [DEBUG] [Thread-116023] [transport.py] [_log()] Compression: none
2025-12-03T11:38:59.061 [DEBUG] [Thread-116023] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:38:59.116 [DEBUG] [Thread-116023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:38:59.116 [DEBUG] [Thread-116023] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:38:59.117 [DEBUG] [Thread-116023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:38:59.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:38:59.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:38:59.172 [DEBUG] [Thread-116023] [transport.py] [_log()] userauth is OK
2025-12-03T11:38:59.172 [DEBUG] [Thread-116023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:38:59.172 [DEBUG] [Thread-116023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:38:59.172 [DEBUG] [Thread-116023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:38:59.173 [DEBUG] [Thread-116023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:38:59.191 [INFO] [Thread-116023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:38:59.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:38:59.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:39:00.007 [DEBUG] [Thread-116023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:39:00.007 [DEBUG] [Thread-116023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:39:00.056 [DEBUG] [Thread-116023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:39:00.056 [DEBUG] [Thread-116023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:39:00.069 [DEBUG] [Thread-116023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:39:00.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:39:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:39:00.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:39:00.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:39:00.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:39:00.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:39:00.100 [DEBUG] [Thread-116023] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:39:10.282 [DEBUG] [Thread-116025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:25.325 [DEBUG] [Thread-116026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:30.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:39:30.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:39:30.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:39:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 38, 59), 16.38, 33.61, 0.0, 15.42, 18.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:39:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:38:59
2025-12-03T11:39:30.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:39:31.082 [DEBUG] [Thread-116027] [transport.py] [_log()] starting thread (client mode): 0xa27c0b50
2025-12-03T11:39:31.082 [DEBUG] [Thread-116027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:39:31.102 [DEBUG] [Thread-116027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:39:31.102 [INFO] [Thread-116027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:39:31.105 [DEBUG] [Thread-116027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:39:31.105 [DEBUG] [Thread-116027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:39:31.105 [DEBUG] [Thread-116027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:39:31.105 [DEBUG] [Thread-116027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:39:31.105 [DEBUG] [Thread-116027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] client lang: <none>
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] server lang: <none>
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] kex follows: False
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] Compression: none
2025-12-03T11:39:31.106 [DEBUG] [Thread-116027] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:39:31.122 [DEBUG] [Thread-116027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:39:31.122 [DEBUG] [Thread-116027] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:39:31.123 [DEBUG] [Thread-116027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:39:31.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:39:31.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:39:31.125 [DEBUG] [Thread-116027] [transport.py] [_log()] userauth is OK
2025-12-03T11:39:31.125 [DEBUG] [Thread-116027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:39:31.125 [DEBUG] [Thread-116027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:39:31.125 [DEBUG] [Thread-116027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:39:31.125 [DEBUG] [Thread-116027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:39:31.158 [INFO] [Thread-116027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:39:31.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:39:31.784 [DEBUG] [Thread-116027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:39:31.784 [DEBUG] [Thread-116027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:39:31.784 [DEBUG] [Thread-116027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:39:31.825 [DEBUG] [Thread-116027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:39:31.825 [DEBUG] [Thread-116027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:39:31.828 [DEBUG] [Thread-116027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:39:31.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:39:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:39:31.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:39:31.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:39:31.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:39:31.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:39:31.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.402134 -999.00  +19.10  14.91     36   +3.90 1 1 1 1 1   888    0 16.95 129.11 ----- 13.7 14.9 148.8 26.2 26.5 -25.4 25.6 -27.6 25.3 -24.6 26.1 -24.6
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:39:31.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.402134
2025-12-03T11:39:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:39:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:39:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:39:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:39:31.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:39:31.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:38:59', tmtdew=16.38, humidity=33.61, cloud=0.0, wind=15.42, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:39:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:39:31.855 [DEBUG] [Thread-116027] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:39:31.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:39:31.951 [DEBUG] [Thread-116030] [transport.py] [_log()] starting thread (client mode): 0xa27b5a20
2025-12-03T11:39:31.951 [DEBUG] [Thread-116030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:39:31.966 [DEBUG] [Thread-116030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:39:31.966 [INFO] [Thread-116030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:39:31.973 [DEBUG] [Thread-116030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] client lang: <none>
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] server lang: <none>
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] kex follows: False
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] Compression: none
2025-12-03T11:39:31.974 [DEBUG] [Thread-116030] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:39:32.031 [DEBUG] [Thread-116030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:39:32.032 [DEBUG] [Thread-116030] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:39:32.032 [DEBUG] [Thread-116030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:39:32.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:39:32.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:39:32.088 [DEBUG] [Thread-116030] [transport.py] [_log()] userauth is OK
2025-12-03T11:39:32.088 [DEBUG] [Thread-116030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:39:32.089 [DEBUG] [Thread-116030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:39:32.089 [DEBUG] [Thread-116030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:39:32.089 [DEBUG] [Thread-116030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:39:32.103 [INFO] [Thread-116030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:39:32.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:39:32.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:39:32.934 [DEBUG] [Thread-116030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:39:32.934 [DEBUG] [Thread-116030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:39:32.982 [DEBUG] [Thread-116030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:39:32.983 [DEBUG] [Thread-116030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:39:32.991 [DEBUG] [Thread-116030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:39:32.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:39:32.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:39:33.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:39:33.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:39:33.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:39:33.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:39:33.022 [DEBUG] [Thread-116030] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:39:40.352 [DEBUG] [Thread-116032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:43.571 [DEBUG] [Thread-116033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:55.399 [DEBUG] [Thread-116034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:56.180 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:39:56.181 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:03.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:40:03.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:40:03.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:40:03.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 39, 31), 16.5, 33.37, 0.0, 14.4, 18.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:40:03.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:39:31
2025-12-03T11:40:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:40:03.994 [DEBUG] [Thread-116035] [transport.py] [_log()] starting thread (client mode): 0xa27c1570
2025-12-03T11:40:03.994 [DEBUG] [Thread-116035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:40:04.018 [DEBUG] [Thread-116035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:40:04.018 [INFO] [Thread-116035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] client lang: <none>
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] server lang: <none>
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] kex follows: False
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] Compression: none
2025-12-03T11:40:04.022 [DEBUG] [Thread-116035] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:40:04.034 [DEBUG] [Thread-116035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:40:04.034 [DEBUG] [Thread-116035] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:40:04.035 [DEBUG] [Thread-116035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:40:04.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:40:04.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:40:04.036 [DEBUG] [Thread-116035] [transport.py] [_log()] userauth is OK
2025-12-03T11:40:04.036 [DEBUG] [Thread-116035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:40:04.036 [DEBUG] [Thread-116035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:40:04.036 [DEBUG] [Thread-116035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:40:04.036 [DEBUG] [Thread-116035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:40:04.046 [INFO] [Thread-116035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:40:04.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:40:04.958 [DEBUG] [Thread-116035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:40:04.958 [DEBUG] [Thread-116035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:40:04.958 [DEBUG] [Thread-116035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:40:04.999 [DEBUG] [Thread-116035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:40:04.999 [DEBUG] [Thread-116035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:40:05.002 [DEBUG] [Thread-116035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:40:05.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:40:05.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:40:05.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:40:05.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:40:05.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:40:05.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:40:05.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:40:05.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:40:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:40:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.402481 -999.00  +19.00  15.13     35   +3.40 1 1 1 1 1   888    0 17.44 141.71 ----- 13.9 15.1 184.2 24.7 26.4 -27.1 25.2 -29.7 25.3 -25.1 26.2 -24.6
2025-12-03T11:40:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.402481
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:40:05.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:39:31', tmtdew=16.5, humidity=33.37, cloud=0.0, wind=14.4, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:39:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:40:05.020 [DEBUG] [Thread-116035] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:40:05.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:40:05.105 [DEBUG] [Thread-116038] [transport.py] [_log()] starting thread (client mode): 0xa27c1f00
2025-12-03T11:40:05.105 [DEBUG] [Thread-116038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:40:05.121 [DEBUG] [Thread-116038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:40:05.121 [INFO] [Thread-116038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] client lang: <none>
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] server lang: <none>
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] kex follows: False
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:40:05.128 [DEBUG] [Thread-116038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:40:05.129 [DEBUG] [Thread-116038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:40:05.129 [DEBUG] [Thread-116038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:40:05.129 [DEBUG] [Thread-116038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:40:05.129 [DEBUG] [Thread-116038] [transport.py] [_log()] Compression: none
2025-12-03T11:40:05.129 [DEBUG] [Thread-116038] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:40:05.188 [DEBUG] [Thread-116038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:40:05.188 [DEBUG] [Thread-116038] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:40:05.188 [DEBUG] [Thread-116038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:40:05.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:40:05.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:40:05.249 [DEBUG] [Thread-116038] [transport.py] [_log()] userauth is OK
2025-12-03T11:40:05.249 [DEBUG] [Thread-116038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:40:05.249 [DEBUG] [Thread-116038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:40:05.249 [DEBUG] [Thread-116038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:40:05.249 [DEBUG] [Thread-116038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:40:05.265 [INFO] [Thread-116038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:40:05.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:40:05.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:40:06.108 [DEBUG] [Thread-116038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:40:06.108 [DEBUG] [Thread-116038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:40:06.156 [DEBUG] [Thread-116038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:40:06.157 [DEBUG] [Thread-116038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:40:06.166 [DEBUG] [Thread-116038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:40:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:40:06.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:40:06.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:40:06.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:40:06.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:40:06.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:40:06.200 [DEBUG] [Thread-116038] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:40:10.428 [DEBUG] [Thread-116040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:25.478 [DEBUG] [Thread-116041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:36.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:40:36.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:40:36.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:40:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 40, 3), 16.54, 33.28, 0.0, 15.85, 18.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:40:36.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:40:03
2025-12-03T11:40:37.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:40:37.242 [DEBUG] [Thread-116042] [transport.py] [_log()] starting thread (client mode): 0xa27c0400
2025-12-03T11:40:37.242 [DEBUG] [Thread-116042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:40:37.263 [DEBUG] [Thread-116042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:40:37.263 [INFO] [Thread-116042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] client lang: <none>
2025-12-03T11:40:37.266 [DEBUG] [Thread-116042] [transport.py] [_log()] server lang: <none>
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] kex follows: False
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] Compression: none
2025-12-03T11:40:37.267 [DEBUG] [Thread-116042] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:40:37.282 [DEBUG] [Thread-116042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:40:37.283 [DEBUG] [Thread-116042] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:40:37.283 [DEBUG] [Thread-116042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:40:37.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:40:37.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:40:37.284 [DEBUG] [Thread-116042] [transport.py] [_log()] userauth is OK
2025-12-03T11:40:37.284 [DEBUG] [Thread-116042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:40:37.284 [DEBUG] [Thread-116042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:40:37.284 [DEBUG] [Thread-116042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:40:37.284 [DEBUG] [Thread-116042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:40:37.303 [INFO] [Thread-116042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:40:37.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:40:37.936 [DEBUG] [Thread-116042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:40:37.936 [DEBUG] [Thread-116042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:40:37.936 [DEBUG] [Thread-116042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:40:37.977 [DEBUG] [Thread-116042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:40:37.977 [DEBUG] [Thread-116042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:40:37.980 [DEBUG] [Thread-116042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:40:37.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:40:37.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:40:37.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:40:37.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:40:38.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:40:38.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:40:38.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.402828 -999.00  +18.80  12.60     34   +2.90 1 1 1 1 1   888    0 17.56 141.40 ----- 15.1 12.6 181.6 23.5 26.3 -27.3 25.1 -25.0 25.2 -25.9 26.1 -25.9
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:40:38.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.402828
2025-12-03T11:40:38.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:40:38.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:40:38.005 [DEBUG] [Thread-116042] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:40:38.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:40:38.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:40:38.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:40:38.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:40:03', tmtdew=16.54, humidity=33.28, cloud=0.0, wind=15.85, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:40:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:40:38.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:40:38.102 [DEBUG] [Thread-116045] [transport.py] [_log()] starting thread (client mode): 0xa27c2f50
2025-12-03T11:40:38.102 [DEBUG] [Thread-116045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:40:38.123 [DEBUG] [Thread-116045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:40:38.123 [INFO] [Thread-116045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:40:38.131 [DEBUG] [Thread-116045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:40:38.131 [DEBUG] [Thread-116045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:40:38.131 [DEBUG] [Thread-116045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] client lang: <none>
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] server lang: <none>
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] kex follows: False
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:40:38.132 [DEBUG] [Thread-116045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:40:38.133 [DEBUG] [Thread-116045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:40:38.133 [DEBUG] [Thread-116045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:40:38.133 [DEBUG] [Thread-116045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:40:38.133 [DEBUG] [Thread-116045] [transport.py] [_log()] Compression: none
2025-12-03T11:40:38.133 [DEBUG] [Thread-116045] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:40:38.189 [DEBUG] [Thread-116045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:40:38.189 [DEBUG] [Thread-116045] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:40:38.190 [DEBUG] [Thread-116045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:40:38.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:40:38.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:40:38.246 [DEBUG] [Thread-116045] [transport.py] [_log()] userauth is OK
2025-12-03T11:40:38.246 [DEBUG] [Thread-116045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:40:38.246 [DEBUG] [Thread-116045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:40:38.246 [DEBUG] [Thread-116045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:40:38.246 [DEBUG] [Thread-116045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:40:38.267 [INFO] [Thread-116045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:40:38.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:40:38.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:40:39.119 [DEBUG] [Thread-116045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:40:39.119 [DEBUG] [Thread-116045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:40:39.167 [DEBUG] [Thread-116045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:40:39.167 [DEBUG] [Thread-116045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:40:39.176 [DEBUG] [Thread-116045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:40:39.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:40:39.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:40:39.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:40:39.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:40:39.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:40:39.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:40:39.212 [DEBUG] [Thread-116045] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:40:40.505 [DEBUG] [Thread-116047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:43.615 [DEBUG] [Thread-116048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:55.546 [DEBUG] [Thread-116049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:56.319 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:40:56.320 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:09.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:41:09.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:41:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:41:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 40, 35), 16.38, 33.18, 0.0, 16.02, 18.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:41:09.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:40:35
2025-12-03T11:41:10.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:41:10.268 [DEBUG] [Thread-116050] [transport.py] [_log()] starting thread (client mode): 0xa51610f0
2025-12-03T11:41:10.268 [DEBUG] [Thread-116050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:41:10.289 [DEBUG] [Thread-116050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:41:10.289 [INFO] [Thread-116050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] client lang: <none>
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] server lang: <none>
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] kex follows: False
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:41:10.292 [DEBUG] [Thread-116050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:41:10.293 [DEBUG] [Thread-116050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:41:10.293 [DEBUG] [Thread-116050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:41:10.293 [DEBUG] [Thread-116050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:41:10.293 [DEBUG] [Thread-116050] [transport.py] [_log()] Compression: none
2025-12-03T11:41:10.293 [DEBUG] [Thread-116050] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:41:10.308 [DEBUG] [Thread-116050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:41:10.308 [DEBUG] [Thread-116050] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:41:10.308 [DEBUG] [Thread-116050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:41:10.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:41:10.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:41:10.309 [DEBUG] [Thread-116050] [transport.py] [_log()] userauth is OK
2025-12-03T11:41:10.309 [DEBUG] [Thread-116050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:41:10.309 [DEBUG] [Thread-116050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:41:10.309 [DEBUG] [Thread-116050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:41:10.309 [DEBUG] [Thread-116050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:41:10.322 [INFO] [Thread-116050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:41:10.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:41:10.576 [DEBUG] [Thread-116052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:11.071 [DEBUG] [Thread-116050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:41:11.071 [DEBUG] [Thread-116050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:41:11.071 [DEBUG] [Thread-116050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:41:11.112 [DEBUG] [Thread-116050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:41:11.112 [DEBUG] [Thread-116050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:41:11.114 [DEBUG] [Thread-116050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:41:11.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:41:11.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:41:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:41:11.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:41:11.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:41:11.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:41:11.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.403175 -999.00  +18.80  15.03     37   +3.90 1 1 1 1 1   888    0 17.46 143.77 ----- 13.0 15.0 159.8 20.6 26.4 -27.2 25.4 -26.8 25.4 -25.2 26.1 -24.6
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:41:11.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.403175
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:41:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:40:35', tmtdew=16.38, humidity=33.18, cloud=0.0, wind=16.02, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:40:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:41:11.134 [DEBUG] [Thread-116050] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:41:11.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:41:11.220 [DEBUG] [Thread-116054] [transport.py] [_log()] starting thread (client mode): 0xa270ae60
2025-12-03T11:41:11.220 [DEBUG] [Thread-116054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:41:11.234 [DEBUG] [Thread-116054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:41:11.234 [INFO] [Thread-116054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] client lang: <none>
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] server lang: <none>
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] kex follows: False
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] Compression: none
2025-12-03T11:41:11.242 [DEBUG] [Thread-116054] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:41:11.300 [DEBUG] [Thread-116054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:41:11.301 [DEBUG] [Thread-116054] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:41:11.301 [DEBUG] [Thread-116054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:41:11.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:41:11.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:41:11.357 [DEBUG] [Thread-116054] [transport.py] [_log()] userauth is OK
2025-12-03T11:41:11.358 [DEBUG] [Thread-116054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:41:11.358 [DEBUG] [Thread-116054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:41:11.358 [DEBUG] [Thread-116054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:41:11.358 [DEBUG] [Thread-116054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:41:11.372 [INFO] [Thread-116054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:41:11.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:41:11.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:41:12.225 [DEBUG] [Thread-116054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:41:12.225 [DEBUG] [Thread-116054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:41:12.272 [DEBUG] [Thread-116054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:41:12.272 [DEBUG] [Thread-116054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:41:12.281 [DEBUG] [Thread-116054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:41:12.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:41:12.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:41:12.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:41:12.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:41:12.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:41:12.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:41:12.313 [DEBUG] [Thread-116054] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:41:25.603 [DEBUG] [Thread-116056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:40.647 [DEBUG] [Thread-116057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:41:42.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:41:42.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:41:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 41, 39), 15.52, 35.5, 0.0, 23.17, 17.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:41:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:41:39
2025-12-03T11:41:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:41:43.288 [DEBUG] [Thread-116058] [transport.py] [_log()] starting thread (client mode): 0xa27087c0
2025-12-03T11:41:43.288 [DEBUG] [Thread-116058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:41:43.308 [DEBUG] [Thread-116058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:41:43.308 [INFO] [Thread-116058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] client lang: <none>
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] server lang: <none>
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] kex follows: False
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:41:43.311 [DEBUG] [Thread-116058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:41:43.312 [DEBUG] [Thread-116058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:41:43.312 [DEBUG] [Thread-116058] [transport.py] [_log()] Compression: none
2025-12-03T11:41:43.312 [DEBUG] [Thread-116058] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:41:43.328 [DEBUG] [Thread-116058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:41:43.329 [DEBUG] [Thread-116058] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:41:43.329 [DEBUG] [Thread-116058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:41:43.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:41:43.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:41:43.331 [DEBUG] [Thread-116058] [transport.py] [_log()] userauth is OK
2025-12-03T11:41:43.331 [DEBUG] [Thread-116058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:41:43.331 [DEBUG] [Thread-116058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:41:43.331 [DEBUG] [Thread-116058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:41:43.331 [DEBUG] [Thread-116058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:41:43.346 [INFO] [Thread-116058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:41:43.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:41:43.674 [DEBUG] [Thread-116060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:43.977 [DEBUG] [Thread-116058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:41:43.977 [DEBUG] [Thread-116058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:41:43.978 [DEBUG] [Thread-116058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:41:44.018 [DEBUG] [Thread-116058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:41:44.018 [DEBUG] [Thread-116058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:41:44.021 [DEBUG] [Thread-116058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:41:44.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:41:44.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:41:44.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:41:44.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:41:44.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:41:44.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:41:44.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:41:44.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:41:44.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:41:44.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.403523 -999.00  +18.70  21.62     38   +4.20 1 1 1 1 1   888    0 17.70 143.40 ----- 21.8 21.6 163.6 25.2 26.4 -27.7 25.2 -32.1 25.3 -24.8 26.3 -25.4
2025-12-03T11:41:44.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:41:44.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:41:44.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.403523
2025-12-03T11:41:44.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:41:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:41:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:41:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:41:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:41:44.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:41:39', tmtdew=15.52, humidity=35.5, cloud=0.0, wind=23.17, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:41:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:41:44.048 [DEBUG] [Thread-116058] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:41:44.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:41:44.140 [DEBUG] [Thread-116062] [transport.py] [_log()] starting thread (client mode): 0xa270b460
2025-12-03T11:41:44.140 [DEBUG] [Thread-116062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:41:44.153 [DEBUG] [Thread-116062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:41:44.153 [INFO] [Thread-116062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] client lang: <none>
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] server lang: <none>
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] kex follows: False
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:41:44.161 [DEBUG] [Thread-116062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:41:44.162 [DEBUG] [Thread-116062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:41:44.162 [DEBUG] [Thread-116062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:41:44.162 [DEBUG] [Thread-116062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:41:44.162 [DEBUG] [Thread-116062] [transport.py] [_log()] Compression: none
2025-12-03T11:41:44.162 [DEBUG] [Thread-116062] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:41:44.218 [DEBUG] [Thread-116062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:41:44.218 [DEBUG] [Thread-116062] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:41:44.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:41:44.219 [DEBUG] [Thread-116062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:41:44.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:41:44.274 [DEBUG] [Thread-116062] [transport.py] [_log()] userauth is OK
2025-12-03T11:41:44.275 [DEBUG] [Thread-116062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:41:44.275 [DEBUG] [Thread-116062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:41:44.275 [DEBUG] [Thread-116062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:41:44.275 [DEBUG] [Thread-116062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:41:44.293 [INFO] [Thread-116062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:41:44.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:41:44.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:41:45.129 [DEBUG] [Thread-116062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:41:45.129 [DEBUG] [Thread-116062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:41:45.177 [DEBUG] [Thread-116062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:41:45.177 [DEBUG] [Thread-116062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:41:45.185 [DEBUG] [Thread-116062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:41:45.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:41:45.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:41:45.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:41:45.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:41:45.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:41:45.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:41:45.219 [DEBUG] [Thread-116062] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:41:55.675 [DEBUG] [Thread-116064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:56.457 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:41:56.458 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:10.728 [DEBUG] [Thread-116065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:15.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:42:15.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:42:15.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:42:15.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 42, 11), 15.44, 35.63, 0.0, 18.74, 17.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:42:15.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:42:11
2025-12-03T11:42:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:42:16.185 [DEBUG] [Thread-116066] [transport.py] [_log()] starting thread (client mode): 0xa27c3070
2025-12-03T11:42:16.185 [DEBUG] [Thread-116066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:42:16.205 [DEBUG] [Thread-116066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:42:16.205 [INFO] [Thread-116066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:42:16.208 [DEBUG] [Thread-116066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:42:16.208 [DEBUG] [Thread-116066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:42:16.208 [DEBUG] [Thread-116066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:42:16.208 [DEBUG] [Thread-116066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:16.208 [DEBUG] [Thread-116066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] client lang: <none>
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] server lang: <none>
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] kex follows: False
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] Compression: none
2025-12-03T11:42:16.209 [DEBUG] [Thread-116066] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:42:16.228 [DEBUG] [Thread-116066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:42:16.228 [DEBUG] [Thread-116066] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:42:16.229 [DEBUG] [Thread-116066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:42:16.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:42:16.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:42:16.231 [DEBUG] [Thread-116066] [transport.py] [_log()] userauth is OK
2025-12-03T11:42:16.231 [DEBUG] [Thread-116066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:42:16.231 [DEBUG] [Thread-116066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:42:16.232 [DEBUG] [Thread-116066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:42:16.232 [DEBUG] [Thread-116066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:42:16.258 [INFO] [Thread-116066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:42:16.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:42:16.857 [DEBUG] [Thread-116066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:42:16.857 [DEBUG] [Thread-116066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:42:16.858 [DEBUG] [Thread-116066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:42:16.898 [DEBUG] [Thread-116066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:42:16.898 [DEBUG] [Thread-116066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:42:16.901 [DEBUG] [Thread-116066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:42:16.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:42:16.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:42:16.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:42:16.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:42:16.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:42:16.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:42:16.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:42:16.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:42:16.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:42:16.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.403870 -999.00  +18.30  14.12     39   +4.40 1 1 1 1 1   888    0 17.33 131.73 ----- 13.2 14.1 161.6 26.9 26.4 -26.2 25.4 -25.3 25.3 -23.8 26.1 -25.2
2025-12-03T11:42:16.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:42:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:42:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.403870
2025-12-03T11:42:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:42:16.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:42:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:42:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:42:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:42:16.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:42:11', tmtdew=15.44, humidity=35.63, cloud=0.0, wind=18.74, temperature=17.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:41:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:42:16.918 [DEBUG] [Thread-116066] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:42:17.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:42:17.013 [DEBUG] [Thread-116069] [transport.py] [_log()] starting thread (client mode): 0xa27c0e20
2025-12-03T11:42:17.013 [DEBUG] [Thread-116069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:42:17.028 [DEBUG] [Thread-116069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:42:17.028 [INFO] [Thread-116069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] client lang: <none>
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] server lang: <none>
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] kex follows: False
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] Compression: none
2025-12-03T11:42:17.036 [DEBUG] [Thread-116069] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:42:17.094 [DEBUG] [Thread-116069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:42:17.095 [DEBUG] [Thread-116069] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:42:17.095 [DEBUG] [Thread-116069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:42:17.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:42:17.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:42:17.151 [DEBUG] [Thread-116069] [transport.py] [_log()] userauth is OK
2025-12-03T11:42:17.151 [DEBUG] [Thread-116069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:42:17.151 [DEBUG] [Thread-116069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:42:17.151 [DEBUG] [Thread-116069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:42:17.151 [DEBUG] [Thread-116069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:42:17.172 [INFO] [Thread-116069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:42:17.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:42:17.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:42:17.995 [DEBUG] [Thread-116069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:42:17.995 [DEBUG] [Thread-116069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:42:18.043 [DEBUG] [Thread-116069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:42:18.044 [DEBUG] [Thread-116069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:42:18.052 [DEBUG] [Thread-116069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:42:18.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:42:18.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:42:18.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:42:18.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:42:18.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:42:18.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:42:18.085 [DEBUG] [Thread-116069] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:42:25.761 [DEBUG] [Thread-116071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:40.799 [DEBUG] [Thread-116072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:43.730 [DEBUG] [Thread-116073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:48.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:42:48.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:42:48.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:42:48.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 42, 43), 14.79, 37.16, 0.0, 12.79, 17.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:42:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:42:43
2025-12-03T11:42:48.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:42:49.031 [DEBUG] [Thread-116074] [transport.py] [_log()] starting thread (client mode): 0xa51602b0
2025-12-03T11:42:49.032 [DEBUG] [Thread-116074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:42:49.050 [DEBUG] [Thread-116074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:42:49.050 [INFO] [Thread-116074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] client lang: <none>
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] server lang: <none>
2025-12-03T11:42:49.054 [DEBUG] [Thread-116074] [transport.py] [_log()] kex follows: False
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] Compression: none
2025-12-03T11:42:49.055 [DEBUG] [Thread-116074] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:42:49.072 [DEBUG] [Thread-116074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:42:49.073 [DEBUG] [Thread-116074] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:42:49.073 [DEBUG] [Thread-116074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:42:49.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:42:49.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:42:49.075 [DEBUG] [Thread-116074] [transport.py] [_log()] userauth is OK
2025-12-03T11:42:49.075 [DEBUG] [Thread-116074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:42:49.075 [DEBUG] [Thread-116074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:42:49.076 [DEBUG] [Thread-116074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:42:49.076 [DEBUG] [Thread-116074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:42:49.099 [INFO] [Thread-116074] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:42:49.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:42:49.741 [DEBUG] [Thread-116074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:42:49.741 [DEBUG] [Thread-116074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:42:49.741 [DEBUG] [Thread-116074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:42:49.782 [DEBUG] [Thread-116074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:42:49.782 [DEBUG] [Thread-116074] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:42:49.785 [DEBUG] [Thread-116074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:42:49.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:42:49.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:42:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:42:49.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:42:49.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:42:49.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:42:49.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:42:49.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:42:49.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:42:49.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.404217 -999.00  +18.40  11.47     40   +4.50 1 1 1 1 1   888    0 17.40 132.09 ----- 8.8 11.5 169.4 16.3 26.5 -26.4 25.4 -25.4 25.4 -22.8 26.2 -24.2
2025-12-03T11:42:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:42:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:42:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.404217
2025-12-03T11:42:49.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:42:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:42:49.811 [DEBUG] [Thread-116074] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:42:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:42:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:42:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:42:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:42:43', tmtdew=14.79, humidity=37.16, cloud=0.0, wind=12.79, temperature=17.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:42:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:42:49.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:42:49.906 [DEBUG] [Thread-116077] [transport.py] [_log()] starting thread (client mode): 0xa2709510
2025-12-03T11:42:49.906 [DEBUG] [Thread-116077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:42:49.920 [DEBUG] [Thread-116077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:42:49.920 [INFO] [Thread-116077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] client lang: <none>
2025-12-03T11:42:49.928 [DEBUG] [Thread-116077] [transport.py] [_log()] server lang: <none>
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] kex follows: False
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] Compression: none
2025-12-03T11:42:49.929 [DEBUG] [Thread-116077] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:42:49.988 [DEBUG] [Thread-116077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:42:49.988 [DEBUG] [Thread-116077] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:42:49.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:42:49.989 [DEBUG] [Thread-116077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:42:49.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:42:50.043 [DEBUG] [Thread-116077] [transport.py] [_log()] userauth is OK
2025-12-03T11:42:50.044 [DEBUG] [Thread-116077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:42:50.044 [DEBUG] [Thread-116077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:42:50.044 [DEBUG] [Thread-116077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:42:50.044 [DEBUG] [Thread-116077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:42:50.063 [INFO] [Thread-116077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:42:50.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:42:50.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:42:50.900 [DEBUG] [Thread-116077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:42:50.900 [DEBUG] [Thread-116077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:42:50.948 [DEBUG] [Thread-116077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:42:50.948 [DEBUG] [Thread-116077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:42:50.956 [DEBUG] [Thread-116077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:42:50.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:42:50.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:42:50.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:42:50.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:42:50.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:42:50.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:42:50.990 [DEBUG] [Thread-116077] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:42:55.830 [DEBUG] [Thread-116079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:56.601 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:42:56.602 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:10.869 [DEBUG] [Thread-116080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:21.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:43:21.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:43:21.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:43:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 43, 16), 14.71, 37.36, 0.0, 10.61, 17.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:43:21.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:43:16
2025-12-03T11:43:21.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:43:21.983 [DEBUG] [Thread-116081] [transport.py] [_log()] starting thread (client mode): 0xa270aa70
2025-12-03T11:43:21.983 [DEBUG] [Thread-116081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:43:22.004 [DEBUG] [Thread-116081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:43:22.004 [INFO] [Thread-116081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] client lang: <none>
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] server lang: <none>
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] kex follows: False
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] Compression: none
2025-12-03T11:43:22.007 [DEBUG] [Thread-116081] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:43:22.024 [DEBUG] [Thread-116081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:43:22.025 [DEBUG] [Thread-116081] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:43:22.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:43:22.026 [DEBUG] [Thread-116081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:43:22.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:43:22.027 [DEBUG] [Thread-116081] [transport.py] [_log()] userauth is OK
2025-12-03T11:43:22.027 [DEBUG] [Thread-116081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:43:22.027 [DEBUG] [Thread-116081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:43:22.027 [DEBUG] [Thread-116081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:43:22.027 [DEBUG] [Thread-116081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:43:22.041 [INFO] [Thread-116081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:43:22.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:43:22.642 [DEBUG] [Thread-116081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:43:22.642 [DEBUG] [Thread-116081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:43:22.643 [DEBUG] [Thread-116081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:43:22.684 [DEBUG] [Thread-116081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:43:22.684 [DEBUG] [Thread-116081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:43:22.687 [DEBUG] [Thread-116081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:43:22.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:43:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:43:22.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:43:22.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:43:22.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:43:22.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:43:22.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:43:22.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:43:22.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.404911 -999.00  +18.70  17.33     36   +3.60 1 1 1 1 1   888    0 17.01 124.05 ----- 17.8 17.3 166.8 19.8 26.5 -27.1 25.4 -26.5 25.4 -24.9 26.3 -26.2
2025-12-03T11:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.404911
2025-12-03T11:43:22.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:43:16', tmtdew=14.71, humidity=37.36, cloud=0.0, wind=10.61, temperature=17.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:43:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:43:22.709 [DEBUG] [Thread-116081] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:43:22.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:43:22.804 [DEBUG] [Thread-116084] [transport.py] [_log()] starting thread (client mode): 0xa5160580
2025-12-03T11:43:22.804 [DEBUG] [Thread-116084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:43:22.818 [DEBUG] [Thread-116084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:43:22.818 [INFO] [Thread-116084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] client lang: <none>
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] server lang: <none>
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] kex follows: False
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:43:22.826 [DEBUG] [Thread-116084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:43:22.827 [DEBUG] [Thread-116084] [transport.py] [_log()] Compression: none
2025-12-03T11:43:22.827 [DEBUG] [Thread-116084] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:43:22.883 [DEBUG] [Thread-116084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:43:22.884 [DEBUG] [Thread-116084] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:43:22.884 [DEBUG] [Thread-116084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:43:22.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:43:22.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:43:22.940 [DEBUG] [Thread-116084] [transport.py] [_log()] userauth is OK
2025-12-03T11:43:22.940 [DEBUG] [Thread-116084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:43:22.940 [DEBUG] [Thread-116084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:43:22.940 [DEBUG] [Thread-116084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:43:22.940 [DEBUG] [Thread-116084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:43:22.958 [INFO] [Thread-116084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:43:22.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:43:22.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:43:23.801 [DEBUG] [Thread-116084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:43:23.801 [DEBUG] [Thread-116084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:43:23.850 [DEBUG] [Thread-116084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:43:23.850 [DEBUG] [Thread-116084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:43:23.858 [DEBUG] [Thread-116084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:43:23.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:43:23.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:43:23.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:43:23.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:43:23.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:43:23.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:43:23.893 [DEBUG] [Thread-116084] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:43:25.897 [DEBUG] [Thread-116086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:40.952 [DEBUG] [Thread-116087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:43.760 [DEBUG] [Thread-116088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:53.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:43:53.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:43:53.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:43:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 43, 48), 16.22, 33.5, 0.0, 16.04, 17.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:43:54.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:43:48
2025-12-03T11:43:54.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:43:54.876 [DEBUG] [Thread-116089] [transport.py] [_log()] starting thread (client mode): 0xa2787ca0
2025-12-03T11:43:54.876 [DEBUG] [Thread-116089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:43:54.892 [DEBUG] [Thread-116089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:43:54.892 [INFO] [Thread-116089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:54.895 [DEBUG] [Thread-116089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] client lang: <none>
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] server lang: <none>
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] kex follows: False
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] Compression: none
2025-12-03T11:43:54.896 [DEBUG] [Thread-116089] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:43:54.914 [DEBUG] [Thread-116089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:43:54.915 [DEBUG] [Thread-116089] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:43:54.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:43:54.915 [DEBUG] [Thread-116089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:43:54.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:43:54.918 [DEBUG] [Thread-116089] [transport.py] [_log()] userauth is OK
2025-12-03T11:43:54.918 [DEBUG] [Thread-116089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:43:54.919 [DEBUG] [Thread-116089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:43:54.919 [DEBUG] [Thread-116089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:43:54.919 [DEBUG] [Thread-116089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:43:54.941 [INFO] [Thread-116089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:43:54.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:43:55.587 [DEBUG] [Thread-116089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:43:55.587 [DEBUG] [Thread-116089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:43:55.587 [DEBUG] [Thread-116089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:43:55.627 [DEBUG] [Thread-116089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:43:55.628 [DEBUG] [Thread-116089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:43:55.630 [DEBUG] [Thread-116089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:43:55.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:43:55.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:43:55.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:43:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:43:55.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:43:55.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:43:55.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:43:55.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.405259 -999.00  +18.50  11.34     35   +3.00 1 1 1 1 1   888    0 17.83 137.63 ----- 9.2 11.3 161.4 24.7 26.4 -27.3 25.4 -26.1 25.3 -25.2 26.2 -26.5
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.405259
2025-12-03T11:43:55.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:43:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:43:55.651 [DEBUG] [Thread-116089] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:43:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:43:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:43:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:43:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:43:48', tmtdew=16.22, humidity=33.5, cloud=0.0, wind=16.04, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:43:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:43:55.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:43:55.747 [DEBUG] [Thread-116092] [transport.py] [_log()] starting thread (client mode): 0xa2784730
2025-12-03T11:43:55.747 [DEBUG] [Thread-116092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:43:55.762 [DEBUG] [Thread-116092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:43:55.762 [INFO] [Thread-116092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] client lang: <none>
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] server lang: <none>
2025-12-03T11:43:55.769 [DEBUG] [Thread-116092] [transport.py] [_log()] kex follows: False
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] Compression: none
2025-12-03T11:43:55.770 [DEBUG] [Thread-116092] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:43:55.827 [DEBUG] [Thread-116092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:43:55.827 [DEBUG] [Thread-116092] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:43:55.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:43:55.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:43:55.829 [DEBUG] [Thread-116092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:43:55.884 [DEBUG] [Thread-116092] [transport.py] [_log()] userauth is OK
2025-12-03T11:43:55.884 [DEBUG] [Thread-116092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:43:55.884 [DEBUG] [Thread-116092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:43:55.884 [DEBUG] [Thread-116092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:43:55.884 [DEBUG] [Thread-116092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:43:55.902 [INFO] [Thread-116092] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:43:55.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:43:55.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:43:55.981 [DEBUG] [Thread-116094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:56.742 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:56.743 [DEBUG] [Thread-116092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:43:56.743 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:43:56.744 [DEBUG] [Thread-116092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:43:56.791 [DEBUG] [Thread-116092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:43:56.791 [DEBUG] [Thread-116092] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:43:56.800 [DEBUG] [Thread-116092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:43:56.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:43:56.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:43:56.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:43:56.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:43:56.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:43:56.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:43:56.835 [DEBUG] [Thread-116092] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:44:11.032 [DEBUG] [Thread-116095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:26.060 [DEBUG] [Thread-116096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:26.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:44:26.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:44:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:44:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 44, 20), 16.62, 32.53, 0.0, 14.82, 17.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:44:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:44:20
2025-12-03T11:44:27.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:44:27.798 [DEBUG] [Thread-116097] [transport.py] [_log()] starting thread (client mode): 0xa27087c0
2025-12-03T11:44:27.798 [DEBUG] [Thread-116097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:44:27.818 [DEBUG] [Thread-116097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:44:27.818 [INFO] [Thread-116097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] client lang: <none>
2025-12-03T11:44:27.822 [DEBUG] [Thread-116097] [transport.py] [_log()] server lang: <none>
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] kex follows: False
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] Compression: none
2025-12-03T11:44:27.823 [DEBUG] [Thread-116097] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:44:27.840 [DEBUG] [Thread-116097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:44:27.841 [DEBUG] [Thread-116097] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:44:27.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:44:27.841 [DEBUG] [Thread-116097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:44:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:44:27.843 [DEBUG] [Thread-116097] [transport.py] [_log()] userauth is OK
2025-12-03T11:44:27.843 [DEBUG] [Thread-116097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:44:27.843 [DEBUG] [Thread-116097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:44:27.843 [DEBUG] [Thread-116097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:44:27.843 [DEBUG] [Thread-116097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:44:27.860 [INFO] [Thread-116097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:44:27.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:44:28.446 [DEBUG] [Thread-116097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:44:28.446 [DEBUG] [Thread-116097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:44:28.446 [DEBUG] [Thread-116097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:44:28.487 [DEBUG] [Thread-116097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:44:28.487 [DEBUG] [Thread-116097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:44:28.490 [DEBUG] [Thread-116097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:44:28.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:44:28.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:44:28.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:44:28.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:44:28.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:44:28.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:44:28.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:44:28.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:44:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:44:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.405606 -999.00  +18.30  18.96     34   +2.20 1 1 1 1 1   888    0 17.82 143.20 ----- 18.0 19.0 174.2 21.2 26.3 -28.9 25.3 -26.6 25.2 -25.7 26.1 -27.6
2025-12-03T11:44:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:44:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:44:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.405606
2025-12-03T11:44:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:44:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:44:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:44:28.515 [DEBUG] [Thread-116097] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:44:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:44:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:44:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:44:20', tmtdew=16.62, humidity=32.53, cloud=0.0, wind=14.82, temperature=17.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:44:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:44:28.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:44:28.610 [DEBUG] [Thread-116100] [transport.py] [_log()] starting thread (client mode): 0xa51617b0
2025-12-03T11:44:28.610 [DEBUG] [Thread-116100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:44:28.627 [DEBUG] [Thread-116100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:44:28.627 [INFO] [Thread-116100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:44:28.635 [DEBUG] [Thread-116100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] client lang: <none>
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] server lang: <none>
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] kex follows: False
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] Compression: none
2025-12-03T11:44:28.636 [DEBUG] [Thread-116100] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:44:28.696 [DEBUG] [Thread-116100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:44:28.696 [DEBUG] [Thread-116100] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:44:28.697 [DEBUG] [Thread-116100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:44:28.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:44:28.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:44:28.752 [DEBUG] [Thread-116100] [transport.py] [_log()] userauth is OK
2025-12-03T11:44:28.753 [DEBUG] [Thread-116100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:44:28.753 [DEBUG] [Thread-116100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:44:28.753 [DEBUG] [Thread-116100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:44:28.753 [DEBUG] [Thread-116100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:44:28.771 [INFO] [Thread-116100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:44:28.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:44:28.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:44:29.622 [DEBUG] [Thread-116100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:44:29.622 [DEBUG] [Thread-116100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:44:29.670 [DEBUG] [Thread-116100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:44:29.670 [DEBUG] [Thread-116100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:44:29.679 [DEBUG] [Thread-116100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:44:29.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:44:29.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:44:29.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:44:29.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:44:29.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:44:29.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:44:29.713 [DEBUG] [Thread-116100] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:44:41.091 [DEBUG] [Thread-116102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:43.794 [DEBUG] [Thread-116103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:56.140 [DEBUG] [Thread-116104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:56.883 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:56.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:44:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:44:59.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:44:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:45:00.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 44, 52), 16.94, 31.73, 0.0, 14.03, 17.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:45:00.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:44:52
2025-12-03T11:45:00.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:45:00.685 [DEBUG] [Thread-116105] [transport.py] [_log()] starting thread (client mode): 0xa2786440
2025-12-03T11:45:00.685 [DEBUG] [Thread-116105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:45:00.705 [DEBUG] [Thread-116105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:45:00.705 [INFO] [Thread-116105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] client lang: <none>
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] server lang: <none>
2025-12-03T11:45:00.708 [DEBUG] [Thread-116105] [transport.py] [_log()] kex follows: False
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] Compression: none
2025-12-03T11:45:00.709 [DEBUG] [Thread-116105] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:45:00.725 [DEBUG] [Thread-116105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:45:00.725 [DEBUG] [Thread-116105] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:45:00.725 [DEBUG] [Thread-116105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:45:00.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:45:00.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:45:00.726 [DEBUG] [Thread-116105] [transport.py] [_log()] userauth is OK
2025-12-03T11:45:00.727 [DEBUG] [Thread-116105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:45:00.727 [DEBUG] [Thread-116105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:45:00.727 [DEBUG] [Thread-116105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:45:00.727 [DEBUG] [Thread-116105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:45:00.747 [INFO] [Thread-116105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:45:00.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:45:01.374 [DEBUG] [Thread-116105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:45:01.374 [DEBUG] [Thread-116105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:45:01.374 [DEBUG] [Thread-116105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:45:01.415 [DEBUG] [Thread-116105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:45:01.415 [DEBUG] [Thread-116105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:45:01.417 [DEBUG] [Thread-116105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:45:01.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:45:01.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:45:01.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:45:01.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:45:01.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:45:01.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:45:01.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.405953 -999.00  +18.20  17.32     32   +1.50 1 1 1 1 1   888    0 17.76 140.49 ----- 15.9 17.3 174.6 19.7 26.3 -27.0 25.2 -25.6 25.3 -24.6 26.1 -26.4
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.405953
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:45:01.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:44:52', tmtdew=16.94, humidity=31.73, cloud=0.0, wind=14.03, temperature=17.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:44:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:45:01.436 [DEBUG] [Thread-116105] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:45:01.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:45:01.521 [DEBUG] [Thread-116108] [transport.py] [_log()] starting thread (client mode): 0xa2785ed0
2025-12-03T11:45:01.521 [DEBUG] [Thread-116108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:45:01.536 [DEBUG] [Thread-116108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:45:01.536 [INFO] [Thread-116108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:45:01.543 [DEBUG] [Thread-116108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] client lang: <none>
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] server lang: <none>
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] kex follows: False
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] Compression: none
2025-12-03T11:45:01.544 [DEBUG] [Thread-116108] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:45:01.599 [DEBUG] [Thread-116108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:45:01.600 [DEBUG] [Thread-116108] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:45:01.600 [DEBUG] [Thread-116108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:45:01.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:45:01.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:45:01.656 [DEBUG] [Thread-116108] [transport.py] [_log()] userauth is OK
2025-12-03T11:45:01.656 [DEBUG] [Thread-116108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:45:01.657 [DEBUG] [Thread-116108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:45:01.657 [DEBUG] [Thread-116108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:45:01.657 [DEBUG] [Thread-116108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:45:01.674 [INFO] [Thread-116108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:45:01.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:45:01.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:45:02.529 [DEBUG] [Thread-116108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:45:02.529 [DEBUG] [Thread-116108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:45:02.577 [DEBUG] [Thread-116108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:45:02.578 [DEBUG] [Thread-116108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:45:02.586 [DEBUG] [Thread-116108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:45:02.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:45:02.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:45:02.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:45:02.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:45:02.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:45:02.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:45:02.617 [DEBUG] [Thread-116108] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:45:11.168 [DEBUG] [Thread-116110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:26.213 [DEBUG] [Thread-116111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:32.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:45:32.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:45:32.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:45:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 45, 24), 17.64, 30.24, 0.0, 14.5, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:45:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:45:24
2025-12-03T11:45:33.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:45:33.578 [DEBUG] [Thread-116112] [transport.py] [_log()] starting thread (client mode): 0xa2785420
2025-12-03T11:45:33.578 [DEBUG] [Thread-116112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:45:33.600 [DEBUG] [Thread-116112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:45:33.600 [INFO] [Thread-116112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:45:33.603 [DEBUG] [Thread-116112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:45:33.603 [DEBUG] [Thread-116112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:45:33.603 [DEBUG] [Thread-116112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:45:33.603 [DEBUG] [Thread-116112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] client lang: <none>
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] server lang: <none>
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] kex follows: False
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:45:33.604 [DEBUG] [Thread-116112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:45:33.605 [DEBUG] [Thread-116112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:45:33.605 [DEBUG] [Thread-116112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:45:33.605 [DEBUG] [Thread-116112] [transport.py] [_log()] Compression: none
2025-12-03T11:45:33.605 [DEBUG] [Thread-116112] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:45:33.622 [DEBUG] [Thread-116112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:45:33.623 [DEBUG] [Thread-116112] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:45:33.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:45:33.624 [DEBUG] [Thread-116112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:45:33.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:45:33.625 [DEBUG] [Thread-116112] [transport.py] [_log()] userauth is OK
2025-12-03T11:45:33.626 [DEBUG] [Thread-116112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:45:33.626 [DEBUG] [Thread-116112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:45:33.626 [DEBUG] [Thread-116112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:45:33.626 [DEBUG] [Thread-116112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:45:33.659 [INFO] [Thread-116112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:45:33.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:45:34.269 [DEBUG] [Thread-116112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:45:34.269 [DEBUG] [Thread-116112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:45:34.269 [DEBUG] [Thread-116112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:45:34.310 [DEBUG] [Thread-116112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:45:34.310 [DEBUG] [Thread-116112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:45:34.313 [DEBUG] [Thread-116112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:45:34.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:45:34.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:45:34.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:45:34.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:45:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:45:34.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:45:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:45:34.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.406300 -999.00  +18.20   7.83     32   +1.30 1 1 1 1 1   888    0 18.44 149.86 ----- 6.0 7.8 151.3 16.3 26.4 -25.8 25.2 -27.9 25.3 -23.7 26.2 -25.5
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.406300
2025-12-03T11:45:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:45:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:45:24', tmtdew=17.64, humidity=30.24, cloud=0.0, wind=14.5, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:45:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:45:34.335 [DEBUG] [Thread-116112] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:45:34.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:45:34.430 [DEBUG] [Thread-116115] [transport.py] [_log()] starting thread (client mode): 0xa270bc40
2025-12-03T11:45:34.430 [DEBUG] [Thread-116115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:45:34.445 [DEBUG] [Thread-116115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:45:34.445 [INFO] [Thread-116115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:45:34.452 [DEBUG] [Thread-116115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:45:34.452 [DEBUG] [Thread-116115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] client lang: <none>
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] server lang: <none>
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] kex follows: False
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] Compression: none
2025-12-03T11:45:34.453 [DEBUG] [Thread-116115] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:45:34.508 [DEBUG] [Thread-116115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:45:34.508 [DEBUG] [Thread-116115] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:45:34.509 [DEBUG] [Thread-116115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:45:34.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:45:34.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:45:34.565 [DEBUG] [Thread-116115] [transport.py] [_log()] userauth is OK
2025-12-03T11:45:34.565 [DEBUG] [Thread-116115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:45:34.566 [DEBUG] [Thread-116115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:45:34.566 [DEBUG] [Thread-116115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:45:34.566 [DEBUG] [Thread-116115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:45:34.584 [INFO] [Thread-116115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:45:34.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:45:34.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:45:35.404 [DEBUG] [Thread-116115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:45:35.404 [DEBUG] [Thread-116115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:45:35.452 [DEBUG] [Thread-116115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:45:35.452 [DEBUG] [Thread-116115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:45:35.461 [DEBUG] [Thread-116115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:45:35.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:45:35.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:45:35.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:45:35.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:45:35.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:45:35.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:45:35.495 [DEBUG] [Thread-116115] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:45:41.241 [DEBUG] [Thread-116117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:43.823 [DEBUG] [Thread-116118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:56.285 [DEBUG] [Thread-116119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:57.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:45:57.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:05.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:46:05.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:46:05.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:46:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 45, 56), 18.56, 28.71, 0.0, 17.13, 18.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:46:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:45:56
2025-12-03T11:46:06.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:46:06.462 [DEBUG] [Thread-116120] [transport.py] [_log()] starting thread (client mode): 0xa270b880
2025-12-03T11:46:06.462 [DEBUG] [Thread-116120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:46:06.482 [DEBUG] [Thread-116120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:46:06.482 [INFO] [Thread-116120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] client lang: <none>
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] server lang: <none>
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] kex follows: False
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:46:06.486 [DEBUG] [Thread-116120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:46:06.487 [DEBUG] [Thread-116120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:46:06.487 [DEBUG] [Thread-116120] [transport.py] [_log()] Compression: none
2025-12-03T11:46:06.487 [DEBUG] [Thread-116120] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:46:06.503 [DEBUG] [Thread-116120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:46:06.504 [DEBUG] [Thread-116120] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:46:06.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:46:06.505 [DEBUG] [Thread-116120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:46:06.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:46:06.506 [DEBUG] [Thread-116120] [transport.py] [_log()] userauth is OK
2025-12-03T11:46:06.506 [DEBUG] [Thread-116120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:46:06.506 [DEBUG] [Thread-116120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:46:06.507 [DEBUG] [Thread-116120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:46:06.507 [DEBUG] [Thread-116120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:46:06.527 [INFO] [Thread-116120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:46:06.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:46:07.158 [DEBUG] [Thread-116120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:46:07.158 [DEBUG] [Thread-116120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:46:07.159 [DEBUG] [Thread-116120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:46:07.199 [DEBUG] [Thread-116120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:46:07.199 [DEBUG] [Thread-116120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:46:07.202 [DEBUG] [Thread-116120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:46:07.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:46:07.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:46:07.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:46:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:46:07.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:46:07.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:46:07.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:46:07.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:46:07.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:46:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.406648 -999.00  +18.50  13.93     34   +2.40 1 1 1 1 1   888    0 19.32 178.70 ----- 15.8 13.9 163.4 19.3 26.6 -26.1 25.4 -25.7 25.5 -23.1 26.3 -23.7
2025-12-03T11:46:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:46:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:46:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.406648
2025-12-03T11:46:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:46:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:46:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:46:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:46:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:46:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:45:56', tmtdew=18.56, humidity=28.71, cloud=0.0, wind=17.13, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:45:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:46:07.230 [DEBUG] [Thread-116120] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:46:07.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:46:07.324 [DEBUG] [Thread-116123] [transport.py] [_log()] starting thread (client mode): 0xa2785420
2025-12-03T11:46:07.324 [DEBUG] [Thread-116123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:46:07.339 [DEBUG] [Thread-116123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:46:07.339 [INFO] [Thread-116123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:07.346 [DEBUG] [Thread-116123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] client lang: <none>
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] server lang: <none>
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] kex follows: False
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] Compression: none
2025-12-03T11:46:07.347 [DEBUG] [Thread-116123] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:46:07.406 [DEBUG] [Thread-116123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:46:07.406 [DEBUG] [Thread-116123] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:46:07.407 [DEBUG] [Thread-116123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:46:07.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:46:07.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:46:07.461 [DEBUG] [Thread-116123] [transport.py] [_log()] userauth is OK
2025-12-03T11:46:07.462 [DEBUG] [Thread-116123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:46:07.462 [DEBUG] [Thread-116123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:46:07.462 [DEBUG] [Thread-116123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:46:07.462 [DEBUG] [Thread-116123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:46:07.480 [INFO] [Thread-116123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:46:07.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:46:07.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:46:08.338 [DEBUG] [Thread-116123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:46:08.338 [DEBUG] [Thread-116123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:46:08.386 [DEBUG] [Thread-116123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:46:08.386 [DEBUG] [Thread-116123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:46:08.395 [DEBUG] [Thread-116123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:46:08.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:46:08.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:46:08.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:46:08.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:46:08.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:46:08.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:46:08.429 [DEBUG] [Thread-116123] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:46:11.319 [DEBUG] [Thread-116125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:26.361 [DEBUG] [Thread-116126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:38.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:46:38.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:46:38.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:46:39.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 46, 28), 18.83, 28.15, 0.0, 16.55, 18.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:46:39.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:46:28
2025-12-03T11:46:39.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:46:39.370 [DEBUG] [Thread-116127] [transport.py] [_log()] starting thread (client mode): 0xa27872e0
2025-12-03T11:46:39.370 [DEBUG] [Thread-116127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:46:39.390 [DEBUG] [Thread-116127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:46:39.390 [INFO] [Thread-116127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:39.392 [DEBUG] [Thread-116127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] client lang: <none>
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] server lang: <none>
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] kex follows: False
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] Compression: none
2025-12-03T11:46:39.393 [DEBUG] [Thread-116127] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:46:39.403 [DEBUG] [Thread-116127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:46:39.403 [DEBUG] [Thread-116127] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:46:39.404 [DEBUG] [Thread-116127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:46:39.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:46:39.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:46:39.405 [DEBUG] [Thread-116127] [transport.py] [_log()] userauth is OK
2025-12-03T11:46:39.406 [DEBUG] [Thread-116127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:46:39.406 [DEBUG] [Thread-116127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:46:39.406 [DEBUG] [Thread-116127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:46:39.406 [DEBUG] [Thread-116127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:46:39.423 [INFO] [Thread-116127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:46:39.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:46:40.062 [DEBUG] [Thread-116127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:46:40.062 [DEBUG] [Thread-116127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:46:40.063 [DEBUG] [Thread-116127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:46:40.104 [DEBUG] [Thread-116127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:46:40.105 [DEBUG] [Thread-116127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:46:40.107 [DEBUG] [Thread-116127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:46:40.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:46:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:46:40.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:46:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:46:40.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:46:40.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:46:40.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:46:40.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.406995 -999.00  +18.50  16.40     34   +2.40 1 1 1 1 1   888    0 18.83 165.18 ----- 16.9 16.4 163.4 22.3 26.5 -26.9 25.4 -25.0 25.4 -23.0 26.3 -26.7
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.406995
2025-12-03T11:46:40.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:46:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:46:40.129 [DEBUG] [Thread-116127] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:46:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:46:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:46:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:46:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:46:28', tmtdew=18.83, humidity=28.15, cloud=0.0, wind=16.55, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:46:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:46:40.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:46:40.225 [DEBUG] [Thread-116130] [transport.py] [_log()] starting thread (client mode): 0xa2786470
2025-12-03T11:46:40.225 [DEBUG] [Thread-116130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:46:40.239 [DEBUG] [Thread-116130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:46:40.239 [INFO] [Thread-116130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:46:40.247 [DEBUG] [Thread-116130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] client lang: <none>
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] server lang: <none>
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] kex follows: False
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] Compression: none
2025-12-03T11:46:40.248 [DEBUG] [Thread-116130] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:46:40.311 [DEBUG] [Thread-116130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:46:40.311 [DEBUG] [Thread-116130] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:46:40.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:46:40.312 [DEBUG] [Thread-116130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:46:40.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:46:40.366 [DEBUG] [Thread-116130] [transport.py] [_log()] userauth is OK
2025-12-03T11:46:40.366 [DEBUG] [Thread-116130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:46:40.366 [DEBUG] [Thread-116130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:46:40.366 [DEBUG] [Thread-116130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:46:40.366 [DEBUG] [Thread-116130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:46:40.387 [INFO] [Thread-116130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:46:40.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:46:40.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:46:41.216 [DEBUG] [Thread-116130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:46:41.216 [DEBUG] [Thread-116130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:46:41.264 [DEBUG] [Thread-116130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:46:41.264 [DEBUG] [Thread-116130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:46:41.273 [DEBUG] [Thread-116130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:46:41.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:46:41.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:46:41.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:46:41.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:46:41.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:46:41.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:46:41.307 [DEBUG] [Thread-116130] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:46:41.391 [DEBUG] [Thread-116132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:43.855 [DEBUG] [Thread-116133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:56.435 [DEBUG] [Thread-116134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:57.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:46:57.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:47:11.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:47:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:47:11.461 [DEBUG] [Thread-116135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 46, 28), 18.83, 28.15, 0.0, 16.55, 18.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:47:11.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:46:28
2025-12-03T11:47:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:47:12.265 [DEBUG] [Thread-116136] [transport.py] [_log()] starting thread (client mode): 0xa5162950
2025-12-03T11:47:12.265 [DEBUG] [Thread-116136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:47:12.286 [DEBUG] [Thread-116136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:47:12.286 [INFO] [Thread-116136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] client lang: <none>
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] server lang: <none>
2025-12-03T11:47:12.290 [DEBUG] [Thread-116136] [transport.py] [_log()] kex follows: False
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] Compression: none
2025-12-03T11:47:12.291 [DEBUG] [Thread-116136] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:47:12.308 [DEBUG] [Thread-116136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:47:12.309 [DEBUG] [Thread-116136] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:47:12.309 [DEBUG] [Thread-116136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:47:12.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:47:12.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:47:12.311 [DEBUG] [Thread-116136] [transport.py] [_log()] userauth is OK
2025-12-03T11:47:12.311 [DEBUG] [Thread-116136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:47:12.311 [DEBUG] [Thread-116136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:47:12.311 [DEBUG] [Thread-116136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:47:12.311 [DEBUG] [Thread-116136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:47:12.329 [INFO] [Thread-116136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:47:12.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:47:12.971 [DEBUG] [Thread-116136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:47:12.971 [DEBUG] [Thread-116136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:47:12.971 [DEBUG] [Thread-116136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:47:13.012 [DEBUG] [Thread-116136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:47:13.012 [DEBUG] [Thread-116136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:47:13.015 [DEBUG] [Thread-116136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:47:13.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:47:13.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:47:13.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:47:13.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:47:13.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:47:13.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:47:13.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:47:13.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.407342 -999.00  +18.30  12.59     34   +2.50 1 1 1 1 1   888    0 18.88 159.14 ----- 10.6 12.6 164.6 23.5 26.4 -27.4 25.4 -25.3 25.3 -24.2 26.3 -26.6
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.407342
2025-12-03T11:47:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:47:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:47:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:47:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:47:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:47:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:46:28', tmtdew=18.83, humidity=28.15, cloud=0.0, wind=16.55, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:46:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:47:13.039 [DEBUG] [Thread-116136] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:47:13.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:47:13.136 [DEBUG] [Thread-116139] [transport.py] [_log()] starting thread (client mode): 0xa51623e0
2025-12-03T11:47:13.136 [DEBUG] [Thread-116139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:47:13.150 [DEBUG] [Thread-116139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:47:13.150 [INFO] [Thread-116139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:47:13.157 [DEBUG] [Thread-116139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:47:13.157 [DEBUG] [Thread-116139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] client lang: <none>
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] server lang: <none>
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] kex follows: False
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] Compression: none
2025-12-03T11:47:13.158 [DEBUG] [Thread-116139] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:47:13.218 [DEBUG] [Thread-116139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:47:13.218 [DEBUG] [Thread-116139] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:47:13.218 [DEBUG] [Thread-116139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:47:13.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:47:13.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:47:13.274 [DEBUG] [Thread-116139] [transport.py] [_log()] userauth is OK
2025-12-03T11:47:13.274 [DEBUG] [Thread-116139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:47:13.275 [DEBUG] [Thread-116139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:47:13.275 [DEBUG] [Thread-116139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:47:13.275 [DEBUG] [Thread-116139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:47:13.293 [INFO] [Thread-116139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:47:13.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:47:13.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:47:14.171 [DEBUG] [Thread-116139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:47:14.171 [DEBUG] [Thread-116139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:47:14.220 [DEBUG] [Thread-116139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:47:14.220 [DEBUG] [Thread-116139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:47:14.229 [DEBUG] [Thread-116139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:47:14.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:47:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:47:14.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:47:14.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:47:14.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:47:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:47:14.264 [DEBUG] [Thread-116139] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:47:26.495 [DEBUG] [Thread-116141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:41.546 [DEBUG] [Thread-116142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:43.897 [DEBUG] [Thread-116143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:47:44.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:47:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:47:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 47, 32), 17.83, 29.87, 0.0, 16.59, 18.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:47:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:47:32
2025-12-03T11:47:45.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:47:45.220 [DEBUG] [Thread-116144] [transport.py] [_log()] starting thread (client mode): 0xa2786c20
2025-12-03T11:47:45.220 [DEBUG] [Thread-116144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:47:45.239 [DEBUG] [Thread-116144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:47:45.239 [INFO] [Thread-116144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] client lang: <none>
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] server lang: <none>
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] kex follows: False
2025-12-03T11:47:45.242 [DEBUG] [Thread-116144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] Compression: none
2025-12-03T11:47:45.243 [DEBUG] [Thread-116144] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:47:45.258 [DEBUG] [Thread-116144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:47:45.259 [DEBUG] [Thread-116144] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:47:45.259 [DEBUG] [Thread-116144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:47:45.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:47:45.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:47:45.261 [DEBUG] [Thread-116144] [transport.py] [_log()] userauth is OK
2025-12-03T11:47:45.261 [DEBUG] [Thread-116144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:47:45.261 [DEBUG] [Thread-116144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:47:45.261 [DEBUG] [Thread-116144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:47:45.261 [DEBUG] [Thread-116144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:47:45.274 [INFO] [Thread-116144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:47:45.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:47:45.906 [DEBUG] [Thread-116144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:47:45.906 [DEBUG] [Thread-116144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:47:45.907 [DEBUG] [Thread-116144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:47:45.947 [DEBUG] [Thread-116144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:47:45.947 [DEBUG] [Thread-116144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:47:45.950 [DEBUG] [Thread-116144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:47:45.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:47:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:47:45.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:47:45.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:47:45.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:47:45.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:47:45.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.408036 -999.00  +18.30   3.87     36   +3.30 1 1 1 1 1   888    0 18.76 152.92 ----- 3.4 3.9 135.1 6.2 26.5 -29.8 25.6 -26.9 25.5 -24.0 26.4 -25.3
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:47:45.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.408036
2025-12-03T11:47:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:47:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:47:45.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:47:45.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:47:45.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:47:45.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:47:32', tmtdew=17.83, humidity=29.87, cloud=0.0, wind=16.59, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:47:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:47:45.973 [DEBUG] [Thread-116144] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:47:46.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:47:46.067 [DEBUG] [Thread-116147] [transport.py] [_log()] starting thread (client mode): 0xa27087c0
2025-12-03T11:47:46.067 [DEBUG] [Thread-116147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:47:46.082 [DEBUG] [Thread-116147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:47:46.082 [INFO] [Thread-116147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:47:46.089 [DEBUG] [Thread-116147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:47:46.089 [DEBUG] [Thread-116147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:47:46.089 [DEBUG] [Thread-116147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:47:46.089 [DEBUG] [Thread-116147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:46.089 [DEBUG] [Thread-116147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] client lang: <none>
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] server lang: <none>
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] kex follows: False
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] Compression: none
2025-12-03T11:47:46.090 [DEBUG] [Thread-116147] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:47:46.146 [DEBUG] [Thread-116147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:47:46.147 [DEBUG] [Thread-116147] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:47:46.147 [DEBUG] [Thread-116147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:47:46.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:47:46.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:47:46.203 [DEBUG] [Thread-116147] [transport.py] [_log()] userauth is OK
2025-12-03T11:47:46.203 [DEBUG] [Thread-116147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:47:46.203 [DEBUG] [Thread-116147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:47:46.204 [DEBUG] [Thread-116147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:47:46.204 [DEBUG] [Thread-116147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:47:46.221 [INFO] [Thread-116147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:47:46.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:47:46.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:47:47.086 [DEBUG] [Thread-116147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:47:47.087 [DEBUG] [Thread-116147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:47:47.137 [DEBUG] [Thread-116147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:47:47.137 [DEBUG] [Thread-116147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:47:47.146 [DEBUG] [Thread-116147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:47:47.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:47:47.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:47:47.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:47:47.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:47:47.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:47:47.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:47:47.180 [DEBUG] [Thread-116147] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:47:56.576 [DEBUG] [Thread-116149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:57.309 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:47:57.311 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:11.618 [DEBUG] [Thread-116150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:17.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:48:17.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:48:17.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:48:17.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 48, 4), 17.65, 30.19, 0.0, 12.48, 18.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:48:17.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:48:04
2025-12-03T11:48:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:48:18.186 [DEBUG] [Thread-116151] [transport.py] [_log()] starting thread (client mode): 0xa27860b0
2025-12-03T11:48:18.186 [DEBUG] [Thread-116151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:48:18.206 [DEBUG] [Thread-116151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:48:18.206 [INFO] [Thread-116151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] client lang: <none>
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] server lang: <none>
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] kex follows: False
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:48:18.208 [DEBUG] [Thread-116151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:48:18.209 [DEBUG] [Thread-116151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:48:18.209 [DEBUG] [Thread-116151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:48:18.209 [DEBUG] [Thread-116151] [transport.py] [_log()] Compression: none
2025-12-03T11:48:18.209 [DEBUG] [Thread-116151] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:48:18.220 [DEBUG] [Thread-116151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:48:18.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:48:18.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] userauth is OK
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:48:18.221 [DEBUG] [Thread-116151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:48:18.230 [INFO] [Thread-116151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:48:18.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:48:18.842 [DEBUG] [Thread-116151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:48:18.842 [DEBUG] [Thread-116151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:48:18.842 [DEBUG] [Thread-116151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:48:18.884 [DEBUG] [Thread-116151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:48:18.884 [DEBUG] [Thread-116151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:48:18.885 [DEBUG] [Thread-116151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:48:18.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:48:18.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:48:18.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:48:18.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:48:18.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:48:18.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:48:18.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.408384 -999.00  +18.60   5.89     36   +3.50 1 1 1 1 1   888    0 18.62 148.29 ----- 4.1 5.9 98.7 7.3 26.7 -25.0 25.8 -24.1 25.7 -22.9 26.5 -24.4
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.408384
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:48:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:48:04', tmtdew=17.65, humidity=30.19, cloud=0.0, wind=12.48, temperature=18.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:48:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:48:18.906 [DEBUG] [Thread-116151] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:48:18.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:48:18.991 [DEBUG] [Thread-116154] [transport.py] [_log()] starting thread (client mode): 0xa27851e0
2025-12-03T11:48:18.991 [DEBUG] [Thread-116154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:48:19.005 [DEBUG] [Thread-116154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:48:19.006 [INFO] [Thread-116154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] client lang: <none>
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] server lang: <none>
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] kex follows: False
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] Compression: none
2025-12-03T11:48:19.013 [DEBUG] [Thread-116154] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:48:19.070 [DEBUG] [Thread-116154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:48:19.070 [DEBUG] [Thread-116154] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:48:19.070 [DEBUG] [Thread-116154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:48:19.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:48:19.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:48:19.127 [DEBUG] [Thread-116154] [transport.py] [_log()] userauth is OK
2025-12-03T11:48:19.127 [DEBUG] [Thread-116154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:48:19.127 [DEBUG] [Thread-116154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:48:19.127 [DEBUG] [Thread-116154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:48:19.127 [DEBUG] [Thread-116154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:48:19.143 [INFO] [Thread-116154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:48:19.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:48:19.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:48:19.979 [DEBUG] [Thread-116154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:48:19.979 [DEBUG] [Thread-116154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:48:20.026 [DEBUG] [Thread-116154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:48:20.026 [DEBUG] [Thread-116154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:48:20.035 [DEBUG] [Thread-116154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:48:20.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:48:20.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:48:20.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:48:20.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:48:20.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:48:20.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:48:20.067 [DEBUG] [Thread-116154] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:48:26.651 [DEBUG] [Thread-116156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:41.697 [DEBUG] [Thread-116157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:43.938 [DEBUG] [Thread-116158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:48:50.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:48:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:48:50.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 48, 36), 16.87, 32.04, 0.0, 8.38, 17.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:48:50.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:48:36
2025-12-03T11:48:50.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:48:51.042 [DEBUG] [Thread-116159] [transport.py] [_log()] starting thread (client mode): 0xa51613c0
2025-12-03T11:48:51.042 [DEBUG] [Thread-116159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:48:51.056 [DEBUG] [Thread-116159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:48:51.056 [INFO] [Thread-116159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] client lang: <none>
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] server lang: <none>
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] kex follows: False
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:48:51.059 [DEBUG] [Thread-116159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:48:51.060 [DEBUG] [Thread-116159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:48:51.060 [DEBUG] [Thread-116159] [transport.py] [_log()] Compression: none
2025-12-03T11:48:51.060 [DEBUG] [Thread-116159] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:48:51.078 [DEBUG] [Thread-116159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:48:51.078 [DEBUG] [Thread-116159] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:48:51.079 [DEBUG] [Thread-116159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:48:51.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:48:51.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:48:51.080 [DEBUG] [Thread-116159] [transport.py] [_log()] userauth is OK
2025-12-03T11:48:51.081 [DEBUG] [Thread-116159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:48:51.081 [DEBUG] [Thread-116159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:48:51.081 [DEBUG] [Thread-116159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:48:51.081 [DEBUG] [Thread-116159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:48:51.116 [INFO] [Thread-116159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:48:51.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:48:51.798 [DEBUG] [Thread-116159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:48:51.798 [DEBUG] [Thread-116159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:48:51.799 [DEBUG] [Thread-116159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:48:51.839 [DEBUG] [Thread-116159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:48:51.839 [DEBUG] [Thread-116159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:48:51.842 [DEBUG] [Thread-116159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:48:51.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:48:51.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:48:51.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:48:51.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:48:51.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:48:51.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:48:51.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:48:51.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:48:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:48:51.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.408731 -999.00  +18.80   6.29     36   +3.70 1 1 1 1 1   888    0 18.54 140.37 ----- 5.7 6.3 175.6 9.2 26.9 -26.2 25.8 -29.0 25.8 -23.1 26.7 -23.7
2025-12-03T11:48:51.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:48:51.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:48:51.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.408731
2025-12-03T11:48:51.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:48:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:48:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:48:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:48:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:48:51.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:48:36', tmtdew=16.87, humidity=32.04, cloud=0.0, wind=8.38, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:48:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:48:51.868 [DEBUG] [Thread-116159] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:48:51.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:48:51.962 [DEBUG] [Thread-116162] [transport.py] [_log()] starting thread (client mode): 0xa5161900
2025-12-03T11:48:51.962 [DEBUG] [Thread-116162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:48:51.978 [DEBUG] [Thread-116162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:48:51.978 [INFO] [Thread-116162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:48:51.986 [DEBUG] [Thread-116162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] client lang: <none>
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] server lang: <none>
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] kex follows: False
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] Compression: none
2025-12-03T11:48:51.987 [DEBUG] [Thread-116162] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:48:52.043 [DEBUG] [Thread-116162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:48:52.044 [DEBUG] [Thread-116162] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:48:52.044 [DEBUG] [Thread-116162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:48:52.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:48:52.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:48:52.099 [DEBUG] [Thread-116162] [transport.py] [_log()] userauth is OK
2025-12-03T11:48:52.099 [DEBUG] [Thread-116162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:48:52.099 [DEBUG] [Thread-116162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:48:52.099 [DEBUG] [Thread-116162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:48:52.099 [DEBUG] [Thread-116162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:48:52.113 [INFO] [Thread-116162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:48:52.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:48:52.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:48:53.017 [DEBUG] [Thread-116162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:48:53.017 [DEBUG] [Thread-116162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:48:53.066 [DEBUG] [Thread-116162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:48:53.066 [DEBUG] [Thread-116162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:48:53.075 [DEBUG] [Thread-116162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:48:53.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:48:53.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:48:53.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:48:53.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:48:53.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:48:53.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:48:53.109 [DEBUG] [Thread-116162] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:48:56.724 [DEBUG] [Thread-116164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:57.451 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:48:57.452 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:11.760 [DEBUG] [Thread-116165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:23.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:49:23.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:49:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:49:23.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 49, 8), 16.73, 32.34, 0.0, 8.84, 17.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:49:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:49:08
2025-12-03T11:49:23.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:49:24.091 [DEBUG] [Thread-116166] [transport.py] [_log()] starting thread (client mode): 0xa2785450
2025-12-03T11:49:24.091 [DEBUG] [Thread-116166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:49:24.105 [DEBUG] [Thread-116166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:49:24.105 [INFO] [Thread-116166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:24.108 [DEBUG] [Thread-116166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] client lang: <none>
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] server lang: <none>
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] kex follows: False
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] Compression: none
2025-12-03T11:49:24.109 [DEBUG] [Thread-116166] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:49:24.125 [DEBUG] [Thread-116166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:49:24.125 [DEBUG] [Thread-116166] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:49:24.126 [DEBUG] [Thread-116166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:49:24.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:49:24.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:49:24.127 [DEBUG] [Thread-116166] [transport.py] [_log()] userauth is OK
2025-12-03T11:49:24.127 [DEBUG] [Thread-116166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:49:24.127 [DEBUG] [Thread-116166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:49:24.127 [DEBUG] [Thread-116166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:49:24.127 [DEBUG] [Thread-116166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:49:24.140 [INFO] [Thread-116166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:49:24.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:49:24.787 [DEBUG] [Thread-116166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:49:24.787 [DEBUG] [Thread-116166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:49:24.788 [DEBUG] [Thread-116166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:49:24.828 [DEBUG] [Thread-116166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:49:24.828 [DEBUG] [Thread-116166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:49:24.830 [DEBUG] [Thread-116166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:49:24.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:49:24.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:49:24.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:49:24.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:49:24.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:49:24.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:49:24.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.409078 -999.00  +19.00  13.85     36   +3.90 1 1 1 1 1   888    0 18.61 148.70 ----- 12.4 13.8 192.8 18.8 26.7 -27.1 25.5 -25.6 25.8 -23.6 26.6 -25.3
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:49:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.409078
2025-12-03T11:49:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:49:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:49:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:49:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:49:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:49:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:49:08', tmtdew=16.73, humidity=32.34, cloud=0.0, wind=8.84, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:49:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:49:24.860 [DEBUG] [Thread-116166] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:49:24.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:49:24.955 [DEBUG] [Thread-116169] [transport.py] [_log()] starting thread (client mode): 0xa270b400
2025-12-03T11:49:24.955 [DEBUG] [Thread-116169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:49:24.970 [DEBUG] [Thread-116169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:49:24.970 [INFO] [Thread-116169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:24.978 [DEBUG] [Thread-116169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] client lang: <none>
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] server lang: <none>
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] kex follows: False
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:49:24.979 [DEBUG] [Thread-116169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:49:24.980 [DEBUG] [Thread-116169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:49:24.980 [DEBUG] [Thread-116169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:49:24.980 [DEBUG] [Thread-116169] [transport.py] [_log()] Compression: none
2025-12-03T11:49:24.980 [DEBUG] [Thread-116169] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:49:25.036 [DEBUG] [Thread-116169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:49:25.037 [DEBUG] [Thread-116169] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:49:25.037 [DEBUG] [Thread-116169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:49:25.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:49:25.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:49:25.092 [DEBUG] [Thread-116169] [transport.py] [_log()] userauth is OK
2025-12-03T11:49:25.092 [DEBUG] [Thread-116169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:49:25.092 [DEBUG] [Thread-116169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:49:25.093 [DEBUG] [Thread-116169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:49:25.093 [DEBUG] [Thread-116169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:49:25.111 [INFO] [Thread-116169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:49:25.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:49:25.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:49:25.979 [DEBUG] [Thread-116169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:49:25.979 [DEBUG] [Thread-116169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:49:26.027 [DEBUG] [Thread-116169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:49:26.027 [DEBUG] [Thread-116169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:49:26.036 [DEBUG] [Thread-116169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:49:26.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:49:26.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:49:26.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:49:26.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:49:26.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:49:26.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:49:26.070 [DEBUG] [Thread-116169] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:49:26.795 [DEBUG] [Thread-116171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:41.838 [DEBUG] [Thread-116172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:43.985 [DEBUG] [Thread-116173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:56.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:49:56.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:49:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:49:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 49, 40), 16.47, 33.09, 0.0, 14.58, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:49:56.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:49:40
2025-12-03T11:49:56.867 [DEBUG] [Thread-116174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:49:57.031 [DEBUG] [Thread-116175] [transport.py] [_log()] starting thread (client mode): 0xa270af80
2025-12-03T11:49:57.032 [DEBUG] [Thread-116175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:49:57.051 [DEBUG] [Thread-116175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:49:57.051 [INFO] [Thread-116175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:49:57.054 [DEBUG] [Thread-116175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] client lang: <none>
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] server lang: <none>
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] kex follows: False
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:49:57.055 [DEBUG] [Thread-116175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:49:57.056 [DEBUG] [Thread-116175] [transport.py] [_log()] Compression: none
2025-12-03T11:49:57.056 [DEBUG] [Thread-116175] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:49:57.064 [DEBUG] [Thread-116175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:49:57.064 [DEBUG] [Thread-116175] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:49:57.065 [DEBUG] [Thread-116175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:49:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:49:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:49:57.066 [DEBUG] [Thread-116175] [transport.py] [_log()] userauth is OK
2025-12-03T11:49:57.066 [DEBUG] [Thread-116175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:49:57.067 [DEBUG] [Thread-116175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:49:57.067 [DEBUG] [Thread-116175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:49:57.067 [DEBUG] [Thread-116175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:49:57.090 [INFO] [Thread-116175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:49:57.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:49:57.591 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:57.592 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:49:57.672 [DEBUG] [Thread-116175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:49:57.672 [DEBUG] [Thread-116175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:49:57.672 [DEBUG] [Thread-116175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:49:57.713 [DEBUG] [Thread-116175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:49:57.713 [DEBUG] [Thread-116175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:49:57.715 [DEBUG] [Thread-116175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:49:57.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:49:57.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:49:57.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:49:57.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:49:57.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:49:57.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:49:57.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.409425 -999.00  +18.90  24.36     35   +3.50 1 1 1 1 1   888    0 18.47 140.45 ----- 15.9 24.4 165.6 28.8 26.5 -27.2 25.6 -25.2 25.5 -25.1 26.5 -26.5
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:49:57.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.409425
2025-12-03T11:49:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:49:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:49:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:49:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:49:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:49:57.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:49:40', tmtdew=16.47, humidity=33.09, cloud=0.0, wind=14.58, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:49:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:49:57.738 [DEBUG] [Thread-116175] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:49:57.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:49:57.832 [DEBUG] [Thread-116178] [transport.py] [_log()] starting thread (client mode): 0xa5163ee0
2025-12-03T11:49:57.832 [DEBUG] [Thread-116178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:49:57.848 [DEBUG] [Thread-116178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:49:57.848 [INFO] [Thread-116178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] client lang: <none>
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] server lang: <none>
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] kex follows: False
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:49:57.856 [DEBUG] [Thread-116178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:49:57.857 [DEBUG] [Thread-116178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:49:57.857 [DEBUG] [Thread-116178] [transport.py] [_log()] Compression: none
2025-12-03T11:49:57.857 [DEBUG] [Thread-116178] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:49:57.911 [DEBUG] [Thread-116178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:49:57.912 [DEBUG] [Thread-116178] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:49:57.912 [DEBUG] [Thread-116178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:49:57.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:49:57.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:49:57.968 [DEBUG] [Thread-116178] [transport.py] [_log()] userauth is OK
2025-12-03T11:49:57.968 [DEBUG] [Thread-116178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:49:57.968 [DEBUG] [Thread-116178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:49:57.969 [DEBUG] [Thread-116178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:49:57.969 [DEBUG] [Thread-116178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:49:57.987 [INFO] [Thread-116178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:49:57.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:49:57.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:49:58.820 [DEBUG] [Thread-116178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:49:58.821 [DEBUG] [Thread-116178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:49:58.869 [DEBUG] [Thread-116178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:49:58.869 [DEBUG] [Thread-116178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:49:58.878 [DEBUG] [Thread-116178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:49:58.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:49:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:49:58.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:49:58.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:49:58.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:49:58.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:49:58.912 [DEBUG] [Thread-116178] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:50:11.895 [DEBUG] [Thread-116180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:26.930 [DEBUG] [Thread-116181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:28.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:50:28.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:50:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:50:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 50, 12), 16.51, 33.09, 0.0, 18.69, 18.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:50:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:50:12
2025-12-03T11:50:29.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:50:29.866 [DEBUG] [Thread-116182] [transport.py] [_log()] starting thread (client mode): 0xa2786110
2025-12-03T11:50:29.866 [DEBUG] [Thread-116182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:50:29.888 [DEBUG] [Thread-116182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:50:29.888 [INFO] [Thread-116182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:50:29.891 [DEBUG] [Thread-116182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] client lang: <none>
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] server lang: <none>
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] kex follows: False
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] Compression: none
2025-12-03T11:50:29.892 [DEBUG] [Thread-116182] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:50:29.910 [DEBUG] [Thread-116182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:50:29.910 [DEBUG] [Thread-116182] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:50:29.911 [DEBUG] [Thread-116182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:50:29.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:50:29.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:50:29.913 [DEBUG] [Thread-116182] [transport.py] [_log()] userauth is OK
2025-12-03T11:50:29.913 [DEBUG] [Thread-116182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:50:29.913 [DEBUG] [Thread-116182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:50:29.913 [DEBUG] [Thread-116182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:50:29.913 [DEBUG] [Thread-116182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:50:29.937 [INFO] [Thread-116182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:50:29.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:50:30.560 [DEBUG] [Thread-116182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:50:30.560 [DEBUG] [Thread-116182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:50:30.560 [DEBUG] [Thread-116182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:50:30.601 [DEBUG] [Thread-116182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:50:30.601 [DEBUG] [Thread-116182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:50:30.603 [DEBUG] [Thread-116182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:50:30.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:50:30.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:50:30.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:50:30.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:50:30.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:50:30.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:50:30.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:50:30.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:50:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:50:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.409425 -999.00  +18.90  24.36     35   +3.50 1 1 1 1 1   888    0 18.47 140.45 ----- 15.9 24.4 165.6 28.8 26.5 -27.2 25.6 -25.2 25.5 -25.1 26.5 -26.5
2025-12-03T11:50:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:50:30.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:50:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.409425
2025-12-03T11:50:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:50:30.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:50:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:50:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:50:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:50:30.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:50:12', tmtdew=16.51, humidity=33.09, cloud=0.0, wind=18.69, temperature=18.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:49:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:50:30.622 [DEBUG] [Thread-116182] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:50:30.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:50:30.719 [DEBUG] [Thread-116185] [transport.py] [_log()] starting thread (client mode): 0xa5162710
2025-12-03T11:50:30.719 [DEBUG] [Thread-116185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:50:30.733 [DEBUG] [Thread-116185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:50:30.733 [INFO] [Thread-116185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:50:30.741 [DEBUG] [Thread-116185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] client lang: <none>
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] server lang: <none>
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] kex follows: False
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] Compression: none
2025-12-03T11:50:30.742 [DEBUG] [Thread-116185] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:50:30.800 [DEBUG] [Thread-116185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:50:30.801 [DEBUG] [Thread-116185] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:50:30.801 [DEBUG] [Thread-116185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:50:30.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:50:30.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:50:30.857 [DEBUG] [Thread-116185] [transport.py] [_log()] userauth is OK
2025-12-03T11:50:30.857 [DEBUG] [Thread-116185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:50:30.857 [DEBUG] [Thread-116185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:50:30.857 [DEBUG] [Thread-116185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:50:30.857 [DEBUG] [Thread-116185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:50:30.876 [INFO] [Thread-116185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:50:30.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:50:30.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:50:31.777 [DEBUG] [Thread-116185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:50:31.778 [DEBUG] [Thread-116185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:50:31.826 [DEBUG] [Thread-116185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:50:31.826 [DEBUG] [Thread-116185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:50:31.835 [DEBUG] [Thread-116185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:50:31.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:50:31.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:50:31.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:50:31.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:50:31.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:50:31.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:50:31.870 [DEBUG] [Thread-116185] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:50:41.962 [DEBUG] [Thread-116187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:44.024 [DEBUG] [Thread-116188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:57.009 [DEBUG] [Thread-116189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:57.734 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:50:57.735 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:01.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:51:01.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:51:01.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:51:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 50, 44), 17.04, 31.84, 0.0, 18.74, 18.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:51:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:50:44
2025-12-03T11:51:02.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:51:02.828 [DEBUG] [Thread-116190] [transport.py] [_log()] starting thread (client mode): 0xa27b7460
2025-12-03T11:51:02.829 [DEBUG] [Thread-116190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:51:02.849 [DEBUG] [Thread-116190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:51:02.849 [INFO] [Thread-116190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:51:02.852 [DEBUG] [Thread-116190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:51:02.852 [DEBUG] [Thread-116190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:51:02.852 [DEBUG] [Thread-116190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:51:02.852 [DEBUG] [Thread-116190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] client lang: <none>
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] server lang: <none>
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] kex follows: False
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] Compression: none
2025-12-03T11:51:02.853 [DEBUG] [Thread-116190] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:51:02.868 [DEBUG] [Thread-116190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:51:02.869 [DEBUG] [Thread-116190] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:51:02.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:51:02.870 [DEBUG] [Thread-116190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:51:02.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:51:02.871 [DEBUG] [Thread-116190] [transport.py] [_log()] userauth is OK
2025-12-03T11:51:02.872 [DEBUG] [Thread-116190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:51:02.872 [DEBUG] [Thread-116190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:51:02.872 [DEBUG] [Thread-116190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:51:02.872 [DEBUG] [Thread-116190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:51:02.896 [INFO] [Thread-116190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:51:02.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:51:03.512 [DEBUG] [Thread-116190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:51:03.512 [DEBUG] [Thread-116190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:51:03.513 [DEBUG] [Thread-116190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:51:03.553 [DEBUG] [Thread-116190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:51:03.553 [DEBUG] [Thread-116190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:51:03.556 [DEBUG] [Thread-116190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:51:03.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:51:03.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:51:03.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:51:03.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:51:03.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:51:03.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:51:03.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.409772 -999.00  +18.80  15.72     35   +3.20 1 1 1 1 1   888    0 18.80 146.09 ----- 22.1 15.7 144.0 25.6 26.6 -26.2 25.7 -25.6 25.7 -23.8 26.4 -24.7
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.409772
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:51:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:50:44', tmtdew=17.04, humidity=31.84, cloud=0.0, wind=18.74, temperature=18.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:50:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:51:03.574 [DEBUG] [Thread-116190] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:51:03.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:51:12.043 [DEBUG] [Thread-116193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:27.096 [DEBUG] [Thread-116194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:42.126 [DEBUG] [Thread-116195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:44.060 [DEBUG] [Thread-116196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:57.158 [DEBUG] [Thread-116197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:57.877 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:51:57.879 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:12.185 [DEBUG] [Thread-116198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:27.211 [DEBUG] [Thread-116199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:42.241 [DEBUG] [Thread-116200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:44.099 [DEBUG] [Thread-116201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:57.268 [DEBUG] [Thread-116202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:58.018 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:52:58.019 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:12.296 [DEBUG] [Thread-116203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:16.950 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T11:53:27.321 [DEBUG] [Thread-116204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:42.350 [DEBUG] [Thread-116205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:44.149 [DEBUG] [Thread-116206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:46.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:53:46.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:53:46.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:53:47.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 53, 24), 17.7, 30.68, 0.0, 13.99, 18.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:53:47.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:53:24
2025-12-03T11:53:47.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:53:47.917 [DEBUG] [Thread-116207] [transport.py] [_log()] starting thread (client mode): 0xa27b5d50
2025-12-03T11:53:47.917 [DEBUG] [Thread-116207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:53:47.938 [DEBUG] [Thread-116207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:53:47.938 [INFO] [Thread-116207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:53:47.941 [DEBUG] [Thread-116207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] client lang: <none>
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] server lang: <none>
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] kex follows: False
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] Compression: none
2025-12-03T11:53:47.942 [DEBUG] [Thread-116207] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:53:47.960 [DEBUG] [Thread-116207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:53:47.960 [DEBUG] [Thread-116207] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:53:47.961 [DEBUG] [Thread-116207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:53:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:53:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:53:47.963 [DEBUG] [Thread-116207] [transport.py] [_log()] userauth is OK
2025-12-03T11:53:47.963 [DEBUG] [Thread-116207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:53:47.963 [DEBUG] [Thread-116207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:53:47.963 [DEBUG] [Thread-116207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:53:47.963 [DEBUG] [Thread-116207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:53:47.998 [INFO] [Thread-116207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:53:47.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:53:48.619 [DEBUG] [Thread-116207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:53:48.619 [DEBUG] [Thread-116207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:53:48.619 [DEBUG] [Thread-116207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:53:48.660 [DEBUG] [Thread-116207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:53:48.660 [DEBUG] [Thread-116207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:53:48.663 [DEBUG] [Thread-116207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:53:48.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:53:48.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:53:48.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:53:48.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:53:48.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:53:48.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:53:48.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:53:48.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:53:48.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:53:48.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.411856 -999.00  +18.10  11.87     35   +2.50 1 1 1 1 1   888    0 18.89 144.00 ----- 11.3 11.9 133.0 14.6 26.7 -26.2 26.1 -25.3 25.9 -23.6 26.6 -25.1
2025-12-03T11:53:48.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:53:48.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:53:48.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.411856
2025-12-03T11:53:48.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:53:48.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:53:48.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:53:48.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:53:48.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:53:48.688 [DEBUG] [Thread-116207] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:53:48.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:53:24', tmtdew=17.7, humidity=30.68, cloud=0.0, wind=13.99, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:53:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:53:48.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:53:48.781 [DEBUG] [Thread-116210] [transport.py] [_log()] starting thread (client mode): 0xa27c3490
2025-12-03T11:53:48.781 [DEBUG] [Thread-116210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:53:48.797 [DEBUG] [Thread-116210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:53:48.797 [INFO] [Thread-116210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:53:48.804 [DEBUG] [Thread-116210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] client lang: <none>
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] server lang: <none>
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] kex follows: False
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:53:48.805 [DEBUG] [Thread-116210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:53:48.806 [DEBUG] [Thread-116210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:53:48.806 [DEBUG] [Thread-116210] [transport.py] [_log()] Compression: none
2025-12-03T11:53:48.806 [DEBUG] [Thread-116210] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:53:48.863 [DEBUG] [Thread-116210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:53:48.863 [DEBUG] [Thread-116210] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:53:48.863 [DEBUG] [Thread-116210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:53:48.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:53:48.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:53:48.919 [DEBUG] [Thread-116210] [transport.py] [_log()] userauth is OK
2025-12-03T11:53:48.919 [DEBUG] [Thread-116210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:53:48.919 [DEBUG] [Thread-116210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:53:48.919 [DEBUG] [Thread-116210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:53:48.919 [DEBUG] [Thread-116210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:53:48.938 [INFO] [Thread-116210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:53:48.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:53:48.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:53:49.818 [DEBUG] [Thread-116210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:53:49.818 [DEBUG] [Thread-116210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:53:49.867 [DEBUG] [Thread-116210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:53:49.867 [DEBUG] [Thread-116210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:53:49.876 [DEBUG] [Thread-116210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:53:49.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:53:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:53:49.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:53:49.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:53:49.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:53:49.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:53:49.910 [DEBUG] [Thread-116210] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:53:57.377 [DEBUG] [Thread-116212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:58.163 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:53:58.164 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:12.416 [DEBUG] [Thread-116213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:19.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:54:19.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:54:19.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:54:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 53, 56), 17.48, 30.78, 0.0, 13.32, 18.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:54:20.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:53:56
2025-12-03T11:54:20.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:54:20.879 [DEBUG] [Thread-116214] [transport.py] [_log()] starting thread (client mode): 0xa27852d0
2025-12-03T11:54:20.879 [DEBUG] [Thread-116214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:54:20.899 [DEBUG] [Thread-116214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:54:20.899 [INFO] [Thread-116214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:54:20.902 [DEBUG] [Thread-116214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] client lang: <none>
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] server lang: <none>
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] kex follows: False
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] Compression: none
2025-12-03T11:54:20.903 [DEBUG] [Thread-116214] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:54:20.918 [DEBUG] [Thread-116214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:54:20.918 [DEBUG] [Thread-116214] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:54:20.918 [DEBUG] [Thread-116214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:54:20.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:54:20.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:54:20.919 [DEBUG] [Thread-116214] [transport.py] [_log()] userauth is OK
2025-12-03T11:54:20.919 [DEBUG] [Thread-116214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:54:20.919 [DEBUG] [Thread-116214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:54:20.919 [DEBUG] [Thread-116214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:54:20.919 [DEBUG] [Thread-116214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:54:20.949 [INFO] [Thread-116214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:54:20.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:54:21.579 [DEBUG] [Thread-116214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:54:21.580 [DEBUG] [Thread-116214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:54:21.580 [DEBUG] [Thread-116214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:54:21.621 [DEBUG] [Thread-116214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:54:21.621 [DEBUG] [Thread-116214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:54:21.624 [DEBUG] [Thread-116214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:54:21.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:54:21.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:54:21.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:54:21.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:54:21.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:54:21.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:54:21.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:54:21.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:54:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:54:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.412203 -999.00  +18.20   6.06     36   +2.90 1 1 1 1 1   888    0 19.19 144.63 ----- 4.8 6.1 141.6 10.7 26.7 -25.4 26.1 -24.5 25.9 -22.7 26.6 -25.7
2025-12-03T11:54:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:54:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:54:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.412203
2025-12-03T11:54:21.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:54:21.649 [DEBUG] [Thread-116214] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:54:21.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:54:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:54:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:54:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:54:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:53:56', tmtdew=17.48, humidity=30.78, cloud=0.0, wind=13.32, temperature=18.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:53:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:54:21.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:54:21.760 [DEBUG] [Thread-116217] [transport.py] [_log()] starting thread (client mode): 0xa2786fe0
2025-12-03T11:54:21.760 [DEBUG] [Thread-116217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:54:21.777 [DEBUG] [Thread-116217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:54:21.778 [INFO] [Thread-116217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:54:21.785 [DEBUG] [Thread-116217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:21.786 [DEBUG] [Thread-116217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] client lang: <none>
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] server lang: <none>
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] kex follows: False
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] Compression: none
2025-12-03T11:54:21.787 [DEBUG] [Thread-116217] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:54:21.843 [DEBUG] [Thread-116217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:54:21.843 [DEBUG] [Thread-116217] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:54:21.844 [DEBUG] [Thread-116217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:54:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:54:21.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:54:21.909 [DEBUG] [Thread-116217] [transport.py] [_log()] userauth is OK
2025-12-03T11:54:21.909 [DEBUG] [Thread-116217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:54:21.909 [DEBUG] [Thread-116217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:54:21.909 [DEBUG] [Thread-116217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:54:21.909 [DEBUG] [Thread-116217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:54:21.928 [INFO] [Thread-116217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:54:21.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:54:21.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:54:22.755 [DEBUG] [Thread-116217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:54:22.755 [DEBUG] [Thread-116217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:54:22.803 [DEBUG] [Thread-116217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:54:22.803 [DEBUG] [Thread-116217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:54:22.812 [DEBUG] [Thread-116217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:54:22.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:54:22.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:54:22.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:54:22.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:54:22.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:54:22.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:54:22.847 [DEBUG] [Thread-116217] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:54:27.448 [DEBUG] [Thread-116219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:42.500 [DEBUG] [Thread-116220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:44.177 [DEBUG] [Thread-116221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:52.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:54:52.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:54:52.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:54:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 54, 28), 17.02, 31.74, 0.0, 11.54, 17.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:54:53.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:54:28
2025-12-03T11:54:53.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:54:53.829 [DEBUG] [Thread-116222] [transport.py] [_log()] starting thread (client mode): 0xa51606a0
2025-12-03T11:54:53.829 [DEBUG] [Thread-116222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:54:53.849 [DEBUG] [Thread-116222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:54:53.849 [INFO] [Thread-116222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] client lang: <none>
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] server lang: <none>
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] kex follows: False
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:54:53.853 [DEBUG] [Thread-116222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:54:53.854 [DEBUG] [Thread-116222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:54:53.854 [DEBUG] [Thread-116222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:54:53.854 [DEBUG] [Thread-116222] [transport.py] [_log()] Compression: none
2025-12-03T11:54:53.854 [DEBUG] [Thread-116222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:54:53.870 [DEBUG] [Thread-116222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:54:53.870 [DEBUG] [Thread-116222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:54:53.871 [DEBUG] [Thread-116222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:54:53.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:54:53.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:54:53.872 [DEBUG] [Thread-116222] [transport.py] [_log()] userauth is OK
2025-12-03T11:54:53.872 [DEBUG] [Thread-116222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:54:53.873 [DEBUG] [Thread-116222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:54:53.873 [DEBUG] [Thread-116222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:54:53.873 [DEBUG] [Thread-116222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:54:53.888 [INFO] [Thread-116222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:54:53.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:54:54.529 [DEBUG] [Thread-116222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:54:54.529 [DEBUG] [Thread-116222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:54:54.529 [DEBUG] [Thread-116222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:54:54.571 [DEBUG] [Thread-116222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:54:54.571 [DEBUG] [Thread-116222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:54:54.573 [DEBUG] [Thread-116222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:54:54.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:54:54.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:54:54.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:54:54.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:54:54.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:54:54.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:54:54.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.412550 -999.00  +18.60   3.35     36   +3.50 1 1 1 1 1   888    0 18.66 126.75 ----- 4.2 3.4 296.8 6.0 26.9 -24.6 26.2 -27.2 26.2 -22.1 26.8 -23.5
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:54:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.412550
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:54:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:54:28', tmtdew=17.02, humidity=31.74, cloud=0.0, wind=11.54, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:54:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:54:54.594 [DEBUG] [Thread-116222] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:54:54.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:54:54.679 [DEBUG] [Thread-116225] [transport.py] [_log()] starting thread (client mode): 0xa5161030
2025-12-03T11:54:54.680 [DEBUG] [Thread-116225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:54:54.697 [DEBUG] [Thread-116225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:54:54.697 [INFO] [Thread-116225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:54:54.704 [DEBUG] [Thread-116225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] client lang: <none>
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] server lang: <none>
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] kex follows: False
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] Compression: none
2025-12-03T11:54:54.705 [DEBUG] [Thread-116225] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:54:54.763 [DEBUG] [Thread-116225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:54:54.764 [DEBUG] [Thread-116225] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:54:54.764 [DEBUG] [Thread-116225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:54:54.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:54:54.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:54:54.820 [DEBUG] [Thread-116225] [transport.py] [_log()] userauth is OK
2025-12-03T11:54:54.820 [DEBUG] [Thread-116225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:54:54.820 [DEBUG] [Thread-116225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:54:54.820 [DEBUG] [Thread-116225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:54:54.820 [DEBUG] [Thread-116225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:54:54.840 [INFO] [Thread-116225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:54:54.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:54:54.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:54:55.685 [DEBUG] [Thread-116225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:54:55.685 [DEBUG] [Thread-116225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:54:55.733 [DEBUG] [Thread-116225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:54:55.733 [DEBUG] [Thread-116225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:54:55.742 [DEBUG] [Thread-116225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:54:55.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:54:55.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:54:55.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:54:55.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:54:55.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:54:55.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:54:55.776 [DEBUG] [Thread-116225] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:54:57.527 [DEBUG] [Thread-116227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:58.305 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:54:58.306 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:12.579 [DEBUG] [Thread-116228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:25.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:55:25.799 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:55:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:55:26.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 55), 16.68, 32.87, 0.0, 12.39, 17.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:55:26.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:55:00
2025-12-03T11:55:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:55:26.809 [DEBUG] [Thread-116229] [transport.py] [_log()] starting thread (client mode): 0xa2785ab0
2025-12-03T11:55:26.809 [DEBUG] [Thread-116229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:55:26.829 [DEBUG] [Thread-116229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:55:26.829 [INFO] [Thread-116229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] client lang: <none>
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] server lang: <none>
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] kex follows: False
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] Compression: none
2025-12-03T11:55:26.833 [DEBUG] [Thread-116229] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:55:26.851 [DEBUG] [Thread-116229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:55:26.851 [DEBUG] [Thread-116229] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:55:26.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:55:26.852 [DEBUG] [Thread-116229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:55:26.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:55:26.853 [DEBUG] [Thread-116229] [transport.py] [_log()] userauth is OK
2025-12-03T11:55:26.853 [DEBUG] [Thread-116229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:55:26.853 [DEBUG] [Thread-116229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:55:26.853 [DEBUG] [Thread-116229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:55:26.853 [DEBUG] [Thread-116229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:55:26.883 [INFO] [Thread-116229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:55:26.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:55:27.541 [DEBUG] [Thread-116229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:55:27.541 [DEBUG] [Thread-116229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:55:27.542 [DEBUG] [Thread-116229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:55:27.582 [DEBUG] [Thread-116229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:55:27.582 [DEBUG] [Thread-116229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:55:27.585 [DEBUG] [Thread-116229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:55:27.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:55:27.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:55:27.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:55:27.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:55:27.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:55:27.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:55:27.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.412898 -999.00  +19.00   3.61     36   +3.60 1 2 1 1 1   888    0 18.31 122.30 ----- 5.1 3.6 137.5 7.6 27.1 -25.2 26.4 -23.5 26.3 -21.7 27.0 -23.6
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:55:27.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.412898
2025-12-03T11:55:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:55:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:55:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:55:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:55:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:55:27.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:55:00', tmtdew=16.68, humidity=32.87, cloud=0.0, wind=12.39, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:54:34.387', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:55:27.611 [DEBUG] [Thread-116229] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:55:27.613 [DEBUG] [Thread-116232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:27.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:55:27.703 [DEBUG] [Thread-116233] [transport.py] [_log()] starting thread (client mode): 0xa270a200
2025-12-03T11:55:27.703 [DEBUG] [Thread-116233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:55:27.717 [DEBUG] [Thread-116233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:55:27.718 [INFO] [Thread-116233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:55:27.725 [DEBUG] [Thread-116233] [transport.py] [_log()] client lang: <none>
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] server lang: <none>
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] kex follows: False
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] Compression: none
2025-12-03T11:55:27.726 [DEBUG] [Thread-116233] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:55:27.788 [DEBUG] [Thread-116233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:55:27.788 [DEBUG] [Thread-116233] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:55:27.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:55:27.789 [DEBUG] [Thread-116233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:55:27.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:55:27.844 [DEBUG] [Thread-116233] [transport.py] [_log()] userauth is OK
2025-12-03T11:55:27.844 [DEBUG] [Thread-116233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:55:27.844 [DEBUG] [Thread-116233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:55:27.844 [DEBUG] [Thread-116233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:55:27.845 [DEBUG] [Thread-116233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:55:27.863 [INFO] [Thread-116233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:55:27.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:55:27.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:55:28.770 [DEBUG] [Thread-116233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:55:28.771 [DEBUG] [Thread-116233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:55:28.820 [DEBUG] [Thread-116233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:55:28.820 [DEBUG] [Thread-116233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:55:28.833 [DEBUG] [Thread-116233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:55:28.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:55:28.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:55:28.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:55:28.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:55:28.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:55:28.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:55:28.868 [DEBUG] [Thread-116233] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:55:42.651 [DEBUG] [Thread-116235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:44.209 [DEBUG] [Thread-116236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:57.684 [DEBUG] [Thread-116237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:58.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:58.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:55:58.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:55:58.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:55:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:55:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 55, 32), 16.85, 32.52, 0.0, 12.56, 18.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:55:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:55:32
2025-12-03T11:55:59.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:55:59.848 [DEBUG] [Thread-116238] [transport.py] [_log()] starting thread (client mode): 0xa27b7130
2025-12-03T11:55:59.848 [DEBUG] [Thread-116238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:55:59.868 [DEBUG] [Thread-116238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:55:59.869 [INFO] [Thread-116238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:55:59.872 [DEBUG] [Thread-116238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] client lang: <none>
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] server lang: <none>
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] kex follows: False
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] Compression: none
2025-12-03T11:55:59.873 [DEBUG] [Thread-116238] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:55:59.891 [DEBUG] [Thread-116238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:55:59.892 [DEBUG] [Thread-116238] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:55:59.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:55:59.893 [DEBUG] [Thread-116238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:55:59.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:55:59.895 [DEBUG] [Thread-116238] [transport.py] [_log()] userauth is OK
2025-12-03T11:55:59.896 [DEBUG] [Thread-116238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:55:59.896 [DEBUG] [Thread-116238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:55:59.896 [DEBUG] [Thread-116238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:55:59.896 [DEBUG] [Thread-116238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:55:59.917 [INFO] [Thread-116238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:55:59.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:56:00.565 [DEBUG] [Thread-116238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:56:00.565 [DEBUG] [Thread-116238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:56:00.565 [DEBUG] [Thread-116238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:56:00.606 [DEBUG] [Thread-116238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:56:00.606 [DEBUG] [Thread-116238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:56:00.608 [DEBUG] [Thread-116238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:56:00.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:56:00.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:56:00.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:56:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:56:00.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:56:00.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:56:00.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.413244 -999.00  +19.20   8.11     35   +3.50 1 1 1 1 1   888    0 18.28 114.62 ----- 12.1 8.1 175.2 12.7 27.2 -24.6 26.2 -27.1 26.4 -22.9 27.1 -23.1
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.413244
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:56:00.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:55:32', tmtdew=16.85, humidity=32.52, cloud=0.0, wind=12.56, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:55:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:56:00.627 [DEBUG] [Thread-116238] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:56:00.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:56:00.714 [DEBUG] [Thread-116241] [transport.py] [_log()] starting thread (client mode): 0xa27b7eb0
2025-12-03T11:56:00.714 [DEBUG] [Thread-116241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:56:00.729 [DEBUG] [Thread-116241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:56:00.729 [INFO] [Thread-116241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:56:00.736 [DEBUG] [Thread-116241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] client lang: <none>
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] server lang: <none>
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] kex follows: False
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] Compression: none
2025-12-03T11:56:00.737 [DEBUG] [Thread-116241] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:56:00.799 [DEBUG] [Thread-116241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:56:00.799 [DEBUG] [Thread-116241] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:56:00.800 [DEBUG] [Thread-116241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:56:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:56:00.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:56:00.856 [DEBUG] [Thread-116241] [transport.py] [_log()] userauth is OK
2025-12-03T11:56:00.856 [DEBUG] [Thread-116241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:56:00.856 [DEBUG] [Thread-116241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:56:00.856 [DEBUG] [Thread-116241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:56:00.856 [DEBUG] [Thread-116241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:56:00.870 [INFO] [Thread-116241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:56:00.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:56:00.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:56:01.754 [DEBUG] [Thread-116241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:56:01.754 [DEBUG] [Thread-116241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:56:01.801 [DEBUG] [Thread-116241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:56:01.801 [DEBUG] [Thread-116241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:56:01.809 [DEBUG] [Thread-116241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:56:01.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:56:01.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:56:01.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:56:01.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:56:01.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:56:01.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:56:01.840 [DEBUG] [Thread-116241] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:56:12.716 [DEBUG] [Thread-116243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:27.761 [DEBUG] [Thread-116244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:31.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:56:31.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:56:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:56:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 56, 4), 16.78, 32.69, 0.0, 15.33, 18.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:56:32.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:56:04
2025-12-03T11:56:32.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:56:32.815 [DEBUG] [Thread-116245] [transport.py] [_log()] starting thread (client mode): 0xa27c2c80
2025-12-03T11:56:32.815 [DEBUG] [Thread-116245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:56:32.834 [DEBUG] [Thread-116245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:56:32.834 [INFO] [Thread-116245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] client lang: <none>
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] server lang: <none>
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] kex follows: False
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] Compression: none
2025-12-03T11:56:32.838 [DEBUG] [Thread-116245] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:56:32.854 [DEBUG] [Thread-116245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:56:32.855 [DEBUG] [Thread-116245] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:56:32.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:56:32.856 [DEBUG] [Thread-116245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:56:32.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:56:32.858 [DEBUG] [Thread-116245] [transport.py] [_log()] userauth is OK
2025-12-03T11:56:32.858 [DEBUG] [Thread-116245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:56:32.858 [DEBUG] [Thread-116245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:56:32.858 [DEBUG] [Thread-116245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:56:32.858 [DEBUG] [Thread-116245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:56:32.882 [INFO] [Thread-116245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:56:32.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:56:33.510 [DEBUG] [Thread-116245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:56:33.511 [DEBUG] [Thread-116245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:56:33.511 [DEBUG] [Thread-116245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:56:33.552 [DEBUG] [Thread-116245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:56:33.552 [DEBUG] [Thread-116245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:56:33.555 [DEBUG] [Thread-116245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:56:33.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:56:33.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:56:33.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:56:33.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:56:33.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:56:33.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:56:33.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:56:33.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.413939 -999.00  +19.60  11.06     34   +3.60 1 2 1 1 1   888    0 17.95 106.08 ----- 14.9 11.1 167.8 20.3 27.4 -24.5 26.6 -23.6 26.5 -22.3 27.3 -23.3
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.413939
2025-12-03T11:56:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:56:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:56:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:56:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:56:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:56:33.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:56:04', tmtdew=16.78, humidity=32.69, cloud=0.0, wind=15.33, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:56:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:56:33.579 [DEBUG] [Thread-116245] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:56:33.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:56:33.675 [DEBUG] [Thread-116248] [transport.py] [_log()] starting thread (client mode): 0xa51606a0
2025-12-03T11:56:33.675 [DEBUG] [Thread-116248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:56:33.689 [DEBUG] [Thread-116248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:56:33.690 [INFO] [Thread-116248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:56:33.697 [DEBUG] [Thread-116248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:56:33.697 [DEBUG] [Thread-116248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:56:33.697 [DEBUG] [Thread-116248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] client lang: <none>
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] server lang: <none>
2025-12-03T11:56:33.698 [DEBUG] [Thread-116248] [transport.py] [_log()] kex follows: False
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] Compression: none
2025-12-03T11:56:33.699 [DEBUG] [Thread-116248] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:56:33.756 [DEBUG] [Thread-116248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:56:33.757 [DEBUG] [Thread-116248] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:56:33.757 [DEBUG] [Thread-116248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:56:33.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:56:33.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:56:33.813 [DEBUG] [Thread-116248] [transport.py] [_log()] userauth is OK
2025-12-03T11:56:33.813 [DEBUG] [Thread-116248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:56:33.814 [DEBUG] [Thread-116248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:56:33.814 [DEBUG] [Thread-116248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:56:33.814 [DEBUG] [Thread-116248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:56:33.835 [INFO] [Thread-116248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:56:33.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:56:33.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:56:34.695 [DEBUG] [Thread-116248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:56:34.695 [DEBUG] [Thread-116248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:56:34.743 [DEBUG] [Thread-116248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:56:34.743 [DEBUG] [Thread-116248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:56:34.752 [DEBUG] [Thread-116248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:56:34.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:56:34.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:56:34.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:56:34.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:56:34.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:56:34.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:56:34.786 [DEBUG] [Thread-116248] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:56:42.784 [DEBUG] [Thread-116250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:44.237 [DEBUG] [Thread-116251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:57.819 [DEBUG] [Thread-116252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:58.590 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:56:58.591 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:04.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:57:04.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:57:04.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:57:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 56, 36), 17.66, 30.42, 0.0, 19.0, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:57:05.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:56:36
2025-12-03T11:57:05.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:57:05.755 [DEBUG] [Thread-116253] [transport.py] [_log()] starting thread (client mode): 0xa27c1150
2025-12-03T11:57:05.755 [DEBUG] [Thread-116253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:57:05.775 [DEBUG] [Thread-116253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:57:05.775 [INFO] [Thread-116253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:57:05.778 [DEBUG] [Thread-116253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:57:05.778 [DEBUG] [Thread-116253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:57:05.778 [DEBUG] [Thread-116253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:57:05.778 [DEBUG] [Thread-116253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] client lang: <none>
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] server lang: <none>
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] kex follows: False
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:57:05.779 [DEBUG] [Thread-116253] [transport.py] [_log()] Compression: none
2025-12-03T11:57:05.780 [DEBUG] [Thread-116253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:57:05.799 [DEBUG] [Thread-116253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:57:05.800 [DEBUG] [Thread-116253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:57:05.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:57:05.801 [DEBUG] [Thread-116253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:57:05.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:57:05.803 [DEBUG] [Thread-116253] [transport.py] [_log()] userauth is OK
2025-12-03T11:57:05.803 [DEBUG] [Thread-116253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:57:05.803 [DEBUG] [Thread-116253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:57:05.803 [DEBUG] [Thread-116253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:57:05.803 [DEBUG] [Thread-116253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:57:05.838 [INFO] [Thread-116253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:57:05.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:57:06.515 [DEBUG] [Thread-116253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:57:06.515 [DEBUG] [Thread-116253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:57:06.516 [DEBUG] [Thread-116253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:57:06.556 [DEBUG] [Thread-116253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:57:06.556 [DEBUG] [Thread-116253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:57:06.559 [DEBUG] [Thread-116253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:57:06.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:57:06.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:57:06.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:57:06.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:57:06.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:57:06.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:57:06.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:57:06.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:57:06.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:57:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.414286 -999.00  +19.30   8.91     35   +3.70 1 2 1 1 1   888    0 18.69 117.21 ----- 14.5 8.9 130.5 16.0 27.6 -24.4 26.6 -22.6 26.6 -21.7 27.3 -23.2
2025-12-03T11:57:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:57:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:57:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.414286
2025-12-03T11:57:06.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:57:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:57:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:57:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:57:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:57:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:56:36', tmtdew=17.66, humidity=30.42, cloud=0.0, wind=19.0, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:56:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:57:06.583 [DEBUG] [Thread-116253] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:57:06.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:57:06.679 [DEBUG] [Thread-116256] [transport.py] [_log()] starting thread (client mode): 0xa27c3040
2025-12-03T11:57:06.679 [DEBUG] [Thread-116256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:57:06.695 [DEBUG] [Thread-116256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:57:06.695 [INFO] [Thread-116256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:57:06.702 [DEBUG] [Thread-116256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:57:06.703 [DEBUG] [Thread-116256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] client lang: <none>
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] server lang: <none>
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] kex follows: False
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] Compression: none
2025-12-03T11:57:06.704 [DEBUG] [Thread-116256] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:57:06.761 [DEBUG] [Thread-116256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:57:06.762 [DEBUG] [Thread-116256] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:57:06.762 [DEBUG] [Thread-116256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:57:06.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:57:06.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:57:06.817 [DEBUG] [Thread-116256] [transport.py] [_log()] userauth is OK
2025-12-03T11:57:06.817 [DEBUG] [Thread-116256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:57:06.817 [DEBUG] [Thread-116256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:57:06.817 [DEBUG] [Thread-116256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:57:06.817 [DEBUG] [Thread-116256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:57:06.837 [INFO] [Thread-116256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:57:06.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:57:06.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:57:07.777 [DEBUG] [Thread-116256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:57:07.777 [DEBUG] [Thread-116256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:57:07.825 [DEBUG] [Thread-116256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:57:07.825 [DEBUG] [Thread-116256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:57:07.834 [DEBUG] [Thread-116256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:57:07.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:57:07.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:57:07.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:57:07.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:57:07.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:57:07.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:57:07.869 [DEBUG] [Thread-116256] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:57:12.851 [DEBUG] [Thread-116258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:27.894 [DEBUG] [Thread-116259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:37.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:57:37.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:57:37.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:57:38.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 57, 8), 17.67, 30.39, 0.0, 13.31, 18.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:57:38.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:57:08
2025-12-03T11:57:38.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:57:38.820 [DEBUG] [Thread-116260] [transport.py] [_log()] starting thread (client mode): 0xa5199150
2025-12-03T11:57:38.820 [DEBUG] [Thread-116260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:57:38.840 [DEBUG] [Thread-116260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:57:38.840 [INFO] [Thread-116260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] client lang: <none>
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] server lang: <none>
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] kex follows: False
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] Compression: none
2025-12-03T11:57:38.844 [DEBUG] [Thread-116260] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:57:38.862 [DEBUG] [Thread-116260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:57:38.863 [DEBUG] [Thread-116260] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:57:38.863 [DEBUG] [Thread-116260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:57:38.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:57:38.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:57:38.865 [DEBUG] [Thread-116260] [transport.py] [_log()] userauth is OK
2025-12-03T11:57:38.865 [DEBUG] [Thread-116260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:57:38.865 [DEBUG] [Thread-116260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:57:38.865 [DEBUG] [Thread-116260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:57:38.866 [DEBUG] [Thread-116260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:57:38.902 [INFO] [Thread-116260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:57:38.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:57:39.553 [DEBUG] [Thread-116260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:57:39.553 [DEBUG] [Thread-116260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:57:39.553 [DEBUG] [Thread-116260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:57:39.594 [DEBUG] [Thread-116260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:57:39.594 [DEBUG] [Thread-116260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:57:39.597 [DEBUG] [Thread-116260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:57:39.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:57:39.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:57:39.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:57:39.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:57:39.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:57:39.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:57:39.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:57:39.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.414634 -999.00  +19.20  12.46     36   +3.70 1 2 1 1 1   888    0 18.41 116.91 ----- 8.8 12.5 142.4 16.2 27.6 -24.1 26.9 -22.8 26.8 -20.4 27.5 -22.7
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.414634
2025-12-03T11:57:39.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:57:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:57:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:57:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:57:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:57:39.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:57:08', tmtdew=17.67, humidity=30.39, cloud=0.0, wind=13.31, temperature=18.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:57:04.378', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:57:39.618 [DEBUG] [Thread-116260] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:57:39.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:57:39.715 [DEBUG] [Thread-116263] [transport.py] [_log()] starting thread (client mode): 0xa27c0730
2025-12-03T11:57:39.715 [DEBUG] [Thread-116263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:57:39.731 [DEBUG] [Thread-116263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:57:39.731 [INFO] [Thread-116263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:57:39.738 [DEBUG] [Thread-116263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:57:39.738 [DEBUG] [Thread-116263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] client lang: <none>
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] server lang: <none>
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] kex follows: False
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] Compression: none
2025-12-03T11:57:39.739 [DEBUG] [Thread-116263] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:57:39.797 [DEBUG] [Thread-116263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:57:39.797 [DEBUG] [Thread-116263] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:57:39.798 [DEBUG] [Thread-116263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:57:39.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:57:39.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:57:39.854 [DEBUG] [Thread-116263] [transport.py] [_log()] userauth is OK
2025-12-03T11:57:39.854 [DEBUG] [Thread-116263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:57:39.854 [DEBUG] [Thread-116263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:57:39.854 [DEBUG] [Thread-116263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:57:39.854 [DEBUG] [Thread-116263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:57:39.873 [INFO] [Thread-116263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:57:39.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:57:39.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:57:40.751 [DEBUG] [Thread-116263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:57:40.752 [DEBUG] [Thread-116263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:57:40.800 [DEBUG] [Thread-116263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:57:40.800 [DEBUG] [Thread-116263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:57:40.808 [DEBUG] [Thread-116263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:57:40.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:57:40.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:57:40.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:57:40.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:57:40.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:57:40.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:57:40.842 [DEBUG] [Thread-116263] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:57:42.923 [DEBUG] [Thread-116265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:44.285 [DEBUG] [Thread-116266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:57.960 [DEBUG] [Thread-116267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:58.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:57:58.731 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:10.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:58:10.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:58:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:58:11.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 57, 40), 17.54, 30.62, 0.0, 13.87, 18.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:58:11.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:57:40
2025-12-03T11:58:11.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:58:11.814 [DEBUG] [Thread-116268] [transport.py] [_log()] starting thread (client mode): 0xa2787b20
2025-12-03T11:58:11.814 [DEBUG] [Thread-116268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:58:11.835 [DEBUG] [Thread-116268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:58:11.836 [INFO] [Thread-116268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] client lang: <none>
2025-12-03T11:58:11.839 [DEBUG] [Thread-116268] [transport.py] [_log()] server lang: <none>
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] kex follows: False
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] Compression: none
2025-12-03T11:58:11.840 [DEBUG] [Thread-116268] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:58:11.859 [DEBUG] [Thread-116268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:58:11.859 [DEBUG] [Thread-116268] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:58:11.860 [DEBUG] [Thread-116268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:58:11.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:58:11.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:58:11.861 [DEBUG] [Thread-116268] [transport.py] [_log()] userauth is OK
2025-12-03T11:58:11.861 [DEBUG] [Thread-116268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:58:11.861 [DEBUG] [Thread-116268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:58:11.861 [DEBUG] [Thread-116268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:58:11.861 [DEBUG] [Thread-116268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:58:11.879 [INFO] [Thread-116268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:58:11.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:58:12.521 [DEBUG] [Thread-116268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:58:12.521 [DEBUG] [Thread-116268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:58:12.521 [DEBUG] [Thread-116268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:58:12.562 [DEBUG] [Thread-116268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:58:12.562 [DEBUG] [Thread-116268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:58:12.565 [DEBUG] [Thread-116268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:58:12.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:58:12.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:58:12.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:58:12.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:58:12.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:58:12.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:58:12.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:58:12.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.414981 -999.00  +19.60  11.51     36   +4.10 1 2 1 1 1   888    0 18.56 118.62 ----- 11.3 11.5 172.5 14.8 27.7 -24.3 26.8 -24.5 26.8 -21.4 27.6 -22.0
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.414981
2025-12-03T11:58:12.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:58:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:58:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:58:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:58:12.592 [DEBUG] [Thread-116268] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:58:12.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:58:12.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:57:40', tmtdew=17.54, humidity=30.62, cloud=0.0, wind=13.87, temperature=18.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:57:34.358', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:58:12.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:58:12.688 [DEBUG] [Thread-116271] [transport.py] [_log()] starting thread (client mode): 0xa2784a60
2025-12-03T11:58:12.689 [DEBUG] [Thread-116271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:58:12.703 [DEBUG] [Thread-116271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:58:12.703 [INFO] [Thread-116271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] client lang: <none>
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] server lang: <none>
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] kex follows: False
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:58:12.711 [DEBUG] [Thread-116271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:58:12.712 [DEBUG] [Thread-116271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:58:12.712 [DEBUG] [Thread-116271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:58:12.712 [DEBUG] [Thread-116271] [transport.py] [_log()] Compression: none
2025-12-03T11:58:12.712 [DEBUG] [Thread-116271] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:58:12.770 [DEBUG] [Thread-116271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:58:12.770 [DEBUG] [Thread-116271] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:58:12.771 [DEBUG] [Thread-116271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:58:12.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:58:12.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:58:12.831 [DEBUG] [Thread-116271] [transport.py] [_log()] userauth is OK
2025-12-03T11:58:12.831 [DEBUG] [Thread-116271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:58:12.831 [DEBUG] [Thread-116271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:58:12.831 [DEBUG] [Thread-116271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:58:12.831 [DEBUG] [Thread-116271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:58:12.854 [INFO] [Thread-116271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:58:12.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:58:12.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:58:12.990 [DEBUG] [Thread-116273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:13.689 [DEBUG] [Thread-116271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:58:13.689 [DEBUG] [Thread-116271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:58:13.737 [DEBUG] [Thread-116271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:58:13.737 [DEBUG] [Thread-116271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:58:13.746 [DEBUG] [Thread-116271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:58:13.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:58:13.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:58:13.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:58:13.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:58:13.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:58:13.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:58:13.781 [DEBUG] [Thread-116271] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:58:28.036 [DEBUG] [Thread-116274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:43.065 [DEBUG] [Thread-116275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:43.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:58:43.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:58:43.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:58:44.314 [DEBUG] [Thread-116276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:44.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 58, 13), 17.38, 30.92, 0.0, 14.84, 18.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:58:44.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:58:13
2025-12-03T11:58:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:58:44.750 [DEBUG] [Thread-116277] [transport.py] [_log()] starting thread (client mode): 0xa27c05b0
2025-12-03T11:58:44.750 [DEBUG] [Thread-116277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:58:44.769 [DEBUG] [Thread-116277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:58:44.769 [INFO] [Thread-116277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:58:44.772 [DEBUG] [Thread-116277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] client lang: <none>
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] server lang: <none>
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] kex follows: False
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:58:44.773 [DEBUG] [Thread-116277] [transport.py] [_log()] Compression: none
2025-12-03T11:58:44.774 [DEBUG] [Thread-116277] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:58:44.790 [DEBUG] [Thread-116277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:58:44.790 [DEBUG] [Thread-116277] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:58:44.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:58:44.791 [DEBUG] [Thread-116277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:58:44.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:58:44.793 [DEBUG] [Thread-116277] [transport.py] [_log()] userauth is OK
2025-12-03T11:58:44.793 [DEBUG] [Thread-116277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:58:44.793 [DEBUG] [Thread-116277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:58:44.793 [DEBUG] [Thread-116277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:58:44.793 [DEBUG] [Thread-116277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:58:44.828 [INFO] [Thread-116277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:58:44.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:58:45.488 [DEBUG] [Thread-116277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:58:45.488 [DEBUG] [Thread-116277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:58:45.488 [DEBUG] [Thread-116277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:58:45.529 [DEBUG] [Thread-116277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:58:45.529 [DEBUG] [Thread-116277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:58:45.532 [DEBUG] [Thread-116277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:58:45.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:58:45.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:58:45.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:58:45.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:58:45.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:58:45.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:58:45.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:58:45.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:58:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:58:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.415328 -999.00  +19.70  17.20     34   +3.60 1 1 1 1 1   888    0 18.70 115.32 ----- 12.4 17.2 175.8 21.9 27.6 -25.5 26.5 -26.3 26.7 -22.7 27.5 -24.3
2025-12-03T11:58:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:58:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:58:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.415328
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:58:45.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:58:13', tmtdew=17.38, humidity=30.92, cloud=0.0, wind=14.84, temperature=18.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:58:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:58:45.555 [DEBUG] [Thread-116277] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:58:45.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:58:45.651 [DEBUG] [Thread-116280] [transport.py] [_log()] starting thread (client mode): 0xa2786320
2025-12-03T11:58:45.651 [DEBUG] [Thread-116280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:58:45.666 [DEBUG] [Thread-116280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:58:45.666 [INFO] [Thread-116280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:58:45.673 [DEBUG] [Thread-116280] [transport.py] [_log()] client lang: <none>
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] server lang: <none>
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] kex follows: False
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] Compression: none
2025-12-03T11:58:45.674 [DEBUG] [Thread-116280] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:58:45.729 [DEBUG] [Thread-116280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:58:45.730 [DEBUG] [Thread-116280] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:58:45.730 [DEBUG] [Thread-116280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:58:45.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:58:45.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:58:45.786 [DEBUG] [Thread-116280] [transport.py] [_log()] userauth is OK
2025-12-03T11:58:45.787 [DEBUG] [Thread-116280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:58:45.787 [DEBUG] [Thread-116280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:58:45.787 [DEBUG] [Thread-116280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:58:45.787 [DEBUG] [Thread-116280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:58:45.806 [INFO] [Thread-116280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:58:45.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:58:45.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:58:46.711 [DEBUG] [Thread-116280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:58:46.711 [DEBUG] [Thread-116280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:58:46.759 [DEBUG] [Thread-116280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:58:46.759 [DEBUG] [Thread-116280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:58:46.767 [DEBUG] [Thread-116280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:58:46.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:58:46.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:58:46.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:58:46.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:58:46.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:58:46.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:58:46.800 [DEBUG] [Thread-116280] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:58:58.096 [DEBUG] [Thread-116282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:58.880 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:58:58.881 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:13.145 [DEBUG] [Thread-116283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:59:16.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:59:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:59:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 58, 45), 16.91, 32.18, 0.0, 18.46, 18.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:59:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:58:45
2025-12-03T11:59:17.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:59:17.832 [DEBUG] [Thread-116284] [transport.py] [_log()] starting thread (client mode): 0xa5198790
2025-12-03T11:59:17.832 [DEBUG] [Thread-116284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:59:17.852 [DEBUG] [Thread-116284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:59:17.852 [INFO] [Thread-116284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:59:17.855 [DEBUG] [Thread-116284] [transport.py] [_log()] client lang: <none>
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] server lang: <none>
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] kex follows: False
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] Compression: none
2025-12-03T11:59:17.856 [DEBUG] [Thread-116284] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:59:17.874 [DEBUG] [Thread-116284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:59:17.874 [DEBUG] [Thread-116284] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:59:17.874 [DEBUG] [Thread-116284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:59:17.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:59:17.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:59:17.875 [DEBUG] [Thread-116284] [transport.py] [_log()] userauth is OK
2025-12-03T11:59:17.875 [DEBUG] [Thread-116284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:59:17.875 [DEBUG] [Thread-116284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:59:17.875 [DEBUG] [Thread-116284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:59:17.875 [DEBUG] [Thread-116284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:59:17.888 [INFO] [Thread-116284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:59:17.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:59:18.539 [DEBUG] [Thread-116284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:59:18.539 [DEBUG] [Thread-116284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:59:18.539 [DEBUG] [Thread-116284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:59:18.582 [DEBUG] [Thread-116284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:59:18.582 [DEBUG] [Thread-116284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:59:18.584 [DEBUG] [Thread-116284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:59:18.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:59:18.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:59:18.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:59:18.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:59:18.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:59:18.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:59:18.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.415675 -999.00  +19.30  14.63     35   +3.50 1 1 1 1 1   888    0 18.10 102.26 ----- 18.6 14.6 155.7 18.9 27.4 -26.2 26.4 -23.7 26.6 -22.9 27.2 -27.0
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.415675
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T11:59:18.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:58:45', tmtdew=16.91, humidity=32.18, cloud=0.0, wind=18.46, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:58:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:59:18.602 [DEBUG] [Thread-116284] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:59:18.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:59:18.688 [DEBUG] [Thread-116287] [transport.py] [_log()] starting thread (client mode): 0xa2784fd0
2025-12-03T11:59:18.689 [DEBUG] [Thread-116287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:59:18.703 [DEBUG] [Thread-116287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:59:18.703 [INFO] [Thread-116287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:59:18.710 [DEBUG] [Thread-116287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:59:18.710 [DEBUG] [Thread-116287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:59:18.710 [DEBUG] [Thread-116287] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] client lang: <none>
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] server lang: <none>
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] kex follows: False
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] Compression: none
2025-12-03T11:59:18.711 [DEBUG] [Thread-116287] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:59:18.766 [DEBUG] [Thread-116287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:59:18.766 [DEBUG] [Thread-116287] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:59:18.766 [DEBUG] [Thread-116287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:59:18.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:59:18.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:59:18.822 [DEBUG] [Thread-116287] [transport.py] [_log()] userauth is OK
2025-12-03T11:59:18.823 [DEBUG] [Thread-116287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:59:18.823 [DEBUG] [Thread-116287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:59:18.823 [DEBUG] [Thread-116287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:59:18.823 [DEBUG] [Thread-116287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:59:18.839 [INFO] [Thread-116287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:59:18.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:59:18.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:59:19.667 [DEBUG] [Thread-116287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:59:19.667 [DEBUG] [Thread-116287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:59:19.715 [DEBUG] [Thread-116287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:59:19.715 [DEBUG] [Thread-116287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:59:19.724 [DEBUG] [Thread-116287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:59:19.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:59:19.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:59:19.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:59:19.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:59:19.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:59:19.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:59:19.756 [DEBUG] [Thread-116287] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:59:28.172 [DEBUG] [Thread-116289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:43.220 [DEBUG] [Thread-116290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:44.371 [DEBUG] [Thread-116291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:49.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T11:59:49.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T11:59:49.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T11:59:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 59, 17), 17.13, 31.67, 0.0, 17.68, 18.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T11:59:50.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:59:17
2025-12-03T11:59:50.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T11:59:50.774 [DEBUG] [Thread-116292] [transport.py] [_log()] starting thread (client mode): 0xa5198520
2025-12-03T11:59:50.774 [DEBUG] [Thread-116292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:59:50.795 [DEBUG] [Thread-116292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T11:59:50.795 [INFO] [Thread-116292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] client lang: <none>
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] server lang: <none>
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] kex follows: False
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:59:50.798 [DEBUG] [Thread-116292] [transport.py] [_log()] Compression: none
2025-12-03T11:59:50.799 [DEBUG] [Thread-116292] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:59:50.816 [DEBUG] [Thread-116292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:59:50.816 [DEBUG] [Thread-116292] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:59:50.816 [DEBUG] [Thread-116292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T11:59:50.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T11:59:50.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:59:50.817 [DEBUG] [Thread-116292] [transport.py] [_log()] userauth is OK
2025-12-03T11:59:50.817 [DEBUG] [Thread-116292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:59:50.817 [DEBUG] [Thread-116292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:59:50.817 [DEBUG] [Thread-116292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T11:59:50.817 [DEBUG] [Thread-116292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:59:50.833 [INFO] [Thread-116292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:59:50.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:59:51.469 [DEBUG] [Thread-116292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:59:51.469 [DEBUG] [Thread-116292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:59:51.469 [DEBUG] [Thread-116292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T11:59:51.511 [DEBUG] [Thread-116292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:59:51.511 [DEBUG] [Thread-116292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:59:51.513 [DEBUG] [Thread-116292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:59:51.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:59:51.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T11:59:51.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T11:59:51.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T11:59:51.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:59:51.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T11:59:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.416022 -999.00  +19.00   8.91     35   +3.50 1 2 1 1 1   888    0 17.86 97.02 ----- 11.0 8.9 159.1 20.2 27.4 -25.4 26.5 -23.8 26.6 -21.8 27.4 -24.1
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.416022
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T11:59:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:59:17', tmtdew=17.13, humidity=31.67, cloud=0.0, wind=17.68, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:59:04.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T11:59:51.532 [DEBUG] [Thread-116292] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:59:51.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T11:59:51.615 [DEBUG] [Thread-116295] [transport.py] [_log()] starting thread (client mode): 0xa519a620
2025-12-03T11:59:51.616 [DEBUG] [Thread-116295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T11:59:51.630 [DEBUG] [Thread-116295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T11:59:51.630 [INFO] [Thread-116295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] client lang: <none>
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] server lang: <none>
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] kex follows: False
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] Compression: none
2025-12-03T11:59:51.638 [DEBUG] [Thread-116295] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T11:59:51.694 [DEBUG] [Thread-116295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T11:59:51.694 [DEBUG] [Thread-116295] [transport.py] [_log()] Switch to new keys ...
2025-12-03T11:59:51.694 [DEBUG] [Thread-116295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T11:59:51.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T11:59:51.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T11:59:51.751 [DEBUG] [Thread-116295] [transport.py] [_log()] userauth is OK
2025-12-03T11:59:51.751 [DEBUG] [Thread-116295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T11:59:51.751 [DEBUG] [Thread-116295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T11:59:51.751 [DEBUG] [Thread-116295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T11:59:51.751 [DEBUG] [Thread-116295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T11:59:51.765 [INFO] [Thread-116295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T11:59:51.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T11:59:51.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T11:59:52.617 [DEBUG] [Thread-116295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T11:59:52.617 [DEBUG] [Thread-116295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T11:59:52.664 [DEBUG] [Thread-116295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T11:59:52.664 [DEBUG] [Thread-116295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T11:59:52.673 [DEBUG] [Thread-116295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T11:59:52.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T11:59:52.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T11:59:52.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T11:59:52.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T11:59:52.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T11:59:52.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T11:59:52.704 [DEBUG] [Thread-116295] [transport.py] [_log()] EOF in transport thread
2025-12-03T11:59:58.248 [DEBUG] [Thread-116297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:59.029 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T11:59:59.030 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:13.288 [DEBUG] [Thread-116298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:00:22.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:00:22.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:00:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 11, 59, 49), 16.98, 32.2, 0.0, 15.92, 18.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:00:23.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 11:59:49
2025-12-03T12:00:23.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:00:23.737 [DEBUG] [Thread-116299] [transport.py] [_log()] starting thread (client mode): 0xa5199ab0
2025-12-03T12:00:23.737 [DEBUG] [Thread-116299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:00:23.757 [DEBUG] [Thread-116299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:00:23.757 [INFO] [Thread-116299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] client lang: <none>
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] server lang: <none>
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] kex follows: False
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] Compression: none
2025-12-03T12:00:23.759 [DEBUG] [Thread-116299] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:00:23.771 [DEBUG] [Thread-116299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:00:23.771 [DEBUG] [Thread-116299] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:00:23.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:00:23.772 [DEBUG] [Thread-116299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:00:23.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:00:23.773 [DEBUG] [Thread-116299] [transport.py] [_log()] userauth is OK
2025-12-03T12:00:23.773 [DEBUG] [Thread-116299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:00:23.773 [DEBUG] [Thread-116299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:00:23.773 [DEBUG] [Thread-116299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:00:23.773 [DEBUG] [Thread-116299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:00:23.792 [INFO] [Thread-116299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:00:23.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:00:24.454 [DEBUG] [Thread-116299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:00:24.454 [DEBUG] [Thread-116299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:00:24.455 [DEBUG] [Thread-116299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:00:24.495 [DEBUG] [Thread-116299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:00:24.495 [DEBUG] [Thread-116299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:00:24.497 [DEBUG] [Thread-116299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:00:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:00:24.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:00:24.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:00:24.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:00:24.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:00:24.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:00:24.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:00:24.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.416370 -999.00  +18.90   7.54     36   +3.60 1 1 1 1 1   888    0 17.87 95.71 ----- 14.8 7.5 137.0 21.6 27.3 -25.4 26.5 -24.3 26.4 -22.9 27.4 -25.2
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.416370
2025-12-03T12:00:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:00:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:00:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:00:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:00:24.521 [DEBUG] [Thread-116299] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:00:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:00:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T11:59:49', tmtdew=16.98, humidity=32.2, cloud=0.0, wind=15.92, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T09:59:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:00:24.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:00:24.608 [DEBUG] [Thread-116302] [transport.py] [_log()] starting thread (client mode): 0xa5199540
2025-12-03T12:00:24.608 [DEBUG] [Thread-116302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:00:24.627 [DEBUG] [Thread-116302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:00:24.627 [INFO] [Thread-116302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] client lang: <none>
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] server lang: <none>
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] kex follows: False
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:00:24.635 [DEBUG] [Thread-116302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:00:24.636 [DEBUG] [Thread-116302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:00:24.636 [DEBUG] [Thread-116302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:00:24.636 [DEBUG] [Thread-116302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:00:24.636 [DEBUG] [Thread-116302] [transport.py] [_log()] Compression: none
2025-12-03T12:00:24.636 [DEBUG] [Thread-116302] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:00:24.694 [DEBUG] [Thread-116302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:00:24.694 [DEBUG] [Thread-116302] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:00:24.695 [DEBUG] [Thread-116302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:00:24.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:00:24.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:00:24.750 [DEBUG] [Thread-116302] [transport.py] [_log()] userauth is OK
2025-12-03T12:00:24.751 [DEBUG] [Thread-116302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:00:24.751 [DEBUG] [Thread-116302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:00:24.751 [DEBUG] [Thread-116302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:00:24.751 [DEBUG] [Thread-116302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:00:24.770 [INFO] [Thread-116302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:00:24.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:00:24.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:00:25.630 [DEBUG] [Thread-116302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:00:25.630 [DEBUG] [Thread-116302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:00:25.679 [DEBUG] [Thread-116302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:00:25.679 [DEBUG] [Thread-116302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:00:25.687 [DEBUG] [Thread-116302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:00:25.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:00:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:00:25.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:00:25.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:00:25.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:00:25.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:00:25.722 [DEBUG] [Thread-116302] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:00:28.318 [DEBUG] [Thread-116304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:43.360 [DEBUG] [Thread-116305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:44.415 [DEBUG] [Thread-116306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:55.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:00:55.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:00:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:00:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 0, 21), 17.29, 31.54, 0.0, 15.53, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:00:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:00:21
2025-12-03T12:00:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:00:56.730 [DEBUG] [Thread-116307] [transport.py] [_log()] starting thread (client mode): 0xa2787670
2025-12-03T12:00:56.730 [DEBUG] [Thread-116307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:00:56.750 [DEBUG] [Thread-116307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:00:56.750 [INFO] [Thread-116307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:00:56.753 [DEBUG] [Thread-116307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] client lang: <none>
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] server lang: <none>
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] kex follows: False
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] Compression: none
2025-12-03T12:00:56.754 [DEBUG] [Thread-116307] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:00:56.770 [DEBUG] [Thread-116307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:00:56.771 [DEBUG] [Thread-116307] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:00:56.771 [DEBUG] [Thread-116307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:00:56.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:00:56.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:00:56.773 [DEBUG] [Thread-116307] [transport.py] [_log()] userauth is OK
2025-12-03T12:00:56.773 [DEBUG] [Thread-116307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:00:56.773 [DEBUG] [Thread-116307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:00:56.773 [DEBUG] [Thread-116307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:00:56.773 [DEBUG] [Thread-116307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:00:56.808 [INFO] [Thread-116307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:00:56.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:00:57.449 [DEBUG] [Thread-116307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:00:57.450 [DEBUG] [Thread-116307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:00:57.450 [DEBUG] [Thread-116307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:00:57.491 [DEBUG] [Thread-116307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:00:57.491 [DEBUG] [Thread-116307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:00:57.494 [DEBUG] [Thread-116307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:00:57.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:00:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:00:57.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:00:57.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:00:57.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:00:57.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:00:57.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.417064 -999.00  +18.80  12.85     35   +3.30 1 1 1 1 1   888    0 17.63 89.96 ----- 12.7 12.8 168.2 18.0 27.2 -25.2 26.4 -24.3 26.4 -23.0 27.3 -24.4
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:00:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.417064
2025-12-03T12:00:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:00:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:00:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:00:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:00:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:00:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:00:21', tmtdew=17.29, humidity=31.54, cloud=0.0, wind=15.53, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:00:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:00:57.519 [DEBUG] [Thread-116307] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:00:57.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:00:57.614 [DEBUG] [Thread-116310] [transport.py] [_log()] starting thread (client mode): 0xa2785ed0
2025-12-03T12:00:57.614 [DEBUG] [Thread-116310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:00:57.629 [DEBUG] [Thread-116310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:00:57.629 [INFO] [Thread-116310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] client lang: <none>
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] server lang: <none>
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] kex follows: False
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:00:57.636 [DEBUG] [Thread-116310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:00:57.637 [DEBUG] [Thread-116310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:00:57.637 [DEBUG] [Thread-116310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:00:57.637 [DEBUG] [Thread-116310] [transport.py] [_log()] Compression: none
2025-12-03T12:00:57.637 [DEBUG] [Thread-116310] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:00:57.694 [DEBUG] [Thread-116310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:00:57.694 [DEBUG] [Thread-116310] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:00:57.695 [DEBUG] [Thread-116310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:00:57.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:00:57.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:00:57.750 [DEBUG] [Thread-116310] [transport.py] [_log()] userauth is OK
2025-12-03T12:00:57.750 [DEBUG] [Thread-116310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:00:57.750 [DEBUG] [Thread-116310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:00:57.750 [DEBUG] [Thread-116310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:00:57.750 [DEBUG] [Thread-116310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:00:57.769 [INFO] [Thread-116310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:00:57.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:00:57.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:00:58.391 [DEBUG] [Thread-116312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:58.620 [DEBUG] [Thread-116310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:00:58.620 [DEBUG] [Thread-116310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:00:58.668 [DEBUG] [Thread-116310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:00:58.668 [DEBUG] [Thread-116310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:00:58.677 [DEBUG] [Thread-116310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:00:58.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:00:58.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:00:58.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:00:58.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:00:58.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:00:58.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:00:58.720 [DEBUG] [Thread-116310] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:00:59.176 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:00:59.177 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:13.435 [DEBUG] [Thread-116313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:28.462 [DEBUG] [Thread-116314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:28.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:01:28.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:01:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:01:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 1, 26), 17.25, 31.44, 0.0, 14.24, 18.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:01:29.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:01:26
2025-12-03T12:01:29.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:01:29.706 [DEBUG] [Thread-116315] [transport.py] [_log()] starting thread (client mode): 0xa51994b0
2025-12-03T12:01:29.706 [DEBUG] [Thread-116315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:01:29.725 [DEBUG] [Thread-116315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:01:29.726 [INFO] [Thread-116315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] client lang: <none>
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] server lang: <none>
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] kex follows: False
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:01:29.729 [DEBUG] [Thread-116315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:01:29.730 [DEBUG] [Thread-116315] [transport.py] [_log()] Compression: none
2025-12-03T12:01:29.730 [DEBUG] [Thread-116315] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:01:29.747 [DEBUG] [Thread-116315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:01:29.747 [DEBUG] [Thread-116315] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:01:29.748 [DEBUG] [Thread-116315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:01:29.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:01:29.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:01:29.750 [DEBUG] [Thread-116315] [transport.py] [_log()] userauth is OK
2025-12-03T12:01:29.750 [DEBUG] [Thread-116315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:01:29.750 [DEBUG] [Thread-116315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:01:29.750 [DEBUG] [Thread-116315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:01:29.750 [DEBUG] [Thread-116315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:01:29.767 [INFO] [Thread-116315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:01:29.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:01:30.407 [DEBUG] [Thread-116315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:01:30.407 [DEBUG] [Thread-116315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:01:30.408 [DEBUG] [Thread-116315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:01:30.448 [DEBUG] [Thread-116315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:01:30.448 [DEBUG] [Thread-116315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:01:30.451 [DEBUG] [Thread-116315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:01:30.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:01:30.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:01:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:01:30.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:01:30.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:01:30.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:01:30.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.417411 -999.00  +19.10  11.89     35   +3.60 1 1 1 1 1   888    0 17.81 89.67 ----- 17.4 11.9 159.4 15.6 27.2 -25.5 26.4 -23.8 26.5 -22.7 27.2 -24.0
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:01:30.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.417411
2025-12-03T12:01:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:01:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:01:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:01:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:01:30.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:01:30.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:01:26', tmtdew=17.25, humidity=31.44, cloud=0.0, wind=14.24, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:01:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:01:30.475 [DEBUG] [Thread-116315] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:01:30.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:01:30.570 [DEBUG] [Thread-116318] [transport.py] [_log()] starting thread (client mode): 0xa5199930
2025-12-03T12:01:30.570 [DEBUG] [Thread-116318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:01:30.585 [DEBUG] [Thread-116318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:01:30.585 [INFO] [Thread-116318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:01:30.593 [DEBUG] [Thread-116318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] client lang: <none>
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] server lang: <none>
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] kex follows: False
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] Compression: none
2025-12-03T12:01:30.594 [DEBUG] [Thread-116318] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:01:30.650 [DEBUG] [Thread-116318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:01:30.650 [DEBUG] [Thread-116318] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:01:30.651 [DEBUG] [Thread-116318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:01:30.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:01:30.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:01:30.706 [DEBUG] [Thread-116318] [transport.py] [_log()] userauth is OK
2025-12-03T12:01:30.706 [DEBUG] [Thread-116318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:01:30.706 [DEBUG] [Thread-116318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:01:30.706 [DEBUG] [Thread-116318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:01:30.707 [DEBUG] [Thread-116318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:01:30.725 [INFO] [Thread-116318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:01:30.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:01:30.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:01:31.598 [DEBUG] [Thread-116318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:01:31.599 [DEBUG] [Thread-116318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:01:31.647 [DEBUG] [Thread-116318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:01:31.647 [DEBUG] [Thread-116318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:01:31.656 [DEBUG] [Thread-116318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:01:31.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:01:31.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:01:31.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:01:31.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:01:31.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:01:31.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:01:31.691 [DEBUG] [Thread-116318] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:01:43.492 [DEBUG] [Thread-116320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:44.455 [DEBUG] [Thread-116321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:58.542 [DEBUG] [Thread-116322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:59.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:01:59.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:01.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:02:01.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:02:01.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:02:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 1, 58), 17.04, 32.07, 0.0, 15.47, 18.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:02:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:01:58
2025-12-03T12:02:02.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:02:02.648 [DEBUG] [Thread-116323] [transport.py] [_log()] starting thread (client mode): 0xa519b7c0
2025-12-03T12:02:02.649 [DEBUG] [Thread-116323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:02:02.668 [DEBUG] [Thread-116323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:02:02.668 [INFO] [Thread-116323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] client lang: <none>
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] server lang: <none>
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] kex follows: False
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:02:02.672 [DEBUG] [Thread-116323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:02:02.673 [DEBUG] [Thread-116323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:02:02.673 [DEBUG] [Thread-116323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:02:02.673 [DEBUG] [Thread-116323] [transport.py] [_log()] Compression: none
2025-12-03T12:02:02.673 [DEBUG] [Thread-116323] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:02:02.689 [DEBUG] [Thread-116323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:02:02.689 [DEBUG] [Thread-116323] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:02:02.690 [DEBUG] [Thread-116323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:02:02.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:02:02.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:02:02.692 [DEBUG] [Thread-116323] [transport.py] [_log()] userauth is OK
2025-12-03T12:02:02.692 [DEBUG] [Thread-116323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:02:02.692 [DEBUG] [Thread-116323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:02:02.692 [DEBUG] [Thread-116323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:02:02.692 [DEBUG] [Thread-116323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:02:02.726 [INFO] [Thread-116323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:02:02.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:02:03.396 [DEBUG] [Thread-116323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:02:03.396 [DEBUG] [Thread-116323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:02:03.396 [DEBUG] [Thread-116323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:02:03.437 [DEBUG] [Thread-116323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:02:03.437 [DEBUG] [Thread-116323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:02:03.440 [DEBUG] [Thread-116323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:02:03.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:02:03.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:02:03.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:02:03.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:02:03.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:02:03.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:02:03.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:02:03.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.417759 -999.00  +18.80  13.56     36   +3.60 1 1 1 1 1   888    0 17.87 89.66 ----- 13.5 13.6 179.8 22.2 26.9 -25.3 25.9 -28.0 26.3 -23.1 27.1 -25.6
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.417759
2025-12-03T12:02:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:02:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:02:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:02:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:02:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:02:03.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:01:58', tmtdew=17.04, humidity=32.07, cloud=0.0, wind=15.47, temperature=18.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:01:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:02:03.468 [DEBUG] [Thread-116323] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:02:03.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:02:03.564 [DEBUG] [Thread-116326] [transport.py] [_log()] starting thread (client mode): 0xa27c26b0
2025-12-03T12:02:03.564 [DEBUG] [Thread-116326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:02:03.579 [DEBUG] [Thread-116326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:02:03.579 [INFO] [Thread-116326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:02:03.587 [DEBUG] [Thread-116326] [transport.py] [_log()] client lang: <none>
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] server lang: <none>
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] kex follows: False
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] Compression: none
2025-12-03T12:02:03.588 [DEBUG] [Thread-116326] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:02:03.643 [DEBUG] [Thread-116326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:02:03.643 [DEBUG] [Thread-116326] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:02:03.644 [DEBUG] [Thread-116326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:02:03.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:02:03.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:02:03.699 [DEBUG] [Thread-116326] [transport.py] [_log()] userauth is OK
2025-12-03T12:02:03.700 [DEBUG] [Thread-116326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:02:03.700 [DEBUG] [Thread-116326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:02:03.700 [DEBUG] [Thread-116326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:02:03.700 [DEBUG] [Thread-116326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:02:03.719 [INFO] [Thread-116326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:02:03.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:02:03.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:02:04.583 [DEBUG] [Thread-116326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:02:04.583 [DEBUG] [Thread-116326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:02:04.631 [DEBUG] [Thread-116326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:02:04.631 [DEBUG] [Thread-116326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:02:04.640 [DEBUG] [Thread-116326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:02:04.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:02:04.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:02:04.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:02:04.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:02:04.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:02:04.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:02:04.674 [DEBUG] [Thread-116326] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:02:13.571 [DEBUG] [Thread-116328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:28.616 [DEBUG] [Thread-116329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:02:34.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:02:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:02:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 2, 30), 17.07, 32.0, 0.0, 12.83, 18.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:02:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:02:30
2025-12-03T12:02:35.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:02:35.651 [DEBUG] [Thread-116330] [transport.py] [_log()] starting thread (client mode): 0xa27c1e10
2025-12-03T12:02:35.651 [DEBUG] [Thread-116330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:02:35.665 [DEBUG] [Thread-116330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:02:35.665 [INFO] [Thread-116330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] client lang: <none>
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] server lang: <none>
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] kex follows: False
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] Compression: none
2025-12-03T12:02:35.667 [DEBUG] [Thread-116330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:02:35.683 [DEBUG] [Thread-116330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:02:35.684 [DEBUG] [Thread-116330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:02:35.684 [DEBUG] [Thread-116330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:02:35.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:02:35.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:02:35.686 [DEBUG] [Thread-116330] [transport.py] [_log()] userauth is OK
2025-12-03T12:02:35.686 [DEBUG] [Thread-116330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:02:35.686 [DEBUG] [Thread-116330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:02:35.686 [DEBUG] [Thread-116330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:02:35.686 [DEBUG] [Thread-116330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:02:35.701 [INFO] [Thread-116330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:02:35.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:02:36.307 [DEBUG] [Thread-116330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:02:36.307 [DEBUG] [Thread-116330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:02:36.308 [DEBUG] [Thread-116330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:02:36.349 [DEBUG] [Thread-116330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:02:36.349 [DEBUG] [Thread-116330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:02:36.352 [DEBUG] [Thread-116330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:02:36.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:02:36.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:02:36.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:02:36.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:02:36.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:02:36.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:02:36.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.418106 -999.00  +18.60  11.11     37   +3.80 1 1 1 1 1   888    0 17.74 81.27 ----- 10.3 11.1 178.0 20.2 26.9 -25.4 25.7 -28.0 26.2 -22.3 27.1 -24.9
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:02:36.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.418106
2025-12-03T12:02:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:02:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:02:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:02:36.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:02:36.379 [DEBUG] [Thread-116330] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:02:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:02:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:02:30', tmtdew=17.07, humidity=32.0, cloud=0.0, wind=12.83, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:02:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:02:36.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:02:36.475 [DEBUG] [Thread-116333] [transport.py] [_log()] starting thread (client mode): 0xa5198a00
2025-12-03T12:02:36.475 [DEBUG] [Thread-116333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:02:36.491 [DEBUG] [Thread-116333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:02:36.491 [INFO] [Thread-116333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] client lang: <none>
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] server lang: <none>
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] kex follows: False
2025-12-03T12:02:36.499 [DEBUG] [Thread-116333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] Compression: none
2025-12-03T12:02:36.500 [DEBUG] [Thread-116333] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:02:36.558 [DEBUG] [Thread-116333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:02:36.558 [DEBUG] [Thread-116333] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:02:36.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:02:36.559 [DEBUG] [Thread-116333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:02:36.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:02:36.614 [DEBUG] [Thread-116333] [transport.py] [_log()] userauth is OK
2025-12-03T12:02:36.614 [DEBUG] [Thread-116333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:02:36.614 [DEBUG] [Thread-116333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:02:36.614 [DEBUG] [Thread-116333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:02:36.614 [DEBUG] [Thread-116333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:02:36.634 [INFO] [Thread-116333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:02:36.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:02:36.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:02:37.460 [DEBUG] [Thread-116333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:02:37.460 [DEBUG] [Thread-116333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:02:37.508 [DEBUG] [Thread-116333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:02:37.508 [DEBUG] [Thread-116333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:02:37.517 [DEBUG] [Thread-116333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:02:37.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:02:37.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:02:37.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:02:37.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:02:37.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:02:37.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:02:37.551 [DEBUG] [Thread-116333] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:02:43.642 [DEBUG] [Thread-116335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:44.504 [DEBUG] [Thread-116336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:58.680 [DEBUG] [Thread-116337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:59.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:02:59.465 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:07.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:03:07.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:03:07.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:03:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 3, 2), 17.22, 31.69, 0.0, 17.29, 18.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:03:08.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:03:02
2025-12-03T12:03:08.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:03:08.561 [DEBUG] [Thread-116338] [transport.py] [_log()] starting thread (client mode): 0xa27b5600
2025-12-03T12:03:08.561 [DEBUG] [Thread-116338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:03:08.581 [DEBUG] [Thread-116338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:03:08.581 [INFO] [Thread-116338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:03:08.582 [DEBUG] [Thread-116338] [transport.py] [_log()] client lang: <none>
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] server lang: <none>
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] kex follows: False
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] Compression: none
2025-12-03T12:03:08.583 [DEBUG] [Thread-116338] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:03:08.590 [DEBUG] [Thread-116338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:03:08.590 [DEBUG] [Thread-116338] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:03:08.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:03:08.591 [DEBUG] [Thread-116338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:03:08.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:03:08.591 [DEBUG] [Thread-116338] [transport.py] [_log()] userauth is OK
2025-12-03T12:03:08.592 [DEBUG] [Thread-116338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:03:08.592 [DEBUG] [Thread-116338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:03:08.592 [DEBUG] [Thread-116338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:03:08.592 [DEBUG] [Thread-116338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:03:08.609 [INFO] [Thread-116338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:03:08.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:03:09.171 [DEBUG] [Thread-116338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:03:09.171 [DEBUG] [Thread-116338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:03:09.171 [DEBUG] [Thread-116338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:03:09.212 [DEBUG] [Thread-116338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:03:09.212 [DEBUG] [Thread-116338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:03:09.214 [DEBUG] [Thread-116338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:03:09.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:03:09.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:03:09.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:03:09.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:03:09.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:03:09.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:03:09.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.418453 -999.00  +18.60  13.62     37   +3.80 1 1 1 1 1   888    0 17.43 79.55 ----- 15.4 13.6 181.0 17.5 26.7 -25.1 25.6 -26.8 26.1 -23.3 26.9 -24.0
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.418453
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:03:09.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:03:02', tmtdew=17.22, humidity=31.69, cloud=0.0, wind=17.29, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:02:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:03:09.233 [DEBUG] [Thread-116338] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:03:09.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:03:09.319 [DEBUG] [Thread-116341] [transport.py] [_log()] starting thread (client mode): 0xa27b7760
2025-12-03T12:03:09.319 [DEBUG] [Thread-116341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:03:09.334 [DEBUG] [Thread-116341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:03:09.334 [INFO] [Thread-116341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:09.341 [DEBUG] [Thread-116341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] client lang: <none>
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] server lang: <none>
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] kex follows: False
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] Compression: none
2025-12-03T12:03:09.342 [DEBUG] [Thread-116341] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:03:09.398 [DEBUG] [Thread-116341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:03:09.398 [DEBUG] [Thread-116341] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:03:09.398 [DEBUG] [Thread-116341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:03:09.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:03:09.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:03:09.456 [DEBUG] [Thread-116341] [transport.py] [_log()] userauth is OK
2025-12-03T12:03:09.456 [DEBUG] [Thread-116341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:03:09.456 [DEBUG] [Thread-116341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:03:09.456 [DEBUG] [Thread-116341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:03:09.456 [DEBUG] [Thread-116341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:03:09.469 [INFO] [Thread-116341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:03:09.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:03:09.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:03:10.357 [DEBUG] [Thread-116341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:03:10.357 [DEBUG] [Thread-116341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:03:10.404 [DEBUG] [Thread-116341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:03:10.404 [DEBUG] [Thread-116341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:03:10.412 [DEBUG] [Thread-116341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:03:10.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:03:10.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:03:10.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:03:10.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:03:10.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:03:10.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:03:10.446 [DEBUG] [Thread-116341] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:03:13.713 [DEBUG] [Thread-116343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:28.755 [DEBUG] [Thread-116344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:40.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:03:40.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:03:40.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:03:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 3, 34), 17.01, 31.8, 0.0, 12.53, 17.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:03:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:03:34
2025-12-03T12:03:41.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:03:41.426 [DEBUG] [Thread-116345] [transport.py] [_log()] starting thread (client mode): 0xa5198be0
2025-12-03T12:03:41.426 [DEBUG] [Thread-116345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:03:41.445 [DEBUG] [Thread-116345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:03:41.445 [INFO] [Thread-116345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:03:41.446 [DEBUG] [Thread-116345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] client lang: <none>
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] server lang: <none>
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] kex follows: False
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] Compression: none
2025-12-03T12:03:41.447 [DEBUG] [Thread-116345] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:03:41.459 [DEBUG] [Thread-116345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:03:41.460 [DEBUG] [Thread-116345] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:03:41.460 [DEBUG] [Thread-116345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:03:41.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:03:41.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:03:41.462 [DEBUG] [Thread-116345] [transport.py] [_log()] userauth is OK
2025-12-03T12:03:41.462 [DEBUG] [Thread-116345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:03:41.462 [DEBUG] [Thread-116345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:03:41.462 [DEBUG] [Thread-116345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:03:41.462 [DEBUG] [Thread-116345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:03:41.480 [INFO] [Thread-116345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:03:41.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:03:42.071 [DEBUG] [Thread-116345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:03:42.071 [DEBUG] [Thread-116345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:03:42.072 [DEBUG] [Thread-116345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:03:42.113 [DEBUG] [Thread-116345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:03:42.113 [DEBUG] [Thread-116345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:03:42.115 [DEBUG] [Thread-116345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:03:42.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:03:42.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:03:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:03:42.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:03:42.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:03:42.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:03:42.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.419147 -999.00  +18.70   8.48     35   +3.20 1 2 1 1 1   888    0 16.91 62.58 ----- 6.4 8.5 158.8 14.0 26.6 -23.2 25.8 -22.4 26.0 -21.6 26.6 -23.1
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:03:42.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.419147
2025-12-03T12:03:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:03:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:03:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:03:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:03:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:03:42.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:03:34', tmtdew=17.01, humidity=31.8, cloud=0.0, wind=12.53, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:03:34.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:03:42.137 [DEBUG] [Thread-116345] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:03:42.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:03:42.233 [DEBUG] [Thread-116348] [transport.py] [_log()] starting thread (client mode): 0xa27c0ee0
2025-12-03T12:03:42.233 [DEBUG] [Thread-116348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:03:42.248 [DEBUG] [Thread-116348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:03:42.248 [INFO] [Thread-116348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:03:42.256 [DEBUG] [Thread-116348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:03:42.256 [DEBUG] [Thread-116348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] client lang: <none>
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] server lang: <none>
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] kex follows: False
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] Compression: none
2025-12-03T12:03:42.257 [DEBUG] [Thread-116348] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:03:42.314 [DEBUG] [Thread-116348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:03:42.315 [DEBUG] [Thread-116348] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:03:42.315 [DEBUG] [Thread-116348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:03:42.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:03:42.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:03:42.371 [DEBUG] [Thread-116348] [transport.py] [_log()] userauth is OK
2025-12-03T12:03:42.371 [DEBUG] [Thread-116348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:03:42.371 [DEBUG] [Thread-116348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:03:42.371 [DEBUG] [Thread-116348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:03:42.371 [DEBUG] [Thread-116348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:03:42.389 [INFO] [Thread-116348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:03:42.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:03:42.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:03:43.227 [DEBUG] [Thread-116348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:03:43.227 [DEBUG] [Thread-116348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:03:43.275 [DEBUG] [Thread-116348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:03:43.275 [DEBUG] [Thread-116348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:03:43.284 [DEBUG] [Thread-116348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:03:43.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:03:43.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:03:43.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:03:43.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:03:43.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:03:43.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:03:43.319 [DEBUG] [Thread-116348] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:03:43.785 [DEBUG] [Thread-116350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:44.548 [DEBUG] [Thread-116351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:58.827 [DEBUG] [Thread-116352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:59.605 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:03:59.606 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:13.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:04:13.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:04:13.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:04:13.854 [DEBUG] [Thread-116353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:14.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 4, 6), 16.76, 32.28, 0.0, 11.75, 17.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:04:14.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:04:06
2025-12-03T12:04:14.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:04:14.292 [DEBUG] [Thread-116354] [transport.py] [_log()] starting thread (client mode): 0xa2786bf0
2025-12-03T12:04:14.292 [DEBUG] [Thread-116354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:04:14.311 [DEBUG] [Thread-116354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:04:14.312 [INFO] [Thread-116354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] client lang: <none>
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] server lang: <none>
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] kex follows: False
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] Compression: none
2025-12-03T12:04:14.315 [DEBUG] [Thread-116354] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:04:14.332 [DEBUG] [Thread-116354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:04:14.333 [DEBUG] [Thread-116354] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:04:14.333 [DEBUG] [Thread-116354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:04:14.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:04:14.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:04:14.336 [DEBUG] [Thread-116354] [transport.py] [_log()] userauth is OK
2025-12-03T12:04:14.336 [DEBUG] [Thread-116354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:04:14.337 [DEBUG] [Thread-116354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:04:14.337 [DEBUG] [Thread-116354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:04:14.337 [DEBUG] [Thread-116354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:04:14.359 [INFO] [Thread-116354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:04:14.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:04:14.942 [DEBUG] [Thread-116354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:04:14.942 [DEBUG] [Thread-116354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:04:14.942 [DEBUG] [Thread-116354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:04:14.983 [DEBUG] [Thread-116354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:04:14.983 [DEBUG] [Thread-116354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:04:14.986 [DEBUG] [Thread-116354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:04:14.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:04:15.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:04:15.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:04:15.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:04:15.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:04:15.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:04:15.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:04:15.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:04:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:04:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.419495 -999.00  +18.80   6.24     36   +3.60 1 2 1 1 1   888    0 17.13 61.67 ----- 10.5 6.2 141.6 8.6 26.9 -21.7 26.1 -21.9 26.3 -19.7 26.9 -21.6
2025-12-03T12:04:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:04:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:04:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.419495
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:04:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:04:06', tmtdew=16.76, humidity=32.28, cloud=0.0, wind=11.75, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:04:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:04:15.013 [DEBUG] [Thread-116354] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:04:15.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:04:15.109 [DEBUG] [Thread-116357] [transport.py] [_log()] starting thread (client mode): 0xa519aaa0
2025-12-03T12:04:15.109 [DEBUG] [Thread-116357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:04:15.123 [DEBUG] [Thread-116357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:04:15.123 [INFO] [Thread-116357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] client lang: <none>
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] server lang: <none>
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] kex follows: False
2025-12-03T12:04:15.131 [DEBUG] [Thread-116357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] Compression: none
2025-12-03T12:04:15.132 [DEBUG] [Thread-116357] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:04:15.190 [DEBUG] [Thread-116357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:04:15.191 [DEBUG] [Thread-116357] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:04:15.191 [DEBUG] [Thread-116357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:04:15.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:04:15.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:04:15.247 [DEBUG] [Thread-116357] [transport.py] [_log()] userauth is OK
2025-12-03T12:04:15.247 [DEBUG] [Thread-116357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:04:15.247 [DEBUG] [Thread-116357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:04:15.247 [DEBUG] [Thread-116357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:04:15.247 [DEBUG] [Thread-116357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:04:15.266 [INFO] [Thread-116357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:04:15.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:04:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:04:16.116 [DEBUG] [Thread-116357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:04:16.116 [DEBUG] [Thread-116357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:04:16.166 [DEBUG] [Thread-116357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:04:16.166 [DEBUG] [Thread-116357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:04:16.175 [DEBUG] [Thread-116357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:04:16.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:04:16.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:04:16.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:04:16.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:04:16.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:04:16.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:04:16.210 [DEBUG] [Thread-116357] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:04:28.878 [DEBUG] [Thread-116359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:43.915 [DEBUG] [Thread-116360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:44.594 [DEBUG] [Thread-116361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:46.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:04:46.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:04:46.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:04:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 4, 38), 16.48, 32.85, 0.0, 12.3, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:04:46.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:04:38
2025-12-03T12:04:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:04:47.202 [DEBUG] [Thread-116362] [transport.py] [_log()] starting thread (client mode): 0xa5161f60
2025-12-03T12:04:47.202 [DEBUG] [Thread-116362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:04:47.222 [DEBUG] [Thread-116362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:04:47.222 [INFO] [Thread-116362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:04:47.225 [DEBUG] [Thread-116362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:04:47.225 [DEBUG] [Thread-116362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:04:47.225 [DEBUG] [Thread-116362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:04:47.225 [DEBUG] [Thread-116362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] client lang: <none>
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] server lang: <none>
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] kex follows: False
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] Compression: none
2025-12-03T12:04:47.226 [DEBUG] [Thread-116362] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:04:47.243 [DEBUG] [Thread-116362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:04:47.243 [DEBUG] [Thread-116362] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:04:47.244 [DEBUG] [Thread-116362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:04:47.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:04:47.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:04:47.246 [DEBUG] [Thread-116362] [transport.py] [_log()] userauth is OK
2025-12-03T12:04:47.246 [DEBUG] [Thread-116362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:04:47.246 [DEBUG] [Thread-116362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:04:47.246 [DEBUG] [Thread-116362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:04:47.246 [DEBUG] [Thread-116362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:04:47.267 [INFO] [Thread-116362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:04:47.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:04:47.825 [DEBUG] [Thread-116362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:04:47.826 [DEBUG] [Thread-116362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:04:47.826 [DEBUG] [Thread-116362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:04:47.867 [DEBUG] [Thread-116362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:04:47.867 [DEBUG] [Thread-116362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:04:47.870 [DEBUG] [Thread-116362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:04:47.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:04:47.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:04:47.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:04:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:04:47.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:04:47.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:04:47.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:04:47.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.419495 -999.00  +18.80   6.24     36   +3.60 1 2 1 1 1   888    0 17.13 61.67 ----- 10.5 6.2 141.6 8.6 26.9 -21.7 26.1 -21.9 26.3 -19.7 26.9 -21.6
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.419495
2025-12-03T12:04:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:04:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:04:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:04:47.885 [DEBUG] [Thread-116362] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:04:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:04:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:04:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:04:38', tmtdew=16.48, humidity=32.85, cloud=0.0, wind=12.3, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:04:04.368', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:04:47.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:04:47.979 [DEBUG] [Thread-116365] [transport.py] [_log()] starting thread (client mode): 0xa5160310
2025-12-03T12:04:47.979 [DEBUG] [Thread-116365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:04:47.994 [DEBUG] [Thread-116365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:04:47.994 [INFO] [Thread-116365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] client lang: <none>
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] server lang: <none>
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] kex follows: False
2025-12-03T12:04:48.002 [DEBUG] [Thread-116365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] Compression: none
2025-12-03T12:04:48.003 [DEBUG] [Thread-116365] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:04:48.062 [DEBUG] [Thread-116365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:04:48.063 [DEBUG] [Thread-116365] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:04:48.063 [DEBUG] [Thread-116365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:04:48.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:04:48.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:04:48.119 [DEBUG] [Thread-116365] [transport.py] [_log()] userauth is OK
2025-12-03T12:04:48.119 [DEBUG] [Thread-116365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:04:48.119 [DEBUG] [Thread-116365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:04:48.119 [DEBUG] [Thread-116365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:04:48.119 [DEBUG] [Thread-116365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:04:48.138 [INFO] [Thread-116365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:04:48.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:04:48.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:04:48.984 [DEBUG] [Thread-116365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:04:48.984 [DEBUG] [Thread-116365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:04:49.032 [DEBUG] [Thread-116365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:04:49.032 [DEBUG] [Thread-116365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:04:49.041 [DEBUG] [Thread-116365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:04:49.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:04:49.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:04:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:04:49.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:04:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:04:49.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:04:49.076 [DEBUG] [Thread-116365] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:04:58.945 [DEBUG] [Thread-116367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:59.749 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:04:59.750 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:13.991 [DEBUG] [Thread-116368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:19.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:05:19.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:05:19.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:05:19.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 5, 10), 16.48, 32.85, 0.0, 13.38, 17.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:05:19.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:05:10
2025-12-03T12:05:19.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:05:20.048 [DEBUG] [Thread-116369] [transport.py] [_log()] starting thread (client mode): 0xa5198580
2025-12-03T12:05:20.048 [DEBUG] [Thread-116369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:05:20.067 [DEBUG] [Thread-116369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:05:20.068 [INFO] [Thread-116369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] client lang: <none>
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] server lang: <none>
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] kex follows: False
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] Compression: none
2025-12-03T12:05:20.071 [DEBUG] [Thread-116369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:05:20.088 [DEBUG] [Thread-116369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:05:20.089 [DEBUG] [Thread-116369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:05:20.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:05:20.089 [DEBUG] [Thread-116369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:05:20.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:05:20.092 [DEBUG] [Thread-116369] [transport.py] [_log()] userauth is OK
2025-12-03T12:05:20.092 [DEBUG] [Thread-116369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:05:20.092 [DEBUG] [Thread-116369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:05:20.092 [DEBUG] [Thread-116369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:05:20.092 [DEBUG] [Thread-116369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:05:20.127 [INFO] [Thread-116369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:05:20.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:05:20.788 [DEBUG] [Thread-116369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:05:20.788 [DEBUG] [Thread-116369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:05:20.788 [DEBUG] [Thread-116369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:05:20.829 [DEBUG] [Thread-116369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:05:20.829 [DEBUG] [Thread-116369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:05:20.831 [DEBUG] [Thread-116369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:05:20.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:05:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:05:20.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:05:20.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:05:20.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:05:20.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:05:20.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.419842 -999.00  +19.10   9.73     36   +3.80 1 2 1 1 1   888    0 16.69 54.78 ----- 7.4 9.7 137.6 14.4 27.1 -21.9 26.2 -23.2 26.4 -19.7 27.2 -21.2
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.419842
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:05:20.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:05:10', tmtdew=16.48, humidity=32.85, cloud=0.0, wind=13.38, temperature=17.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:04:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:05:20.851 [DEBUG] [Thread-116369] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:05:20.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:05:20.933 [DEBUG] [Thread-116372] [transport.py] [_log()] starting thread (client mode): 0xa27c1930
2025-12-03T12:05:20.933 [DEBUG] [Thread-116372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:05:20.947 [DEBUG] [Thread-116372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:05:20.947 [INFO] [Thread-116372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] client lang: <none>
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] server lang: <none>
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] kex follows: False
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] Compression: none
2025-12-03T12:05:20.955 [DEBUG] [Thread-116372] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:05:21.015 [DEBUG] [Thread-116372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:05:21.015 [DEBUG] [Thread-116372] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:05:21.016 [DEBUG] [Thread-116372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:05:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:05:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:05:21.071 [DEBUG] [Thread-116372] [transport.py] [_log()] userauth is OK
2025-12-03T12:05:21.071 [DEBUG] [Thread-116372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:05:21.071 [DEBUG] [Thread-116372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:05:21.071 [DEBUG] [Thread-116372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:05:21.071 [DEBUG] [Thread-116372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:05:21.088 [INFO] [Thread-116372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:05:21.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:05:21.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:05:21.921 [DEBUG] [Thread-116372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:05:21.921 [DEBUG] [Thread-116372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:05:21.969 [DEBUG] [Thread-116372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:05:21.969 [DEBUG] [Thread-116372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:05:21.977 [DEBUG] [Thread-116372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:05:21.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:05:21.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:05:21.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:05:22.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:05:22.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:05:22.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:05:22.012 [DEBUG] [Thread-116372] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:05:29.020 [DEBUG] [Thread-116374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:44.063 [DEBUG] [Thread-116375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:44.624 [DEBUG] [Thread-116376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:05:52.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:05:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:05:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 5, 42), 16.97, 31.97, 0.0, 15.55, 18.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:05:52.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:05:42
2025-12-03T12:05:52.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:05:52.963 [DEBUG] [Thread-116377] [transport.py] [_log()] starting thread (client mode): 0xa27b72b0
2025-12-03T12:05:52.963 [DEBUG] [Thread-116377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:05:52.984 [DEBUG] [Thread-116377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:05:52.984 [INFO] [Thread-116377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:05:52.987 [DEBUG] [Thread-116377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:05:52.987 [DEBUG] [Thread-116377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:05:52.987 [DEBUG] [Thread-116377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:05:52.987 [DEBUG] [Thread-116377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:52.987 [DEBUG] [Thread-116377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] client lang: <none>
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] server lang: <none>
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] kex follows: False
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] Compression: none
2025-12-03T12:05:52.988 [DEBUG] [Thread-116377] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:05:53.005 [DEBUG] [Thread-116377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:05:53.006 [DEBUG] [Thread-116377] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:05:53.006 [DEBUG] [Thread-116377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:05:53.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:05:53.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:05:53.008 [DEBUG] [Thread-116377] [transport.py] [_log()] userauth is OK
2025-12-03T12:05:53.008 [DEBUG] [Thread-116377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:05:53.008 [DEBUG] [Thread-116377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:05:53.009 [DEBUG] [Thread-116377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:05:53.009 [DEBUG] [Thread-116377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:05:53.041 [INFO] [Thread-116377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:05:53.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:05:53.674 [DEBUG] [Thread-116377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:05:53.675 [DEBUG] [Thread-116377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:05:53.675 [DEBUG] [Thread-116377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:05:53.716 [DEBUG] [Thread-116377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:05:53.716 [DEBUG] [Thread-116377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:05:53.719 [DEBUG] [Thread-116377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:05:53.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:05:53.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:05:53.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:05:53.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:05:53.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:05:53.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:05:53.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.420189 -999.00  +19.30   9.97     35   +3.50 1 2 1 1 1   888    0 16.64 50.77 ----- 11.0 10.0 192.4 12.6 27.2 -22.3 26.4 -22.6 26.6 -20.9 27.3 -21.2
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:05:53.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.420189
2025-12-03T12:05:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:05:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:05:53.740 [DEBUG] [Thread-116377] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:05:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:05:53.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:05:53.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:05:53.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:05:42', tmtdew=16.97, humidity=31.97, cloud=0.0, wind=15.55, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:05:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:05:53.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:05:53.842 [DEBUG] [Thread-116380] [transport.py] [_log()] starting thread (client mode): 0xa5162c20
2025-12-03T12:05:53.842 [DEBUG] [Thread-116380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:05:53.857 [DEBUG] [Thread-116380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:05:53.857 [INFO] [Thread-116380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] client lang: <none>
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] server lang: <none>
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] kex follows: False
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:05:53.865 [DEBUG] [Thread-116380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:05:53.866 [DEBUG] [Thread-116380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:05:53.866 [DEBUG] [Thread-116380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:05:53.866 [DEBUG] [Thread-116380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:05:53.866 [DEBUG] [Thread-116380] [transport.py] [_log()] Compression: none
2025-12-03T12:05:53.866 [DEBUG] [Thread-116380] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:05:53.923 [DEBUG] [Thread-116380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:05:53.924 [DEBUG] [Thread-116380] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:05:53.924 [DEBUG] [Thread-116380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:05:53.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:05:53.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:05:53.980 [DEBUG] [Thread-116380] [transport.py] [_log()] userauth is OK
2025-12-03T12:05:53.980 [DEBUG] [Thread-116380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:05:53.980 [DEBUG] [Thread-116380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:05:53.980 [DEBUG] [Thread-116380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:05:53.980 [DEBUG] [Thread-116380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:05:53.998 [INFO] [Thread-116380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:05:53.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:05:53.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:05:54.851 [DEBUG] [Thread-116380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:05:54.852 [DEBUG] [Thread-116380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:05:54.899 [DEBUG] [Thread-116380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:05:54.900 [DEBUG] [Thread-116380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:05:54.908 [DEBUG] [Thread-116380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:05:54.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:05:54.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:05:54.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:05:54.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:05:54.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:05:54.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:05:54.943 [DEBUG] [Thread-116380] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:05:59.089 [DEBUG] [Thread-116382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:59.890 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:05:59.891 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:14.133 [DEBUG] [Thread-116383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:24.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:06:24.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:06:24.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:06:25.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 6, 14), 16.82, 32.3, 0.0, 16.2, 18.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:06:25.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:06:14
2025-12-03T12:06:25.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:06:25.920 [DEBUG] [Thread-116384] [transport.py] [_log()] starting thread (client mode): 0xa5161a80
2025-12-03T12:06:25.920 [DEBUG] [Thread-116384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:06:25.939 [DEBUG] [Thread-116384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:06:25.939 [INFO] [Thread-116384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:06:25.940 [DEBUG] [Thread-116384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] client lang: <none>
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] server lang: <none>
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] kex follows: False
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] Compression: none
2025-12-03T12:06:25.941 [DEBUG] [Thread-116384] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:06:25.948 [DEBUG] [Thread-116384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:06:25.948 [DEBUG] [Thread-116384] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:06:25.948 [DEBUG] [Thread-116384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:06:25.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:06:25.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:06:25.949 [DEBUG] [Thread-116384] [transport.py] [_log()] userauth is OK
2025-12-03T12:06:25.949 [DEBUG] [Thread-116384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:06:25.949 [DEBUG] [Thread-116384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:06:25.949 [DEBUG] [Thread-116384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:06:25.949 [DEBUG] [Thread-116384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:06:25.964 [INFO] [Thread-116384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:06:25.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:06:26.565 [DEBUG] [Thread-116384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:06:26.565 [DEBUG] [Thread-116384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:06:26.565 [DEBUG] [Thread-116384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:06:26.606 [DEBUG] [Thread-116384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:06:26.606 [DEBUG] [Thread-116384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:06:26.608 [DEBUG] [Thread-116384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:06:26.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:06:26.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:06:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:06:26.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:06:26.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:06:26.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:06:26.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.420536 -999.00  +19.50  11.34     34   +3.40 1 2 1 1 1   888    0 16.70 51.09 ----- 11.2 11.3 146.2 15.5 27.3 -21.8 26.5 -21.7 26.6 -20.3 27.3 -21.3
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.420536
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:06:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:06:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:06:14', tmtdew=16.82, humidity=32.3, cloud=0.0, wind=16.2, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:05:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:06:26.627 [DEBUG] [Thread-116384] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:06:26.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:06:26.715 [DEBUG] [Thread-116387] [transport.py] [_log()] starting thread (client mode): 0xa2708df0
2025-12-03T12:06:26.715 [DEBUG] [Thread-116387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:06:26.730 [DEBUG] [Thread-116387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:06:26.730 [INFO] [Thread-116387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:06:26.737 [DEBUG] [Thread-116387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:06:26.737 [DEBUG] [Thread-116387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:06:26.737 [DEBUG] [Thread-116387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:06:26.737 [DEBUG] [Thread-116387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:26.737 [DEBUG] [Thread-116387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] client lang: <none>
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] server lang: <none>
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] kex follows: False
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] Compression: none
2025-12-03T12:06:26.738 [DEBUG] [Thread-116387] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:06:26.797 [DEBUG] [Thread-116387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:06:26.798 [DEBUG] [Thread-116387] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:06:26.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:06:26.798 [DEBUG] [Thread-116387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:06:26.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:06:26.853 [DEBUG] [Thread-116387] [transport.py] [_log()] userauth is OK
2025-12-03T12:06:26.853 [DEBUG] [Thread-116387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:06:26.853 [DEBUG] [Thread-116387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:06:26.853 [DEBUG] [Thread-116387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:06:26.853 [DEBUG] [Thread-116387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:06:26.873 [INFO] [Thread-116387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:06:26.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:06:26.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:06:27.728 [DEBUG] [Thread-116387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:06:27.728 [DEBUG] [Thread-116387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:06:27.778 [DEBUG] [Thread-116387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:06:27.778 [DEBUG] [Thread-116387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:06:27.786 [DEBUG] [Thread-116387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:06:27.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:06:27.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:06:27.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:06:27.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:06:27.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:06:27.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:06:27.824 [DEBUG] [Thread-116387] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:06:29.165 [DEBUG] [Thread-116389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:44.211 [DEBUG] [Thread-116390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:44.664 [DEBUG] [Thread-116391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:06:57.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:06:57.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:06:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 6, 46), 16.27, 33.41, 0.0, 8.49, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:06:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:06:46
2025-12-03T12:06:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:06:58.809 [DEBUG] [Thread-116392] [transport.py] [_log()] starting thread (client mode): 0xa27b7760
2025-12-03T12:06:58.809 [DEBUG] [Thread-116392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:06:58.829 [DEBUG] [Thread-116392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:06:58.829 [INFO] [Thread-116392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:06:58.832 [DEBUG] [Thread-116392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:06:58.832 [DEBUG] [Thread-116392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] client lang: <none>
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] server lang: <none>
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] kex follows: False
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] Compression: none
2025-12-03T12:06:58.833 [DEBUG] [Thread-116392] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:06:58.850 [DEBUG] [Thread-116392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:06:58.851 [DEBUG] [Thread-116392] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:06:58.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:06:58.852 [DEBUG] [Thread-116392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:06:58.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:06:58.854 [DEBUG] [Thread-116392] [transport.py] [_log()] userauth is OK
2025-12-03T12:06:58.854 [DEBUG] [Thread-116392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:06:58.854 [DEBUG] [Thread-116392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:06:58.854 [DEBUG] [Thread-116392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:06:58.854 [DEBUG] [Thread-116392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:06:58.888 [INFO] [Thread-116392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:06:58.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:06:59.241 [DEBUG] [Thread-116394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:06:59.514 [DEBUG] [Thread-116392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:06:59.514 [DEBUG] [Thread-116392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:06:59.514 [DEBUG] [Thread-116392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:06:59.555 [DEBUG] [Thread-116392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:06:59.555 [DEBUG] [Thread-116392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:06:59.558 [DEBUG] [Thread-116392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:06:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:06:59.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:06:59.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:06:59.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:06:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:06:59.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:06:59.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.420883 -999.00  +19.40  11.55     35   +3.60 1 1 1 1 1   888    0 16.77 43.62 ----- 11.6 11.6 168.4 16.5 27.3 -22.9 26.4 -25.4 26.7 -21.2 27.5 -20.2
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.420883
2025-12-03T12:06:59.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:06:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:06:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:06:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:06:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:06:59.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:06:46', tmtdew=16.27, humidity=33.41, cloud=0.0, wind=8.49, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:06:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:06:59.578 [DEBUG] [Thread-116392] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:06:59.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:06:59.664 [DEBUG] [Thread-116396] [transport.py] [_log()] starting thread (client mode): 0xa51991b0
2025-12-03T12:06:59.664 [DEBUG] [Thread-116396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:06:59.678 [DEBUG] [Thread-116396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:06:59.678 [INFO] [Thread-116396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] client lang: <none>
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] server lang: <none>
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] kex follows: False
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] Compression: none
2025-12-03T12:06:59.686 [DEBUG] [Thread-116396] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:06:59.741 [DEBUG] [Thread-116396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:06:59.741 [DEBUG] [Thread-116396] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:06:59.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:06:59.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:06:59.742 [DEBUG] [Thread-116396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:06:59.798 [DEBUG] [Thread-116396] [transport.py] [_log()] userauth is OK
2025-12-03T12:06:59.798 [DEBUG] [Thread-116396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:06:59.798 [DEBUG] [Thread-116396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:06:59.798 [DEBUG] [Thread-116396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:06:59.798 [DEBUG] [Thread-116396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:06:59.813 [INFO] [Thread-116396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:06:59.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:06:59.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:07:00.035 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:00.036 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:00.649 [DEBUG] [Thread-116396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:07:00.649 [DEBUG] [Thread-116396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:07:00.697 [DEBUG] [Thread-116396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:07:00.697 [DEBUG] [Thread-116396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:07:00.705 [DEBUG] [Thread-116396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:07:00.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:07:00.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:07:00.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:07:00.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:07:00.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:07:00.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:07:00.737 [DEBUG] [Thread-116396] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:07:14.265 [DEBUG] [Thread-116398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:29.317 [DEBUG] [Thread-116399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:30.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:07:30.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:07:30.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:07:31.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 7, 18), 16.19, 33.63, 0.0, 6.49, 17.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:07:31.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:07:18
2025-12-03T12:07:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:07:31.713 [DEBUG] [Thread-116400] [transport.py] [_log()] starting thread (client mode): 0xa27c2320
2025-12-03T12:07:31.713 [DEBUG] [Thread-116400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:07:31.734 [DEBUG] [Thread-116400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:07:31.734 [INFO] [Thread-116400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] client lang: <none>
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] server lang: <none>
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] kex follows: False
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] Compression: none
2025-12-03T12:07:31.737 [DEBUG] [Thread-116400] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:07:31.753 [DEBUG] [Thread-116400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:07:31.753 [DEBUG] [Thread-116400] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:07:31.753 [DEBUG] [Thread-116400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:07:31.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:07:31.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:07:31.754 [DEBUG] [Thread-116400] [transport.py] [_log()] userauth is OK
2025-12-03T12:07:31.754 [DEBUG] [Thread-116400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:07:31.754 [DEBUG] [Thread-116400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:07:31.754 [DEBUG] [Thread-116400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:07:31.754 [DEBUG] [Thread-116400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:07:31.763 [INFO] [Thread-116400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:07:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:07:32.368 [DEBUG] [Thread-116400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:07:32.368 [DEBUG] [Thread-116400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:07:32.368 [DEBUG] [Thread-116400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:07:32.409 [DEBUG] [Thread-116400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:07:32.409 [DEBUG] [Thread-116400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:07:32.411 [DEBUG] [Thread-116400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:07:32.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:07:32.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:07:32.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:07:32.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:07:32.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:07:32.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:07:32.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.421231 -999.00  +19.50   7.60     35   +3.70 1 2 1 1 1   888    0 16.59 36.34 ----- 10.9 7.6 155.0 12.8 27.5 -22.9 26.7 -21.0 26.9 -19.5 27.5 -20.7
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.421231
2025-12-03T12:07:32.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:07:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:07:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:07:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:07:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:07:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:07:18', tmtdew=16.19, humidity=33.63, cloud=0.0, wind=6.49, temperature=17.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:06:34.358', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:07:32.434 [DEBUG] [Thread-116400] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:07:32.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:07:32.529 [DEBUG] [Thread-116403] [transport.py] [_log()] starting thread (client mode): 0xa519ada0
2025-12-03T12:07:32.529 [DEBUG] [Thread-116403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:07:32.549 [DEBUG] [Thread-116403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:07:32.549 [INFO] [Thread-116403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] client lang: <none>
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] server lang: <none>
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] kex follows: False
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] Compression: none
2025-12-03T12:07:32.559 [DEBUG] [Thread-116403] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:07:32.615 [DEBUG] [Thread-116403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:07:32.615 [DEBUG] [Thread-116403] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:07:32.615 [DEBUG] [Thread-116403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:07:32.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:07:32.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:07:32.679 [DEBUG] [Thread-116403] [transport.py] [_log()] userauth is OK
2025-12-03T12:07:32.679 [DEBUG] [Thread-116403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:07:32.679 [DEBUG] [Thread-116403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:07:32.679 [DEBUG] [Thread-116403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:07:32.679 [DEBUG] [Thread-116403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:07:32.704 [INFO] [Thread-116403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:07:32.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:07:32.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:07:33.575 [DEBUG] [Thread-116403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:07:33.575 [DEBUG] [Thread-116403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:07:33.623 [DEBUG] [Thread-116403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:07:33.623 [DEBUG] [Thread-116403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:07:33.631 [DEBUG] [Thread-116403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:07:33.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:07:33.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:07:33.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:07:33.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:07:33.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:07:33.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:07:33.663 [DEBUG] [Thread-116403] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:07:44.343 [DEBUG] [Thread-116405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:44.710 [DEBUG] [Thread-116406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:07:59.380 [DEBUG] [Thread-116407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:00.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:00.174 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:03.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:08:03.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:08:03.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:08:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 7, 50), 16.58, 33.03, 0.0, 7.76, 18.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:08:04.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:07:50
2025-12-03T12:08:04.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:08:04.629 [DEBUG] [Thread-116408] [transport.py] [_log()] starting thread (client mode): 0xa7bd3a30
2025-12-03T12:08:04.629 [DEBUG] [Thread-116408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:08:04.649 [DEBUG] [Thread-116408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:08:04.649 [INFO] [Thread-116408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:08:04.652 [DEBUG] [Thread-116408] [transport.py] [_log()] client lang: <none>
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] server lang: <none>
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] kex follows: False
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] Compression: none
2025-12-03T12:08:04.653 [DEBUG] [Thread-116408] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:08:04.670 [DEBUG] [Thread-116408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:08:04.670 [DEBUG] [Thread-116408] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:08:04.671 [DEBUG] [Thread-116408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:08:04.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:08:04.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:08:04.673 [DEBUG] [Thread-116408] [transport.py] [_log()] userauth is OK
2025-12-03T12:08:04.673 [DEBUG] [Thread-116408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:08:04.673 [DEBUG] [Thread-116408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:08:04.673 [DEBUG] [Thread-116408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:08:04.673 [DEBUG] [Thread-116408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:08:04.697 [INFO] [Thread-116408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:08:04.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:08:05.295 [DEBUG] [Thread-116408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:08:05.295 [DEBUG] [Thread-116408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:08:05.295 [DEBUG] [Thread-116408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:08:05.336 [DEBUG] [Thread-116408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:08:05.336 [DEBUG] [Thread-116408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:08:05.339 [DEBUG] [Thread-116408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:08:05.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:08:05.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:08:05.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:08:05.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:08:05.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:08:05.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:08:05.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:08:05.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.421578 -999.00  +19.40   7.65     36   +4.00 1 2 1 1 1   888    0 16.63 36.24 ----- 9.9 7.7 169.2 14.9 27.4 -21.4 26.4 -22.6 26.8 -20.7 27.5 -23.3
2025-12-03T12:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:08:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.421578
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:08:05.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:07:50', tmtdew=16.58, humidity=33.03, cloud=0.0, wind=7.76, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:07:04.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:08:05.363 [DEBUG] [Thread-116408] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:08:05.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:08:05.459 [DEBUG] [Thread-116411] [transport.py] [_log()] starting thread (client mode): 0xa5161660
2025-12-03T12:08:05.459 [DEBUG] [Thread-116411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:08:05.473 [DEBUG] [Thread-116411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:08:05.473 [INFO] [Thread-116411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:08:05.484 [DEBUG] [Thread-116411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:08:05.484 [DEBUG] [Thread-116411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] client lang: <none>
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] server lang: <none>
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] kex follows: False
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:08:05.485 [DEBUG] [Thread-116411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:08:05.486 [DEBUG] [Thread-116411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:08:05.486 [DEBUG] [Thread-116411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:08:05.486 [DEBUG] [Thread-116411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:08:05.486 [DEBUG] [Thread-116411] [transport.py] [_log()] Compression: none
2025-12-03T12:08:05.486 [DEBUG] [Thread-116411] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:08:05.542 [DEBUG] [Thread-116411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:08:05.543 [DEBUG] [Thread-116411] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:08:05.543 [DEBUG] [Thread-116411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:08:05.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:08:05.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:08:05.597 [DEBUG] [Thread-116411] [transport.py] [_log()] userauth is OK
2025-12-03T12:08:05.598 [DEBUG] [Thread-116411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:08:05.598 [DEBUG] [Thread-116411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:08:05.598 [DEBUG] [Thread-116411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:08:05.598 [DEBUG] [Thread-116411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:08:05.616 [INFO] [Thread-116411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:08:05.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:08:05.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:08:06.462 [DEBUG] [Thread-116411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:08:06.462 [DEBUG] [Thread-116411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:08:06.510 [DEBUG] [Thread-116411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:08:06.510 [DEBUG] [Thread-116411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:08:06.520 [DEBUG] [Thread-116411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:08:06.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:08:06.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:08:06.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:08:06.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:08:06.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:08:06.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:08:06.558 [DEBUG] [Thread-116411] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:08:14.411 [DEBUG] [Thread-116413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:29.458 [DEBUG] [Thread-116414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:08:36.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:08:36.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:08:37.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 8, 22), 16.59, 33.02, 0.0, 7.71, 18.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:08:37.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:08:22
2025-12-03T12:08:37.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:08:37.545 [DEBUG] [Thread-116415] [transport.py] [_log()] starting thread (client mode): 0xa5198220
2025-12-03T12:08:37.545 [DEBUG] [Thread-116415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:08:37.566 [DEBUG] [Thread-116415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:08:37.566 [INFO] [Thread-116415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] client lang: <none>
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] server lang: <none>
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] kex follows: False
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] Compression: none
2025-12-03T12:08:37.570 [DEBUG] [Thread-116415] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:08:37.588 [DEBUG] [Thread-116415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:08:37.588 [DEBUG] [Thread-116415] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:08:37.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:08:37.589 [DEBUG] [Thread-116415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:08:37.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:08:37.591 [DEBUG] [Thread-116415] [transport.py] [_log()] userauth is OK
2025-12-03T12:08:37.591 [DEBUG] [Thread-116415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:08:37.592 [DEBUG] [Thread-116415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:08:37.592 [DEBUG] [Thread-116415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:08:37.592 [DEBUG] [Thread-116415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:08:37.616 [INFO] [Thread-116415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:08:37.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:08:38.249 [DEBUG] [Thread-116415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:08:38.249 [DEBUG] [Thread-116415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:08:38.250 [DEBUG] [Thread-116415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:08:38.290 [DEBUG] [Thread-116415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:08:38.290 [DEBUG] [Thread-116415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:08:38.293 [DEBUG] [Thread-116415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:08:38.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:08:38.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:08:38.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:08:38.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:08:38.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:08:38.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:08:38.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.422272 -999.00  +19.20   3.93     36   +4.10 1 2 1 1 1   888    0 15.84 21.89 ----- 4.3 3.9 186.3 7.4 27.8 -23.2 26.9 -22.5 27.2 -20.3 27.8 -20.6
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:08:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.422272
2025-12-03T12:08:38.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:08:38.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:08:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:08:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:08:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:08:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:08:22', tmtdew=16.59, humidity=33.02, cloud=0.0, wind=7.71, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:08:04.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:08:38.318 [DEBUG] [Thread-116415] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:08:38.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:08:38.414 [DEBUG] [Thread-116418] [transport.py] [_log()] starting thread (client mode): 0xa5198580
2025-12-03T12:08:38.415 [DEBUG] [Thread-116418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:08:38.429 [DEBUG] [Thread-116418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:08:38.429 [INFO] [Thread-116418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:38.438 [DEBUG] [Thread-116418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] client lang: <none>
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] server lang: <none>
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] kex follows: False
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] Compression: none
2025-12-03T12:08:38.439 [DEBUG] [Thread-116418] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:08:38.496 [DEBUG] [Thread-116418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:08:38.497 [DEBUG] [Thread-116418] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:08:38.497 [DEBUG] [Thread-116418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:08:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:08:38.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:08:38.552 [DEBUG] [Thread-116418] [transport.py] [_log()] userauth is OK
2025-12-03T12:08:38.552 [DEBUG] [Thread-116418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:08:38.552 [DEBUG] [Thread-116418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:08:38.552 [DEBUG] [Thread-116418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:08:38.552 [DEBUG] [Thread-116418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:08:38.570 [INFO] [Thread-116418] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:08:38.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:08:38.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:08:39.420 [DEBUG] [Thread-116418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:08:39.420 [DEBUG] [Thread-116418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:08:39.468 [DEBUG] [Thread-116418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:08:39.468 [DEBUG] [Thread-116418] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:08:39.477 [DEBUG] [Thread-116418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:08:39.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:08:39.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:08:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:08:39.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:08:39.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:08:39.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:08:39.514 [DEBUG] [Thread-116418] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:08:44.489 [DEBUG] [Thread-116420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:44.750 [DEBUG] [Thread-116421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:08:59.532 [DEBUG] [Thread-116422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:00.315 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:00.315 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:09:09.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:09:09.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:09:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 8, 54), 16.68, 32.83, 0.0, 10.17, 18.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:09:10.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:08:54
2025-12-03T12:09:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:09:10.477 [DEBUG] [Thread-116423] [transport.py] [_log()] starting thread (client mode): 0xa51990f0
2025-12-03T12:09:10.477 [DEBUG] [Thread-116423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:09:10.496 [DEBUG] [Thread-116423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:09:10.497 [INFO] [Thread-116423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] client lang: <none>
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] server lang: <none>
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] kex follows: False
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] Compression: none
2025-12-03T12:09:10.498 [DEBUG] [Thread-116423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:09:10.506 [DEBUG] [Thread-116423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:09:10.506 [DEBUG] [Thread-116423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:09:10.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:09:10.506 [DEBUG] [Thread-116423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:09:10.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:09:10.507 [DEBUG] [Thread-116423] [transport.py] [_log()] userauth is OK
2025-12-03T12:09:10.507 [DEBUG] [Thread-116423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:09:10.507 [DEBUG] [Thread-116423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:09:10.507 [DEBUG] [Thread-116423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:09:10.507 [DEBUG] [Thread-116423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:09:10.518 [INFO] [Thread-116423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:09:10.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:09:11.145 [DEBUG] [Thread-116423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:09:11.145 [DEBUG] [Thread-116423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:09:11.146 [DEBUG] [Thread-116423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:09:11.187 [DEBUG] [Thread-116423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:09:11.187 [DEBUG] [Thread-116423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:09:11.190 [DEBUG] [Thread-116423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:09:11.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:09:11.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:09:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:09:11.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:09:11.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:09:11.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:09:11.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.422620 -999.00  +19.30  12.59     36   +4.10 1 1 1 1 1   888    0 15.71 14.60 ----- 9.9 12.6 192.0 16.8 27.6 -23.5 26.4 -27.9 26.9 -21.7 27.8 -23.2
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:09:11.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.422620
2025-12-03T12:09:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:09:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:09:11.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:09:11.212 [DEBUG] [Thread-116423] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:09:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:09:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:09:11.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:08:54', tmtdew=16.68, humidity=32.83, cloud=0.0, wind=10.17, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:08:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:09:11.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:09:11.307 [DEBUG] [Thread-116426] [transport.py] [_log()] starting thread (client mode): 0xa2709db0
2025-12-03T12:09:11.307 [DEBUG] [Thread-116426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:09:11.322 [DEBUG] [Thread-116426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:09:11.322 [INFO] [Thread-116426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] client lang: <none>
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] server lang: <none>
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] kex follows: False
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:09:11.330 [DEBUG] [Thread-116426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:09:11.331 [DEBUG] [Thread-116426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:09:11.331 [DEBUG] [Thread-116426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:09:11.331 [DEBUG] [Thread-116426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:09:11.331 [DEBUG] [Thread-116426] [transport.py] [_log()] Compression: none
2025-12-03T12:09:11.331 [DEBUG] [Thread-116426] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:09:11.389 [DEBUG] [Thread-116426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:09:11.390 [DEBUG] [Thread-116426] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:09:11.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:09:11.390 [DEBUG] [Thread-116426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:09:11.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:09:11.446 [DEBUG] [Thread-116426] [transport.py] [_log()] userauth is OK
2025-12-03T12:09:11.446 [DEBUG] [Thread-116426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:09:11.446 [DEBUG] [Thread-116426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:09:11.446 [DEBUG] [Thread-116426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:09:11.447 [DEBUG] [Thread-116426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:09:11.467 [INFO] [Thread-116426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:09:11.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:09:11.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:09:12.310 [DEBUG] [Thread-116426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:09:12.310 [DEBUG] [Thread-116426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:09:12.358 [DEBUG] [Thread-116426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:09:12.358 [DEBUG] [Thread-116426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:09:12.366 [DEBUG] [Thread-116426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:09:12.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:09:12.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:09:12.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:09:12.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:09:12.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:09:12.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:09:12.401 [DEBUG] [Thread-116426] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:09:14.560 [DEBUG] [Thread-116428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:29.606 [DEBUG] [Thread-116429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:09:42.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:09:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:09:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 9, 26), 16.55, 33.1, 0.0, 10.17, 18.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:09:43.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:09:26
2025-12-03T12:09:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:09:43.380 [DEBUG] [Thread-116430] [transport.py] [_log()] starting thread (client mode): 0xa2708130
2025-12-03T12:09:43.380 [DEBUG] [Thread-116430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:09:43.400 [DEBUG] [Thread-116430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:09:43.400 [INFO] [Thread-116430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:09:43.403 [DEBUG] [Thread-116430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:09:43.403 [DEBUG] [Thread-116430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:09:43.403 [DEBUG] [Thread-116430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:09:43.403 [DEBUG] [Thread-116430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:43.403 [DEBUG] [Thread-116430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] client lang: <none>
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] server lang: <none>
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] kex follows: False
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] Compression: none
2025-12-03T12:09:43.404 [DEBUG] [Thread-116430] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:09:43.420 [DEBUG] [Thread-116430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:09:43.421 [DEBUG] [Thread-116430] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:09:43.421 [DEBUG] [Thread-116430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:09:43.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:09:43.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:09:43.422 [DEBUG] [Thread-116430] [transport.py] [_log()] userauth is OK
2025-12-03T12:09:43.422 [DEBUG] [Thread-116430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:09:43.422 [DEBUG] [Thread-116430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:09:43.422 [DEBUG] [Thread-116430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:09:43.422 [DEBUG] [Thread-116430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:09:43.437 [INFO] [Thread-116430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:09:43.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:09:44.074 [DEBUG] [Thread-116430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:09:44.074 [DEBUG] [Thread-116430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:09:44.075 [DEBUG] [Thread-116430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:09:44.116 [DEBUG] [Thread-116430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:09:44.116 [DEBUG] [Thread-116430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:09:44.118 [DEBUG] [Thread-116430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:09:44.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:09:44.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:09:44.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:09:44.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:09:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:09:44.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:09:44.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.422967 -999.00  +19.20   6.28     37   +4.10 1 2 1 1 1   888    0 15.98 12.00 ----- 8.8 6.3 181.8 9.0 27.6 -22.6 26.7 -22.4 27.0 -20.7 27.7 -22.0
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:09:44.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.422967
2025-12-03T12:09:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:09:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:09:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:09:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:09:44.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:09:44.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:09:26', tmtdew=16.55, humidity=33.1, cloud=0.0, wind=10.17, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:09:04.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:09:44.144 [DEBUG] [Thread-116430] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:09:44.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:09:44.239 [DEBUG] [Thread-116433] [transport.py] [_log()] starting thread (client mode): 0xa7bd3b20
2025-12-03T12:09:44.240 [DEBUG] [Thread-116433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:09:44.254 [DEBUG] [Thread-116433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:09:44.254 [INFO] [Thread-116433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:09:44.261 [DEBUG] [Thread-116433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:44.262 [DEBUG] [Thread-116433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] client lang: <none>
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] server lang: <none>
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] kex follows: False
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:09:44.263 [DEBUG] [Thread-116433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:09:44.264 [DEBUG] [Thread-116433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:09:44.264 [DEBUG] [Thread-116433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:09:44.264 [DEBUG] [Thread-116433] [transport.py] [_log()] Compression: none
2025-12-03T12:09:44.264 [DEBUG] [Thread-116433] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:09:44.319 [DEBUG] [Thread-116433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:09:44.320 [DEBUG] [Thread-116433] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:09:44.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:09:44.321 [DEBUG] [Thread-116433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:09:44.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:09:44.375 [DEBUG] [Thread-116433] [transport.py] [_log()] userauth is OK
2025-12-03T12:09:44.376 [DEBUG] [Thread-116433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:09:44.376 [DEBUG] [Thread-116433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:09:44.376 [DEBUG] [Thread-116433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:09:44.376 [DEBUG] [Thread-116433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:09:44.394 [INFO] [Thread-116433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:09:44.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:09:44.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:09:44.634 [DEBUG] [Thread-116435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:44.807 [DEBUG] [Thread-116436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:09:45.248 [DEBUG] [Thread-116433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:09:45.248 [DEBUG] [Thread-116433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:09:45.296 [DEBUG] [Thread-116433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:09:45.297 [DEBUG] [Thread-116433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:09:45.305 [DEBUG] [Thread-116433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:09:45.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:09:45.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:09:45.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:09:45.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:09:45.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:09:45.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:09:45.339 [DEBUG] [Thread-116433] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:09:59.678 [DEBUG] [Thread-116437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:00.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:00.456 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:14.707 [DEBUG] [Thread-116438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:15.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:10:15.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:10:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:10:16.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 9, 58), 17.04, 32.02, 0.0, 12.02, 18.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:10:16.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:09:58
2025-12-03T12:10:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:10:16.361 [DEBUG] [Thread-116439] [transport.py] [_log()] starting thread (client mode): 0xa7bd07c0
2025-12-03T12:10:16.361 [DEBUG] [Thread-116439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:10:16.380 [DEBUG] [Thread-116439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:10:16.380 [INFO] [Thread-116439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] client lang: <none>
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] server lang: <none>
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] kex follows: False
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] Compression: none
2025-12-03T12:10:16.384 [DEBUG] [Thread-116439] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:10:16.398 [DEBUG] [Thread-116439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:10:16.398 [DEBUG] [Thread-116439] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:10:16.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:10:16.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] userauth is OK
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:10:16.399 [DEBUG] [Thread-116439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:10:16.414 [INFO] [Thread-116439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:10:16.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:10:17.070 [DEBUG] [Thread-116439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:10:17.070 [DEBUG] [Thread-116439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:10:17.070 [DEBUG] [Thread-116439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:10:17.111 [DEBUG] [Thread-116439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:10:17.111 [DEBUG] [Thread-116439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:10:17.113 [DEBUG] [Thread-116439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:10:17.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:10:17.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:10:17.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:10:17.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:10:17.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:10:17.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:10:17.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.423314 -999.00  +19.80  13.90     35   +4.10 1 2 1 1 1   888    0 15.54 11.18 ----- 11.2 13.9 193.1 18.5 27.7 -23.6 26.7 -24.3 27.1 -21.1 27.8 -22.7
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.423314
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:10:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:10:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:10:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:10:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:09:58', tmtdew=17.04, humidity=32.02, cloud=0.0, wind=12.02, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:09:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:10:17.136 [DEBUG] [Thread-116439] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:10:17.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:10:17.228 [DEBUG] [Thread-116442] [transport.py] [_log()] starting thread (client mode): 0xa7bd20e0
2025-12-03T12:10:17.228 [DEBUG] [Thread-116442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:10:17.244 [DEBUG] [Thread-116442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:10:17.244 [INFO] [Thread-116442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] client lang: <none>
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] server lang: <none>
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] kex follows: False
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] Compression: none
2025-12-03T12:10:17.252 [DEBUG] [Thread-116442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:10:17.312 [DEBUG] [Thread-116442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:10:17.312 [DEBUG] [Thread-116442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:10:17.312 [DEBUG] [Thread-116442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:10:17.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:10:17.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:10:17.370 [DEBUG] [Thread-116442] [transport.py] [_log()] userauth is OK
2025-12-03T12:10:17.370 [DEBUG] [Thread-116442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:10:17.371 [DEBUG] [Thread-116442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:10:17.371 [DEBUG] [Thread-116442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:10:17.371 [DEBUG] [Thread-116442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:10:17.385 [INFO] [Thread-116442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:10:17.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:10:17.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:10:18.217 [DEBUG] [Thread-116442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:10:18.217 [DEBUG] [Thread-116442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:10:18.265 [DEBUG] [Thread-116442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:10:18.265 [DEBUG] [Thread-116442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:10:18.273 [DEBUG] [Thread-116442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:10:18.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:10:18.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:10:18.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:10:18.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:10:18.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:10:18.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:10:18.307 [DEBUG] [Thread-116442] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:10:29.736 [DEBUG] [Thread-116444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:44.780 [DEBUG] [Thread-116445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:44.842 [DEBUG] [Thread-116446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:10:48.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:10:48.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:10:48.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:10:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 10, 30), 17.01, 32.08, 0.0, 13.16, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:10:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:10:30
2025-12-03T12:10:49.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:10:49.296 [DEBUG] [Thread-116447] [transport.py] [_log()] starting thread (client mode): 0xa27082e0
2025-12-03T12:10:49.297 [DEBUG] [Thread-116447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:10:49.317 [DEBUG] [Thread-116447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:10:49.317 [INFO] [Thread-116447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] client lang: <none>
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] server lang: <none>
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] kex follows: False
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:10:49.320 [DEBUG] [Thread-116447] [transport.py] [_log()] Compression: none
2025-12-03T12:10:49.321 [DEBUG] [Thread-116447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:10:49.338 [DEBUG] [Thread-116447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:10:49.338 [DEBUG] [Thread-116447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:10:49.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:10:49.339 [DEBUG] [Thread-116447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:10:49.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:10:49.341 [DEBUG] [Thread-116447] [transport.py] [_log()] userauth is OK
2025-12-03T12:10:49.341 [DEBUG] [Thread-116447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:10:49.341 [DEBUG] [Thread-116447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:10:49.341 [DEBUG] [Thread-116447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:10:49.342 [DEBUG] [Thread-116447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:10:49.362 [INFO] [Thread-116447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:10:49.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:10:50.032 [DEBUG] [Thread-116447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:10:50.032 [DEBUG] [Thread-116447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:10:50.032 [DEBUG] [Thread-116447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:10:50.073 [DEBUG] [Thread-116447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:10:50.073 [DEBUG] [Thread-116447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:10:50.077 [DEBUG] [Thread-116447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:10:50.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:10:50.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:10:50.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:10:50.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:10:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:10:50.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:10:50.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:10:50.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:10:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:10:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.423661 -999.00  +19.90  10.97     34   +3.80 1 2 1 1 1   888    0 16.20 16.51 ----- 10.7 11.0 175.0 19.0 27.6 -23.2 26.7 -23.2 27.1 -20.4 27.6 -23.7
2025-12-03T12:10:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:10:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:10:50.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.423661
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:10:50.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:10:30', tmtdew=17.01, humidity=32.08, cloud=0.0, wind=13.16, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:10:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:10:50.103 [DEBUG] [Thread-116447] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:10:50.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:10:50.197 [DEBUG] [Thread-116450] [transport.py] [_log()] starting thread (client mode): 0xa2708100
2025-12-03T12:10:50.198 [DEBUG] [Thread-116450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:10:50.212 [DEBUG] [Thread-116450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:10:50.212 [INFO] [Thread-116450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:10:50.220 [DEBUG] [Thread-116450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] client lang: <none>
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] server lang: <none>
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] kex follows: False
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:10:50.221 [DEBUG] [Thread-116450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:10:50.222 [DEBUG] [Thread-116450] [transport.py] [_log()] Compression: none
2025-12-03T12:10:50.222 [DEBUG] [Thread-116450] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:10:50.276 [DEBUG] [Thread-116450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:10:50.277 [DEBUG] [Thread-116450] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:10:50.278 [DEBUG] [Thread-116450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:10:50.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:10:50.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:10:50.332 [DEBUG] [Thread-116450] [transport.py] [_log()] userauth is OK
2025-12-03T12:10:50.333 [DEBUG] [Thread-116450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:10:50.333 [DEBUG] [Thread-116450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:10:50.333 [DEBUG] [Thread-116450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:10:50.333 [DEBUG] [Thread-116450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:10:50.353 [INFO] [Thread-116450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:10:50.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:10:50.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:10:51.189 [DEBUG] [Thread-116450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:10:51.190 [DEBUG] [Thread-116450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:10:51.238 [DEBUG] [Thread-116450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:10:51.238 [DEBUG] [Thread-116450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:10:51.247 [DEBUG] [Thread-116450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:10:51.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:10:51.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:10:51.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:10:51.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:10:51.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:10:51.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:10:51.280 [DEBUG] [Thread-116450] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:10:59.809 [DEBUG] [Thread-116452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:00.606 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:00.607 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:14.860 [DEBUG] [Thread-116453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:11:21.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:11:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:11:21.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 11, 2), 17.34, 31.44, 0.0, 17.98, 19.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:11:21.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:11:02
2025-12-03T12:11:22.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:11:22.268 [DEBUG] [Thread-116454] [transport.py] [_log()] starting thread (client mode): 0xa27087c0
2025-12-03T12:11:22.268 [DEBUG] [Thread-116454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:11:22.287 [DEBUG] [Thread-116454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:11:22.287 [INFO] [Thread-116454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] client lang: <none>
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] server lang: <none>
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] kex follows: False
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] Compression: none
2025-12-03T12:11:22.291 [DEBUG] [Thread-116454] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:11:22.306 [DEBUG] [Thread-116454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:11:22.307 [DEBUG] [Thread-116454] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:11:22.307 [DEBUG] [Thread-116454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:11:22.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:11:22.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:11:22.309 [DEBUG] [Thread-116454] [transport.py] [_log()] userauth is OK
2025-12-03T12:11:22.309 [DEBUG] [Thread-116454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:11:22.310 [DEBUG] [Thread-116454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:11:22.310 [DEBUG] [Thread-116454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:11:22.310 [DEBUG] [Thread-116454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:11:22.332 [INFO] [Thread-116454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:11:22.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:11:22.972 [DEBUG] [Thread-116454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:11:22.972 [DEBUG] [Thread-116454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:11:22.972 [DEBUG] [Thread-116454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:11:23.013 [DEBUG] [Thread-116454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:11:23.013 [DEBUG] [Thread-116454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:11:23.016 [DEBUG] [Thread-116454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:11:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:11:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:11:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:11:23.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:11:23.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:11:23.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:11:23.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:11:23.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:11:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.424008 -999.00  +19.80  18.50     32   +2.90 1 1 1 1 1   888    0 15.98 22.20 ----- 17.0 18.5 176.0 20.7 27.5 -24.0 26.4 -24.8 26.9 -22.1 27.8 -22.7
2025-12-03T12:11:23.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:11:23.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:11:23.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.424008
2025-12-03T12:11:23.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:11:23.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:11:23.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:11:23.043 [DEBUG] [Thread-116454] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:11:23.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:11:23.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:11:23.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:11:02', tmtdew=17.34, humidity=31.44, cloud=0.0, wind=17.98, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:10:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:11:23.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:11:23.138 [DEBUG] [Thread-116457] [transport.py] [_log()] starting thread (client mode): 0xa7bd1f60
2025-12-03T12:11:23.138 [DEBUG] [Thread-116457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:11:23.157 [DEBUG] [Thread-116457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:11:23.157 [INFO] [Thread-116457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:23.165 [DEBUG] [Thread-116457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] client lang: <none>
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] server lang: <none>
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] kex follows: False
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] Compression: none
2025-12-03T12:11:23.166 [DEBUG] [Thread-116457] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:11:23.222 [DEBUG] [Thread-116457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:11:23.223 [DEBUG] [Thread-116457] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:11:23.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:11:23.224 [DEBUG] [Thread-116457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:11:23.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:11:23.279 [DEBUG] [Thread-116457] [transport.py] [_log()] userauth is OK
2025-12-03T12:11:23.279 [DEBUG] [Thread-116457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:11:23.279 [DEBUG] [Thread-116457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:11:23.279 [DEBUG] [Thread-116457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:11:23.279 [DEBUG] [Thread-116457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:11:23.299 [INFO] [Thread-116457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:11:23.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:11:23.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:11:24.161 [DEBUG] [Thread-116457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:11:24.161 [DEBUG] [Thread-116457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:11:24.209 [DEBUG] [Thread-116457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:11:24.209 [DEBUG] [Thread-116457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:11:24.218 [DEBUG] [Thread-116457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:11:24.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:11:24.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:11:24.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:11:24.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:11:24.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:11:24.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:11:24.254 [DEBUG] [Thread-116457] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:11:29.890 [DEBUG] [Thread-116459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:44.889 [DEBUG] [Thread-116460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:44.931 [DEBUG] [Thread-116461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:11:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:11:54.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:11:54.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:11:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 11, 34), 18.15, 29.67, 0.0, 20.8, 19.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:11:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:11:34
2025-12-03T12:11:55.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:11:55.198 [DEBUG] [Thread-116462] [transport.py] [_log()] starting thread (client mode): 0xa27b7be0
2025-12-03T12:11:55.199 [DEBUG] [Thread-116462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:11:55.218 [DEBUG] [Thread-116462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:11:55.218 [INFO] [Thread-116462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:55.221 [DEBUG] [Thread-116462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] client lang: <none>
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] server lang: <none>
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] kex follows: False
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:11:55.222 [DEBUG] [Thread-116462] [transport.py] [_log()] Compression: none
2025-12-03T12:11:55.223 [DEBUG] [Thread-116462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:11:55.241 [DEBUG] [Thread-116462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:11:55.241 [DEBUG] [Thread-116462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:11:55.242 [DEBUG] [Thread-116462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:11:55.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:11:55.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:11:55.243 [DEBUG] [Thread-116462] [transport.py] [_log()] userauth is OK
2025-12-03T12:11:55.244 [DEBUG] [Thread-116462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:11:55.244 [DEBUG] [Thread-116462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:11:55.244 [DEBUG] [Thread-116462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:11:55.244 [DEBUG] [Thread-116462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:11:55.261 [INFO] [Thread-116462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:11:55.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:11:55.894 [DEBUG] [Thread-116462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:11:55.894 [DEBUG] [Thread-116462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:11:55.895 [DEBUG] [Thread-116462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:11:55.935 [DEBUG] [Thread-116462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:11:55.935 [DEBUG] [Thread-116462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:11:55.938 [DEBUG] [Thread-116462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:11:55.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:11:55.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:11:55.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:11:55.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:11:55.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:11:55.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:11:55.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.424356 -999.00  +20.00  15.34     34   +4.00 1 1 1 1 1   888    0 16.30 22.73 ----- 14.9 15.3 180.8 19.5 27.4 -23.1 26.3 -25.3 26.8 -21.4 27.6 -22.4
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:11:55.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.424356
2025-12-03T12:11:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:11:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:11:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:11:55.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:11:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:11:55.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:11:34', tmtdew=18.15, humidity=29.67, cloud=0.0, wind=20.8, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:11:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:11:55.963 [DEBUG] [Thread-116462] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:11:56.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:11:56.059 [DEBUG] [Thread-116465] [transport.py] [_log()] starting thread (client mode): 0xa5162230
2025-12-03T12:11:56.059 [DEBUG] [Thread-116465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:11:56.074 [DEBUG] [Thread-116465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:11:56.074 [INFO] [Thread-116465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:11:56.081 [DEBUG] [Thread-116465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] client lang: <none>
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] server lang: <none>
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] kex follows: False
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] Compression: none
2025-12-03T12:11:56.082 [DEBUG] [Thread-116465] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:11:56.145 [DEBUG] [Thread-116465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:11:56.145 [DEBUG] [Thread-116465] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:11:56.146 [DEBUG] [Thread-116465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:11:56.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:11:56.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:11:56.202 [DEBUG] [Thread-116465] [transport.py] [_log()] userauth is OK
2025-12-03T12:11:56.202 [DEBUG] [Thread-116465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:11:56.202 [DEBUG] [Thread-116465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:11:56.202 [DEBUG] [Thread-116465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:11:56.202 [DEBUG] [Thread-116465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:11:56.221 [INFO] [Thread-116465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:11:56.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:11:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:11:57.037 [DEBUG] [Thread-116465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:11:57.037 [DEBUG] [Thread-116465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:11:57.085 [DEBUG] [Thread-116465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:11:57.085 [DEBUG] [Thread-116465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:11:57.093 [DEBUG] [Thread-116465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:11:57.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:11:57.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:11:57.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:11:57.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:11:57.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:11:57.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:11:57.127 [DEBUG] [Thread-116465] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:11:59.960 [DEBUG] [Thread-116467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:00.748 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:00.750 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:15.000 [DEBUG] [Thread-116468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:27.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:12:27.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:12:27.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:12:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 12, 6), 18.11, 29.72, 0.0, 19.14, 19.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:12:27.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:12:06
2025-12-03T12:12:27.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:12:28.087 [DEBUG] [Thread-116469] [transport.py] [_log()] starting thread (client mode): 0xa5163b80
2025-12-03T12:12:28.087 [DEBUG] [Thread-116469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:12:28.106 [DEBUG] [Thread-116469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:12:28.107 [INFO] [Thread-116469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] client lang: <none>
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] server lang: <none>
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] kex follows: False
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] Compression: none
2025-12-03T12:12:28.108 [DEBUG] [Thread-116469] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:12:28.118 [DEBUG] [Thread-116469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:12:28.118 [DEBUG] [Thread-116469] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:12:28.118 [DEBUG] [Thread-116469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:12:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:12:28.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:12:28.120 [DEBUG] [Thread-116469] [transport.py] [_log()] userauth is OK
2025-12-03T12:12:28.120 [DEBUG] [Thread-116469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:12:28.120 [DEBUG] [Thread-116469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:12:28.120 [DEBUG] [Thread-116469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:12:28.120 [DEBUG] [Thread-116469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:12:28.144 [INFO] [Thread-116469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:12:28.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:12:28.764 [DEBUG] [Thread-116469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:12:28.765 [DEBUG] [Thread-116469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:12:28.765 [DEBUG] [Thread-116469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:12:28.806 [DEBUG] [Thread-116469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:12:28.806 [DEBUG] [Thread-116469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:12:28.809 [DEBUG] [Thread-116469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:12:28.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:12:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:12:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:12:28.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:12:28.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:12:28.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:12:28.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:12:28.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:12:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:12:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.425050 -999.00  +19.90  15.47     35   +4.10 1 1 1 1 1   888    0 15.91 12.25 ----- 13.4 15.5 181.6 22.8 27.1 -24.5 26.0 -28.1 26.6 -22.5 27.5 -23.4
2025-12-03T12:12:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:12:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:12:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.425050
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:12:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:12:06', tmtdew=18.11, humidity=29.72, cloud=0.0, wind=19.14, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:12:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:12:28.834 [DEBUG] [Thread-116469] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:12:28.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:12:28.931 [DEBUG] [Thread-116472] [transport.py] [_log()] starting thread (client mode): 0xa7bd0940
2025-12-03T12:12:28.931 [DEBUG] [Thread-116472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:12:28.946 [DEBUG] [Thread-116472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:12:28.946 [INFO] [Thread-116472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:12:28.954 [DEBUG] [Thread-116472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] client lang: <none>
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] server lang: <none>
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] kex follows: False
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:12:28.955 [DEBUG] [Thread-116472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:12:28.956 [DEBUG] [Thread-116472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:12:28.956 [DEBUG] [Thread-116472] [transport.py] [_log()] Compression: none
2025-12-03T12:12:28.956 [DEBUG] [Thread-116472] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:12:29.013 [DEBUG] [Thread-116472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:12:29.013 [DEBUG] [Thread-116472] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:12:29.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:12:29.015 [DEBUG] [Thread-116472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:12:29.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:12:29.069 [DEBUG] [Thread-116472] [transport.py] [_log()] userauth is OK
2025-12-03T12:12:29.069 [DEBUG] [Thread-116472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:12:29.069 [DEBUG] [Thread-116472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:12:29.069 [DEBUG] [Thread-116472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:12:29.070 [DEBUG] [Thread-116472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:12:29.092 [INFO] [Thread-116472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:12:29.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:12:29.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:12:29.970 [DEBUG] [Thread-116472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:12:29.970 [DEBUG] [Thread-116472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:12:30.018 [DEBUG] [Thread-116472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:12:30.018 [DEBUG] [Thread-116472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:12:30.027 [DEBUG] [Thread-116472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:12:30.029 [DEBUG] [Thread-116474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:30.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:12:30.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:12:30.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:12:30.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:12:30.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:12:30.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:12:30.062 [DEBUG] [Thread-116472] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:12:44.932 [DEBUG] [Thread-116475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:12:45.073 [DEBUG] [Thread-116476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:00.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:13:00.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:13:00.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:13:00.103 [DEBUG] [Thread-116477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 12, 38), 17.34, 31.34, 0.0, 17.27, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:13:00.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:12:38
2025-12-03T12:13:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:13:00.891 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:00.892 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:01.001 [DEBUG] [Thread-116478] [transport.py] [_log()] starting thread (client mode): 0xa27084f0
2025-12-03T12:13:01.002 [DEBUG] [Thread-116478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:13:01.022 [DEBUG] [Thread-116478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:13:01.022 [INFO] [Thread-116478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] client lang: <none>
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] server lang: <none>
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] kex follows: False
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] Compression: none
2025-12-03T12:13:01.025 [DEBUG] [Thread-116478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:13:01.033 [DEBUG] [Thread-116478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:13:01.034 [DEBUG] [Thread-116478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:13:01.034 [DEBUG] [Thread-116478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:13:01.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:13:01.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:13:01.035 [DEBUG] [Thread-116478] [transport.py] [_log()] userauth is OK
2025-12-03T12:13:01.036 [DEBUG] [Thread-116478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:13:01.036 [DEBUG] [Thread-116478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:13:01.036 [DEBUG] [Thread-116478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:13:01.036 [DEBUG] [Thread-116478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:13:01.058 [INFO] [Thread-116478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:13:01.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:13:01.655 [DEBUG] [Thread-116478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:13:01.655 [DEBUG] [Thread-116478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:13:01.655 [DEBUG] [Thread-116478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:13:01.696 [DEBUG] [Thread-116478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:13:01.696 [DEBUG] [Thread-116478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:13:01.699 [DEBUG] [Thread-116478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:13:01.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:13:01.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:13:01.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:13:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:13:01.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:13:01.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:13:01.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:13:01.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.425398 -999.00  +19.50  17.50     35   +3.90 1 1 1 1 1   888    0 15.75 5.24 ----- 20.5 17.5 166.0 26.2 27.1 -23.3 26.1 -28.4 26.4 -21.5 27.2 -22.0
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.425398
2025-12-03T12:13:01.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:13:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:13:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:13:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:13:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:13:01.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:12:38', tmtdew=17.34, humidity=31.34, cloud=0.0, wind=17.27, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:12:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:13:01.726 [DEBUG] [Thread-116478] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:13:01.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:13:01.813 [DEBUG] [Thread-116481] [transport.py] [_log()] starting thread (client mode): 0xa27c21a0
2025-12-03T12:13:01.813 [DEBUG] [Thread-116481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:13:01.828 [DEBUG] [Thread-116481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:13:01.828 [INFO] [Thread-116481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:13:01.835 [DEBUG] [Thread-116481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:13:01.835 [DEBUG] [Thread-116481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:13:01.835 [DEBUG] [Thread-116481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] client lang: <none>
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] server lang: <none>
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] kex follows: False
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] Compression: none
2025-12-03T12:13:01.836 [DEBUG] [Thread-116481] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:13:01.894 [DEBUG] [Thread-116481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:13:01.895 [DEBUG] [Thread-116481] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:13:01.895 [DEBUG] [Thread-116481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:13:01.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:13:01.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:13:01.951 [DEBUG] [Thread-116481] [transport.py] [_log()] userauth is OK
2025-12-03T12:13:01.951 [DEBUG] [Thread-116481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:13:01.951 [DEBUG] [Thread-116481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:13:01.951 [DEBUG] [Thread-116481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:13:01.951 [DEBUG] [Thread-116481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:13:01.969 [INFO] [Thread-116481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:13:01.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:13:01.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:13:02.845 [DEBUG] [Thread-116481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:13:02.846 [DEBUG] [Thread-116481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:13:02.893 [DEBUG] [Thread-116481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:13:02.893 [DEBUG] [Thread-116481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:13:02.902 [DEBUG] [Thread-116481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:13:02.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:13:02.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:13:02.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:13:02.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:13:02.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:13:02.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:13:02.937 [DEBUG] [Thread-116481] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:13:15.127 [DEBUG] [Thread-116483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:30.165 [DEBUG] [Thread-116484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:32.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:13:32.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:13:32.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:13:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 13, 10), 17.37, 31.29, 0.0, 18.95, 18.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:13:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:13:10
2025-12-03T12:13:33.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:13:33.906 [DEBUG] [Thread-116485] [transport.py] [_log()] starting thread (client mode): 0xa7bd23b0
2025-12-03T12:13:33.906 [DEBUG] [Thread-116485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:13:33.928 [DEBUG] [Thread-116485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:13:33.928 [INFO] [Thread-116485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] client lang: <none>
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] server lang: <none>
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] kex follows: False
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] Compression: none
2025-12-03T12:13:33.931 [DEBUG] [Thread-116485] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:13:33.944 [DEBUG] [Thread-116485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:13:33.945 [DEBUG] [Thread-116485] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:13:33.945 [DEBUG] [Thread-116485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:13:33.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:13:33.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:13:33.947 [DEBUG] [Thread-116485] [transport.py] [_log()] userauth is OK
2025-12-03T12:13:33.947 [DEBUG] [Thread-116485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:13:33.947 [DEBUG] [Thread-116485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:13:33.947 [DEBUG] [Thread-116485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:13:33.948 [DEBUG] [Thread-116485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:13:33.985 [INFO] [Thread-116485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:13:33.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:13:34.627 [DEBUG] [Thread-116485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:13:34.627 [DEBUG] [Thread-116485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:13:34.628 [DEBUG] [Thread-116485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:13:34.668 [DEBUG] [Thread-116485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:13:34.668 [DEBUG] [Thread-116485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:13:34.671 [DEBUG] [Thread-116485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:13:34.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:13:34.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:13:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:13:34.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:13:34.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:13:34.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:13:34.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:13:34.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:13:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:13:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.425745 -999.00  +19.20  21.36     36   +3.70 1 1 1 1 1   888    0 15.67 2.52 ----- 20.4 21.4 168.3 25.4 26.8 -24.3 25.9 -22.6 26.3 -23.5 27.1 -22.7
2025-12-03T12:13:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:13:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:13:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.425745
2025-12-03T12:13:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:13:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:13:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:13:34.697 [DEBUG] [Thread-116485] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:13:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:13:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:13:34.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:13:10', tmtdew=17.37, humidity=31.29, cloud=0.0, wind=18.95, temperature=18.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:13:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:13:34.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:13:34.786 [DEBUG] [Thread-116488] [transport.py] [_log()] starting thread (client mode): 0xa27b5c30
2025-12-03T12:13:34.786 [DEBUG] [Thread-116488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:13:34.804 [DEBUG] [Thread-116488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:13:34.804 [INFO] [Thread-116488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:13:34.812 [DEBUG] [Thread-116488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] client lang: <none>
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] server lang: <none>
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] kex follows: False
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:13:34.813 [DEBUG] [Thread-116488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:13:34.814 [DEBUG] [Thread-116488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:13:34.814 [DEBUG] [Thread-116488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:13:34.814 [DEBUG] [Thread-116488] [transport.py] [_log()] Compression: none
2025-12-03T12:13:34.814 [DEBUG] [Thread-116488] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:13:34.869 [DEBUG] [Thread-116488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:13:34.869 [DEBUG] [Thread-116488] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:13:34.870 [DEBUG] [Thread-116488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:13:34.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:13:34.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:13:34.925 [DEBUG] [Thread-116488] [transport.py] [_log()] userauth is OK
2025-12-03T12:13:34.926 [DEBUG] [Thread-116488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:13:34.926 [DEBUG] [Thread-116488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:13:34.926 [DEBUG] [Thread-116488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:13:34.926 [DEBUG] [Thread-116488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:13:34.944 [INFO] [Thread-116488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:13:34.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:13:34.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:13:35.764 [DEBUG] [Thread-116488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:13:35.764 [DEBUG] [Thread-116488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:13:35.812 [DEBUG] [Thread-116488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:13:35.812 [DEBUG] [Thread-116488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:13:35.821 [DEBUG] [Thread-116488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:13:35.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:13:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:13:35.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:13:35.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:13:35.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:13:35.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:13:35.855 [DEBUG] [Thread-116488] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:13:44.980 [DEBUG] [Thread-116490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:13:45.189 [DEBUG] [Thread-116491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:00.240 [DEBUG] [Thread-116492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:01.041 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:01.042 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:14:05.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:14:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:14:06.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 13, 42), 17.21, 31.57, 0.0, 20.45, 18.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:14:06.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:13:42
2025-12-03T12:14:06.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:14:06.856 [DEBUG] [Thread-116493] [transport.py] [_log()] starting thread (client mode): 0xa27c20b0
2025-12-03T12:14:06.856 [DEBUG] [Thread-116493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:14:06.876 [DEBUG] [Thread-116493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:14:06.876 [INFO] [Thread-116493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:14:06.879 [DEBUG] [Thread-116493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:14:06.879 [DEBUG] [Thread-116493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:14:06.879 [DEBUG] [Thread-116493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:14:06.879 [DEBUG] [Thread-116493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] client lang: <none>
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] server lang: <none>
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] kex follows: False
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] Compression: none
2025-12-03T12:14:06.880 [DEBUG] [Thread-116493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:14:06.896 [DEBUG] [Thread-116493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:14:06.896 [DEBUG] [Thread-116493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:14:06.897 [DEBUG] [Thread-116493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:14:06.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:14:06.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:14:06.897 [DEBUG] [Thread-116493] [transport.py] [_log()] userauth is OK
2025-12-03T12:14:06.898 [DEBUG] [Thread-116493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:14:06.898 [DEBUG] [Thread-116493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:14:06.898 [DEBUG] [Thread-116493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:14:06.898 [DEBUG] [Thread-116493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:14:06.909 [INFO] [Thread-116493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:14:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:14:07.495 [DEBUG] [Thread-116493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:14:07.495 [DEBUG] [Thread-116493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:14:07.495 [DEBUG] [Thread-116493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:14:07.536 [DEBUG] [Thread-116493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:14:07.537 [DEBUG] [Thread-116493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:14:07.539 [DEBUG] [Thread-116493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:14:07.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:14:07.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:14:07.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:14:07.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:14:07.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:14:07.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:14:07.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:14:07.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.426092 -999.00  +18.90  16.47     35   +3.40 1 1 1 1 1   888    0 15.65 1.29 ----- 16.7 16.5 186.8 22.2 26.6 -23.9 25.5 -27.2 26.2 -22.8 26.9 -23.3
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.426092
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:14:07.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:13:42', tmtdew=17.21, humidity=31.57, cloud=0.0, wind=20.45, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:13:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:14:07.555 [DEBUG] [Thread-116493] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:14:07.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:14:07.639 [DEBUG] [Thread-116496] [transport.py] [_log()] starting thread (client mode): 0xa27c3040
2025-12-03T12:14:07.639 [DEBUG] [Thread-116496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:14:07.654 [DEBUG] [Thread-116496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:14:07.654 [INFO] [Thread-116496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] client lang: <none>
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] server lang: <none>
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] kex follows: False
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] Compression: none
2025-12-03T12:14:07.662 [DEBUG] [Thread-116496] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:14:07.723 [DEBUG] [Thread-116496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:14:07.723 [DEBUG] [Thread-116496] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:14:07.723 [DEBUG] [Thread-116496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:14:07.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:14:07.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:14:07.782 [DEBUG] [Thread-116496] [transport.py] [_log()] userauth is OK
2025-12-03T12:14:07.782 [DEBUG] [Thread-116496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:14:07.782 [DEBUG] [Thread-116496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:14:07.782 [DEBUG] [Thread-116496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:14:07.782 [DEBUG] [Thread-116496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:14:07.796 [INFO] [Thread-116496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:14:07.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:14:07.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:14:08.662 [DEBUG] [Thread-116496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:14:08.662 [DEBUG] [Thread-116496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:14:08.709 [DEBUG] [Thread-116496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:14:08.709 [DEBUG] [Thread-116496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:14:08.718 [DEBUG] [Thread-116496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:14:08.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:14:08.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:14:08.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:14:08.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:14:08.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:14:08.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:14:08.749 [DEBUG] [Thread-116496] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:14:15.267 [DEBUG] [Thread-116498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:30.301 [DEBUG] [Thread-116499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:38.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:14:38.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:14:38.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:14:39.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 14, 14), 17.37, 31.29, 0.0, 20.63, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:14:39.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:14:14
2025-12-03T12:14:39.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:14:39.727 [DEBUG] [Thread-116500] [transport.py] [_log()] starting thread (client mode): 0xa5161030
2025-12-03T12:14:39.727 [DEBUG] [Thread-116500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:14:39.746 [DEBUG] [Thread-116500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:14:39.746 [INFO] [Thread-116500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] client lang: <none>
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] server lang: <none>
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] kex follows: False
2025-12-03T12:14:39.749 [DEBUG] [Thread-116500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] Compression: none
2025-12-03T12:14:39.750 [DEBUG] [Thread-116500] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:14:39.764 [DEBUG] [Thread-116500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:14:39.765 [DEBUG] [Thread-116500] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:14:39.765 [DEBUG] [Thread-116500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:14:39.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:14:39.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:14:39.767 [DEBUG] [Thread-116500] [transport.py] [_log()] userauth is OK
2025-12-03T12:14:39.767 [DEBUG] [Thread-116500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:14:39.768 [DEBUG] [Thread-116500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:14:39.768 [DEBUG] [Thread-116500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:14:39.768 [DEBUG] [Thread-116500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:14:39.786 [INFO] [Thread-116500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:14:39.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:14:40.453 [DEBUG] [Thread-116500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:14:40.453 [DEBUG] [Thread-116500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:14:40.454 [DEBUG] [Thread-116500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:14:40.494 [DEBUG] [Thread-116500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:14:40.494 [DEBUG] [Thread-116500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:14:40.497 [DEBUG] [Thread-116500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:14:40.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:14:40.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:14:40.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:14:40.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:14:40.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:14:40.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:14:40.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:14:40.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:14:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:14:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.426439 -999.00  +18.80  15.21     35   +3.30 1 2 1 1 1   888    0 15.56 1.11 ----- 13.9 15.2 185.2 19.5 26.6 -22.1 25.5 -21.8 26.0 -22.4 26.7 -23.3
2025-12-03T12:14:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:14:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:14:40.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.426439
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:14:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:14:14', tmtdew=17.37, humidity=31.29, cloud=0.0, wind=20.63, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:14:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:14:40.523 [DEBUG] [Thread-116500] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:14:40.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:14:40.630 [DEBUG] [Thread-116503] [transport.py] [_log()] starting thread (client mode): 0xa51632e0
2025-12-03T12:14:40.630 [DEBUG] [Thread-116503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:14:40.644 [DEBUG] [Thread-116503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:14:40.644 [INFO] [Thread-116503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:40.652 [DEBUG] [Thread-116503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] client lang: <none>
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] server lang: <none>
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] kex follows: False
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:14:40.653 [DEBUG] [Thread-116503] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:14:40.654 [DEBUG] [Thread-116503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:14:40.654 [DEBUG] [Thread-116503] [transport.py] [_log()] Compression: none
2025-12-03T12:14:40.654 [DEBUG] [Thread-116503] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:14:40.711 [DEBUG] [Thread-116503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:14:40.712 [DEBUG] [Thread-116503] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:14:40.712 [DEBUG] [Thread-116503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:14:40.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:14:40.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:14:40.767 [DEBUG] [Thread-116503] [transport.py] [_log()] userauth is OK
2025-12-03T12:14:40.767 [DEBUG] [Thread-116503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:14:40.768 [DEBUG] [Thread-116503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:14:40.768 [DEBUG] [Thread-116503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:14:40.768 [DEBUG] [Thread-116503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:14:40.788 [INFO] [Thread-116503] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:14:40.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:14:40.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:14:41.625 [DEBUG] [Thread-116503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:14:41.625 [DEBUG] [Thread-116503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:14:41.674 [DEBUG] [Thread-116503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:14:41.674 [DEBUG] [Thread-116503] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:14:41.683 [DEBUG] [Thread-116503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:14:41.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:14:41.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:14:41.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:14:41.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:14:41.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:14:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:14:41.719 [DEBUG] [Thread-116503] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:14:45.027 [DEBUG] [Thread-116505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:14:45.328 [DEBUG] [Thread-116506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:00.362 [DEBUG] [Thread-116507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:01.182 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:01.183 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:11.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:15:11.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:15:11.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:15:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 14, 46), 17.88, 29.98, 0.0, 14.77, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:15:12.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:14:46
2025-12-03T12:15:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:15:12.682 [DEBUG] [Thread-116508] [transport.py] [_log()] starting thread (client mode): 0xa5162ad0
2025-12-03T12:15:12.682 [DEBUG] [Thread-116508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:15:12.696 [DEBUG] [Thread-116508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:15:12.696 [INFO] [Thread-116508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] client lang: <none>
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] server lang: <none>
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] kex follows: False
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:15:12.699 [DEBUG] [Thread-116508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:15:12.700 [DEBUG] [Thread-116508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:15:12.700 [DEBUG] [Thread-116508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:15:12.700 [DEBUG] [Thread-116508] [transport.py] [_log()] Compression: none
2025-12-03T12:15:12.700 [DEBUG] [Thread-116508] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:15:12.716 [DEBUG] [Thread-116508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:15:12.717 [DEBUG] [Thread-116508] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:15:12.717 [DEBUG] [Thread-116508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:15:12.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:15:12.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:15:12.720 [DEBUG] [Thread-116508] [transport.py] [_log()] userauth is OK
2025-12-03T12:15:12.720 [DEBUG] [Thread-116508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:15:12.720 [DEBUG] [Thread-116508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:15:12.720 [DEBUG] [Thread-116508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:15:12.720 [DEBUG] [Thread-116508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:15:12.744 [INFO] [Thread-116508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:15:12.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:15:13.583 [DEBUG] [Thread-116508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:15:13.583 [DEBUG] [Thread-116508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:15:13.584 [DEBUG] [Thread-116508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:15:13.625 [DEBUG] [Thread-116508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:15:13.625 [DEBUG] [Thread-116508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:15:13.628 [DEBUG] [Thread-116508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:15:13.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:15:13.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:15:13.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:15:13.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:15:13.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:15:13.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:15:13.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:15:13.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:15:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:15:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.426786 -999.00  +18.80  12.67     35   +3.40 1 2 1 1 1   888    0 15.54 4.31 ----- 12.3 12.7 177.2 17.6 26.6 -22.6 25.6 -23.2 26.1 -21.5 26.8 -21.8
2025-12-03T12:15:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:15:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:15:13.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.426786
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:15:13.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:14:46', tmtdew=17.88, humidity=29.98, cloud=0.0, wind=14.77, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:14:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:15:13.652 [DEBUG] [Thread-116508] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:15:13.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:15:13.749 [DEBUG] [Thread-116511] [transport.py] [_log()] starting thread (client mode): 0xa7bd3250
2025-12-03T12:15:13.749 [DEBUG] [Thread-116511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:15:13.764 [DEBUG] [Thread-116511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:15:13.764 [INFO] [Thread-116511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:15:13.771 [DEBUG] [Thread-116511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:15:13.771 [DEBUG] [Thread-116511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] client lang: <none>
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] server lang: <none>
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] kex follows: False
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:15:13.772 [DEBUG] [Thread-116511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:15:13.773 [DEBUG] [Thread-116511] [transport.py] [_log()] Compression: none
2025-12-03T12:15:13.773 [DEBUG] [Thread-116511] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:15:13.832 [DEBUG] [Thread-116511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:15:13.832 [DEBUG] [Thread-116511] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:15:13.833 [DEBUG] [Thread-116511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:15:13.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:15:13.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:15:13.890 [DEBUG] [Thread-116511] [transport.py] [_log()] userauth is OK
2025-12-03T12:15:13.890 [DEBUG] [Thread-116511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:15:13.891 [DEBUG] [Thread-116511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:15:13.891 [DEBUG] [Thread-116511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:15:13.891 [DEBUG] [Thread-116511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:15:13.912 [INFO] [Thread-116511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:15:13.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:15:13.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:15:14.761 [DEBUG] [Thread-116511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:15:14.761 [DEBUG] [Thread-116511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:15:14.809 [DEBUG] [Thread-116511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:15:14.809 [DEBUG] [Thread-116511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:15:14.818 [DEBUG] [Thread-116511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:15:14.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:15:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:15:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:15:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:15:14.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:15:14.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:15:14.853 [DEBUG] [Thread-116511] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:15:15.396 [DEBUG] [Thread-116513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:30.435 [DEBUG] [Thread-116514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:44.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:15:44.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:15:44.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:15:45.062 [DEBUG] [Thread-116515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:45.469 [DEBUG] [Thread-116516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:15:45.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 15, 18), 17.81, 30.14, 0.0, 14.75, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:15:45.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:15:18
2025-12-03T12:15:45.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:15:45.824 [DEBUG] [Thread-116517] [transport.py] [_log()] starting thread (client mode): 0xa27c3d60
2025-12-03T12:15:45.824 [DEBUG] [Thread-116517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:15:45.839 [DEBUG] [Thread-116517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:15:45.839 [INFO] [Thread-116517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:15:45.842 [DEBUG] [Thread-116517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:15:45.842 [DEBUG] [Thread-116517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:15:45.842 [DEBUG] [Thread-116517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:15:45.842 [DEBUG] [Thread-116517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] client lang: <none>
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] server lang: <none>
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] kex follows: False
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] Compression: none
2025-12-03T12:15:45.843 [DEBUG] [Thread-116517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:15:45.860 [DEBUG] [Thread-116517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:15:45.861 [DEBUG] [Thread-116517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:15:45.861 [DEBUG] [Thread-116517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:15:45.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:15:45.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:15:45.863 [DEBUG] [Thread-116517] [transport.py] [_log()] userauth is OK
2025-12-03T12:15:45.863 [DEBUG] [Thread-116517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:15:45.863 [DEBUG] [Thread-116517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:15:45.863 [DEBUG] [Thread-116517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:15:45.863 [DEBUG] [Thread-116517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:15:45.880 [INFO] [Thread-116517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:15:45.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:15:46.500 [DEBUG] [Thread-116517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:15:46.500 [DEBUG] [Thread-116517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:15:46.501 [DEBUG] [Thread-116517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:15:46.543 [DEBUG] [Thread-116517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:15:46.543 [DEBUG] [Thread-116517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:15:46.545 [DEBUG] [Thread-116517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:15:46.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:15:46.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:15:46.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:15:46.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:15:46.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:15:46.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:15:46.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:15:46.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.427133 -999.00  +18.90  11.32     36   +3.50 1 2 1 1 1   888    0 15.89 8.95 ----- 11.0 11.3 189.4 13.8 26.6 -22.3 25.6 -22.7 26.1 -21.1 26.8 -22.2
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.427133
2025-12-03T12:15:46.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:15:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:15:46.568 [DEBUG] [Thread-116517] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:15:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:15:46.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:15:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:15:46.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:15:18', tmtdew=17.81, humidity=30.14, cloud=0.0, wind=14.75, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:15:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:15:46.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:16:00.499 [DEBUG] [Thread-116520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:01.320 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:01.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:15.537 [DEBUG] [Thread-116521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:30.565 [DEBUG] [Thread-116522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:45.091 [DEBUG] [Thread-116523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:16:45.598 [DEBUG] [Thread-116524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:00.625 [DEBUG] [Thread-116525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:01.459 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:01.460 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:15.655 [DEBUG] [Thread-116526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:30.683 [DEBUG] [Thread-116527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:45.131 [DEBUG] [Thread-116528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:45.714 [DEBUG] [Thread-116529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:17:59.702 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T12:18:00.742 [DEBUG] [Thread-116530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:01.602 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:01.603 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:15.772 [DEBUG] [Thread-116531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:29.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:18:29.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:18:29.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:18:30.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 17, 59), 18.12, 29.38, 0.0, 15.37, 18.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:18:30.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:17:59
2025-12-03T12:18:30.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:18:30.676 [DEBUG] [Thread-116532] [transport.py] [_log()] starting thread (client mode): 0xa2784cd0
2025-12-03T12:18:30.676 [DEBUG] [Thread-116532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:18:30.696 [DEBUG] [Thread-116532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:18:30.696 [INFO] [Thread-116532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:18:30.699 [DEBUG] [Thread-116532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] client lang: <none>
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] server lang: <none>
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] kex follows: False
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] Compression: none
2025-12-03T12:18:30.700 [DEBUG] [Thread-116532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:18:30.717 [DEBUG] [Thread-116532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:18:30.717 [DEBUG] [Thread-116532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:18:30.718 [DEBUG] [Thread-116532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:18:30.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:18:30.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:18:30.720 [DEBUG] [Thread-116532] [transport.py] [_log()] userauth is OK
2025-12-03T12:18:30.720 [DEBUG] [Thread-116532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:18:30.720 [DEBUG] [Thread-116532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:18:30.720 [DEBUG] [Thread-116532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:18:30.720 [DEBUG] [Thread-116532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:18:30.738 [INFO] [Thread-116532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:18:30.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:18:30.801 [DEBUG] [Thread-116534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:31.377 [DEBUG] [Thread-116532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:18:31.378 [DEBUG] [Thread-116532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:18:31.378 [DEBUG] [Thread-116532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:18:31.419 [DEBUG] [Thread-116532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:18:31.420 [DEBUG] [Thread-116532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:18:31.422 [DEBUG] [Thread-116532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:18:31.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:18:31.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:18:31.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:18:31.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:18:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:18:31.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:18:31.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:18:31.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.429217 -999.00  +19.30  14.14     35   +3.40 1 2 1 1 1   888    0 16.33 23.06 ----- 14.3 14.1 119.2 18.9 26.7 -22.3 26.2 -21.2 26.4 -20.1 27.0 -21.5
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.429217
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:18:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:17:59', tmtdew=18.12, humidity=29.38, cloud=0.0, wind=15.37, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:18:04.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:18:31.440 [DEBUG] [Thread-116532] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:18:31.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:18:31.524 [DEBUG] [Thread-116536] [transport.py] [_log()] starting thread (client mode): 0xa51999f0
2025-12-03T12:18:31.524 [DEBUG] [Thread-116536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:18:31.539 [DEBUG] [Thread-116536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:18:31.539 [INFO] [Thread-116536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] client lang: <none>
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] server lang: <none>
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] kex follows: False
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] Compression: none
2025-12-03T12:18:31.547 [DEBUG] [Thread-116536] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:18:31.605 [DEBUG] [Thread-116536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:18:31.605 [DEBUG] [Thread-116536] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:18:31.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:18:31.606 [DEBUG] [Thread-116536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:18:31.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:18:31.662 [DEBUG] [Thread-116536] [transport.py] [_log()] userauth is OK
2025-12-03T12:18:31.662 [DEBUG] [Thread-116536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:18:31.662 [DEBUG] [Thread-116536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:18:31.662 [DEBUG] [Thread-116536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:18:31.663 [DEBUG] [Thread-116536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:18:31.683 [INFO] [Thread-116536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:18:31.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:18:31.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:18:32.532 [DEBUG] [Thread-116536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:18:32.532 [DEBUG] [Thread-116536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:18:32.582 [DEBUG] [Thread-116536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:18:32.582 [DEBUG] [Thread-116536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:18:32.592 [DEBUG] [Thread-116536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:18:32.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:18:32.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:18:32.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:18:32.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:18:32.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:18:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:18:32.632 [DEBUG] [Thread-116536] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:18:45.176 [DEBUG] [Thread-116538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:18:45.832 [DEBUG] [Thread-116539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:00.876 [DEBUG] [Thread-116540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:01.743 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:01.745 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:02.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:19:02.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:19:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:19:03.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 18, 31), 17.91, 29.76, 0.0, 17.47, 18.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:19:03.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:18:31
2025-12-03T12:19:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:19:03.619 [DEBUG] [Thread-116541] [transport.py] [_log()] starting thread (client mode): 0xa7bd3eb0
2025-12-03T12:19:03.619 [DEBUG] [Thread-116541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:19:03.640 [DEBUG] [Thread-116541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:19:03.640 [INFO] [Thread-116541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] client lang: <none>
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] server lang: <none>
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] kex follows: False
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] Compression: none
2025-12-03T12:19:03.643 [DEBUG] [Thread-116541] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:19:03.661 [DEBUG] [Thread-116541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:19:03.661 [DEBUG] [Thread-116541] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:19:03.661 [DEBUG] [Thread-116541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:19:03.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:19:03.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:19:03.662 [DEBUG] [Thread-116541] [transport.py] [_log()] userauth is OK
2025-12-03T12:19:03.662 [DEBUG] [Thread-116541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:19:03.662 [DEBUG] [Thread-116541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:19:03.662 [DEBUG] [Thread-116541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:19:03.662 [DEBUG] [Thread-116541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:19:03.671 [INFO] [Thread-116541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:19:03.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:19:04.300 [DEBUG] [Thread-116541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:19:04.300 [DEBUG] [Thread-116541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:19:04.300 [DEBUG] [Thread-116541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:19:04.341 [DEBUG] [Thread-116541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:19:04.341 [DEBUG] [Thread-116541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:19:04.343 [DEBUG] [Thread-116541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:19:04.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:19:04.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:19:04.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:19:04.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:19:04.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:19:04.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:19:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.429564 -999.00  +19.20  18.42     34   +3.00 1 2 1 1 1   888    0 16.36 24.58 ----- 17.2 18.4 134.4 21.7 26.9 -20.5 26.4 -19.3 26.5 -20.3 27.2 -21.6
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.429564
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:19:04.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:19:04.357 [DEBUG] [Thread-116541] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:19:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:19:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:19:04.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:18:31', tmtdew=17.91, humidity=29.76, cloud=0.0, wind=17.47, temperature=18.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:18:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:19:04.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:19:04.444 [DEBUG] [Thread-116544] [transport.py] [_log()] starting thread (client mode): 0xa5162c20
2025-12-03T12:19:04.444 [DEBUG] [Thread-116544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:19:04.458 [DEBUG] [Thread-116544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:19:04.459 [INFO] [Thread-116544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] client lang: <none>
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] server lang: <none>
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] kex follows: False
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:19:04.466 [DEBUG] [Thread-116544] [transport.py] [_log()] Compression: none
2025-12-03T12:19:04.467 [DEBUG] [Thread-116544] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:19:04.525 [DEBUG] [Thread-116544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:19:04.526 [DEBUG] [Thread-116544] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:19:04.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:19:04.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:19:04.526 [DEBUG] [Thread-116544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:19:04.583 [DEBUG] [Thread-116544] [transport.py] [_log()] userauth is OK
2025-12-03T12:19:04.583 [DEBUG] [Thread-116544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:19:04.583 [DEBUG] [Thread-116544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:19:04.583 [DEBUG] [Thread-116544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:19:04.583 [DEBUG] [Thread-116544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:19:04.597 [INFO] [Thread-116544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:19:04.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:19:04.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:19:05.454 [DEBUG] [Thread-116544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:19:05.454 [DEBUG] [Thread-116544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:19:05.504 [DEBUG] [Thread-116544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:19:05.505 [DEBUG] [Thread-116544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:19:05.518 [DEBUG] [Thread-116544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:19:05.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:19:05.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:19:05.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:19:05.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:19:05.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:19:05.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:19:05.552 [DEBUG] [Thread-116544] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:19:15.900 [DEBUG] [Thread-116546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:30.930 [DEBUG] [Thread-116547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:19:35.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:19:35.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:19:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 19, 3), 17.82, 29.94, 0.0, 12.35, 18.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:19:36.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:19:03
2025-12-03T12:19:36.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:19:36.583 [DEBUG] [Thread-116548] [transport.py] [_log()] starting thread (client mode): 0xa7bd1960
2025-12-03T12:19:36.584 [DEBUG] [Thread-116548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:19:36.604 [DEBUG] [Thread-116548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:19:36.604 [INFO] [Thread-116548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] client lang: <none>
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] server lang: <none>
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] kex follows: False
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] Compression: none
2025-12-03T12:19:36.607 [DEBUG] [Thread-116548] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:19:36.623 [DEBUG] [Thread-116548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:19:36.623 [DEBUG] [Thread-116548] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:19:36.623 [DEBUG] [Thread-116548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:19:36.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:19:36.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:19:36.624 [DEBUG] [Thread-116548] [transport.py] [_log()] userauth is OK
2025-12-03T12:19:36.624 [DEBUG] [Thread-116548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:19:36.624 [DEBUG] [Thread-116548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:19:36.624 [DEBUG] [Thread-116548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:19:36.624 [DEBUG] [Thread-116548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:19:36.633 [INFO] [Thread-116548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:19:36.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:19:37.281 [DEBUG] [Thread-116548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:19:37.281 [DEBUG] [Thread-116548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:19:37.281 [DEBUG] [Thread-116548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:19:37.323 [DEBUG] [Thread-116548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:19:37.323 [DEBUG] [Thread-116548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:19:37.326 [DEBUG] [Thread-116548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:19:37.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:19:37.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:19:37.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:19:37.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:19:37.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:19:37.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:19:37.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.429911 -999.00  +19.00  13.55     34   +3.00 1 2 1 1 1   888    0 16.23 26.19 ----- 11.7 13.6 149.1 19.9 27.0 -21.1 26.4 -21.4 26.6 -20.7 27.1 -21.8
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:19:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.429911
2025-12-03T12:19:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:19:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:19:37.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:19:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:19:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:19:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:19:03', tmtdew=17.82, humidity=29.94, cloud=0.0, wind=12.35, temperature=18.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:19:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:19:37.351 [DEBUG] [Thread-116548] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:19:37.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:19:37.448 [DEBUG] [Thread-116551] [transport.py] [_log()] starting thread (client mode): 0xa7bd1db0
2025-12-03T12:19:37.448 [DEBUG] [Thread-116551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:19:37.464 [DEBUG] [Thread-116551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:19:37.464 [INFO] [Thread-116551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:19:37.472 [DEBUG] [Thread-116551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] client lang: <none>
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] server lang: <none>
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] kex follows: False
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] Compression: none
2025-12-03T12:19:37.473 [DEBUG] [Thread-116551] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:19:37.533 [DEBUG] [Thread-116551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:19:37.533 [DEBUG] [Thread-116551] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:19:37.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:19:37.535 [DEBUG] [Thread-116551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:19:37.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:19:37.592 [DEBUG] [Thread-116551] [transport.py] [_log()] userauth is OK
2025-12-03T12:19:37.592 [DEBUG] [Thread-116551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:19:37.592 [DEBUG] [Thread-116551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:19:37.592 [DEBUG] [Thread-116551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:19:37.592 [DEBUG] [Thread-116551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:19:37.611 [INFO] [Thread-116551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:19:37.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:19:37.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:19:38.420 [DEBUG] [Thread-116551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:19:38.420 [DEBUG] [Thread-116551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:19:38.468 [DEBUG] [Thread-116551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:19:38.468 [DEBUG] [Thread-116551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:19:38.477 [DEBUG] [Thread-116551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:19:38.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:19:38.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:19:38.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:19:38.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:19:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:19:38.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:19:38.512 [DEBUG] [Thread-116551] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:19:45.217 [DEBUG] [Thread-116553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:19:45.960 [DEBUG] [Thread-116554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:01.001 [DEBUG] [Thread-116555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:01.888 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:01.889 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:08.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:20:08.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:20:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:20:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 19, 35), 18.34, 28.94, 0.0, 16.96, 18.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:20:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:19:35
2025-12-03T12:20:09.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:20:09.533 [DEBUG] [Thread-116556] [transport.py] [_log()] starting thread (client mode): 0xa2786a40
2025-12-03T12:20:09.533 [DEBUG] [Thread-116556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:20:09.552 [DEBUG] [Thread-116556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:20:09.552 [INFO] [Thread-116556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] client lang: <none>
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] server lang: <none>
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] kex follows: False
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] Compression: none
2025-12-03T12:20:09.555 [DEBUG] [Thread-116556] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:20:09.570 [DEBUG] [Thread-116556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:20:09.571 [DEBUG] [Thread-116556] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:20:09.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:20:09.572 [DEBUG] [Thread-116556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:20:09.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:20:09.573 [DEBUG] [Thread-116556] [transport.py] [_log()] userauth is OK
2025-12-03T12:20:09.573 [DEBUG] [Thread-116556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:20:09.573 [DEBUG] [Thread-116556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:20:09.573 [DEBUG] [Thread-116556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:20:09.573 [DEBUG] [Thread-116556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:20:09.588 [INFO] [Thread-116556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:20:09.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:20:10.383 [DEBUG] [Thread-116556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:20:10.384 [DEBUG] [Thread-116556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:20:10.384 [DEBUG] [Thread-116556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:20:10.425 [DEBUG] [Thread-116556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:20:10.425 [DEBUG] [Thread-116556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:20:10.428 [DEBUG] [Thread-116556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:20:10.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:20:10.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:20:10.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:20:10.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:20:10.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:20:10.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:20:10.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:20:10.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:20:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:20:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.430258 -999.00  +18.80  11.21     34   +2.60 1 2 1 1 1   888    0 16.45 31.23 ----- 12.7 11.2 168.1 18.8 26.9 -22.4 26.4 -21.3 26.4 -21.3 27.1 -22.9
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.430258
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:20:10.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:20:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:19:35', tmtdew=18.34, humidity=28.94, cloud=0.0, wind=16.96, temperature=18.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:19:34.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:20:10.445 [DEBUG] [Thread-116556] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:20:10.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:20:10.531 [DEBUG] [Thread-116559] [transport.py] [_log()] starting thread (client mode): 0xa519bbe0
2025-12-03T12:20:10.531 [DEBUG] [Thread-116559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:20:10.546 [DEBUG] [Thread-116559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:20:10.546 [INFO] [Thread-116559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:20:10.554 [DEBUG] [Thread-116559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] client lang: <none>
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] server lang: <none>
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] kex follows: False
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] Compression: none
2025-12-03T12:20:10.555 [DEBUG] [Thread-116559] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:20:10.611 [DEBUG] [Thread-116559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:20:10.611 [DEBUG] [Thread-116559] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:20:10.612 [DEBUG] [Thread-116559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:20:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:20:10.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:20:10.667 [DEBUG] [Thread-116559] [transport.py] [_log()] userauth is OK
2025-12-03T12:20:10.668 [DEBUG] [Thread-116559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:20:10.668 [DEBUG] [Thread-116559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:20:10.668 [DEBUG] [Thread-116559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:20:10.668 [DEBUG] [Thread-116559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:20:10.686 [INFO] [Thread-116559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:20:10.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:20:10.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:20:11.524 [DEBUG] [Thread-116559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:20:11.524 [DEBUG] [Thread-116559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:20:11.572 [DEBUG] [Thread-116559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:20:11.572 [DEBUG] [Thread-116559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:20:11.581 [DEBUG] [Thread-116559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:20:11.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:20:11.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:20:11.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:20:11.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:20:11.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:20:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:20:11.615 [DEBUG] [Thread-116559] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:20:16.030 [DEBUG] [Thread-116561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:31.078 [DEBUG] [Thread-116562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:41.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:20:41.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:20:41.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:20:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 20, 39), 18.32, 29.15, 0.0, 10.09, 18.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:20:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:20:39
2025-12-03T12:20:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:20:42.604 [DEBUG] [Thread-116563] [transport.py] [_log()] starting thread (client mode): 0xa7bd1450
2025-12-03T12:20:42.605 [DEBUG] [Thread-116563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:20:42.623 [DEBUG] [Thread-116563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:20:42.623 [INFO] [Thread-116563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:42.636 [DEBUG] [Thread-116563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] client lang: <none>
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] server lang: <none>
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] kex follows: False
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:20:42.637 [DEBUG] [Thread-116563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:20:42.638 [DEBUG] [Thread-116563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:20:42.638 [DEBUG] [Thread-116563] [transport.py] [_log()] Compression: none
2025-12-03T12:20:42.638 [DEBUG] [Thread-116563] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:20:42.650 [DEBUG] [Thread-116563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:20:42.651 [DEBUG] [Thread-116563] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:20:42.651 [DEBUG] [Thread-116563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:20:42.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:20:42.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:20:42.653 [DEBUG] [Thread-116563] [transport.py] [_log()] userauth is OK
2025-12-03T12:20:42.653 [DEBUG] [Thread-116563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:20:42.653 [DEBUG] [Thread-116563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:20:42.653 [DEBUG] [Thread-116563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:20:42.654 [DEBUG] [Thread-116563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:20:42.688 [INFO] [Thread-116563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:20:42.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:20:43.314 [DEBUG] [Thread-116563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:20:43.315 [DEBUG] [Thread-116563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:20:43.315 [DEBUG] [Thread-116563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:20:43.356 [DEBUG] [Thread-116563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:20:43.356 [DEBUG] [Thread-116563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:20:43.359 [DEBUG] [Thread-116563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:20:43.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:20:43.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:20:43.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:20:43.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:20:43.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:20:43.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:20:43.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:20:43.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.430605 -999.00  +18.80  10.08     34   +2.80 1 2 1 1 1   888    0 16.69 34.54 ----- 7.5 10.1 115.2 15.4 26.9 -23.3 26.5 -19.6 26.6 -19.5 27.1 -22.3
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.430605
2025-12-03T12:20:43.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:20:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:20:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:20:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:20:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:20:43.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:20:39', tmtdew=18.32, humidity=29.15, cloud=0.0, wind=10.09, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:20:04.272', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:20:43.386 [DEBUG] [Thread-116563] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:20:43.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:20:43.483 [DEBUG] [Thread-116566] [transport.py] [_log()] starting thread (client mode): 0xa5163c10
2025-12-03T12:20:43.483 [DEBUG] [Thread-116566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:20:43.498 [DEBUG] [Thread-116566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:20:43.498 [INFO] [Thread-116566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] client lang: <none>
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] server lang: <none>
2025-12-03T12:20:43.506 [DEBUG] [Thread-116566] [transport.py] [_log()] kex follows: False
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] Compression: none
2025-12-03T12:20:43.507 [DEBUG] [Thread-116566] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:20:43.562 [DEBUG] [Thread-116566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:20:43.563 [DEBUG] [Thread-116566] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:20:43.563 [DEBUG] [Thread-116566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:20:43.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:20:43.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:20:43.619 [DEBUG] [Thread-116566] [transport.py] [_log()] userauth is OK
2025-12-03T12:20:43.620 [DEBUG] [Thread-116566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:20:43.620 [DEBUG] [Thread-116566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:20:43.620 [DEBUG] [Thread-116566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:20:43.620 [DEBUG] [Thread-116566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:20:43.639 [INFO] [Thread-116566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:20:43.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:20:43.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:20:44.475 [DEBUG] [Thread-116566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:20:44.476 [DEBUG] [Thread-116566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:20:44.524 [DEBUG] [Thread-116566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:20:44.524 [DEBUG] [Thread-116566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:20:44.533 [DEBUG] [Thread-116566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:20:44.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:20:44.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:20:44.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:20:44.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:20:44.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:20:44.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:20:44.567 [DEBUG] [Thread-116566] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:20:45.276 [DEBUG] [Thread-116568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:20:46.104 [DEBUG] [Thread-116569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:01.158 [DEBUG] [Thread-116570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:02.039 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:02.040 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:21:14.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:21:14.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:21:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 21, 11), 18.19, 29.41, 0.0, 11.06, 18.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:21:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:21:11
2025-12-03T12:21:15.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:21:15.585 [DEBUG] [Thread-116571] [transport.py] [_log()] starting thread (client mode): 0xa519bbe0
2025-12-03T12:21:15.585 [DEBUG] [Thread-116571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:21:15.605 [DEBUG] [Thread-116571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:21:15.606 [INFO] [Thread-116571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] client lang: <none>
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] server lang: <none>
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] kex follows: False
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] Compression: none
2025-12-03T12:21:15.609 [DEBUG] [Thread-116571] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:21:15.626 [DEBUG] [Thread-116571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:21:15.626 [DEBUG] [Thread-116571] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:21:15.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:21:15.626 [DEBUG] [Thread-116571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:21:15.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:21:15.627 [DEBUG] [Thread-116571] [transport.py] [_log()] userauth is OK
2025-12-03T12:21:15.627 [DEBUG] [Thread-116571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:21:15.627 [DEBUG] [Thread-116571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:21:15.627 [DEBUG] [Thread-116571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:21:15.627 [DEBUG] [Thread-116571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:21:15.636 [INFO] [Thread-116571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:21:15.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:21:16.186 [DEBUG] [Thread-116573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:16.242 [DEBUG] [Thread-116571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:21:16.242 [DEBUG] [Thread-116571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:21:16.242 [DEBUG] [Thread-116571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:21:16.282 [DEBUG] [Thread-116571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:21:16.282 [DEBUG] [Thread-116571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:21:16.285 [DEBUG] [Thread-116571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:21:16.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:21:16.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:21:16.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:21:16.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:21:16.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:21:16.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:21:16.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.431300 -999.00  +19.60   9.31     33   +3.20 1 2 1 1 1   888    0 16.78 34.25 ----- 8.4 9.3 130.1 14.2 27.1 -23.0 26.8 -20.5 26.9 -20.3 27.4 -22.1
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.431300
2025-12-03T12:21:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:21:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:21:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:21:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:21:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:21:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:21:11', tmtdew=18.19, humidity=29.41, cloud=0.0, wind=11.06, temperature=18.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:21:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:21:16.303 [DEBUG] [Thread-116571] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:21:16.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:21:16.392 [DEBUG] [Thread-116575] [transport.py] [_log()] starting thread (client mode): 0xa5198430
2025-12-03T12:21:16.392 [DEBUG] [Thread-116575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:21:16.407 [DEBUG] [Thread-116575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:21:16.407 [INFO] [Thread-116575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:21:16.414 [DEBUG] [Thread-116575] [transport.py] [_log()] client lang: <none>
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] server lang: <none>
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] kex follows: False
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] Compression: none
2025-12-03T12:21:16.415 [DEBUG] [Thread-116575] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:21:16.472 [DEBUG] [Thread-116575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:21:16.472 [DEBUG] [Thread-116575] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:21:16.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:21:16.473 [DEBUG] [Thread-116575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:21:16.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:21:16.529 [DEBUG] [Thread-116575] [transport.py] [_log()] userauth is OK
2025-12-03T12:21:16.529 [DEBUG] [Thread-116575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:21:16.529 [DEBUG] [Thread-116575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:21:16.530 [DEBUG] [Thread-116575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:21:16.530 [DEBUG] [Thread-116575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:21:16.545 [INFO] [Thread-116575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:21:16.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:21:16.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:21:17.391 [DEBUG] [Thread-116575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:21:17.391 [DEBUG] [Thread-116575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:21:17.440 [DEBUG] [Thread-116575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:21:17.440 [DEBUG] [Thread-116575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:21:17.448 [DEBUG] [Thread-116575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:21:17.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:21:17.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:21:17.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:21:17.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:21:17.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:21:17.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:21:17.480 [DEBUG] [Thread-116575] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:21:31.213 [DEBUG] [Thread-116577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:45.305 [DEBUG] [Thread-116578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:46.253 [DEBUG] [Thread-116579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:21:47.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:21:47.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:21:47.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:21:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 21, 43), 18.44, 28.83, 0.0, 11.31, 18.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:21:48.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:21:43
2025-12-03T12:21:48.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:21:48.447 [DEBUG] [Thread-116580] [transport.py] [_log()] starting thread (client mode): 0xa27cb3a0
2025-12-03T12:21:48.447 [DEBUG] [Thread-116580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:21:48.458 [DEBUG] [Thread-116580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:21:48.458 [INFO] [Thread-116580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] client lang: <none>
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] server lang: <none>
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] kex follows: False
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] Compression: none
2025-12-03T12:21:48.460 [DEBUG] [Thread-116580] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:21:48.468 [DEBUG] [Thread-116580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:21:48.468 [DEBUG] [Thread-116580] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:21:48.469 [DEBUG] [Thread-116580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:21:48.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:21:48.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:21:48.469 [DEBUG] [Thread-116580] [transport.py] [_log()] userauth is OK
2025-12-03T12:21:48.470 [DEBUG] [Thread-116580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:21:48.470 [DEBUG] [Thread-116580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:21:48.470 [DEBUG] [Thread-116580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:21:48.470 [DEBUG] [Thread-116580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:21:48.482 [INFO] [Thread-116580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:21:48.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:21:49.104 [DEBUG] [Thread-116580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:21:49.105 [DEBUG] [Thread-116580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:21:49.105 [DEBUG] [Thread-116580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:21:49.146 [DEBUG] [Thread-116580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:21:49.146 [DEBUG] [Thread-116580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:21:49.148 [DEBUG] [Thread-116580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:21:49.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:21:49.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:21:49.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:21:49.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:21:49.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:21:49.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:21:49.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.431647 -999.00  +20.00   7.04     33   +3.20 1 2 1 1 1   888    0 16.82 31.70 ----- 6.3 7.0 116.8 8.7 27.2 -21.8 27.0 -19.5 27.1 -19.0 27.5 -20.7
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:21:49.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.431647
2025-12-03T12:21:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:21:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:21:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:21:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:21:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:21:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:21:43', tmtdew=18.44, humidity=28.83, cloud=0.0, wind=11.31, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:21:34.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:21:49.172 [DEBUG] [Thread-116580] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:21:49.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:21:49.266 [DEBUG] [Thread-116583] [transport.py] [_log()] starting thread (client mode): 0xa51986d0
2025-12-03T12:21:49.266 [DEBUG] [Thread-116583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:21:49.280 [DEBUG] [Thread-116583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:21:49.280 [INFO] [Thread-116583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] client lang: <none>
2025-12-03T12:21:49.288 [DEBUG] [Thread-116583] [transport.py] [_log()] server lang: <none>
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] kex follows: False
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] Compression: none
2025-12-03T12:21:49.289 [DEBUG] [Thread-116583] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:21:49.344 [DEBUG] [Thread-116583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:21:49.345 [DEBUG] [Thread-116583] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:21:49.345 [DEBUG] [Thread-116583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:21:49.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:21:49.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:21:49.400 [DEBUG] [Thread-116583] [transport.py] [_log()] userauth is OK
2025-12-03T12:21:49.400 [DEBUG] [Thread-116583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:21:49.400 [DEBUG] [Thread-116583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:21:49.400 [DEBUG] [Thread-116583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:21:49.400 [DEBUG] [Thread-116583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:21:49.419 [INFO] [Thread-116583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:21:49.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:21:49.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:21:50.342 [DEBUG] [Thread-116583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:21:50.342 [DEBUG] [Thread-116583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:21:50.392 [DEBUG] [Thread-116583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:21:50.392 [DEBUG] [Thread-116583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:21:50.402 [DEBUG] [Thread-116583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:21:50.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:21:50.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:21:50.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:21:50.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:21:50.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:21:50.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:21:50.437 [DEBUG] [Thread-116583] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:22:01.280 [DEBUG] [Thread-116585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:02.194 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:02.195 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:16.320 [DEBUG] [Thread-116586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:20.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:22:20.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:22:20.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:22:21.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 22, 15), 18.24, 29.19, 0.0, 9.51, 18.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:22:21.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:22:15
2025-12-03T12:22:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:22:21.392 [DEBUG] [Thread-116587] [transport.py] [_log()] starting thread (client mode): 0xa7bd3a00
2025-12-03T12:22:21.393 [DEBUG] [Thread-116587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:22:21.404 [DEBUG] [Thread-116587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:22:21.404 [INFO] [Thread-116587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] client lang: <none>
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] server lang: <none>
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] kex follows: False
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] Compression: none
2025-12-03T12:22:21.406 [DEBUG] [Thread-116587] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:22:21.413 [DEBUG] [Thread-116587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:22:21.414 [DEBUG] [Thread-116587] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:22:21.414 [DEBUG] [Thread-116587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:22:21.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:22:21.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:22:21.415 [DEBUG] [Thread-116587] [transport.py] [_log()] userauth is OK
2025-12-03T12:22:21.415 [DEBUG] [Thread-116587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:22:21.415 [DEBUG] [Thread-116587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:22:21.415 [DEBUG] [Thread-116587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:22:21.415 [DEBUG] [Thread-116587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:22:21.427 [INFO] [Thread-116587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:22:21.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:22:22.022 [DEBUG] [Thread-116587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:22:22.023 [DEBUG] [Thread-116587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:22:22.023 [DEBUG] [Thread-116587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:22:22.064 [DEBUG] [Thread-116587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:22:22.064 [DEBUG] [Thread-116587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:22:22.067 [DEBUG] [Thread-116587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:22:22.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:22:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:22:22.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:22:22.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:22:22.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:22:22.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:22:22.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:22:22.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.431994 -999.00  +20.20   7.97     32   +3.00 1 2 1 1 1   888    0 16.86 40.02 ----- 5.3 8.0 123.8 10.1 27.6 -20.5 27.2 -19.7 27.2 -19.1 27.6 -22.7
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.431994
2025-12-03T12:22:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:22:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:22:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:22:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:22:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:22:22.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:22:15', tmtdew=18.24, humidity=29.19, cloud=0.0, wind=9.51, temperature=18.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:22:04.282', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:22:22.094 [DEBUG] [Thread-116587] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:22:22.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:22:22.190 [DEBUG] [Thread-116590] [transport.py] [_log()] starting thread (client mode): 0xa7bd1960
2025-12-03T12:22:22.191 [DEBUG] [Thread-116590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:22:22.205 [DEBUG] [Thread-116590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:22:22.206 [INFO] [Thread-116590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:22:22.213 [DEBUG] [Thread-116590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:22:22.213 [DEBUG] [Thread-116590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] client lang: <none>
2025-12-03T12:22:22.214 [DEBUG] [Thread-116590] [transport.py] [_log()] server lang: <none>
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] kex follows: False
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] Compression: none
2025-12-03T12:22:22.215 [DEBUG] [Thread-116590] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:22:22.273 [DEBUG] [Thread-116590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:22:22.273 [DEBUG] [Thread-116590] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:22:22.274 [DEBUG] [Thread-116590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:22:22.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:22:22.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:22:22.331 [DEBUG] [Thread-116590] [transport.py] [_log()] userauth is OK
2025-12-03T12:22:22.331 [DEBUG] [Thread-116590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:22:22.331 [DEBUG] [Thread-116590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:22:22.331 [DEBUG] [Thread-116590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:22:22.331 [DEBUG] [Thread-116590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:22:22.349 [INFO] [Thread-116590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:22:22.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:22:22.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:22:23.196 [DEBUG] [Thread-116590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:22:23.196 [DEBUG] [Thread-116590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:22:23.244 [DEBUG] [Thread-116590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:22:23.244 [DEBUG] [Thread-116590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:22:23.253 [DEBUG] [Thread-116590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:22:23.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:22:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:22:23.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:22:23.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:22:23.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:22:23.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:22:23.288 [DEBUG] [Thread-116590] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:22:31.349 [DEBUG] [Thread-116592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:45.338 [DEBUG] [Thread-116593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:46.386 [DEBUG] [Thread-116594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:22:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:22:53.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:22:53.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 22, 47), 17.95, 29.89, 0.0, 18.83, 18.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:22:53.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:22:47
2025-12-03T12:22:54.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:22:54.253 [DEBUG] [Thread-116595] [transport.py] [_log()] starting thread (client mode): 0xa27c9030
2025-12-03T12:22:54.253 [DEBUG] [Thread-116595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:22:54.271 [DEBUG] [Thread-116595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:22:54.271 [INFO] [Thread-116595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] client lang: <none>
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] server lang: <none>
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] kex follows: False
2025-12-03T12:22:54.272 [DEBUG] [Thread-116595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] Compression: none
2025-12-03T12:22:54.273 [DEBUG] [Thread-116595] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:22:54.285 [DEBUG] [Thread-116595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:22:54.285 [DEBUG] [Thread-116595] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:22:54.285 [DEBUG] [Thread-116595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:22:54.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:22:54.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:22:54.287 [DEBUG] [Thread-116595] [transport.py] [_log()] userauth is OK
2025-12-03T12:22:54.287 [DEBUG] [Thread-116595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:22:54.287 [DEBUG] [Thread-116595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:22:54.287 [DEBUG] [Thread-116595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:22:54.287 [DEBUG] [Thread-116595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:22:54.299 [INFO] [Thread-116595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:22:54.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:22:54.906 [DEBUG] [Thread-116595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:22:54.906 [DEBUG] [Thread-116595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:22:54.907 [DEBUG] [Thread-116595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:22:54.947 [DEBUG] [Thread-116595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:22:54.947 [DEBUG] [Thread-116595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:22:54.950 [DEBUG] [Thread-116595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:22:54.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:22:54.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:22:54.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:22:54.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:22:54.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:22:54.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:22:54.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:22:54.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:22:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:22:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.432342 -999.00  +20.20   9.73     32   +3.20 1 2 1 1 1   888    0 17.54 46.36 ----- 10.8 9.7 100.0 14.8 27.7 -20.0 27.4 -20.8 27.4 -20.5 27.9 -20.7
2025-12-03T12:22:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:22:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:22:54.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.432342
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:22:54.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:22:47', tmtdew=17.95, humidity=29.89, cloud=0.0, wind=18.83, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:22:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:22:54.973 [DEBUG] [Thread-116595] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:22:55.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:22:55.071 [DEBUG] [Thread-116598] [transport.py] [_log()] starting thread (client mode): 0xa27cb790
2025-12-03T12:22:55.071 [DEBUG] [Thread-116598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:22:55.085 [DEBUG] [Thread-116598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:22:55.086 [INFO] [Thread-116598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:22:55.093 [DEBUG] [Thread-116598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:22:55.093 [DEBUG] [Thread-116598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:22:55.093 [DEBUG] [Thread-116598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] client lang: <none>
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] server lang: <none>
2025-12-03T12:22:55.094 [DEBUG] [Thread-116598] [transport.py] [_log()] kex follows: False
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] Compression: none
2025-12-03T12:22:55.095 [DEBUG] [Thread-116598] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:22:55.152 [DEBUG] [Thread-116598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:22:55.152 [DEBUG] [Thread-116598] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:22:55.153 [DEBUG] [Thread-116598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:22:55.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:22:55.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:22:55.209 [DEBUG] [Thread-116598] [transport.py] [_log()] userauth is OK
2025-12-03T12:22:55.209 [DEBUG] [Thread-116598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:22:55.209 [DEBUG] [Thread-116598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:22:55.210 [DEBUG] [Thread-116598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:22:55.210 [DEBUG] [Thread-116598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:22:55.231 [INFO] [Thread-116598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:22:55.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:22:55.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:22:56.080 [DEBUG] [Thread-116598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:22:56.080 [DEBUG] [Thread-116598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:22:56.128 [DEBUG] [Thread-116598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:22:56.128 [DEBUG] [Thread-116598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:22:56.137 [DEBUG] [Thread-116598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:22:56.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:22:56.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:22:56.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:22:56.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:22:56.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:22:56.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:22:56.173 [DEBUG] [Thread-116598] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:23:01.413 [DEBUG] [Thread-116600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:02.335 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:02.336 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:16.446 [DEBUG] [Thread-116601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:26.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:23:26.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:23:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:23:26.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 23, 19), 18.02, 29.77, 0.0, 16.68, 18.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:23:26.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:23:19
2025-12-03T12:23:26.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:23:27.127 [DEBUG] [Thread-116602] [transport.py] [_log()] starting thread (client mode): 0xa27cafe0
2025-12-03T12:23:27.127 [DEBUG] [Thread-116602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:23:27.147 [DEBUG] [Thread-116602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:23:27.147 [INFO] [Thread-116602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:23:27.150 [DEBUG] [Thread-116602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] client lang: <none>
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] server lang: <none>
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] kex follows: False
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:23:27.151 [DEBUG] [Thread-116602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:23:27.152 [DEBUG] [Thread-116602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:23:27.152 [DEBUG] [Thread-116602] [transport.py] [_log()] Compression: none
2025-12-03T12:23:27.152 [DEBUG] [Thread-116602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:23:27.160 [DEBUG] [Thread-116602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:23:27.161 [DEBUG] [Thread-116602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:23:27.161 [DEBUG] [Thread-116602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:23:27.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:23:27.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:23:27.204 [DEBUG] [Thread-116602] [transport.py] [_log()] userauth is OK
2025-12-03T12:23:27.205 [DEBUG] [Thread-116602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:23:27.205 [DEBUG] [Thread-116602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:23:27.205 [DEBUG] [Thread-116602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:23:27.205 [DEBUG] [Thread-116602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:23:27.236 [INFO] [Thread-116602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:23:27.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:23:27.981 [DEBUG] [Thread-116602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:23:27.981 [DEBUG] [Thread-116602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:23:27.982 [DEBUG] [Thread-116602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:23:28.022 [DEBUG] [Thread-116602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:23:28.022 [DEBUG] [Thread-116602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:23:28.024 [DEBUG] [Thread-116602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:23:28.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:23:28.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:23:28.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:23:28.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:23:28.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:23:28.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:23:28.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:23:28.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.432342 -999.00  +20.20   9.73     32   +3.20 1 2 1 1 1   888    0 17.54 46.36 ----- 10.8 9.7 100.0 14.8 27.7 -20.0 27.4 -20.8 27.4 -20.5 27.9 -20.7
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.432342
2025-12-03T12:23:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:23:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:23:28.048 [DEBUG] [Thread-116602] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:23:28.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:23:28.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:23:28.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:23:28.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:23:19', tmtdew=18.02, humidity=29.77, cloud=0.0, wind=16.68, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:22:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:23:28.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:23:28.142 [DEBUG] [Thread-116605] [transport.py] [_log()] starting thread (client mode): 0xa7bd1f60
2025-12-03T12:23:28.142 [DEBUG] [Thread-116605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:23:28.158 [DEBUG] [Thread-116605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:23:28.158 [INFO] [Thread-116605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:23:28.166 [DEBUG] [Thread-116605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] client lang: <none>
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] server lang: <none>
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] kex follows: False
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:23:28.167 [DEBUG] [Thread-116605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:23:28.169 [DEBUG] [Thread-116605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:23:28.169 [DEBUG] [Thread-116605] [transport.py] [_log()] Compression: none
2025-12-03T12:23:28.169 [DEBUG] [Thread-116605] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:23:28.226 [DEBUG] [Thread-116605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:23:28.226 [DEBUG] [Thread-116605] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:23:28.227 [DEBUG] [Thread-116605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:23:28.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:23:28.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:23:28.282 [DEBUG] [Thread-116605] [transport.py] [_log()] userauth is OK
2025-12-03T12:23:28.282 [DEBUG] [Thread-116605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:23:28.283 [DEBUG] [Thread-116605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:23:28.283 [DEBUG] [Thread-116605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:23:28.283 [DEBUG] [Thread-116605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:23:28.302 [INFO] [Thread-116605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:23:28.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:23:28.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:23:29.165 [DEBUG] [Thread-116605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:23:29.165 [DEBUG] [Thread-116605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:23:29.214 [DEBUG] [Thread-116605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:23:29.214 [DEBUG] [Thread-116605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:23:29.223 [DEBUG] [Thread-116605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:23:29.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:23:29.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:23:29.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:23:29.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:23:29.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:23:29.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:23:29.258 [DEBUG] [Thread-116605] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:23:31.474 [DEBUG] [Thread-116607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:45.383 [DEBUG] [Thread-116608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:46.526 [DEBUG] [Thread-116609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:23:59.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:23:59.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:23:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:23:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 23, 51), 17.92, 30.17, 0.0, 14.88, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:23:59.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:23:51
2025-12-03T12:24:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:24:00.246 [DEBUG] [Thread-116610] [transport.py] [_log()] starting thread (client mode): 0xa27843d0
2025-12-03T12:24:00.246 [DEBUG] [Thread-116610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:24:00.267 [DEBUG] [Thread-116610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:24:00.267 [INFO] [Thread-116610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:24:00.270 [DEBUG] [Thread-116610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] client lang: <none>
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] server lang: <none>
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] kex follows: False
2025-12-03T12:24:00.271 [DEBUG] [Thread-116610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] Compression: none
2025-12-03T12:24:00.272 [DEBUG] [Thread-116610] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:24:00.290 [DEBUG] [Thread-116610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:24:00.291 [DEBUG] [Thread-116610] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:24:00.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:24:00.292 [DEBUG] [Thread-116610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:24:00.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:24:00.294 [DEBUG] [Thread-116610] [transport.py] [_log()] userauth is OK
2025-12-03T12:24:00.294 [DEBUG] [Thread-116610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:24:00.294 [DEBUG] [Thread-116610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:24:00.295 [DEBUG] [Thread-116610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:24:00.295 [DEBUG] [Thread-116610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:24:00.315 [INFO] [Thread-116610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:24:00.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:24:00.997 [DEBUG] [Thread-116610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:24:00.998 [DEBUG] [Thread-116610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:24:00.998 [DEBUG] [Thread-116610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:24:01.039 [DEBUG] [Thread-116610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:24:01.039 [DEBUG] [Thread-116610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:24:01.042 [DEBUG] [Thread-116610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:24:01.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:24:01.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:24:01.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:24:01.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:24:01.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:24:01.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:24:01.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.432689 -999.00  +19.80   8.96     33   +3.10 1 2 1 1 1   888    0 17.02 48.49 ----- 7.1 9.0 140.7 13.3 27.7 -22.2 27.4 -19.9 27.4 -19.0 27.9 -22.3
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:24:01.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.432689
2025-12-03T12:24:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:24:01.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:24:01.067 [DEBUG] [Thread-116610] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:24:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:24:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:24:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:24:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:23:51', tmtdew=17.92, humidity=30.17, cloud=0.0, wind=14.88, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:23:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:24:01.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:24:01.164 [DEBUG] [Thread-116613] [transport.py] [_log()] starting thread (client mode): 0xa7bd1a80
2025-12-03T12:24:01.164 [DEBUG] [Thread-116613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:24:01.178 [DEBUG] [Thread-116613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:24:01.178 [INFO] [Thread-116613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:24:01.185 [DEBUG] [Thread-116613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] client lang: <none>
2025-12-03T12:24:01.186 [DEBUG] [Thread-116613] [transport.py] [_log()] server lang: <none>
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] kex follows: False
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] Compression: none
2025-12-03T12:24:01.187 [DEBUG] [Thread-116613] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:24:01.244 [DEBUG] [Thread-116613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:24:01.245 [DEBUG] [Thread-116613] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:24:01.245 [DEBUG] [Thread-116613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:24:01.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:24:01.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:24:01.300 [DEBUG] [Thread-116613] [transport.py] [_log()] userauth is OK
2025-12-03T12:24:01.300 [DEBUG] [Thread-116613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:24:01.300 [DEBUG] [Thread-116613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:24:01.300 [DEBUG] [Thread-116613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:24:01.300 [DEBUG] [Thread-116613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:24:01.319 [INFO] [Thread-116613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:24:01.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:24:01.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:24:01.552 [DEBUG] [Thread-116615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:02.185 [DEBUG] [Thread-116613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:24:02.185 [DEBUG] [Thread-116613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:24:02.232 [DEBUG] [Thread-116613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:24:02.233 [DEBUG] [Thread-116613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:24:02.242 [DEBUG] [Thread-116613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:24:02.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:24:02.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:24:02.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:24:02.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:24:02.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:24:02.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:24:02.277 [DEBUG] [Thread-116613] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:24:02.477 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:02.478 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:16.595 [DEBUG] [Thread-116616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:31.623 [DEBUG] [Thread-116617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:32.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:24:32.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:24:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:24:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 24, 23), 17.53, 30.97, 0.0, 12.16, 18.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:24:32.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:24:23
2025-12-03T12:24:33.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:24:33.249 [DEBUG] [Thread-116618] [transport.py] [_log()] starting thread (client mode): 0xa27b7ac0
2025-12-03T12:24:33.249 [DEBUG] [Thread-116618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:24:33.270 [DEBUG] [Thread-116618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:24:33.270 [INFO] [Thread-116618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] client lang: <none>
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] server lang: <none>
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] kex follows: False
2025-12-03T12:24:33.273 [DEBUG] [Thread-116618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] Compression: none
2025-12-03T12:24:33.274 [DEBUG] [Thread-116618] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:24:33.291 [DEBUG] [Thread-116618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:24:33.292 [DEBUG] [Thread-116618] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:24:33.292 [DEBUG] [Thread-116618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:24:33.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:24:33.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:24:33.295 [DEBUG] [Thread-116618] [transport.py] [_log()] userauth is OK
2025-12-03T12:24:33.295 [DEBUG] [Thread-116618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:24:33.295 [DEBUG] [Thread-116618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:24:33.295 [DEBUG] [Thread-116618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:24:33.295 [DEBUG] [Thread-116618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:24:33.319 [INFO] [Thread-116618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:24:33.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:24:34.112 [DEBUG] [Thread-116618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:24:34.113 [DEBUG] [Thread-116618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:24:34.113 [DEBUG] [Thread-116618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:24:34.154 [DEBUG] [Thread-116618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:24:34.155 [DEBUG] [Thread-116618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:24:34.158 [DEBUG] [Thread-116618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:24:34.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:24:34.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:24:34.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:24:34.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:24:34.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:24:34.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:24:34.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:24:34.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.433036 -999.00  +19.90  13.67     34   +3.90 1 2 1 1 1   888    0 17.35 54.66 ----- 10.1 13.7 154.4 21.0 28.0 -20.7 27.5 -21.7 27.5 -20.2 28.0 -21.9
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.433036
2025-12-03T12:24:34.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:24:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:24:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:24:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:24:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:24:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:24:23', tmtdew=17.53, humidity=30.97, cloud=0.0, wind=12.16, temperature=18.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:23:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:24:34.187 [DEBUG] [Thread-116618] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:24:34.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:24:34.283 [DEBUG] [Thread-116621] [transport.py] [_log()] starting thread (client mode): 0xa5162ec0
2025-12-03T12:24:34.283 [DEBUG] [Thread-116621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:24:34.299 [DEBUG] [Thread-116621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:24:34.299 [INFO] [Thread-116621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:24:34.307 [DEBUG] [Thread-116621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] client lang: <none>
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] server lang: <none>
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] kex follows: False
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:24:34.308 [DEBUG] [Thread-116621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:24:34.309 [DEBUG] [Thread-116621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:24:34.309 [DEBUG] [Thread-116621] [transport.py] [_log()] Compression: none
2025-12-03T12:24:34.309 [DEBUG] [Thread-116621] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:24:34.366 [DEBUG] [Thread-116621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:24:34.366 [DEBUG] [Thread-116621] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:24:34.367 [DEBUG] [Thread-116621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:24:34.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:24:34.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:24:34.421 [DEBUG] [Thread-116621] [transport.py] [_log()] userauth is OK
2025-12-03T12:24:34.421 [DEBUG] [Thread-116621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:24:34.422 [DEBUG] [Thread-116621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:24:34.422 [DEBUG] [Thread-116621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:24:34.422 [DEBUG] [Thread-116621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:24:34.445 [INFO] [Thread-116621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:24:34.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:24:34.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:24:35.290 [DEBUG] [Thread-116621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:24:35.290 [DEBUG] [Thread-116621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:24:35.339 [DEBUG] [Thread-116621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:24:35.339 [DEBUG] [Thread-116621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:24:35.347 [DEBUG] [Thread-116621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:24:35.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:24:35.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:24:35.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:24:35.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:24:35.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:24:35.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:24:35.382 [DEBUG] [Thread-116621] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:24:45.428 [DEBUG] [Thread-116623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:24:46.657 [DEBUG] [Thread-116624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:01.702 [DEBUG] [Thread-116625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:02.620 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:02.621 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:05.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:25:05.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:25:05.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:25:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 24, 55), 17.58, 30.69, 0.0, 8.45, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:25:06.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:24:55
2025-12-03T12:25:06.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:25:06.397 [DEBUG] [Thread-116626] [transport.py] [_log()] starting thread (client mode): 0xa27b7e20
2025-12-03T12:25:06.397 [DEBUG] [Thread-116626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:25:06.421 [DEBUG] [Thread-116626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:25:06.421 [INFO] [Thread-116626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] client lang: <none>
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] server lang: <none>
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] kex follows: False
2025-12-03T12:25:06.424 [DEBUG] [Thread-116626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] Compression: none
2025-12-03T12:25:06.425 [DEBUG] [Thread-116626] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:25:06.439 [DEBUG] [Thread-116626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:25:06.439 [DEBUG] [Thread-116626] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:25:06.439 [DEBUG] [Thread-116626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:25:06.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:25:06.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:25:06.440 [DEBUG] [Thread-116626] [transport.py] [_log()] userauth is OK
2025-12-03T12:25:06.440 [DEBUG] [Thread-116626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:25:06.440 [DEBUG] [Thread-116626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:25:06.440 [DEBUG] [Thread-116626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:25:06.440 [DEBUG] [Thread-116626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:25:06.449 [INFO] [Thread-116626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:25:06.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:25:07.582 [DEBUG] [Thread-116626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:25:07.582 [DEBUG] [Thread-116626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:25:07.582 [DEBUG] [Thread-116626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:25:07.623 [DEBUG] [Thread-116626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:25:07.623 [DEBUG] [Thread-116626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:25:07.625 [DEBUG] [Thread-116626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:25:07.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:25:07.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:25:07.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:25:07.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:25:07.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:25:07.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:25:07.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.433383 -999.00  +20.10  16.83     33   +3.60 1 2 1 1 1   888    0 17.46 50.99 ----- 16.5 16.8 156.8 20.5 28.0 -20.9 27.4 -20.7 27.4 -21.3 28.1 -22.8
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.433383
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:24:55', tmtdew=17.58, humidity=30.69, cloud=0.0, wind=8.45, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:24:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:25:07.650 [DEBUG] [Thread-116626] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:25:07.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:25:07.735 [DEBUG] [Thread-116629] [transport.py] [_log()] starting thread (client mode): 0xa7bd3910
2025-12-03T12:25:07.736 [DEBUG] [Thread-116629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:25:07.750 [DEBUG] [Thread-116629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:25:07.750 [INFO] [Thread-116629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] client lang: <none>
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] server lang: <none>
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] kex follows: False
2025-12-03T12:25:07.757 [DEBUG] [Thread-116629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] Compression: none
2025-12-03T12:25:07.758 [DEBUG] [Thread-116629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:25:07.814 [DEBUG] [Thread-116629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:25:07.814 [DEBUG] [Thread-116629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:25:07.814 [DEBUG] [Thread-116629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:25:07.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:25:07.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:25:07.870 [DEBUG] [Thread-116629] [transport.py] [_log()] userauth is OK
2025-12-03T12:25:07.870 [DEBUG] [Thread-116629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:25:07.870 [DEBUG] [Thread-116629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:25:07.870 [DEBUG] [Thread-116629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:25:07.870 [DEBUG] [Thread-116629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:25:07.884 [INFO] [Thread-116629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:25:07.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:25:07.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:25:08.731 [DEBUG] [Thread-116629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:25:08.732 [DEBUG] [Thread-116629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:25:08.780 [DEBUG] [Thread-116629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:25:08.780 [DEBUG] [Thread-116629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:25:08.788 [DEBUG] [Thread-116629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:25:08.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:25:08.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:25:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:25:08.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:25:08.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:25:08.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:25:08.820 [DEBUG] [Thread-116629] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:25:16.735 [DEBUG] [Thread-116631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:31.777 [DEBUG] [Thread-116632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:25:38.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:25:38.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:25:39.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 25, 27), 18.04, 29.76, 0.0, 8.05, 19.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:25:39.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:25:27
2025-12-03T12:25:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:25:39.797 [DEBUG] [Thread-116633] [transport.py] [_log()] starting thread (client mode): 0xa7bd3400
2025-12-03T12:25:39.797 [DEBUG] [Thread-116633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:25:39.818 [DEBUG] [Thread-116633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:25:39.818 [INFO] [Thread-116633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] client lang: <none>
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] server lang: <none>
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] kex follows: False
2025-12-03T12:25:39.821 [DEBUG] [Thread-116633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] Compression: none
2025-12-03T12:25:39.822 [DEBUG] [Thread-116633] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:25:39.841 [DEBUG] [Thread-116633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:25:39.841 [DEBUG] [Thread-116633] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:25:39.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:25:39.842 [DEBUG] [Thread-116633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:25:39.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:25:39.844 [DEBUG] [Thread-116633] [transport.py] [_log()] userauth is OK
2025-12-03T12:25:39.844 [DEBUG] [Thread-116633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:25:39.844 [DEBUG] [Thread-116633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:25:39.844 [DEBUG] [Thread-116633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:25:39.845 [DEBUG] [Thread-116633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:25:39.866 [INFO] [Thread-116633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:25:39.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:25:40.647 [DEBUG] [Thread-116633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:25:40.647 [DEBUG] [Thread-116633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:25:40.648 [DEBUG] [Thread-116633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:25:40.688 [DEBUG] [Thread-116633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:25:40.688 [DEBUG] [Thread-116633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:25:40.691 [DEBUG] [Thread-116633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:25:40.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:25:40.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:25:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:25:40.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:25:40.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:25:40.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:25:40.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:25:40.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:25:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:25:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.434078 -999.00  +20.00  17.04     33   +3.20 1 1 1 1 1   888    0 17.38 53.28 ----- 15.6 17.0 166.6 20.9 28.1 -22.0 27.1 -25.3 27.4 -21.3 28.2 -22.2
2025-12-03T12:25:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:25:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:25:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.434078
2025-12-03T12:25:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:25:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:25:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:25:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:25:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:25:40.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:25:27', tmtdew=18.04, humidity=29.76, cloud=0.0, wind=8.05, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:25:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:25:40.717 [DEBUG] [Thread-116633] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:25:40.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:25:40.815 [DEBUG] [Thread-116636] [transport.py] [_log()] starting thread (client mode): 0xa270bdc0
2025-12-03T12:25:40.815 [DEBUG] [Thread-116636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:25:40.830 [DEBUG] [Thread-116636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:25:40.830 [INFO] [Thread-116636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:25:40.838 [DEBUG] [Thread-116636] [transport.py] [_log()] client lang: <none>
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] server lang: <none>
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] kex follows: False
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] Compression: none
2025-12-03T12:25:40.839 [DEBUG] [Thread-116636] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:25:40.894 [DEBUG] [Thread-116636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:25:40.894 [DEBUG] [Thread-116636] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:25:40.894 [DEBUG] [Thread-116636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:25:40.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:25:40.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:25:40.951 [DEBUG] [Thread-116636] [transport.py] [_log()] userauth is OK
2025-12-03T12:25:40.952 [DEBUG] [Thread-116636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:25:40.952 [DEBUG] [Thread-116636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:25:40.952 [DEBUG] [Thread-116636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:25:40.952 [DEBUG] [Thread-116636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:25:40.970 [INFO] [Thread-116636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:25:40.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:25:40.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:25:41.804 [DEBUG] [Thread-116636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:25:41.804 [DEBUG] [Thread-116636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:25:41.852 [DEBUG] [Thread-116636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:25:41.853 [DEBUG] [Thread-116636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:25:41.867 [DEBUG] [Thread-116636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:25:41.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:25:41.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:25:41.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:25:41.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:25:41.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:25:41.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:25:41.906 [DEBUG] [Thread-116636] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:25:45.456 [DEBUG] [Thread-116638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:25:46.805 [DEBUG] [Thread-116639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:01.847 [DEBUG] [Thread-116640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:02.759 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:02.760 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:11.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:26:11.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:26:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:26:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 25, 59), 18.54, 28.68, 0.0, 16.99, 18.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:26:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:25:59
2025-12-03T12:26:12.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:26:12.883 [DEBUG] [Thread-116641] [transport.py] [_log()] starting thread (client mode): 0xa27b7a00
2025-12-03T12:26:12.883 [DEBUG] [Thread-116641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:26:12.902 [DEBUG] [Thread-116641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:26:12.902 [INFO] [Thread-116641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] client lang: <none>
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] server lang: <none>
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] kex follows: False
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:26:12.905 [DEBUG] [Thread-116641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:26:12.906 [DEBUG] [Thread-116641] [transport.py] [_log()] Compression: none
2025-12-03T12:26:12.906 [DEBUG] [Thread-116641] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:26:12.921 [DEBUG] [Thread-116641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:26:12.921 [DEBUG] [Thread-116641] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:26:12.922 [DEBUG] [Thread-116641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:26:12.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:26:12.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:26:12.924 [DEBUG] [Thread-116641] [transport.py] [_log()] userauth is OK
2025-12-03T12:26:12.924 [DEBUG] [Thread-116641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:26:12.924 [DEBUG] [Thread-116641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:26:12.924 [DEBUG] [Thread-116641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:26:12.924 [DEBUG] [Thread-116641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:26:12.948 [INFO] [Thread-116641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:26:12.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:26:13.606 [DEBUG] [Thread-116641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:26:13.606 [DEBUG] [Thread-116641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:26:13.607 [DEBUG] [Thread-116641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:26:13.648 [DEBUG] [Thread-116641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:26:13.648 [DEBUG] [Thread-116641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:26:13.651 [DEBUG] [Thread-116641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:26:13.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:26:13.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:26:13.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:26:13.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:26:13.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:26:13.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:26:13.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:26:13.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.434425 -999.00  +20.00  17.10     32   +3.00 1 2 1 1 1   888    0 17.88 62.75 ----- 15.6 17.1 180.6 20.7 27.9 -24.2 27.0 -25.0 27.4 -20.2 28.1 -21.8
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.434425
2025-12-03T12:26:13.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:26:13.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:26:13.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:26:13.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:26:13.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:26:13.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:25:59', tmtdew=18.54, humidity=28.68, cloud=0.0, wind=16.99, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:25:34.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:26:13.672 [DEBUG] [Thread-116641] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:26:13.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:26:13.767 [DEBUG] [Thread-116644] [transport.py] [_log()] starting thread (client mode): 0xa5162c20
2025-12-03T12:26:13.767 [DEBUG] [Thread-116644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:26:13.783 [DEBUG] [Thread-116644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:26:13.783 [INFO] [Thread-116644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:13.790 [DEBUG] [Thread-116644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] client lang: <none>
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] server lang: <none>
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] kex follows: False
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] Compression: none
2025-12-03T12:26:13.791 [DEBUG] [Thread-116644] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:26:13.848 [DEBUG] [Thread-116644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:26:13.848 [DEBUG] [Thread-116644] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:26:13.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:26:13.850 [DEBUG] [Thread-116644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:26:13.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:26:13.904 [DEBUG] [Thread-116644] [transport.py] [_log()] userauth is OK
2025-12-03T12:26:13.904 [DEBUG] [Thread-116644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:26:13.905 [DEBUG] [Thread-116644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:26:13.905 [DEBUG] [Thread-116644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:26:13.905 [DEBUG] [Thread-116644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:26:13.923 [INFO] [Thread-116644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:26:13.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:26:13.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:26:14.763 [DEBUG] [Thread-116644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:26:14.763 [DEBUG] [Thread-116644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:26:14.811 [DEBUG] [Thread-116644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:26:14.811 [DEBUG] [Thread-116644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:26:14.820 [DEBUG] [Thread-116644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:26:14.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:26:14.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:26:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:26:14.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:26:14.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:26:14.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:26:14.854 [DEBUG] [Thread-116644] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:26:16.879 [DEBUG] [Thread-116646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:31.922 [DEBUG] [Thread-116647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:44.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:26:44.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:26:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:26:45.487 [DEBUG] [Thread-116648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:45.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 26, 31), 18.59, 28.53, 0.0, 18.44, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:26:45.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:26:31
2025-12-03T12:26:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:26:45.825 [DEBUG] [Thread-116649] [transport.py] [_log()] starting thread (client mode): 0xa5163dc0
2025-12-03T12:26:45.825 [DEBUG] [Thread-116649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:26:45.846 [DEBUG] [Thread-116649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:26:45.847 [INFO] [Thread-116649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] client lang: <none>
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] server lang: <none>
2025-12-03T12:26:45.850 [DEBUG] [Thread-116649] [transport.py] [_log()] kex follows: False
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] Compression: none
2025-12-03T12:26:45.851 [DEBUG] [Thread-116649] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:26:45.869 [DEBUG] [Thread-116649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:26:45.869 [DEBUG] [Thread-116649] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:26:45.870 [DEBUG] [Thread-116649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:26:45.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:26:45.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:26:45.872 [DEBUG] [Thread-116649] [transport.py] [_log()] userauth is OK
2025-12-03T12:26:45.872 [DEBUG] [Thread-116649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:26:45.872 [DEBUG] [Thread-116649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:26:45.872 [DEBUG] [Thread-116649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:26:45.872 [DEBUG] [Thread-116649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:26:45.895 [INFO] [Thread-116649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:26:45.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:26:46.682 [DEBUG] [Thread-116649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:26:46.682 [DEBUG] [Thread-116649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:26:46.682 [DEBUG] [Thread-116649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:26:46.723 [DEBUG] [Thread-116649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:26:46.723 [DEBUG] [Thread-116649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:26:46.726 [DEBUG] [Thread-116649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:26:46.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:26:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:26:46.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:26:46.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:26:46.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:26:46.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:26:46.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.434772 -999.00  +19.70  16.47     33   +3.10 1 1 1 1 1   888    0 18.18 77.63 ----- 13.2 16.5 192.0 21.4 27.9 -22.5 26.7 -25.8 27.3 -20.8 27.9 -23.2
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:26:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.434772
2025-12-03T12:26:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:26:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:26:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:26:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:26:46.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:26:46.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:26:31', tmtdew=18.59, humidity=28.53, cloud=0.0, wind=18.44, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:26:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:26:46.750 [DEBUG] [Thread-116649] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:26:46.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:26:46.846 [DEBUG] [Thread-116652] [transport.py] [_log()] starting thread (client mode): 0xa27b7b50
2025-12-03T12:26:46.846 [DEBUG] [Thread-116652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:26:46.865 [DEBUG] [Thread-116652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:26:46.865 [INFO] [Thread-116652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:26:46.872 [DEBUG] [Thread-116652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:26:46.872 [DEBUG] [Thread-116652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:26:46.873 [DEBUG] [Thread-116652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] client lang: <none>
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] server lang: <none>
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] kex follows: False
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:26:46.874 [DEBUG] [Thread-116652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:26:46.875 [DEBUG] [Thread-116652] [transport.py] [_log()] Compression: none
2025-12-03T12:26:46.875 [DEBUG] [Thread-116652] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:26:46.929 [DEBUG] [Thread-116652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:26:46.930 [DEBUG] [Thread-116652] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:26:46.930 [DEBUG] [Thread-116652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:26:46.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:26:46.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:26:46.950 [DEBUG] [Thread-116654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:26:46.985 [DEBUG] [Thread-116652] [transport.py] [_log()] userauth is OK
2025-12-03T12:26:46.985 [DEBUG] [Thread-116652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:26:46.985 [DEBUG] [Thread-116652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:26:46.985 [DEBUG] [Thread-116652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:26:46.985 [DEBUG] [Thread-116652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:26:47.004 [INFO] [Thread-116652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:26:47.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:26:47.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:26:47.866 [DEBUG] [Thread-116652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:26:47.866 [DEBUG] [Thread-116652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:26:47.914 [DEBUG] [Thread-116652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:26:47.914 [DEBUG] [Thread-116652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:26:47.922 [DEBUG] [Thread-116652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:26:47.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:26:47.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:26:47.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:26:47.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:26:47.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:26:47.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:26:47.955 [DEBUG] [Thread-116652] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:27:01.989 [DEBUG] [Thread-116655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:02.899 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:02.900 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:17.015 [DEBUG] [Thread-116656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:17.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:27:17.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:27:18.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 27, 3), 18.55, 28.59, 0.0, 15.32, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:27:18.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:27:03
2025-12-03T12:27:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:27:18.910 [DEBUG] [Thread-116657] [transport.py] [_log()] starting thread (client mode): 0xa7bd16c0
2025-12-03T12:27:18.910 [DEBUG] [Thread-116657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:27:18.931 [DEBUG] [Thread-116657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:27:18.931 [INFO] [Thread-116657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] client lang: <none>
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] server lang: <none>
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] kex follows: False
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] Compression: none
2025-12-03T12:27:18.934 [DEBUG] [Thread-116657] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:27:18.951 [DEBUG] [Thread-116657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:27:18.952 [DEBUG] [Thread-116657] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:27:18.952 [DEBUG] [Thread-116657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:27:18.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:27:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:27:18.954 [DEBUG] [Thread-116657] [transport.py] [_log()] userauth is OK
2025-12-03T12:27:18.954 [DEBUG] [Thread-116657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:27:18.954 [DEBUG] [Thread-116657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:27:18.954 [DEBUG] [Thread-116657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:27:18.954 [DEBUG] [Thread-116657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:27:18.988 [INFO] [Thread-116657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:27:18.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:27:19.622 [DEBUG] [Thread-116657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:27:19.622 [DEBUG] [Thread-116657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:27:19.623 [DEBUG] [Thread-116657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:27:19.663 [DEBUG] [Thread-116657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:27:19.663 [DEBUG] [Thread-116657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:27:19.666 [DEBUG] [Thread-116657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:27:19.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:27:19.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:27:19.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:27:19.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:27:19.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:27:19.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:27:19.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:27:19.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.435119 -999.00  +19.50  13.02     33   +3.00 1 2 1 1 1   888    0 18.00 73.37 ----- 15.4 13.0 175.0 18.0 27.8 -22.7 26.8 -21.7 27.2 -20.0 27.9 -22.6
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.435119
2025-12-03T12:27:19.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:27:03', tmtdew=18.55, humidity=28.59, cloud=0.0, wind=15.32, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:26:34.282', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:27:19.694 [DEBUG] [Thread-116657] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:27:19.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:27:19.790 [DEBUG] [Thread-116660] [transport.py] [_log()] starting thread (client mode): 0xa270b130
2025-12-03T12:27:19.790 [DEBUG] [Thread-116660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:27:19.805 [DEBUG] [Thread-116660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:27:19.806 [INFO] [Thread-116660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:27:19.813 [DEBUG] [Thread-116660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:27:19.813 [DEBUG] [Thread-116660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:27:19.813 [DEBUG] [Thread-116660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] client lang: <none>
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] server lang: <none>
2025-12-03T12:27:19.814 [DEBUG] [Thread-116660] [transport.py] [_log()] kex follows: False
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] Compression: none
2025-12-03T12:27:19.815 [DEBUG] [Thread-116660] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:27:19.872 [DEBUG] [Thread-116660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:27:19.873 [DEBUG] [Thread-116660] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:27:19.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:27:19.874 [DEBUG] [Thread-116660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:27:19.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:27:19.930 [DEBUG] [Thread-116660] [transport.py] [_log()] userauth is OK
2025-12-03T12:27:19.930 [DEBUG] [Thread-116660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:27:19.930 [DEBUG] [Thread-116660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:27:19.930 [DEBUG] [Thread-116660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:27:19.930 [DEBUG] [Thread-116660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:27:19.949 [INFO] [Thread-116660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:27:19.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:27:19.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:27:20.801 [DEBUG] [Thread-116660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:27:20.801 [DEBUG] [Thread-116660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:27:20.849 [DEBUG] [Thread-116660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:27:20.849 [DEBUG] [Thread-116660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:27:20.857 [DEBUG] [Thread-116660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:27:20.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:27:20.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:27:20.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:27:20.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:27:20.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:27:20.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:27:20.889 [DEBUG] [Thread-116660] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:27:32.045 [DEBUG] [Thread-116662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:45.516 [DEBUG] [Thread-116663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:47.086 [DEBUG] [Thread-116664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:27:50.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:27:50.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:27:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:27:51.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 27, 35), 18.29, 29.41, 0.0, 19.29, 18.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:27:51.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:27:35
2025-12-03T12:27:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:27:51.862 [DEBUG] [Thread-116665] [transport.py] [_log()] starting thread (client mode): 0xa27c28c0
2025-12-03T12:27:51.862 [DEBUG] [Thread-116665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:27:51.883 [DEBUG] [Thread-116665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:27:51.883 [INFO] [Thread-116665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] client lang: <none>
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] server lang: <none>
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] kex follows: False
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:27:51.886 [DEBUG] [Thread-116665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:27:51.887 [DEBUG] [Thread-116665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:27:51.887 [DEBUG] [Thread-116665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:27:51.887 [DEBUG] [Thread-116665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:27:51.887 [DEBUG] [Thread-116665] [transport.py] [_log()] Compression: none
2025-12-03T12:27:51.887 [DEBUG] [Thread-116665] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:27:51.903 [DEBUG] [Thread-116665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:27:51.904 [DEBUG] [Thread-116665] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:27:51.904 [DEBUG] [Thread-116665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:27:51.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:27:51.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:27:51.906 [DEBUG] [Thread-116665] [transport.py] [_log()] userauth is OK
2025-12-03T12:27:51.906 [DEBUG] [Thread-116665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:27:51.906 [DEBUG] [Thread-116665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:27:51.906 [DEBUG] [Thread-116665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:27:51.906 [DEBUG] [Thread-116665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:27:51.930 [INFO] [Thread-116665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:27:51.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:27:52.735 [DEBUG] [Thread-116665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:27:52.735 [DEBUG] [Thread-116665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:27:52.736 [DEBUG] [Thread-116665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:27:52.776 [DEBUG] [Thread-116665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:27:52.776 [DEBUG] [Thread-116665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:27:52.779 [DEBUG] [Thread-116665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:27:52.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:27:52.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:27:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:27:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:27:52.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:27:52.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:27:52.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.435467 -999.00  +19.60  17.29     33   +2.90 1 2 1 1 1   888    0 18.21 80.23 ----- 17.9 17.3 166.4 22.9 27.8 -22.4 26.9 -20.4 27.1 -20.9 27.9 -22.8
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:27:52.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.435467
2025-12-03T12:27:52.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:27:52.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:27:52.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:27:52.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:27:52.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:27:52.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:27:35', tmtdew=18.29, humidity=29.41, cloud=0.0, wind=19.29, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:27:04.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:27:52.803 [DEBUG] [Thread-116665] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:27:52.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:27:52.899 [DEBUG] [Thread-116668] [transport.py] [_log()] starting thread (client mode): 0xa27c1fc0
2025-12-03T12:27:52.899 [DEBUG] [Thread-116668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:27:52.916 [DEBUG] [Thread-116668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:27:52.917 [INFO] [Thread-116668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:27:52.924 [DEBUG] [Thread-116668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:27:52.924 [DEBUG] [Thread-116668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] client lang: <none>
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] server lang: <none>
2025-12-03T12:27:52.925 [DEBUG] [Thread-116668] [transport.py] [_log()] kex follows: False
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] Compression: none
2025-12-03T12:27:52.926 [DEBUG] [Thread-116668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:27:52.983 [DEBUG] [Thread-116668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:27:52.984 [DEBUG] [Thread-116668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:27:52.984 [DEBUG] [Thread-116668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:27:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:27:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:27:53.038 [DEBUG] [Thread-116668] [transport.py] [_log()] userauth is OK
2025-12-03T12:27:53.039 [DEBUG] [Thread-116668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:27:53.039 [DEBUG] [Thread-116668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:27:53.039 [DEBUG] [Thread-116668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:27:53.039 [DEBUG] [Thread-116668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:27:53.058 [INFO] [Thread-116668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:27:53.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:27:53.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:27:53.891 [DEBUG] [Thread-116668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:27:53.891 [DEBUG] [Thread-116668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:27:53.939 [DEBUG] [Thread-116668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:27:53.939 [DEBUG] [Thread-116668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:27:53.948 [DEBUG] [Thread-116668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:27:53.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:27:53.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:27:53.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:27:53.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:27:53.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:27:53.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:27:53.983 [DEBUG] [Thread-116668] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:28:02.110 [DEBUG] [Thread-116670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:03.052 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:03.053 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:17.152 [DEBUG] [Thread-116671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:24.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:28:24.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:28:24.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:28:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 28, 7), 18.66, 28.81, 0.0, 26.92, 19.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:28:24.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:28:07
2025-12-03T12:28:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:28:25.001 [DEBUG] [Thread-116672] [transport.py] [_log()] starting thread (client mode): 0xa27b7100
2025-12-03T12:28:25.002 [DEBUG] [Thread-116672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:28:25.022 [DEBUG] [Thread-116672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:28:25.022 [INFO] [Thread-116672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] client lang: <none>
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] server lang: <none>
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] kex follows: False
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:28:25.023 [DEBUG] [Thread-116672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:28:25.024 [DEBUG] [Thread-116672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:28:25.024 [DEBUG] [Thread-116672] [transport.py] [_log()] Compression: none
2025-12-03T12:28:25.024 [DEBUG] [Thread-116672] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:28:25.044 [DEBUG] [Thread-116672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:28:25.044 [DEBUG] [Thread-116672] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:28:25.044 [DEBUG] [Thread-116672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:28:25.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:28:25.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:28:25.045 [DEBUG] [Thread-116672] [transport.py] [_log()] userauth is OK
2025-12-03T12:28:25.045 [DEBUG] [Thread-116672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:28:25.045 [DEBUG] [Thread-116672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:28:25.045 [DEBUG] [Thread-116672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:28:25.045 [DEBUG] [Thread-116672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:28:25.056 [INFO] [Thread-116672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:28:25.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:28:25.701 [DEBUG] [Thread-116672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:28:25.701 [DEBUG] [Thread-116672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:28:25.702 [DEBUG] [Thread-116672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:28:25.742 [DEBUG] [Thread-116672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:28:25.742 [DEBUG] [Thread-116672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:28:25.745 [DEBUG] [Thread-116672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:28:25.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:28:25.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:28:25.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:28:25.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:28:25.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:28:25.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:28:25.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:28:25.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:28:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:28:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.435814 -999.00  +19.60  20.04     33   +3.00 1 1 1 1 1   888    0 18.10 75.87 ----- 25.0 20.0 174.8 24.2 27.6 -23.0 26.5 -27.9 27.0 -22.5 27.9 -22.5
2025-12-03T12:28:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:28:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:28:25.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.435814
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:28:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:28:07', tmtdew=18.66, humidity=28.81, cloud=0.0, wind=26.92, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:27:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:28:25.771 [DEBUG] [Thread-116672] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:28:25.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:28:25.871 [DEBUG] [Thread-116675] [transport.py] [_log()] starting thread (client mode): 0xa27c93f0
2025-12-03T12:28:25.871 [DEBUG] [Thread-116675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:28:25.888 [DEBUG] [Thread-116675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:28:25.889 [INFO] [Thread-116675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:28:25.896 [DEBUG] [Thread-116675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] client lang: <none>
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] server lang: <none>
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] kex follows: False
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] Compression: none
2025-12-03T12:28:25.897 [DEBUG] [Thread-116675] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:28:25.954 [DEBUG] [Thread-116675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:28:25.955 [DEBUG] [Thread-116675] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:28:25.955 [DEBUG] [Thread-116675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:28:25.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:28:25.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:28:26.011 [DEBUG] [Thread-116675] [transport.py] [_log()] userauth is OK
2025-12-03T12:28:26.011 [DEBUG] [Thread-116675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:28:26.012 [DEBUG] [Thread-116675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:28:26.012 [DEBUG] [Thread-116675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:28:26.012 [DEBUG] [Thread-116675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:28:26.033 [INFO] [Thread-116675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:28:26.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:28:26.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:28:26.900 [DEBUG] [Thread-116675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:28:26.900 [DEBUG] [Thread-116675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:28:26.947 [DEBUG] [Thread-116675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:28:26.948 [DEBUG] [Thread-116675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:28:26.956 [DEBUG] [Thread-116675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:28:26.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:28:26.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:28:26.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:28:26.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:28:26.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:28:26.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:28:26.990 [DEBUG] [Thread-116675] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:28:32.181 [DEBUG] [Thread-116677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:45.550 [DEBUG] [Thread-116678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:47.226 [DEBUG] [Thread-116679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:28:57.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:28:57.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:28:57.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:28:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 28, 39), 18.76, 28.35, 0.0, 23.48, 19.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:28:57.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:28:39
2025-12-03T12:28:57.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:28:57.955 [DEBUG] [Thread-116680] [transport.py] [_log()] starting thread (client mode): 0xa27c1270
2025-12-03T12:28:57.955 [DEBUG] [Thread-116680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:28:57.975 [DEBUG] [Thread-116680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:28:57.975 [INFO] [Thread-116680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] client lang: <none>
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] server lang: <none>
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] kex follows: False
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] Compression: none
2025-12-03T12:28:57.976 [DEBUG] [Thread-116680] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:28:57.984 [DEBUG] [Thread-116680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:28:57.985 [DEBUG] [Thread-116680] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:28:57.985 [DEBUG] [Thread-116680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:28:57.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:28:57.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:28:57.986 [DEBUG] [Thread-116680] [transport.py] [_log()] userauth is OK
2025-12-03T12:28:57.987 [DEBUG] [Thread-116680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:28:57.987 [DEBUG] [Thread-116680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:28:57.987 [DEBUG] [Thread-116680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:28:57.987 [DEBUG] [Thread-116680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:28:58.004 [INFO] [Thread-116680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:28:58.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:28:58.846 [DEBUG] [Thread-116680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:28:58.846 [DEBUG] [Thread-116680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:28:58.846 [DEBUG] [Thread-116680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:28:58.887 [DEBUG] [Thread-116680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:28:58.887 [DEBUG] [Thread-116680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:28:58.890 [DEBUG] [Thread-116680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:28:58.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:28:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:28:58.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:28:58.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:28:58.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:28:58.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:28:58.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.436161 -999.00  +19.40  14.92     33   +2.90 1 2 1 1 1   888    0 18.30 76.43 ----- 13.9 14.9 171.6 25.9 27.4 -23.8 26.5 -20.2 26.9 -19.4 27.6 -21.7
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.436161
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:28:58.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:28:39', tmtdew=18.76, humidity=28.35, cloud=0.0, wind=23.48, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:28:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:28:58.907 [DEBUG] [Thread-116680] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:28:58.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:28:58.993 [DEBUG] [Thread-116683] [transport.py] [_log()] starting thread (client mode): 0xa5162ad0
2025-12-03T12:28:58.993 [DEBUG] [Thread-116683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:28:59.010 [DEBUG] [Thread-116683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:28:59.010 [INFO] [Thread-116683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] client lang: <none>
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] server lang: <none>
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] kex follows: False
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] Compression: none
2025-12-03T12:28:59.018 [DEBUG] [Thread-116683] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:28:59.074 [DEBUG] [Thread-116683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:28:59.074 [DEBUG] [Thread-116683] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:28:59.074 [DEBUG] [Thread-116683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:28:59.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:28:59.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:28:59.131 [DEBUG] [Thread-116683] [transport.py] [_log()] userauth is OK
2025-12-03T12:28:59.131 [DEBUG] [Thread-116683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:28:59.131 [DEBUG] [Thread-116683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:28:59.131 [DEBUG] [Thread-116683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:28:59.131 [DEBUG] [Thread-116683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:28:59.145 [INFO] [Thread-116683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:28:59.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:28:59.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:29:00.005 [DEBUG] [Thread-116683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:29:00.005 [DEBUG] [Thread-116683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:29:00.053 [DEBUG] [Thread-116683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:29:00.054 [DEBUG] [Thread-116683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:29:00.062 [DEBUG] [Thread-116683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:29:00.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:29:00.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:29:00.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:29:00.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:29:00.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:29:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:29:00.093 [DEBUG] [Thread-116683] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:29:02.253 [DEBUG] [Thread-116685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:03.195 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:03.196 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:17.290 [DEBUG] [Thread-116686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:30.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:29:30.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:29:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:29:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 29, 11), 18.38, 29.03, 0.0, 20.73, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:29:30.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:29:11
2025-12-03T12:29:30.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:29:31.048 [DEBUG] [Thread-116687] [transport.py] [_log()] starting thread (client mode): 0xa27b7100
2025-12-03T12:29:31.048 [DEBUG] [Thread-116687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:29:31.069 [DEBUG] [Thread-116687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:29:31.069 [INFO] [Thread-116687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] client lang: <none>
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] server lang: <none>
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] kex follows: False
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:29:31.072 [DEBUG] [Thread-116687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:29:31.073 [DEBUG] [Thread-116687] [transport.py] [_log()] Compression: none
2025-12-03T12:29:31.073 [DEBUG] [Thread-116687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:29:31.092 [DEBUG] [Thread-116687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:29:31.092 [DEBUG] [Thread-116687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:29:31.093 [DEBUG] [Thread-116687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:29:31.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:29:31.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:29:31.095 [DEBUG] [Thread-116687] [transport.py] [_log()] userauth is OK
2025-12-03T12:29:31.095 [DEBUG] [Thread-116687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:29:31.096 [DEBUG] [Thread-116687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:29:31.096 [DEBUG] [Thread-116687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:29:31.096 [DEBUG] [Thread-116687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:29:31.131 [INFO] [Thread-116687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:29:31.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:29:31.775 [DEBUG] [Thread-116687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:29:31.775 [DEBUG] [Thread-116687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:29:31.776 [DEBUG] [Thread-116687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:29:31.817 [DEBUG] [Thread-116687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:29:31.817 [DEBUG] [Thread-116687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:29:31.820 [DEBUG] [Thread-116687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:29:31.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:29:31.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:29:31.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:29:31.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:29:31.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:29:31.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:29:31.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:29:31.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.436508 -999.00  +19.90  21.90     32   +3.10 1 2 1 1 1   888    0 18.40 78.82 ----- 21.8 21.9 165.0 26.2 27.6 -20.6 -999.0 -999.0 27.0 -20.0 27.8 -22.4
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.436508
2025-12-03T12:29:31.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:29:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:29:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:29:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:29:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:29:31.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:29:11', tmtdew=18.38, humidity=29.03, cloud=0.0, wind=20.73, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:28:34.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:29:31.846 [DEBUG] [Thread-116687] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:29:31.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:29:31.944 [DEBUG] [Thread-116690] [transport.py] [_log()] starting thread (client mode): 0xa27cbac0
2025-12-03T12:29:31.944 [DEBUG] [Thread-116690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:29:31.958 [DEBUG] [Thread-116690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:29:31.958 [INFO] [Thread-116690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] client lang: <none>
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] server lang: <none>
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] kex follows: False
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] Compression: none
2025-12-03T12:29:31.966 [DEBUG] [Thread-116690] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:29:32.027 [DEBUG] [Thread-116690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:29:32.028 [DEBUG] [Thread-116690] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:29:32.028 [DEBUG] [Thread-116690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:29:32.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:29:32.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:29:32.084 [DEBUG] [Thread-116690] [transport.py] [_log()] userauth is OK
2025-12-03T12:29:32.084 [DEBUG] [Thread-116690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:29:32.084 [DEBUG] [Thread-116690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:29:32.084 [DEBUG] [Thread-116690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:29:32.084 [DEBUG] [Thread-116690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:29:32.103 [INFO] [Thread-116690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:29:32.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:29:32.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:29:32.318 [DEBUG] [Thread-116692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:32.940 [DEBUG] [Thread-116690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:29:32.940 [DEBUG] [Thread-116690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:29:32.988 [DEBUG] [Thread-116690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:29:32.988 [DEBUG] [Thread-116690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:29:32.999 [DEBUG] [Thread-116690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:29:33.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:29:33.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:29:33.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:29:33.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:29:33.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:29:33.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:29:33.035 [DEBUG] [Thread-116690] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:29:45.580 [DEBUG] [Thread-116693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:29:47.362 [DEBUG] [Thread-116694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:02.392 [DEBUG] [Thread-116695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:03.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:30:03.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:30:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:30:03.333 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:03.334 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:03.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 29, 43), 18.38, 29.09, 0.0, 21.39, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:30:03.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:29:43
2025-12-03T12:30:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:30:03.989 [DEBUG] [Thread-116696] [transport.py] [_log()] starting thread (client mode): 0xa27cb5e0
2025-12-03T12:30:03.989 [DEBUG] [Thread-116696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:30:04.007 [DEBUG] [Thread-116696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:30:04.008 [INFO] [Thread-116696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] client lang: <none>
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] server lang: <none>
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] kex follows: False
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] Compression: none
2025-12-03T12:30:04.011 [DEBUG] [Thread-116696] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:30:04.020 [DEBUG] [Thread-116696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:30:04.020 [DEBUG] [Thread-116696] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:30:04.021 [DEBUG] [Thread-116696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:30:04.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:30:04.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:30:04.022 [DEBUG] [Thread-116696] [transport.py] [_log()] userauth is OK
2025-12-03T12:30:04.022 [DEBUG] [Thread-116696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:30:04.023 [DEBUG] [Thread-116696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:30:04.023 [DEBUG] [Thread-116696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:30:04.023 [DEBUG] [Thread-116696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:30:04.040 [INFO] [Thread-116696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:30:04.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:30:04.879 [DEBUG] [Thread-116696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:30:04.879 [DEBUG] [Thread-116696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:30:04.880 [DEBUG] [Thread-116696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:30:04.921 [DEBUG] [Thread-116696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:30:04.921 [DEBUG] [Thread-116696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:30:04.924 [DEBUG] [Thread-116696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:30:04.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:30:04.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:30:04.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:30:04.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:30:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:30:04.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:30:04.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:30:04.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:30:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:30:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.437203 -999.00  +19.90  22.74     32   +3.10 1 2 1 1 1   888    0 19.06 91.53 ----- 21.2 22.7 167.6 25.0 27.6 -23.3 26.7 -20.4 27.0 -20.5 27.6 -22.2
2025-12-03T12:30:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:30:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:30:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.437203
2025-12-03T12:30:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:30:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:30:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:30:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:30:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:30:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:29:43', tmtdew=18.38, humidity=29.09, cloud=0.0, wind=21.39, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:29:34.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:30:04.950 [DEBUG] [Thread-116696] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:30:05.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:30:05.058 [DEBUG] [Thread-116699] [transport.py] [_log()] starting thread (client mode): 0xa5199f30
2025-12-03T12:30:05.058 [DEBUG] [Thread-116699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:30:05.073 [DEBUG] [Thread-116699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:30:05.073 [INFO] [Thread-116699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:05.081 [DEBUG] [Thread-116699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] client lang: <none>
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] server lang: <none>
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] kex follows: False
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:30:05.082 [DEBUG] [Thread-116699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:30:05.083 [DEBUG] [Thread-116699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:30:05.083 [DEBUG] [Thread-116699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:30:05.083 [DEBUG] [Thread-116699] [transport.py] [_log()] Compression: none
2025-12-03T12:30:05.083 [DEBUG] [Thread-116699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:30:05.139 [DEBUG] [Thread-116699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:30:05.139 [DEBUG] [Thread-116699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:30:05.139 [DEBUG] [Thread-116699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:30:05.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:30:05.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:30:05.200 [DEBUG] [Thread-116699] [transport.py] [_log()] userauth is OK
2025-12-03T12:30:05.201 [DEBUG] [Thread-116699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:30:05.201 [DEBUG] [Thread-116699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:30:05.201 [DEBUG] [Thread-116699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:30:05.201 [DEBUG] [Thread-116699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:30:05.219 [INFO] [Thread-116699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:30:05.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:30:05.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:30:06.081 [DEBUG] [Thread-116699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:30:06.081 [DEBUG] [Thread-116699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:30:06.128 [DEBUG] [Thread-116699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:30:06.129 [DEBUG] [Thread-116699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:30:06.138 [DEBUG] [Thread-116699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:30:06.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:30:06.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:30:06.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:30:06.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:30:06.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:30:06.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:30:06.172 [DEBUG] [Thread-116699] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:30:17.420 [DEBUG] [Thread-116701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:32.452 [DEBUG] [Thread-116702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:36.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:30:36.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:30:36.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:30:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 30, 15), 18.29, 29.23, 0.0, 20.43, 18.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:30:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:30:15
2025-12-03T12:30:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:30:37.126 [DEBUG] [Thread-116703] [transport.py] [_log()] starting thread (client mode): 0xa27c2890
2025-12-03T12:30:37.126 [DEBUG] [Thread-116703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:30:37.146 [DEBUG] [Thread-116703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:30:37.146 [INFO] [Thread-116703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:30:37.149 [DEBUG] [Thread-116703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] client lang: <none>
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] server lang: <none>
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] kex follows: False
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:30:37.150 [DEBUG] [Thread-116703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:30:37.151 [DEBUG] [Thread-116703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:30:37.151 [DEBUG] [Thread-116703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:30:37.151 [DEBUG] [Thread-116703] [transport.py] [_log()] Compression: none
2025-12-03T12:30:37.151 [DEBUG] [Thread-116703] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:30:37.167 [DEBUG] [Thread-116703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:30:37.168 [DEBUG] [Thread-116703] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:30:37.168 [DEBUG] [Thread-116703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:30:37.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:30:37.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:30:37.170 [DEBUG] [Thread-116703] [transport.py] [_log()] userauth is OK
2025-12-03T12:30:37.170 [DEBUG] [Thread-116703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:30:37.171 [DEBUG] [Thread-116703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:30:37.171 [DEBUG] [Thread-116703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:30:37.171 [DEBUG] [Thread-116703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:30:37.205 [INFO] [Thread-116703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:30:37.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:30:37.844 [DEBUG] [Thread-116703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:30:37.844 [DEBUG] [Thread-116703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:30:37.845 [DEBUG] [Thread-116703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:30:37.886 [DEBUG] [Thread-116703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:30:37.886 [DEBUG] [Thread-116703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:30:37.889 [DEBUG] [Thread-116703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:30:37.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:30:37.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:30:37.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:30:37.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:30:37.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:30:37.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:30:37.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.437550 -999.00  +19.30  19.34     33   +3.00 1 2 1 1 1   888    0 18.59 91.28 ----- 16.5 19.3 141.0 24.3 27.5 -22.8 26.7 -21.6 26.8 -20.7 27.6 -23.2
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:30:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.437550
2025-12-03T12:30:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:30:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:30:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:30:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:30:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:30:37.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:30:15', tmtdew=18.29, humidity=29.23, cloud=0.0, wind=20.43, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:30:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:30:37.912 [DEBUG] [Thread-116703] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:30:37.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:30:38.010 [DEBUG] [Thread-116706] [transport.py] [_log()] starting thread (client mode): 0xa519b0a0
2025-12-03T12:30:38.010 [DEBUG] [Thread-116706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:30:38.024 [DEBUG] [Thread-116706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:30:38.024 [INFO] [Thread-116706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] client lang: <none>
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] server lang: <none>
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] kex follows: False
2025-12-03T12:30:38.032 [DEBUG] [Thread-116706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] Compression: none
2025-12-03T12:30:38.033 [DEBUG] [Thread-116706] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:30:38.088 [DEBUG] [Thread-116706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:30:38.088 [DEBUG] [Thread-116706] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:30:38.089 [DEBUG] [Thread-116706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:30:38.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:30:38.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:30:38.144 [DEBUG] [Thread-116706] [transport.py] [_log()] userauth is OK
2025-12-03T12:30:38.145 [DEBUG] [Thread-116706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:30:38.145 [DEBUG] [Thread-116706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:30:38.145 [DEBUG] [Thread-116706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:30:38.145 [DEBUG] [Thread-116706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:30:38.164 [INFO] [Thread-116706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:30:38.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:30:38.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:30:39.013 [DEBUG] [Thread-116706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:30:39.013 [DEBUG] [Thread-116706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:30:39.061 [DEBUG] [Thread-116706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:30:39.061 [DEBUG] [Thread-116706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:30:39.069 [DEBUG] [Thread-116706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:30:39.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:30:39.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:30:39.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:30:39.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:30:39.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:30:39.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:30:39.108 [DEBUG] [Thread-116706] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:30:45.625 [DEBUG] [Thread-116708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:30:47.481 [DEBUG] [Thread-116709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:02.527 [DEBUG] [Thread-116710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:03.476 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:03.477 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:31:09.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:31:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:31:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 30, 47), 17.93, 29.76, 0.0, 16.8, 18.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:31:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:30:47
2025-12-03T12:31:09.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:31:10.067 [DEBUG] [Thread-116711] [transport.py] [_log()] starting thread (client mode): 0xa27b6530
2025-12-03T12:31:10.067 [DEBUG] [Thread-116711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:31:10.088 [DEBUG] [Thread-116711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:31:10.088 [INFO] [Thread-116711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] client lang: <none>
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] server lang: <none>
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] kex follows: False
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] Compression: none
2025-12-03T12:31:10.092 [DEBUG] [Thread-116711] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:31:10.109 [DEBUG] [Thread-116711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:31:10.110 [DEBUG] [Thread-116711] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:31:10.110 [DEBUG] [Thread-116711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:31:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:31:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:31:10.112 [DEBUG] [Thread-116711] [transport.py] [_log()] userauth is OK
2025-12-03T12:31:10.112 [DEBUG] [Thread-116711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:31:10.112 [DEBUG] [Thread-116711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:31:10.112 [DEBUG] [Thread-116711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:31:10.112 [DEBUG] [Thread-116711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:31:10.129 [INFO] [Thread-116711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:31:10.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:31:10.847 [DEBUG] [Thread-116711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:31:10.847 [DEBUG] [Thread-116711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:31:10.848 [DEBUG] [Thread-116711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:31:10.888 [DEBUG] [Thread-116711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:31:10.888 [DEBUG] [Thread-116711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:31:10.891 [DEBUG] [Thread-116711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:31:10.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:31:10.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:31:10.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:31:10.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:31:10.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:31:10.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:31:10.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.437897 -999.00  +19.30  10.81     35   +3.40 1 2 1 1 1   888    0 18.74 91.09 ----- 13.5 10.8 139.4 16.6 27.4 -21.4 26.8 -21.0 26.9 -21.3 27.6 -22.1
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:31:10.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.437897
2025-12-03T12:31:10.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:31:10.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:31:10.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:31:10.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:31:10.915 [DEBUG] [Thread-116711] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:31:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:31:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:30:47', tmtdew=17.93, humidity=29.76, cloud=0.0, wind=16.8, temperature=18.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:30:34.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:31:10.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:31:11.014 [DEBUG] [Thread-116714] [transport.py] [_log()] starting thread (client mode): 0xa27c8760
2025-12-03T12:31:11.014 [DEBUG] [Thread-116714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:31:11.029 [DEBUG] [Thread-116714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:31:11.029 [INFO] [Thread-116714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:11.036 [DEBUG] [Thread-116714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] client lang: <none>
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] server lang: <none>
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] kex follows: False
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] Compression: none
2025-12-03T12:31:11.037 [DEBUG] [Thread-116714] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:31:11.093 [DEBUG] [Thread-116714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:31:11.093 [DEBUG] [Thread-116714] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:31:11.094 [DEBUG] [Thread-116714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:31:11.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:31:11.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:31:11.151 [DEBUG] [Thread-116714] [transport.py] [_log()] userauth is OK
2025-12-03T12:31:11.152 [DEBUG] [Thread-116714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:31:11.152 [DEBUG] [Thread-116714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:31:11.152 [DEBUG] [Thread-116714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:31:11.152 [DEBUG] [Thread-116714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:31:11.170 [INFO] [Thread-116714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:31:11.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:31:11.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:31:12.045 [DEBUG] [Thread-116714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:31:12.045 [DEBUG] [Thread-116714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:31:12.093 [DEBUG] [Thread-116714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:31:12.093 [DEBUG] [Thread-116714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:31:12.106 [DEBUG] [Thread-116714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:31:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:31:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:31:12.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:31:12.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:31:12.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:31:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:31:12.143 [DEBUG] [Thread-116714] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:31:17.557 [DEBUG] [Thread-116716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:32.601 [DEBUG] [Thread-116717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:42.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:31:42.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:31:42.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:31:42.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 31, 19), 17.91, 29.82, 0.0, 16.87, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:31:42.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:31:19
2025-12-03T12:31:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:31:43.107 [DEBUG] [Thread-116718] [transport.py] [_log()] starting thread (client mode): 0xa5198f10
2025-12-03T12:31:43.107 [DEBUG] [Thread-116718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:31:43.128 [DEBUG] [Thread-116718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:31:43.128 [INFO] [Thread-116718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:31:43.131 [DEBUG] [Thread-116718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:31:43.131 [DEBUG] [Thread-116718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:31:43.131 [DEBUG] [Thread-116718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:31:43.131 [DEBUG] [Thread-116718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] client lang: <none>
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] server lang: <none>
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] kex follows: False
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:31:43.132 [DEBUG] [Thread-116718] [transport.py] [_log()] Compression: none
2025-12-03T12:31:43.133 [DEBUG] [Thread-116718] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:31:43.151 [DEBUG] [Thread-116718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:31:43.151 [DEBUG] [Thread-116718] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:31:43.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:31:43.152 [DEBUG] [Thread-116718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:31:43.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:31:43.154 [DEBUG] [Thread-116718] [transport.py] [_log()] userauth is OK
2025-12-03T12:31:43.154 [DEBUG] [Thread-116718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:31:43.154 [DEBUG] [Thread-116718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:31:43.154 [DEBUG] [Thread-116718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:31:43.154 [DEBUG] [Thread-116718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:31:43.170 [INFO] [Thread-116718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:31:43.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:31:43.785 [DEBUG] [Thread-116718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:31:43.785 [DEBUG] [Thread-116718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:31:43.786 [DEBUG] [Thread-116718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:31:43.827 [DEBUG] [Thread-116718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:31:43.827 [DEBUG] [Thread-116718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:31:43.830 [DEBUG] [Thread-116718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:31:43.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:31:43.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:31:43.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:31:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:31:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:31:43.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:31:43.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.438244 -999.00  +19.60  15.70     34   +3.70 1 2 1 1 1   888    0 18.35 78.25 ----- 15.1 15.7 144.8 21.2 27.4 -21.8 26.8 -21.7 26.9 -22.9 27.6 -23.0
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:31:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.438244
2025-12-03T12:31:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:31:43.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:31:19', tmtdew=17.91, humidity=29.82, cloud=0.0, wind=16.87, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:31:04.282', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:31:43.856 [DEBUG] [Thread-116718] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:31:43.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:31:43.953 [DEBUG] [Thread-116721] [transport.py] [_log()] starting thread (client mode): 0xa27c3040
2025-12-03T12:31:43.953 [DEBUG] [Thread-116721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:31:43.968 [DEBUG] [Thread-116721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:31:43.968 [INFO] [Thread-116721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:31:43.975 [DEBUG] [Thread-116721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:31:43.975 [DEBUG] [Thread-116721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] client lang: <none>
2025-12-03T12:31:43.976 [DEBUG] [Thread-116721] [transport.py] [_log()] server lang: <none>
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] kex follows: False
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:31:43.977 [DEBUG] [Thread-116721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:31:43.978 [DEBUG] [Thread-116721] [transport.py] [_log()] Compression: none
2025-12-03T12:31:43.978 [DEBUG] [Thread-116721] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:31:44.033 [DEBUG] [Thread-116721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:31:44.033 [DEBUG] [Thread-116721] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:31:44.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:31:44.034 [DEBUG] [Thread-116721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:31:44.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:31:44.089 [DEBUG] [Thread-116721] [transport.py] [_log()] userauth is OK
2025-12-03T12:31:44.089 [DEBUG] [Thread-116721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:31:44.089 [DEBUG] [Thread-116721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:31:44.090 [DEBUG] [Thread-116721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:31:44.090 [DEBUG] [Thread-116721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:31:44.108 [INFO] [Thread-116721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:31:44.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:31:44.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:31:44.951 [DEBUG] [Thread-116721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:31:44.952 [DEBUG] [Thread-116721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:31:45.000 [DEBUG] [Thread-116721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:31:45.000 [DEBUG] [Thread-116721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:31:45.009 [DEBUG] [Thread-116721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:31:45.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:31:45.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:31:45.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:31:45.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:31:45.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:31:45.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:31:45.044 [DEBUG] [Thread-116721] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:31:45.674 [DEBUG] [Thread-116723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:31:47.629 [DEBUG] [Thread-116724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:02.664 [DEBUG] [Thread-116725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:03.620 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:03.621 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:15.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:32:15.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:32:15.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:32:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 31, 51), 17.84, 30.37, 0.0, 15.63, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:32:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:31:51
2025-12-03T12:32:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:32:16.058 [DEBUG] [Thread-116726] [transport.py] [_log()] starting thread (client mode): 0xa27c2620
2025-12-03T12:32:16.058 [DEBUG] [Thread-116726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:32:16.077 [DEBUG] [Thread-116726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:32:16.077 [INFO] [Thread-116726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] client lang: <none>
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] server lang: <none>
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] kex follows: False
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] Compression: none
2025-12-03T12:32:16.081 [DEBUG] [Thread-116726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:32:16.098 [DEBUG] [Thread-116726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:32:16.099 [DEBUG] [Thread-116726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:32:16.099 [DEBUG] [Thread-116726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:32:16.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:32:16.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:32:16.100 [DEBUG] [Thread-116726] [transport.py] [_log()] userauth is OK
2025-12-03T12:32:16.100 [DEBUG] [Thread-116726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:32:16.100 [DEBUG] [Thread-116726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:32:16.100 [DEBUG] [Thread-116726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:32:16.100 [DEBUG] [Thread-116726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:32:16.112 [INFO] [Thread-116726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:32:16.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:32:16.902 [DEBUG] [Thread-116726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:32:16.902 [DEBUG] [Thread-116726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:32:16.902 [DEBUG] [Thread-116726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:32:16.943 [DEBUG] [Thread-116726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:32:16.943 [DEBUG] [Thread-116726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:32:16.945 [DEBUG] [Thread-116726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:32:16.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:32:16.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:32:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:32:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:32:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:32:16.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:32:16.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:32:16.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.438592 -999.00  +19.60  12.58     34   +3.50 1 2 1 1 1   888    0 18.46 81.44 ----- 11.4 12.6 163.0 17.2 27.2 -23.5 26.6 -23.3 26.8 -21.4 27.4 -23.1
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.438592
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:32:16.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:31:51', tmtdew=17.84, humidity=30.37, cloud=0.0, wind=15.63, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:31:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:32:16.957 [DEBUG] [Thread-116726] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:32:17.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:32:17.044 [DEBUG] [Thread-116729] [transport.py] [_log()] starting thread (client mode): 0xa27c16f0
2025-12-03T12:32:17.044 [DEBUG] [Thread-116729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:32:17.059 [DEBUG] [Thread-116729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:32:17.059 [INFO] [Thread-116729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] client lang: <none>
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] server lang: <none>
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] kex follows: False
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] Compression: none
2025-12-03T12:32:17.067 [DEBUG] [Thread-116729] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:32:17.124 [DEBUG] [Thread-116729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:32:17.125 [DEBUG] [Thread-116729] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:32:17.125 [DEBUG] [Thread-116729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:32:17.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:32:17.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:32:17.181 [DEBUG] [Thread-116729] [transport.py] [_log()] userauth is OK
2025-12-03T12:32:17.181 [DEBUG] [Thread-116729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:32:17.181 [DEBUG] [Thread-116729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:32:17.181 [DEBUG] [Thread-116729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:32:17.181 [DEBUG] [Thread-116729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:32:17.197 [INFO] [Thread-116729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:32:17.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:32:17.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:32:17.688 [DEBUG] [Thread-116731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:18.031 [DEBUG] [Thread-116729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:32:18.031 [DEBUG] [Thread-116729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:32:18.079 [DEBUG] [Thread-116729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:32:18.079 [DEBUG] [Thread-116729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:32:18.088 [DEBUG] [Thread-116729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:32:18.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:32:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:32:18.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:32:18.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:32:18.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:32:18.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:32:18.119 [DEBUG] [Thread-116729] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:32:32.733 [DEBUG] [Thread-116732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:45.715 [DEBUG] [Thread-116733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:47.761 [DEBUG] [Thread-116734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:32:48.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:32:48.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:32:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:32:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 32, 23), 18.07, 29.89, 0.0, 15.37, 18.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:32:48.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:32:23
2025-12-03T12:32:48.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:32:49.076 [DEBUG] [Thread-116735] [transport.py] [_log()] starting thread (client mode): 0xa5199ba0
2025-12-03T12:32:49.076 [DEBUG] [Thread-116735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:32:49.096 [DEBUG] [Thread-116735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:32:49.096 [INFO] [Thread-116735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:32:49.099 [DEBUG] [Thread-116735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:32:49.099 [DEBUG] [Thread-116735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:32:49.099 [DEBUG] [Thread-116735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:32:49.099 [DEBUG] [Thread-116735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:49.099 [DEBUG] [Thread-116735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] client lang: <none>
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] server lang: <none>
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] kex follows: False
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:32:49.100 [DEBUG] [Thread-116735] [transport.py] [_log()] Compression: none
2025-12-03T12:32:49.101 [DEBUG] [Thread-116735] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:32:49.119 [DEBUG] [Thread-116735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:32:49.119 [DEBUG] [Thread-116735] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:32:49.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:32:49.121 [DEBUG] [Thread-116735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:32:49.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:32:49.122 [DEBUG] [Thread-116735] [transport.py] [_log()] userauth is OK
2025-12-03T12:32:49.123 [DEBUG] [Thread-116735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:32:49.123 [DEBUG] [Thread-116735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:32:49.123 [DEBUG] [Thread-116735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:32:49.123 [DEBUG] [Thread-116735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:32:49.137 [INFO] [Thread-116735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:32:49.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:32:49.790 [DEBUG] [Thread-116735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:32:49.790 [DEBUG] [Thread-116735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:32:49.799 [DEBUG] [Thread-116735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:32:49.831 [DEBUG] [Thread-116735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:32:49.831 [DEBUG] [Thread-116735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:32:49.834 [DEBUG] [Thread-116735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:32:49.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:32:49.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:32:49.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:32:49.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:32:49.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:32:49.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:32:49.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:32:49.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:32:49.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.438939 -999.00  +19.60  11.65     34   +3.40 1 2 1 1 1   888    0 18.26 68.49 ----- 11.6 11.7 145.8 18.2 27.2 -22.4 26.6 -22.0 26.7 -22.6 27.4 -23.7
2025-12-03T12:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.438939
2025-12-03T12:32:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:32:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:32:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:32:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:32:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:32:49.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:32:23', tmtdew=18.07, humidity=29.89, cloud=0.0, wind=15.37, temperature=18.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:32:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:32:49.857 [DEBUG] [Thread-116735] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:32:49.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:32:49.956 [DEBUG] [Thread-116738] [transport.py] [_log()] starting thread (client mode): 0xa27c2440
2025-12-03T12:32:49.956 [DEBUG] [Thread-116738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:32:49.970 [DEBUG] [Thread-116738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:32:49.971 [INFO] [Thread-116738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:32:49.978 [DEBUG] [Thread-116738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:32:49.978 [DEBUG] [Thread-116738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:32:49.978 [DEBUG] [Thread-116738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:32:49.978 [DEBUG] [Thread-116738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] client lang: <none>
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] server lang: <none>
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] kex follows: False
2025-12-03T12:32:49.979 [DEBUG] [Thread-116738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] Compression: none
2025-12-03T12:32:49.980 [DEBUG] [Thread-116738] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:32:50.037 [DEBUG] [Thread-116738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:32:50.038 [DEBUG] [Thread-116738] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:32:50.038 [DEBUG] [Thread-116738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:32:50.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:32:50.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:32:50.093 [DEBUG] [Thread-116738] [transport.py] [_log()] userauth is OK
2025-12-03T12:32:50.093 [DEBUG] [Thread-116738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:32:50.093 [DEBUG] [Thread-116738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:32:50.093 [DEBUG] [Thread-116738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:32:50.093 [DEBUG] [Thread-116738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:32:50.107 [INFO] [Thread-116738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:32:50.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:32:50.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:32:50.982 [DEBUG] [Thread-116738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:32:50.982 [DEBUG] [Thread-116738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:32:51.029 [DEBUG] [Thread-116738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:32:51.030 [DEBUG] [Thread-116738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:32:51.038 [DEBUG] [Thread-116738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:32:51.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:32:51.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:32:51.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:32:51.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:32:51.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:32:51.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:32:51.072 [DEBUG] [Thread-116738] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:33:02.789 [DEBUG] [Thread-116740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:03.760 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:03.762 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:17.842 [DEBUG] [Thread-116741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:33:21.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:33:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:33:21.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 32, 55), 17.9, 30.11, 0.0, 13.61, 18.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:33:21.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:32:55
2025-12-03T12:33:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:33:22.056 [DEBUG] [Thread-116742] [transport.py] [_log()] starting thread (client mode): 0xa27c8f70
2025-12-03T12:33:22.057 [DEBUG] [Thread-116742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:33:22.077 [DEBUG] [Thread-116742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:33:22.077 [INFO] [Thread-116742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:33:22.080 [DEBUG] [Thread-116742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:33:22.080 [DEBUG] [Thread-116742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] client lang: <none>
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] server lang: <none>
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] kex follows: False
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:33:22.081 [DEBUG] [Thread-116742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:33:22.082 [DEBUG] [Thread-116742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:33:22.082 [DEBUG] [Thread-116742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:33:22.082 [DEBUG] [Thread-116742] [transport.py] [_log()] Compression: none
2025-12-03T12:33:22.082 [DEBUG] [Thread-116742] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:33:22.100 [DEBUG] [Thread-116742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:33:22.101 [DEBUG] [Thread-116742] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:33:22.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:33:22.102 [DEBUG] [Thread-116742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:33:22.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:33:22.104 [DEBUG] [Thread-116742] [transport.py] [_log()] userauth is OK
2025-12-03T12:33:22.104 [DEBUG] [Thread-116742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:33:22.104 [DEBUG] [Thread-116742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:33:22.104 [DEBUG] [Thread-116742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:33:22.104 [DEBUG] [Thread-116742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:33:22.129 [INFO] [Thread-116742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:33:22.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:33:22.873 [DEBUG] [Thread-116742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:33:22.873 [DEBUG] [Thread-116742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:33:22.873 [DEBUG] [Thread-116742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:33:22.914 [DEBUG] [Thread-116742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:33:22.914 [DEBUG] [Thread-116742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:33:22.917 [DEBUG] [Thread-116742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:33:22.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:33:22.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:33:22.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:33:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:33:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:33:22.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:33:22.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:33:22.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:33:22.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:33:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.439286 -999.00  +19.40  10.85     34   +3.20 1 2 1 1 1   888    0 17.76 61.97 ----- 14.0 10.8 134.0 16.1 27.1 -22.6 26.6 -21.6 26.7 -21.5 27.3 -23.5
2025-12-03T12:33:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:33:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:33:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.439286
2025-12-03T12:33:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:33:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:33:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:33:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:33:22.940 [DEBUG] [Thread-116742] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:33:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:33:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:32:55', tmtdew=17.9, humidity=30.11, cloud=0.0, wind=13.61, temperature=18.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:32:34.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:33:23.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:33:23.036 [DEBUG] [Thread-116745] [transport.py] [_log()] starting thread (client mode): 0xa27cb3d0
2025-12-03T12:33:23.036 [DEBUG] [Thread-116745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:33:23.051 [DEBUG] [Thread-116745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:33:23.051 [INFO] [Thread-116745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] client lang: <none>
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] server lang: <none>
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] kex follows: False
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:33:23.059 [DEBUG] [Thread-116745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:33:23.060 [DEBUG] [Thread-116745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:33:23.060 [DEBUG] [Thread-116745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:33:23.060 [DEBUG] [Thread-116745] [transport.py] [_log()] Compression: none
2025-12-03T12:33:23.060 [DEBUG] [Thread-116745] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:33:23.117 [DEBUG] [Thread-116745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:33:23.118 [DEBUG] [Thread-116745] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:33:23.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:33:23.119 [DEBUG] [Thread-116745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:33:23.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:33:23.174 [DEBUG] [Thread-116745] [transport.py] [_log()] userauth is OK
2025-12-03T12:33:23.174 [DEBUG] [Thread-116745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:33:23.174 [DEBUG] [Thread-116745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:33:23.174 [DEBUG] [Thread-116745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:33:23.174 [DEBUG] [Thread-116745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:33:23.193 [INFO] [Thread-116745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:33:23.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:33:23.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:33:24.018 [DEBUG] [Thread-116745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:33:24.018 [DEBUG] [Thread-116745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:33:24.067 [DEBUG] [Thread-116745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:33:24.067 [DEBUG] [Thread-116745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:33:24.076 [DEBUG] [Thread-116745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:33:24.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:33:24.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:33:24.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:33:24.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:33:24.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:33:24.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:33:24.111 [DEBUG] [Thread-116745] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:33:32.870 [DEBUG] [Thread-116747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:45.756 [DEBUG] [Thread-116748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:47.906 [DEBUG] [Thread-116749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:33:54.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:33:54.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:33:54.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:33:54.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 33, 27), 18.08, 29.78, 0.0, 16.76, 18.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:33:54.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:33:27
2025-12-03T12:33:54.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:33:55.055 [DEBUG] [Thread-116750] [transport.py] [_log()] starting thread (client mode): 0xa5198040
2025-12-03T12:33:55.055 [DEBUG] [Thread-116750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:33:55.076 [DEBUG] [Thread-116750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:33:55.076 [INFO] [Thread-116750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:55.079 [DEBUG] [Thread-116750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] client lang: <none>
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] server lang: <none>
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] kex follows: False
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] Compression: none
2025-12-03T12:33:55.080 [DEBUG] [Thread-116750] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:33:55.099 [DEBUG] [Thread-116750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:33:55.100 [DEBUG] [Thread-116750] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:33:55.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:33:55.101 [DEBUG] [Thread-116750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:33:55.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:33:55.103 [DEBUG] [Thread-116750] [transport.py] [_log()] userauth is OK
2025-12-03T12:33:55.104 [DEBUG] [Thread-116750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:33:55.104 [DEBUG] [Thread-116750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:33:55.104 [DEBUG] [Thread-116750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:33:55.104 [DEBUG] [Thread-116750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:33:55.127 [INFO] [Thread-116750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:33:55.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:33:55.757 [DEBUG] [Thread-116750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:33:55.758 [DEBUG] [Thread-116750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:33:55.758 [DEBUG] [Thread-116750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:33:55.799 [DEBUG] [Thread-116750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:33:55.799 [DEBUG] [Thread-116750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:33:55.802 [DEBUG] [Thread-116750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:33:55.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:33:55.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:33:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:33:55.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:33:55.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:33:55.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:33:55.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.439633 -999.00  +19.00   7.57     33   +2.70 1 2 1 1 1   888    0 18.08 59.39 ----- 7.0 7.6 118.4 14.3 27.1 -25.5 26.7 -21.4 26.8 -21.2 27.4 -22.5
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:33:55.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.439633
2025-12-03T12:33:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:33:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:33:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:33:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:33:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:33:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:33:27', tmtdew=18.08, humidity=29.78, cloud=0.0, wind=16.76, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:33:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:33:55.822 [DEBUG] [Thread-116750] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:33:55.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:33:55.920 [DEBUG] [Thread-116753] [transport.py] [_log()] starting thread (client mode): 0xa51ce3b0
2025-12-03T12:33:55.920 [DEBUG] [Thread-116753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:33:55.935 [DEBUG] [Thread-116753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:33:55.935 [INFO] [Thread-116753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:33:55.943 [DEBUG] [Thread-116753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:33:55.943 [DEBUG] [Thread-116753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:33:55.943 [DEBUG] [Thread-116753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:33:55.943 [DEBUG] [Thread-116753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:55.943 [DEBUG] [Thread-116753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] client lang: <none>
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] server lang: <none>
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] kex follows: False
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:33:55.944 [DEBUG] [Thread-116753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:33:55.945 [DEBUG] [Thread-116753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:33:55.945 [DEBUG] [Thread-116753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:33:55.945 [DEBUG] [Thread-116753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:33:55.945 [DEBUG] [Thread-116753] [transport.py] [_log()] Compression: none
2025-12-03T12:33:55.945 [DEBUG] [Thread-116753] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:33:56.002 [DEBUG] [Thread-116753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:33:56.003 [DEBUG] [Thread-116753] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:33:56.003 [DEBUG] [Thread-116753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:33:56.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:33:56.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:33:56.058 [DEBUG] [Thread-116753] [transport.py] [_log()] userauth is OK
2025-12-03T12:33:56.058 [DEBUG] [Thread-116753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:33:56.058 [DEBUG] [Thread-116753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:33:56.058 [DEBUG] [Thread-116753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:33:56.058 [DEBUG] [Thread-116753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:33:56.077 [INFO] [Thread-116753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:33:56.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:33:56.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:33:56.913 [DEBUG] [Thread-116753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:33:56.913 [DEBUG] [Thread-116753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:33:56.961 [DEBUG] [Thread-116753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:33:56.961 [DEBUG] [Thread-116753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:33:56.970 [DEBUG] [Thread-116753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:33:56.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:33:56.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:33:56.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:33:56.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:33:56.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:33:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:33:57.004 [DEBUG] [Thread-116753] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:34:02.937 [DEBUG] [Thread-116755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:03.902 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:03.903 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:17.981 [DEBUG] [Thread-116756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:27.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:34:27.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:34:27.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:34:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 33, 59), 18.46, 29.25, 0.0, 11.65, 18.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:34:27.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:33:59
2025-12-03T12:34:27.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:34:27.978 [DEBUG] [Thread-116757] [transport.py] [_log()] starting thread (client mode): 0xa51cd060
2025-12-03T12:34:27.978 [DEBUG] [Thread-116757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:34:27.998 [DEBUG] [Thread-116757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:34:27.998 [INFO] [Thread-116757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] client lang: <none>
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] server lang: <none>
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] kex follows: False
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] Compression: none
2025-12-03T12:34:28.001 [DEBUG] [Thread-116757] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:34:28.021 [DEBUG] [Thread-116757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:34:28.022 [DEBUG] [Thread-116757] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:34:28.023 [DEBUG] [Thread-116757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:34:28.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:34:28.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:34:28.024 [DEBUG] [Thread-116757] [transport.py] [_log()] userauth is OK
2025-12-03T12:34:28.025 [DEBUG] [Thread-116757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:34:28.025 [DEBUG] [Thread-116757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:34:28.025 [DEBUG] [Thread-116757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:34:28.025 [DEBUG] [Thread-116757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:34:28.060 [INFO] [Thread-116757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:34:28.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:34:28.753 [DEBUG] [Thread-116757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:34:28.754 [DEBUG] [Thread-116757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:34:28.754 [DEBUG] [Thread-116757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:34:28.795 [DEBUG] [Thread-116757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:34:28.795 [DEBUG] [Thread-116757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:34:28.798 [DEBUG] [Thread-116757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:34:28.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:34:28.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:34:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:34:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:34:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:34:28.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:34:28.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.440328 -999.00  +19.40   7.32     34   +3.10 1 2 1 1 1   888    0 17.70 54.72 ----- 13.3 7.3 180.9 12.3 27.2 -21.6 26.7 -22.2 27.0 -21.4 27.5 -21.8
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:34:28.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.440328
2025-12-03T12:34:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:34:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:34:28.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:34:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:34:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:34:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:33:59', tmtdew=18.46, humidity=29.25, cloud=0.0, wind=11.65, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:34:04.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:34:28.825 [DEBUG] [Thread-116757] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:34:28.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:34:28.921 [DEBUG] [Thread-116760] [transport.py] [_log()] starting thread (client mode): 0xa27c8670
2025-12-03T12:34:28.921 [DEBUG] [Thread-116760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:34:28.937 [DEBUG] [Thread-116760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:34:28.937 [INFO] [Thread-116760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:34:28.944 [DEBUG] [Thread-116760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] client lang: <none>
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] server lang: <none>
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] kex follows: False
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:34:28.945 [DEBUG] [Thread-116760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:34:28.947 [DEBUG] [Thread-116760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:34:28.947 [DEBUG] [Thread-116760] [transport.py] [_log()] Compression: none
2025-12-03T12:34:28.947 [DEBUG] [Thread-116760] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:34:29.001 [DEBUG] [Thread-116760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:34:29.002 [DEBUG] [Thread-116760] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:34:29.002 [DEBUG] [Thread-116760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:34:29.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:34:29.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:34:29.061 [DEBUG] [Thread-116760] [transport.py] [_log()] userauth is OK
2025-12-03T12:34:29.061 [DEBUG] [Thread-116760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:34:29.061 [DEBUG] [Thread-116760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:34:29.061 [DEBUG] [Thread-116760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:34:29.061 [DEBUG] [Thread-116760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:34:29.079 [INFO] [Thread-116760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:34:29.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:34:29.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:34:29.953 [DEBUG] [Thread-116760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:34:29.953 [DEBUG] [Thread-116760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:34:30.001 [DEBUG] [Thread-116760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:34:30.001 [DEBUG] [Thread-116760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:34:30.009 [DEBUG] [Thread-116760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:34:30.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:34:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:34:30.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:34:30.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:34:30.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:34:30.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:34:30.044 [DEBUG] [Thread-116760] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:34:33.009 [DEBUG] [Thread-116762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:45.794 [DEBUG] [Thread-116763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:34:48.050 [DEBUG] [Thread-116764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:00.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:35:00.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:35:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:35:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 34, 32), 18.32, 29.46, 0.0, 11.56, 18.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:35:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:34:32
2025-12-03T12:35:00.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:35:00.978 [DEBUG] [Thread-116765] [transport.py] [_log()] starting thread (client mode): 0xa27c3490
2025-12-03T12:35:00.978 [DEBUG] [Thread-116765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:35:00.992 [DEBUG] [Thread-116765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:35:00.993 [INFO] [Thread-116765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] client lang: <none>
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] server lang: <none>
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] kex follows: False
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] Compression: none
2025-12-03T12:35:00.996 [DEBUG] [Thread-116765] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:35:01.011 [DEBUG] [Thread-116765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:35:01.012 [DEBUG] [Thread-116765] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:35:01.012 [DEBUG] [Thread-116765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:35:01.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:35:01.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:35:01.014 [DEBUG] [Thread-116765] [transport.py] [_log()] userauth is OK
2025-12-03T12:35:01.014 [DEBUG] [Thread-116765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:35:01.014 [DEBUG] [Thread-116765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:35:01.014 [DEBUG] [Thread-116765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:35:01.014 [DEBUG] [Thread-116765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:35:01.034 [INFO] [Thread-116765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:35:01.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:35:01.603 [DEBUG] [Thread-116765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:35:01.603 [DEBUG] [Thread-116765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:35:01.604 [DEBUG] [Thread-116765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:35:01.645 [DEBUG] [Thread-116765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:35:01.645 [DEBUG] [Thread-116765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:35:01.648 [DEBUG] [Thread-116765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:35:01.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:35:01.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:35:01.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:35:01.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:35:01.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:35:01.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:35:01.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:35:01.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:35:01.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:35:01.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.440675 -999.00  +19.50   7.16     34   +3.20 1 2 1 1 1   888    0 17.59 50.67 ----- 9.6 7.2 170.4 16.3 27.2 -22.0 26.9 -20.7 27.2 -21.1 27.6 -21.4
2025-12-03T12:35:01.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:35:01.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:35:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.440675
2025-12-03T12:35:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:35:01.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:35:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:35:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:35:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:35:01.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:34:32', tmtdew=18.32, humidity=29.46, cloud=0.0, wind=11.56, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:34:34.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:35:01.676 [DEBUG] [Thread-116765] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:35:01.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:35:01.772 [DEBUG] [Thread-116768] [transport.py] [_log()] starting thread (client mode): 0xa27c23e0
2025-12-03T12:35:01.772 [DEBUG] [Thread-116768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:35:01.787 [DEBUG] [Thread-116768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:35:01.787 [INFO] [Thread-116768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:35:01.795 [DEBUG] [Thread-116768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:35:01.795 [DEBUG] [Thread-116768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:35:01.795 [DEBUG] [Thread-116768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:35:01.795 [DEBUG] [Thread-116768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] client lang: <none>
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] server lang: <none>
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] kex follows: False
2025-12-03T12:35:01.796 [DEBUG] [Thread-116768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] Compression: none
2025-12-03T12:35:01.797 [DEBUG] [Thread-116768] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:35:01.865 [DEBUG] [Thread-116768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:35:01.865 [DEBUG] [Thread-116768] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:35:01.866 [DEBUG] [Thread-116768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:35:01.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:35:01.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:35:01.925 [DEBUG] [Thread-116768] [transport.py] [_log()] userauth is OK
2025-12-03T12:35:01.925 [DEBUG] [Thread-116768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:35:01.925 [DEBUG] [Thread-116768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:35:01.925 [DEBUG] [Thread-116768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:35:01.925 [DEBUG] [Thread-116768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:35:01.945 [INFO] [Thread-116768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:35:01.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:35:01.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:35:03.079 [DEBUG] [Thread-116770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:03.278 [DEBUG] [Thread-116768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:35:03.278 [DEBUG] [Thread-116768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:35:03.332 [DEBUG] [Thread-116768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:35:03.332 [DEBUG] [Thread-116768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:35:03.341 [DEBUG] [Thread-116768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:35:03.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:35:03.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:35:03.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:35:03.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:35:03.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:35:03.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:35:03.383 [DEBUG] [Thread-116768] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:35:04.043 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:04.044 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:18.125 [DEBUG] [Thread-116771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:33.152 [DEBUG] [Thread-116772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:33.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:35:33.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:35:33.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:35:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 35, 4), 18.24, 29.6, 0.0, 8.45, 18.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:35:34.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:35:04
2025-12-03T12:35:34.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:35:34.350 [DEBUG] [Thread-116773] [transport.py] [_log()] starting thread (client mode): 0xa27b42e0
2025-12-03T12:35:34.350 [DEBUG] [Thread-116773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:35:34.371 [DEBUG] [Thread-116773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:35:34.371 [INFO] [Thread-116773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:34.374 [DEBUG] [Thread-116773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] client lang: <none>
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] server lang: <none>
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] kex follows: False
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] Compression: none
2025-12-03T12:35:34.375 [DEBUG] [Thread-116773] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:35:34.393 [DEBUG] [Thread-116773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:35:34.393 [DEBUG] [Thread-116773] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:35:34.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:35:34.394 [DEBUG] [Thread-116773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:35:34.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:35:34.396 [DEBUG] [Thread-116773] [transport.py] [_log()] userauth is OK
2025-12-03T12:35:34.396 [DEBUG] [Thread-116773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:35:34.396 [DEBUG] [Thread-116773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:35:34.396 [DEBUG] [Thread-116773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:35:34.396 [DEBUG] [Thread-116773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:35:34.431 [INFO] [Thread-116773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:35:34.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:35:35.036 [DEBUG] [Thread-116773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:35:35.036 [DEBUG] [Thread-116773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:35:35.037 [DEBUG] [Thread-116773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:35:35.077 [DEBUG] [Thread-116773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:35:35.077 [DEBUG] [Thread-116773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:35:35.080 [DEBUG] [Thread-116773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:35:35.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:35:35.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:35:35.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:35:35.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:35:35.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:35:35.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:35:35.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.441022 -999.00  +19.50  11.79     34   +3.20 1 2 1 1 1   888    0 17.42 45.79 ----- 8.0 11.8 177.4 17.5 27.4 -21.3 26.8 -21.5 27.2 -21.1 27.7 -21.8
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:35:35.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.441022
2025-12-03T12:35:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:35:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:35:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:35:35.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:35:35.103 [DEBUG] [Thread-116773] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:35:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:35:35.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:35:04', tmtdew=18.24, humidity=29.6, cloud=0.0, wind=8.45, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:35:04.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:35:35.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:35:35.200 [DEBUG] [Thread-116776] [transport.py] [_log()] starting thread (client mode): 0xa27b6560
2025-12-03T12:35:35.200 [DEBUG] [Thread-116776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:35:35.218 [DEBUG] [Thread-116776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:35:35.219 [INFO] [Thread-116776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:35:35.226 [DEBUG] [Thread-116776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] client lang: <none>
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] server lang: <none>
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] kex follows: False
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] Compression: none
2025-12-03T12:35:35.227 [DEBUG] [Thread-116776] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:35:35.286 [DEBUG] [Thread-116776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:35:35.287 [DEBUG] [Thread-116776] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:35:35.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:35:35.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:35:35.289 [DEBUG] [Thread-116776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:35:35.342 [DEBUG] [Thread-116776] [transport.py] [_log()] userauth is OK
2025-12-03T12:35:35.343 [DEBUG] [Thread-116776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:35:35.343 [DEBUG] [Thread-116776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:35:35.343 [DEBUG] [Thread-116776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:35:35.343 [DEBUG] [Thread-116776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:35:35.362 [INFO] [Thread-116776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:35:35.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:35:35.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:35:36.392 [DEBUG] [Thread-116776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:35:36.392 [DEBUG] [Thread-116776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:35:36.441 [DEBUG] [Thread-116776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:35:36.441 [DEBUG] [Thread-116776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:35:36.450 [DEBUG] [Thread-116776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:35:36.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:35:36.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:35:36.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:35:36.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:35:36.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:35:36.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:35:36.484 [DEBUG] [Thread-116776] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:35:45.833 [DEBUG] [Thread-116778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:35:48.179 [DEBUG] [Thread-116779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:03.222 [DEBUG] [Thread-116780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:04.183 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:04.184 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:36:06.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:36:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:36:07.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 35, 36), 18.24, 28.98, 0.0, 12.16, 18.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:36:07.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:35:36
2025-12-03T12:36:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:36:07.476 [DEBUG] [Thread-116781] [transport.py] [_log()] starting thread (client mode): 0xa27c3c70
2025-12-03T12:36:07.476 [DEBUG] [Thread-116781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:36:07.497 [DEBUG] [Thread-116781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:36:07.497 [INFO] [Thread-116781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] client lang: <none>
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] server lang: <none>
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] kex follows: False
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] Compression: none
2025-12-03T12:36:07.500 [DEBUG] [Thread-116781] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:36:07.515 [DEBUG] [Thread-116781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:36:07.515 [DEBUG] [Thread-116781] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:36:07.515 [DEBUG] [Thread-116781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:36:07.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:36:07.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:36:07.516 [DEBUG] [Thread-116781] [transport.py] [_log()] userauth is OK
2025-12-03T12:36:07.516 [DEBUG] [Thread-116781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:36:07.516 [DEBUG] [Thread-116781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:36:07.516 [DEBUG] [Thread-116781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:36:07.516 [DEBUG] [Thread-116781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:36:07.531 [INFO] [Thread-116781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:36:07.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:36:08.112 [DEBUG] [Thread-116781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:36:08.112 [DEBUG] [Thread-116781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:36:08.112 [DEBUG] [Thread-116781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:36:08.153 [DEBUG] [Thread-116781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:36:08.153 [DEBUG] [Thread-116781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:36:08.156 [DEBUG] [Thread-116781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:36:08.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:36:08.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:36:08.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:36:08.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:36:08.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:36:08.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:36:08.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.441369 -999.00  +19.80  10.89     34   +3.50 1 1 1 1 1   888    0 17.42 41.57 ----- 15.2 10.9 168.6 16.7 27.5 -21.5 26.7 -25.3 27.1 -21.4 27.7 -22.2
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.441369
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:36:08.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:35:36', tmtdew=18.24, humidity=28.98, cloud=0.0, wind=12.16, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:35:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:36:08.172 [DEBUG] [Thread-116781] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:36:08.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:36:08.259 [DEBUG] [Thread-116784] [transport.py] [_log()] starting thread (client mode): 0xa27c03d0
2025-12-03T12:36:08.259 [DEBUG] [Thread-116784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:36:08.274 [DEBUG] [Thread-116784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:36:08.275 [INFO] [Thread-116784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] client lang: <none>
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] server lang: <none>
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] kex follows: False
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] Compression: none
2025-12-03T12:36:08.282 [DEBUG] [Thread-116784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:36:08.341 [DEBUG] [Thread-116784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:36:08.341 [DEBUG] [Thread-116784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:36:08.341 [DEBUG] [Thread-116784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:36:08.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:36:08.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:36:08.396 [DEBUG] [Thread-116784] [transport.py] [_log()] userauth is OK
2025-12-03T12:36:08.396 [DEBUG] [Thread-116784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:36:08.397 [DEBUG] [Thread-116784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:36:08.397 [DEBUG] [Thread-116784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:36:08.397 [DEBUG] [Thread-116784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:36:08.411 [INFO] [Thread-116784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:36:08.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:36:08.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:36:09.548 [DEBUG] [Thread-116784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:36:09.548 [DEBUG] [Thread-116784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:36:09.597 [DEBUG] [Thread-116784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:36:09.597 [DEBUG] [Thread-116784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:36:09.606 [DEBUG] [Thread-116784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:36:09.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:36:09.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:36:09.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:36:09.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:36:09.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:36:09.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:36:09.639 [DEBUG] [Thread-116784] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:36:18.254 [DEBUG] [Thread-116786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:33.301 [DEBUG] [Thread-116787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:36:39.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:36:39.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:36:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 36, 8), 18.03, 29.44, 0.0, 16.39, 18.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:36:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:36:08
2025-12-03T12:36:40.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:36:40.600 [DEBUG] [Thread-116788] [transport.py] [_log()] starting thread (client mode): 0xa51999f0
2025-12-03T12:36:40.600 [DEBUG] [Thread-116788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:36:40.619 [DEBUG] [Thread-116788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:36:40.619 [INFO] [Thread-116788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] client lang: <none>
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] server lang: <none>
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] kex follows: False
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] Compression: none
2025-12-03T12:36:40.622 [DEBUG] [Thread-116788] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:36:40.639 [DEBUG] [Thread-116788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:36:40.640 [DEBUG] [Thread-116788] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:36:40.640 [DEBUG] [Thread-116788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:36:40.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:36:40.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:36:40.642 [DEBUG] [Thread-116788] [transport.py] [_log()] userauth is OK
2025-12-03T12:36:40.642 [DEBUG] [Thread-116788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:36:40.642 [DEBUG] [Thread-116788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:36:40.643 [DEBUG] [Thread-116788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:36:40.643 [DEBUG] [Thread-116788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:36:40.667 [INFO] [Thread-116788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:36:40.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:36:41.309 [DEBUG] [Thread-116788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:36:41.309 [DEBUG] [Thread-116788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:36:41.309 [DEBUG] [Thread-116788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:36:41.350 [DEBUG] [Thread-116788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:36:41.350 [DEBUG] [Thread-116788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:36:41.352 [DEBUG] [Thread-116788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:36:41.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:36:41.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:36:41.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:36:41.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:36:41.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:36:41.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:36:41.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:36:41.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.441717 -999.00  +20.30  10.74     33   +3.70 1 1 1 1 1   888    0 17.74 42.31 ----- 14.0 10.7 137.2 14.7 27.5 -21.7 26.6 -25.2 27.0 -21.8 27.6 -24.3
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.441717
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:36:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:36:08', tmtdew=18.03, humidity=29.44, cloud=0.0, wind=16.39, temperature=18.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:36:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:36:41.373 [DEBUG] [Thread-116788] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:36:41.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:36:41.465 [DEBUG] [Thread-116791] [transport.py] [_log()] starting thread (client mode): 0xa5199360
2025-12-03T12:36:41.465 [DEBUG] [Thread-116791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:36:41.482 [DEBUG] [Thread-116791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:36:41.482 [INFO] [Thread-116791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] client lang: <none>
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] server lang: <none>
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] kex follows: False
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:36:41.489 [DEBUG] [Thread-116791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:36:41.490 [DEBUG] [Thread-116791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:36:41.490 [DEBUG] [Thread-116791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:36:41.490 [DEBUG] [Thread-116791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:36:41.490 [DEBUG] [Thread-116791] [transport.py] [_log()] Compression: none
2025-12-03T12:36:41.490 [DEBUG] [Thread-116791] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:36:41.546 [DEBUG] [Thread-116791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:36:41.546 [DEBUG] [Thread-116791] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:36:41.546 [DEBUG] [Thread-116791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:36:41.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:36:41.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:36:41.603 [DEBUG] [Thread-116791] [transport.py] [_log()] userauth is OK
2025-12-03T12:36:41.603 [DEBUG] [Thread-116791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:36:41.603 [DEBUG] [Thread-116791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:36:41.603 [DEBUG] [Thread-116791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:36:41.603 [DEBUG] [Thread-116791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:36:41.617 [INFO] [Thread-116791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:36:41.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:36:41.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:36:42.607 [DEBUG] [Thread-116791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:36:42.607 [DEBUG] [Thread-116791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:36:42.655 [DEBUG] [Thread-116791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:36:42.655 [DEBUG] [Thread-116791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:36:42.664 [DEBUG] [Thread-116791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:36:42.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:36:42.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:36:42.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:36:42.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:36:42.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:36:42.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:36:42.695 [DEBUG] [Thread-116791] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:36:45.862 [DEBUG] [Thread-116793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:36:48.327 [DEBUG] [Thread-116794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:03.361 [DEBUG] [Thread-116795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:04.323 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:04.324 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:12.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:37:12.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:37:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:37:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 36, 40), 17.93, 30.24, 0.0, 16.07, 18.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:37:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:36:40
2025-12-03T12:37:13.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:37:13.739 [DEBUG] [Thread-116796] [transport.py] [_log()] starting thread (client mode): 0xa27b4250
2025-12-03T12:37:13.739 [DEBUG] [Thread-116796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:37:13.759 [DEBUG] [Thread-116796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:37:13.759 [INFO] [Thread-116796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] client lang: <none>
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] server lang: <none>
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] kex follows: False
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] Compression: none
2025-12-03T12:37:13.761 [DEBUG] [Thread-116796] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:37:13.778 [DEBUG] [Thread-116796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:37:13.779 [DEBUG] [Thread-116796] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:37:13.779 [DEBUG] [Thread-116796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:37:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:37:13.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:37:13.780 [DEBUG] [Thread-116796] [transport.py] [_log()] userauth is OK
2025-12-03T12:37:13.780 [DEBUG] [Thread-116796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:37:13.780 [DEBUG] [Thread-116796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:37:13.780 [DEBUG] [Thread-116796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:37:13.780 [DEBUG] [Thread-116796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:37:13.798 [INFO] [Thread-116796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:37:13.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:37:14.432 [DEBUG] [Thread-116796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:37:14.432 [DEBUG] [Thread-116796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:37:14.432 [DEBUG] [Thread-116796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:37:14.472 [DEBUG] [Thread-116796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:37:14.473 [DEBUG] [Thread-116796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:37:14.474 [DEBUG] [Thread-116796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:37:14.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:37:14.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:37:14.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:37:14.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:37:14.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:37:14.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:37:14.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.442064 -999.00  +20.50  12.07     32   +3.60 1 2 1 1 1   888    0 17.59 43.73 ----- 14.2 12.1 147.5 19.2 27.4 -22.2 26.9 -22.2 27.1 -21.4 27.7 -21.8
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.442064
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:37:14.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:36:40', tmtdew=17.93, humidity=30.24, cloud=0.0, wind=16.07, temperature=18.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:36:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:37:14.490 [DEBUG] [Thread-116796] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:37:14.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:37:14.575 [DEBUG] [Thread-116799] [transport.py] [_log()] starting thread (client mode): 0xa27b6b00
2025-12-03T12:37:14.575 [DEBUG] [Thread-116799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:37:14.589 [DEBUG] [Thread-116799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:37:14.589 [INFO] [Thread-116799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:37:14.596 [DEBUG] [Thread-116799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] client lang: <none>
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] server lang: <none>
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] kex follows: False
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] Compression: none
2025-12-03T12:37:14.597 [DEBUG] [Thread-116799] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:37:14.661 [DEBUG] [Thread-116799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:37:14.661 [DEBUG] [Thread-116799] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:37:14.661 [DEBUG] [Thread-116799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:37:14.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:37:14.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:37:14.721 [DEBUG] [Thread-116799] [transport.py] [_log()] userauth is OK
2025-12-03T12:37:14.721 [DEBUG] [Thread-116799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:37:14.721 [DEBUG] [Thread-116799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:37:14.721 [DEBUG] [Thread-116799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:37:14.721 [DEBUG] [Thread-116799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:37:14.735 [INFO] [Thread-116799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:37:14.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:37:14.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:37:16.002 [DEBUG] [Thread-116799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:37:16.002 [DEBUG] [Thread-116799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:37:16.050 [DEBUG] [Thread-116799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:37:16.050 [DEBUG] [Thread-116799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:37:16.059 [DEBUG] [Thread-116799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:37:16.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:37:16.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:37:16.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:37:16.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:37:16.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:37:16.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:37:16.092 [DEBUG] [Thread-116799] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:37:18.396 [DEBUG] [Thread-116801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:33.441 [DEBUG] [Thread-116802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:45.906 [DEBUG] [Thread-116803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:37:46.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:37:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:37:46.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 37, 12), 18.09, 29.98, 0.0, 19.02, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:37:46.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:37:12
2025-12-03T12:37:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:37:47.101 [DEBUG] [Thread-116804] [transport.py] [_log()] starting thread (client mode): 0xa27b5d50
2025-12-03T12:37:47.101 [DEBUG] [Thread-116804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:37:47.121 [DEBUG] [Thread-116804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:37:47.121 [INFO] [Thread-116804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:37:47.125 [DEBUG] [Thread-116804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] client lang: <none>
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] server lang: <none>
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] kex follows: False
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] Compression: none
2025-12-03T12:37:47.126 [DEBUG] [Thread-116804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:37:47.142 [DEBUG] [Thread-116804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:37:47.142 [DEBUG] [Thread-116804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:37:47.143 [DEBUG] [Thread-116804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:37:47.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:37:47.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:37:47.145 [DEBUG] [Thread-116804] [transport.py] [_log()] userauth is OK
2025-12-03T12:37:47.145 [DEBUG] [Thread-116804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:37:47.145 [DEBUG] [Thread-116804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:37:47.145 [DEBUG] [Thread-116804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:37:47.145 [DEBUG] [Thread-116804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:37:47.169 [INFO] [Thread-116804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:37:47.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:37:47.799 [DEBUG] [Thread-116804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:37:47.799 [DEBUG] [Thread-116804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:37:47.799 [DEBUG] [Thread-116804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:37:47.840 [DEBUG] [Thread-116804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:37:47.840 [DEBUG] [Thread-116804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:37:47.843 [DEBUG] [Thread-116804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:37:47.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:37:47.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:37:47.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:37:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:37:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:37:47.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:37:47.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:37:47.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.442411 -999.00  +20.70  19.02     32   +3.40 1 1 1 1 1   888    0 17.44 45.98 ----- 14.0 19.0 175.4 24.5 27.5 -22.9 26.4 -27.0 26.9 -23.3 27.8 -23.2
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.442411
2025-12-03T12:37:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:37:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:37:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:37:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:37:47.869 [DEBUG] [Thread-116804] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:37:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:37:47.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:37:12', tmtdew=18.09, humidity=29.98, cloud=0.0, wind=19.02, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:37:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:37:47.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:37:47.960 [DEBUG] [Thread-116807] [transport.py] [_log()] starting thread (client mode): 0xa27b5ea0
2025-12-03T12:37:47.960 [DEBUG] [Thread-116807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:37:47.974 [DEBUG] [Thread-116807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:37:47.975 [INFO] [Thread-116807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:37:47.982 [DEBUG] [Thread-116807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:37:47.982 [DEBUG] [Thread-116807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:37:47.982 [DEBUG] [Thread-116807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:37:47.982 [DEBUG] [Thread-116807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:47.982 [DEBUG] [Thread-116807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] client lang: <none>
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] server lang: <none>
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] kex follows: False
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] Compression: none
2025-12-03T12:37:47.983 [DEBUG] [Thread-116807] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:37:48.046 [DEBUG] [Thread-116807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:37:48.047 [DEBUG] [Thread-116807] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:37:48.047 [DEBUG] [Thread-116807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:37:48.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:37:48.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:37:48.104 [DEBUG] [Thread-116807] [transport.py] [_log()] userauth is OK
2025-12-03T12:37:48.104 [DEBUG] [Thread-116807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:37:48.104 [DEBUG] [Thread-116807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:37:48.105 [DEBUG] [Thread-116807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:37:48.105 [DEBUG] [Thread-116807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:37:48.127 [INFO] [Thread-116807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:37:48.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:37:48.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:37:48.470 [DEBUG] [Thread-116809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:37:49.435 [DEBUG] [Thread-116807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:37:49.436 [DEBUG] [Thread-116807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:37:49.484 [DEBUG] [Thread-116807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:37:49.484 [DEBUG] [Thread-116807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:37:49.493 [DEBUG] [Thread-116807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:37:49.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:37:49.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:37:49.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:37:49.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:37:49.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:37:49.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:37:49.530 [DEBUG] [Thread-116807] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:38:03.521 [DEBUG] [Thread-116810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:04.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:04.465 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:18.547 [DEBUG] [Thread-116811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:38:19.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:38:19.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:38:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 38, 16), 18.85, 28.43, 0.0, 18.65, 19.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:38:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:38:16
2025-12-03T12:38:20.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:38:20.513 [DEBUG] [Thread-116812] [transport.py] [_log()] starting thread (client mode): 0xa2708be0
2025-12-03T12:38:20.513 [DEBUG] [Thread-116812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:38:20.533 [DEBUG] [Thread-116812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:38:20.533 [INFO] [Thread-116812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:38:20.536 [DEBUG] [Thread-116812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] client lang: <none>
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] server lang: <none>
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] kex follows: False
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:38:20.537 [DEBUG] [Thread-116812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:38:20.538 [DEBUG] [Thread-116812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:38:20.538 [DEBUG] [Thread-116812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:38:20.538 [DEBUG] [Thread-116812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:38:20.538 [DEBUG] [Thread-116812] [transport.py] [_log()] Compression: none
2025-12-03T12:38:20.538 [DEBUG] [Thread-116812] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:38:20.555 [DEBUG] [Thread-116812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:38:20.556 [DEBUG] [Thread-116812] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:38:20.556 [DEBUG] [Thread-116812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:38:20.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:38:20.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:38:20.558 [DEBUG] [Thread-116812] [transport.py] [_log()] userauth is OK
2025-12-03T12:38:20.558 [DEBUG] [Thread-116812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:38:20.558 [DEBUG] [Thread-116812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:38:20.558 [DEBUG] [Thread-116812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:38:20.558 [DEBUG] [Thread-116812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:38:20.576 [INFO] [Thread-116812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:38:20.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:38:21.160 [DEBUG] [Thread-116812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:38:21.160 [DEBUG] [Thread-116812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:38:21.161 [DEBUG] [Thread-116812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:38:21.202 [DEBUG] [Thread-116812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:38:21.202 [DEBUG] [Thread-116812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:38:21.205 [DEBUG] [Thread-116812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:38:21.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:38:21.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:38:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:38:21.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:38:21.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:38:21.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:38:21.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:38:21.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.443105 -999.00  +20.40  20.37     32   +3.20 1 1 1 1 1   888    0 18.06 47.25 ----- 18.2 20.4 171.6 23.8 27.5 -23.1 26.6 -24.8 27.0 -21.9 27.7 -24.9
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.443105
2025-12-03T12:38:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:38:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:38:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:38:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:38:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:38:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:38:16', tmtdew=18.85, humidity=28.43, cloud=0.0, wind=18.65, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:38:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:38:21.224 [DEBUG] [Thread-116812] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:38:21.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:38:21.329 [DEBUG] [Thread-116815] [transport.py] [_log()] starting thread (client mode): 0xa2785d50
2025-12-03T12:38:21.329 [DEBUG] [Thread-116815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:38:21.348 [DEBUG] [Thread-116815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:38:21.348 [INFO] [Thread-116815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] client lang: <none>
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] server lang: <none>
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] kex follows: False
2025-12-03T12:38:21.356 [DEBUG] [Thread-116815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] Compression: none
2025-12-03T12:38:21.357 [DEBUG] [Thread-116815] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:38:21.425 [DEBUG] [Thread-116815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:38:21.425 [DEBUG] [Thread-116815] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:38:21.426 [DEBUG] [Thread-116815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:38:21.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:38:21.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:38:21.482 [DEBUG] [Thread-116815] [transport.py] [_log()] userauth is OK
2025-12-03T12:38:21.483 [DEBUG] [Thread-116815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:38:21.483 [DEBUG] [Thread-116815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:38:21.483 [DEBUG] [Thread-116815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:38:21.483 [DEBUG] [Thread-116815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:38:21.502 [INFO] [Thread-116815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:38:21.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:38:21.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:38:22.148 [DEBUG] [Thread-116815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:38:22.148 [DEBUG] [Thread-116815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:38:22.196 [DEBUG] [Thread-116815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:38:22.197 [DEBUG] [Thread-116815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:38:22.205 [DEBUG] [Thread-116815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:38:22.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:38:22.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:38:22.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:38:22.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:38:22.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:38:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:38:22.239 [DEBUG] [Thread-116815] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:38:33.574 [DEBUG] [Thread-116817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:45.949 [DEBUG] [Thread-116818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:48.618 [DEBUG] [Thread-116819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:38:52.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:38:52.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:38:52.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:38:52.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 38, 48), 18.67, 28.53, 0.0, 18.72, 18.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:38:52.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:38:48
2025-12-03T12:38:53.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:38:53.216 [DEBUG] [Thread-116820] [transport.py] [_log()] starting thread (client mode): 0xa27c9a50
2025-12-03T12:38:53.216 [DEBUG] [Thread-116820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:38:53.237 [DEBUG] [Thread-116820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:38:53.237 [INFO] [Thread-116820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] client lang: <none>
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] server lang: <none>
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] kex follows: False
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] Compression: none
2025-12-03T12:38:53.241 [DEBUG] [Thread-116820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:38:53.258 [DEBUG] [Thread-116820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:38:53.259 [DEBUG] [Thread-116820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:38:53.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:38:53.260 [DEBUG] [Thread-116820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:38:53.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:38:53.262 [DEBUG] [Thread-116820] [transport.py] [_log()] userauth is OK
2025-12-03T12:38:53.262 [DEBUG] [Thread-116820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:38:53.262 [DEBUG] [Thread-116820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:38:53.262 [DEBUG] [Thread-116820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:38:53.262 [DEBUG] [Thread-116820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:38:53.286 [INFO] [Thread-116820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:38:53.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:38:53.896 [DEBUG] [Thread-116820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:38:53.897 [DEBUG] [Thread-116820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:38:53.897 [DEBUG] [Thread-116820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:38:53.938 [DEBUG] [Thread-116820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:38:53.939 [DEBUG] [Thread-116820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:38:53.941 [DEBUG] [Thread-116820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:38:53.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:38:53.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:38:53.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:38:53.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:38:53.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:38:53.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:38:53.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.443453 -999.00  +20.00  11.66     32   +3.00 1 1 1 1 1   888    0 17.64 45.33 ----- 12.2 11.7 185.0 20.1 27.4 -24.5 26.4 -27.6 26.9 -22.6 27.6 -23.0
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:38:53.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.443453
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:38:53.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:38:48', tmtdew=18.67, humidity=28.53, cloud=0.0, wind=18.72, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:38:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:38:53.966 [DEBUG] [Thread-116820] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:38:54.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:38:54.063 [DEBUG] [Thread-116823] [transport.py] [_log()] starting thread (client mode): 0xa27cbdf0
2025-12-03T12:38:54.063 [DEBUG] [Thread-116823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:38:54.077 [DEBUG] [Thread-116823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:38:54.077 [INFO] [Thread-116823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:38:54.085 [DEBUG] [Thread-116823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] client lang: <none>
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] server lang: <none>
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] kex follows: False
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] Compression: none
2025-12-03T12:38:54.086 [DEBUG] [Thread-116823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:38:54.140 [DEBUG] [Thread-116823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:38:54.141 [DEBUG] [Thread-116823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:38:54.141 [DEBUG] [Thread-116823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:38:54.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:38:54.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:38:54.197 [DEBUG] [Thread-116823] [transport.py] [_log()] userauth is OK
2025-12-03T12:38:54.197 [DEBUG] [Thread-116823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:38:54.197 [DEBUG] [Thread-116823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:38:54.197 [DEBUG] [Thread-116823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:38:54.198 [DEBUG] [Thread-116823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:38:54.216 [INFO] [Thread-116823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:38:54.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:38:54.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:38:54.547 [DEBUG] [Thread-116823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:38:54.548 [DEBUG] [Thread-116823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:38:54.595 [DEBUG] [Thread-116823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:38:54.595 [DEBUG] [Thread-116823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:38:54.604 [DEBUG] [Thread-116823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:38:54.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:38:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:38:54.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:38:54.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:38:54.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:38:54.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:38:54.635 [DEBUG] [Thread-116823] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:39:03.645 [DEBUG] [Thread-116825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:04.606 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:04.607 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:18.684 [DEBUG] [Thread-116826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:39:24.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:39:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:39:25.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 39, 20), 18.35, 29.11, 0.0, 19.62, 18.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:39:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:39:20
2025-12-03T12:39:25.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:39:25.583 [DEBUG] [Thread-116827] [transport.py] [_log()] starting thread (client mode): 0xa2785d50
2025-12-03T12:39:25.583 [DEBUG] [Thread-116827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:39:25.604 [DEBUG] [Thread-116827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:39:25.604 [INFO] [Thread-116827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:39:25.605 [DEBUG] [Thread-116827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:39:25.605 [DEBUG] [Thread-116827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] client lang: <none>
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] server lang: <none>
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] kex follows: False
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:39:25.606 [DEBUG] [Thread-116827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:39:25.607 [DEBUG] [Thread-116827] [transport.py] [_log()] Compression: none
2025-12-03T12:39:25.607 [DEBUG] [Thread-116827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:39:25.616 [DEBUG] [Thread-116827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:39:25.617 [DEBUG] [Thread-116827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:39:25.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:39:25.618 [DEBUG] [Thread-116827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:39:25.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:39:25.620 [DEBUG] [Thread-116827] [transport.py] [_log()] userauth is OK
2025-12-03T12:39:25.620 [DEBUG] [Thread-116827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:39:25.620 [DEBUG] [Thread-116827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:39:25.621 [DEBUG] [Thread-116827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:39:25.621 [DEBUG] [Thread-116827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:39:25.645 [INFO] [Thread-116827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:39:25.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:39:26.229 [DEBUG] [Thread-116827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:39:26.229 [DEBUG] [Thread-116827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:39:26.230 [DEBUG] [Thread-116827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:39:26.270 [DEBUG] [Thread-116827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:39:26.270 [DEBUG] [Thread-116827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:39:26.273 [DEBUG] [Thread-116827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:39:26.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:39:26.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:39:26.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:39:26.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:39:26.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:39:26.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:39:26.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:39:26.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.443800 -999.00  +20.00  14.88     33   +3.30 1 2 1 1 1   888    0 17.98 45.60 ----- 13.1 14.9 187.3 19.7 27.4 -22.4 26.6 -23.0 27.1 -20.8 27.8 -21.6
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.443800
2025-12-03T12:39:26.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:39:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:39:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:39:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:39:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:39:26.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:39:20', tmtdew=18.35, humidity=29.11, cloud=0.0, wind=19.62, temperature=18.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:39:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:39:26.296 [DEBUG] [Thread-116827] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:39:26.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:39:26.393 [DEBUG] [Thread-116830] [transport.py] [_log()] starting thread (client mode): 0xa5161510
2025-12-03T12:39:26.393 [DEBUG] [Thread-116830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:39:26.407 [DEBUG] [Thread-116830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:39:26.407 [INFO] [Thread-116830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:26.415 [DEBUG] [Thread-116830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] client lang: <none>
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] server lang: <none>
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] kex follows: False
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:39:26.416 [DEBUG] [Thread-116830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:39:26.417 [DEBUG] [Thread-116830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:39:26.417 [DEBUG] [Thread-116830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:39:26.417 [DEBUG] [Thread-116830] [transport.py] [_log()] Compression: none
2025-12-03T12:39:26.417 [DEBUG] [Thread-116830] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:39:26.472 [DEBUG] [Thread-116830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:39:26.473 [DEBUG] [Thread-116830] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:39:26.473 [DEBUG] [Thread-116830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:39:26.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:39:26.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:39:26.528 [DEBUG] [Thread-116830] [transport.py] [_log()] userauth is OK
2025-12-03T12:39:26.528 [DEBUG] [Thread-116830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:39:26.529 [DEBUG] [Thread-116830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:39:26.529 [DEBUG] [Thread-116830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:39:26.529 [DEBUG] [Thread-116830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:39:26.548 [INFO] [Thread-116830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:39:26.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:39:26.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:39:26.926 [DEBUG] [Thread-116830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:39:26.926 [DEBUG] [Thread-116830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:39:26.974 [DEBUG] [Thread-116830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:39:26.974 [DEBUG] [Thread-116830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:39:26.983 [DEBUG] [Thread-116830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:39:26.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:39:26.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:39:27.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:39:27.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:39:27.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:39:27.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:39:27.017 [DEBUG] [Thread-116830] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:39:33.713 [DEBUG] [Thread-116832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:45.987 [DEBUG] [Thread-116833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:48.761 [DEBUG] [Thread-116834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:39:57.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:39:57.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:39:57.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:39:57.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 39, 52), 18.33, 28.98, 0.0, 21.72, 18.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:39:57.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:39:52
2025-12-03T12:39:57.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:39:58.006 [DEBUG] [Thread-116835] [transport.py] [_log()] starting thread (client mode): 0xa27b4610
2025-12-03T12:39:58.006 [DEBUG] [Thread-116835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:39:58.026 [DEBUG] [Thread-116835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:39:58.026 [INFO] [Thread-116835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] client lang: <none>
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] server lang: <none>
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] kex follows: False
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] Compression: none
2025-12-03T12:39:58.029 [DEBUG] [Thread-116835] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:39:58.045 [DEBUG] [Thread-116835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:39:58.045 [DEBUG] [Thread-116835] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:39:58.045 [DEBUG] [Thread-116835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:39:58.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:39:58.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:39:58.046 [DEBUG] [Thread-116835] [transport.py] [_log()] userauth is OK
2025-12-03T12:39:58.046 [DEBUG] [Thread-116835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:39:58.046 [DEBUG] [Thread-116835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:39:58.046 [DEBUG] [Thread-116835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:39:58.046 [DEBUG] [Thread-116835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:39:58.055 [INFO] [Thread-116835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:39:58.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:39:58.687 [DEBUG] [Thread-116835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:39:58.687 [DEBUG] [Thread-116835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:39:58.687 [DEBUG] [Thread-116835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:39:58.727 [DEBUG] [Thread-116835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:39:58.727 [DEBUG] [Thread-116835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:39:58.729 [DEBUG] [Thread-116835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:39:58.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:39:58.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:39:58.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:39:58.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:39:58.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:39:58.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:39:58.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:39:58.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:39:58.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.444147 -999.00  +20.10  16.55     31   +2.50 1 1 1 1 1   888    0 17.77 44.93 ----- 15.9 16.6 186.4 27.3 27.5 -23.4 26.2 -30.5 26.9 -24.3 27.7 -22.9
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.444147
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:39:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:39:52', tmtdew=18.33, humidity=28.98, cloud=0.0, wind=21.72, temperature=18.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:39:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:39:58.750 [DEBUG] [Thread-116835] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:39:58.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:39:58.835 [DEBUG] [Thread-116838] [transport.py] [_log()] starting thread (client mode): 0xa519b790
2025-12-03T12:39:58.835 [DEBUG] [Thread-116838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:39:58.850 [DEBUG] [Thread-116838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:39:58.850 [INFO] [Thread-116838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] client lang: <none>
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] server lang: <none>
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] kex follows: False
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:39:58.858 [DEBUG] [Thread-116838] [transport.py] [_log()] Compression: none
2025-12-03T12:39:58.859 [DEBUG] [Thread-116838] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:39:58.914 [DEBUG] [Thread-116838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:39:58.914 [DEBUG] [Thread-116838] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:39:58.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:39:58.914 [DEBUG] [Thread-116838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:39:58.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:39:58.971 [DEBUG] [Thread-116838] [transport.py] [_log()] userauth is OK
2025-12-03T12:39:58.971 [DEBUG] [Thread-116838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:39:58.971 [DEBUG] [Thread-116838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:39:58.971 [DEBUG] [Thread-116838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:39:58.971 [DEBUG] [Thread-116838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:39:58.986 [INFO] [Thread-116838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:39:58.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:39:58.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:39:59.416 [DEBUG] [Thread-116838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:39:59.416 [DEBUG] [Thread-116838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:39:59.464 [DEBUG] [Thread-116838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:39:59.464 [DEBUG] [Thread-116838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:39:59.476 [DEBUG] [Thread-116838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:39:59.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:39:59.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:39:59.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:39:59.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:39:59.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:39:59.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:39:59.508 [DEBUG] [Thread-116838] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:40:03.789 [DEBUG] [Thread-116840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:04.745 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:04.746 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:18.835 [DEBUG] [Thread-116841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:29.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:40:29.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:40:29.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:40:30.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 40, 24), 18.38, 28.89, 0.0, 18.7, 18.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:40:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:40:24
2025-12-03T12:40:30.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:40:30.478 [DEBUG] [Thread-116842] [transport.py] [_log()] starting thread (client mode): 0xa5163730
2025-12-03T12:40:30.478 [DEBUG] [Thread-116842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:40:30.497 [DEBUG] [Thread-116842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:40:30.498 [INFO] [Thread-116842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:40:30.499 [DEBUG] [Thread-116842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] client lang: <none>
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] server lang: <none>
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] kex follows: False
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:40:30.500 [DEBUG] [Thread-116842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:40:30.501 [DEBUG] [Thread-116842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:40:30.501 [DEBUG] [Thread-116842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:40:30.501 [DEBUG] [Thread-116842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:40:30.501 [DEBUG] [Thread-116842] [transport.py] [_log()] Compression: none
2025-12-03T12:40:30.501 [DEBUG] [Thread-116842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:40:30.517 [DEBUG] [Thread-116842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:40:30.518 [DEBUG] [Thread-116842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:40:30.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:40:30.519 [DEBUG] [Thread-116842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:40:30.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:40:30.521 [DEBUG] [Thread-116842] [transport.py] [_log()] userauth is OK
2025-12-03T12:40:30.521 [DEBUG] [Thread-116842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:40:30.521 [DEBUG] [Thread-116842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:40:30.521 [DEBUG] [Thread-116842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:40:30.522 [DEBUG] [Thread-116842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:40:30.544 [INFO] [Thread-116842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:40:30.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:40:31.194 [DEBUG] [Thread-116842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:40:31.194 [DEBUG] [Thread-116842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:40:31.194 [DEBUG] [Thread-116842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:40:31.235 [DEBUG] [Thread-116842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:40:31.235 [DEBUG] [Thread-116842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:40:31.238 [DEBUG] [Thread-116842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:40:31.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:40:31.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:40:31.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:40:31.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:40:31.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:40:31.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:40:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:40:31.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:40:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:40:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.444494 -999.00  +20.20  17.92     30   +2.40 1 2 1 1 1   888    0 17.76 45.86 ----- 18.4 17.9 186.2 22.9 27.3 -23.4 26.2 -24.0 26.9 -21.6 27.6 -22.9
2025-12-03T12:40:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:40:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:40:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.444494
2025-12-03T12:40:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:40:31.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:40:31.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:40:31.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:40:31.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:40:31.264 [DEBUG] [Thread-116842] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:40:31.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:40:24', tmtdew=18.38, humidity=28.89, cloud=0.0, wind=18.7, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:40:04.282', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:40:31.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:40:31.360 [DEBUG] [Thread-116845] [transport.py] [_log()] starting thread (client mode): 0xa5161ae0
2025-12-03T12:40:31.361 [DEBUG] [Thread-116845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:40:31.375 [DEBUG] [Thread-116845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:40:31.375 [INFO] [Thread-116845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:40:31.382 [DEBUG] [Thread-116845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] client lang: <none>
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] server lang: <none>
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] kex follows: False
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] Compression: none
2025-12-03T12:40:31.383 [DEBUG] [Thread-116845] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:40:31.441 [DEBUG] [Thread-116845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:40:31.442 [DEBUG] [Thread-116845] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:40:31.442 [DEBUG] [Thread-116845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:40:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:40:31.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:40:31.501 [DEBUG] [Thread-116845] [transport.py] [_log()] userauth is OK
2025-12-03T12:40:31.502 [DEBUG] [Thread-116845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:40:31.502 [DEBUG] [Thread-116845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:40:31.502 [DEBUG] [Thread-116845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:40:31.502 [DEBUG] [Thread-116845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:40:31.521 [INFO] [Thread-116845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:40:31.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:40:31.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:40:32.328 [DEBUG] [Thread-116845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:40:32.329 [DEBUG] [Thread-116845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:40:32.377 [DEBUG] [Thread-116845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:40:32.377 [DEBUG] [Thread-116845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:40:32.386 [DEBUG] [Thread-116845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:40:32.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:40:32.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:40:32.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:40:32.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:40:32.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:40:32.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:40:32.420 [DEBUG] [Thread-116845] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:40:33.866 [DEBUG] [Thread-116847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:46.034 [DEBUG] [Thread-116848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:40:48.911 [DEBUG] [Thread-116849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:41:02.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:41:02.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:41:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 40, 56), 19.34, 26.98, 0.0, 19.02, 19.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:41:03.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:40:56
2025-12-03T12:41:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:41:03.394 [DEBUG] [Thread-116850] [transport.py] [_log()] starting thread (client mode): 0xa27c9540
2025-12-03T12:41:03.394 [DEBUG] [Thread-116850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:41:03.414 [DEBUG] [Thread-116850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:41:03.414 [INFO] [Thread-116850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] client lang: <none>
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] server lang: <none>
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] kex follows: False
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] Compression: none
2025-12-03T12:41:03.417 [DEBUG] [Thread-116850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:41:03.436 [DEBUG] [Thread-116850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:41:03.436 [DEBUG] [Thread-116850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:41:03.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:41:03.437 [DEBUG] [Thread-116850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:41:03.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:41:03.439 [DEBUG] [Thread-116850] [transport.py] [_log()] userauth is OK
2025-12-03T12:41:03.439 [DEBUG] [Thread-116850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:41:03.439 [DEBUG] [Thread-116850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:41:03.440 [DEBUG] [Thread-116850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:41:03.440 [DEBUG] [Thread-116850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:41:03.475 [INFO] [Thread-116850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:41:03.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:41:03.942 [DEBUG] [Thread-116852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:04.053 [DEBUG] [Thread-116850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:41:04.053 [DEBUG] [Thread-116850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:41:04.053 [DEBUG] [Thread-116850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:41:04.094 [DEBUG] [Thread-116850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:41:04.094 [DEBUG] [Thread-116850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:41:04.097 [DEBUG] [Thread-116850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:41:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:41:04.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:41:04.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:41:04.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:41:04.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:41:04.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:41:04.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:41:04.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.444842 -999.00  +20.10  17.32     30   +2.30 1 2 1 1 1   888    0 18.18 52.01 ----- 18.1 17.3 187.6 22.6 27.4 -23.8 26.3 -22.5 26.9 -21.8 27.5 -24.0
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.444842
2025-12-03T12:41:04.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:41:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:41:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:41:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:41:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:41:04.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:40:56', tmtdew=19.34, humidity=26.98, cloud=0.0, wind=19.02, temperature=19.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:40:34.349', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:41:04.122 [DEBUG] [Thread-116850] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:41:04.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:41:04.224 [DEBUG] [Thread-116854] [transport.py] [_log()] starting thread (client mode): 0xa270a9e0
2025-12-03T12:41:04.225 [DEBUG] [Thread-116854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:41:04.239 [DEBUG] [Thread-116854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:41:04.239 [INFO] [Thread-116854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:41:04.246 [DEBUG] [Thread-116854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:41:04.246 [DEBUG] [Thread-116854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:41:04.246 [DEBUG] [Thread-116854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] client lang: <none>
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] server lang: <none>
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] kex follows: False
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] Compression: none
2025-12-03T12:41:04.247 [DEBUG] [Thread-116854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:41:04.304 [DEBUG] [Thread-116854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:41:04.305 [DEBUG] [Thread-116854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:41:04.305 [DEBUG] [Thread-116854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:41:04.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:41:04.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:41:04.362 [DEBUG] [Thread-116854] [transport.py] [_log()] userauth is OK
2025-12-03T12:41:04.362 [DEBUG] [Thread-116854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:41:04.362 [DEBUG] [Thread-116854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:41:04.362 [DEBUG] [Thread-116854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:41:04.362 [DEBUG] [Thread-116854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:41:04.381 [INFO] [Thread-116854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:41:04.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:41:04.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:41:04.887 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:04.888 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:05.308 [DEBUG] [Thread-116854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:41:05.308 [DEBUG] [Thread-116854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:41:05.356 [DEBUG] [Thread-116854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:41:05.356 [DEBUG] [Thread-116854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:41:05.365 [DEBUG] [Thread-116854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:41:05.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:41:05.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:41:05.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:41:05.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:41:05.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:41:05.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:41:05.399 [DEBUG] [Thread-116854] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:41:18.968 [DEBUG] [Thread-116856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:33.998 [DEBUG] [Thread-116857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:35.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:41:35.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:41:35.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:41:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 41, 29), 19.11, 27.39, 0.0, 20.33, 19.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:41:36.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:41:29
2025-12-03T12:41:36.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:41:36.385 [DEBUG] [Thread-116858] [transport.py] [_log()] starting thread (client mode): 0xa27b4700
2025-12-03T12:41:36.385 [DEBUG] [Thread-116858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:41:36.404 [DEBUG] [Thread-116858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:41:36.404 [INFO] [Thread-116858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] client lang: <none>
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] server lang: <none>
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] kex follows: False
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:41:36.408 [DEBUG] [Thread-116858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:41:36.409 [DEBUG] [Thread-116858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:41:36.409 [DEBUG] [Thread-116858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:41:36.409 [DEBUG] [Thread-116858] [transport.py] [_log()] Compression: none
2025-12-03T12:41:36.409 [DEBUG] [Thread-116858] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:41:36.421 [DEBUG] [Thread-116858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:41:36.421 [DEBUG] [Thread-116858] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:41:36.422 [DEBUG] [Thread-116858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:41:36.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:41:36.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:41:36.423 [DEBUG] [Thread-116858] [transport.py] [_log()] userauth is OK
2025-12-03T12:41:36.424 [DEBUG] [Thread-116858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:41:36.424 [DEBUG] [Thread-116858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:41:36.424 [DEBUG] [Thread-116858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:41:36.424 [DEBUG] [Thread-116858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:41:36.448 [INFO] [Thread-116858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:41:36.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:41:36.995 [DEBUG] [Thread-116858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:41:36.995 [DEBUG] [Thread-116858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:41:36.995 [DEBUG] [Thread-116858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:41:37.036 [DEBUG] [Thread-116858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:41:37.036 [DEBUG] [Thread-116858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:41:37.038 [DEBUG] [Thread-116858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:41:37.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:41:37.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:41:37.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:41:37.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:41:37.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:41:37.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:41:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:41:37.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:41:37.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.445189 -999.00  +20.00  11.24     31   +2.40 1 2 1 1 1   888    0 18.31 57.04 ----- 13.8 11.2 195.6 23.3 27.3 -23.3 26.4 -22.6 26.9 -21.8 27.7 -21.7
2025-12-03T12:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.445189
2025-12-03T12:41:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:41:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:41:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:41:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:41:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:41:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:41:29', tmtdew=19.11, humidity=27.39, cloud=0.0, wind=20.33, temperature=19.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:41:04.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:41:37.065 [DEBUG] [Thread-116858] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:41:37.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:41:37.163 [DEBUG] [Thread-116861] [transport.py] [_log()] starting thread (client mode): 0xa519b490
2025-12-03T12:41:37.163 [DEBUG] [Thread-116861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:41:37.178 [DEBUG] [Thread-116861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:41:37.178 [INFO] [Thread-116861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:41:37.185 [DEBUG] [Thread-116861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] client lang: <none>
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] server lang: <none>
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] kex follows: False
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] Compression: none
2025-12-03T12:41:37.186 [DEBUG] [Thread-116861] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:41:37.244 [DEBUG] [Thread-116861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:41:37.244 [DEBUG] [Thread-116861] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:41:37.245 [DEBUG] [Thread-116861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:41:37.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:41:37.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:41:37.300 [DEBUG] [Thread-116861] [transport.py] [_log()] userauth is OK
2025-12-03T12:41:37.300 [DEBUG] [Thread-116861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:41:37.300 [DEBUG] [Thread-116861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:41:37.300 [DEBUG] [Thread-116861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:41:37.301 [DEBUG] [Thread-116861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:41:37.319 [INFO] [Thread-116861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:41:37.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:41:37.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:41:38.161 [DEBUG] [Thread-116861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:41:38.161 [DEBUG] [Thread-116861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:41:38.208 [DEBUG] [Thread-116861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:41:38.208 [DEBUG] [Thread-116861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:41:38.217 [DEBUG] [Thread-116861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:41:38.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:41:38.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:41:38.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:41:38.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:41:38.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:41:38.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:41:38.253 [DEBUG] [Thread-116861] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:41:46.078 [DEBUG] [Thread-116863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:41:49.028 [DEBUG] [Thread-116864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:04.077 [DEBUG] [Thread-116865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:05.041 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:05.042 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:08.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:42:08.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:42:08.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:42:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 42, 1), 19.16, 27.34, 0.0, 21.9, 19.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:42:08.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:42:01
2025-12-03T12:42:09.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:42:09.226 [DEBUG] [Thread-116866] [transport.py] [_log()] starting thread (client mode): 0xa27b4700
2025-12-03T12:42:09.226 [DEBUG] [Thread-116866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:42:09.242 [DEBUG] [Thread-116866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:42:09.242 [INFO] [Thread-116866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:09.244 [DEBUG] [Thread-116866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] client lang: <none>
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] server lang: <none>
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] kex follows: False
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] Compression: none
2025-12-03T12:42:09.245 [DEBUG] [Thread-116866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:42:09.260 [DEBUG] [Thread-116866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:42:09.261 [DEBUG] [Thread-116866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:42:09.261 [DEBUG] [Thread-116866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:42:09.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:42:09.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:42:09.263 [DEBUG] [Thread-116866] [transport.py] [_log()] userauth is OK
2025-12-03T12:42:09.263 [DEBUG] [Thread-116866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:42:09.263 [DEBUG] [Thread-116866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:42:09.263 [DEBUG] [Thread-116866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:42:09.264 [DEBUG] [Thread-116866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:42:09.284 [INFO] [Thread-116866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:42:09.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:42:09.890 [DEBUG] [Thread-116866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:42:09.890 [DEBUG] [Thread-116866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:42:09.890 [DEBUG] [Thread-116866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:42:09.931 [DEBUG] [Thread-116866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:42:09.931 [DEBUG] [Thread-116866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:42:09.933 [DEBUG] [Thread-116866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:42:09.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:42:09.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:42:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:42:09.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:42:09.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:42:09.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:42:09.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.445883 -999.00  +20.10  15.19     30   +2.20 1 1 1 1 1   888    0 18.74 67.10 ----- 13.1 15.2 181.6 22.7 27.4 -23.6 26.3 -25.2 27.0 -20.9 27.7 -23.2
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:42:09.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.445883
2025-12-03T12:42:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:42:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:42:09.953 [DEBUG] [Thread-116866] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:42:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:42:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:42:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:42:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:42:01', tmtdew=19.16, humidity=27.34, cloud=0.0, wind=21.9, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:42:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:42:10.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:42:10.049 [DEBUG] [Thread-116869] [transport.py] [_log()] starting thread (client mode): 0xa27c9ae0
2025-12-03T12:42:10.050 [DEBUG] [Thread-116869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:42:10.069 [DEBUG] [Thread-116869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:42:10.070 [INFO] [Thread-116869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:42:10.077 [DEBUG] [Thread-116869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:42:10.077 [DEBUG] [Thread-116869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:42:10.077 [DEBUG] [Thread-116869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:42:10.077 [DEBUG] [Thread-116869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:10.077 [DEBUG] [Thread-116869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] client lang: <none>
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] server lang: <none>
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] kex follows: False
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] Compression: none
2025-12-03T12:42:10.078 [DEBUG] [Thread-116869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:42:10.134 [DEBUG] [Thread-116869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:42:10.135 [DEBUG] [Thread-116869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:42:10.135 [DEBUG] [Thread-116869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:42:10.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:42:10.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:42:10.191 [DEBUG] [Thread-116869] [transport.py] [_log()] userauth is OK
2025-12-03T12:42:10.191 [DEBUG] [Thread-116869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:42:10.191 [DEBUG] [Thread-116869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:42:10.191 [DEBUG] [Thread-116869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:42:10.191 [DEBUG] [Thread-116869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:42:10.210 [INFO] [Thread-116869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:42:10.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:42:10.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:42:11.042 [DEBUG] [Thread-116869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:42:11.042 [DEBUG] [Thread-116869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:42:11.090 [DEBUG] [Thread-116869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:42:11.090 [DEBUG] [Thread-116869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:42:11.099 [DEBUG] [Thread-116869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:42:11.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:42:11.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:42:11.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:42:11.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:42:11.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:42:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:42:11.134 [DEBUG] [Thread-116869] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:42:19.111 [DEBUG] [Thread-116871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:34.155 [DEBUG] [Thread-116872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:41.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:42:41.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:42:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:42:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 42, 33), 19.36, 27.46, 0.0, 16.83, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:42:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:42:33
2025-12-03T12:42:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:42:42.069 [DEBUG] [Thread-116873] [transport.py] [_log()] starting thread (client mode): 0xa27c9210
2025-12-03T12:42:42.069 [DEBUG] [Thread-116873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:42:42.089 [DEBUG] [Thread-116873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:42:42.089 [INFO] [Thread-116873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:42:42.092 [DEBUG] [Thread-116873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:42:42.092 [DEBUG] [Thread-116873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:42:42.092 [DEBUG] [Thread-116873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] client lang: <none>
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] server lang: <none>
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] kex follows: False
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] Compression: none
2025-12-03T12:42:42.093 [DEBUG] [Thread-116873] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:42:42.109 [DEBUG] [Thread-116873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:42:42.109 [DEBUG] [Thread-116873] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:42:42.110 [DEBUG] [Thread-116873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:42:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:42:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:42:42.112 [DEBUG] [Thread-116873] [transport.py] [_log()] userauth is OK
2025-12-03T12:42:42.112 [DEBUG] [Thread-116873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:42:42.112 [DEBUG] [Thread-116873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:42:42.112 [DEBUG] [Thread-116873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:42:42.112 [DEBUG] [Thread-116873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:42:42.144 [INFO] [Thread-116873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:42:42.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:42:42.750 [DEBUG] [Thread-116873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:42:42.750 [DEBUG] [Thread-116873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:42:42.750 [DEBUG] [Thread-116873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:42:42.791 [DEBUG] [Thread-116873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:42:42.791 [DEBUG] [Thread-116873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:42:42.796 [DEBUG] [Thread-116873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:42:42.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:42:42.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:42:42.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:42:42.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:42:42.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:42:42.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:42:42.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.445883 -999.00  +20.10  15.19     30   +2.20 1 1 1 1 1   888    0 18.74 67.10 ----- 13.1 15.2 181.6 22.7 27.4 -23.6 26.3 -25.2 27.0 -20.9 27.7 -23.2
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:42:42.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.445883
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:42:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:42:33', tmtdew=19.36, humidity=27.46, cloud=0.0, wind=16.83, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:42:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:42:42.814 [DEBUG] [Thread-116873] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:42:42.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:42:42.899 [DEBUG] [Thread-116876] [transport.py] [_log()] starting thread (client mode): 0xa27cbd30
2025-12-03T12:42:42.899 [DEBUG] [Thread-116876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:42:42.914 [DEBUG] [Thread-116876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:42:42.914 [INFO] [Thread-116876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:42.921 [DEBUG] [Thread-116876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] client lang: <none>
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] server lang: <none>
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] kex follows: False
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] Compression: none
2025-12-03T12:42:42.922 [DEBUG] [Thread-116876] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:42:42.976 [DEBUG] [Thread-116876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:42:42.976 [DEBUG] [Thread-116876] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:42:42.977 [DEBUG] [Thread-116876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:42:42.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:42:42.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:42:43.034 [DEBUG] [Thread-116876] [transport.py] [_log()] userauth is OK
2025-12-03T12:42:43.034 [DEBUG] [Thread-116876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:42:43.034 [DEBUG] [Thread-116876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:42:43.034 [DEBUG] [Thread-116876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:42:43.034 [DEBUG] [Thread-116876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:42:43.049 [INFO] [Thread-116876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:42:43.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:42:43.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:42:43.879 [DEBUG] [Thread-116876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:42:43.879 [DEBUG] [Thread-116876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:42:43.927 [DEBUG] [Thread-116876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:42:43.927 [DEBUG] [Thread-116876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:42:43.936 [DEBUG] [Thread-116876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:42:43.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:42:43.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:42:43.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:42:43.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:42:43.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:42:43.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:42:43.969 [DEBUG] [Thread-116876] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:42:46.120 [DEBUG] [Thread-116878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:42:49.180 [DEBUG] [Thread-116879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:04.225 [DEBUG] [Thread-116880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:05.180 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:05.181 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:43:13.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:43:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:43:14.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 43, 5), 19.12, 27.33, 0.0, 10.8, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:43:14.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:43:05
2025-12-03T12:43:14.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:43:14.975 [DEBUG] [Thread-116881] [transport.py] [_log()] starting thread (client mode): 0xa27c9ea0
2025-12-03T12:43:14.975 [DEBUG] [Thread-116881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:43:14.994 [DEBUG] [Thread-116881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:43:14.994 [INFO] [Thread-116881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] client lang: <none>
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] server lang: <none>
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] kex follows: False
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] Compression: none
2025-12-03T12:43:14.998 [DEBUG] [Thread-116881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:43:15.013 [DEBUG] [Thread-116881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:43:15.013 [DEBUG] [Thread-116881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:43:15.014 [DEBUG] [Thread-116881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:43:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:43:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:43:15.015 [DEBUG] [Thread-116881] [transport.py] [_log()] userauth is OK
2025-12-03T12:43:15.015 [DEBUG] [Thread-116881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:43:15.015 [DEBUG] [Thread-116881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:43:15.015 [DEBUG] [Thread-116881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:43:15.015 [DEBUG] [Thread-116881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:43:15.026 [INFO] [Thread-116881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:43:15.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:43:15.644 [DEBUG] [Thread-116881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:43:15.644 [DEBUG] [Thread-116881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:43:15.644 [DEBUG] [Thread-116881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:43:15.685 [DEBUG] [Thread-116881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:43:15.685 [DEBUG] [Thread-116881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:43:15.687 [DEBUG] [Thread-116881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:43:15.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:43:15.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:43:15.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:43:15.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:43:15.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:43:15.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:43:15.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:43:15.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:43:15.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.446230 -999.00  +19.80  22.57     32   +2.90 1 2 1 1 1   888    0 18.62 67.27 ----- 21.9 22.6 136.2 24.4 27.5 -22.4 26.6 -22.6 27.1 -21.5 27.8 -23.8
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.446230
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:43:15.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:43:05', tmtdew=19.12, humidity=27.33, cloud=0.0, wind=10.8, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:42:34.272', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:43:15.707 [DEBUG] [Thread-116881] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:43:15.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:43:15.793 [DEBUG] [Thread-116884] [transport.py] [_log()] starting thread (client mode): 0xa519bd90
2025-12-03T12:43:15.793 [DEBUG] [Thread-116884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:43:15.807 [DEBUG] [Thread-116884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:43:15.807 [INFO] [Thread-116884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] client lang: <none>
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] server lang: <none>
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] kex follows: False
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] Compression: none
2025-12-03T12:43:15.815 [DEBUG] [Thread-116884] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:43:15.874 [DEBUG] [Thread-116884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:43:15.874 [DEBUG] [Thread-116884] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:43:15.875 [DEBUG] [Thread-116884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:43:15.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:43:15.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:43:15.933 [DEBUG] [Thread-116884] [transport.py] [_log()] userauth is OK
2025-12-03T12:43:15.933 [DEBUG] [Thread-116884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:43:15.933 [DEBUG] [Thread-116884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:43:15.933 [DEBUG] [Thread-116884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:43:15.933 [DEBUG] [Thread-116884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:43:15.948 [INFO] [Thread-116884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:43:15.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:43:15.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:43:16.800 [DEBUG] [Thread-116884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:43:16.801 [DEBUG] [Thread-116884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:43:16.849 [DEBUG] [Thread-116884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:43:16.849 [DEBUG] [Thread-116884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:43:16.858 [DEBUG] [Thread-116884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:43:16.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:43:16.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:43:16.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:43:16.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:43:16.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:43:16.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:43:16.893 [DEBUG] [Thread-116884] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:43:19.253 [DEBUG] [Thread-116886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:34.296 [DEBUG] [Thread-116887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:46.153 [DEBUG] [Thread-116888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:46.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:43:46.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:43:46.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:43:47.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 43, 37), 19.54, 26.98, 0.0, 15.3, 19.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:43:47.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:43:37
2025-12-03T12:43:47.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:43:47.850 [DEBUG] [Thread-116889] [transport.py] [_log()] starting thread (client mode): 0xa51cc7f0
2025-12-03T12:43:47.851 [DEBUG] [Thread-116889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:43:47.871 [DEBUG] [Thread-116889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:43:47.871 [INFO] [Thread-116889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:47.874 [DEBUG] [Thread-116889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] client lang: <none>
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] server lang: <none>
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] kex follows: False
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] Compression: none
2025-12-03T12:43:47.875 [DEBUG] [Thread-116889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:43:47.891 [DEBUG] [Thread-116889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:43:47.892 [DEBUG] [Thread-116889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:43:47.892 [DEBUG] [Thread-116889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:43:47.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:43:47.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:43:47.893 [DEBUG] [Thread-116889] [transport.py] [_log()] userauth is OK
2025-12-03T12:43:47.893 [DEBUG] [Thread-116889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:43:47.893 [DEBUG] [Thread-116889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:43:47.893 [DEBUG] [Thread-116889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:43:47.893 [DEBUG] [Thread-116889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:43:47.911 [INFO] [Thread-116889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:43:47.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:43:48.547 [DEBUG] [Thread-116889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:43:48.548 [DEBUG] [Thread-116889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:43:48.548 [DEBUG] [Thread-116889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:43:48.589 [DEBUG] [Thread-116889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:43:48.589 [DEBUG] [Thread-116889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:43:48.592 [DEBUG] [Thread-116889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:43:48.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:43:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:43:48.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:43:48.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:43:48.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:43:48.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:43:48.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.446578 -999.00  +19.50  15.54     33   +2.80 1 2 1 1 1   888    0 18.67 64.93 ----- 12.6 15.5 128.0 20.8 27.5 -22.8 26.9 -22.1 27.1 -21.6 27.9 -21.9
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:43:48.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.446578
2025-12-03T12:43:48.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:43:48.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:43:48.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:43:48.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:43:48.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:43:48.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:43:37', tmtdew=19.54, humidity=26.98, cloud=0.0, wind=15.3, temperature=19.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:43:04.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:43:48.616 [DEBUG] [Thread-116889] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:43:48.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:43:48.712 [DEBUG] [Thread-116892] [transport.py] [_log()] starting thread (client mode): 0xa51cd0f0
2025-12-03T12:43:48.712 [DEBUG] [Thread-116892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:43:48.727 [DEBUG] [Thread-116892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:43:48.727 [INFO] [Thread-116892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:43:48.734 [DEBUG] [Thread-116892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:43:48.734 [DEBUG] [Thread-116892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:43:48.734 [DEBUG] [Thread-116892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:43:48.734 [DEBUG] [Thread-116892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:48.734 [DEBUG] [Thread-116892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] client lang: <none>
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] server lang: <none>
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] kex follows: False
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:43:48.735 [DEBUG] [Thread-116892] [transport.py] [_log()] Compression: none
2025-12-03T12:43:48.736 [DEBUG] [Thread-116892] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:43:48.792 [DEBUG] [Thread-116892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:43:48.792 [DEBUG] [Thread-116892] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:43:48.793 [DEBUG] [Thread-116892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:43:48.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:43:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:43:48.848 [DEBUG] [Thread-116892] [transport.py] [_log()] userauth is OK
2025-12-03T12:43:48.848 [DEBUG] [Thread-116892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:43:48.848 [DEBUG] [Thread-116892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:43:48.849 [DEBUG] [Thread-116892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:43:48.849 [DEBUG] [Thread-116892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:43:48.867 [INFO] [Thread-116892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:43:48.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:43:48.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:43:49.323 [DEBUG] [Thread-116894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:43:49.722 [DEBUG] [Thread-116892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:43:49.722 [DEBUG] [Thread-116892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:43:49.769 [DEBUG] [Thread-116892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:43:49.769 [DEBUG] [Thread-116892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:43:49.778 [DEBUG] [Thread-116892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:43:49.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:43:49.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:43:49.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:43:49.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:43:49.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:43:49.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:43:49.810 [DEBUG] [Thread-116892] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:44:04.355 [DEBUG] [Thread-116895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:05.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:05.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:19.385 [DEBUG] [Thread-116896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:19.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:44:19.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:44:19.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:44:20.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 44, 9), 19.5, 27.05, 0.0, 17.5, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:44:20.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:44:09
2025-12-03T12:44:20.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:44:20.755 [DEBUG] [Thread-116897] [transport.py] [_log()] starting thread (client mode): 0xa51cd570
2025-12-03T12:44:20.755 [DEBUG] [Thread-116897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:44:20.776 [DEBUG] [Thread-116897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:44:20.776 [INFO] [Thread-116897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] client lang: <none>
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] server lang: <none>
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] kex follows: False
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] Compression: none
2025-12-03T12:44:20.779 [DEBUG] [Thread-116897] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:44:20.795 [DEBUG] [Thread-116897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:44:20.796 [DEBUG] [Thread-116897] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:44:20.796 [DEBUG] [Thread-116897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:44:20.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:44:20.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:44:20.798 [DEBUG] [Thread-116897] [transport.py] [_log()] userauth is OK
2025-12-03T12:44:20.799 [DEBUG] [Thread-116897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:44:20.799 [DEBUG] [Thread-116897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:44:20.799 [DEBUG] [Thread-116897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:44:20.799 [DEBUG] [Thread-116897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:44:20.834 [INFO] [Thread-116897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:44:20.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:44:21.483 [DEBUG] [Thread-116897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:44:21.483 [DEBUG] [Thread-116897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:44:21.484 [DEBUG] [Thread-116897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:44:21.524 [DEBUG] [Thread-116897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:44:21.524 [DEBUG] [Thread-116897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:44:21.527 [DEBUG] [Thread-116897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:44:21.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:44:21.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:44:21.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:44:21.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:44:21.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:44:21.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:44:21.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:44:21.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.446925 -999.00  +19.90  11.43     31   +2.30 1 1 1 1 1   888    0 18.58 64.32 ----- 11.4 11.4 170.6 16.3 27.6 -21.9 26.7 -26.5 27.3 -21.0 28.0 -23.0
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.446925
2025-12-03T12:44:21.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:44:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:44:21.551 [DEBUG] [Thread-116897] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:44:21.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:44:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:44:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:44:21.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:44:09', tmtdew=19.5, humidity=27.05, cloud=0.0, wind=17.5, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:43:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:44:21.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:44:21.649 [DEBUG] [Thread-116900] [transport.py] [_log()] starting thread (client mode): 0xa519b850
2025-12-03T12:44:21.649 [DEBUG] [Thread-116900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:44:21.663 [DEBUG] [Thread-116900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:44:21.663 [INFO] [Thread-116900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:44:21.670 [DEBUG] [Thread-116900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:44:21.671 [DEBUG] [Thread-116900] [transport.py] [_log()] client lang: <none>
2025-12-03T12:44:21.671 [DEBUG] [Thread-116900] [transport.py] [_log()] server lang: <none>
2025-12-03T12:44:21.671 [DEBUG] [Thread-116900] [transport.py] [_log()] kex follows: False
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] Compression: none
2025-12-03T12:44:21.672 [DEBUG] [Thread-116900] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:44:21.726 [DEBUG] [Thread-116900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:44:21.726 [DEBUG] [Thread-116900] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:44:21.727 [DEBUG] [Thread-116900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:44:21.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:44:21.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:44:21.783 [DEBUG] [Thread-116900] [transport.py] [_log()] userauth is OK
2025-12-03T12:44:21.784 [DEBUG] [Thread-116900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:44:21.784 [DEBUG] [Thread-116900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:44:21.784 [DEBUG] [Thread-116900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:44:21.784 [DEBUG] [Thread-116900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:44:21.802 [INFO] [Thread-116900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:44:21.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:44:21.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:44:22.618 [DEBUG] [Thread-116900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:44:22.618 [DEBUG] [Thread-116900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:44:22.667 [DEBUG] [Thread-116900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:44:22.667 [DEBUG] [Thread-116900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:44:22.675 [DEBUG] [Thread-116900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:44:22.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:44:22.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:44:22.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:44:22.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:44:22.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:44:22.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:44:22.710 [DEBUG] [Thread-116900] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:44:34.415 [DEBUG] [Thread-116902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:46.202 [DEBUG] [Thread-116903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:49.459 [DEBUG] [Thread-116904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:44:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:44:52.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:44:52.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:44:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 44, 42), 19.27, 27.38, 0.0, 17.29, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:44:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:44:42
2025-12-03T12:44:53.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:44:53.686 [DEBUG] [Thread-116905] [transport.py] [_log()] starting thread (client mode): 0xa27088b0
2025-12-03T12:44:53.686 [DEBUG] [Thread-116905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:44:53.707 [DEBUG] [Thread-116905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:44:53.707 [INFO] [Thread-116905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:44:53.711 [DEBUG] [Thread-116905] [transport.py] [_log()] client lang: <none>
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] server lang: <none>
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] kex follows: False
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] Compression: none
2025-12-03T12:44:53.712 [DEBUG] [Thread-116905] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:44:53.727 [DEBUG] [Thread-116905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:44:53.728 [DEBUG] [Thread-116905] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:44:53.728 [DEBUG] [Thread-116905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:44:53.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:44:53.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:44:53.730 [DEBUG] [Thread-116905] [transport.py] [_log()] userauth is OK
2025-12-03T12:44:53.730 [DEBUG] [Thread-116905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:44:53.730 [DEBUG] [Thread-116905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:44:53.730 [DEBUG] [Thread-116905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:44:53.730 [DEBUG] [Thread-116905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:44:53.751 [INFO] [Thread-116905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:44:53.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:44:54.427 [DEBUG] [Thread-116905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:44:54.427 [DEBUG] [Thread-116905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:44:54.427 [DEBUG] [Thread-116905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:44:54.468 [DEBUG] [Thread-116905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:44:54.468 [DEBUG] [Thread-116905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:44:54.471 [DEBUG] [Thread-116905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:44:54.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:44:54.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:44:54.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:44:54.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:44:54.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:44:54.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:44:54.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.447272 -999.00  +20.30  11.25     30   +2.50 1 1 1 1 1   888    0 18.77 68.09 ----- 13.2 11.2 157.6 17.4 27.7 -22.7 27.0 -26.1 27.4 -21.4 28.1 -21.6
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.447272
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:44:54.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:44:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:44:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:44:54.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:44:42', tmtdew=19.27, humidity=27.38, cloud=0.0, wind=17.29, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:44:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:44:54.493 [DEBUG] [Thread-116905] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:44:54.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:44:54.579 [DEBUG] [Thread-116908] [transport.py] [_log()] starting thread (client mode): 0xa51999f0
2025-12-03T12:44:54.579 [DEBUG] [Thread-116908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:44:54.593 [DEBUG] [Thread-116908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:44:54.593 [INFO] [Thread-116908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] client lang: <none>
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] server lang: <none>
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] kex follows: False
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] Compression: none
2025-12-03T12:44:54.601 [DEBUG] [Thread-116908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:44:54.658 [DEBUG] [Thread-116908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:44:54.659 [DEBUG] [Thread-116908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:44:54.659 [DEBUG] [Thread-116908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:44:54.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:44:54.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:44:54.715 [DEBUG] [Thread-116908] [transport.py] [_log()] userauth is OK
2025-12-03T12:44:54.715 [DEBUG] [Thread-116908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:44:54.715 [DEBUG] [Thread-116908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:44:54.715 [DEBUG] [Thread-116908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:44:54.715 [DEBUG] [Thread-116908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:44:54.732 [INFO] [Thread-116908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:44:54.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:44:54.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:44:55.618 [DEBUG] [Thread-116908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:44:55.618 [DEBUG] [Thread-116908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:44:55.666 [DEBUG] [Thread-116908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:44:55.666 [DEBUG] [Thread-116908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:44:55.675 [DEBUG] [Thread-116908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:44:55.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:44:55.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:44:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:44:55.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:44:55.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:44:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:44:55.707 [DEBUG] [Thread-116908] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:45:04.489 [DEBUG] [Thread-116910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:05.459 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:05.460 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:19.531 [DEBUG] [Thread-116911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:25.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:45:25.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:45:25.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:45:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 45, 14), 19.19, 27.56, 0.0, 12.23, 19.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:45:26.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:45:14
2025-12-03T12:45:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:45:26.677 [DEBUG] [Thread-116912] [transport.py] [_log()] starting thread (client mode): 0xa51cce50
2025-12-03T12:45:26.678 [DEBUG] [Thread-116912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:45:26.696 [DEBUG] [Thread-116912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:45:26.697 [INFO] [Thread-116912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] client lang: <none>
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] server lang: <none>
2025-12-03T12:45:26.700 [DEBUG] [Thread-116912] [transport.py] [_log()] kex follows: False
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] Compression: none
2025-12-03T12:45:26.701 [DEBUG] [Thread-116912] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:45:26.718 [DEBUG] [Thread-116912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:45:26.719 [DEBUG] [Thread-116912] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:45:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:45:26.720 [DEBUG] [Thread-116912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:45:26.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:45:26.722 [DEBUG] [Thread-116912] [transport.py] [_log()] userauth is OK
2025-12-03T12:45:26.722 [DEBUG] [Thread-116912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:45:26.722 [DEBUG] [Thread-116912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:45:26.722 [DEBUG] [Thread-116912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:45:26.723 [DEBUG] [Thread-116912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:45:26.746 [INFO] [Thread-116912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:45:26.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:45:27.502 [DEBUG] [Thread-116912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:45:27.502 [DEBUG] [Thread-116912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:45:27.503 [DEBUG] [Thread-116912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:45:27.543 [DEBUG] [Thread-116912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:45:27.544 [DEBUG] [Thread-116912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:45:27.546 [DEBUG] [Thread-116912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:45:27.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:45:27.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:45:27.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:45:27.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:45:27.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:45:27.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:45:27.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:45:27.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.447619 -999.00  +20.70   7.93     30   +2.50 1 2 1 1 1   888    0 18.76 70.88 ----- 8.7 7.9 145.9 12.5 27.9 -22.0 27.2 -24.3 27.6 -21.2 28.3 -22.7
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.447619
2025-12-03T12:45:27.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:45:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:45:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:45:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:45:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:45:27.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:45:14', tmtdew=19.19, humidity=27.56, cloud=0.0, wind=12.23, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:44:34.282', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:45:27.567 [DEBUG] [Thread-116912] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:45:27.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:45:27.668 [DEBUG] [Thread-116915] [transport.py] [_log()] starting thread (client mode): 0xa51cf250
2025-12-03T12:45:27.668 [DEBUG] [Thread-116915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:45:27.683 [DEBUG] [Thread-116915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:45:27.684 [INFO] [Thread-116915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:27.691 [DEBUG] [Thread-116915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] client lang: <none>
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] server lang: <none>
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] kex follows: False
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:45:27.692 [DEBUG] [Thread-116915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:45:27.693 [DEBUG] [Thread-116915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:45:27.693 [DEBUG] [Thread-116915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:45:27.693 [DEBUG] [Thread-116915] [transport.py] [_log()] Compression: none
2025-12-03T12:45:27.693 [DEBUG] [Thread-116915] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:45:27.749 [DEBUG] [Thread-116915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:45:27.750 [DEBUG] [Thread-116915] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:45:27.750 [DEBUG] [Thread-116915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:45:27.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:45:27.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:45:27.806 [DEBUG] [Thread-116915] [transport.py] [_log()] userauth is OK
2025-12-03T12:45:27.806 [DEBUG] [Thread-116915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:45:27.806 [DEBUG] [Thread-116915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:45:27.806 [DEBUG] [Thread-116915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:45:27.806 [DEBUG] [Thread-116915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:45:27.825 [INFO] [Thread-116915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:45:27.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:45:27.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:45:28.683 [DEBUG] [Thread-116915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:45:28.683 [DEBUG] [Thread-116915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:45:28.730 [DEBUG] [Thread-116915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:45:28.731 [DEBUG] [Thread-116915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:45:28.739 [DEBUG] [Thread-116915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:45:28.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:45:28.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:45:28.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:45:28.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:45:28.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:45:28.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:45:28.772 [DEBUG] [Thread-116915] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:45:34.561 [DEBUG] [Thread-116917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:46.231 [DEBUG] [Thread-116918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:49.601 [DEBUG] [Thread-116919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:45:58.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:45:58.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:45:58.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 45, 46), 19.7, 26.83, 0.0, 13.39, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:45:59.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:45:46
2025-12-03T12:45:59.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:45:59.730 [DEBUG] [Thread-116920] [transport.py] [_log()] starting thread (client mode): 0xa51ceb00
2025-12-03T12:45:59.730 [DEBUG] [Thread-116920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:45:59.749 [DEBUG] [Thread-116920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:45:59.749 [INFO] [Thread-116920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:45:59.752 [DEBUG] [Thread-116920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:45:59.752 [DEBUG] [Thread-116920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:45:59.752 [DEBUG] [Thread-116920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:45:59.752 [DEBUG] [Thread-116920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] client lang: <none>
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] server lang: <none>
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] kex follows: False
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] Compression: none
2025-12-03T12:45:59.753 [DEBUG] [Thread-116920] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:45:59.771 [DEBUG] [Thread-116920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:45:59.771 [DEBUG] [Thread-116920] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:45:59.772 [DEBUG] [Thread-116920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:45:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:45:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:45:59.773 [DEBUG] [Thread-116920] [transport.py] [_log()] userauth is OK
2025-12-03T12:45:59.774 [DEBUG] [Thread-116920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:45:59.774 [DEBUG] [Thread-116920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:45:59.774 [DEBUG] [Thread-116920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:45:59.774 [DEBUG] [Thread-116920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:45:59.791 [INFO] [Thread-116920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:45:59.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:46:00.428 [DEBUG] [Thread-116920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:46:00.428 [DEBUG] [Thread-116920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:46:00.428 [DEBUG] [Thread-116920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:46:00.469 [DEBUG] [Thread-116920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:46:00.469 [DEBUG] [Thread-116920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:46:00.472 [DEBUG] [Thread-116920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:46:00.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:46:00.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:46:00.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:46:00.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:46:00.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:46:00.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:46:00.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:46:00.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:46:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:46:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.447966 -999.00  +20.70   8.80     29   +2.30 1 2 1 1 1   888    0 19.04 78.55 ----- 13.6 8.8 157.0 16.9 28.1 -23.2 27.3 -22.8 27.6 -21.6 28.4 -23.5
2025-12-03T12:46:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:46:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:46:00.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.447966
2025-12-03T12:46:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:46:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:46:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:46:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:46:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:46:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:45:46', tmtdew=19.7, humidity=26.83, cloud=0.0, wind=13.39, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:45:04.262', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:46:00.499 [DEBUG] [Thread-116920] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:46:00.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:46:00.596 [DEBUG] [Thread-116923] [transport.py] [_log()] starting thread (client mode): 0xa51ced40
2025-12-03T12:46:00.596 [DEBUG] [Thread-116923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:46:00.611 [DEBUG] [Thread-116923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:46:00.611 [INFO] [Thread-116923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:46:00.618 [DEBUG] [Thread-116923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:46:00.618 [DEBUG] [Thread-116923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:46:00.618 [DEBUG] [Thread-116923] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:46:00.618 [DEBUG] [Thread-116923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] client lang: <none>
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] server lang: <none>
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] kex follows: False
2025-12-03T12:46:00.619 [DEBUG] [Thread-116923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] Compression: none
2025-12-03T12:46:00.620 [DEBUG] [Thread-116923] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:46:00.677 [DEBUG] [Thread-116923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:46:00.678 [DEBUG] [Thread-116923] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:46:00.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:46:00.679 [DEBUG] [Thread-116923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:46:00.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:46:00.733 [DEBUG] [Thread-116923] [transport.py] [_log()] userauth is OK
2025-12-03T12:46:00.733 [DEBUG] [Thread-116923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:46:00.733 [DEBUG] [Thread-116923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:46:00.734 [DEBUG] [Thread-116923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:46:00.734 [DEBUG] [Thread-116923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:46:00.756 [INFO] [Thread-116923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:46:00.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:46:00.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:46:01.626 [DEBUG] [Thread-116923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:46:01.627 [DEBUG] [Thread-116923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:46:01.675 [DEBUG] [Thread-116923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:46:01.675 [DEBUG] [Thread-116923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:46:01.688 [DEBUG] [Thread-116923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:46:01.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:46:01.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:46:01.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:46:01.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:46:01.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:46:01.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:46:01.725 [DEBUG] [Thread-116923] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:46:04.628 [DEBUG] [Thread-116925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:05.601 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:05.602 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:19.678 [DEBUG] [Thread-116926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:31.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:46:31.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:46:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:46:32.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 46, 18), 19.82, 26.55, 0.0, 11.96, 19.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:46:32.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:46:18
2025-12-03T12:46:32.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:46:32.687 [DEBUG] [Thread-116927] [transport.py] [_log()] starting thread (client mode): 0xa51cebc0
2025-12-03T12:46:32.687 [DEBUG] [Thread-116927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:46:32.707 [DEBUG] [Thread-116927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:46:32.708 [INFO] [Thread-116927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] client lang: <none>
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] server lang: <none>
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] kex follows: False
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] Compression: none
2025-12-03T12:46:32.711 [DEBUG] [Thread-116927] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:46:32.730 [DEBUG] [Thread-116927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:46:32.730 [DEBUG] [Thread-116927] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:46:32.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:46:32.731 [DEBUG] [Thread-116927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:46:32.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:46:32.733 [DEBUG] [Thread-116927] [transport.py] [_log()] userauth is OK
2025-12-03T12:46:32.733 [DEBUG] [Thread-116927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:46:32.733 [DEBUG] [Thread-116927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:46:32.733 [DEBUG] [Thread-116927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:46:32.734 [DEBUG] [Thread-116927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:46:32.757 [INFO] [Thread-116927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:46:32.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:46:33.557 [DEBUG] [Thread-116927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:46:33.557 [DEBUG] [Thread-116927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:46:33.558 [DEBUG] [Thread-116927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:46:33.598 [DEBUG] [Thread-116927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:46:33.598 [DEBUG] [Thread-116927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:46:33.601 [DEBUG] [Thread-116927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:46:33.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:46:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:46:33.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:46:33.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:46:33.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:46:33.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:46:33.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:46:33.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:46:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:46:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.448314 -999.00  +20.70   9.42     29   +2.40 1 2 1 1 1   888    0 19.08 81.06 ----- 11.1 9.4 152.6 13.3 28.1 -23.7 27.4 -22.5 27.7 -21.5 28.4 -22.6
2025-12-03T12:46:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:46:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:46:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.448314
2025-12-03T12:46:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:46:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:46:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:46:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:46:33.625 [DEBUG] [Thread-116927] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:46:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:46:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:46:18', tmtdew=19.82, humidity=26.55, cloud=0.0, wind=11.96, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:45:34.330', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:46:33.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:46:33.721 [DEBUG] [Thread-116930] [transport.py] [_log()] starting thread (client mode): 0xa5161660
2025-12-03T12:46:33.721 [DEBUG] [Thread-116930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:46:33.736 [DEBUG] [Thread-116930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:46:33.737 [INFO] [Thread-116930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:46:33.744 [DEBUG] [Thread-116930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:46:33.744 [DEBUG] [Thread-116930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:46:33.744 [DEBUG] [Thread-116930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] client lang: <none>
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] server lang: <none>
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] kex follows: False
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] Compression: none
2025-12-03T12:46:33.745 [DEBUG] [Thread-116930] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:46:33.800 [DEBUG] [Thread-116930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:46:33.801 [DEBUG] [Thread-116930] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:46:33.801 [DEBUG] [Thread-116930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:46:33.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:46:33.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:46:33.857 [DEBUG] [Thread-116930] [transport.py] [_log()] userauth is OK
2025-12-03T12:46:33.857 [DEBUG] [Thread-116930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:46:33.857 [DEBUG] [Thread-116930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:46:33.857 [DEBUG] [Thread-116930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:46:33.857 [DEBUG] [Thread-116930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:46:33.876 [INFO] [Thread-116930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:46:33.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:46:33.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:46:34.705 [DEBUG] [Thread-116932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:34.787 [DEBUG] [Thread-116930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:46:34.787 [DEBUG] [Thread-116930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:46:34.835 [DEBUG] [Thread-116930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:46:34.835 [DEBUG] [Thread-116930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:46:34.843 [DEBUG] [Thread-116930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:46:34.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:46:34.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:46:34.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:46:34.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:46:34.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:46:34.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:46:34.878 [DEBUG] [Thread-116930] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:46:46.265 [DEBUG] [Thread-116933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:46:49.746 [DEBUG] [Thread-116934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:04.778 [DEBUG] [Thread-116935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:04.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:47:04.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:47:04.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:47:05.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 46, 50), 19.2, 27.46, 0.0, 9.65, 19.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:47:05.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:46:50
2025-12-03T12:47:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:47:05.741 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:05.742 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:05.880 [DEBUG] [Thread-116936] [transport.py] [_log()] starting thread (client mode): 0xa51cf820
2025-12-03T12:47:05.880 [DEBUG] [Thread-116936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:47:05.892 [DEBUG] [Thread-116936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:47:05.892 [INFO] [Thread-116936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] client lang: <none>
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] server lang: <none>
2025-12-03T12:47:05.895 [DEBUG] [Thread-116936] [transport.py] [_log()] kex follows: False
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] Compression: none
2025-12-03T12:47:05.896 [DEBUG] [Thread-116936] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:47:05.911 [DEBUG] [Thread-116936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:47:05.911 [DEBUG] [Thread-116936] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:47:05.912 [DEBUG] [Thread-116936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:47:05.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:47:05.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:47:05.913 [DEBUG] [Thread-116936] [transport.py] [_log()] userauth is OK
2025-12-03T12:47:05.913 [DEBUG] [Thread-116936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:47:05.913 [DEBUG] [Thread-116936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:47:05.913 [DEBUG] [Thread-116936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:47:05.913 [DEBUG] [Thread-116936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:47:05.932 [INFO] [Thread-116936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:47:05.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:47:06.586 [DEBUG] [Thread-116936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:47:06.586 [DEBUG] [Thread-116936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:47:06.587 [DEBUG] [Thread-116936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:47:06.628 [DEBUG] [Thread-116936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:47:06.628 [DEBUG] [Thread-116936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:47:06.630 [DEBUG] [Thread-116936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:47:06.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:47:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:47:06.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:47:06.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:47:06.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:47:06.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:47:06.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.449008 -999.00  +20.10   6.62     32   +2.80 1 2 1 1 1   888    0 19.50 85.80 ----- 4.9 6.6 109.0 14.4 28.1 -28.1 27.7 -22.4 27.8 -20.9 28.6 -22.5
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.449008
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:47:06.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:46:50', tmtdew=19.2, humidity=27.46, cloud=0.0, wind=9.65, temperature=19.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:46:34.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:47:06.648 [DEBUG] [Thread-116936] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:47:06.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:47:06.733 [DEBUG] [Thread-116939] [transport.py] [_log()] starting thread (client mode): 0xa51cd750
2025-12-03T12:47:06.733 [DEBUG] [Thread-116939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:47:06.749 [DEBUG] [Thread-116939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:47:06.749 [INFO] [Thread-116939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:47:06.758 [DEBUG] [Thread-116939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:47:06.758 [DEBUG] [Thread-116939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] client lang: <none>
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] server lang: <none>
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] kex follows: False
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] Compression: none
2025-12-03T12:47:06.759 [DEBUG] [Thread-116939] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:47:06.815 [DEBUG] [Thread-116939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:47:06.815 [DEBUG] [Thread-116939] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:47:06.815 [DEBUG] [Thread-116939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:47:06.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:47:06.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:47:06.872 [DEBUG] [Thread-116939] [transport.py] [_log()] userauth is OK
2025-12-03T12:47:06.872 [DEBUG] [Thread-116939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:47:06.872 [DEBUG] [Thread-116939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:47:06.872 [DEBUG] [Thread-116939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:47:06.872 [DEBUG] [Thread-116939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:47:06.886 [INFO] [Thread-116939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:47:06.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:47:06.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:47:07.823 [DEBUG] [Thread-116939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:47:07.823 [DEBUG] [Thread-116939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:47:07.870 [DEBUG] [Thread-116939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:47:07.871 [DEBUG] [Thread-116939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:47:07.880 [DEBUG] [Thread-116939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:47:07.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:47:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:47:07.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:47:07.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:47:07.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:47:07.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:47:07.914 [DEBUG] [Thread-116939] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:47:19.806 [DEBUG] [Thread-116941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:34.849 [DEBUG] [Thread-116942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:37.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:47:37.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:47:37.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 47, 22), 19.3, 27.26, 0.0, 12.79, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:47:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:47:22
2025-12-03T12:47:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:47:38.889 [DEBUG] [Thread-116943] [transport.py] [_log()] starting thread (client mode): 0xa519b100
2025-12-03T12:47:38.889 [DEBUG] [Thread-116943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:47:38.909 [DEBUG] [Thread-116943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:47:38.909 [INFO] [Thread-116943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] client lang: <none>
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] server lang: <none>
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] kex follows: False
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] Compression: none
2025-12-03T12:47:38.912 [DEBUG] [Thread-116943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:47:38.928 [DEBUG] [Thread-116943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:47:38.928 [DEBUG] [Thread-116943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:47:38.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:47:38.929 [DEBUG] [Thread-116943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:47:38.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:47:38.930 [DEBUG] [Thread-116943] [transport.py] [_log()] userauth is OK
2025-12-03T12:47:38.930 [DEBUG] [Thread-116943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:47:38.931 [DEBUG] [Thread-116943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:47:38.931 [DEBUG] [Thread-116943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:47:38.931 [DEBUG] [Thread-116943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:47:38.945 [INFO] [Thread-116943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:47:38.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:47:39.732 [DEBUG] [Thread-116943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:47:39.732 [DEBUG] [Thread-116943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:47:39.732 [DEBUG] [Thread-116943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:47:39.773 [DEBUG] [Thread-116943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:47:39.773 [DEBUG] [Thread-116943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:47:39.775 [DEBUG] [Thread-116943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:47:39.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:47:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:47:39.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:47:39.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:47:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:47:39.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:47:39.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.449355 -999.00  +20.10   9.43     32   +3.00 1 2 1 1 1   888    0 19.48 89.77 ----- 9.5 9.4 131.5 14.3 28.3 -24.8 27.8 -23.2 27.9 -21.6 28.8 -22.8
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.449355
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:47:39.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:47:22', tmtdew=19.3, humidity=27.26, cloud=0.0, wind=12.79, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:47:04.272', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:47:39.792 [DEBUG] [Thread-116943] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:47:39.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:47:39.882 [DEBUG] [Thread-116946] [transport.py] [_log()] starting thread (client mode): 0xa51cc760
2025-12-03T12:47:39.883 [DEBUG] [Thread-116946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:47:39.897 [DEBUG] [Thread-116946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:47:39.897 [INFO] [Thread-116946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:47:39.904 [DEBUG] [Thread-116946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:47:39.904 [DEBUG] [Thread-116946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:47:39.904 [DEBUG] [Thread-116946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:47:39.904 [DEBUG] [Thread-116946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] client lang: <none>
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] server lang: <none>
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] kex follows: False
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] Compression: none
2025-12-03T12:47:39.905 [DEBUG] [Thread-116946] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:47:39.963 [DEBUG] [Thread-116946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:47:39.963 [DEBUG] [Thread-116946] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:47:39.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:47:39.964 [DEBUG] [Thread-116946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:47:39.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:47:40.020 [DEBUG] [Thread-116946] [transport.py] [_log()] userauth is OK
2025-12-03T12:47:40.020 [DEBUG] [Thread-116946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:47:40.020 [DEBUG] [Thread-116946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:47:40.020 [DEBUG] [Thread-116946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:47:40.020 [DEBUG] [Thread-116946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:47:40.042 [INFO] [Thread-116946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:47:40.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:47:40.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:47:40.861 [DEBUG] [Thread-116946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:47:40.861 [DEBUG] [Thread-116946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:47:40.909 [DEBUG] [Thread-116946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:47:40.909 [DEBUG] [Thread-116946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:47:40.917 [DEBUG] [Thread-116946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:47:40.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:47:40.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:47:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:47:40.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:47:40.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:47:40.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:47:40.949 [DEBUG] [Thread-116946] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:47:46.294 [DEBUG] [Thread-116948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:47:49.877 [DEBUG] [Thread-116949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:04.920 [DEBUG] [Thread-116950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:05.883 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:05.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:10.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:48:10.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:48:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:48:11.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 47, 54), 19.35, 27.43, 0.0, 15.28, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:48:11.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:47:54
2025-12-03T12:48:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:48:11.925 [DEBUG] [Thread-116951] [transport.py] [_log()] starting thread (client mode): 0xa51cd840
2025-12-03T12:48:11.926 [DEBUG] [Thread-116951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:48:11.946 [DEBUG] [Thread-116951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:48:11.946 [INFO] [Thread-116951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] client lang: <none>
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] server lang: <none>
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] kex follows: False
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] Compression: none
2025-12-03T12:48:11.948 [DEBUG] [Thread-116951] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:48:11.957 [DEBUG] [Thread-116951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:48:11.958 [DEBUG] [Thread-116951] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:48:11.958 [DEBUG] [Thread-116951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:48:11.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:48:11.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:48:11.959 [DEBUG] [Thread-116951] [transport.py] [_log()] userauth is OK
2025-12-03T12:48:11.960 [DEBUG] [Thread-116951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:48:11.960 [DEBUG] [Thread-116951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:48:11.960 [DEBUG] [Thread-116951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:48:11.960 [DEBUG] [Thread-116951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:48:11.991 [INFO] [Thread-116951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:48:11.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:48:12.626 [DEBUG] [Thread-116951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:48:12.627 [DEBUG] [Thread-116951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:48:12.627 [DEBUG] [Thread-116951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:48:12.668 [DEBUG] [Thread-116951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:48:12.668 [DEBUG] [Thread-116951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:48:12.671 [DEBUG] [Thread-116951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:48:12.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:48:12.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:48:12.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:48:12.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:48:12.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:48:12.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:48:12.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:48:12.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.449703 -999.00  +20.40  19.14     32   +3.10 1 1 1 1 1   888    0 19.35 85.64 ----- 17.5 19.1 138.3 23.1 28.3 -24.6 27.6 -25.3 28.0 -23.2 28.6 -25.1
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.449703
2025-12-03T12:48:12.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:48:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:48:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:48:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:48:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:48:12.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:47:54', tmtdew=19.35, humidity=27.43, cloud=0.0, wind=15.28, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:47:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:48:12.698 [DEBUG] [Thread-116951] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:48:12.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:48:12.795 [DEBUG] [Thread-116954] [transport.py] [_log()] starting thread (client mode): 0xa51612d0
2025-12-03T12:48:12.795 [DEBUG] [Thread-116954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:48:12.810 [DEBUG] [Thread-116954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:48:12.810 [INFO] [Thread-116954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:12.817 [DEBUG] [Thread-116954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] client lang: <none>
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] server lang: <none>
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] kex follows: False
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] Compression: none
2025-12-03T12:48:12.818 [DEBUG] [Thread-116954] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:48:12.875 [DEBUG] [Thread-116954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:48:12.875 [DEBUG] [Thread-116954] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:48:12.876 [DEBUG] [Thread-116954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:48:12.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:48:12.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:48:12.931 [DEBUG] [Thread-116954] [transport.py] [_log()] userauth is OK
2025-12-03T12:48:12.931 [DEBUG] [Thread-116954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:48:12.931 [DEBUG] [Thread-116954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:48:12.931 [DEBUG] [Thread-116954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:48:12.931 [DEBUG] [Thread-116954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:48:12.950 [INFO] [Thread-116954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:48:12.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:48:12.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:48:13.806 [DEBUG] [Thread-116954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:48:13.806 [DEBUG] [Thread-116954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:48:13.854 [DEBUG] [Thread-116954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:48:13.854 [DEBUG] [Thread-116954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:48:13.863 [DEBUG] [Thread-116954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:48:13.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:48:13.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:48:13.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:48:13.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:48:13.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:48:13.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:48:13.897 [DEBUG] [Thread-116954] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:48:19.946 [DEBUG] [Thread-116956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:34.984 [DEBUG] [Thread-116957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:43.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:48:43.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:48:43.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:48:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 48, 26), 19.06, 27.93, 0.0, 11.15, 19.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:48:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:48:26
2025-12-03T12:48:44.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:48:44.864 [DEBUG] [Thread-116958] [transport.py] [_log()] starting thread (client mode): 0xa51639a0
2025-12-03T12:48:44.864 [DEBUG] [Thread-116958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:48:44.884 [DEBUG] [Thread-116958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:48:44.884 [INFO] [Thread-116958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] client lang: <none>
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] server lang: <none>
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] kex follows: False
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] Compression: none
2025-12-03T12:48:44.887 [DEBUG] [Thread-116958] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:48:44.903 [DEBUG] [Thread-116958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:48:44.904 [DEBUG] [Thread-116958] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:48:44.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:48:44.904 [DEBUG] [Thread-116958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:48:44.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:48:44.905 [DEBUG] [Thread-116958] [transport.py] [_log()] userauth is OK
2025-12-03T12:48:44.905 [DEBUG] [Thread-116958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:48:44.905 [DEBUG] [Thread-116958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:48:44.905 [DEBUG] [Thread-116958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:48:44.905 [DEBUG] [Thread-116958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:48:44.919 [INFO] [Thread-116958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:48:44.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:48:45.686 [DEBUG] [Thread-116958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:48:45.686 [DEBUG] [Thread-116958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:48:45.686 [DEBUG] [Thread-116958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:48:45.727 [DEBUG] [Thread-116958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:48:45.727 [DEBUG] [Thread-116958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:48:45.730 [DEBUG] [Thread-116958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:48:45.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:48:45.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:48:45.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:48:45.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:48:45.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:48:45.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:48:45.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:48:45.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:48:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:48:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.450050 -999.00  +19.80   9.65     32   +2.90 1 1 1 1 1   888    0 19.95 99.02 ----- 8.7 9.7 143.3 25.2 28.1 -25.5 27.6 -24.4 27.8 -24.6 28.4 -25.0
2025-12-03T12:48:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:48:45.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:48:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.450050
2025-12-03T12:48:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:48:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:48:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:48:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:48:45.755 [DEBUG] [Thread-116958] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:48:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:48:45.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:48:26', tmtdew=19.06, humidity=27.93, cloud=0.0, wind=11.15, temperature=19.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:48:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:48:45.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:48:45.852 [DEBUG] [Thread-116961] [transport.py] [_log()] starting thread (client mode): 0xa51ce590
2025-12-03T12:48:45.852 [DEBUG] [Thread-116961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:48:45.866 [DEBUG] [Thread-116961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:48:45.867 [INFO] [Thread-116961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:48:45.874 [DEBUG] [Thread-116961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:48:45.874 [DEBUG] [Thread-116961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] client lang: <none>
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] server lang: <none>
2025-12-03T12:48:45.875 [DEBUG] [Thread-116961] [transport.py] [_log()] kex follows: False
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] Compression: none
2025-12-03T12:48:45.876 [DEBUG] [Thread-116961] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:48:45.934 [DEBUG] [Thread-116961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:48:45.934 [DEBUG] [Thread-116961] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:48:45.935 [DEBUG] [Thread-116961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:48:45.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:48:45.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:48:45.994 [DEBUG] [Thread-116961] [transport.py] [_log()] userauth is OK
2025-12-03T12:48:45.995 [DEBUG] [Thread-116961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:48:45.995 [DEBUG] [Thread-116961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:48:45.995 [DEBUG] [Thread-116961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:48:45.995 [DEBUG] [Thread-116961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:48:46.014 [INFO] [Thread-116961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:48:46.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:48:46.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:48:46.348 [DEBUG] [Thread-116963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:48:46.866 [DEBUG] [Thread-116961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:48:46.866 [DEBUG] [Thread-116961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:48:46.914 [DEBUG] [Thread-116961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:48:46.914 [DEBUG] [Thread-116961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:48:46.922 [DEBUG] [Thread-116961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:48:46.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:48:46.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:48:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:48:46.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:48:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:48:46.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:48:46.956 [DEBUG] [Thread-116961] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:48:50.015 [DEBUG] [Thread-116964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:05.056 [DEBUG] [Thread-116965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:06.030 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:06.031 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:16.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:49:16.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:49:16.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:49:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 48, 58), 18.8, 28.26, 0.0, 15.51, 19.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:49:17.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:48:58
2025-12-03T12:49:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:49:17.930 [DEBUG] [Thread-116966] [transport.py] [_log()] starting thread (client mode): 0xa5160730
2025-12-03T12:49:17.930 [DEBUG] [Thread-116966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:49:17.952 [DEBUG] [Thread-116966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:49:17.952 [INFO] [Thread-116966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:49:17.956 [DEBUG] [Thread-116966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:49:17.956 [DEBUG] [Thread-116966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:49:17.956 [DEBUG] [Thread-116966] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] client lang: <none>
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] server lang: <none>
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] kex follows: False
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] Compression: none
2025-12-03T12:49:17.957 [DEBUG] [Thread-116966] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:49:17.974 [DEBUG] [Thread-116966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:49:17.974 [DEBUG] [Thread-116966] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:49:17.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:49:17.975 [DEBUG] [Thread-116966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:49:17.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:49:17.977 [DEBUG] [Thread-116966] [transport.py] [_log()] userauth is OK
2025-12-03T12:49:17.978 [DEBUG] [Thread-116966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:49:17.978 [DEBUG] [Thread-116966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:49:17.978 [DEBUG] [Thread-116966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:49:17.978 [DEBUG] [Thread-116966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:49:18.014 [INFO] [Thread-116966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:49:18.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:49:18.669 [DEBUG] [Thread-116966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:49:18.669 [DEBUG] [Thread-116966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:49:18.670 [DEBUG] [Thread-116966] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:49:18.711 [DEBUG] [Thread-116966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:49:18.711 [DEBUG] [Thread-116966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:49:18.714 [DEBUG] [Thread-116966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:49:18.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:49:18.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:49:18.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:49:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:49:18.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:49:18.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:49:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.450397 -999.00  +19.80  12.48     32   +2.90 1 1 1 1 1   888    0 19.50 87.76 ----- 15.2 12.5 136.2 17.7 28.1 -25.1 27.5 -24.1 27.7 -23.6 28.4 -25.2
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:49:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.450397
2025-12-03T12:49:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:49:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:49:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:49:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:49:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:49:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:48:58', tmtdew=18.8, humidity=28.26, cloud=0.0, wind=15.51, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:48:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:49:18.740 [DEBUG] [Thread-116966] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:49:18.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:49:18.835 [DEBUG] [Thread-116969] [transport.py] [_log()] starting thread (client mode): 0xa51cc970
2025-12-03T12:49:18.836 [DEBUG] [Thread-116969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:49:18.850 [DEBUG] [Thread-116969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:49:18.851 [INFO] [Thread-116969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] client lang: <none>
2025-12-03T12:49:18.858 [DEBUG] [Thread-116969] [transport.py] [_log()] server lang: <none>
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] kex follows: False
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] Compression: none
2025-12-03T12:49:18.859 [DEBUG] [Thread-116969] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:49:18.917 [DEBUG] [Thread-116969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:49:18.918 [DEBUG] [Thread-116969] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:49:18.918 [DEBUG] [Thread-116969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:49:18.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:49:18.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:49:18.974 [DEBUG] [Thread-116969] [transport.py] [_log()] userauth is OK
2025-12-03T12:49:18.974 [DEBUG] [Thread-116969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:49:18.975 [DEBUG] [Thread-116969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:49:18.975 [DEBUG] [Thread-116969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:49:18.975 [DEBUG] [Thread-116969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:49:18.994 [INFO] [Thread-116969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:49:18.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:49:18.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:49:19.825 [DEBUG] [Thread-116969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:49:19.825 [DEBUG] [Thread-116969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:49:19.873 [DEBUG] [Thread-116969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:49:19.873 [DEBUG] [Thread-116969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:49:19.882 [DEBUG] [Thread-116969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:49:19.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:49:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:49:19.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:49:19.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:49:19.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:49:19.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:49:19.916 [DEBUG] [Thread-116969] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:49:20.085 [DEBUG] [Thread-116971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:35.141 [DEBUG] [Thread-116972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:46.397 [DEBUG] [Thread-116973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:49.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:49:49.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:49:49.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:49:50.169 [DEBUG] [Thread-116974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:49:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 49, 31), 19.02, 27.89, 0.0, 14.65, 19.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:49:50.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:49:31
2025-12-03T12:49:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:49:50.876 [DEBUG] [Thread-116975] [transport.py] [_log()] starting thread (client mode): 0xa51cd360
2025-12-03T12:49:50.876 [DEBUG] [Thread-116975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:49:50.896 [DEBUG] [Thread-116975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:49:50.897 [INFO] [Thread-116975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] client lang: <none>
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] server lang: <none>
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] kex follows: False
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] Compression: none
2025-12-03T12:49:50.900 [DEBUG] [Thread-116975] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:49:50.917 [DEBUG] [Thread-116975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:49:50.918 [DEBUG] [Thread-116975] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:49:50.918 [DEBUG] [Thread-116975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:49:50.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:49:50.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:49:50.920 [DEBUG] [Thread-116975] [transport.py] [_log()] userauth is OK
2025-12-03T12:49:50.921 [DEBUG] [Thread-116975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:49:50.921 [DEBUG] [Thread-116975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:49:50.921 [DEBUG] [Thread-116975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:49:50.921 [DEBUG] [Thread-116975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:49:50.955 [INFO] [Thread-116975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:49:50.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:49:51.793 [DEBUG] [Thread-116975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:49:51.793 [DEBUG] [Thread-116975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:49:51.793 [DEBUG] [Thread-116975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:49:51.834 [DEBUG] [Thread-116975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:49:51.834 [DEBUG] [Thread-116975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:49:51.837 [DEBUG] [Thread-116975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:49:51.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:49:51.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:49:51.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:49:51.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:49:51.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:49:51.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:49:51.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:49:51.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:49:51.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:49:51.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.450744 -999.00  +19.60  16.91     33   +2.90 1 1 1 1 1   888    0 19.87 94.00 ----- 16.1 16.9 138.0 21.7 27.9 -25.1 27.5 -24.5 27.8 -23.2 28.4 -24.7
2025-12-03T12:49:51.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:49:51.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:49:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.450744
2025-12-03T12:49:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:49:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:49:51.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:49:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:49:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:49:51.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:49:31', tmtdew=19.02, humidity=27.89, cloud=0.0, wind=14.65, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:49:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:49:51.864 [DEBUG] [Thread-116975] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:49:51.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:49:51.960 [DEBUG] [Thread-116978] [transport.py] [_log()] starting thread (client mode): 0xa27853f0
2025-12-03T12:49:51.960 [DEBUG] [Thread-116978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:49:51.975 [DEBUG] [Thread-116978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:49:51.975 [INFO] [Thread-116978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:49:51.983 [DEBUG] [Thread-116978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] client lang: <none>
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] server lang: <none>
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] kex follows: False
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] Compression: none
2025-12-03T12:49:51.984 [DEBUG] [Thread-116978] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:49:52.041 [DEBUG] [Thread-116978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:49:52.042 [DEBUG] [Thread-116978] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:49:52.042 [DEBUG] [Thread-116978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:49:52.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:49:52.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:49:52.097 [DEBUG] [Thread-116978] [transport.py] [_log()] userauth is OK
2025-12-03T12:49:52.097 [DEBUG] [Thread-116978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:49:52.098 [DEBUG] [Thread-116978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:49:52.098 [DEBUG] [Thread-116978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:49:52.098 [DEBUG] [Thread-116978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:49:52.116 [INFO] [Thread-116978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:49:52.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:49:52.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:49:52.951 [DEBUG] [Thread-116978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:49:52.951 [DEBUG] [Thread-116978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:49:52.999 [DEBUG] [Thread-116978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:49:52.999 [DEBUG] [Thread-116978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:49:53.008 [DEBUG] [Thread-116978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:49:53.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:49:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:49:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:49:53.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:49:53.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:49:53.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:49:53.048 [DEBUG] [Thread-116978] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:50:05.194 [DEBUG] [Thread-116980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:06.168 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:06.169 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:20.230 [DEBUG] [Thread-116981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:50:23.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:50:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:50:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 50, 3), 19.29, 27.4, 0.0, 14.88, 19.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:50:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:50:03
2025-12-03T12:50:23.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:50:23.987 [DEBUG] [Thread-116982] [transport.py] [_log()] starting thread (client mode): 0xa27853f0
2025-12-03T12:50:23.987 [DEBUG] [Thread-116982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:50:24.000 [DEBUG] [Thread-116982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:50:24.000 [INFO] [Thread-116982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] client lang: <none>
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] server lang: <none>
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] kex follows: False
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] Compression: none
2025-12-03T12:50:24.003 [DEBUG] [Thread-116982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:50:24.019 [DEBUG] [Thread-116982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:50:24.019 [DEBUG] [Thread-116982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:50:24.019 [DEBUG] [Thread-116982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:50:24.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:50:24.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:50:24.060 [DEBUG] [Thread-116982] [transport.py] [_log()] userauth is OK
2025-12-03T12:50:24.061 [DEBUG] [Thread-116982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:50:24.061 [DEBUG] [Thread-116982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:50:24.061 [DEBUG] [Thread-116982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:50:24.061 [DEBUG] [Thread-116982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:50:24.081 [INFO] [Thread-116982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:50:24.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:50:24.715 [DEBUG] [Thread-116982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:50:24.716 [DEBUG] [Thread-116982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:50:24.716 [DEBUG] [Thread-116982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:50:24.757 [DEBUG] [Thread-116982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:50:24.757 [DEBUG] [Thread-116982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:50:24.760 [DEBUG] [Thread-116982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:50:24.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:50:24.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:50:24.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:50:24.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:50:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:50:24.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:50:24.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:50:24.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.451091 -999.00  +19.70  16.73     32   +2.90 1 1 1 1 1   888    0 19.87 89.89 ----- 10.3 16.7 148.6 23.2 27.9 -25.3 27.4 -24.1 27.7 -24.9 28.2 -25.9
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.451091
2025-12-03T12:50:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:50:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:50:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:50:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:50:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:50:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:50:03', tmtdew=19.29, humidity=27.4, cloud=0.0, wind=14.88, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:49:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:50:24.776 [DEBUG] [Thread-116982] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:50:24.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:50:24.871 [DEBUG] [Thread-116985] [transport.py] [_log()] starting thread (client mode): 0xa27b7f70
2025-12-03T12:50:24.871 [DEBUG] [Thread-116985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:50:24.886 [DEBUG] [Thread-116985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:50:24.886 [INFO] [Thread-116985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:50:24.894 [DEBUG] [Thread-116985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:50:24.894 [DEBUG] [Thread-116985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] client lang: <none>
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] server lang: <none>
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] kex follows: False
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:50:24.895 [DEBUG] [Thread-116985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:50:24.896 [DEBUG] [Thread-116985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:50:24.896 [DEBUG] [Thread-116985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:50:24.896 [DEBUG] [Thread-116985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:50:24.896 [DEBUG] [Thread-116985] [transport.py] [_log()] Compression: none
2025-12-03T12:50:24.896 [DEBUG] [Thread-116985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:50:24.952 [DEBUG] [Thread-116985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:50:24.953 [DEBUG] [Thread-116985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:50:24.953 [DEBUG] [Thread-116985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:50:24.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:50:24.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:50:25.009 [DEBUG] [Thread-116985] [transport.py] [_log()] userauth is OK
2025-12-03T12:50:25.009 [DEBUG] [Thread-116985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:50:25.010 [DEBUG] [Thread-116985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:50:25.010 [DEBUG] [Thread-116985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:50:25.010 [DEBUG] [Thread-116985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:50:25.033 [INFO] [Thread-116985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:50:25.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:50:25.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:50:25.876 [DEBUG] [Thread-116985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:50:25.876 [DEBUG] [Thread-116985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:50:25.924 [DEBUG] [Thread-116985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:50:25.924 [DEBUG] [Thread-116985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:50:25.933 [DEBUG] [Thread-116985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:50:25.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:50:25.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:50:25.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:50:25.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:50:25.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:50:25.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:50:25.967 [DEBUG] [Thread-116985] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:50:35.258 [DEBUG] [Thread-116987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:46.448 [DEBUG] [Thread-116988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:50.303 [DEBUG] [Thread-116989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:50:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:50:55.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:50:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:50:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 50, 35), 19.09, 27.8, 0.0, 11.24, 19.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:50:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:50:35
2025-12-03T12:50:56.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:50:56.963 [DEBUG] [Thread-116990] [transport.py] [_log()] starting thread (client mode): 0xa27c91b0
2025-12-03T12:50:56.963 [DEBUG] [Thread-116990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:50:56.984 [DEBUG] [Thread-116990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:50:56.984 [INFO] [Thread-116990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:56.987 [DEBUG] [Thread-116990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] client lang: <none>
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] server lang: <none>
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] kex follows: False
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] Compression: none
2025-12-03T12:50:56.988 [DEBUG] [Thread-116990] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:50:57.004 [DEBUG] [Thread-116990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:50:57.004 [DEBUG] [Thread-116990] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:50:57.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:50:57.004 [DEBUG] [Thread-116990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:50:57.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:50:57.005 [DEBUG] [Thread-116990] [transport.py] [_log()] userauth is OK
2025-12-03T12:50:57.005 [DEBUG] [Thread-116990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:50:57.005 [DEBUG] [Thread-116990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:50:57.005 [DEBUG] [Thread-116990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:50:57.005 [DEBUG] [Thread-116990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:50:57.014 [INFO] [Thread-116990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:50:57.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:50:57.776 [DEBUG] [Thread-116990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:50:57.776 [DEBUG] [Thread-116990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:50:57.776 [DEBUG] [Thread-116990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:50:57.817 [DEBUG] [Thread-116990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:50:57.818 [DEBUG] [Thread-116990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:50:57.820 [DEBUG] [Thread-116990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:50:57.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:50:57.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:50:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:50:57.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:50:57.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:50:57.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:50:57.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:50:57.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:50:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:50:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.451438 -999.00  +19.40   7.80     33   +2.80 1 1 1 1 1   888    0 19.63 88.77 ----- 8.2 7.8 127.0 16.5 27.8 -27.0 27.5 -24.0 27.6 -22.6 28.3 -23.5
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.451438
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:50:57.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:50:35', tmtdew=19.09, humidity=27.8, cloud=0.0, wind=11.24, temperature=19.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:50:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:50:57.840 [DEBUG] [Thread-116990] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:50:57.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:50:57.927 [DEBUG] [Thread-116993] [transport.py] [_log()] starting thread (client mode): 0xa27c8760
2025-12-03T12:50:57.927 [DEBUG] [Thread-116993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:50:57.946 [DEBUG] [Thread-116993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:50:57.946 [INFO] [Thread-116993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] client lang: <none>
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] server lang: <none>
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] kex follows: False
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:50:57.955 [DEBUG] [Thread-116993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:50:57.956 [DEBUG] [Thread-116993] [transport.py] [_log()] Compression: none
2025-12-03T12:50:57.956 [DEBUG] [Thread-116993] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:50:58.011 [DEBUG] [Thread-116993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:50:58.011 [DEBUG] [Thread-116993] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:50:58.011 [DEBUG] [Thread-116993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:50:58.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:50:58.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:50:58.068 [DEBUG] [Thread-116993] [transport.py] [_log()] userauth is OK
2025-12-03T12:50:58.068 [DEBUG] [Thread-116993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:50:58.068 [DEBUG] [Thread-116993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:50:58.069 [DEBUG] [Thread-116993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:50:58.069 [DEBUG] [Thread-116993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:50:58.083 [INFO] [Thread-116993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:50:58.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:50:58.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:50:58.944 [DEBUG] [Thread-116993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:50:58.944 [DEBUG] [Thread-116993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:50:58.993 [DEBUG] [Thread-116993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:50:58.993 [DEBUG] [Thread-116993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:50:59.003 [DEBUG] [Thread-116993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:50:59.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:50:59.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:50:59.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:50:59.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:50:59.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:50:59.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:50:59.037 [DEBUG] [Thread-116993] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:51:05.332 [DEBUG] [Thread-116995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:06.308 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:06.309 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:20.376 [DEBUG] [Thread-116996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:29.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:51:29.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:51:29.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:51:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 51, 7), 19.01, 27.9, 0.0, 9.07, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:51:29.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:51:07
2025-12-03T12:51:29.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:51:30.008 [DEBUG] [Thread-116997] [transport.py] [_log()] starting thread (client mode): 0xa27b6470
2025-12-03T12:51:30.008 [DEBUG] [Thread-116997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:51:30.028 [DEBUG] [Thread-116997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:51:30.028 [INFO] [Thread-116997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:51:30.031 [DEBUG] [Thread-116997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:51:30.031 [DEBUG] [Thread-116997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] client lang: <none>
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] server lang: <none>
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] kex follows: False
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:51:30.032 [DEBUG] [Thread-116997] [transport.py] [_log()] Compression: none
2025-12-03T12:51:30.033 [DEBUG] [Thread-116997] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:51:30.049 [DEBUG] [Thread-116997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:51:30.050 [DEBUG] [Thread-116997] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:51:30.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:51:30.051 [DEBUG] [Thread-116997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:51:30.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:51:30.053 [DEBUG] [Thread-116997] [transport.py] [_log()] userauth is OK
2025-12-03T12:51:30.053 [DEBUG] [Thread-116997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:51:30.053 [DEBUG] [Thread-116997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:51:30.053 [DEBUG] [Thread-116997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:51:30.053 [DEBUG] [Thread-116997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:51:30.077 [INFO] [Thread-116997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:51:30.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:51:30.737 [DEBUG] [Thread-116997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:51:30.737 [DEBUG] [Thread-116997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:51:30.738 [DEBUG] [Thread-116997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:51:30.778 [DEBUG] [Thread-116997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:51:30.778 [DEBUG] [Thread-116997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:51:30.781 [DEBUG] [Thread-116997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:51:30.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:51:30.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:51:30.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:51:30.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:51:30.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:51:30.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:51:30.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:51:30.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:51:30.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:51:30.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.452133 -999.00  +19.90   3.54     32   +3.10 1 2 1 1 1   888    0 19.10 67.04 ----- 7.7 3.5 232.7 11.2 27.9 -25.0 27.4 -23.8 27.9 -22.0 28.4 -24.2
2025-12-03T12:51:30.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:51:30.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:51:30.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.452133
2025-12-03T12:51:30.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:51:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:51:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:51:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:51:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:51:30.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:51:07', tmtdew=19.01, humidity=27.9, cloud=0.0, wind=9.07, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:51:04.291', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:51:30.805 [DEBUG] [Thread-116997] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:51:30.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:51:30.900 [DEBUG] [Thread-117000] [transport.py] [_log()] starting thread (client mode): 0xa27b5b70
2025-12-03T12:51:30.900 [DEBUG] [Thread-117000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:51:30.916 [DEBUG] [Thread-117000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:51:30.916 [INFO] [Thread-117000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:51:30.924 [DEBUG] [Thread-117000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:51:30.924 [DEBUG] [Thread-117000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:51:30.924 [DEBUG] [Thread-117000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:51:30.924 [DEBUG] [Thread-117000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:51:30.924 [DEBUG] [Thread-117000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] client lang: <none>
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] server lang: <none>
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] kex follows: False
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:51:30.925 [DEBUG] [Thread-117000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:51:30.926 [DEBUG] [Thread-117000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:51:30.926 [DEBUG] [Thread-117000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:51:30.926 [DEBUG] [Thread-117000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:51:30.926 [DEBUG] [Thread-117000] [transport.py] [_log()] Compression: none
2025-12-03T12:51:30.926 [DEBUG] [Thread-117000] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:51:30.984 [DEBUG] [Thread-117000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:51:30.985 [DEBUG] [Thread-117000] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:51:30.985 [DEBUG] [Thread-117000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:51:30.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:51:30.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:51:31.040 [DEBUG] [Thread-117000] [transport.py] [_log()] userauth is OK
2025-12-03T12:51:31.041 [DEBUG] [Thread-117000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:51:31.041 [DEBUG] [Thread-117000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:51:31.041 [DEBUG] [Thread-117000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:51:31.041 [DEBUG] [Thread-117000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:51:31.060 [INFO] [Thread-117000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:51:31.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:51:31.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:51:31.962 [DEBUG] [Thread-117000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:51:31.962 [DEBUG] [Thread-117000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:51:32.010 [DEBUG] [Thread-117000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:51:32.010 [DEBUG] [Thread-117000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:51:32.019 [DEBUG] [Thread-117000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:51:32.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:51:32.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:51:32.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:51:32.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:51:32.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:51:32.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:51:32.054 [DEBUG] [Thread-117000] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:51:35.403 [DEBUG] [Thread-117002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:46.492 [DEBUG] [Thread-117003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:51:50.438 [DEBUG] [Thread-117004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:02.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:52:02.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:52:02.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:52:02.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 51, 39), 18.62, 28.76, 0.0, 8.1, 18.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:52:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:51:39
2025-12-03T12:52:02.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:52:03.016 [DEBUG] [Thread-117005] [transport.py] [_log()] starting thread (client mode): 0xa27b5540
2025-12-03T12:52:03.016 [DEBUG] [Thread-117005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:52:03.036 [DEBUG] [Thread-117005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:52:03.036 [INFO] [Thread-117005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] client lang: <none>
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] server lang: <none>
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] kex follows: False
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:52:03.039 [DEBUG] [Thread-117005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:52:03.040 [DEBUG] [Thread-117005] [transport.py] [_log()] Compression: none
2025-12-03T12:52:03.040 [DEBUG] [Thread-117005] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:52:03.055 [DEBUG] [Thread-117005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:52:03.056 [DEBUG] [Thread-117005] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:52:03.056 [DEBUG] [Thread-117005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:52:03.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:52:03.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:52:03.058 [DEBUG] [Thread-117005] [transport.py] [_log()] userauth is OK
2025-12-03T12:52:03.058 [DEBUG] [Thread-117005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:52:03.058 [DEBUG] [Thread-117005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:52:03.058 [DEBUG] [Thread-117005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:52:03.058 [DEBUG] [Thread-117005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:52:03.081 [INFO] [Thread-117005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:52:03.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:52:03.874 [DEBUG] [Thread-117005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:52:03.874 [DEBUG] [Thread-117005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:52:03.874 [DEBUG] [Thread-117005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:52:03.915 [DEBUG] [Thread-117005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:52:03.915 [DEBUG] [Thread-117005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:52:03.918 [DEBUG] [Thread-117005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:52:03.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:52:03.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:52:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:52:03.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:52:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:52:03.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:52:03.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:52:03.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:52:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:52:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.452480 -999.00  +20.00   4.02     32   +3.10 1 2 1 1 1   888    0 18.65 65.32 ----- 4.3 4.0 286.0 8.8 28.1 -23.4 27.7 -22.4 27.9 -21.9 -999.0 -999.0
2025-12-03T12:52:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:52:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:52:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.452480
2025-12-03T12:52:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:52:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:52:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:52:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:52:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:52:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:51:39', tmtdew=18.62, humidity=28.76, cloud=0.0, wind=8.1, temperature=18.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:51:34.272', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:52:03.943 [DEBUG] [Thread-117005] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:52:04.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:52:04.038 [DEBUG] [Thread-117008] [transport.py] [_log()] starting thread (client mode): 0xa2709720
2025-12-03T12:52:04.038 [DEBUG] [Thread-117008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:52:04.053 [DEBUG] [Thread-117008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:52:04.053 [INFO] [Thread-117008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] client lang: <none>
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] server lang: <none>
2025-12-03T12:52:04.061 [DEBUG] [Thread-117008] [transport.py] [_log()] kex follows: False
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] Compression: none
2025-12-03T12:52:04.062 [DEBUG] [Thread-117008] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:52:04.123 [DEBUG] [Thread-117008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:52:04.124 [DEBUG] [Thread-117008] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:52:04.124 [DEBUG] [Thread-117008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:52:04.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:52:04.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:52:04.179 [DEBUG] [Thread-117008] [transport.py] [_log()] userauth is OK
2025-12-03T12:52:04.180 [DEBUG] [Thread-117008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:52:04.180 [DEBUG] [Thread-117008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:52:04.180 [DEBUG] [Thread-117008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:52:04.180 [DEBUG] [Thread-117008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:52:04.198 [INFO] [Thread-117008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:52:04.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:52:04.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:52:05.046 [DEBUG] [Thread-117008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:52:05.046 [DEBUG] [Thread-117008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:52:05.094 [DEBUG] [Thread-117008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:52:05.094 [DEBUG] [Thread-117008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:52:05.103 [DEBUG] [Thread-117008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:52:05.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:52:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:52:05.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:52:05.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:52:05.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:52:05.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:52:05.137 [DEBUG] [Thread-117008] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:52:05.468 [DEBUG] [Thread-117010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:06.456 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:06.457 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:20.520 [DEBUG] [Thread-117011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:35.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:52:35.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:52:35.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:52:35.551 [DEBUG] [Thread-117012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 52, 11), 18.62, 28.76, 0.0, 6.23, 18.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:52:35.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:52:11
2025-12-03T12:52:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:52:36.095 [DEBUG] [Thread-117013] [transport.py] [_log()] starting thread (client mode): 0xa2787040
2025-12-03T12:52:36.095 [DEBUG] [Thread-117013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:52:36.115 [DEBUG] [Thread-117013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:52:36.115 [INFO] [Thread-117013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] client lang: <none>
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] server lang: <none>
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] kex follows: False
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] Compression: none
2025-12-03T12:52:36.117 [DEBUG] [Thread-117013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:52:36.129 [DEBUG] [Thread-117013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:52:36.130 [DEBUG] [Thread-117013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:52:36.130 [DEBUG] [Thread-117013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:52:36.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:52:36.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:52:36.132 [DEBUG] [Thread-117013] [transport.py] [_log()] userauth is OK
2025-12-03T12:52:36.132 [DEBUG] [Thread-117013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:52:36.132 [DEBUG] [Thread-117013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:52:36.132 [DEBUG] [Thread-117013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:52:36.132 [DEBUG] [Thread-117013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:52:36.150 [INFO] [Thread-117013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:52:36.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:52:36.762 [DEBUG] [Thread-117013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:52:36.762 [DEBUG] [Thread-117013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:52:36.763 [DEBUG] [Thread-117013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:52:36.804 [DEBUG] [Thread-117013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:52:36.804 [DEBUG] [Thread-117013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:52:36.807 [DEBUG] [Thread-117013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:52:36.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:52:36.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:52:36.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:52:36.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:52:36.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:52:36.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:52:36.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:52:36.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:52:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:52:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.452828 -999.00  +20.30   5.36     32   +3.20 1 2 1 1 1   888    0 19.10 60.81 ----- 3.7 5.4 247.8 6.6 28.2 -23.9 27.7 -24.2 28.0 -21.8 28.6 -24.1
2025-12-03T12:52:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:52:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:52:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.452828
2025-12-03T12:52:36.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T12:52:36.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:52:11', tmtdew=18.62, humidity=28.76, cloud=0.0, wind=6.23, temperature=18.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:52:04.339', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:52:36.832 [DEBUG] [Thread-117013] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:52:36.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:52:36.930 [DEBUG] [Thread-117016] [transport.py] [_log()] starting thread (client mode): 0xa51ce050
2025-12-03T12:52:36.930 [DEBUG] [Thread-117016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:52:36.948 [DEBUG] [Thread-117016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:52:36.949 [INFO] [Thread-117016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:52:36.956 [DEBUG] [Thread-117016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] client lang: <none>
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] server lang: <none>
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] kex follows: False
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] Compression: none
2025-12-03T12:52:36.957 [DEBUG] [Thread-117016] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:52:37.016 [DEBUG] [Thread-117016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:52:37.016 [DEBUG] [Thread-117016] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:52:37.017 [DEBUG] [Thread-117016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:52:37.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:52:37.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:52:37.071 [DEBUG] [Thread-117016] [transport.py] [_log()] userauth is OK
2025-12-03T12:52:37.071 [DEBUG] [Thread-117016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:52:37.072 [DEBUG] [Thread-117016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:52:37.072 [DEBUG] [Thread-117016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:52:37.072 [DEBUG] [Thread-117016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:52:37.090 [INFO] [Thread-117016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:52:37.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:52:37.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:52:37.907 [DEBUG] [Thread-117016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:52:37.908 [DEBUG] [Thread-117016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:52:37.956 [DEBUG] [Thread-117016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:52:37.956 [DEBUG] [Thread-117016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:52:37.965 [DEBUG] [Thread-117016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:52:37.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:52:37.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:52:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:52:37.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:52:37.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:52:37.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:52:38.000 [DEBUG] [Thread-117016] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:52:46.530 [DEBUG] [Thread-117018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:52:50.576 [DEBUG] [Thread-117019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:05.610 [DEBUG] [Thread-117020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:06.596 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:06.597 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:08.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:53:08.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:53:08.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:53:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 52, 43), 18.84, 28.13, 0.0, 8.49, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:53:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:52:43
2025-12-03T12:53:08.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:53:08.941 [DEBUG] [Thread-117021] [transport.py] [_log()] starting thread (client mode): 0xa27843d0
2025-12-03T12:53:08.941 [DEBUG] [Thread-117021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:53:08.962 [DEBUG] [Thread-117021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:53:08.962 [INFO] [Thread-117021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:53:08.965 [DEBUG] [Thread-117021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] client lang: <none>
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] server lang: <none>
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] kex follows: False
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:53:08.966 [DEBUG] [Thread-117021] [transport.py] [_log()] Compression: none
2025-12-03T12:53:08.967 [DEBUG] [Thread-117021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:53:08.983 [DEBUG] [Thread-117021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:53:08.983 [DEBUG] [Thread-117021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:53:08.984 [DEBUG] [Thread-117021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:53:08.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:53:08.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:53:08.986 [DEBUG] [Thread-117021] [transport.py] [_log()] userauth is OK
2025-12-03T12:53:08.986 [DEBUG] [Thread-117021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:53:08.986 [DEBUG] [Thread-117021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:53:08.986 [DEBUG] [Thread-117021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:53:08.986 [DEBUG] [Thread-117021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:53:09.003 [INFO] [Thread-117021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:53:09.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:53:09.786 [DEBUG] [Thread-117021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:53:09.786 [DEBUG] [Thread-117021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:53:09.787 [DEBUG] [Thread-117021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:53:09.828 [DEBUG] [Thread-117021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:53:09.828 [DEBUG] [Thread-117021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:53:09.831 [DEBUG] [Thread-117021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:53:09.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:53:09.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:53:09.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:53:09.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:53:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:53:09.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:53:09.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:53:09.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:53:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:53:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.453175 -999.00  +20.60   5.57     31   +3.10 1 1 1 1 1   888    0 19.29 65.58 ----- 10.6 5.6 161.3 12.5 28.2 -25.3 27.6 -23.3 27.9 -23.9 28.6 -24.4
2025-12-03T12:53:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:53:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:53:09.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.453175
2025-12-03T12:53:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:53:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:53:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:53:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:53:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:53:09.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:52:43', tmtdew=18.84, humidity=28.13, cloud=0.0, wind=8.49, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:52:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:53:09.857 [DEBUG] [Thread-117021] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:53:09.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:53:09.955 [DEBUG] [Thread-117024] [transport.py] [_log()] starting thread (client mode): 0xa51ced40
2025-12-03T12:53:09.955 [DEBUG] [Thread-117024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:53:09.974 [DEBUG] [Thread-117024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:53:09.974 [INFO] [Thread-117024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:53:09.985 [DEBUG] [Thread-117024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:53:09.985 [DEBUG] [Thread-117024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:53:09.985 [DEBUG] [Thread-117024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:53:09.985 [DEBUG] [Thread-117024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:09.985 [DEBUG] [Thread-117024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] client lang: <none>
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] server lang: <none>
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] kex follows: False
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] Compression: none
2025-12-03T12:53:09.986 [DEBUG] [Thread-117024] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:53:10.044 [DEBUG] [Thread-117024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:53:10.045 [DEBUG] [Thread-117024] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:53:10.045 [DEBUG] [Thread-117024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:53:10.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:53:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:53:10.103 [DEBUG] [Thread-117024] [transport.py] [_log()] userauth is OK
2025-12-03T12:53:10.103 [DEBUG] [Thread-117024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:53:10.103 [DEBUG] [Thread-117024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:53:10.103 [DEBUG] [Thread-117024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:53:10.103 [DEBUG] [Thread-117024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:53:10.125 [INFO] [Thread-117024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:53:10.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:53:10.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:53:10.999 [DEBUG] [Thread-117024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:53:10.999 [DEBUG] [Thread-117024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:53:11.048 [DEBUG] [Thread-117024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:53:11.048 [DEBUG] [Thread-117024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:53:11.058 [DEBUG] [Thread-117024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:53:11.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:53:11.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:53:11.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:53:11.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:53:11.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:53:11.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:53:11.094 [DEBUG] [Thread-117024] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:53:20.642 [DEBUG] [Thread-117026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:35.685 [DEBUG] [Thread-117027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:53:41.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:53:41.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:53:41.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 53, 15), 18.88, 28.05, 0.0, 7.98, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:53:41.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:53:15
2025-12-03T12:53:41.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:53:42.056 [DEBUG] [Thread-117028] [transport.py] [_log()] starting thread (client mode): 0xa270bdc0
2025-12-03T12:53:42.056 [DEBUG] [Thread-117028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:53:42.078 [DEBUG] [Thread-117028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:53:42.079 [INFO] [Thread-117028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:42.082 [DEBUG] [Thread-117028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] client lang: <none>
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] server lang: <none>
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] kex follows: False
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] Compression: none
2025-12-03T12:53:42.083 [DEBUG] [Thread-117028] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:53:42.101 [DEBUG] [Thread-117028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:53:42.102 [DEBUG] [Thread-117028] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:53:42.102 [DEBUG] [Thread-117028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:53:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:53:42.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:53:42.104 [DEBUG] [Thread-117028] [transport.py] [_log()] userauth is OK
2025-12-03T12:53:42.104 [DEBUG] [Thread-117028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:53:42.105 [DEBUG] [Thread-117028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:53:42.105 [DEBUG] [Thread-117028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:53:42.105 [DEBUG] [Thread-117028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:53:42.128 [INFO] [Thread-117028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:53:42.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:53:42.739 [DEBUG] [Thread-117028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:53:42.740 [DEBUG] [Thread-117028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:53:42.740 [DEBUG] [Thread-117028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:53:42.781 [DEBUG] [Thread-117028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:53:42.781 [DEBUG] [Thread-117028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:53:42.784 [DEBUG] [Thread-117028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:53:42.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:53:42.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:53:42.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:53:42.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:53:42.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:53:42.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:53:42.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:53:42.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:53:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:53:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.453522 -999.00  +20.50  10.25     31   +3.00 1 1 1 1 1   888    0 19.16 66.41 ----- 6.7 10.2 197.2 13.6 28.2 -25.6 27.5 -26.1 27.9 -22.5 28.6 -24.3
2025-12-03T12:53:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:53:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:53:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.453522
2025-12-03T12:53:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:53:42.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:53:42.810 [DEBUG] [Thread-117028] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:53:42.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:53:42.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:53:42.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:53:42.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:53:15', tmtdew=18.88, humidity=28.05, cloud=0.0, wind=7.98, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:53:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:53:42.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:53:42.906 [DEBUG] [Thread-117031] [transport.py] [_log()] starting thread (client mode): 0xa27cbbe0
2025-12-03T12:53:42.906 [DEBUG] [Thread-117031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:53:42.925 [DEBUG] [Thread-117031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:53:42.926 [INFO] [Thread-117031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:53:42.933 [DEBUG] [Thread-117031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:53:42.933 [DEBUG] [Thread-117031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:53:42.933 [DEBUG] [Thread-117031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] client lang: <none>
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] server lang: <none>
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] kex follows: False
2025-12-03T12:53:42.934 [DEBUG] [Thread-117031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:53:42.935 [DEBUG] [Thread-117031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:53:42.935 [DEBUG] [Thread-117031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:53:42.935 [DEBUG] [Thread-117031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:53:42.935 [DEBUG] [Thread-117031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:53:42.935 [DEBUG] [Thread-117031] [transport.py] [_log()] Compression: none
2025-12-03T12:53:42.936 [DEBUG] [Thread-117031] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:53:42.991 [DEBUG] [Thread-117031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:53:42.992 [DEBUG] [Thread-117031] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:53:42.993 [DEBUG] [Thread-117031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:53:42.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:53:42.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:53:43.046 [DEBUG] [Thread-117031] [transport.py] [_log()] userauth is OK
2025-12-03T12:53:43.047 [DEBUG] [Thread-117031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:53:43.047 [DEBUG] [Thread-117031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:53:43.047 [DEBUG] [Thread-117031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:53:43.047 [DEBUG] [Thread-117031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:53:43.069 [INFO] [Thread-117031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:53:43.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:53:43.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:53:43.914 [DEBUG] [Thread-117031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:53:43.914 [DEBUG] [Thread-117031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:53:43.962 [DEBUG] [Thread-117031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:53:43.962 [DEBUG] [Thread-117031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:53:43.971 [DEBUG] [Thread-117031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:53:43.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:53:43.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:53:43.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:53:43.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:53:43.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:53:43.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:53:44.005 [DEBUG] [Thread-117031] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:53:46.577 [DEBUG] [Thread-117033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:53:50.714 [DEBUG] [Thread-117034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:05.756 [DEBUG] [Thread-117035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:06.737 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:06.738 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:14.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:54:14.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:54:14.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:54:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 53, 47), 19.0, 28.05, 0.0, 14.31, 19.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:54:14.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:53:47
2025-12-03T12:54:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:54:14.949 [DEBUG] [Thread-117036] [transport.py] [_log()] starting thread (client mode): 0xa51cc760
2025-12-03T12:54:14.950 [DEBUG] [Thread-117036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:54:14.971 [DEBUG] [Thread-117036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:54:14.971 [INFO] [Thread-117036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] client lang: <none>
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] server lang: <none>
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] kex follows: False
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:54:14.974 [DEBUG] [Thread-117036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:54:14.975 [DEBUG] [Thread-117036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:54:14.975 [DEBUG] [Thread-117036] [transport.py] [_log()] Compression: none
2025-12-03T12:54:14.975 [DEBUG] [Thread-117036] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:54:14.990 [DEBUG] [Thread-117036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:54:14.990 [DEBUG] [Thread-117036] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:54:14.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:54:14.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] userauth is OK
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:54:14.991 [DEBUG] [Thread-117036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:54:15.008 [INFO] [Thread-117036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:54:15.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:54:15.649 [DEBUG] [Thread-117036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:54:15.650 [DEBUG] [Thread-117036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:54:15.650 [DEBUG] [Thread-117036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:54:15.691 [DEBUG] [Thread-117036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:54:15.691 [DEBUG] [Thread-117036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:54:15.694 [DEBUG] [Thread-117036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:54:15.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:54:15.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:54:15.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:54:15.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:54:15.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:54:15.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:54:15.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:54:15.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:54:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:54:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.453869 -999.00  +20.50  10.91     31   +3.10 1 1 1 1 1   888    0 18.86 69.69 ----- 9.6 10.9 158.6 18.2 28.3 -24.2 27.7 -23.5 27.9 -22.6 28.6 -24.1
2025-12-03T12:54:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:54:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:54:15.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.453869
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:54:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:53:47', tmtdew=19.0, humidity=28.05, cloud=0.0, wind=14.31, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:53:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:54:15.717 [DEBUG] [Thread-117036] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:54:15.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:54:15.813 [DEBUG] [Thread-117039] [transport.py] [_log()] starting thread (client mode): 0xa51cf8b0
2025-12-03T12:54:15.813 [DEBUG] [Thread-117039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:54:15.829 [DEBUG] [Thread-117039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:54:15.829 [INFO] [Thread-117039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] client lang: <none>
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] server lang: <none>
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] kex follows: False
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:54:15.837 [DEBUG] [Thread-117039] [transport.py] [_log()] Compression: none
2025-12-03T12:54:15.838 [DEBUG] [Thread-117039] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:54:15.894 [DEBUG] [Thread-117039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:54:15.894 [DEBUG] [Thread-117039] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:54:15.895 [DEBUG] [Thread-117039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:54:15.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:54:15.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:54:15.950 [DEBUG] [Thread-117039] [transport.py] [_log()] userauth is OK
2025-12-03T12:54:15.950 [DEBUG] [Thread-117039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:54:15.950 [DEBUG] [Thread-117039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:54:15.950 [DEBUG] [Thread-117039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:54:15.950 [DEBUG] [Thread-117039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:54:15.970 [INFO] [Thread-117039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:54:15.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:54:15.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:54:16.824 [DEBUG] [Thread-117039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:54:16.824 [DEBUG] [Thread-117039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:54:16.872 [DEBUG] [Thread-117039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:54:16.872 [DEBUG] [Thread-117039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:54:16.881 [DEBUG] [Thread-117039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:54:16.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:54:16.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:54:16.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:54:16.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:54:16.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:54:16.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:54:16.915 [DEBUG] [Thread-117039] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:54:20.783 [DEBUG] [Thread-117041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:35.819 [DEBUG] [Thread-117042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:46.624 [DEBUG] [Thread-117043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:54:46.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:54:46.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:54:46.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:54:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 54, 19), 19.21, 27.65, 0.0, 15.12, 19.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:54:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:54:19
2025-12-03T12:54:47.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:54:47.929 [DEBUG] [Thread-117044] [transport.py] [_log()] starting thread (client mode): 0xa51ce710
2025-12-03T12:54:47.930 [DEBUG] [Thread-117044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:54:47.950 [DEBUG] [Thread-117044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:54:47.950 [INFO] [Thread-117044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:54:47.953 [DEBUG] [Thread-117044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] client lang: <none>
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] server lang: <none>
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] kex follows: False
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] Compression: none
2025-12-03T12:54:47.954 [DEBUG] [Thread-117044] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:54:47.970 [DEBUG] [Thread-117044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:54:47.970 [DEBUG] [Thread-117044] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:54:47.970 [DEBUG] [Thread-117044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:54:47.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:54:47.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:54:47.971 [DEBUG] [Thread-117044] [transport.py] [_log()] userauth is OK
2025-12-03T12:54:47.971 [DEBUG] [Thread-117044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:54:47.971 [DEBUG] [Thread-117044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:54:47.971 [DEBUG] [Thread-117044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:54:47.971 [DEBUG] [Thread-117044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:54:47.980 [INFO] [Thread-117044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:54:47.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:54:48.613 [DEBUG] [Thread-117044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:54:48.613 [DEBUG] [Thread-117044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:54:48.613 [DEBUG] [Thread-117044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:54:48.655 [DEBUG] [Thread-117044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:54:48.655 [DEBUG] [Thread-117044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:54:48.657 [DEBUG] [Thread-117044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:54:48.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:54:48.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:54:48.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:54:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:54:48.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:54:48.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:54:48.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:54:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:54:19', tmtdew=19.21, humidity=27.65, cloud=0.0, wind=15.12, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:54:48.677 [DEBUG] [Thread-117044] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:54:48.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:54:48.762 [DEBUG] [Thread-117047] [transport.py] [_log()] starting thread (client mode): 0xa51cd480
2025-12-03T12:54:48.762 [DEBUG] [Thread-117047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:54:48.777 [DEBUG] [Thread-117047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:54:48.777 [INFO] [Thread-117047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] client lang: <none>
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] server lang: <none>
2025-12-03T12:54:48.784 [DEBUG] [Thread-117047] [transport.py] [_log()] kex follows: False
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] Compression: none
2025-12-03T12:54:48.785 [DEBUG] [Thread-117047] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:54:48.841 [DEBUG] [Thread-117047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:54:48.841 [DEBUG] [Thread-117047] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:54:48.841 [DEBUG] [Thread-117047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:54:48.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:54:48.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:54:48.897 [DEBUG] [Thread-117047] [transport.py] [_log()] userauth is OK
2025-12-03T12:54:48.897 [DEBUG] [Thread-117047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:54:48.897 [DEBUG] [Thread-117047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:54:48.897 [DEBUG] [Thread-117047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:54:48.897 [DEBUG] [Thread-117047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:54:48.915 [INFO] [Thread-117047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:54:48.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:54:48.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:54:49.756 [DEBUG] [Thread-117047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:54:49.756 [DEBUG] [Thread-117047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:54:49.806 [DEBUG] [Thread-117047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:54:49.806 [DEBUG] [Thread-117047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:54:49.814 [DEBUG] [Thread-117047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:54:49.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:54:49.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:54:49.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:54:49.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:54:49.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:54:49.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:54:49.846 [DEBUG] [Thread-117047] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:54:50.851 [DEBUG] [Thread-117049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:05.889 [DEBUG] [Thread-117050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:06.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:06.886 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:19.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:55:19.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:55:19.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:55:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 54, 51), 19.1, 27.53, 0.0, 12.9, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:55:20.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:54:51
2025-12-03T12:55:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:55:20.804 [DEBUG] [Thread-117051] [transport.py] [_log()] starting thread (client mode): 0xa27caf20
2025-12-03T12:55:20.804 [DEBUG] [Thread-117051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:55:20.825 [DEBUG] [Thread-117051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:55:20.825 [INFO] [Thread-117051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] client lang: <none>
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] server lang: <none>
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] kex follows: False
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:55:20.829 [DEBUG] [Thread-117051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:55:20.830 [DEBUG] [Thread-117051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:55:20.830 [DEBUG] [Thread-117051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:55:20.830 [DEBUG] [Thread-117051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:55:20.830 [DEBUG] [Thread-117051] [transport.py] [_log()] Compression: none
2025-12-03T12:55:20.830 [DEBUG] [Thread-117051] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:55:20.844 [DEBUG] [Thread-117051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:55:20.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:55:20.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] userauth is OK
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:55:20.845 [DEBUG] [Thread-117051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:55:20.854 [INFO] [Thread-117051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:55:20.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:55:20.915 [DEBUG] [Thread-117053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:21.517 [DEBUG] [Thread-117051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:55:21.518 [DEBUG] [Thread-117051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:55:21.518 [DEBUG] [Thread-117051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:55:21.559 [DEBUG] [Thread-117051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:55:21.559 [DEBUG] [Thread-117051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:55:21.562 [DEBUG] [Thread-117051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:55:21.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:55:21.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:55:21.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:55:21.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:55:21.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:55:21.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:55:21.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:55:21.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:55:21.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:55:21.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:55:21.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:54:51', tmtdew=19.1, humidity=27.53, cloud=0.0, wind=12.9, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:55:21.585 [DEBUG] [Thread-117051] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:55:21.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:55:21.684 [DEBUG] [Thread-117055] [transport.py] [_log()] starting thread (client mode): 0xa27ca530
2025-12-03T12:55:21.684 [DEBUG] [Thread-117055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:55:21.703 [DEBUG] [Thread-117055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:55:21.703 [INFO] [Thread-117055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] client lang: <none>
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] server lang: <none>
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] kex follows: False
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] Compression: none
2025-12-03T12:55:21.711 [DEBUG] [Thread-117055] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:55:21.769 [DEBUG] [Thread-117055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:55:21.769 [DEBUG] [Thread-117055] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:55:21.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:55:21.770 [DEBUG] [Thread-117055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:55:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:55:21.825 [DEBUG] [Thread-117055] [transport.py] [_log()] userauth is OK
2025-12-03T12:55:21.826 [DEBUG] [Thread-117055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:55:21.826 [DEBUG] [Thread-117055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:55:21.826 [DEBUG] [Thread-117055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:55:21.826 [DEBUG] [Thread-117055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:55:21.845 [INFO] [Thread-117055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:55:21.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:55:21.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:55:22.683 [DEBUG] [Thread-117055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:55:22.683 [DEBUG] [Thread-117055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:55:22.731 [DEBUG] [Thread-117055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:55:22.731 [DEBUG] [Thread-117055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:55:22.740 [DEBUG] [Thread-117055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:55:22.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:55:22.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:55:22.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:55:22.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:55:22.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:55:22.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:55:22.775 [DEBUG] [Thread-117055] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:55:35.939 [DEBUG] [Thread-117057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:46.656 [DEBUG] [Thread-117058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:50.987 [DEBUG] [Thread-117059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:55:52.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:55:52.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:55:52.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:55:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 55, 23), 19.25, 27.33, 0.0, 11.03, 19.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:55:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:55:23
2025-12-03T12:55:53.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:55:53.715 [DEBUG] [Thread-117060] [transport.py] [_log()] starting thread (client mode): 0xa27b6470
2025-12-03T12:55:53.715 [DEBUG] [Thread-117060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:55:53.735 [DEBUG] [Thread-117060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:55:53.735 [INFO] [Thread-117060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] client lang: <none>
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] server lang: <none>
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] kex follows: False
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:55:53.738 [DEBUG] [Thread-117060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:55:53.739 [DEBUG] [Thread-117060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:55:53.739 [DEBUG] [Thread-117060] [transport.py] [_log()] Compression: none
2025-12-03T12:55:53.739 [DEBUG] [Thread-117060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:55:53.756 [DEBUG] [Thread-117060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:55:53.757 [DEBUG] [Thread-117060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:55:53.757 [DEBUG] [Thread-117060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:55:53.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:55:53.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:55:53.759 [DEBUG] [Thread-117060] [transport.py] [_log()] userauth is OK
2025-12-03T12:55:53.759 [DEBUG] [Thread-117060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:55:53.759 [DEBUG] [Thread-117060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:55:53.759 [DEBUG] [Thread-117060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:55:53.759 [DEBUG] [Thread-117060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:55:53.772 [INFO] [Thread-117060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:55:53.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:55:54.450 [DEBUG] [Thread-117060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:55:54.451 [DEBUG] [Thread-117060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:55:54.451 [DEBUG] [Thread-117060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:55:54.492 [DEBUG] [Thread-117060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:55:54.492 [DEBUG] [Thread-117060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:55:54.494 [DEBUG] [Thread-117060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:55:54.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:55:54.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:55:54.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:55:54.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:55:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:55:54.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:55:54.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:55:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:55:23', tmtdew=19.25, humidity=27.33, cloud=0.0, wind=11.03, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:55:54.513 [DEBUG] [Thread-117060] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:55:54.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:55:54.596 [DEBUG] [Thread-117063] [transport.py] [_log()] starting thread (client mode): 0xa27a3c40
2025-12-03T12:55:54.596 [DEBUG] [Thread-117063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:55:54.610 [DEBUG] [Thread-117063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:55:54.610 [INFO] [Thread-117063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] client lang: <none>
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] server lang: <none>
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] kex follows: False
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] Compression: none
2025-12-03T12:55:54.618 [DEBUG] [Thread-117063] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:55:54.677 [DEBUG] [Thread-117063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:55:54.677 [DEBUG] [Thread-117063] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:55:54.678 [DEBUG] [Thread-117063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:55:54.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:55:54.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:55:54.733 [DEBUG] [Thread-117063] [transport.py] [_log()] userauth is OK
2025-12-03T12:55:54.733 [DEBUG] [Thread-117063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:55:54.733 [DEBUG] [Thread-117063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:55:54.734 [DEBUG] [Thread-117063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:55:54.734 [DEBUG] [Thread-117063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:55:54.755 [INFO] [Thread-117063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:55:54.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:55:54.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:55:55.559 [DEBUG] [Thread-117063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:55:55.560 [DEBUG] [Thread-117063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:55:55.608 [DEBUG] [Thread-117063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:55:55.608 [DEBUG] [Thread-117063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:55:55.617 [DEBUG] [Thread-117063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:55:55.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:55:55.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:55:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:55:55.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:55:55.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:55:55.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:55:55.651 [DEBUG] [Thread-117063] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:56:06.017 [DEBUG] [Thread-117065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:07.035 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:07.036 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:21.051 [DEBUG] [Thread-117066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:25.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:56:25.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:56:25.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:56:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 55, 55), 19.64, 26.6, 0.0, 13.57, 19.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:56:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:55:55
2025-12-03T12:56:26.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:56:26.611 [DEBUG] [Thread-117067] [transport.py] [_log()] starting thread (client mode): 0xa27cb790
2025-12-03T12:56:26.611 [DEBUG] [Thread-117067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:56:26.631 [DEBUG] [Thread-117067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:56:26.631 [INFO] [Thread-117067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:26.634 [DEBUG] [Thread-117067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] client lang: <none>
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] server lang: <none>
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] kex follows: False
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] Compression: none
2025-12-03T12:56:26.635 [DEBUG] [Thread-117067] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:56:26.653 [DEBUG] [Thread-117067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:56:26.654 [DEBUG] [Thread-117067] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:56:26.654 [DEBUG] [Thread-117067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:56:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:56:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:56:26.656 [DEBUG] [Thread-117067] [transport.py] [_log()] userauth is OK
2025-12-03T12:56:26.656 [DEBUG] [Thread-117067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:56:26.656 [DEBUG] [Thread-117067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:56:26.657 [DEBUG] [Thread-117067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:56:26.657 [DEBUG] [Thread-117067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:56:26.691 [INFO] [Thread-117067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:56:26.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:56:27.303 [DEBUG] [Thread-117067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:56:27.304 [DEBUG] [Thread-117067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:56:27.304 [DEBUG] [Thread-117067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:56:27.345 [DEBUG] [Thread-117067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:56:27.345 [DEBUG] [Thread-117067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:56:27.347 [DEBUG] [Thread-117067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:56:27.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:56:27.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:56:27.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:56:27.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:56:27.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:56:27.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:56:27.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:56:27.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:56:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:56:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:56:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:56:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:56:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:56:27.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:55:55', tmtdew=19.64, humidity=26.6, cloud=0.0, wind=13.57, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:56:27.369 [DEBUG] [Thread-117067] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:56:27.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:56:27.467 [DEBUG] [Thread-117070] [transport.py] [_log()] starting thread (client mode): 0xa51ce110
2025-12-03T12:56:27.467 [DEBUG] [Thread-117070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:56:27.485 [DEBUG] [Thread-117070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:56:27.485 [INFO] [Thread-117070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:56:27.492 [DEBUG] [Thread-117070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] client lang: <none>
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] server lang: <none>
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] kex follows: False
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:56:27.493 [DEBUG] [Thread-117070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:56:27.494 [DEBUG] [Thread-117070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:56:27.495 [DEBUG] [Thread-117070] [transport.py] [_log()] Compression: none
2025-12-03T12:56:27.495 [DEBUG] [Thread-117070] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:56:27.552 [DEBUG] [Thread-117070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:56:27.553 [DEBUG] [Thread-117070] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:56:27.553 [DEBUG] [Thread-117070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:56:27.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:56:27.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:56:27.609 [DEBUG] [Thread-117070] [transport.py] [_log()] userauth is OK
2025-12-03T12:56:27.609 [DEBUG] [Thread-117070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:56:27.609 [DEBUG] [Thread-117070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:56:27.609 [DEBUG] [Thread-117070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:56:27.609 [DEBUG] [Thread-117070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:56:27.628 [INFO] [Thread-117070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:56:27.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:56:27.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:56:28.540 [DEBUG] [Thread-117070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:56:28.540 [DEBUG] [Thread-117070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:56:28.588 [DEBUG] [Thread-117070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:56:28.588 [DEBUG] [Thread-117070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:56:28.596 [DEBUG] [Thread-117070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:56:28.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:56:28.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:56:28.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:56:28.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:56:28.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:56:28.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:56:28.627 [DEBUG] [Thread-117070] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:56:36.082 [DEBUG] [Thread-117072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:46.684 [DEBUG] [Thread-117073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:51.123 [DEBUG] [Thread-117074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:56:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:56:58.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:56:58.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:56:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 56, 27), 19.79, 26.32, 0.0, 19.28, 19.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:56:59.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:56:27
2025-12-03T12:56:59.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:56:59.586 [DEBUG] [Thread-117075] [transport.py] [_log()] starting thread (client mode): 0xa27a3100
2025-12-03T12:56:59.586 [DEBUG] [Thread-117075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:56:59.607 [DEBUG] [Thread-117075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:56:59.607 [INFO] [Thread-117075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:56:59.610 [DEBUG] [Thread-117075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] client lang: <none>
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] server lang: <none>
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] kex follows: False
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] Compression: none
2025-12-03T12:56:59.611 [DEBUG] [Thread-117075] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:56:59.628 [DEBUG] [Thread-117075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:56:59.629 [DEBUG] [Thread-117075] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:56:59.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:56:59.630 [DEBUG] [Thread-117075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:56:59.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:56:59.632 [DEBUG] [Thread-117075] [transport.py] [_log()] userauth is OK
2025-12-03T12:56:59.632 [DEBUG] [Thread-117075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:56:59.633 [DEBUG] [Thread-117075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:56:59.633 [DEBUG] [Thread-117075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:56:59.633 [DEBUG] [Thread-117075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:56:59.656 [INFO] [Thread-117075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:56:59.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:57:00.271 [DEBUG] [Thread-117075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:57:00.271 [DEBUG] [Thread-117075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:57:00.271 [DEBUG] [Thread-117075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:57:00.311 [DEBUG] [Thread-117075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:57:00.311 [DEBUG] [Thread-117075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:57:00.314 [DEBUG] [Thread-117075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:57:00.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:57:00.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:57:00.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:57:00.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:57:00.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:57:00.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:57:00.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:57:00.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:57:00.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:56:27', tmtdew=19.79, humidity=26.32, cloud=0.0, wind=19.28, temperature=19.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:57:00.332 [DEBUG] [Thread-117075] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:57:00.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:57:00.417 [DEBUG] [Thread-117078] [transport.py] [_log()] starting thread (client mode): 0xa27a1ea0
2025-12-03T12:57:00.417 [DEBUG] [Thread-117078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:57:00.431 [DEBUG] [Thread-117078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:57:00.431 [INFO] [Thread-117078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] client lang: <none>
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] server lang: <none>
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] kex follows: False
2025-12-03T12:57:00.439 [DEBUG] [Thread-117078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] Compression: none
2025-12-03T12:57:00.440 [DEBUG] [Thread-117078] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:57:00.495 [DEBUG] [Thread-117078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:57:00.495 [DEBUG] [Thread-117078] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:57:00.495 [DEBUG] [Thread-117078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:57:00.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:57:00.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:57:00.552 [DEBUG] [Thread-117078] [transport.py] [_log()] userauth is OK
2025-12-03T12:57:00.552 [DEBUG] [Thread-117078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:57:00.552 [DEBUG] [Thread-117078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:57:00.552 [DEBUG] [Thread-117078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:57:00.552 [DEBUG] [Thread-117078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:57:00.566 [INFO] [Thread-117078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:57:00.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:57:00.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:57:01.402 [DEBUG] [Thread-117078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:57:01.402 [DEBUG] [Thread-117078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:57:01.450 [DEBUG] [Thread-117078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:57:01.450 [DEBUG] [Thread-117078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:57:01.458 [DEBUG] [Thread-117078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:57:01.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:57:01.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:57:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:57:01.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:57:01.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:57:01.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:57:01.490 [DEBUG] [Thread-117078] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:57:06.151 [DEBUG] [Thread-117080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:07.176 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:07.178 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:21.192 [DEBUG] [Thread-117081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:31.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:57:31.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:57:31.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:57:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 56, 59), 19.8, 26.73, 0.0, 16.14, 19.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:57:32.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:56:59
2025-12-03T12:57:32.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:57:32.533 [DEBUG] [Thread-117082] [transport.py] [_log()] starting thread (client mode): 0xa27a2920
2025-12-03T12:57:32.534 [DEBUG] [Thread-117082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:57:32.553 [DEBUG] [Thread-117082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:57:32.553 [INFO] [Thread-117082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:57:32.556 [DEBUG] [Thread-117082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:57:32.556 [DEBUG] [Thread-117082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:57:32.556 [DEBUG] [Thread-117082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] client lang: <none>
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] server lang: <none>
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] kex follows: False
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] Compression: none
2025-12-03T12:57:32.557 [DEBUG] [Thread-117082] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:57:32.571 [DEBUG] [Thread-117082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:57:32.571 [DEBUG] [Thread-117082] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:57:32.571 [DEBUG] [Thread-117082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:57:32.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:57:32.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:57:32.572 [DEBUG] [Thread-117082] [transport.py] [_log()] userauth is OK
2025-12-03T12:57:32.572 [DEBUG] [Thread-117082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:57:32.572 [DEBUG] [Thread-117082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:57:32.572 [DEBUG] [Thread-117082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:57:32.572 [DEBUG] [Thread-117082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:57:32.587 [INFO] [Thread-117082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:57:32.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:57:33.197 [DEBUG] [Thread-117082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:57:33.197 [DEBUG] [Thread-117082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:57:33.197 [DEBUG] [Thread-117082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:57:33.238 [DEBUG] [Thread-117082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:57:33.238 [DEBUG] [Thread-117082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:57:33.241 [DEBUG] [Thread-117082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:57:33.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:57:33.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:57:33.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:57:33.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:57:33.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:57:33.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:57:33.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:57:33.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:56:59', tmtdew=19.8, humidity=26.73, cloud=0.0, wind=16.14, temperature=19.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:57:33.259 [DEBUG] [Thread-117082] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:57:33.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:57:33.345 [DEBUG] [Thread-117085] [transport.py] [_log()] starting thread (client mode): 0xa2709210
2025-12-03T12:57:33.345 [DEBUG] [Thread-117085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:57:33.360 [DEBUG] [Thread-117085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:57:33.360 [INFO] [Thread-117085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] client lang: <none>
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] server lang: <none>
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] kex follows: False
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] Compression: none
2025-12-03T12:57:33.367 [DEBUG] [Thread-117085] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:57:33.422 [DEBUG] [Thread-117085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:57:33.422 [DEBUG] [Thread-117085] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:57:33.422 [DEBUG] [Thread-117085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:57:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:57:33.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:57:33.479 [DEBUG] [Thread-117085] [transport.py] [_log()] userauth is OK
2025-12-03T12:57:33.479 [DEBUG] [Thread-117085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:57:33.479 [DEBUG] [Thread-117085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:57:33.479 [DEBUG] [Thread-117085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:57:33.479 [DEBUG] [Thread-117085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:57:33.494 [INFO] [Thread-117085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:57:33.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:57:33.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:57:34.337 [DEBUG] [Thread-117085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:57:34.337 [DEBUG] [Thread-117085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:57:34.388 [DEBUG] [Thread-117085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:57:34.389 [DEBUG] [Thread-117085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:57:34.402 [DEBUG] [Thread-117085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:57:34.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:57:34.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:57:34.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:57:34.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:57:34.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:57:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:57:34.441 [DEBUG] [Thread-117085] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:57:36.218 [DEBUG] [Thread-117087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:46.722 [DEBUG] [Thread-117088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:57:51.271 [DEBUG] [Thread-117089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:04.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:58:04.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:58:04.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:58:05.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 57, 31), 19.92, 26.57, 0.0, 11.52, 19.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:58:05.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:57:31
2025-12-03T12:58:05.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:58:05.485 [DEBUG] [Thread-117090] [transport.py] [_log()] starting thread (client mode): 0xa27a0700
2025-12-03T12:58:05.485 [DEBUG] [Thread-117090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:58:05.507 [DEBUG] [Thread-117090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:58:05.507 [INFO] [Thread-117090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] client lang: <none>
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] server lang: <none>
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] kex follows: False
2025-12-03T12:58:05.510 [DEBUG] [Thread-117090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] Compression: none
2025-12-03T12:58:05.511 [DEBUG] [Thread-117090] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:58:05.526 [DEBUG] [Thread-117090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:58:05.526 [DEBUG] [Thread-117090] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:58:05.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:58:05.526 [DEBUG] [Thread-117090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:58:05.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:58:05.527 [DEBUG] [Thread-117090] [transport.py] [_log()] userauth is OK
2025-12-03T12:58:05.527 [DEBUG] [Thread-117090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:58:05.527 [DEBUG] [Thread-117090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:58:05.527 [DEBUG] [Thread-117090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:58:05.527 [DEBUG] [Thread-117090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:58:05.556 [INFO] [Thread-117090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:58:05.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:58:06.219 [DEBUG] [Thread-117090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:58:06.219 [DEBUG] [Thread-117090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:58:06.219 [DEBUG] [Thread-117090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:58:06.260 [DEBUG] [Thread-117090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:58:06.260 [DEBUG] [Thread-117090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:58:06.263 [DEBUG] [Thread-117090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:58:06.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:58:06.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:58:06.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:58:06.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:58:06.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:58:06.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:58:06.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:58:06.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:58:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:58:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:58:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:58:06.287 [DEBUG] [Thread-117090] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:58:06.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:58:06.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:58:06.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:57:31', tmtdew=19.92, humidity=26.57, cloud=0.0, wind=11.52, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:58:06.296 [DEBUG] [Thread-117093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:06.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:58:06.377 [DEBUG] [Thread-117094] [transport.py] [_log()] starting thread (client mode): 0xa27b5210
2025-12-03T12:58:06.377 [DEBUG] [Thread-117094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:58:06.393 [DEBUG] [Thread-117094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:58:06.393 [INFO] [Thread-117094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] client lang: <none>
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] server lang: <none>
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] kex follows: False
2025-12-03T12:58:06.407 [DEBUG] [Thread-117094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] Compression: none
2025-12-03T12:58:06.408 [DEBUG] [Thread-117094] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:58:06.460 [DEBUG] [Thread-117094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:58:06.460 [DEBUG] [Thread-117094] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:58:06.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:58:06.461 [DEBUG] [Thread-117094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:58:06.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:58:06.524 [DEBUG] [Thread-117094] [transport.py] [_log()] userauth is OK
2025-12-03T12:58:06.524 [DEBUG] [Thread-117094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:58:06.524 [DEBUG] [Thread-117094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:58:06.524 [DEBUG] [Thread-117094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:58:06.524 [DEBUG] [Thread-117094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:58:06.545 [INFO] [Thread-117094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:58:06.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:58:06.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:58:07.316 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:07.318 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:07.404 [DEBUG] [Thread-117094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:58:07.404 [DEBUG] [Thread-117094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:58:07.452 [DEBUG] [Thread-117094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:58:07.452 [DEBUG] [Thread-117094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:58:07.461 [DEBUG] [Thread-117094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:58:07.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:58:07.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:58:07.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:58:07.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:58:07.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:58:07.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:58:07.495 [DEBUG] [Thread-117094] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:58:21.327 [DEBUG] [Thread-117096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:36.356 [DEBUG] [Thread-117097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:58:37.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:58:37.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:58:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 58, 3), 20.02, 26.4, 0.0, 13.27, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:58:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:58:03
2025-12-03T12:58:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:58:38.479 [DEBUG] [Thread-117098] [transport.py] [_log()] starting thread (client mode): 0xa2786bf0
2025-12-03T12:58:38.479 [DEBUG] [Thread-117098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:58:38.500 [DEBUG] [Thread-117098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:58:38.500 [INFO] [Thread-117098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] client lang: <none>
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] server lang: <none>
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] kex follows: False
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:58:38.503 [DEBUG] [Thread-117098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:58:38.504 [DEBUG] [Thread-117098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:58:38.504 [DEBUG] [Thread-117098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:58:38.504 [DEBUG] [Thread-117098] [transport.py] [_log()] Compression: none
2025-12-03T12:58:38.504 [DEBUG] [Thread-117098] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:58:38.521 [DEBUG] [Thread-117098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:58:38.522 [DEBUG] [Thread-117098] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:58:38.522 [DEBUG] [Thread-117098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:58:38.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:58:38.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:58:38.524 [DEBUG] [Thread-117098] [transport.py] [_log()] userauth is OK
2025-12-03T12:58:38.524 [DEBUG] [Thread-117098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:58:38.524 [DEBUG] [Thread-117098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:58:38.525 [DEBUG] [Thread-117098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:58:38.525 [DEBUG] [Thread-117098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:58:38.548 [INFO] [Thread-117098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:58:38.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:58:39.177 [DEBUG] [Thread-117098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:58:39.177 [DEBUG] [Thread-117098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:58:39.177 [DEBUG] [Thread-117098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:58:39.219 [DEBUG] [Thread-117098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:58:39.219 [DEBUG] [Thread-117098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:58:39.221 [DEBUG] [Thread-117098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:58:39.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:58:39.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:58:39.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:58:39.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:58:39.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:58:39.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:58:39.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:58:39.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:58:03', tmtdew=20.02, humidity=26.4, cloud=0.0, wind=13.27, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:58:39.240 [DEBUG] [Thread-117098] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:58:39.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:58:39.326 [DEBUG] [Thread-117101] [transport.py] [_log()] starting thread (client mode): 0xa51ce4a0
2025-12-03T12:58:39.326 [DEBUG] [Thread-117101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:58:39.341 [DEBUG] [Thread-117101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:58:39.341 [INFO] [Thread-117101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:58:39.348 [DEBUG] [Thread-117101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:58:39.348 [DEBUG] [Thread-117101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:58:39.348 [DEBUG] [Thread-117101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] client lang: <none>
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] server lang: <none>
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] kex follows: False
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] Compression: none
2025-12-03T12:58:39.349 [DEBUG] [Thread-117101] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:58:39.406 [DEBUG] [Thread-117101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:58:39.406 [DEBUG] [Thread-117101] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:58:39.406 [DEBUG] [Thread-117101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:58:39.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:58:39.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:58:39.463 [DEBUG] [Thread-117101] [transport.py] [_log()] userauth is OK
2025-12-03T12:58:39.463 [DEBUG] [Thread-117101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:58:39.463 [DEBUG] [Thread-117101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:58:39.463 [DEBUG] [Thread-117101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:58:39.463 [DEBUG] [Thread-117101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:58:39.479 [INFO] [Thread-117101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:58:39.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:58:39.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:58:40.306 [DEBUG] [Thread-117101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:58:40.306 [DEBUG] [Thread-117101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:58:40.354 [DEBUG] [Thread-117101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:58:40.354 [DEBUG] [Thread-117101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:58:40.362 [DEBUG] [Thread-117101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:58:40.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:58:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:58:40.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:58:40.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:58:40.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:58:40.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:58:40.395 [DEBUG] [Thread-117101] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:58:46.766 [DEBUG] [Thread-117103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:58:51.383 [DEBUG] [Thread-117104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:06.428 [DEBUG] [Thread-117105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:07.461 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:07.462 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:59:10.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:59:10.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:59:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 59, 7), 20.36, 25.84, 0.0, 20.36, 20.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:59:11.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:59:07
2025-12-03T12:59:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:59:11.369 [DEBUG] [Thread-117106] [transport.py] [_log()] starting thread (client mode): 0xa27a2fb0
2025-12-03T12:59:11.369 [DEBUG] [Thread-117106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:59:11.390 [DEBUG] [Thread-117106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:59:11.390 [INFO] [Thread-117106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] client lang: <none>
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] server lang: <none>
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] kex follows: False
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:59:11.394 [DEBUG] [Thread-117106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:59:11.395 [DEBUG] [Thread-117106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:59:11.395 [DEBUG] [Thread-117106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:59:11.395 [DEBUG] [Thread-117106] [transport.py] [_log()] Compression: none
2025-12-03T12:59:11.395 [DEBUG] [Thread-117106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:59:11.412 [DEBUG] [Thread-117106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:59:11.412 [DEBUG] [Thread-117106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:59:11.413 [DEBUG] [Thread-117106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:59:11.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:59:11.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:59:11.414 [DEBUG] [Thread-117106] [transport.py] [_log()] userauth is OK
2025-12-03T12:59:11.415 [DEBUG] [Thread-117106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:59:11.415 [DEBUG] [Thread-117106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:59:11.415 [DEBUG] [Thread-117106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:59:11.415 [DEBUG] [Thread-117106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:59:11.433 [INFO] [Thread-117106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:59:11.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:59:12.080 [DEBUG] [Thread-117106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:59:12.081 [DEBUG] [Thread-117106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:59:12.081 [DEBUG] [Thread-117106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:59:12.122 [DEBUG] [Thread-117106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:59:12.122 [DEBUG] [Thread-117106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:59:12.124 [DEBUG] [Thread-117106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:59:12.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:59:12.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:59:12.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:59:12.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:59:12.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:59:12.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:59:12.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:59:12.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:59:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:59:12.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:59:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:59:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:59:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:59:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:59:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:59:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:59:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:59:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:59:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:59:07', tmtdew=20.36, humidity=25.84, cloud=0.0, wind=20.36, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:59:12.148 [DEBUG] [Thread-117106] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:59:12.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:59:12.244 [DEBUG] [Thread-117109] [transport.py] [_log()] starting thread (client mode): 0xa27a1480
2025-12-03T12:59:12.244 [DEBUG] [Thread-117109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:59:12.258 [DEBUG] [Thread-117109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T12:59:12.258 [INFO] [Thread-117109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:12.266 [DEBUG] [Thread-117109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] client lang: <none>
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] server lang: <none>
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] kex follows: False
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:59:12.267 [DEBUG] [Thread-117109] [transport.py] [_log()] Compression: none
2025-12-03T12:59:12.268 [DEBUG] [Thread-117109] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:59:12.322 [DEBUG] [Thread-117109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:59:12.323 [DEBUG] [Thread-117109] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:59:12.323 [DEBUG] [Thread-117109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T12:59:12.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T12:59:12.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:59:12.379 [DEBUG] [Thread-117109] [transport.py] [_log()] userauth is OK
2025-12-03T12:59:12.379 [DEBUG] [Thread-117109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:59:12.379 [DEBUG] [Thread-117109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:59:12.380 [DEBUG] [Thread-117109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T12:59:12.380 [DEBUG] [Thread-117109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:59:12.398 [INFO] [Thread-117109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:59:12.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T12:59:12.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:59:13.237 [DEBUG] [Thread-117109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:59:13.237 [DEBUG] [Thread-117109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:59:13.285 [DEBUG] [Thread-117109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:59:13.285 [DEBUG] [Thread-117109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:59:13.294 [DEBUG] [Thread-117109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:59:13.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:59:13.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T12:59:13.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T12:59:13.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:59:13.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:59:13.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:59:13.328 [DEBUG] [Thread-117109] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:59:21.461 [DEBUG] [Thread-117111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:36.500 [DEBUG] [Thread-117112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:43.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T12:59:43.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T12:59:43.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T12:59:44.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 12, 59, 39), 20.3, 25.75, 0.0, 18.53, 20.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T12:59:44.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 12:59:39
2025-12-03T12:59:44.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T12:59:44.284 [DEBUG] [Thread-117113] [transport.py] [_log()] starting thread (client mode): 0xa51cfee0
2025-12-03T12:59:44.284 [DEBUG] [Thread-117113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T12:59:44.304 [DEBUG] [Thread-117113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T12:59:44.304 [INFO] [Thread-117113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] client lang: <none>
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] server lang: <none>
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] kex follows: False
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] Compression: none
2025-12-03T12:59:44.308 [DEBUG] [Thread-117113] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T12:59:44.320 [DEBUG] [Thread-117113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T12:59:44.320 [DEBUG] [Thread-117113] [transport.py] [_log()] Switch to new keys ...
2025-12-03T12:59:44.321 [DEBUG] [Thread-117113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T12:59:44.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T12:59:44.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T12:59:44.323 [DEBUG] [Thread-117113] [transport.py] [_log()] userauth is OK
2025-12-03T12:59:44.323 [DEBUG] [Thread-117113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T12:59:44.323 [DEBUG] [Thread-117113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T12:59:44.323 [DEBUG] [Thread-117113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T12:59:44.323 [DEBUG] [Thread-117113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T12:59:44.347 [INFO] [Thread-117113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T12:59:44.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T12:59:44.997 [DEBUG] [Thread-117113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T12:59:44.997 [DEBUG] [Thread-117113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T12:59:44.998 [DEBUG] [Thread-117113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T12:59:45.039 [DEBUG] [Thread-117113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T12:59:45.039 [DEBUG] [Thread-117113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T12:59:45.042 [DEBUG] [Thread-117113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T12:59:45.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T12:59:45.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T12:59:45.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T12:59:45.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T12:59:45.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T12:59:45.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T12:59:45.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.454216 -999.00  +20.50   7.47     31   +3.10 1 1 1 1 1   888    0 18.68 63.34 ----- 7.1 7.5 177.8 12.7 28.4 -24.3 27.6 -24.6 27.9 -22.7 28.6 -24.8
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T12:59:45.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.454216
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T12:59:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T12:59:39', tmtdew=20.3, humidity=25.75, cloud=0.0, wind=18.53, temperature=20.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T10:54:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T12:59:45.066 [DEBUG] [Thread-117113] [transport.py] [_log()] EOF in transport thread
2025-12-03T12:59:45.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T12:59:46.800 [DEBUG] [Thread-117116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T12:59:51.532 [DEBUG] [Thread-117117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:06.576 [DEBUG] [Thread-117118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:07.603 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:07.604 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:21.606 [DEBUG] [Thread-117119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:36.634 [DEBUG] [Thread-117120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:46.871 [DEBUG] [Thread-117121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:00:51.664 [DEBUG] [Thread-117122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:06.692 [DEBUG] [Thread-117123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:07.742 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:07.743 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:21.719 [DEBUG] [Thread-117124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:36.747 [DEBUG] [Thread-117125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:46.905 [DEBUG] [Thread-117126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:51.781 [DEBUG] [Thread-117127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:01:57.526 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T13:02:06.806 [DEBUG] [Thread-117128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:07.882 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:07.883 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:21.839 [DEBUG] [Thread-117129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:27.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:02:27.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:02:27.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:02:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 2, 19), 19.5, 27.3, 0.0, 13.78, 19.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:02:28.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:02:19
2025-12-03T13:02:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:02:28.498 [DEBUG] [Thread-117130] [transport.py] [_log()] starting thread (client mode): 0xa51cc4c0
2025-12-03T13:02:28.499 [DEBUG] [Thread-117130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:02:28.520 [DEBUG] [Thread-117130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:02:28.520 [INFO] [Thread-117130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:02:28.523 [DEBUG] [Thread-117130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:02:28.523 [DEBUG] [Thread-117130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:02:28.523 [DEBUG] [Thread-117130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] client lang: <none>
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] server lang: <none>
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] kex follows: False
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:02:28.524 [DEBUG] [Thread-117130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:02:28.525 [DEBUG] [Thread-117130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:02:28.525 [DEBUG] [Thread-117130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:02:28.525 [DEBUG] [Thread-117130] [transport.py] [_log()] Compression: none
2025-12-03T13:02:28.525 [DEBUG] [Thread-117130] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:02:28.545 [DEBUG] [Thread-117130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:02:28.545 [DEBUG] [Thread-117130] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:02:28.546 [DEBUG] [Thread-117130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:02:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:02:28.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:02:28.547 [DEBUG] [Thread-117130] [transport.py] [_log()] userauth is OK
2025-12-03T13:02:28.548 [DEBUG] [Thread-117130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:02:28.548 [DEBUG] [Thread-117130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:02:28.548 [DEBUG] [Thread-117130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:02:28.548 [DEBUG] [Thread-117130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:02:28.571 [INFO] [Thread-117130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:02:28.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:02:29.215 [DEBUG] [Thread-117130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:02:29.215 [DEBUG] [Thread-117130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:02:29.215 [DEBUG] [Thread-117130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:02:29.256 [DEBUG] [Thread-117130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:02:29.256 [DEBUG] [Thread-117130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:02:29.259 [DEBUG] [Thread-117130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:02:29.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:02:29.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:02:29.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:02:29.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:02:29.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:02:29.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:02:29.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:02:29.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:02:29.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.459772 -999.00  +20.20  14.42     32   +3.20 1 2 1 1 1   888    0 18.26 36.35 ----- 12.7 14.4 146.2 15.5 28.4 -24.4 27.7 -23.1 28.1 -22.8 29.1 -23.6
2025-12-03T13:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:02:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.459772
2025-12-03T13:02:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:02:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:02:29.286 [DEBUG] [Thread-117130] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:02:29.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T13:02:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:02:19', tmtdew=19.5, humidity=27.3, cloud=0.0, wind=13.78, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:02:04.301', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:02:29.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:02:29.382 [DEBUG] [Thread-117133] [transport.py] [_log()] starting thread (client mode): 0xa27b78e0
2025-12-03T13:02:29.382 [DEBUG] [Thread-117133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:02:29.397 [DEBUG] [Thread-117133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:02:29.397 [INFO] [Thread-117133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:02:29.404 [DEBUG] [Thread-117133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:02:29.404 [DEBUG] [Thread-117133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] client lang: <none>
2025-12-03T13:02:29.405 [DEBUG] [Thread-117133] [transport.py] [_log()] server lang: <none>
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] kex follows: False
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] Compression: none
2025-12-03T13:02:29.406 [DEBUG] [Thread-117133] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:02:29.462 [DEBUG] [Thread-117133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:02:29.462 [DEBUG] [Thread-117133] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:02:29.463 [DEBUG] [Thread-117133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:02:29.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:02:29.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:02:29.517 [DEBUG] [Thread-117133] [transport.py] [_log()] userauth is OK
2025-12-03T13:02:29.517 [DEBUG] [Thread-117133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:02:29.517 [DEBUG] [Thread-117133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:02:29.517 [DEBUG] [Thread-117133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:02:29.517 [DEBUG] [Thread-117133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:02:29.531 [INFO] [Thread-117133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:02:29.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:02:29.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:02:30.400 [DEBUG] [Thread-117133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:02:30.400 [DEBUG] [Thread-117133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:02:30.448 [DEBUG] [Thread-117133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:02:30.449 [DEBUG] [Thread-117133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:02:30.457 [DEBUG] [Thread-117133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:02:30.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:02:30.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:02:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:02:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:02:30.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:02:30.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:02:30.491 [DEBUG] [Thread-117133] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:02:36.866 [DEBUG] [Thread-117135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:46.947 [DEBUG] [Thread-117136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:02:51.906 [DEBUG] [Thread-117137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:03:00.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:03:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:03:01.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 2, 51), 19.38, 27.4, 0.0, 19.62, 19.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:03:01.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:02:51
2025-12-03T13:03:01.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:03:01.448 [DEBUG] [Thread-117138] [transport.py] [_log()] starting thread (client mode): 0xa51cc4f0
2025-12-03T13:03:01.448 [DEBUG] [Thread-117138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:03:01.468 [DEBUG] [Thread-117138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:03:01.468 [INFO] [Thread-117138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] client lang: <none>
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] server lang: <none>
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] kex follows: False
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:03:01.471 [DEBUG] [Thread-117138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:03:01.472 [DEBUG] [Thread-117138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:03:01.472 [DEBUG] [Thread-117138] [transport.py] [_log()] Compression: none
2025-12-03T13:03:01.472 [DEBUG] [Thread-117138] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:03:01.484 [DEBUG] [Thread-117138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:03:01.485 [DEBUG] [Thread-117138] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:03:01.485 [DEBUG] [Thread-117138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:03:01.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:03:01.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:03:01.487 [DEBUG] [Thread-117138] [transport.py] [_log()] userauth is OK
2025-12-03T13:03:01.487 [DEBUG] [Thread-117138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:03:01.487 [DEBUG] [Thread-117138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:03:01.487 [DEBUG] [Thread-117138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:03:01.487 [DEBUG] [Thread-117138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:03:01.503 [INFO] [Thread-117138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:03:01.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:03:02.136 [DEBUG] [Thread-117138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:03:02.136 [DEBUG] [Thread-117138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:03:02.137 [DEBUG] [Thread-117138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:03:02.177 [DEBUG] [Thread-117138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:03:02.177 [DEBUG] [Thread-117138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:03:02.180 [DEBUG] [Thread-117138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:03:02.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:03:02.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:03:02.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:03:02.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:03:02.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:03:02.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:03:02.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.460119 -999.00  +20.50  12.28     31   +3.10 1 1 1 1 1   888    0 18.31 32.30 ----- 19.9 12.3 156.4 24.1 28.5 -24.7 27.7 -23.5 28.2 -22.6 28.9 -24.5
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:03:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.460119
2025-12-03T13:03:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:03:02.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:03:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:03:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:03:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:03:02.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:02:51', tmtdew=19.38, humidity=27.4, cloud=0.0, wind=19.62, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:02:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:03:02.204 [DEBUG] [Thread-117138] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:03:02.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:03:02.299 [DEBUG] [Thread-117141] [transport.py] [_log()] starting thread (client mode): 0xa51cebc0
2025-12-03T13:03:02.299 [DEBUG] [Thread-117141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:03:02.314 [DEBUG] [Thread-117141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:03:02.314 [INFO] [Thread-117141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:02.322 [DEBUG] [Thread-117141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] client lang: <none>
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] server lang: <none>
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] kex follows: False
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] Compression: none
2025-12-03T13:03:02.323 [DEBUG] [Thread-117141] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:03:02.381 [DEBUG] [Thread-117141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:03:02.382 [DEBUG] [Thread-117141] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:03:02.382 [DEBUG] [Thread-117141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:03:02.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:03:02.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:03:02.437 [DEBUG] [Thread-117141] [transport.py] [_log()] userauth is OK
2025-12-03T13:03:02.437 [DEBUG] [Thread-117141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:03:02.437 [DEBUG] [Thread-117141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:03:02.437 [DEBUG] [Thread-117141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:03:02.438 [DEBUG] [Thread-117141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:03:02.457 [INFO] [Thread-117141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:03:02.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:03:02.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:03:03.330 [DEBUG] [Thread-117141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:03:03.330 [DEBUG] [Thread-117141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:03:03.380 [DEBUG] [Thread-117141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:03:03.381 [DEBUG] [Thread-117141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:03:03.390 [DEBUG] [Thread-117141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:03:03.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:03:03.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:03:03.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:03:03.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:03:03.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:03:03.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:03:03.427 [DEBUG] [Thread-117141] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:03:06.941 [DEBUG] [Thread-117143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:08.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:08.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:21.986 [DEBUG] [Thread-117144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:33.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:03:33.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:03:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:03:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 3, 23), 19.43, 27.25, 0.0, 15.62, 19.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:03:34.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:03:23
2025-12-03T13:03:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:03:34.397 [DEBUG] [Thread-117145] [transport.py] [_log()] starting thread (client mode): 0xa51cfb50
2025-12-03T13:03:34.397 [DEBUG] [Thread-117145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:03:34.415 [DEBUG] [Thread-117145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:03:34.415 [INFO] [Thread-117145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] client lang: <none>
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] server lang: <none>
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] kex follows: False
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] Compression: none
2025-12-03T13:03:34.418 [DEBUG] [Thread-117145] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:03:34.435 [DEBUG] [Thread-117145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:03:34.436 [DEBUG] [Thread-117145] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:03:34.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:03:34.437 [DEBUG] [Thread-117145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:03:34.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:03:34.439 [DEBUG] [Thread-117145] [transport.py] [_log()] userauth is OK
2025-12-03T13:03:34.439 [DEBUG] [Thread-117145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:03:34.439 [DEBUG] [Thread-117145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:03:34.439 [DEBUG] [Thread-117145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:03:34.439 [DEBUG] [Thread-117145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:03:34.476 [INFO] [Thread-117145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:03:34.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:03:35.125 [DEBUG] [Thread-117145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:03:35.125 [DEBUG] [Thread-117145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:03:35.126 [DEBUG] [Thread-117145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:03:35.166 [DEBUG] [Thread-117145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:03:35.166 [DEBUG] [Thread-117145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:03:35.169 [DEBUG] [Thread-117145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:03:35.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:03:35.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:03:35.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:03:35.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:03:35.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:03:35.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:03:35.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:03:35.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:03:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:03:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.460466 -999.00  +20.20   8.42     31   +2.80 1 1 1 1 1   888    0 18.02 28.64 ----- 9.9 8.4 145.7 24.2 28.4 -24.6 27.6 -24.1 28.1 -24.2 28.9 -23.7
2025-12-03T13:03:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:03:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:03:35.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.460466
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:03:35.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:03:23', tmtdew=19.43, humidity=27.25, cloud=0.0, wind=15.62, temperature=19.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:03:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:03:35.193 [DEBUG] [Thread-117145] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:03:35.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:03:35.290 [DEBUG] [Thread-117148] [transport.py] [_log()] starting thread (client mode): 0xa27b5750
2025-12-03T13:03:35.290 [DEBUG] [Thread-117148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:03:35.305 [DEBUG] [Thread-117148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:03:35.305 [INFO] [Thread-117148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:03:35.313 [DEBUG] [Thread-117148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] client lang: <none>
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] server lang: <none>
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] kex follows: False
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:03:35.314 [DEBUG] [Thread-117148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:03:35.315 [DEBUG] [Thread-117148] [transport.py] [_log()] Compression: none
2025-12-03T13:03:35.315 [DEBUG] [Thread-117148] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:03:35.373 [DEBUG] [Thread-117148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:03:35.373 [DEBUG] [Thread-117148] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:03:35.374 [DEBUG] [Thread-117148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:03:35.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:03:35.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:03:35.429 [DEBUG] [Thread-117148] [transport.py] [_log()] userauth is OK
2025-12-03T13:03:35.429 [DEBUG] [Thread-117148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:03:35.430 [DEBUG] [Thread-117148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:03:35.430 [DEBUG] [Thread-117148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:03:35.430 [DEBUG] [Thread-117148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:03:35.448 [INFO] [Thread-117148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:03:35.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:03:35.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:03:36.309 [DEBUG] [Thread-117148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:03:36.310 [DEBUG] [Thread-117148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:03:36.357 [DEBUG] [Thread-117148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:03:36.358 [DEBUG] [Thread-117148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:03:36.366 [DEBUG] [Thread-117148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:03:36.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:03:36.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:03:36.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:03:36.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:03:36.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:03:36.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:03:36.400 [DEBUG] [Thread-117148] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:03:37.016 [DEBUG] [Thread-117150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:46.988 [DEBUG] [Thread-117151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:03:52.050 [DEBUG] [Thread-117152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:06.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:04:06.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:04:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:04:07.073 [DEBUG] [Thread-117153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 3, 55), 19.19, 27.45, 0.0, 13.29, 18.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:04:07.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:03:55
2025-12-03T13:04:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:04:07.357 [DEBUG] [Thread-117154] [transport.py] [_log()] starting thread (client mode): 0xa27b4a90
2025-12-03T13:04:07.357 [DEBUG] [Thread-117154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:04:07.378 [DEBUG] [Thread-117154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:04:07.378 [INFO] [Thread-117154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] client lang: <none>
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] server lang: <none>
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] kex follows: False
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] Compression: none
2025-12-03T13:04:07.381 [DEBUG] [Thread-117154] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:04:07.399 [DEBUG] [Thread-117154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:04:07.400 [DEBUG] [Thread-117154] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:04:07.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:04:07.401 [DEBUG] [Thread-117154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:04:07.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:04:07.403 [DEBUG] [Thread-117154] [transport.py] [_log()] userauth is OK
2025-12-03T13:04:07.403 [DEBUG] [Thread-117154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:04:07.403 [DEBUG] [Thread-117154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:04:07.403 [DEBUG] [Thread-117154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:04:07.403 [DEBUG] [Thread-117154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:04:07.426 [INFO] [Thread-117154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:04:07.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:04:08.039 [DEBUG] [Thread-117154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:04:08.039 [DEBUG] [Thread-117154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:04:08.039 [DEBUG] [Thread-117154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:04:08.080 [DEBUG] [Thread-117154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:04:08.080 [DEBUG] [Thread-117154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:04:08.082 [DEBUG] [Thread-117154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:04:08.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:04:08.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:04:08.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:04:08.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:04:08.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:04:08.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:04:08.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:04:08.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.460814 -999.00  +20.30   3.39     31   +2.90 1 1 1 1 1   888    0 18.03 24.35 ----- 5.0 3.4 242.0 10.4 28.5 -24.4 27.7 -22.7 28.1 -23.6 29.0 -22.5
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.460814
2025-12-03T13:04:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:04:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:03:55', tmtdew=19.19, humidity=27.45, cloud=0.0, wind=13.29, temperature=18.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:03:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:04:08.106 [DEBUG] [Thread-117154] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:04:08.163 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:08.164 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:08.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:04:08.201 [DEBUG] [Thread-117157] [transport.py] [_log()] starting thread (client mode): 0xa51cc640
2025-12-03T13:04:08.201 [DEBUG] [Thread-117157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:04:08.216 [DEBUG] [Thread-117157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:04:08.216 [INFO] [Thread-117157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:08.224 [DEBUG] [Thread-117157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] client lang: <none>
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] server lang: <none>
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] kex follows: False
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] Compression: none
2025-12-03T13:04:08.225 [DEBUG] [Thread-117157] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:04:08.284 [DEBUG] [Thread-117157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:04:08.285 [DEBUG] [Thread-117157] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:04:08.285 [DEBUG] [Thread-117157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:04:08.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:04:08.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:04:08.342 [DEBUG] [Thread-117157] [transport.py] [_log()] userauth is OK
2025-12-03T13:04:08.342 [DEBUG] [Thread-117157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:04:08.342 [DEBUG] [Thread-117157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:04:08.342 [DEBUG] [Thread-117157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:04:08.342 [DEBUG] [Thread-117157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:04:08.361 [INFO] [Thread-117157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:04:08.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:04:08.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:04:09.180 [DEBUG] [Thread-117157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:04:09.180 [DEBUG] [Thread-117157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:04:09.227 [DEBUG] [Thread-117157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:04:09.227 [DEBUG] [Thread-117157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:04:09.235 [DEBUG] [Thread-117157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:04:09.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:04:09.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:04:09.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:04:09.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:04:09.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:04:09.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:04:09.267 [DEBUG] [Thread-117157] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:04:22.101 [DEBUG] [Thread-117159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:37.148 [DEBUG] [Thread-117160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:39.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:04:39.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:04:39.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:04:39.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 4, 27), 19.12, 27.63, 0.0, 11.61, 18.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:04:39.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:04:27
2025-12-03T13:04:40.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:04:40.236 [DEBUG] [Thread-117161] [transport.py] [_log()] starting thread (client mode): 0xa519bb80
2025-12-03T13:04:40.236 [DEBUG] [Thread-117161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:04:40.256 [DEBUG] [Thread-117161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:04:40.256 [INFO] [Thread-117161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:04:40.259 [DEBUG] [Thread-117161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:04:40.259 [DEBUG] [Thread-117161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] client lang: <none>
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] server lang: <none>
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] kex follows: False
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] Compression: none
2025-12-03T13:04:40.260 [DEBUG] [Thread-117161] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:04:40.278 [DEBUG] [Thread-117161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:04:40.278 [DEBUG] [Thread-117161] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:04:40.279 [DEBUG] [Thread-117161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:04:40.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:04:40.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:04:40.281 [DEBUG] [Thread-117161] [transport.py] [_log()] userauth is OK
2025-12-03T13:04:40.281 [DEBUG] [Thread-117161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:04:40.281 [DEBUG] [Thread-117161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:04:40.281 [DEBUG] [Thread-117161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:04:40.281 [DEBUG] [Thread-117161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:04:40.301 [INFO] [Thread-117161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:04:40.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:04:40.932 [DEBUG] [Thread-117161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:04:40.932 [DEBUG] [Thread-117161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:04:40.932 [DEBUG] [Thread-117161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:04:40.973 [DEBUG] [Thread-117161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:04:40.973 [DEBUG] [Thread-117161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:04:40.975 [DEBUG] [Thread-117161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:04:40.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:04:40.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:04:40.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:04:40.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:04:40.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:04:40.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:04:40.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:04:40.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:04:40.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:04:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.461161 -999.00  +20.60  13.01     31   +3.00 1 2 1 1 1   888    0 18.03 21.78 ----- 9.9 13.0 117.8 17.2 28.7 -23.2 28.0 -23.9 28.3 -21.8 29.2 -24.8
2025-12-03T13:04:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:04:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:04:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.461161
2025-12-03T13:04:40.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:04:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:04:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:04:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:04:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T13:04:40.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:04:27', tmtdew=19.12, humidity=27.63, cloud=0.0, wind=11.61, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:04:04.310', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:04:40.998 [DEBUG] [Thread-117161] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:04:41.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:04:41.094 [DEBUG] [Thread-117164] [transport.py] [_log()] starting thread (client mode): 0xa519ab30
2025-12-03T13:04:41.094 [DEBUG] [Thread-117164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:04:41.110 [DEBUG] [Thread-117164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:04:41.110 [INFO] [Thread-117164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:04:41.117 [DEBUG] [Thread-117164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:04:41.118 [DEBUG] [Thread-117164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] client lang: <none>
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] server lang: <none>
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] kex follows: False
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] Compression: none
2025-12-03T13:04:41.119 [DEBUG] [Thread-117164] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:04:41.176 [DEBUG] [Thread-117164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:04:41.176 [DEBUG] [Thread-117164] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:04:41.176 [DEBUG] [Thread-117164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:04:41.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:04:41.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:04:41.232 [DEBUG] [Thread-117164] [transport.py] [_log()] userauth is OK
2025-12-03T13:04:41.233 [DEBUG] [Thread-117164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:04:41.233 [DEBUG] [Thread-117164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:04:41.233 [DEBUG] [Thread-117164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:04:41.233 [DEBUG] [Thread-117164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:04:41.251 [INFO] [Thread-117164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:04:41.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:04:41.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:04:42.066 [DEBUG] [Thread-117164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:04:42.067 [DEBUG] [Thread-117164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:04:42.114 [DEBUG] [Thread-117164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:04:42.115 [DEBUG] [Thread-117164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:04:42.123 [DEBUG] [Thread-117164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:04:42.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:04:42.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:04:42.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:04:42.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:04:42.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:04:42.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:04:42.158 [DEBUG] [Thread-117164] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:04:47.030 [DEBUG] [Thread-117166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:04:52.182 [DEBUG] [Thread-117167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:07.229 [DEBUG] [Thread-117168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:08.302 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:08.302 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:05:12.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:05:12.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:05:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 4, 59), 19.29, 27.22, 0.0, 9.79, 19.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:05:12.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:04:59
2025-12-03T13:05:12.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:05:13.145 [DEBUG] [Thread-117169] [transport.py] [_log()] starting thread (client mode): 0xa27a0340
2025-12-03T13:05:13.145 [DEBUG] [Thread-117169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:05:13.165 [DEBUG] [Thread-117169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:05:13.165 [INFO] [Thread-117169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] client lang: <none>
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] server lang: <none>
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] kex follows: False
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] Compression: none
2025-12-03T13:05:13.168 [DEBUG] [Thread-117169] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:05:13.187 [DEBUG] [Thread-117169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:05:13.187 [DEBUG] [Thread-117169] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:05:13.188 [DEBUG] [Thread-117169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:05:13.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:05:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:05:13.189 [DEBUG] [Thread-117169] [transport.py] [_log()] userauth is OK
2025-12-03T13:05:13.189 [DEBUG] [Thread-117169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:05:13.190 [DEBUG] [Thread-117169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:05:13.190 [DEBUG] [Thread-117169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:05:13.190 [DEBUG] [Thread-117169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:05:13.213 [INFO] [Thread-117169] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:05:13.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:05:14.124 [DEBUG] [Thread-117169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:05:14.124 [DEBUG] [Thread-117169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:05:14.124 [DEBUG] [Thread-117169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:05:14.165 [DEBUG] [Thread-117169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:05:14.165 [DEBUG] [Thread-117169] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:05:14.168 [DEBUG] [Thread-117169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:05:14.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:05:14.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:05:14.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:05:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:05:14.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:05:14.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:05:14.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:05:14.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.461508 -999.00  +20.10  16.19     30   +2.30 1 1 1 1 1   888    0 17.62 18.92 ----- 11.8 16.2 127.0 21.1 28.7 -24.8 28.1 -24.8 28.4 -22.3 29.1 -25.0
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.461508
2025-12-03T13:05:14.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:05:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:05:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:05:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:05:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:05:14.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:04:59', tmtdew=19.29, humidity=27.22, cloud=0.0, wind=9.79, temperature=19.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:04:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:05:14.195 [DEBUG] [Thread-117169] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:05:14.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:05:14.291 [DEBUG] [Thread-117172] [transport.py] [_log()] starting thread (client mode): 0xa27c8d00
2025-12-03T13:05:14.291 [DEBUG] [Thread-117172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:05:14.306 [DEBUG] [Thread-117172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:05:14.306 [INFO] [Thread-117172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:14.314 [DEBUG] [Thread-117172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] client lang: <none>
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] server lang: <none>
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] kex follows: False
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:05:14.315 [DEBUG] [Thread-117172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:05:14.316 [DEBUG] [Thread-117172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:05:14.316 [DEBUG] [Thread-117172] [transport.py] [_log()] Compression: none
2025-12-03T13:05:14.316 [DEBUG] [Thread-117172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:05:14.372 [DEBUG] [Thread-117172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:05:14.373 [DEBUG] [Thread-117172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:05:14.373 [DEBUG] [Thread-117172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:05:14.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:05:14.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:05:14.428 [DEBUG] [Thread-117172] [transport.py] [_log()] userauth is OK
2025-12-03T13:05:14.428 [DEBUG] [Thread-117172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:05:14.428 [DEBUG] [Thread-117172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:05:14.429 [DEBUG] [Thread-117172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:05:14.429 [DEBUG] [Thread-117172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:05:14.448 [INFO] [Thread-117172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:05:14.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:05:14.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:05:15.278 [DEBUG] [Thread-117172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:05:15.279 [DEBUG] [Thread-117172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:05:15.327 [DEBUG] [Thread-117172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:05:15.327 [DEBUG] [Thread-117172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:05:15.336 [DEBUG] [Thread-117172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:05:15.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:05:15.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:05:15.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:05:15.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:05:15.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:05:15.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:05:15.371 [DEBUG] [Thread-117172] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:05:22.255 [DEBUG] [Thread-117174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:37.307 [DEBUG] [Thread-117175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:05:45.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:05:45.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:05:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 5, 31), 19.29, 27.23, 0.0, 8.19, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:05:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:05:31
2025-12-03T13:05:46.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:05:46.387 [DEBUG] [Thread-117176] [transport.py] [_log()] starting thread (client mode): 0xa27c8640
2025-12-03T13:05:46.387 [DEBUG] [Thread-117176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:05:46.408 [DEBUG] [Thread-117176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:05:46.408 [INFO] [Thread-117176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] client lang: <none>
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] server lang: <none>
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] kex follows: False
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] Compression: none
2025-12-03T13:05:46.410 [DEBUG] [Thread-117176] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:05:46.428 [DEBUG] [Thread-117176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:05:46.428 [DEBUG] [Thread-117176] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:05:46.428 [DEBUG] [Thread-117176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:05:46.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:05:46.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:05:46.429 [DEBUG] [Thread-117176] [transport.py] [_log()] userauth is OK
2025-12-03T13:05:46.429 [DEBUG] [Thread-117176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:05:46.429 [DEBUG] [Thread-117176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:05:46.429 [DEBUG] [Thread-117176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:05:46.429 [DEBUG] [Thread-117176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:05:46.441 [INFO] [Thread-117176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:05:46.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:05:47.064 [DEBUG] [Thread-117178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:05:47.081 [DEBUG] [Thread-117176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:05:47.081 [DEBUG] [Thread-117176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:05:47.081 [DEBUG] [Thread-117176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:05:47.122 [DEBUG] [Thread-117176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:05:47.122 [DEBUG] [Thread-117176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:05:47.124 [DEBUG] [Thread-117176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:05:47.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:05:47.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:05:47.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:05:47.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:05:47.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:05:47.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:05:47.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.461855 -999.00  +19.80   6.25     31   +2.50 1 1 1 1 1   888    0 17.77 15.73 ----- 5.9 6.2 184.4 9.9 28.7 -24.6 27.9 -29.2 28.3 -24.3 29.2 -25.0
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:05:47.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.461855
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:05:47.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:05:31', tmtdew=19.29, humidity=27.23, cloud=0.0, wind=8.19, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:05:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:05:47.146 [DEBUG] [Thread-117176] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:05:47.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:05:47.235 [DEBUG] [Thread-117180] [transport.py] [_log()] starting thread (client mode): 0xa51cec80
2025-12-03T13:05:47.235 [DEBUG] [Thread-117180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:05:47.250 [DEBUG] [Thread-117180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:05:47.250 [INFO] [Thread-117180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:05:47.257 [DEBUG] [Thread-117180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] client lang: <none>
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] server lang: <none>
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] kex follows: False
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] Compression: none
2025-12-03T13:05:47.258 [DEBUG] [Thread-117180] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:05:47.321 [DEBUG] [Thread-117180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:05:47.321 [DEBUG] [Thread-117180] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:05:47.321 [DEBUG] [Thread-117180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:05:47.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:05:47.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:05:47.380 [DEBUG] [Thread-117180] [transport.py] [_log()] userauth is OK
2025-12-03T13:05:47.380 [DEBUG] [Thread-117180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:05:47.380 [DEBUG] [Thread-117180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:05:47.380 [DEBUG] [Thread-117180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:05:47.380 [DEBUG] [Thread-117180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:05:47.397 [INFO] [Thread-117180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:05:47.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:05:47.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:05:48.279 [DEBUG] [Thread-117180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:05:48.279 [DEBUG] [Thread-117180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:05:48.326 [DEBUG] [Thread-117180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:05:48.327 [DEBUG] [Thread-117180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:05:48.335 [DEBUG] [Thread-117180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:05:48.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:05:48.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:05:48.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:05:48.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:05:48.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:05:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:05:48.367 [DEBUG] [Thread-117180] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:05:52.335 [DEBUG] [Thread-117182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:07.381 [DEBUG] [Thread-117183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:08.441 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:08.443 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:18.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:06:18.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:06:18.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:06:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 6, 3), 19.34, 27.13, 0.0, 6.55, 19.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:06:19.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:06:03
2025-12-03T13:06:19.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:06:19.332 [DEBUG] [Thread-117184] [transport.py] [_log()] starting thread (client mode): 0xa27a01f0
2025-12-03T13:06:19.332 [DEBUG] [Thread-117184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:06:19.352 [DEBUG] [Thread-117184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:06:19.353 [INFO] [Thread-117184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:19.356 [DEBUG] [Thread-117184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] client lang: <none>
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] server lang: <none>
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] kex follows: False
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] Compression: none
2025-12-03T13:06:19.357 [DEBUG] [Thread-117184] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:06:19.376 [DEBUG] [Thread-117184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:06:19.377 [DEBUG] [Thread-117184] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:06:19.377 [DEBUG] [Thread-117184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:06:19.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:06:19.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:06:19.379 [DEBUG] [Thread-117184] [transport.py] [_log()] userauth is OK
2025-12-03T13:06:19.379 [DEBUG] [Thread-117184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:06:19.379 [DEBUG] [Thread-117184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:06:19.379 [DEBUG] [Thread-117184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:06:19.380 [DEBUG] [Thread-117184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:06:19.405 [INFO] [Thread-117184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:06:19.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:06:20.021 [DEBUG] [Thread-117184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:06:20.021 [DEBUG] [Thread-117184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:06:20.021 [DEBUG] [Thread-117184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:06:20.062 [DEBUG] [Thread-117184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:06:20.062 [DEBUG] [Thread-117184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:06:20.065 [DEBUG] [Thread-117184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:06:20.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:06:20.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:06:20.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:06:20.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:06:20.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:06:20.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:06:20.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.462550 -999.00  +20.40   5.72     31   +2.90 1 2 1 1 1   888    0 17.71 6.29 ----- 8.2 5.7 116.0 9.4 29.1 -23.8 28.5 -23.4 28.8 -22.0 29.8 -22.3
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:06:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.462550
2025-12-03T13:06:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:06:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:06:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:06:20.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:06:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T13:06:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:06:03', tmtdew=19.34, humidity=27.13, cloud=0.0, wind=6.55, temperature=19.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:06:04.320', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:06:20.091 [DEBUG] [Thread-117184] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:06:20.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:06:20.186 [DEBUG] [Thread-117187] [transport.py] [_log()] starting thread (client mode): 0xa27b5210
2025-12-03T13:06:20.186 [DEBUG] [Thread-117187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:06:20.201 [DEBUG] [Thread-117187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:06:20.201 [INFO] [Thread-117187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:20.209 [DEBUG] [Thread-117187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] client lang: <none>
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] server lang: <none>
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] kex follows: False
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:06:20.210 [DEBUG] [Thread-117187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:06:20.211 [DEBUG] [Thread-117187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:06:20.211 [DEBUG] [Thread-117187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:06:20.211 [DEBUG] [Thread-117187] [transport.py] [_log()] Compression: none
2025-12-03T13:06:20.211 [DEBUG] [Thread-117187] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:06:20.267 [DEBUG] [Thread-117187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:06:20.268 [DEBUG] [Thread-117187] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:06:20.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:06:20.269 [DEBUG] [Thread-117187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:06:20.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:06:20.328 [DEBUG] [Thread-117187] [transport.py] [_log()] userauth is OK
2025-12-03T13:06:20.328 [DEBUG] [Thread-117187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:06:20.328 [DEBUG] [Thread-117187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:06:20.328 [DEBUG] [Thread-117187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:06:20.328 [DEBUG] [Thread-117187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:06:20.348 [INFO] [Thread-117187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:06:20.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:06:20.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:06:21.186 [DEBUG] [Thread-117187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:06:21.186 [DEBUG] [Thread-117187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:06:21.234 [DEBUG] [Thread-117187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:06:21.234 [DEBUG] [Thread-117187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:06:21.243 [DEBUG] [Thread-117187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:06:21.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:06:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:06:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:06:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:06:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:06:21.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:06:21.276 [DEBUG] [Thread-117187] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:06:22.410 [DEBUG] [Thread-117189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:37.454 [DEBUG] [Thread-117190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:47.095 [DEBUG] [Thread-117191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:06:51.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:06:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 6, 35), 19.47, 26.75, 0.0, 13.41, 19.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:06:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:06:35
2025-12-03T13:06:52.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:06:52.223 [DEBUG] [Thread-117192] [transport.py] [_log()] starting thread (client mode): 0xa27a0310
2025-12-03T13:06:52.223 [DEBUG] [Thread-117192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:06:52.243 [DEBUG] [Thread-117192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:06:52.243 [INFO] [Thread-117192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] client lang: <none>
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] server lang: <none>
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] kex follows: False
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:06:52.246 [DEBUG] [Thread-117192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:06:52.247 [DEBUG] [Thread-117192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:06:52.247 [DEBUG] [Thread-117192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:06:52.247 [DEBUG] [Thread-117192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:06:52.247 [DEBUG] [Thread-117192] [transport.py] [_log()] Compression: none
2025-12-03T13:06:52.247 [DEBUG] [Thread-117192] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:06:52.265 [DEBUG] [Thread-117192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:06:52.265 [DEBUG] [Thread-117192] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:06:52.266 [DEBUG] [Thread-117192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:06:52.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:06:52.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:06:52.308 [DEBUG] [Thread-117192] [transport.py] [_log()] userauth is OK
2025-12-03T13:06:52.309 [DEBUG] [Thread-117192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:06:52.309 [DEBUG] [Thread-117192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:06:52.309 [DEBUG] [Thread-117192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:06:52.309 [DEBUG] [Thread-117192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:06:52.330 [INFO] [Thread-117192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:06:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:06:52.485 [DEBUG] [Thread-117194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:06:52.965 [DEBUG] [Thread-117192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:06:52.965 [DEBUG] [Thread-117192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:06:52.966 [DEBUG] [Thread-117192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:06:53.007 [DEBUG] [Thread-117192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:06:53.007 [DEBUG] [Thread-117192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:06:53.010 [DEBUG] [Thread-117192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:06:53.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:06:53.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:06:53.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:06:53.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:06:53.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:06:53.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:06:53.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:06:53.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:06:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:06:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.462897 -999.00  +20.50  13.08     31   +2.90 1 1 1 1 1   888    0 17.51 3.68 ----- 14.2 13.1 156.4 18.9 29.2 -24.2 28.1 -29.3 28.9 -22.6 29.6 -25.8
2025-12-03T13:06:53.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:06:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:06:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.462897
2025-12-03T13:06:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:06:53.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:06:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:06:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:06:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:06:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:06:35', tmtdew=19.47, humidity=26.75, cloud=0.0, wind=13.41, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:06:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:06:53.034 [DEBUG] [Thread-117192] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:06:53.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:06:53.130 [DEBUG] [Thread-117196] [transport.py] [_log()] starting thread (client mode): 0xa27a05b0
2025-12-03T13:06:53.130 [DEBUG] [Thread-117196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:06:53.144 [DEBUG] [Thread-117196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:06:53.144 [INFO] [Thread-117196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] client lang: <none>
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] server lang: <none>
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] kex follows: False
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:06:53.152 [DEBUG] [Thread-117196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:06:53.153 [DEBUG] [Thread-117196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:06:53.153 [DEBUG] [Thread-117196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:06:53.153 [DEBUG] [Thread-117196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:06:53.153 [DEBUG] [Thread-117196] [transport.py] [_log()] Compression: none
2025-12-03T13:06:53.153 [DEBUG] [Thread-117196] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:06:53.211 [DEBUG] [Thread-117196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:06:53.211 [DEBUG] [Thread-117196] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:06:53.211 [DEBUG] [Thread-117196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:06:53.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:06:53.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:06:53.271 [DEBUG] [Thread-117196] [transport.py] [_log()] userauth is OK
2025-12-03T13:06:53.271 [DEBUG] [Thread-117196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:06:53.271 [DEBUG] [Thread-117196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:06:53.272 [DEBUG] [Thread-117196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:06:53.272 [DEBUG] [Thread-117196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:06:53.291 [INFO] [Thread-117196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:06:53.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:06:53.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:06:54.158 [DEBUG] [Thread-117196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:06:54.159 [DEBUG] [Thread-117196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:06:54.206 [DEBUG] [Thread-117196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:06:54.207 [DEBUG] [Thread-117196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:06:54.215 [DEBUG] [Thread-117196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:06:54.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:06:54.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:06:54.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:06:54.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:06:54.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:06:54.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:06:54.249 [DEBUG] [Thread-117196] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:07:07.517 [DEBUG] [Thread-117198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:08.582 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:08.582 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:22.562 [DEBUG] [Thread-117199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:24.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:07:24.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:07:24.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:07:24.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 7, 7), 19.36, 26.95, 0.0, 13.87, 19.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:07:24.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:07:07
2025-12-03T13:07:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:07:25.217 [DEBUG] [Thread-117200] [transport.py] [_log()] starting thread (client mode): 0xa51cd630
2025-12-03T13:07:25.217 [DEBUG] [Thread-117200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:07:25.237 [DEBUG] [Thread-117200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:07:25.237 [INFO] [Thread-117200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:07:25.240 [DEBUG] [Thread-117200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] client lang: <none>
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] server lang: <none>
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] kex follows: False
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] Compression: none
2025-12-03T13:07:25.241 [DEBUG] [Thread-117200] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:07:25.260 [DEBUG] [Thread-117200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:07:25.261 [DEBUG] [Thread-117200] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:07:25.261 [DEBUG] [Thread-117200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:07:25.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:07:25.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:07:25.263 [DEBUG] [Thread-117200] [transport.py] [_log()] userauth is OK
2025-12-03T13:07:25.263 [DEBUG] [Thread-117200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:07:25.263 [DEBUG] [Thread-117200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:07:25.263 [DEBUG] [Thread-117200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:07:25.263 [DEBUG] [Thread-117200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:07:25.297 [INFO] [Thread-117200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:07:25.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:07:25.949 [DEBUG] [Thread-117200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:07:25.949 [DEBUG] [Thread-117200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:07:25.949 [DEBUG] [Thread-117200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:07:25.990 [DEBUG] [Thread-117200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:07:25.990 [DEBUG] [Thread-117200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:07:25.993 [DEBUG] [Thread-117200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:07:26.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:07:26.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:07:26.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:07:26.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:07:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:07:26.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:07:26.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.463244 -999.00  +20.50  13.32     31   +3.00 1 1 1 1 1   888    0 17.66 3.44 ----- 10.0 13.3 163.2 15.3 29.3 -24.8 28.5 -25.7 29.0 -22.7 29.8 -24.8
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:07:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.463244
2025-12-03T13:07:26.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:07:26.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:07:26.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:07:26.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:07:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:07:26.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:07:07', tmtdew=19.36, humidity=26.95, cloud=0.0, wind=13.87, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:07:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:07:26.018 [DEBUG] [Thread-117200] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:07:26.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:07:26.113 [DEBUG] [Thread-117203] [transport.py] [_log()] starting thread (client mode): 0xa27a0a90
2025-12-03T13:07:26.113 [DEBUG] [Thread-117203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:07:26.128 [DEBUG] [Thread-117203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:07:26.128 [INFO] [Thread-117203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:07:26.138 [DEBUG] [Thread-117203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:07:26.138 [DEBUG] [Thread-117203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:07:26.138 [DEBUG] [Thread-117203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] client lang: <none>
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] server lang: <none>
2025-12-03T13:07:26.139 [DEBUG] [Thread-117203] [transport.py] [_log()] kex follows: False
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] Compression: none
2025-12-03T13:07:26.140 [DEBUG] [Thread-117203] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:07:26.195 [DEBUG] [Thread-117203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:07:26.196 [DEBUG] [Thread-117203] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:07:26.196 [DEBUG] [Thread-117203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:07:26.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:07:26.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:07:26.251 [DEBUG] [Thread-117203] [transport.py] [_log()] userauth is OK
2025-12-03T13:07:26.251 [DEBUG] [Thread-117203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:07:26.251 [DEBUG] [Thread-117203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:07:26.251 [DEBUG] [Thread-117203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:07:26.251 [DEBUG] [Thread-117203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:07:26.270 [INFO] [Thread-117203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:07:26.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:07:26.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:07:27.110 [DEBUG] [Thread-117203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:07:27.110 [DEBUG] [Thread-117203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:07:27.158 [DEBUG] [Thread-117203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:07:27.158 [DEBUG] [Thread-117203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:07:27.166 [DEBUG] [Thread-117203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:07:27.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:07:27.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:07:27.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:07:27.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:07:27.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:07:27.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:07:27.201 [DEBUG] [Thread-117203] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:07:37.594 [DEBUG] [Thread-117205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:47.128 [DEBUG] [Thread-117206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:52.642 [DEBUG] [Thread-117207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:07:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:07:57.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:07:57.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:07:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 7, 39), 19.13, 27.68, 0.0, 9.83, 19.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:07:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:07:39
2025-12-03T13:07:58.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:07:58.155 [DEBUG] [Thread-117208] [transport.py] [_log()] starting thread (client mode): 0xa27b43d0
2025-12-03T13:07:58.155 [DEBUG] [Thread-117208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:07:58.175 [DEBUG] [Thread-117208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:07:58.175 [INFO] [Thread-117208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] client lang: <none>
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] server lang: <none>
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] kex follows: False
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:07:58.177 [DEBUG] [Thread-117208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:07:58.178 [DEBUG] [Thread-117208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:07:58.178 [DEBUG] [Thread-117208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:07:58.178 [DEBUG] [Thread-117208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:07:58.178 [DEBUG] [Thread-117208] [transport.py] [_log()] Compression: none
2025-12-03T13:07:58.178 [DEBUG] [Thread-117208] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:07:58.194 [DEBUG] [Thread-117208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:07:58.195 [DEBUG] [Thread-117208] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:07:58.195 [DEBUG] [Thread-117208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:07:58.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:07:58.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:07:58.197 [DEBUG] [Thread-117208] [transport.py] [_log()] userauth is OK
2025-12-03T13:07:58.197 [DEBUG] [Thread-117208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:07:58.197 [DEBUG] [Thread-117208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:07:58.197 [DEBUG] [Thread-117208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:07:58.197 [DEBUG] [Thread-117208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:07:58.221 [INFO] [Thread-117208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:07:58.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:07:58.836 [DEBUG] [Thread-117208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:07:58.836 [DEBUG] [Thread-117208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:07:58.836 [DEBUG] [Thread-117208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:07:58.877 [DEBUG] [Thread-117208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:07:58.877 [DEBUG] [Thread-117208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:07:58.880 [DEBUG] [Thread-117208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:07:58.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:07:58.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:07:58.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:07:58.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:07:58.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:07:58.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:07:58.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:07:58.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:07:58.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:07:58.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.463591 -999.00  +20.70  11.34     31   +3.30 1 1 1 1 1   888    0 17.65 3.31 ----- 14.8 11.3 148.3 17.4 29.2 -25.1 28.6 -24.9 28.9 -25.0 29.8 -24.7
2025-12-03T13:07:58.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:07:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:07:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.463591
2025-12-03T13:07:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:07:58.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:07:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:07:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:07:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:07:58.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:07:39', tmtdew=19.13, humidity=27.68, cloud=0.0, wind=9.83, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:07:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:07:58.905 [DEBUG] [Thread-117208] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:07:58.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:07:59.001 [DEBUG] [Thread-117211] [transport.py] [_log()] starting thread (client mode): 0xa27b5a50
2025-12-03T13:07:59.002 [DEBUG] [Thread-117211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:07:59.016 [DEBUG] [Thread-117211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:07:59.016 [INFO] [Thread-117211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:07:59.024 [DEBUG] [Thread-117211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] client lang: <none>
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] server lang: <none>
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] kex follows: False
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:07:59.025 [DEBUG] [Thread-117211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:07:59.026 [DEBUG] [Thread-117211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:07:59.026 [DEBUG] [Thread-117211] [transport.py] [_log()] Compression: none
2025-12-03T13:07:59.026 [DEBUG] [Thread-117211] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:07:59.084 [DEBUG] [Thread-117211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:07:59.085 [DEBUG] [Thread-117211] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:07:59.085 [DEBUG] [Thread-117211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:07:59.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:07:59.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:07:59.143 [DEBUG] [Thread-117211] [transport.py] [_log()] userauth is OK
2025-12-03T13:07:59.143 [DEBUG] [Thread-117211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:07:59.143 [DEBUG] [Thread-117211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:07:59.143 [DEBUG] [Thread-117211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:07:59.144 [DEBUG] [Thread-117211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:07:59.162 [INFO] [Thread-117211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:07:59.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:07:59.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:07:59.988 [DEBUG] [Thread-117211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:07:59.988 [DEBUG] [Thread-117211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:08:00.036 [DEBUG] [Thread-117211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:08:00.037 [DEBUG] [Thread-117211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:08:00.045 [DEBUG] [Thread-117211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:08:00.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:08:00.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:08:00.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:08:00.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:08:00.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:08:00.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:08:00.076 [DEBUG] [Thread-117211] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:08:07.672 [DEBUG] [Thread-117213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:08.722 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:08.723 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:22.726 [DEBUG] [Thread-117214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:30.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:08:30.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:08:30.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:08:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 8, 11), 19.23, 27.55, 0.0, 9.51, 19.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:08:30.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:08:11
2025-12-03T13:08:30.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:08:31.055 [DEBUG] [Thread-117215] [transport.py] [_log()] starting thread (client mode): 0xa5161960
2025-12-03T13:08:31.055 [DEBUG] [Thread-117215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:08:31.077 [DEBUG] [Thread-117215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:08:31.077 [INFO] [Thread-117215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] client lang: <none>
2025-12-03T13:08:31.081 [DEBUG] [Thread-117215] [transport.py] [_log()] server lang: <none>
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] kex follows: False
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] Compression: none
2025-12-03T13:08:31.082 [DEBUG] [Thread-117215] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:08:31.102 [DEBUG] [Thread-117215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:08:31.103 [DEBUG] [Thread-117215] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:08:31.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:08:31.104 [DEBUG] [Thread-117215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:08:31.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:08:31.105 [DEBUG] [Thread-117215] [transport.py] [_log()] userauth is OK
2025-12-03T13:08:31.106 [DEBUG] [Thread-117215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:08:31.106 [DEBUG] [Thread-117215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:08:31.106 [DEBUG] [Thread-117215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:08:31.106 [DEBUG] [Thread-117215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:08:31.140 [INFO] [Thread-117215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:08:31.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:08:31.738 [DEBUG] [Thread-117215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:08:31.738 [DEBUG] [Thread-117215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:08:31.738 [DEBUG] [Thread-117215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:08:31.778 [DEBUG] [Thread-117215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:08:31.778 [DEBUG] [Thread-117215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:08:31.781 [DEBUG] [Thread-117215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:08:31.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:08:31.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:08:31.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:08:31.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:08:31.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:08:31.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:08:31.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:08:31.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.463939 -999.00  +20.30  18.44     30   +2.60 1 1 1 1 1   888    0 17.57 3.26 ----- 14.2 18.4 141.8 25.7 29.2 -26.0 28.4 -27.7 29.0 -24.6 29.7 -23.9
2025-12-03T13:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:08:31.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.463939
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:08:31.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:08:11', tmtdew=19.23, humidity=27.55, cloud=0.0, wind=9.51, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:08:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:08:31.807 [DEBUG] [Thread-117215] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:08:31.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:08:31.904 [DEBUG] [Thread-117218] [transport.py] [_log()] starting thread (client mode): 0xa51cf8b0
2025-12-03T13:08:31.904 [DEBUG] [Thread-117218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:08:31.921 [DEBUG] [Thread-117218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:08:31.921 [INFO] [Thread-117218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:08:31.928 [DEBUG] [Thread-117218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:08:31.929 [DEBUG] [Thread-117218] [transport.py] [_log()] client lang: <none>
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] server lang: <none>
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] kex follows: False
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] Compression: none
2025-12-03T13:08:31.930 [DEBUG] [Thread-117218] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:08:31.986 [DEBUG] [Thread-117218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:08:31.987 [DEBUG] [Thread-117218] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:08:31.987 [DEBUG] [Thread-117218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:08:31.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:08:31.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:08:32.043 [DEBUG] [Thread-117218] [transport.py] [_log()] userauth is OK
2025-12-03T13:08:32.043 [DEBUG] [Thread-117218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:08:32.043 [DEBUG] [Thread-117218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:08:32.043 [DEBUG] [Thread-117218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:08:32.043 [DEBUG] [Thread-117218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:08:32.065 [INFO] [Thread-117218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:08:32.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:08:32.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:08:32.991 [DEBUG] [Thread-117218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:08:32.992 [DEBUG] [Thread-117218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:08:33.040 [DEBUG] [Thread-117218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:08:33.040 [DEBUG] [Thread-117218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:08:33.049 [DEBUG] [Thread-117218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:08:33.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:08:33.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:08:33.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:08:33.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:08:33.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:08:33.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:08:33.084 [DEBUG] [Thread-117218] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:08:37.751 [DEBUG] [Thread-117220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:47.183 [DEBUG] [Thread-117221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:08:52.804 [DEBUG] [Thread-117222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:03.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:09:03.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:09:03.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:09:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 8, 44), 19.83, 26.73, 0.0, 14.05, 20.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:09:03.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:08:44
2025-12-03T13:09:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:09:04.104 [DEBUG] [Thread-117223] [transport.py] [_log()] starting thread (client mode): 0xa51cc4f0
2025-12-03T13:09:04.104 [DEBUG] [Thread-117223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:09:04.124 [DEBUG] [Thread-117223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:09:04.125 [INFO] [Thread-117223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] client lang: <none>
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] server lang: <none>
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] kex follows: False
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] Compression: none
2025-12-03T13:09:04.128 [DEBUG] [Thread-117223] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:09:04.143 [DEBUG] [Thread-117223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:09:04.143 [DEBUG] [Thread-117223] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:09:04.143 [DEBUG] [Thread-117223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:09:04.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:09:04.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:09:04.144 [DEBUG] [Thread-117223] [transport.py] [_log()] userauth is OK
2025-12-03T13:09:04.144 [DEBUG] [Thread-117223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:09:04.144 [DEBUG] [Thread-117223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:09:04.144 [DEBUG] [Thread-117223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:09:04.144 [DEBUG] [Thread-117223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:09:04.160 [INFO] [Thread-117223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:09:04.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:09:04.790 [DEBUG] [Thread-117223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:09:04.790 [DEBUG] [Thread-117223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:09:04.790 [DEBUG] [Thread-117223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:09:04.832 [DEBUG] [Thread-117223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:09:04.832 [DEBUG] [Thread-117223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:09:04.834 [DEBUG] [Thread-117223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:09:04.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:09:04.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:09:04.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:09:04.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:09:04.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:09:04.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:09:04.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:09:04.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.464286 -999.00  +20.60  10.47     31   +3.30 1 1 1 1 1   888    0 17.37 0.95 ----- 17.1 10.5 126.2 18.4 29.4 -24.9 28.4 -27.7 29.1 -22.6 29.9 -24.7
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.464286
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:09:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:08:44', tmtdew=19.83, humidity=26.73, cloud=0.0, wind=14.05, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:08:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:09:04.854 [DEBUG] [Thread-117223] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:09:04.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:09:04.938 [DEBUG] [Thread-117226] [transport.py] [_log()] starting thread (client mode): 0xa5199420
2025-12-03T13:09:04.938 [DEBUG] [Thread-117226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:09:04.952 [DEBUG] [Thread-117226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:09:04.952 [INFO] [Thread-117226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] client lang: <none>
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] server lang: <none>
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] kex follows: False
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] Compression: none
2025-12-03T13:09:04.960 [DEBUG] [Thread-117226] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:09:05.015 [DEBUG] [Thread-117226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:09:05.015 [DEBUG] [Thread-117226] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:09:05.015 [DEBUG] [Thread-117226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:09:05.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:09:05.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:09:05.073 [DEBUG] [Thread-117226] [transport.py] [_log()] userauth is OK
2025-12-03T13:09:05.073 [DEBUG] [Thread-117226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:09:05.073 [DEBUG] [Thread-117226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:09:05.073 [DEBUG] [Thread-117226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:09:05.073 [DEBUG] [Thread-117226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:09:05.086 [INFO] [Thread-117226] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:09:05.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:09:05.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:09:05.948 [DEBUG] [Thread-117226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:09:05.949 [DEBUG] [Thread-117226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:09:05.997 [DEBUG] [Thread-117226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:09:05.997 [DEBUG] [Thread-117226] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:09:06.006 [DEBUG] [Thread-117226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:09:06.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:09:06.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:09:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:09:06.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:09:06.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:09:06.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:09:06.041 [DEBUG] [Thread-117226] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:09:07.837 [DEBUG] [Thread-117228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:08.863 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:08.864 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:22.879 [DEBUG] [Thread-117229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:09:36.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:09:36.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:09:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 9, 16), 19.87, 26.63, 0.0, 13.18, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:09:36.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:09:16
2025-12-03T13:09:36.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:09:37.006 [DEBUG] [Thread-117230] [transport.py] [_log()] starting thread (client mode): 0xa5198ee0
2025-12-03T13:09:37.006 [DEBUG] [Thread-117230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:09:37.027 [DEBUG] [Thread-117230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:09:37.027 [INFO] [Thread-117230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] client lang: <none>
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] server lang: <none>
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] kex follows: False
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:09:37.031 [DEBUG] [Thread-117230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:09:37.032 [DEBUG] [Thread-117230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:09:37.032 [DEBUG] [Thread-117230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:09:37.032 [DEBUG] [Thread-117230] [transport.py] [_log()] Compression: none
2025-12-03T13:09:37.032 [DEBUG] [Thread-117230] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:09:37.049 [DEBUG] [Thread-117230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:09:37.049 [DEBUG] [Thread-117230] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:09:37.049 [DEBUG] [Thread-117230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:09:37.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:09:37.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:09:37.051 [DEBUG] [Thread-117230] [transport.py] [_log()] userauth is OK
2025-12-03T13:09:37.052 [DEBUG] [Thread-117230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:09:37.052 [DEBUG] [Thread-117230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:09:37.052 [DEBUG] [Thread-117230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:09:37.052 [DEBUG] [Thread-117230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:09:37.075 [INFO] [Thread-117230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:09:37.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:09:37.711 [DEBUG] [Thread-117230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:09:37.712 [DEBUG] [Thread-117230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:09:37.712 [DEBUG] [Thread-117230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:09:37.753 [DEBUG] [Thread-117230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:09:37.753 [DEBUG] [Thread-117230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:09:37.756 [DEBUG] [Thread-117230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:09:37.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:09:37.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:09:37.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:09:37.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:09:37.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:09:37.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:09:37.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:09:37.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:09:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:09:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.464633 -999.00  +20.70  14.89     30   +2.90 1 1 1 1 1   888    0 17.29 -0.45 ----- 14.1 14.9 131.0 22.0 29.3 -24.7 28.6 -26.0 29.1 -24.4 29.9 -24.5
2025-12-03T13:09:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:09:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:09:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.464633
2025-12-03T13:09:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:09:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:09:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:09:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:09:37.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:09:37.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:09:16', tmtdew=19.87, humidity=26.63, cloud=0.0, wind=13.18, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:09:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:09:37.784 [DEBUG] [Thread-117230] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:09:37.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:09:37.907 [DEBUG] [Thread-117233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:47.222 [DEBUG] [Thread-117234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:09:52.948 [DEBUG] [Thread-117235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:07.983 [DEBUG] [Thread-117236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:09.003 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:09.004 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:23.015 [DEBUG] [Thread-117237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:38.042 [DEBUG] [Thread-117238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:47.256 [DEBUG] [Thread-117239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:10:53.075 [DEBUG] [Thread-117240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:08.099 [DEBUG] [Thread-117241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:09.143 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:09.145 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:23.130 [DEBUG] [Thread-117242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:38.158 [DEBUG] [Thread-117243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:47.295 [DEBUG] [Thread-117244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:11:51.446 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T13:11:53.182 [DEBUG] [Thread-117245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:08.213 [DEBUG] [Thread-117246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:09.299 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:09.300 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:21.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:12:21.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:12:21.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:12:22.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 11, 55), 20.58, 25.47, 0.0, 21.9, 20.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:12:22.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:11:55
2025-12-03T13:12:22.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:12:22.454 [DEBUG] [Thread-117247] [transport.py] [_log()] starting thread (client mode): 0xa51994b0
2025-12-03T13:12:22.455 [DEBUG] [Thread-117247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:12:22.474 [DEBUG] [Thread-117247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:12:22.474 [INFO] [Thread-117247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:12:22.477 [DEBUG] [Thread-117247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] client lang: <none>
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] server lang: <none>
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] kex follows: False
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] Compression: none
2025-12-03T13:12:22.478 [DEBUG] [Thread-117247] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:12:22.495 [DEBUG] [Thread-117247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:12:22.496 [DEBUG] [Thread-117247] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:12:22.496 [DEBUG] [Thread-117247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:12:22.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:12:22.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:12:22.498 [DEBUG] [Thread-117247] [transport.py] [_log()] userauth is OK
2025-12-03T13:12:22.499 [DEBUG] [Thread-117247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:12:22.499 [DEBUG] [Thread-117247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:12:22.499 [DEBUG] [Thread-117247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:12:22.499 [DEBUG] [Thread-117247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:12:22.523 [INFO] [Thread-117247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:12:22.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:12:23.159 [DEBUG] [Thread-117247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:12:23.160 [DEBUG] [Thread-117247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:12:23.160 [DEBUG] [Thread-117247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:12:23.201 [DEBUG] [Thread-117247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:12:23.201 [DEBUG] [Thread-117247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:12:23.204 [DEBUG] [Thread-117247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:12:23.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:12:23.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:12:23.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:12:23.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:12:23.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:12:23.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:12:23.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:12:23.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.466716 -999.00  +20.10  11.78     31   +2.80 1 1 1 1 1   888    0 17.68 10.11 ----- 16.4 11.8 147.5 21.6 28.8 -25.1 28.1 -25.5 28.7 -23.5 29.5 -25.4
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.466716
2025-12-03T13:12:23.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:12:23.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:11:55', tmtdew=20.58, humidity=25.47, cloud=0.0, wind=21.9, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:12:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:12:23.228 [DEBUG] [Thread-117247] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:12:23.239 [DEBUG] [Thread-117250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:23.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:12:23.325 [DEBUG] [Thread-117251] [transport.py] [_log()] starting thread (client mode): 0xa517c1f0
2025-12-03T13:12:23.325 [DEBUG] [Thread-117251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:12:23.339 [DEBUG] [Thread-117251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:12:23.340 [INFO] [Thread-117251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:12:23.347 [DEBUG] [Thread-117251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] client lang: <none>
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] server lang: <none>
2025-12-03T13:12:23.348 [DEBUG] [Thread-117251] [transport.py] [_log()] kex follows: False
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] Compression: none
2025-12-03T13:12:23.349 [DEBUG] [Thread-117251] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:12:23.406 [DEBUG] [Thread-117251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:12:23.407 [DEBUG] [Thread-117251] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:12:23.407 [DEBUG] [Thread-117251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:12:23.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:12:23.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:12:23.462 [DEBUG] [Thread-117251] [transport.py] [_log()] userauth is OK
2025-12-03T13:12:23.462 [DEBUG] [Thread-117251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:12:23.462 [DEBUG] [Thread-117251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:12:23.463 [DEBUG] [Thread-117251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:12:23.463 [DEBUG] [Thread-117251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:12:23.481 [INFO] [Thread-117251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:12:23.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:12:23.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:12:24.696 [DEBUG] [Thread-117251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:12:24.697 [DEBUG] [Thread-117251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:12:24.744 [DEBUG] [Thread-117251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:12:24.745 [DEBUG] [Thread-117251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:12:24.753 [DEBUG] [Thread-117251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:12:24.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:12:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:12:24.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:12:24.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:12:24.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:12:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:12:24.804 [DEBUG] [Thread-117251] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:12:38.276 [DEBUG] [Thread-117253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:47.355 [DEBUG] [Thread-117254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:53.305 [DEBUG] [Thread-117255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:12:54.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:12:54.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:12:54.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:12:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 12, 28), 20.71, 25.27, 0.0, 24.39, 20.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:12:55.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:12:28
2025-12-03T13:12:55.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:12:55.835 [DEBUG] [Thread-117256] [transport.py] [_log()] starting thread (client mode): 0xa517c3a0
2025-12-03T13:12:55.835 [DEBUG] [Thread-117256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:12:55.857 [DEBUG] [Thread-117256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:12:55.857 [INFO] [Thread-117256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:12:55.859 [DEBUG] [Thread-117256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] client lang: <none>
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] server lang: <none>
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] kex follows: False
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] Compression: none
2025-12-03T13:12:55.860 [DEBUG] [Thread-117256] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:12:55.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:12:55.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] userauth is OK
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:12:55.876 [DEBUG] [Thread-117256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:12:55.903 [INFO] [Thread-117256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:12:55.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:12:56.493 [DEBUG] [Thread-117256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:12:56.493 [DEBUG] [Thread-117256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:12:56.493 [DEBUG] [Thread-117256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:12:56.534 [DEBUG] [Thread-117256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:12:56.534 [DEBUG] [Thread-117256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:12:56.537 [DEBUG] [Thread-117256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:12:56.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:12:56.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:12:56.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:12:56.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:12:56.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:12:56.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:12:56.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.467063 -999.00  +20.00  18.92     31   +2.40 1 1 1 1 1   888    0 17.52 11.15 ----- 18.7 18.9 143.8 27.1 28.6 -26.8 28.2 -26.2 28.6 -26.9 29.2 -27.1
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.467063
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:12:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:12:28', tmtdew=20.71, humidity=25.27, cloud=0.0, wind=24.39, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:12:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:12:56.555 [DEBUG] [Thread-117256] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:12:56.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:12:56.641 [DEBUG] [Thread-117259] [transport.py] [_log()] starting thread (client mode): 0xa517da80
2025-12-03T13:12:56.641 [DEBUG] [Thread-117259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:12:56.655 [DEBUG] [Thread-117259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:12:56.656 [INFO] [Thread-117259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] client lang: <none>
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] server lang: <none>
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] kex follows: False
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] Compression: none
2025-12-03T13:12:56.663 [DEBUG] [Thread-117259] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:12:56.718 [DEBUG] [Thread-117259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:12:56.719 [DEBUG] [Thread-117259] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:12:56.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:12:56.719 [DEBUG] [Thread-117259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:12:56.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:12:56.776 [DEBUG] [Thread-117259] [transport.py] [_log()] userauth is OK
2025-12-03T13:12:56.776 [DEBUG] [Thread-117259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:12:56.776 [DEBUG] [Thread-117259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:12:56.776 [DEBUG] [Thread-117259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:12:56.776 [DEBUG] [Thread-117259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:12:56.790 [INFO] [Thread-117259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:12:56.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:12:56.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:12:57.838 [DEBUG] [Thread-117259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:12:57.839 [DEBUG] [Thread-117259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:12:57.886 [DEBUG] [Thread-117259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:12:57.886 [DEBUG] [Thread-117259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:12:57.895 [DEBUG] [Thread-117259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:12:57.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:12:57.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:12:57.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:12:57.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:12:57.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:12:57.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:12:57.927 [DEBUG] [Thread-117259] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:13:08.329 [DEBUG] [Thread-117261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:09.440 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:09.441 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:23.372 [DEBUG] [Thread-117262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:27.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:13:27.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:13:27.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:13:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 13), 20.4, 25.69, 0.0, 19.67, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:13:28.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:13:00
2025-12-03T13:13:28.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:13:28.886 [DEBUG] [Thread-117263] [transport.py] [_log()] starting thread (client mode): 0xa5162710
2025-12-03T13:13:28.886 [DEBUG] [Thread-117263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:13:28.907 [DEBUG] [Thread-117263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:13:28.907 [INFO] [Thread-117263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] client lang: <none>
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] server lang: <none>
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] kex follows: False
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] Compression: none
2025-12-03T13:13:28.911 [DEBUG] [Thread-117263] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:13:28.931 [DEBUG] [Thread-117263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:13:28.931 [DEBUG] [Thread-117263] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:13:28.932 [DEBUG] [Thread-117263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:13:28.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:13:28.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:13:28.934 [DEBUG] [Thread-117263] [transport.py] [_log()] userauth is OK
2025-12-03T13:13:28.934 [DEBUG] [Thread-117263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:13:28.934 [DEBUG] [Thread-117263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:13:28.934 [DEBUG] [Thread-117263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:13:28.934 [DEBUG] [Thread-117263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:13:28.957 [INFO] [Thread-117263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:13:28.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:13:29.622 [DEBUG] [Thread-117263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:13:29.622 [DEBUG] [Thread-117263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:13:29.623 [DEBUG] [Thread-117263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:13:29.663 [DEBUG] [Thread-117263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:13:29.663 [DEBUG] [Thread-117263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:13:29.666 [DEBUG] [Thread-117263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:13:29.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:13:29.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:13:29.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:13:29.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:13:29.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:13:29.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:13:29.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:13:29.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.467411 -999.00  +19.90   7.83     31   +2.70 1 1 1 1 1   888    0 17.51 7.12 ----- 9.5 7.8 165.0 19.5 28.7 -25.4 28.1 -25.6 28.6 -23.8 29.5 -25.4
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.467411
2025-12-03T13:13:29.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:13:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:13:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:13:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:13:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:13:29.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:13:00', tmtdew=20.4, humidity=25.69, cloud=0.0, wind=19.67, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:13:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:13:29.692 [DEBUG] [Thread-117263] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:13:29.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:13:29.789 [DEBUG] [Thread-117266] [transport.py] [_log()] starting thread (client mode): 0xa5162c20
2025-12-03T13:13:29.789 [DEBUG] [Thread-117266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:13:29.803 [DEBUG] [Thread-117266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:13:29.803 [INFO] [Thread-117266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:13:29.810 [DEBUG] [Thread-117266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:13:29.810 [DEBUG] [Thread-117266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] client lang: <none>
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] server lang: <none>
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] kex follows: False
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] Compression: none
2025-12-03T13:13:29.811 [DEBUG] [Thread-117266] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:13:29.868 [DEBUG] [Thread-117266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:13:29.868 [DEBUG] [Thread-117266] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:13:29.868 [DEBUG] [Thread-117266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:13:29.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:13:29.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:13:29.925 [DEBUG] [Thread-117266] [transport.py] [_log()] userauth is OK
2025-12-03T13:13:29.926 [DEBUG] [Thread-117266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:13:29.926 [DEBUG] [Thread-117266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:13:29.926 [DEBUG] [Thread-117266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:13:29.926 [DEBUG] [Thread-117266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:13:29.945 [INFO] [Thread-117266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:13:29.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:13:29.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:13:30.992 [DEBUG] [Thread-117266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:13:30.993 [DEBUG] [Thread-117266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:13:31.041 [DEBUG] [Thread-117266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:13:31.041 [DEBUG] [Thread-117266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:13:31.049 [DEBUG] [Thread-117266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:13:31.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:13:31.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:13:31.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:13:31.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:13:31.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:13:31.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:13:31.080 [DEBUG] [Thread-117266] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:13:38.401 [DEBUG] [Thread-117268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:47.394 [DEBUG] [Thread-117269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:13:53.444 [DEBUG] [Thread-117270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:01.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:14:01.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:14:01.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:14:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 13, 32), 20.02, 26.22, 0.0, 15.65, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:14:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:13:32
2025-12-03T13:14:01.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:14:02.065 [DEBUG] [Thread-117271] [transport.py] [_log()] starting thread (client mode): 0xa517f730
2025-12-03T13:14:02.065 [DEBUG] [Thread-117271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:14:02.085 [DEBUG] [Thread-117271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:14:02.085 [INFO] [Thread-117271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] client lang: <none>
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] server lang: <none>
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] kex follows: False
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:14:02.089 [DEBUG] [Thread-117271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:14:02.090 [DEBUG] [Thread-117271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:14:02.090 [DEBUG] [Thread-117271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:14:02.090 [DEBUG] [Thread-117271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:14:02.090 [DEBUG] [Thread-117271] [transport.py] [_log()] Compression: none
2025-12-03T13:14:02.090 [DEBUG] [Thread-117271] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:14:02.107 [DEBUG] [Thread-117271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:14:02.108 [DEBUG] [Thread-117271] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:14:02.108 [DEBUG] [Thread-117271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:14:02.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:14:02.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:14:02.110 [DEBUG] [Thread-117271] [transport.py] [_log()] userauth is OK
2025-12-03T13:14:02.110 [DEBUG] [Thread-117271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:14:02.110 [DEBUG] [Thread-117271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:14:02.110 [DEBUG] [Thread-117271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:14:02.110 [DEBUG] [Thread-117271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:14:02.145 [INFO] [Thread-117271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:14:02.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:14:02.791 [DEBUG] [Thread-117271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:14:02.791 [DEBUG] [Thread-117271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:14:02.792 [DEBUG] [Thread-117271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:14:02.833 [DEBUG] [Thread-117271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:14:02.833 [DEBUG] [Thread-117271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:14:02.836 [DEBUG] [Thread-117271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:14:02.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:14:02.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:14:02.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:14:02.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:14:02.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:14:02.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:14:02.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.467758 -999.00  +19.70  14.47     32   +2.60 1 1 1 1 1   888    0 17.75 4.24 ----- 13.6 14.5 124.0 22.3 28.8 -25.0 28.1 -25.5 28.6 -24.8 29.5 -25.5
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:14:02.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.467758
2025-12-03T13:14:02.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:14:02.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:14:02.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:14:02.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:14:02.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:14:02.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:13:32', tmtdew=20.02, humidity=26.22, cloud=0.0, wind=15.65, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:13:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:14:02.862 [DEBUG] [Thread-117271] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:14:02.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:14:02.957 [DEBUG] [Thread-117274] [transport.py] [_log()] starting thread (client mode): 0xa517d0c0
2025-12-03T13:14:02.958 [DEBUG] [Thread-117274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:14:02.973 [DEBUG] [Thread-117274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:14:02.973 [INFO] [Thread-117274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:14:02.980 [DEBUG] [Thread-117274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:14:02.981 [DEBUG] [Thread-117274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] client lang: <none>
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] server lang: <none>
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] kex follows: False
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:14:02.982 [DEBUG] [Thread-117274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:14:02.983 [DEBUG] [Thread-117274] [transport.py] [_log()] Compression: none
2025-12-03T13:14:02.983 [DEBUG] [Thread-117274] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:14:03.046 [DEBUG] [Thread-117274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:14:03.046 [DEBUG] [Thread-117274] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:14:03.047 [DEBUG] [Thread-117274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:14:03.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:14:03.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:14:03.108 [DEBUG] [Thread-117274] [transport.py] [_log()] userauth is OK
2025-12-03T13:14:03.108 [DEBUG] [Thread-117274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:14:03.108 [DEBUG] [Thread-117274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:14:03.109 [DEBUG] [Thread-117274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:14:03.109 [DEBUG] [Thread-117274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:14:03.131 [INFO] [Thread-117274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:14:03.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:14:03.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:14:04.372 [DEBUG] [Thread-117274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:14:04.372 [DEBUG] [Thread-117274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:14:04.420 [DEBUG] [Thread-117274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:14:04.420 [DEBUG] [Thread-117274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:14:04.431 [DEBUG] [Thread-117274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:14:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:14:04.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:14:04.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:14:04.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:14:04.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:14:04.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:14:04.467 [DEBUG] [Thread-117274] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:14:08.471 [DEBUG] [Thread-117276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:09.581 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:09.582 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:23.516 [DEBUG] [Thread-117277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:14:34.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:14:34.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:14:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 14, 5), 19.8, 26.62, 0.0, 19.45, 19.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:14:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:14:05
2025-12-03T13:14:35.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:14:35.440 [DEBUG] [Thread-117278] [transport.py] [_log()] starting thread (client mode): 0xa51624a0
2025-12-03T13:14:35.440 [DEBUG] [Thread-117278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:14:35.461 [DEBUG] [Thread-117278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:14:35.461 [INFO] [Thread-117278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:14:35.464 [DEBUG] [Thread-117278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:14:35.464 [DEBUG] [Thread-117278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:14:35.464 [DEBUG] [Thread-117278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] client lang: <none>
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] server lang: <none>
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] kex follows: False
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] Compression: none
2025-12-03T13:14:35.465 [DEBUG] [Thread-117278] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:14:35.482 [DEBUG] [Thread-117278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:14:35.483 [DEBUG] [Thread-117278] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:14:35.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:14:35.483 [DEBUG] [Thread-117278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:14:35.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:14:35.485 [DEBUG] [Thread-117278] [transport.py] [_log()] userauth is OK
2025-12-03T13:14:35.485 [DEBUG] [Thread-117278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:14:35.486 [DEBUG] [Thread-117278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:14:35.486 [DEBUG] [Thread-117278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:14:35.486 [DEBUG] [Thread-117278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:14:35.507 [INFO] [Thread-117278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:14:35.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:14:36.109 [DEBUG] [Thread-117278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:14:36.109 [DEBUG] [Thread-117278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:14:36.110 [DEBUG] [Thread-117278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:14:36.150 [DEBUG] [Thread-117278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:14:36.150 [DEBUG] [Thread-117278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:14:36.153 [DEBUG] [Thread-117278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:14:36.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:14:36.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:14:36.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:14:36.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:14:36.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:14:36.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:14:36.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:14:36.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:14:36.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:14:36.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.468105 -999.00  +19.90  13.87     30   +2.20 1 1 1 1 1   888    0 17.61 5.85 ----- 12.9 13.9 159.6 21.5 28.8 -25.4 28.2 -24.7 28.8 -24.2 29.6 -25.2
2025-12-03T13:14:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:14:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:14:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.468105
2025-12-03T13:14:36.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:14:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:14:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:14:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:14:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:14:36.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:14:05', tmtdew=19.8, humidity=26.62, cloud=0.0, wind=19.45, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:14:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:14:36.178 [DEBUG] [Thread-117278] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:14:36.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:14:36.270 [DEBUG] [Thread-117281] [transport.py] [_log()] starting thread (client mode): 0xa5161c00
2025-12-03T13:14:36.270 [DEBUG] [Thread-117281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:14:36.286 [DEBUG] [Thread-117281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:14:36.286 [INFO] [Thread-117281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] client lang: <none>
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] server lang: <none>
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] kex follows: False
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:14:36.297 [DEBUG] [Thread-117281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:14:36.298 [DEBUG] [Thread-117281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:14:36.298 [DEBUG] [Thread-117281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:14:36.298 [DEBUG] [Thread-117281] [transport.py] [_log()] Compression: none
2025-12-03T13:14:36.298 [DEBUG] [Thread-117281] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:14:36.352 [DEBUG] [Thread-117281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:14:36.353 [DEBUG] [Thread-117281] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:14:36.353 [DEBUG] [Thread-117281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:14:36.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:14:36.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:14:36.415 [DEBUG] [Thread-117281] [transport.py] [_log()] userauth is OK
2025-12-03T13:14:36.415 [DEBUG] [Thread-117281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:14:36.415 [DEBUG] [Thread-117281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:14:36.415 [DEBUG] [Thread-117281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:14:36.415 [DEBUG] [Thread-117281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:14:36.434 [INFO] [Thread-117281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:14:36.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:14:36.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:14:37.652 [DEBUG] [Thread-117281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:14:37.652 [DEBUG] [Thread-117281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:14:37.702 [DEBUG] [Thread-117281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:14:37.702 [DEBUG] [Thread-117281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:14:37.717 [DEBUG] [Thread-117281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:14:37.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:14:37.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:14:37.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:14:37.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:14:37.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:14:37.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:14:37.758 [DEBUG] [Thread-117281] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:14:38.542 [DEBUG] [Thread-117283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:47.432 [DEBUG] [Thread-117284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:14:53.579 [DEBUG] [Thread-117285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:15:07.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:15:07.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:15:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 14, 36), 20.21, 25.5, 0.0, 15.46, 19.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:15:08.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:14:36
2025-12-03T13:15:08.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:15:08.605 [DEBUG] [Thread-117286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:08.713 [DEBUG] [Thread-117287] [transport.py] [_log()] starting thread (client mode): 0xa517e7d0
2025-12-03T13:15:08.713 [DEBUG] [Thread-117287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:15:08.733 [DEBUG] [Thread-117287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:15:08.733 [INFO] [Thread-117287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:08.737 [DEBUG] [Thread-117287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] client lang: <none>
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] server lang: <none>
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] kex follows: False
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] Compression: none
2025-12-03T13:15:08.738 [DEBUG] [Thread-117287] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:15:08.757 [DEBUG] [Thread-117287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:15:08.757 [DEBUG] [Thread-117287] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:15:08.758 [DEBUG] [Thread-117287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:15:08.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:15:08.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:15:08.760 [DEBUG] [Thread-117287] [transport.py] [_log()] userauth is OK
2025-12-03T13:15:08.760 [DEBUG] [Thread-117287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:15:08.761 [DEBUG] [Thread-117287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:15:08.761 [DEBUG] [Thread-117287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:15:08.761 [DEBUG] [Thread-117287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:15:08.787 [INFO] [Thread-117287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:15:08.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:15:09.712 [DEBUG] [Thread-117287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:15:09.712 [DEBUG] [Thread-117287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:15:09.712 [DEBUG] [Thread-117287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:15:09.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:09.727 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:09.752 [DEBUG] [Thread-117287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:15:09.752 [DEBUG] [Thread-117287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:15:09.755 [DEBUG] [Thread-117287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:15:09.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:15:09.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:15:09.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:15:09.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:15:09.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:15:09.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:15:09.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.468452 -999.00  +20.30  11.94     30   +2.20 1 1 1 1 1   888    0 17.84 10.89 ----- 16.2 11.9 151.0 19.2 28.9 -24.7 28.3 -24.4 28.9 -24.4 29.8 -23.8
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.468452
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:15:09.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:14:36', tmtdew=20.21, humidity=25.5, cloud=0.0, wind=15.46, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:14:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:15:09.774 [DEBUG] [Thread-117287] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:15:09.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:15:09.860 [DEBUG] [Thread-117290] [transport.py] [_log()] starting thread (client mode): 0xa519b730
2025-12-03T13:15:09.861 [DEBUG] [Thread-117290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:15:09.875 [DEBUG] [Thread-117290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:15:09.875 [INFO] [Thread-117290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] client lang: <none>
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] server lang: <none>
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] kex follows: False
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] Compression: none
2025-12-03T13:15:09.883 [DEBUG] [Thread-117290] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:15:09.943 [DEBUG] [Thread-117290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:15:09.943 [DEBUG] [Thread-117290] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:15:09.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:15:09.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:15:09.944 [DEBUG] [Thread-117290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:15:09.998 [DEBUG] [Thread-117290] [transport.py] [_log()] userauth is OK
2025-12-03T13:15:09.998 [DEBUG] [Thread-117290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:15:09.998 [DEBUG] [Thread-117290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:15:09.998 [DEBUG] [Thread-117290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:15:09.998 [DEBUG] [Thread-117290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:15:10.012 [INFO] [Thread-117290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:15:10.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:15:10.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:15:11.264 [DEBUG] [Thread-117290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:15:11.265 [DEBUG] [Thread-117290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:15:11.312 [DEBUG] [Thread-117290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:15:11.313 [DEBUG] [Thread-117290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:15:11.322 [DEBUG] [Thread-117290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:15:11.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:15:11.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:15:11.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:15:11.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:15:11.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:15:11.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:15:11.355 [DEBUG] [Thread-117290] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:15:23.634 [DEBUG] [Thread-117292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:38.685 [DEBUG] [Thread-117293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:41.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:15:41.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:15:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:15:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 15, 9), 20.33, 25.34, 0.0, 15.81, 20.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:15:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:15:09
2025-12-03T13:15:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:15:42.385 [DEBUG] [Thread-117294] [transport.py] [_log()] starting thread (client mode): 0xa517da50
2025-12-03T13:15:42.385 [DEBUG] [Thread-117294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:15:42.405 [DEBUG] [Thread-117294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:15:42.406 [INFO] [Thread-117294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] client lang: <none>
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] server lang: <none>
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] kex follows: False
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] Compression: none
2025-12-03T13:15:42.409 [DEBUG] [Thread-117294] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:15:42.425 [DEBUG] [Thread-117294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:15:42.425 [DEBUG] [Thread-117294] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:15:42.426 [DEBUG] [Thread-117294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:15:42.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:15:42.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:15:42.427 [DEBUG] [Thread-117294] [transport.py] [_log()] userauth is OK
2025-12-03T13:15:42.427 [DEBUG] [Thread-117294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:15:42.427 [DEBUG] [Thread-117294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:15:42.427 [DEBUG] [Thread-117294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:15:42.427 [DEBUG] [Thread-117294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:15:42.446 [INFO] [Thread-117294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:15:42.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:15:43.090 [DEBUG] [Thread-117294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:15:43.090 [DEBUG] [Thread-117294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:15:43.090 [DEBUG] [Thread-117294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:15:43.131 [DEBUG] [Thread-117294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:15:43.131 [DEBUG] [Thread-117294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:15:43.133 [DEBUG] [Thread-117294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:15:43.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:15:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:15:43.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:15:43.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:15:43.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:15:43.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:15:43.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.468799 -999.00  +20.70  15.88     29   +2.40 1 1 1 1 1   888    0 17.85 18.20 ----- 20.4 15.9 153.8 28.7 29.0 -25.1 28.4 -24.2 29.1 -23.8 29.7 -27.1
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.468799
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:15:43.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:15:09', tmtdew=20.33, humidity=25.34, cloud=0.0, wind=15.81, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:15:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:15:43.152 [DEBUG] [Thread-117294] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:15:43.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:15:43.238 [DEBUG] [Thread-117297] [transport.py] [_log()] starting thread (client mode): 0xa517e740
2025-12-03T13:15:43.238 [DEBUG] [Thread-117297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:15:43.253 [DEBUG] [Thread-117297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:15:43.253 [INFO] [Thread-117297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:15:43.260 [DEBUG] [Thread-117297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:15:43.260 [DEBUG] [Thread-117297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:15:43.260 [DEBUG] [Thread-117297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] client lang: <none>
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] server lang: <none>
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] kex follows: False
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] Compression: none
2025-12-03T13:15:43.261 [DEBUG] [Thread-117297] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:15:43.319 [DEBUG] [Thread-117297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:15:43.320 [DEBUG] [Thread-117297] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:15:43.320 [DEBUG] [Thread-117297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:15:43.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:15:43.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:15:43.375 [DEBUG] [Thread-117297] [transport.py] [_log()] userauth is OK
2025-12-03T13:15:43.376 [DEBUG] [Thread-117297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:15:43.376 [DEBUG] [Thread-117297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:15:43.376 [DEBUG] [Thread-117297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:15:43.376 [DEBUG] [Thread-117297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:15:43.395 [INFO] [Thread-117297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:15:43.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:15:43.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:15:44.346 [DEBUG] [Thread-117297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:15:44.346 [DEBUG] [Thread-117297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:15:44.394 [DEBUG] [Thread-117297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:15:44.394 [DEBUG] [Thread-117297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:15:44.402 [DEBUG] [Thread-117297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:15:44.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:15:44.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:15:44.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:15:44.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:15:44.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:15:44.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:15:44.437 [DEBUG] [Thread-117297] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:15:47.469 [DEBUG] [Thread-117299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:15:53.716 [DEBUG] [Thread-117300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:08.756 [DEBUG] [Thread-117301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:09.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:09.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:16:14.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:16:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:16:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 15, 41), 20.73, 24.94, 0.0, 18.37, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:16:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:15:41
2025-12-03T13:16:15.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:16:15.445 [DEBUG] [Thread-117302] [transport.py] [_log()] starting thread (client mode): 0xa5161de0
2025-12-03T13:16:15.445 [DEBUG] [Thread-117302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:16:15.466 [DEBUG] [Thread-117302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:16:15.466 [INFO] [Thread-117302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:16:15.469 [DEBUG] [Thread-117302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] client lang: <none>
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] server lang: <none>
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] kex follows: False
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] Compression: none
2025-12-03T13:16:15.470 [DEBUG] [Thread-117302] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:16:15.487 [DEBUG] [Thread-117302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:16:15.487 [DEBUG] [Thread-117302] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:16:15.488 [DEBUG] [Thread-117302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:16:15.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:16:15.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:16:15.490 [DEBUG] [Thread-117302] [transport.py] [_log()] userauth is OK
2025-12-03T13:16:15.490 [DEBUG] [Thread-117302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:16:15.490 [DEBUG] [Thread-117302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:16:15.490 [DEBUG] [Thread-117302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:16:15.490 [DEBUG] [Thread-117302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:16:15.526 [INFO] [Thread-117302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:16:15.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:16:16.155 [DEBUG] [Thread-117302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:16:16.155 [DEBUG] [Thread-117302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:16:16.156 [DEBUG] [Thread-117302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:16:16.196 [DEBUG] [Thread-117302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:16:16.196 [DEBUG] [Thread-117302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:16:16.199 [DEBUG] [Thread-117302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:16:16.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:16:16.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:16:16.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:16:16.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:16:16.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:16:16.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:16:16.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.469147 -999.00  +20.50  17.08     29   +1.90 1 1 1 1 1   888    0 18.37 26.12 ----- 18.7 17.1 190.0 25.5 28.6 -27.5 28.0 -26.6 28.9 -25.7 29.5 -25.5
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:16:16.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.469147
2025-12-03T13:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:16:16.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:16:16.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:15:41', tmtdew=20.73, humidity=24.94, cloud=0.0, wind=18.37, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:15:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:16:16.223 [DEBUG] [Thread-117302] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:16:16.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:16:16.318 [DEBUG] [Thread-117305] [transport.py] [_log()] starting thread (client mode): 0xa27c9420
2025-12-03T13:16:16.318 [DEBUG] [Thread-117305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:16:16.337 [DEBUG] [Thread-117305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:16:16.337 [INFO] [Thread-117305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:16:16.344 [DEBUG] [Thread-117305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:16:16.344 [DEBUG] [Thread-117305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] client lang: <none>
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] server lang: <none>
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] kex follows: False
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] Compression: none
2025-12-03T13:16:16.345 [DEBUG] [Thread-117305] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:16:16.405 [DEBUG] [Thread-117305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:16:16.405 [DEBUG] [Thread-117305] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:16:16.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:16:16.406 [DEBUG] [Thread-117305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:16:16.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:16:16.465 [DEBUG] [Thread-117305] [transport.py] [_log()] userauth is OK
2025-12-03T13:16:16.465 [DEBUG] [Thread-117305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:16:16.465 [DEBUG] [Thread-117305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:16:16.465 [DEBUG] [Thread-117305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:16:16.465 [DEBUG] [Thread-117305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:16:16.485 [INFO] [Thread-117305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:16:16.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:16:16.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:16:17.475 [DEBUG] [Thread-117305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:16:17.476 [DEBUG] [Thread-117305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:16:17.524 [DEBUG] [Thread-117305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:16:17.524 [DEBUG] [Thread-117305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:16:17.534 [DEBUG] [Thread-117305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:16:17.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:16:17.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:16:17.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:16:17.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:16:17.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:16:17.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:16:17.575 [DEBUG] [Thread-117305] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:16:23.780 [DEBUG] [Thread-117307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:38.830 [DEBUG] [Thread-117308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:47.503 [DEBUG] [Thread-117309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:16:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:16:47.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:16:47.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:16:48.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 16, 45), 21.04, 24.06, 0.0, 19.23, 19.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:16:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:16:45
2025-12-03T13:16:48.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:16:48.553 [DEBUG] [Thread-117310] [transport.py] [_log()] starting thread (client mode): 0xa517f7c0
2025-12-03T13:16:48.553 [DEBUG] [Thread-117310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:16:48.566 [DEBUG] [Thread-117310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:16:48.566 [INFO] [Thread-117310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:16:48.569 [DEBUG] [Thread-117310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:16:48.569 [DEBUG] [Thread-117310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:16:48.569 [DEBUG] [Thread-117310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:16:48.569 [DEBUG] [Thread-117310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] client lang: <none>
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] server lang: <none>
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] kex follows: False
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] Compression: none
2025-12-03T13:16:48.570 [DEBUG] [Thread-117310] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:16:48.589 [DEBUG] [Thread-117310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:16:48.589 [DEBUG] [Thread-117310] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:16:48.589 [DEBUG] [Thread-117310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:16:48.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:16:48.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:16:48.590 [DEBUG] [Thread-117310] [transport.py] [_log()] userauth is OK
2025-12-03T13:16:48.590 [DEBUG] [Thread-117310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:16:48.590 [DEBUG] [Thread-117310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:16:48.590 [DEBUG] [Thread-117310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:16:48.590 [DEBUG] [Thread-117310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:16:48.618 [INFO] [Thread-117310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:16:48.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:16:49.281 [DEBUG] [Thread-117310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:16:49.281 [DEBUG] [Thread-117310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:16:49.281 [DEBUG] [Thread-117310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:16:49.323 [DEBUG] [Thread-117310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:16:49.323 [DEBUG] [Thread-117310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:16:49.325 [DEBUG] [Thread-117310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:16:49.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:16:49.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:16:49.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:16:49.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:16:49.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:16:49.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:16:49.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:16:49.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.469841 -999.00  +20.60  23.46     29   +2.10 1 1 1 1 1   888    0 18.45 34.89 ----- 22.2 23.5 151.0 27.0 28.9 -27.3 28.1 -24.9 28.9 -23.5 29.4 -27.5
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.469841
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:16:49.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:16:45', tmtdew=21.04, humidity=24.06, cloud=0.0, wind=19.23, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:16:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:16:49.346 [DEBUG] [Thread-117310] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:16:49.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:16:49.431 [DEBUG] [Thread-117313] [transport.py] [_log()] starting thread (client mode): 0xa517d390
2025-12-03T13:16:49.432 [DEBUG] [Thread-117313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:16:49.447 [DEBUG] [Thread-117313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:16:49.447 [INFO] [Thread-117313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] client lang: <none>
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] server lang: <none>
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] kex follows: False
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:16:49.454 [DEBUG] [Thread-117313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:16:49.455 [DEBUG] [Thread-117313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:16:49.455 [DEBUG] [Thread-117313] [transport.py] [_log()] Compression: none
2025-12-03T13:16:49.455 [DEBUG] [Thread-117313] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:16:49.517 [DEBUG] [Thread-117313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:16:49.517 [DEBUG] [Thread-117313] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:16:49.517 [DEBUG] [Thread-117313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:16:49.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:16:49.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:16:49.578 [DEBUG] [Thread-117313] [transport.py] [_log()] userauth is OK
2025-12-03T13:16:49.578 [DEBUG] [Thread-117313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:16:49.578 [DEBUG] [Thread-117313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:16:49.578 [DEBUG] [Thread-117313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:16:49.578 [DEBUG] [Thread-117313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:16:49.593 [INFO] [Thread-117313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:16:49.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:16:49.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:16:50.771 [DEBUG] [Thread-117313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:16:50.772 [DEBUG] [Thread-117313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:16:50.820 [DEBUG] [Thread-117313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:16:50.820 [DEBUG] [Thread-117313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:16:50.831 [DEBUG] [Thread-117313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:16:50.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:16:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:16:50.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:16:50.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:16:50.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:16:50.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:16:50.874 [DEBUG] [Thread-117313] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:16:53.860 [DEBUG] [Thread-117315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:08.916 [DEBUG] [Thread-117316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:10.006 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:10.007 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:17:20.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:17:20.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:17:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 17, 17), 20.84, 24.41, 0.0, 24.01, 19.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:17:21.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:17:17
2025-12-03T13:17:21.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:17:21.872 [DEBUG] [Thread-117317] [transport.py] [_log()] starting thread (client mode): 0xa519bbb0
2025-12-03T13:17:21.872 [DEBUG] [Thread-117317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:17:21.892 [DEBUG] [Thread-117317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:17:21.892 [INFO] [Thread-117317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] client lang: <none>
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] server lang: <none>
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] kex follows: False
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:17:21.895 [DEBUG] [Thread-117317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:17:21.896 [DEBUG] [Thread-117317] [transport.py] [_log()] Compression: none
2025-12-03T13:17:21.896 [DEBUG] [Thread-117317] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:17:21.914 [DEBUG] [Thread-117317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:17:21.914 [DEBUG] [Thread-117317] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:17:21.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:17:21.915 [DEBUG] [Thread-117317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:17:21.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:17:21.917 [DEBUG] [Thread-117317] [transport.py] [_log()] userauth is OK
2025-12-03T13:17:21.917 [DEBUG] [Thread-117317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:17:21.917 [DEBUG] [Thread-117317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:17:21.918 [DEBUG] [Thread-117317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:17:21.918 [DEBUG] [Thread-117317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:17:21.952 [INFO] [Thread-117317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:17:21.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:17:22.574 [DEBUG] [Thread-117317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:17:22.575 [DEBUG] [Thread-117317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:17:22.575 [DEBUG] [Thread-117317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:17:22.616 [DEBUG] [Thread-117317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:17:22.616 [DEBUG] [Thread-117317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:17:22.619 [DEBUG] [Thread-117317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:17:22.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:17:22.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:17:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:17:22.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:17:22.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:17:22.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:17:22.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:17:22.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:17:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:17:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.470188 -999.00  +20.00  17.81     30   +1.90 1 1 1 1 1   888    0 18.28 36.47 ----- 15.8 17.8 133.6 26.4 28.6 -26.7 28.0 -27.0 28.6 -26.8 29.4 -26.5
2025-12-03T13:17:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:17:22.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:17:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.470188
2025-12-03T13:17:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:17:22.640 [DEBUG] [Thread-117317] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:17:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:17:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:17:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:17:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:17:22.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:17:17', tmtdew=20.84, humidity=24.41, cloud=0.0, wind=24.01, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:17:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:17:22.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:17:22.738 [DEBUG] [Thread-117320] [transport.py] [_log()] starting thread (client mode): 0xa27c9c30
2025-12-03T13:17:22.738 [DEBUG] [Thread-117320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:17:22.754 [DEBUG] [Thread-117320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:17:22.754 [INFO] [Thread-117320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:17:22.761 [DEBUG] [Thread-117320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:17:22.761 [DEBUG] [Thread-117320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:17:22.761 [DEBUG] [Thread-117320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:17:22.761 [DEBUG] [Thread-117320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] client lang: <none>
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] server lang: <none>
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] kex follows: False
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:17:22.762 [DEBUG] [Thread-117320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:17:22.763 [DEBUG] [Thread-117320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:17:22.763 [DEBUG] [Thread-117320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:17:22.763 [DEBUG] [Thread-117320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:17:22.763 [DEBUG] [Thread-117320] [transport.py] [_log()] Compression: none
2025-12-03T13:17:22.763 [DEBUG] [Thread-117320] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:17:22.822 [DEBUG] [Thread-117320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:17:22.822 [DEBUG] [Thread-117320] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:17:22.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:17:22.823 [DEBUG] [Thread-117320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:17:22.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:17:22.879 [DEBUG] [Thread-117320] [transport.py] [_log()] userauth is OK
2025-12-03T13:17:22.879 [DEBUG] [Thread-117320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:17:22.879 [DEBUG] [Thread-117320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:17:22.879 [DEBUG] [Thread-117320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:17:22.879 [DEBUG] [Thread-117320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:17:22.901 [INFO] [Thread-117320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:17:22.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:17:22.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:17:23.794 [DEBUG] [Thread-117320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:17:23.794 [DEBUG] [Thread-117320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:17:23.842 [DEBUG] [Thread-117320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:17:23.842 [DEBUG] [Thread-117320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:17:23.850 [DEBUG] [Thread-117320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:17:23.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:17:23.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:17:23.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:17:23.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:17:23.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:17:23.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:17:23.882 [DEBUG] [Thread-117320] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:17:23.943 [DEBUG] [Thread-117322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:38.976 [DEBUG] [Thread-117323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:47.569 [DEBUG] [Thread-117324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:53.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:17:53.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:17:53.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:17:54.002 [DEBUG] [Thread-117325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:17:54.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 17, 49), 21.25, 23.83, 0.0, 27.1, 20.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:17:54.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:17:49
2025-12-03T13:17:54.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:17:54.844 [DEBUG] [Thread-117326] [transport.py] [_log()] starting thread (client mode): 0xa517c220
2025-12-03T13:17:54.844 [DEBUG] [Thread-117326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:17:54.864 [DEBUG] [Thread-117326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:17:54.864 [INFO] [Thread-117326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] client lang: <none>
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] server lang: <none>
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] kex follows: False
2025-12-03T13:17:54.866 [DEBUG] [Thread-117326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] Compression: none
2025-12-03T13:17:54.867 [DEBUG] [Thread-117326] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:17:54.880 [DEBUG] [Thread-117326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:17:54.881 [DEBUG] [Thread-117326] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:17:54.881 [DEBUG] [Thread-117326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:17:54.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:17:54.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:17:54.883 [DEBUG] [Thread-117326] [transport.py] [_log()] userauth is OK
2025-12-03T13:17:54.883 [DEBUG] [Thread-117326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:17:54.883 [DEBUG] [Thread-117326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:17:54.883 [DEBUG] [Thread-117326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:17:54.883 [DEBUG] [Thread-117326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:17:54.902 [INFO] [Thread-117326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:17:54.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:17:55.529 [DEBUG] [Thread-117326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:17:55.529 [DEBUG] [Thread-117326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:17:55.530 [DEBUG] [Thread-117326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:17:55.570 [DEBUG] [Thread-117326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:17:55.570 [DEBUG] [Thread-117326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:17:55.573 [DEBUG] [Thread-117326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:17:55.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:17:55.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:17:55.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:17:55.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:17:55.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:17:55.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:17:55.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:17:55.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:17:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:17:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.470536 -999.00  +19.90  17.08     30   +2.10 1 1 1 1 1   888    0 18.84 37.48 ----- 20.0 17.1 150.0 31.6 28.4 -27.7 27.9 -25.7 28.5 -27.4 29.1 -27.4
2025-12-03T13:17:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:17:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:17:55.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.470536
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:17:55.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:17:49', tmtdew=21.25, humidity=23.83, cloud=0.0, wind=27.1, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:17:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:17:55.598 [DEBUG] [Thread-117326] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:17:55.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:17:55.695 [DEBUG] [Thread-117329] [transport.py] [_log()] starting thread (client mode): 0xa51cece0
2025-12-03T13:17:55.695 [DEBUG] [Thread-117329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:17:55.711 [DEBUG] [Thread-117329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:17:55.711 [INFO] [Thread-117329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:17:55.718 [DEBUG] [Thread-117329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] client lang: <none>
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] server lang: <none>
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] kex follows: False
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:17:55.719 [DEBUG] [Thread-117329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:17:55.720 [DEBUG] [Thread-117329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:17:55.720 [DEBUG] [Thread-117329] [transport.py] [_log()] Compression: none
2025-12-03T13:17:55.720 [DEBUG] [Thread-117329] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:17:55.779 [DEBUG] [Thread-117329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:17:55.780 [DEBUG] [Thread-117329] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:17:55.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:17:55.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:17:55.781 [DEBUG] [Thread-117329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:17:55.836 [DEBUG] [Thread-117329] [transport.py] [_log()] userauth is OK
2025-12-03T13:17:55.836 [DEBUG] [Thread-117329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:17:55.836 [DEBUG] [Thread-117329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:17:55.836 [DEBUG] [Thread-117329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:17:55.836 [DEBUG] [Thread-117329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:17:55.855 [INFO] [Thread-117329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:17:55.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:17:55.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:17:56.810 [DEBUG] [Thread-117329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:17:56.810 [DEBUG] [Thread-117329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:17:56.859 [DEBUG] [Thread-117329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:17:56.859 [DEBUG] [Thread-117329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:17:56.868 [DEBUG] [Thread-117329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:17:56.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:17:56.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:17:56.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:17:56.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:17:56.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:17:56.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:17:56.902 [DEBUG] [Thread-117329] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:18:09.032 [DEBUG] [Thread-117331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:10.145 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:10.146 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:24.080 [DEBUG] [Thread-117332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:26.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:18:26.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:18:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:18:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 18, 21), 21.15, 23.96, 0.0, 22.07, 20.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:18:27.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:18:21
2025-12-03T13:18:27.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:18:27.862 [DEBUG] [Thread-117333] [transport.py] [_log()] starting thread (client mode): 0xa517cfd0
2025-12-03T13:18:27.862 [DEBUG] [Thread-117333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:18:27.882 [DEBUG] [Thread-117333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:18:27.882 [INFO] [Thread-117333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] client lang: <none>
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] server lang: <none>
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] kex follows: False
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] Compression: none
2025-12-03T13:18:27.885 [DEBUG] [Thread-117333] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:18:27.902 [DEBUG] [Thread-117333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:18:27.902 [DEBUG] [Thread-117333] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:18:27.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:18:27.903 [DEBUG] [Thread-117333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:18:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:18:27.905 [DEBUG] [Thread-117333] [transport.py] [_log()] userauth is OK
2025-12-03T13:18:27.905 [DEBUG] [Thread-117333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:18:27.905 [DEBUG] [Thread-117333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:18:27.905 [DEBUG] [Thread-117333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:18:27.905 [DEBUG] [Thread-117333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:18:27.928 [INFO] [Thread-117333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:18:27.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:18:28.582 [DEBUG] [Thread-117333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:18:28.582 [DEBUG] [Thread-117333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:18:28.583 [DEBUG] [Thread-117333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:18:28.624 [DEBUG] [Thread-117333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:18:28.624 [DEBUG] [Thread-117333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:18:28.626 [DEBUG] [Thread-117333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:18:28.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:18:28.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:18:28.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:18:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:18:28.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:18:28.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:18:28.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:18:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.470883 -999.00  +19.70  14.22     30   +2.00 1 1 1 1 1   888    0 18.49 34.94 ----- 13.3 14.2 172.0 17.9 28.4 -27.9 27.7 -27.0 28.2 -25.8 29.0 -27.3
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.470883
2025-12-03T13:18:28.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:18:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:18:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:18:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:18:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:18:28.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:18:21', tmtdew=21.15, humidity=23.96, cloud=0.0, wind=22.07, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:18:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:18:28.651 [DEBUG] [Thread-117333] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:18:28.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:18:28.759 [DEBUG] [Thread-117336] [transport.py] [_log()] starting thread (client mode): 0xa517fb20
2025-12-03T13:18:28.759 [DEBUG] [Thread-117336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:18:28.776 [DEBUG] [Thread-117336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:18:28.776 [INFO] [Thread-117336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:18:28.784 [DEBUG] [Thread-117336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] client lang: <none>
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] server lang: <none>
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] kex follows: False
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:18:28.785 [DEBUG] [Thread-117336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:18:28.786 [DEBUG] [Thread-117336] [transport.py] [_log()] Compression: none
2025-12-03T13:18:28.786 [DEBUG] [Thread-117336] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:18:28.846 [DEBUG] [Thread-117336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:18:28.847 [DEBUG] [Thread-117336] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:18:28.847 [DEBUG] [Thread-117336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:18:28.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:18:28.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:18:28.905 [DEBUG] [Thread-117336] [transport.py] [_log()] userauth is OK
2025-12-03T13:18:28.906 [DEBUG] [Thread-117336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:18:28.906 [DEBUG] [Thread-117336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:18:28.906 [DEBUG] [Thread-117336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:18:28.906 [DEBUG] [Thread-117336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:18:28.925 [INFO] [Thread-117336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:18:28.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:18:28.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:18:29.768 [DEBUG] [Thread-117336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:18:29.769 [DEBUG] [Thread-117336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:18:29.817 [DEBUG] [Thread-117336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:18:29.817 [DEBUG] [Thread-117336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:18:29.826 [DEBUG] [Thread-117336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:18:29.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:18:29.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:18:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:18:29.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:18:29.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:18:29.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:18:29.861 [DEBUG] [Thread-117336] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:18:39.109 [DEBUG] [Thread-117338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:47.613 [DEBUG] [Thread-117339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:54.150 [DEBUG] [Thread-117340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:18:59.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:18:59.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:19:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 18, 53), 20.72, 24.92, 0.0, 19.02, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:19:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:18:53
2025-12-03T13:19:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:19:00.827 [DEBUG] [Thread-117341] [transport.py] [_log()] starting thread (client mode): 0xa5199270
2025-12-03T13:19:00.827 [DEBUG] [Thread-117341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:19:00.847 [DEBUG] [Thread-117341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:19:00.847 [INFO] [Thread-117341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] client lang: <none>
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] server lang: <none>
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] kex follows: False
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:19:00.850 [DEBUG] [Thread-117341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:19:00.851 [DEBUG] [Thread-117341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:19:00.851 [DEBUG] [Thread-117341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:19:00.851 [DEBUG] [Thread-117341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:19:00.851 [DEBUG] [Thread-117341] [transport.py] [_log()] Compression: none
2025-12-03T13:19:00.851 [DEBUG] [Thread-117341] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:19:00.866 [DEBUG] [Thread-117341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:19:00.866 [DEBUG] [Thread-117341] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:19:00.867 [DEBUG] [Thread-117341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:19:00.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:19:00.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:19:00.868 [DEBUG] [Thread-117341] [transport.py] [_log()] userauth is OK
2025-12-03T13:19:00.869 [DEBUG] [Thread-117341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:19:00.869 [DEBUG] [Thread-117341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:19:00.869 [DEBUG] [Thread-117341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:19:00.869 [DEBUG] [Thread-117341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:19:00.886 [INFO] [Thread-117341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:19:00.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:19:01.548 [DEBUG] [Thread-117341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:19:01.548 [DEBUG] [Thread-117341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:19:01.549 [DEBUG] [Thread-117341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:19:01.590 [DEBUG] [Thread-117341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:19:01.590 [DEBUG] [Thread-117341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:19:01.592 [DEBUG] [Thread-117341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:19:01.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:19:01.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:19:01.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:19:01.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:19:01.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:19:01.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:19:01.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.471230 -999.00  +19.60  10.26     30   +1.80 1 1 1 1 1   888    0 18.77 34.92 ----- 9.8 10.3 137.2 18.9 28.2 -26.5 27.5 -25.9 28.2 -25.7 29.1 -25.6
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:19:01.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.471230
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:19:01.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:18:53', tmtdew=20.72, humidity=24.92, cloud=0.0, wind=19.02, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:18:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:19:01.610 [DEBUG] [Thread-117341] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:19:01.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:19:01.692 [DEBUG] [Thread-117344] [transport.py] [_log()] starting thread (client mode): 0xa27a1570
2025-12-03T13:19:01.693 [DEBUG] [Thread-117344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:19:01.707 [DEBUG] [Thread-117344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:19:01.707 [INFO] [Thread-117344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:19:01.714 [DEBUG] [Thread-117344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] client lang: <none>
2025-12-03T13:19:01.715 [DEBUG] [Thread-117344] [transport.py] [_log()] server lang: <none>
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] kex follows: False
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] Compression: none
2025-12-03T13:19:01.716 [DEBUG] [Thread-117344] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:19:01.778 [DEBUG] [Thread-117344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:19:01.779 [DEBUG] [Thread-117344] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:19:01.779 [DEBUG] [Thread-117344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:19:01.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:19:01.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:19:01.833 [DEBUG] [Thread-117344] [transport.py] [_log()] userauth is OK
2025-12-03T13:19:01.834 [DEBUG] [Thread-117344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:19:01.834 [DEBUG] [Thread-117344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:19:01.834 [DEBUG] [Thread-117344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:19:01.834 [DEBUG] [Thread-117344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:19:01.854 [INFO] [Thread-117344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:19:01.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:19:01.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:19:02.681 [DEBUG] [Thread-117344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:19:02.681 [DEBUG] [Thread-117344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:19:02.729 [DEBUG] [Thread-117344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:19:02.729 [DEBUG] [Thread-117344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:19:02.737 [DEBUG] [Thread-117344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:19:02.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:19:02.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:19:02.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:19:02.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:19:02.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:19:02.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:19:02.772 [DEBUG] [Thread-117344] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:19:09.181 [DEBUG] [Thread-117346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:10.284 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:10.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:24.219 [DEBUG] [Thread-117347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:32.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:19:32.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:19:32.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:19:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 19, 25), 20.62, 25.04, 0.0, 15.4, 19.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:19:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:19:25
2025-12-03T13:19:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:19:33.725 [DEBUG] [Thread-117348] [transport.py] [_log()] starting thread (client mode): 0xa27cb6d0
2025-12-03T13:19:33.726 [DEBUG] [Thread-117348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:19:33.745 [DEBUG] [Thread-117348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:19:33.746 [INFO] [Thread-117348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:19:33.749 [DEBUG] [Thread-117348] [transport.py] [_log()] client lang: <none>
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] server lang: <none>
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] kex follows: False
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] Compression: none
2025-12-03T13:19:33.750 [DEBUG] [Thread-117348] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:19:33.768 [DEBUG] [Thread-117348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:19:33.769 [DEBUG] [Thread-117348] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:19:33.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:19:33.770 [DEBUG] [Thread-117348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:19:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:19:33.772 [DEBUG] [Thread-117348] [transport.py] [_log()] userauth is OK
2025-12-03T13:19:33.772 [DEBUG] [Thread-117348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:19:33.772 [DEBUG] [Thread-117348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:19:33.772 [DEBUG] [Thread-117348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:19:33.772 [DEBUG] [Thread-117348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:19:33.793 [INFO] [Thread-117348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:19:33.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:19:34.450 [DEBUG] [Thread-117348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:19:34.450 [DEBUG] [Thread-117348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:19:34.450 [DEBUG] [Thread-117348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:19:34.491 [DEBUG] [Thread-117348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:19:34.491 [DEBUG] [Thread-117348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:19:34.494 [DEBUG] [Thread-117348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:19:34.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:19:34.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:19:34.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:19:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:19:34.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:19:34.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:19:34.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.471577 -999.00  +19.60   7.98     30   +1.80 1 1 1 1 1   888    0 18.50 31.67 ----- 7.0 8.0 104.6 19.4 27.9 -30.0 27.7 -27.1 28.3 -25.0 29.1 -25.5
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:19:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.471577
2025-12-03T13:19:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:19:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:19:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:19:34.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:19:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:19:34.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:19:25', tmtdew=20.62, humidity=25.04, cloud=0.0, wind=15.4, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:19:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:19:34.518 [DEBUG] [Thread-117348] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:19:34.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:19:34.613 [DEBUG] [Thread-117351] [transport.py] [_log()] starting thread (client mode): 0xa517ca60
2025-12-03T13:19:34.613 [DEBUG] [Thread-117351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:19:34.628 [DEBUG] [Thread-117351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:19:34.628 [INFO] [Thread-117351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] client lang: <none>
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] server lang: <none>
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] kex follows: False
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:19:34.636 [DEBUG] [Thread-117351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:19:34.637 [DEBUG] [Thread-117351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:19:34.637 [DEBUG] [Thread-117351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:19:34.637 [DEBUG] [Thread-117351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:19:34.637 [DEBUG] [Thread-117351] [transport.py] [_log()] Compression: none
2025-12-03T13:19:34.637 [DEBUG] [Thread-117351] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:19:34.694 [DEBUG] [Thread-117351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:19:34.695 [DEBUG] [Thread-117351] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:19:34.695 [DEBUG] [Thread-117351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:19:34.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:19:34.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:19:34.751 [DEBUG] [Thread-117351] [transport.py] [_log()] userauth is OK
2025-12-03T13:19:34.751 [DEBUG] [Thread-117351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:19:34.751 [DEBUG] [Thread-117351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:19:34.751 [DEBUG] [Thread-117351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:19:34.751 [DEBUG] [Thread-117351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:19:34.770 [INFO] [Thread-117351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:19:34.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:19:34.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:19:35.641 [DEBUG] [Thread-117351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:19:35.641 [DEBUG] [Thread-117351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:19:35.689 [DEBUG] [Thread-117351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:19:35.689 [DEBUG] [Thread-117351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:19:35.698 [DEBUG] [Thread-117351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:19:35.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:19:35.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:19:35.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:19:35.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:19:35.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:19:35.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:19:35.734 [DEBUG] [Thread-117351] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:19:39.249 [DEBUG] [Thread-117353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:47.648 [DEBUG] [Thread-117354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:19:54.300 [DEBUG] [Thread-117355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:05.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:20:05.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:20:05.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:20:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 19, 57), 20.49, 25.16, 0.0, 9.09, 19.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:20:06.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:19:57
2025-12-03T13:20:06.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:20:06.705 [DEBUG] [Thread-117356] [transport.py] [_log()] starting thread (client mode): 0xa27c9690
2025-12-03T13:20:06.706 [DEBUG] [Thread-117356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:20:06.725 [DEBUG] [Thread-117356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:20:06.725 [INFO] [Thread-117356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:20:06.728 [DEBUG] [Thread-117356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] client lang: <none>
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] server lang: <none>
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] kex follows: False
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:20:06.729 [DEBUG] [Thread-117356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:20:06.730 [DEBUG] [Thread-117356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:20:06.730 [DEBUG] [Thread-117356] [transport.py] [_log()] Compression: none
2025-12-03T13:20:06.730 [DEBUG] [Thread-117356] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:20:06.747 [DEBUG] [Thread-117356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:20:06.748 [DEBUG] [Thread-117356] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:20:06.748 [DEBUG] [Thread-117356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:20:06.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:20:06.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:20:06.750 [DEBUG] [Thread-117356] [transport.py] [_log()] userauth is OK
2025-12-03T13:20:06.750 [DEBUG] [Thread-117356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:20:06.750 [DEBUG] [Thread-117356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:20:06.750 [DEBUG] [Thread-117356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:20:06.751 [DEBUG] [Thread-117356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:20:06.775 [INFO] [Thread-117356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:20:06.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:20:07.649 [DEBUG] [Thread-117356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:20:07.649 [DEBUG] [Thread-117356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:20:07.649 [DEBUG] [Thread-117356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:20:07.690 [DEBUG] [Thread-117356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:20:07.690 [DEBUG] [Thread-117356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:20:07.693 [DEBUG] [Thread-117356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:20:07.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:20:07.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:20:07.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:20:07.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:20:07.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:20:07.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:20:07.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:20:07.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:20:07.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:20:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.471925 -999.00  +19.60   4.82     31   +2.10 1 1 1 1 1   888    0 18.74 29.64 ----- 1.9 4.8 69.0 12.4 28.3 -25.0 27.7 -25.9 28.3 -24.5 29.4 -23.4
2025-12-03T13:20:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:20:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:20:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.471925
2025-12-03T13:20:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:20:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:20:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:20:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:20:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:20:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:19:57', tmtdew=20.49, humidity=25.16, cloud=0.0, wind=9.09, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:19:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:20:07.719 [DEBUG] [Thread-117356] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:20:07.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:20:09.331 [DEBUG] [Thread-117359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:10.428 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:10.429 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:24.374 [DEBUG] [Thread-117360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:39.400 [DEBUG] [Thread-117361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:47.694 [DEBUG] [Thread-117362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:20:54.428 [DEBUG] [Thread-117363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:09.460 [DEBUG] [Thread-117364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:10.566 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:10.567 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:24.487 [DEBUG] [Thread-117365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:39.517 [DEBUG] [Thread-117366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:47.739 [DEBUG] [Thread-117367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:21:54.546 [DEBUG] [Thread-117368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:09.570 [DEBUG] [Thread-117369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:10.722 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:10.723 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:22.230 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T13:22:24.596 [DEBUG] [Thread-117370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:39.623 [DEBUG] [Thread-117371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:47.772 [DEBUG] [Thread-117372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:52.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:22:52.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:22:52.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:22:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 22, 37), 20.83, 24.44, 0.0, 10.55, 19.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:22:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:22:37
2025-12-03T13:22:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:22:53.220 [DEBUG] [Thread-117373] [transport.py] [_log()] starting thread (client mode): 0xa5199d20
2025-12-03T13:22:53.220 [DEBUG] [Thread-117373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:22:53.241 [DEBUG] [Thread-117373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:22:53.241 [INFO] [Thread-117373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] client lang: <none>
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] server lang: <none>
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] kex follows: False
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] Compression: none
2025-12-03T13:22:53.243 [DEBUG] [Thread-117373] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:22:53.251 [DEBUG] [Thread-117373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:22:53.252 [DEBUG] [Thread-117373] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:22:53.252 [DEBUG] [Thread-117373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:22:53.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:22:53.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:22:53.253 [DEBUG] [Thread-117373] [transport.py] [_log()] userauth is OK
2025-12-03T13:22:53.253 [DEBUG] [Thread-117373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:22:53.253 [DEBUG] [Thread-117373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:22:53.253 [DEBUG] [Thread-117373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:22:53.253 [DEBUG] [Thread-117373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:22:53.266 [INFO] [Thread-117373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:22:53.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:22:53.865 [DEBUG] [Thread-117373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:22:53.865 [DEBUG] [Thread-117373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:22:53.865 [DEBUG] [Thread-117373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:22:53.906 [DEBUG] [Thread-117373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:22:53.906 [DEBUG] [Thread-117373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:22:53.909 [DEBUG] [Thread-117373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:22:53.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:22:53.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:22:53.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:22:53.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:22:53.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:22:53.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:22:53.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:22:53.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:22:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:22:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.474008 -999.00  +20.20   9.07     29   +1.90 1 1 1 1 1   888    0 18.40 28.77 ----- 9.8 9.1 202.8 11.3 28.7 -26.2 27.8 -26.1 28.8 -23.9 29.4 -26.8
2025-12-03T13:22:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:22:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:22:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.474008
2025-12-03T13:22:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:22:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:22:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:22:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:22:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:22:53.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:22:37', tmtdew=20.83, humidity=24.44, cloud=0.0, wind=10.55, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:22:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:22:53.931 [DEBUG] [Thread-117373] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:22:54.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:22:54.028 [DEBUG] [Thread-117376] [transport.py] [_log()] starting thread (client mode): 0xa27c9420
2025-12-03T13:22:54.028 [DEBUG] [Thread-117376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:22:54.042 [DEBUG] [Thread-117376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:22:54.043 [INFO] [Thread-117376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:22:54.050 [DEBUG] [Thread-117376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:22:54.050 [DEBUG] [Thread-117376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:22:54.050 [DEBUG] [Thread-117376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:22:54.050 [DEBUG] [Thread-117376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:22:54.050 [DEBUG] [Thread-117376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] client lang: <none>
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] server lang: <none>
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] kex follows: False
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:22:54.051 [DEBUG] [Thread-117376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:22:54.052 [DEBUG] [Thread-117376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:22:54.052 [DEBUG] [Thread-117376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:22:54.052 [DEBUG] [Thread-117376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:22:54.052 [DEBUG] [Thread-117376] [transport.py] [_log()] Compression: none
2025-12-03T13:22:54.052 [DEBUG] [Thread-117376] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:22:54.109 [DEBUG] [Thread-117376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:22:54.110 [DEBUG] [Thread-117376] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:22:54.110 [DEBUG] [Thread-117376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:22:54.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:22:54.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:22:54.167 [DEBUG] [Thread-117376] [transport.py] [_log()] userauth is OK
2025-12-03T13:22:54.167 [DEBUG] [Thread-117376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:22:54.167 [DEBUG] [Thread-117376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:22:54.167 [DEBUG] [Thread-117376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:22:54.167 [DEBUG] [Thread-117376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:22:54.186 [INFO] [Thread-117376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:22:54.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:22:54.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:22:54.654 [DEBUG] [Thread-117378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:22:55.007 [DEBUG] [Thread-117376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:22:55.008 [DEBUG] [Thread-117376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:22:55.056 [DEBUG] [Thread-117376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:22:55.057 [DEBUG] [Thread-117376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:22:55.067 [DEBUG] [Thread-117376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:22:55.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:22:55.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:22:55.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:22:55.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:22:55.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:22:55.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:22:55.113 [DEBUG] [Thread-117376] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:23:09.695 [DEBUG] [Thread-117379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:10.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:10.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:24.725 [DEBUG] [Thread-117380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:25.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:23:25.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:23:25.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:23:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 23, 10), 20.84, 24.42, 0.0, 7.84, 19.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:23:25.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:23:10
2025-12-03T13:23:25.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:23:26.083 [DEBUG] [Thread-117381] [transport.py] [_log()] starting thread (client mode): 0xa27c9690
2025-12-03T13:23:26.083 [DEBUG] [Thread-117381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:23:26.105 [DEBUG] [Thread-117381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:23:26.105 [INFO] [Thread-117381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] client lang: <none>
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] server lang: <none>
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] kex follows: False
2025-12-03T13:23:26.108 [DEBUG] [Thread-117381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] Compression: none
2025-12-03T13:23:26.109 [DEBUG] [Thread-117381] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:23:26.126 [DEBUG] [Thread-117381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:23:26.126 [DEBUG] [Thread-117381] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:23:26.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:23:26.127 [DEBUG] [Thread-117381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:23:26.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:23:26.129 [DEBUG] [Thread-117381] [transport.py] [_log()] userauth is OK
2025-12-03T13:23:26.129 [DEBUG] [Thread-117381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:23:26.130 [DEBUG] [Thread-117381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:23:26.130 [DEBUG] [Thread-117381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:23:26.130 [DEBUG] [Thread-117381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:23:26.165 [INFO] [Thread-117381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:23:26.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:23:26.815 [DEBUG] [Thread-117381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:23:26.815 [DEBUG] [Thread-117381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:23:26.815 [DEBUG] [Thread-117381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:23:26.856 [DEBUG] [Thread-117381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:23:26.856 [DEBUG] [Thread-117381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:23:26.859 [DEBUG] [Thread-117381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:23:26.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:23:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:23:26.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:23:26.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:23:26.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:23:26.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:23:26.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:23:26.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.474355 -999.00  +20.30   8.59     29   +1.90 1 1 1 1 1   888    0 18.77 31.88 ----- 10.1 8.6 203.1 15.0 28.6 -27.1 27.8 -30.2 28.6 -26.0 29.4 -26.8
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.474355
2025-12-03T13:23:26.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:23:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:23:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:23:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:23:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:23:26.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:23:10', tmtdew=20.84, humidity=24.42, cloud=0.0, wind=7.84, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:23:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:23:26.885 [DEBUG] [Thread-117381] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:23:26.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:23:26.981 [DEBUG] [Thread-117384] [transport.py] [_log()] starting thread (client mode): 0xa27c1fc0
2025-12-03T13:23:26.982 [DEBUG] [Thread-117384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:23:26.996 [DEBUG] [Thread-117384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:23:26.996 [INFO] [Thread-117384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:27.004 [DEBUG] [Thread-117384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] client lang: <none>
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] server lang: <none>
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] kex follows: False
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:23:27.005 [DEBUG] [Thread-117384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:23:27.006 [DEBUG] [Thread-117384] [transport.py] [_log()] Compression: none
2025-12-03T13:23:27.006 [DEBUG] [Thread-117384] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:23:27.064 [DEBUG] [Thread-117384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:23:27.065 [DEBUG] [Thread-117384] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:23:27.065 [DEBUG] [Thread-117384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:23:27.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:23:27.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:23:27.120 [DEBUG] [Thread-117384] [transport.py] [_log()] userauth is OK
2025-12-03T13:23:27.120 [DEBUG] [Thread-117384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:23:27.120 [DEBUG] [Thread-117384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:23:27.120 [DEBUG] [Thread-117384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:23:27.121 [DEBUG] [Thread-117384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:23:27.139 [INFO] [Thread-117384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:23:27.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:23:27.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:23:27.960 [DEBUG] [Thread-117384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:23:27.960 [DEBUG] [Thread-117384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:23:28.008 [DEBUG] [Thread-117384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:23:28.008 [DEBUG] [Thread-117384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:23:28.017 [DEBUG] [Thread-117384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:23:28.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:23:28.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:23:28.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:23:28.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:23:28.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:23:28.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:23:28.051 [DEBUG] [Thread-117384] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:23:39.754 [DEBUG] [Thread-117386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:47.815 [DEBUG] [Thread-117387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:54.802 [DEBUG] [Thread-117388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:23:58.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:23:58.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:23:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:23:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 23, 42), 20.8, 24.69, 0.0, 22.11, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:23:58.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:23:42
2025-12-03T13:23:58.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:23:59.028 [DEBUG] [Thread-117389] [transport.py] [_log()] starting thread (client mode): 0xa27b7dc0
2025-12-03T13:23:59.028 [DEBUG] [Thread-117389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:23:59.048 [DEBUG] [Thread-117389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:23:59.048 [INFO] [Thread-117389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] client lang: <none>
2025-12-03T13:23:59.052 [DEBUG] [Thread-117389] [transport.py] [_log()] server lang: <none>
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] kex follows: False
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] Compression: none
2025-12-03T13:23:59.053 [DEBUG] [Thread-117389] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:23:59.072 [DEBUG] [Thread-117389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:23:59.073 [DEBUG] [Thread-117389] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:23:59.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:23:59.074 [DEBUG] [Thread-117389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:23:59.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:23:59.076 [DEBUG] [Thread-117389] [transport.py] [_log()] userauth is OK
2025-12-03T13:23:59.076 [DEBUG] [Thread-117389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:23:59.076 [DEBUG] [Thread-117389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:23:59.076 [DEBUG] [Thread-117389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:23:59.076 [DEBUG] [Thread-117389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:23:59.111 [INFO] [Thread-117389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:23:59.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:23:59.734 [DEBUG] [Thread-117389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:23:59.734 [DEBUG] [Thread-117389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:23:59.735 [DEBUG] [Thread-117389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:23:59.776 [DEBUG] [Thread-117389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:23:59.776 [DEBUG] [Thread-117389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:23:59.779 [DEBUG] [Thread-117389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:23:59.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:23:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:23:59.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:23:59.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:23:59.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:23:59.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:23:59.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:23:59.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.474702 -999.00  +20.60  10.41     29   +2.00 1 1 1 1 1   888    0 18.88 36.66 ----- 16.6 10.4 173.4 16.7 28.7 -25.6 27.9 -24.8 28.8 -24.3 29.5 -24.8
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.474702
2025-12-03T13:23:59.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:23:59.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:23:42', tmtdew=20.8, humidity=24.69, cloud=0.0, wind=22.11, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:23:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:23:59.802 [DEBUG] [Thread-117389] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:23:59.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:23:59.909 [DEBUG] [Thread-117392] [transport.py] [_log()] starting thread (client mode): 0xa2709d20
2025-12-03T13:23:59.909 [DEBUG] [Thread-117392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:23:59.924 [DEBUG] [Thread-117392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:23:59.924 [INFO] [Thread-117392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:23:59.931 [DEBUG] [Thread-117392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] client lang: <none>
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] server lang: <none>
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] kex follows: False
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] Compression: none
2025-12-03T13:23:59.932 [DEBUG] [Thread-117392] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:23:59.988 [DEBUG] [Thread-117392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:23:59.988 [DEBUG] [Thread-117392] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:23:59.989 [DEBUG] [Thread-117392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:23:59.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:23:59.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:24:00.044 [DEBUG] [Thread-117392] [transport.py] [_log()] userauth is OK
2025-12-03T13:24:00.044 [DEBUG] [Thread-117392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:24:00.045 [DEBUG] [Thread-117392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:24:00.045 [DEBUG] [Thread-117392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:24:00.045 [DEBUG] [Thread-117392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:24:00.062 [INFO] [Thread-117392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:24:00.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:24:00.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:24:00.887 [DEBUG] [Thread-117392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:24:00.887 [DEBUG] [Thread-117392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:24:00.935 [DEBUG] [Thread-117392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:24:00.935 [DEBUG] [Thread-117392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:24:00.945 [DEBUG] [Thread-117392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:24:00.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:24:00.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:24:00.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:24:00.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:24:00.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:24:00.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:24:00.980 [DEBUG] [Thread-117392] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:24:09.830 [DEBUG] [Thread-117394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:11.007 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:11.009 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:24.872 [DEBUG] [Thread-117395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:31.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:24:31.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:24:31.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:24:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 24, 14), 21.01, 24.37, 0.0, 22.71, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:24:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:24:14
2025-12-03T13:24:31.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:24:32.002 [DEBUG] [Thread-117396] [transport.py] [_log()] starting thread (client mode): 0xa51cdd20
2025-12-03T13:24:32.003 [DEBUG] [Thread-117396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:24:32.021 [DEBUG] [Thread-117396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:24:32.021 [INFO] [Thread-117396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] client lang: <none>
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] server lang: <none>
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] kex follows: False
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] Compression: none
2025-12-03T13:24:32.025 [DEBUG] [Thread-117396] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:24:32.042 [DEBUG] [Thread-117396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:24:32.042 [DEBUG] [Thread-117396] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:24:32.043 [DEBUG] [Thread-117396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:24:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:24:32.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:24:32.044 [DEBUG] [Thread-117396] [transport.py] [_log()] userauth is OK
2025-12-03T13:24:32.044 [DEBUG] [Thread-117396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:24:32.044 [DEBUG] [Thread-117396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:24:32.044 [DEBUG] [Thread-117396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:24:32.044 [DEBUG] [Thread-117396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:24:32.059 [INFO] [Thread-117396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:24:32.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:24:32.716 [DEBUG] [Thread-117396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:24:32.716 [DEBUG] [Thread-117396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:24:32.716 [DEBUG] [Thread-117396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:24:32.758 [DEBUG] [Thread-117396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:24:32.758 [DEBUG] [Thread-117396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:24:32.760 [DEBUG] [Thread-117396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:24:32.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:24:32.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:24:32.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:24:32.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:24:32.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:24:32.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:24:32.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.475050 -999.00  +21.00  16.53     28   +2.10 1 1 1 1 1   888    0 18.91 37.32 ----- 10.5 16.5 204.0 18.5 28.7 -26.7 27.9 -26.3 28.8 -24.5 29.5 -25.4
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.475050
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:24:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:24:14', tmtdew=21.01, humidity=24.37, cloud=0.0, wind=22.71, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:24:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:24:32.778 [DEBUG] [Thread-117396] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:24:32.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:24:32.864 [DEBUG] [Thread-117399] [transport.py] [_log()] starting thread (client mode): 0xa51cec80
2025-12-03T13:24:32.864 [DEBUG] [Thread-117399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:24:32.879 [DEBUG] [Thread-117399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:24:32.879 [INFO] [Thread-117399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] client lang: <none>
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] server lang: <none>
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] kex follows: False
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:24:32.886 [DEBUG] [Thread-117399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:24:32.887 [DEBUG] [Thread-117399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:24:32.887 [DEBUG] [Thread-117399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:24:32.887 [DEBUG] [Thread-117399] [transport.py] [_log()] Compression: none
2025-12-03T13:24:32.887 [DEBUG] [Thread-117399] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:24:32.945 [DEBUG] [Thread-117399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:24:32.945 [DEBUG] [Thread-117399] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:24:32.945 [DEBUG] [Thread-117399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:24:32.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:24:32.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:24:33.005 [DEBUG] [Thread-117399] [transport.py] [_log()] userauth is OK
2025-12-03T13:24:33.005 [DEBUG] [Thread-117399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:24:33.005 [DEBUG] [Thread-117399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:24:33.005 [DEBUG] [Thread-117399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:24:33.005 [DEBUG] [Thread-117399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:24:33.018 [INFO] [Thread-117399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:24:33.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:24:33.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:24:33.850 [DEBUG] [Thread-117399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:24:33.850 [DEBUG] [Thread-117399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:24:33.898 [DEBUG] [Thread-117399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:24:33.898 [DEBUG] [Thread-117399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:24:33.906 [DEBUG] [Thread-117399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:24:33.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:24:33.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:24:33.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:24:33.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:24:33.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:24:33.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:24:33.938 [DEBUG] [Thread-117399] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:24:39.900 [DEBUG] [Thread-117401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:47.869 [DEBUG] [Thread-117402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:24:54.953 [DEBUG] [Thread-117403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:03.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:25:03.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:25:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:25:04.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 24, 46), 21.5, 23.76, 0.0, 19.62, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:25:04.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:24:46
2025-12-03T13:25:04.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:25:04.918 [DEBUG] [Thread-117404] [transport.py] [_log()] starting thread (client mode): 0xa27c2ce0
2025-12-03T13:25:04.918 [DEBUG] [Thread-117404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:25:04.939 [DEBUG] [Thread-117404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:25:04.939 [INFO] [Thread-117404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:04.942 [DEBUG] [Thread-117404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] client lang: <none>
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] server lang: <none>
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] kex follows: False
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] Compression: none
2025-12-03T13:25:04.943 [DEBUG] [Thread-117404] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:25:04.959 [DEBUG] [Thread-117404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:25:04.959 [DEBUG] [Thread-117404] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:25:04.960 [DEBUG] [Thread-117404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:25:04.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:25:04.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:25:04.961 [DEBUG] [Thread-117404] [transport.py] [_log()] userauth is OK
2025-12-03T13:25:04.961 [DEBUG] [Thread-117404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:25:04.961 [DEBUG] [Thread-117404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:25:04.961 [DEBUG] [Thread-117404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:25:04.961 [DEBUG] [Thread-117404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:25:04.985 [INFO] [Thread-117404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:25:04.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:25:05.798 [DEBUG] [Thread-117404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:25:05.799 [DEBUG] [Thread-117404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:25:05.799 [DEBUG] [Thread-117404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:25:05.840 [DEBUG] [Thread-117404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:25:05.840 [DEBUG] [Thread-117404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:25:05.843 [DEBUG] [Thread-117404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:25:05.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:25:05.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:25:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:25:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:25:05.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:25:05.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:25:05.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:25:05.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.475397 -999.00  +21.20   8.70     28   +2.00 1 1 1 1 1   888    0 19.28 46.16 ----- 13.8 8.7 216.0 18.0 28.6 -26.0 27.9 -27.7 28.7 -24.8 29.4 -26.8
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.475397
2025-12-03T13:25:05.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:25:05.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:25:05.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:25:05.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:25:05.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:25:05.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:24:46', tmtdew=21.5, humidity=23.76, cloud=0.0, wind=19.62, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:24:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:25:05.879 [DEBUG] [Thread-117404] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:25:05.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:25:05.975 [DEBUG] [Thread-117407] [transport.py] [_log()] starting thread (client mode): 0xa51ce0e0
2025-12-03T13:25:05.975 [DEBUG] [Thread-117407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:25:05.989 [DEBUG] [Thread-117407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:25:05.990 [INFO] [Thread-117407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:25:05.997 [DEBUG] [Thread-117407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:25:05.997 [DEBUG] [Thread-117407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:25:05.997 [DEBUG] [Thread-117407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:25:05.997 [DEBUG] [Thread-117407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] client lang: <none>
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] server lang: <none>
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] kex follows: False
2025-12-03T13:25:05.998 [DEBUG] [Thread-117407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] Compression: none
2025-12-03T13:25:05.999 [DEBUG] [Thread-117407] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:25:06.056 [DEBUG] [Thread-117407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:25:06.057 [DEBUG] [Thread-117407] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:25:06.058 [DEBUG] [Thread-117407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:25:06.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:25:06.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:25:06.113 [DEBUG] [Thread-117407] [transport.py] [_log()] userauth is OK
2025-12-03T13:25:06.114 [DEBUG] [Thread-117407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:25:06.114 [DEBUG] [Thread-117407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:25:06.114 [DEBUG] [Thread-117407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:25:06.114 [DEBUG] [Thread-117407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:25:06.132 [INFO] [Thread-117407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:25:06.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:25:06.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:25:06.958 [DEBUG] [Thread-117407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:25:06.958 [DEBUG] [Thread-117407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:25:07.005 [DEBUG] [Thread-117407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:25:07.006 [DEBUG] [Thread-117407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:25:07.014 [DEBUG] [Thread-117407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:25:07.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:25:07.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:25:07.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:25:07.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:25:07.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:25:07.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:25:07.049 [DEBUG] [Thread-117407] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:25:09.983 [DEBUG] [Thread-117409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:11.150 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:11.151 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:25.020 [DEBUG] [Thread-117410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:37.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:25:37.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:25:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:25:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 25, 18), 21.36, 23.94, 0.0, 16.09, 19.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:25:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:25:18
2025-12-03T13:25:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:25:38.011 [DEBUG] [Thread-117411] [transport.py] [_log()] starting thread (client mode): 0xa27a3f40
2025-12-03T13:25:38.011 [DEBUG] [Thread-117411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:25:38.031 [DEBUG] [Thread-117411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:25:38.031 [INFO] [Thread-117411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] client lang: <none>
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] server lang: <none>
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] kex follows: False
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] Compression: none
2025-12-03T13:25:38.034 [DEBUG] [Thread-117411] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:25:38.054 [DEBUG] [Thread-117411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:25:38.054 [DEBUG] [Thread-117411] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:25:38.055 [DEBUG] [Thread-117411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:25:38.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:25:38.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:25:38.057 [DEBUG] [Thread-117411] [transport.py] [_log()] userauth is OK
2025-12-03T13:25:38.057 [DEBUG] [Thread-117411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:25:38.057 [DEBUG] [Thread-117411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:25:38.057 [DEBUG] [Thread-117411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:25:38.057 [DEBUG] [Thread-117411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:25:38.071 [INFO] [Thread-117411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:25:38.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:25:38.720 [DEBUG] [Thread-117411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:25:38.720 [DEBUG] [Thread-117411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:25:38.720 [DEBUG] [Thread-117411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:25:38.761 [DEBUG] [Thread-117411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:25:38.761 [DEBUG] [Thread-117411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:25:38.764 [DEBUG] [Thread-117411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:25:38.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:25:38.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:25:38.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:25:38.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:25:38.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:25:38.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:25:38.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:25:38.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:25:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:25:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.475744 -999.00  +21.30  15.35     27   +1.70 1 1 1 1 1   888    0 19.30 50.47 ----- 12.4 15.3 191.2 18.0 28.7 -27.3 27.9 -24.9 28.8 -23.3 29.4 -24.4
2025-12-03T13:25:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:25:38.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:25:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.475744
2025-12-03T13:25:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:25:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:25:38.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:25:38.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:25:38.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:25:38.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:25:18', tmtdew=21.36, humidity=23.94, cloud=0.0, wind=16.09, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:25:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:25:38.790 [DEBUG] [Thread-117411] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:25:38.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:25:38.886 [DEBUG] [Thread-117414] [transport.py] [_log()] starting thread (client mode): 0xa27084f0
2025-12-03T13:25:38.886 [DEBUG] [Thread-117414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:25:38.901 [DEBUG] [Thread-117414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:25:38.901 [INFO] [Thread-117414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:25:38.909 [DEBUG] [Thread-117414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] client lang: <none>
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] server lang: <none>
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] kex follows: False
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] Compression: none
2025-12-03T13:25:38.910 [DEBUG] [Thread-117414] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:25:38.969 [DEBUG] [Thread-117414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:25:38.970 [DEBUG] [Thread-117414] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:25:38.970 [DEBUG] [Thread-117414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:25:38.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:25:38.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:25:39.026 [DEBUG] [Thread-117414] [transport.py] [_log()] userauth is OK
2025-12-03T13:25:39.026 [DEBUG] [Thread-117414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:25:39.026 [DEBUG] [Thread-117414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:25:39.026 [DEBUG] [Thread-117414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:25:39.026 [DEBUG] [Thread-117414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:25:39.045 [INFO] [Thread-117414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:25:39.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:25:39.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:25:39.867 [DEBUG] [Thread-117414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:25:39.867 [DEBUG] [Thread-117414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:25:39.915 [DEBUG] [Thread-117414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:25:39.915 [DEBUG] [Thread-117414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:25:39.924 [DEBUG] [Thread-117414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:25:39.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:25:39.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:25:39.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:25:39.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:25:39.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:25:39.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:25:39.964 [DEBUG] [Thread-117414] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:25:40.055 [DEBUG] [Thread-117416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:47.897 [DEBUG] [Thread-117417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:25:55.097 [DEBUG] [Thread-117418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:26:09.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:26:09.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:26:10.126 [DEBUG] [Thread-117419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 25, 50), 20.96, 24.22, 0.0, 15.02, 19.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:26:10.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:25:50
2025-12-03T13:26:10.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:26:10.940 [DEBUG] [Thread-117420] [transport.py] [_log()] starting thread (client mode): 0xa27a3850
2025-12-03T13:26:10.940 [DEBUG] [Thread-117420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:26:10.959 [DEBUG] [Thread-117420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:26:10.960 [INFO] [Thread-117420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:26:10.963 [DEBUG] [Thread-117420] [transport.py] [_log()] client lang: <none>
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] server lang: <none>
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] kex follows: False
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] Compression: none
2025-12-03T13:26:10.964 [DEBUG] [Thread-117420] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:26:10.973 [DEBUG] [Thread-117420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:26:10.974 [DEBUG] [Thread-117420] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:26:10.974 [DEBUG] [Thread-117420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:26:10.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:26:10.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:26:10.976 [DEBUG] [Thread-117420] [transport.py] [_log()] userauth is OK
2025-12-03T13:26:10.976 [DEBUG] [Thread-117420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:26:10.976 [DEBUG] [Thread-117420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:26:10.976 [DEBUG] [Thread-117420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:26:10.976 [DEBUG] [Thread-117420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:26:10.989 [INFO] [Thread-117420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:26:10.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:26:11.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:11.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:11.619 [DEBUG] [Thread-117420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:26:11.619 [DEBUG] [Thread-117420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:26:11.619 [DEBUG] [Thread-117420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:26:11.660 [DEBUG] [Thread-117420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:26:11.660 [DEBUG] [Thread-117420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:26:11.663 [DEBUG] [Thread-117420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:26:11.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:26:11.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:26:11.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:26:11.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:26:11.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:26:11.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:26:11.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:26:11.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.476091 -999.00  +21.30  12.46     27   +1.90 1 1 1 1 1   888    0 19.60 55.95 ----- 9.5 12.5 158.4 16.6 28.9 -24.9 27.8 -24.7 28.8 -22.0 29.4 -25.6
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.476091
2025-12-03T13:26:11.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:26:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:26:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:26:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:26:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:26:11.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:25:50', tmtdew=20.96, humidity=24.22, cloud=0.0, wind=15.02, temperature=19.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:25:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:26:11.688 [DEBUG] [Thread-117420] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:26:11.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:26:11.784 [DEBUG] [Thread-117423] [transport.py] [_log()] starting thread (client mode): 0xa27a06a0
2025-12-03T13:26:11.784 [DEBUG] [Thread-117423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:26:11.800 [DEBUG] [Thread-117423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:26:11.800 [INFO] [Thread-117423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:26:11.807 [DEBUG] [Thread-117423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:26:11.807 [DEBUG] [Thread-117423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:26:11.807 [DEBUG] [Thread-117423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] client lang: <none>
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] server lang: <none>
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] kex follows: False
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] Compression: none
2025-12-03T13:26:11.808 [DEBUG] [Thread-117423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:26:11.867 [DEBUG] [Thread-117423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:26:11.867 [DEBUG] [Thread-117423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:26:11.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:26:11.868 [DEBUG] [Thread-117423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:26:11.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:26:11.922 [DEBUG] [Thread-117423] [transport.py] [_log()] userauth is OK
2025-12-03T13:26:11.923 [DEBUG] [Thread-117423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:26:11.923 [DEBUG] [Thread-117423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:26:11.923 [DEBUG] [Thread-117423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:26:11.923 [DEBUG] [Thread-117423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:26:11.941 [INFO] [Thread-117423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:26:11.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:26:11.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:26:12.731 [DEBUG] [Thread-117423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:26:12.731 [DEBUG] [Thread-117423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:26:12.779 [DEBUG] [Thread-117423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:26:12.779 [DEBUG] [Thread-117423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:26:12.788 [DEBUG] [Thread-117423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:26:12.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:26:12.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:26:12.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:26:12.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:26:12.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:26:12.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:26:12.822 [DEBUG] [Thread-117423] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:26:25.149 [DEBUG] [Thread-117425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:40.185 [DEBUG] [Thread-117426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:42.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:26:42.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:26:42.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:26:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 26, 22), 21.14, 23.92, 0.0, 14.84, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:26:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:26:22
2025-12-03T13:26:43.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:26:43.794 [DEBUG] [Thread-117427] [transport.py] [_log()] starting thread (client mode): 0xa27a3550
2025-12-03T13:26:43.794 [DEBUG] [Thread-117427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:26:43.813 [DEBUG] [Thread-117427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:26:43.813 [INFO] [Thread-117427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:26:43.816 [DEBUG] [Thread-117427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:26:43.816 [DEBUG] [Thread-117427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] client lang: <none>
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] server lang: <none>
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] kex follows: False
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:26:43.817 [DEBUG] [Thread-117427] [transport.py] [_log()] Compression: none
2025-12-03T13:26:43.818 [DEBUG] [Thread-117427] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:26:43.836 [DEBUG] [Thread-117427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:26:43.836 [DEBUG] [Thread-117427] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:26:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:26:43.837 [DEBUG] [Thread-117427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:26:43.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:26:43.839 [DEBUG] [Thread-117427] [transport.py] [_log()] userauth is OK
2025-12-03T13:26:43.840 [DEBUG] [Thread-117427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:26:43.840 [DEBUG] [Thread-117427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:26:43.840 [DEBUG] [Thread-117427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:26:43.840 [DEBUG] [Thread-117427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:26:43.874 [INFO] [Thread-117427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:26:43.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:26:44.484 [DEBUG] [Thread-117427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:26:44.484 [DEBUG] [Thread-117427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:26:44.484 [DEBUG] [Thread-117427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:26:44.525 [DEBUG] [Thread-117427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:26:44.525 [DEBUG] [Thread-117427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:26:44.528 [DEBUG] [Thread-117427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:26:44.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:26:44.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:26:44.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:26:44.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:26:44.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:26:44.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:26:44.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:26:44.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:26:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:26:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.476438 -999.00  +21.50   7.31     27   +1.90 1 1 1 1 1   888    0 19.87 68.69 ----- 6.0 7.3 157.2 13.5 29.1 -24.3 28.1 -25.6 29.0 -24.1 29.7 -25.4
2025-12-03T13:26:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:26:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:26:44.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.476438
2025-12-03T13:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:26:44.554 [DEBUG] [Thread-117427] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:26:44.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:26:22', tmtdew=21.14, humidity=23.92, cloud=0.0, wind=14.84, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:26:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:26:44.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:26:44.653 [DEBUG] [Thread-117430] [transport.py] [_log()] starting thread (client mode): 0xa51cc100
2025-12-03T13:26:44.653 [DEBUG] [Thread-117430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:26:44.671 [DEBUG] [Thread-117430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:26:44.671 [INFO] [Thread-117430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:26:44.685 [DEBUG] [Thread-117430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:26:44.686 [DEBUG] [Thread-117430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] client lang: <none>
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] server lang: <none>
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] kex follows: False
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:26:44.687 [DEBUG] [Thread-117430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:26:44.688 [DEBUG] [Thread-117430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:26:44.688 [DEBUG] [Thread-117430] [transport.py] [_log()] Compression: none
2025-12-03T13:26:44.688 [DEBUG] [Thread-117430] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:26:44.744 [DEBUG] [Thread-117430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:26:44.745 [DEBUG] [Thread-117430] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:26:44.745 [DEBUG] [Thread-117430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:26:44.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:26:44.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:26:44.803 [DEBUG] [Thread-117430] [transport.py] [_log()] userauth is OK
2025-12-03T13:26:44.803 [DEBUG] [Thread-117430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:26:44.803 [DEBUG] [Thread-117430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:26:44.803 [DEBUG] [Thread-117430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:26:44.803 [DEBUG] [Thread-117430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:26:44.822 [INFO] [Thread-117430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:26:44.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:26:44.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:26:45.651 [DEBUG] [Thread-117430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:26:45.651 [DEBUG] [Thread-117430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:26:45.699 [DEBUG] [Thread-117430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:26:45.699 [DEBUG] [Thread-117430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:26:45.708 [DEBUG] [Thread-117430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:26:45.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:26:45.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:26:45.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:26:45.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:26:45.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:26:45.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:26:45.743 [DEBUG] [Thread-117430] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:26:47.950 [DEBUG] [Thread-117432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:26:55.213 [DEBUG] [Thread-117433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:10.248 [DEBUG] [Thread-117434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:11.427 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:11.429 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:15.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:27:15.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:27:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:27:16.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 26, 54), 21.45, 23.47, 0.0, 13.16, 20.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:27:16.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:26:54
2025-12-03T13:27:16.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:27:16.726 [DEBUG] [Thread-117435] [transport.py] [_log()] starting thread (client mode): 0xa27a0370
2025-12-03T13:27:16.726 [DEBUG] [Thread-117435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:27:16.748 [DEBUG] [Thread-117435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:27:16.748 [INFO] [Thread-117435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:27:16.751 [DEBUG] [Thread-117435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] client lang: <none>
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] server lang: <none>
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] kex follows: False
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] Compression: none
2025-12-03T13:27:16.752 [DEBUG] [Thread-117435] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:27:16.762 [DEBUG] [Thread-117435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:27:16.763 [DEBUG] [Thread-117435] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:27:16.763 [DEBUG] [Thread-117435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:27:16.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:27:16.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:27:16.765 [DEBUG] [Thread-117435] [transport.py] [_log()] userauth is OK
2025-12-03T13:27:16.765 [DEBUG] [Thread-117435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:27:16.765 [DEBUG] [Thread-117435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:27:16.765 [DEBUG] [Thread-117435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:27:16.765 [DEBUG] [Thread-117435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:27:16.804 [INFO] [Thread-117435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:27:16.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:27:17.442 [DEBUG] [Thread-117435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:27:17.442 [DEBUG] [Thread-117435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:27:17.442 [DEBUG] [Thread-117435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:27:17.483 [DEBUG] [Thread-117435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:27:17.483 [DEBUG] [Thread-117435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:27:17.485 [DEBUG] [Thread-117435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:27:17.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:27:17.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:27:17.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:27:17.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:27:17.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:27:17.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:27:17.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:27:17.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:27:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:27:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.477133 -999.00  +21.30   6.60     27   +1.80 1 1 1 1 1   888    0 20.29 79.15 ----- 8.7 6.6 172.4 14.9 29.2 -26.7 28.3 -25.0 29.2 -23.5 29.9 -25.4
2025-12-03T13:27:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:27:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:27:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.477133
2025-12-03T13:27:17.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:27:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:27:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:27:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:27:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:27:17.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:26:54', tmtdew=21.45, humidity=23.47, cloud=0.0, wind=13.16, temperature=20.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:27:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:27:17.509 [DEBUG] [Thread-117435] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:27:17.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:27:17.604 [DEBUG] [Thread-117438] [transport.py] [_log()] starting thread (client mode): 0xa27c8b50
2025-12-03T13:27:17.604 [DEBUG] [Thread-117438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:27:17.620 [DEBUG] [Thread-117438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:27:17.620 [INFO] [Thread-117438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] client lang: <none>
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] server lang: <none>
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] kex follows: False
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:27:17.628 [DEBUG] [Thread-117438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:27:17.629 [DEBUG] [Thread-117438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:27:17.629 [DEBUG] [Thread-117438] [transport.py] [_log()] Compression: none
2025-12-03T13:27:17.629 [DEBUG] [Thread-117438] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:27:17.690 [DEBUG] [Thread-117438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:27:17.690 [DEBUG] [Thread-117438] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:27:17.691 [DEBUG] [Thread-117438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:27:17.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:27:17.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:27:17.754 [DEBUG] [Thread-117438] [transport.py] [_log()] userauth is OK
2025-12-03T13:27:17.754 [DEBUG] [Thread-117438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:27:17.754 [DEBUG] [Thread-117438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:27:17.754 [DEBUG] [Thread-117438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:27:17.754 [DEBUG] [Thread-117438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:27:17.779 [INFO] [Thread-117438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:27:17.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:27:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:27:18.594 [DEBUG] [Thread-117438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:27:18.594 [DEBUG] [Thread-117438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:27:18.642 [DEBUG] [Thread-117438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:27:18.642 [DEBUG] [Thread-117438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:27:18.651 [DEBUG] [Thread-117438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:27:18.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:27:18.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:27:18.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:27:18.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:27:18.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:27:18.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:27:18.685 [DEBUG] [Thread-117438] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:27:25.278 [DEBUG] [Thread-117440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:40.325 [DEBUG] [Thread-117441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:47.980 [DEBUG] [Thread-117442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:27:48.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:27:48.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:27:48.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:27:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 27, 26), 21.25, 23.74, 0.0, 11.98, 19.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:27:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:27:26
2025-12-03T13:27:49.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:27:49.657 [DEBUG] [Thread-117443] [transport.py] [_log()] starting thread (client mode): 0xa519a710
2025-12-03T13:27:49.657 [DEBUG] [Thread-117443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:27:49.679 [DEBUG] [Thread-117443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:27:49.680 [INFO] [Thread-117443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:49.683 [DEBUG] [Thread-117443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] client lang: <none>
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] server lang: <none>
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] kex follows: False
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:27:49.684 [DEBUG] [Thread-117443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:27:49.685 [DEBUG] [Thread-117443] [transport.py] [_log()] Compression: none
2025-12-03T13:27:49.685 [DEBUG] [Thread-117443] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:27:49.702 [DEBUG] [Thread-117443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:27:49.703 [DEBUG] [Thread-117443] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:27:49.703 [DEBUG] [Thread-117443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:27:49.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:27:49.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:27:49.705 [DEBUG] [Thread-117443] [transport.py] [_log()] userauth is OK
2025-12-03T13:27:49.705 [DEBUG] [Thread-117443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:27:49.706 [DEBUG] [Thread-117443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:27:49.706 [DEBUG] [Thread-117443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:27:49.706 [DEBUG] [Thread-117443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:27:49.729 [INFO] [Thread-117443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:27:49.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:27:50.379 [DEBUG] [Thread-117443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:27:50.380 [DEBUG] [Thread-117443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:27:50.380 [DEBUG] [Thread-117443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:27:50.421 [DEBUG] [Thread-117443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:27:50.421 [DEBUG] [Thread-117443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:27:50.424 [DEBUG] [Thread-117443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:27:50.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:27:50.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:27:50.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:27:50.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:27:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:27:50.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:27:50.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:27:50.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.477480 -999.00  +21.30  10.99     27   +1.70 1 1 1 1 1   888    0 20.80 89.00 ----- 9.3 11.0 170.8 13.9 29.4 -24.7 28.2 -27.8 29.4 -23.4 29.9 -26.6
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.477480
2025-12-03T13:27:50.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:27:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:27:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:27:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:27:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:27:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:27:26', tmtdew=21.25, humidity=23.74, cloud=0.0, wind=11.98, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:27:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:27:50.460 [DEBUG] [Thread-117443] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:27:50.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:27:50.555 [DEBUG] [Thread-117446] [transport.py] [_log()] starting thread (client mode): 0xa51621a0
2025-12-03T13:27:50.556 [DEBUG] [Thread-117446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:27:50.569 [DEBUG] [Thread-117446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:27:50.569 [INFO] [Thread-117446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] client lang: <none>
2025-12-03T13:27:50.577 [DEBUG] [Thread-117446] [transport.py] [_log()] server lang: <none>
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] kex follows: False
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] Compression: none
2025-12-03T13:27:50.578 [DEBUG] [Thread-117446] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:27:50.635 [DEBUG] [Thread-117446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:27:50.636 [DEBUG] [Thread-117446] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:27:50.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:27:50.636 [DEBUG] [Thread-117446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:27:50.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:27:50.692 [DEBUG] [Thread-117446] [transport.py] [_log()] userauth is OK
2025-12-03T13:27:50.692 [DEBUG] [Thread-117446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:27:50.692 [DEBUG] [Thread-117446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:27:50.693 [DEBUG] [Thread-117446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:27:50.693 [DEBUG] [Thread-117446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:27:50.711 [INFO] [Thread-117446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:27:50.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:27:50.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:27:51.545 [DEBUG] [Thread-117446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:27:51.545 [DEBUG] [Thread-117446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:27:51.594 [DEBUG] [Thread-117446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:27:51.594 [DEBUG] [Thread-117446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:27:51.603 [DEBUG] [Thread-117446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:27:51.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:27:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:27:51.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:27:51.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:27:51.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:27:51.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:27:51.637 [DEBUG] [Thread-117446] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:27:55.353 [DEBUG] [Thread-117448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:10.400 [DEBUG] [Thread-117449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:11.585 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:11.586 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:21.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:28:21.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:28:21.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:28:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 27, 58), 21.27, 23.89, 0.0, 14.56, 19.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:28:22.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:27:58
2025-12-03T13:28:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:28:22.665 [DEBUG] [Thread-117450] [transport.py] [_log()] starting thread (client mode): 0xa27ca680
2025-12-03T13:28:22.665 [DEBUG] [Thread-117450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:28:22.685 [DEBUG] [Thread-117450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:28:22.685 [INFO] [Thread-117450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] client lang: <none>
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] server lang: <none>
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] kex follows: False
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] Compression: none
2025-12-03T13:28:22.687 [DEBUG] [Thread-117450] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:28:22.698 [DEBUG] [Thread-117450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:28:22.698 [DEBUG] [Thread-117450] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:28:22.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:28:22.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] userauth is OK
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:28:22.699 [DEBUG] [Thread-117450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:28:22.712 [INFO] [Thread-117450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:28:22.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:28:23.367 [DEBUG] [Thread-117450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:28:23.367 [DEBUG] [Thread-117450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:28:23.367 [DEBUG] [Thread-117450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:28:23.408 [DEBUG] [Thread-117450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:28:23.408 [DEBUG] [Thread-117450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:28:23.410 [DEBUG] [Thread-117450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:28:23.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:28:23.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:28:23.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:28:23.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:28:23.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:28:23.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:28:23.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.477827 -999.00  +21.20  11.53     26   +1.40 1 1 1 1 1   888    0 20.66 91.23 ----- 19.9 11.5 173.8 20.1 29.3 -27.5 28.5 -29.2 29.3 -25.9 30.2 -26.8
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.477827
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:28:23.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:27:58', tmtdew=21.27, humidity=23.89, cloud=0.0, wind=14.56, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:28:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:28:23.427 [DEBUG] [Thread-117450] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:28:23.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:28:23.514 [DEBUG] [Thread-117453] [transport.py] [_log()] starting thread (client mode): 0xa27a06a0
2025-12-03T13:28:23.514 [DEBUG] [Thread-117453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:28:23.528 [DEBUG] [Thread-117453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:28:23.528 [INFO] [Thread-117453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] client lang: <none>
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] server lang: <none>
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] kex follows: False
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] Compression: none
2025-12-03T13:28:23.536 [DEBUG] [Thread-117453] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:28:23.591 [DEBUG] [Thread-117453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:28:23.591 [DEBUG] [Thread-117453] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:28:23.591 [DEBUG] [Thread-117453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:28:23.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:28:23.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:28:23.649 [DEBUG] [Thread-117453] [transport.py] [_log()] userauth is OK
2025-12-03T13:28:23.649 [DEBUG] [Thread-117453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:28:23.649 [DEBUG] [Thread-117453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:28:23.649 [DEBUG] [Thread-117453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:28:23.649 [DEBUG] [Thread-117453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:28:23.663 [INFO] [Thread-117453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:28:23.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:28:23.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:28:24.482 [DEBUG] [Thread-117453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:28:24.482 [DEBUG] [Thread-117453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:28:24.529 [DEBUG] [Thread-117453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:28:24.529 [DEBUG] [Thread-117453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:28:24.538 [DEBUG] [Thread-117453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:28:24.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:28:24.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:28:24.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:28:24.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:28:24.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:28:24.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:28:24.569 [DEBUG] [Thread-117453] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:28:25.428 [DEBUG] [Thread-117455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:40.474 [DEBUG] [Thread-117456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:48.036 [DEBUG] [Thread-117457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:54.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:28:54.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:28:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:28:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 28, 30), 21.59, 23.34, 0.0, 9.57, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:28:55.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:28:30
2025-12-03T13:28:55.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:28:55.505 [DEBUG] [Thread-117458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:28:55.539 [DEBUG] [Thread-117459] [transport.py] [_log()] starting thread (client mode): 0xa27ca6b0
2025-12-03T13:28:55.539 [DEBUG] [Thread-117459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:28:55.559 [DEBUG] [Thread-117459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:28:55.559 [INFO] [Thread-117459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:28:55.562 [DEBUG] [Thread-117459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] client lang: <none>
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] server lang: <none>
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] kex follows: False
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] Compression: none
2025-12-03T13:28:55.563 [DEBUG] [Thread-117459] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:28:55.582 [DEBUG] [Thread-117459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:28:55.582 [DEBUG] [Thread-117459] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:28:55.583 [DEBUG] [Thread-117459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:28:55.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:28:55.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:28:55.585 [DEBUG] [Thread-117459] [transport.py] [_log()] userauth is OK
2025-12-03T13:28:55.585 [DEBUG] [Thread-117459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:28:55.585 [DEBUG] [Thread-117459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:28:55.585 [DEBUG] [Thread-117459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:28:55.586 [DEBUG] [Thread-117459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:28:55.609 [INFO] [Thread-117459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:28:55.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:28:56.253 [DEBUG] [Thread-117459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:28:56.253 [DEBUG] [Thread-117459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:28:56.253 [DEBUG] [Thread-117459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:28:56.294 [DEBUG] [Thread-117459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:28:56.294 [DEBUG] [Thread-117459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:28:56.297 [DEBUG] [Thread-117459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:28:56.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:28:56.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:28:56.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:28:56.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:28:56.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:28:56.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:28:56.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.478174 -999.00  +20.70   9.88     27   +1.20 1 1 1 1 1   888    0 20.58 90.77 ----- 9.3 9.9 177.2 19.5 29.2 -26.1 28.0 -29.3 29.2 -25.9 29.9 -27.6
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:28:56.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.478174
2025-12-03T13:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:28:56.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:28:56.324 [DEBUG] [Thread-117459] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:28:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:28:30', tmtdew=21.59, humidity=23.34, cloud=0.0, wind=9.57, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:28:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:28:56.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:28:56.420 [DEBUG] [Thread-117462] [transport.py] [_log()] starting thread (client mode): 0xa27c8070
2025-12-03T13:28:56.420 [DEBUG] [Thread-117462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:28:56.439 [DEBUG] [Thread-117462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:28:56.440 [INFO] [Thread-117462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:28:56.447 [DEBUG] [Thread-117462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:28:56.447 [DEBUG] [Thread-117462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:28:56.447 [DEBUG] [Thread-117462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] client lang: <none>
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] server lang: <none>
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] kex follows: False
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] Compression: none
2025-12-03T13:28:56.448 [DEBUG] [Thread-117462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:28:56.504 [DEBUG] [Thread-117462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:28:56.505 [DEBUG] [Thread-117462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:28:56.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:28:56.506 [DEBUG] [Thread-117462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:28:56.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:28:56.560 [DEBUG] [Thread-117462] [transport.py] [_log()] userauth is OK
2025-12-03T13:28:56.561 [DEBUG] [Thread-117462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:28:56.561 [DEBUG] [Thread-117462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:28:56.561 [DEBUG] [Thread-117462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:28:56.561 [DEBUG] [Thread-117462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:28:56.579 [INFO] [Thread-117462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:28:56.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:28:56.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:28:57.417 [DEBUG] [Thread-117462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:28:57.418 [DEBUG] [Thread-117462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:28:57.466 [DEBUG] [Thread-117462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:28:57.466 [DEBUG] [Thread-117462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:28:57.474 [DEBUG] [Thread-117462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:28:57.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:28:57.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:28:57.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:28:57.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:28:57.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:28:57.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:28:57.508 [DEBUG] [Thread-117462] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:29:10.535 [DEBUG] [Thread-117464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:11.733 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:11.734 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:25.578 [DEBUG] [Thread-117465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:27.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:29:27.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:29:27.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:29:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 29, 2), 21.37, 23.74, 0.0, 10.36, 19.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:29:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:29:02
2025-12-03T13:29:28.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:29:28.465 [DEBUG] [Thread-117466] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T13:29:28.465 [DEBUG] [Thread-117466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:29:28.486 [DEBUG] [Thread-117466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:29:28.486 [INFO] [Thread-117466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] client lang: <none>
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] server lang: <none>
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] kex follows: False
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] Compression: none
2025-12-03T13:29:28.489 [DEBUG] [Thread-117466] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:29:28.506 [DEBUG] [Thread-117466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:29:28.507 [DEBUG] [Thread-117466] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:29:28.507 [DEBUG] [Thread-117466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:29:28.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:29:28.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:29:28.509 [DEBUG] [Thread-117466] [transport.py] [_log()] userauth is OK
2025-12-03T13:29:28.510 [DEBUG] [Thread-117466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:29:28.510 [DEBUG] [Thread-117466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:29:28.510 [DEBUG] [Thread-117466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:29:28.510 [DEBUG] [Thread-117466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:29:28.533 [INFO] [Thread-117466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:29:28.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:29:29.157 [DEBUG] [Thread-117466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:29:29.157 [DEBUG] [Thread-117466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:29:29.157 [DEBUG] [Thread-117466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:29:29.198 [DEBUG] [Thread-117466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:29:29.198 [DEBUG] [Thread-117466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:29:29.201 [DEBUG] [Thread-117466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:29:29.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:29:29.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:29:29.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:29:29.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:29:29.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:29:29.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:29:29.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:29:29.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:29:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:29:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.478522 -999.00  +20.90   5.05     27   +1.70 1 1 1 1 1   888    0 20.89 94.31 ----- 7.9 5.0 245.2 13.3 29.2 -27.4 28.4 -25.8 29.4 -24.3 30.1 -25.9
2025-12-03T13:29:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:29:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:29:29.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.478522
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:29:29.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:29:02', tmtdew=21.37, humidity=23.74, cloud=0.0, wind=10.36, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:29:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:29:29.228 [DEBUG] [Thread-117466] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:29:29.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:29:29.324 [DEBUG] [Thread-117469] [transport.py] [_log()] starting thread (client mode): 0xa27cbb20
2025-12-03T13:29:29.324 [DEBUG] [Thread-117469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:29:29.339 [DEBUG] [Thread-117469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:29:29.339 [INFO] [Thread-117469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:29:29.347 [DEBUG] [Thread-117469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:29:29.347 [DEBUG] [Thread-117469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:29:29.347 [DEBUG] [Thread-117469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:29:29.347 [DEBUG] [Thread-117469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:29:29.347 [DEBUG] [Thread-117469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] client lang: <none>
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] server lang: <none>
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] kex follows: False
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:29:29.348 [DEBUG] [Thread-117469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:29:29.349 [DEBUG] [Thread-117469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:29:29.349 [DEBUG] [Thread-117469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:29:29.349 [DEBUG] [Thread-117469] [transport.py] [_log()] Compression: none
2025-12-03T13:29:29.349 [DEBUG] [Thread-117469] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:29:29.405 [DEBUG] [Thread-117469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:29:29.405 [DEBUG] [Thread-117469] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:29:29.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:29:29.406 [DEBUG] [Thread-117469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:29:29.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:29:29.461 [DEBUG] [Thread-117469] [transport.py] [_log()] userauth is OK
2025-12-03T13:29:29.461 [DEBUG] [Thread-117469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:29:29.461 [DEBUG] [Thread-117469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:29:29.462 [DEBUG] [Thread-117469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:29:29.462 [DEBUG] [Thread-117469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:29:29.482 [INFO] [Thread-117469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:29:29.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:29:29.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:29:30.302 [DEBUG] [Thread-117469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:29:30.302 [DEBUG] [Thread-117469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:29:30.351 [DEBUG] [Thread-117469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:29:30.351 [DEBUG] [Thread-117469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:29:30.360 [DEBUG] [Thread-117469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:29:30.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:29:30.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:29:30.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:29:30.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:29:30.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:29:30.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:29:30.395 [DEBUG] [Thread-117469] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:29:40.605 [DEBUG] [Thread-117471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:48.069 [DEBUG] [Thread-117472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:29:55.641 [DEBUG] [Thread-117473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:30:00.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:30:00.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:30:01.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 29, 34), 21.39, 23.37, 0.0, 7.59, 19.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:30:01.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:29:34
2025-12-03T13:30:01.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:30:01.374 [DEBUG] [Thread-117474] [transport.py] [_log()] starting thread (client mode): 0xa51616c0
2025-12-03T13:30:01.374 [DEBUG] [Thread-117474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:30:01.393 [DEBUG] [Thread-117474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:30:01.393 [INFO] [Thread-117474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:30:01.396 [DEBUG] [Thread-117474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] client lang: <none>
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] server lang: <none>
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] kex follows: False
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:30:01.397 [DEBUG] [Thread-117474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:30:01.398 [DEBUG] [Thread-117474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:30:01.398 [DEBUG] [Thread-117474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:30:01.398 [DEBUG] [Thread-117474] [transport.py] [_log()] Compression: none
2025-12-03T13:30:01.398 [DEBUG] [Thread-117474] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:30:01.415 [DEBUG] [Thread-117474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:30:01.415 [DEBUG] [Thread-117474] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:30:01.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:30:01.417 [DEBUG] [Thread-117474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:30:01.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:30:01.419 [DEBUG] [Thread-117474] [transport.py] [_log()] userauth is OK
2025-12-03T13:30:01.419 [DEBUG] [Thread-117474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:30:01.419 [DEBUG] [Thread-117474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:30:01.419 [DEBUG] [Thread-117474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:30:01.419 [DEBUG] [Thread-117474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:30:01.455 [INFO] [Thread-117474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:30:01.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:30:02.031 [DEBUG] [Thread-117474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:30:02.031 [DEBUG] [Thread-117474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:30:02.032 [DEBUG] [Thread-117474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:30:02.072 [DEBUG] [Thread-117474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:30:02.073 [DEBUG] [Thread-117474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:30:02.075 [DEBUG] [Thread-117474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:30:02.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:30:02.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:30:02.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:30:02.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:30:02.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:30:02.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:30:02.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:30:02.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:30:02.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.478869 -999.00  +21.10   5.79     27   +1.30 1 1 1 1 1   888    0 21.03 99.73 ----- 5.9 5.8 214.3 14.0 29.3 -25.9 28.4 -26.6 29.3 -24.1 30.1 -25.5
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.478869
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:30:02.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:29:34', tmtdew=21.39, humidity=23.37, cloud=0.0, wind=7.59, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:29:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:30:02.087 [DEBUG] [Thread-117474] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:30:02.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:30:02.175 [DEBUG] [Thread-117477] [transport.py] [_log()] starting thread (client mode): 0xa5162f80
2025-12-03T13:30:02.175 [DEBUG] [Thread-117477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:30:02.192 [DEBUG] [Thread-117477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:30:02.192 [INFO] [Thread-117477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] client lang: <none>
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] server lang: <none>
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] kex follows: False
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] Compression: none
2025-12-03T13:30:02.200 [DEBUG] [Thread-117477] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:30:02.255 [DEBUG] [Thread-117477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:30:02.256 [DEBUG] [Thread-117477] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:30:02.256 [DEBUG] [Thread-117477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:30:02.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:30:02.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:30:02.314 [DEBUG] [Thread-117477] [transport.py] [_log()] userauth is OK
2025-12-03T13:30:02.314 [DEBUG] [Thread-117477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:30:02.314 [DEBUG] [Thread-117477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:30:02.314 [DEBUG] [Thread-117477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:30:02.314 [DEBUG] [Thread-117477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:30:02.331 [INFO] [Thread-117477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:30:02.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:30:02.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:30:03.175 [DEBUG] [Thread-117477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:30:03.175 [DEBUG] [Thread-117477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:30:03.222 [DEBUG] [Thread-117477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:30:03.223 [DEBUG] [Thread-117477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:30:03.231 [DEBUG] [Thread-117477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:30:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:30:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:30:03.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:30:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:30:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:30:03.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:30:03.265 [DEBUG] [Thread-117477] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:30:10.668 [DEBUG] [Thread-117479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:11.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:11.875 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:25.708 [DEBUG] [Thread-117480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:33.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:30:33.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:30:33.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:30:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 30, 6), 21.48, 23.26, 0.0, 8.95, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:30:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:30:06
2025-12-03T13:30:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:30:34.222 [DEBUG] [Thread-117481] [transport.py] [_log()] starting thread (client mode): 0xa27b7a00
2025-12-03T13:30:34.222 [DEBUG] [Thread-117481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:30:34.241 [DEBUG] [Thread-117481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:30:34.241 [INFO] [Thread-117481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:30:34.244 [DEBUG] [Thread-117481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:30:34.244 [DEBUG] [Thread-117481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] client lang: <none>
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] server lang: <none>
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] kex follows: False
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] Compression: none
2025-12-03T13:30:34.245 [DEBUG] [Thread-117481] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:30:34.263 [DEBUG] [Thread-117481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:30:34.263 [DEBUG] [Thread-117481] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:30:34.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:30:34.264 [DEBUG] [Thread-117481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:30:34.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:30:34.267 [DEBUG] [Thread-117481] [transport.py] [_log()] userauth is OK
2025-12-03T13:30:34.267 [DEBUG] [Thread-117481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:30:34.267 [DEBUG] [Thread-117481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:30:34.267 [DEBUG] [Thread-117481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:30:34.267 [DEBUG] [Thread-117481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:30:34.291 [INFO] [Thread-117481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:30:34.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:30:34.900 [DEBUG] [Thread-117481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:30:34.901 [DEBUG] [Thread-117481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:30:34.901 [DEBUG] [Thread-117481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:30:34.942 [DEBUG] [Thread-117481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:30:34.942 [DEBUG] [Thread-117481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:30:34.945 [DEBUG] [Thread-117481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:30:34.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:30:34.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:30:34.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:30:34.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:30:34.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:30:34.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:30:34.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.479216 -999.00  +21.40   9.40     27   +1.70 1 1 1 1 1   888    0 21.35 106.73 ----- 14.2 9.4 215.4 11.0 29.4 -26.4 28.6 -24.3 29.4 -23.6 30.2 -26.8
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:30:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.479216
2025-12-03T13:30:34.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:30:34.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:30:34.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:30:34.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:30:34.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:30:34.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:30:06', tmtdew=21.48, humidity=23.26, cloud=0.0, wind=8.95, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:30:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:30:34.972 [DEBUG] [Thread-117481] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:30:35.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:30:35.067 [DEBUG] [Thread-117484] [transport.py] [_log()] starting thread (client mode): 0xa27b7130
2025-12-03T13:30:35.067 [DEBUG] [Thread-117484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:30:35.087 [DEBUG] [Thread-117484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:30:35.087 [INFO] [Thread-117484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:30:35.095 [DEBUG] [Thread-117484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:30:35.095 [DEBUG] [Thread-117484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] client lang: <none>
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] server lang: <none>
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] kex follows: False
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:30:35.096 [DEBUG] [Thread-117484] [transport.py] [_log()] Compression: none
2025-12-03T13:30:35.097 [DEBUG] [Thread-117484] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:30:35.153 [DEBUG] [Thread-117484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:30:35.153 [DEBUG] [Thread-117484] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:30:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:30:35.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:30:35.155 [DEBUG] [Thread-117484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:30:35.209 [DEBUG] [Thread-117484] [transport.py] [_log()] userauth is OK
2025-12-03T13:30:35.209 [DEBUG] [Thread-117484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:30:35.209 [DEBUG] [Thread-117484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:30:35.209 [DEBUG] [Thread-117484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:30:35.210 [DEBUG] [Thread-117484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:30:35.236 [INFO] [Thread-117484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:30:35.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:30:35.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:30:36.075 [DEBUG] [Thread-117484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:30:36.075 [DEBUG] [Thread-117484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:30:36.124 [DEBUG] [Thread-117484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:30:36.124 [DEBUG] [Thread-117484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:30:36.133 [DEBUG] [Thread-117484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:30:36.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:30:36.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:30:36.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:30:36.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:30:36.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:30:36.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:30:36.168 [DEBUG] [Thread-117484] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:30:40.739 [DEBUG] [Thread-117486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:48.121 [DEBUG] [Thread-117487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:30:55.776 [DEBUG] [Thread-117488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:31:06.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:31:06.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:31:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 30, 38), 21.46, 23.23, 0.0, 10.99, 19.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:31:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:30:38
2025-12-03T13:31:06.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:31:07.145 [DEBUG] [Thread-117489] [transport.py] [_log()] starting thread (client mode): 0xa517ff70
2025-12-03T13:31:07.145 [DEBUG] [Thread-117489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:31:07.164 [DEBUG] [Thread-117489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:31:07.164 [INFO] [Thread-117489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:31:07.167 [DEBUG] [Thread-117489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] client lang: <none>
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] server lang: <none>
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] kex follows: False
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:31:07.168 [DEBUG] [Thread-117489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:31:07.169 [DEBUG] [Thread-117489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:31:07.169 [DEBUG] [Thread-117489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:31:07.169 [DEBUG] [Thread-117489] [transport.py] [_log()] Compression: none
2025-12-03T13:31:07.169 [DEBUG] [Thread-117489] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:31:07.185 [DEBUG] [Thread-117489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:31:07.186 [DEBUG] [Thread-117489] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:31:07.186 [DEBUG] [Thread-117489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:31:07.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:31:07.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:31:07.188 [DEBUG] [Thread-117489] [transport.py] [_log()] userauth is OK
2025-12-03T13:31:07.188 [DEBUG] [Thread-117489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:31:07.189 [DEBUG] [Thread-117489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:31:07.189 [DEBUG] [Thread-117489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:31:07.189 [DEBUG] [Thread-117489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:31:07.207 [INFO] [Thread-117489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:31:07.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:31:07.851 [DEBUG] [Thread-117489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:31:07.851 [DEBUG] [Thread-117489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:31:07.852 [DEBUG] [Thread-117489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:31:07.892 [DEBUG] [Thread-117489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:31:07.892 [DEBUG] [Thread-117489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:31:07.895 [DEBUG] [Thread-117489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:31:07.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:31:07.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:31:07.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:31:07.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:31:07.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:31:07.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:31:07.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.479563 -999.00  +21.50  11.70     27   +1.70 1 1 1 1 1   888    0 21.34 109.92 ----- 10.2 11.7 173.6 16.9 29.4 -26.2 28.6 -24.5 29.4 -24.5 30.2 -25.1
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:31:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.479563
2025-12-03T13:31:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:31:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:31:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:31:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:31:07.919 [DEBUG] [Thread-117489] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:31:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:31:07.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:30:38', tmtdew=21.46, humidity=23.23, cloud=0.0, wind=10.99, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:30:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:31:08.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:31:08.016 [DEBUG] [Thread-117492] [transport.py] [_log()] starting thread (client mode): 0xa517dfc0
2025-12-03T13:31:08.016 [DEBUG] [Thread-117492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:31:08.031 [DEBUG] [Thread-117492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:31:08.031 [INFO] [Thread-117492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] client lang: <none>
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] server lang: <none>
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] kex follows: False
2025-12-03T13:31:08.039 [DEBUG] [Thread-117492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] Compression: none
2025-12-03T13:31:08.040 [DEBUG] [Thread-117492] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:31:08.097 [DEBUG] [Thread-117492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:31:08.098 [DEBUG] [Thread-117492] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:31:08.098 [DEBUG] [Thread-117492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:31:08.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:31:08.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:31:08.154 [DEBUG] [Thread-117492] [transport.py] [_log()] userauth is OK
2025-12-03T13:31:08.154 [DEBUG] [Thread-117492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:31:08.155 [DEBUG] [Thread-117492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:31:08.155 [DEBUG] [Thread-117492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:31:08.155 [DEBUG] [Thread-117492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:31:08.174 [INFO] [Thread-117492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:31:08.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:31:08.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:31:09.012 [DEBUG] [Thread-117492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:31:09.012 [DEBUG] [Thread-117492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:31:09.060 [DEBUG] [Thread-117492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:31:09.060 [DEBUG] [Thread-117492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:31:09.069 [DEBUG] [Thread-117492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:31:09.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:31:09.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:31:09.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:31:09.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:31:09.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:31:09.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:31:09.103 [DEBUG] [Thread-117492] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:31:10.804 [DEBUG] [Thread-117494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:12.013 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:12.014 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:25.841 [DEBUG] [Thread-117495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:31:39.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:31:39.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:31:39.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 31, 10), 21.41, 23.37, 0.0, 10.82, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:31:39.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:31:10
2025-12-03T13:31:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:31:40.123 [DEBUG] [Thread-117496] [transport.py] [_log()] starting thread (client mode): 0xa51624d0
2025-12-03T13:31:40.123 [DEBUG] [Thread-117496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:31:40.145 [DEBUG] [Thread-117496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:31:40.145 [INFO] [Thread-117496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] client lang: <none>
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] server lang: <none>
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] kex follows: False
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] Compression: none
2025-12-03T13:31:40.148 [DEBUG] [Thread-117496] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:31:40.165 [DEBUG] [Thread-117496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:31:40.165 [DEBUG] [Thread-117496] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:31:40.165 [DEBUG] [Thread-117496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:31:40.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:31:40.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:31:40.166 [DEBUG] [Thread-117496] [transport.py] [_log()] userauth is OK
2025-12-03T13:31:40.166 [DEBUG] [Thread-117496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:31:40.166 [DEBUG] [Thread-117496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:31:40.166 [DEBUG] [Thread-117496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:31:40.166 [DEBUG] [Thread-117496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:31:40.183 [INFO] [Thread-117496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:31:40.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:31:40.807 [DEBUG] [Thread-117496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:31:40.807 [DEBUG] [Thread-117496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:31:40.807 [DEBUG] [Thread-117496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:31:40.848 [DEBUG] [Thread-117496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:31:40.848 [DEBUG] [Thread-117496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:31:40.850 [DEBUG] [Thread-117496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:31:40.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:31:40.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:31:40.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:31:40.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:31:40.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:31:40.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:31:40.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.479911 -999.00  +21.60  10.09     26   +1.70 1 1 1 1 1   888    0 22.16 119.16 ----- 15.0 10.1 147.1 17.6 29.4 -26.8 28.8 -24.6 29.5 -24.6 30.3 -25.3
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.479911
2025-12-03T13:31:40.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:31:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:31:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:31:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:31:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:31:40.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:31:10', tmtdew=21.41, humidity=23.37, cloud=0.0, wind=10.82, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:31:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:31:40.869 [DEBUG] [Thread-117496] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:31:40.873 [DEBUG] [Thread-117499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:40.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:31:40.956 [DEBUG] [Thread-117500] [transport.py] [_log()] starting thread (client mode): 0xa2787c40
2025-12-03T13:31:40.956 [DEBUG] [Thread-117500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:31:40.971 [DEBUG] [Thread-117500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:31:40.972 [INFO] [Thread-117500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] client lang: <none>
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] server lang: <none>
2025-12-03T13:31:40.980 [DEBUG] [Thread-117500] [transport.py] [_log()] kex follows: False
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] Compression: none
2025-12-03T13:31:40.981 [DEBUG] [Thread-117500] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:31:41.037 [DEBUG] [Thread-117500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:31:41.037 [DEBUG] [Thread-117500] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:31:41.037 [DEBUG] [Thread-117500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:31:41.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:31:41.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:31:41.094 [DEBUG] [Thread-117500] [transport.py] [_log()] userauth is OK
2025-12-03T13:31:41.094 [DEBUG] [Thread-117500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:31:41.094 [DEBUG] [Thread-117500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:31:41.094 [DEBUG] [Thread-117500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:31:41.094 [DEBUG] [Thread-117500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:31:41.108 [INFO] [Thread-117500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:31:41.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:31:41.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:31:41.946 [DEBUG] [Thread-117500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:31:41.947 [DEBUG] [Thread-117500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:31:41.996 [DEBUG] [Thread-117500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:31:41.996 [DEBUG] [Thread-117500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:31:42.005 [DEBUG] [Thread-117500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:31:42.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:31:42.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:31:42.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:31:42.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:31:42.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:31:42.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:31:42.038 [DEBUG] [Thread-117500] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:31:48.165 [DEBUG] [Thread-117502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:31:55.906 [DEBUG] [Thread-117503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:10.936 [DEBUG] [Thread-117504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:32:12.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:32:12.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:32:12.153 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:12.154 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 31, 42), 22.23, 22.43, 0.0, 17.8, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:32:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:31:42
2025-12-03T13:32:12.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:32:13.040 [DEBUG] [Thread-117505] [transport.py] [_log()] starting thread (client mode): 0xa5162410
2025-12-03T13:32:13.040 [DEBUG] [Thread-117505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:32:13.059 [DEBUG] [Thread-117505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:32:13.060 [INFO] [Thread-117505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] client lang: <none>
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] server lang: <none>
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] kex follows: False
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:32:13.063 [DEBUG] [Thread-117505] [transport.py] [_log()] Compression: none
2025-12-03T13:32:13.064 [DEBUG] [Thread-117505] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:32:13.082 [DEBUG] [Thread-117505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:32:13.082 [DEBUG] [Thread-117505] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:32:13.083 [DEBUG] [Thread-117505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:32:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:32:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:32:13.084 [DEBUG] [Thread-117505] [transport.py] [_log()] userauth is OK
2025-12-03T13:32:13.084 [DEBUG] [Thread-117505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:32:13.084 [DEBUG] [Thread-117505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:32:13.085 [DEBUG] [Thread-117505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:32:13.085 [DEBUG] [Thread-117505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:32:13.107 [INFO] [Thread-117505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:32:13.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:32:13.759 [DEBUG] [Thread-117505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:32:13.759 [DEBUG] [Thread-117505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:32:13.760 [DEBUG] [Thread-117505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:32:13.801 [DEBUG] [Thread-117505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:32:13.801 [DEBUG] [Thread-117505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:32:13.803 [DEBUG] [Thread-117505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:32:13.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:32:13.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:32:13.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:32:13.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:32:13.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:32:13.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:32:13.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:32:13.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:32:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:32:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.480258 -999.00  +21.60  23.10     26   +1.40 1 1 1 1 1   888    0 21.69 122.01 ----- 24.8 23.1 172.4 26.9 29.5 -27.5 28.8 -29.1 29.5 -24.3 30.4 -27.2
2025-12-03T13:32:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:32:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:32:13.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.480258
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:32:13.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:31:42', tmtdew=22.23, humidity=22.43, cloud=0.0, wind=17.8, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:31:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:32:13.827 [DEBUG] [Thread-117505] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:32:13.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:32:13.922 [DEBUG] [Thread-117508] [transport.py] [_log()] starting thread (client mode): 0xa517f820
2025-12-03T13:32:13.922 [DEBUG] [Thread-117508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:32:13.937 [DEBUG] [Thread-117508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:32:13.937 [INFO] [Thread-117508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:32:13.944 [DEBUG] [Thread-117508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:32:13.944 [DEBUG] [Thread-117508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] client lang: <none>
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] server lang: <none>
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] kex follows: False
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] Compression: none
2025-12-03T13:32:13.945 [DEBUG] [Thread-117508] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:32:14.001 [DEBUG] [Thread-117508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:32:14.001 [DEBUG] [Thread-117508] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:32:14.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:32:14.001 [DEBUG] [Thread-117508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:32:14.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:32:14.058 [DEBUG] [Thread-117508] [transport.py] [_log()] userauth is OK
2025-12-03T13:32:14.058 [DEBUG] [Thread-117508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:32:14.059 [DEBUG] [Thread-117508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:32:14.059 [DEBUG] [Thread-117508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:32:14.059 [DEBUG] [Thread-117508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:32:14.077 [INFO] [Thread-117508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:32:14.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:32:14.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:32:14.884 [DEBUG] [Thread-117508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:32:14.884 [DEBUG] [Thread-117508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:32:14.932 [DEBUG] [Thread-117508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:32:14.932 [DEBUG] [Thread-117508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:32:14.941 [DEBUG] [Thread-117508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:32:14.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:32:14.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:32:14.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:32:14.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:32:14.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:32:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:32:14.972 [DEBUG] [Thread-117508] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:32:26.128 [DEBUG] [Thread-117510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:41.186 [DEBUG] [Thread-117511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:32:44.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:32:44.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:32:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 32, 14), 22.32, 22.3, 0.0, 18.46, 21.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:32:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:32:14
2025-12-03T13:32:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:32:45.925 [DEBUG] [Thread-117512] [transport.py] [_log()] starting thread (client mode): 0xa51611e0
2025-12-03T13:32:45.925 [DEBUG] [Thread-117512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:32:45.944 [DEBUG] [Thread-117512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:32:45.944 [INFO] [Thread-117512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] client lang: <none>
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] server lang: <none>
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] kex follows: False
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] Compression: none
2025-12-03T13:32:45.948 [DEBUG] [Thread-117512] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:32:45.965 [DEBUG] [Thread-117512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:32:45.966 [DEBUG] [Thread-117512] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:32:45.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:32:45.967 [DEBUG] [Thread-117512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:32:45.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:32:45.969 [DEBUG] [Thread-117512] [transport.py] [_log()] userauth is OK
2025-12-03T13:32:45.969 [DEBUG] [Thread-117512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:32:45.969 [DEBUG] [Thread-117512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:32:45.969 [DEBUG] [Thread-117512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:32:45.969 [DEBUG] [Thread-117512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:32:45.993 [INFO] [Thread-117512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:32:45.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:32:46.610 [DEBUG] [Thread-117512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:32:46.610 [DEBUG] [Thread-117512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:32:46.610 [DEBUG] [Thread-117512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:32:46.651 [DEBUG] [Thread-117512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:32:46.651 [DEBUG] [Thread-117512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:32:46.654 [DEBUG] [Thread-117512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:32:46.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:32:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:32:46.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:32:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:32:46.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:32:46.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:32:46.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:32:46.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:32:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:32:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.480952 -999.00  +21.10  18.43     25   +0.70 1 1 1 1 1   888    0 23.11 155.01 ----- 13.7 18.4 169.4 25.1 29.3 -28.5 28.5 -28.8 29.2 -26.7 30.2 -27.5
2025-12-03T13:32:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:32:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:32:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.480952
2025-12-03T13:32:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:32:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:32:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:32:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:32:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:32:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:32:14', tmtdew=22.32, humidity=22.3, cloud=0.0, wind=18.46, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:32:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:32:46.679 [DEBUG] [Thread-117512] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:32:46.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:32:46.776 [DEBUG] [Thread-117515] [transport.py] [_log()] starting thread (client mode): 0xa27c9840
2025-12-03T13:32:46.776 [DEBUG] [Thread-117515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:32:46.790 [DEBUG] [Thread-117515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:32:46.791 [INFO] [Thread-117515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:32:46.798 [DEBUG] [Thread-117515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:32:46.798 [DEBUG] [Thread-117515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:32:46.798 [DEBUG] [Thread-117515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] client lang: <none>
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] server lang: <none>
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] kex follows: False
2025-12-03T13:32:46.799 [DEBUG] [Thread-117515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] Compression: none
2025-12-03T13:32:46.800 [DEBUG] [Thread-117515] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:32:46.858 [DEBUG] [Thread-117515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:32:46.859 [DEBUG] [Thread-117515] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:32:46.859 [DEBUG] [Thread-117515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:32:46.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:32:46.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:32:46.917 [DEBUG] [Thread-117515] [transport.py] [_log()] userauth is OK
2025-12-03T13:32:46.917 [DEBUG] [Thread-117515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:32:46.917 [DEBUG] [Thread-117515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:32:46.917 [DEBUG] [Thread-117515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:32:46.918 [DEBUG] [Thread-117515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:32:46.939 [INFO] [Thread-117515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:32:46.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:32:46.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:32:47.781 [DEBUG] [Thread-117515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:32:47.781 [DEBUG] [Thread-117515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:32:47.828 [DEBUG] [Thread-117515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:32:47.828 [DEBUG] [Thread-117515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:32:47.838 [DEBUG] [Thread-117515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:32:47.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:32:47.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:32:47.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:32:47.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:32:47.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:32:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:32:47.873 [DEBUG] [Thread-117515] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:32:48.195 [DEBUG] [Thread-117517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:32:56.212 [DEBUG] [Thread-117518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:11.258 [DEBUG] [Thread-117519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:12.294 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:12.295 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:17.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:33:17.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:33:17.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:33:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 32, 46), 22.85, 21.27, 0.0, 20.52, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:33:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:32:46
2025-12-03T13:33:18.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:33:18.843 [DEBUG] [Thread-117520] [transport.py] [_log()] starting thread (client mode): 0xa51621d0
2025-12-03T13:33:18.843 [DEBUG] [Thread-117520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:33:18.862 [DEBUG] [Thread-117520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:33:18.862 [INFO] [Thread-117520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] client lang: <none>
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] server lang: <none>
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] kex follows: False
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:33:18.865 [DEBUG] [Thread-117520] [transport.py] [_log()] Compression: none
2025-12-03T13:33:18.866 [DEBUG] [Thread-117520] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:33:18.881 [DEBUG] [Thread-117520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:33:18.882 [DEBUG] [Thread-117520] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:33:18.882 [DEBUG] [Thread-117520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:33:18.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:33:18.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:33:18.884 [DEBUG] [Thread-117520] [transport.py] [_log()] userauth is OK
2025-12-03T13:33:18.884 [DEBUG] [Thread-117520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:33:18.885 [DEBUG] [Thread-117520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:33:18.885 [DEBUG] [Thread-117520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:33:18.885 [DEBUG] [Thread-117520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:33:18.909 [INFO] [Thread-117520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:33:18.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:33:19.554 [DEBUG] [Thread-117520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:33:19.554 [DEBUG] [Thread-117520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:33:19.554 [DEBUG] [Thread-117520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:33:19.595 [DEBUG] [Thread-117520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:33:19.595 [DEBUG] [Thread-117520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:33:19.597 [DEBUG] [Thread-117520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:33:19.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:33:19.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:33:19.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:33:19.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:33:19.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:33:19.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:33:19.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.481299 -999.00  +20.90  15.24     25   +0.60 1 1 1 1 1   888    0 23.25 155.81 ----- 15.5 15.2 167.2 18.3 29.2 -26.7 28.1 -30.3 29.2 -26.2 29.9 -28.4
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.481299
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:33:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:32:46', tmtdew=22.85, humidity=21.27, cloud=0.0, wind=20.52, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:33:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:33:19.616 [DEBUG] [Thread-117520] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:33:19.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:33:19.701 [DEBUG] [Thread-117523] [transport.py] [_log()] starting thread (client mode): 0xa27c9270
2025-12-03T13:33:19.701 [DEBUG] [Thread-117523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:33:19.716 [DEBUG] [Thread-117523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:33:19.716 [INFO] [Thread-117523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:33:19.723 [DEBUG] [Thread-117523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:33:19.723 [DEBUG] [Thread-117523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:33:19.723 [DEBUG] [Thread-117523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] client lang: <none>
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] server lang: <none>
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] kex follows: False
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] Compression: none
2025-12-03T13:33:19.724 [DEBUG] [Thread-117523] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:33:19.781 [DEBUG] [Thread-117523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:33:19.782 [DEBUG] [Thread-117523] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:33:19.782 [DEBUG] [Thread-117523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:33:19.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:33:19.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:33:19.843 [DEBUG] [Thread-117523] [transport.py] [_log()] userauth is OK
2025-12-03T13:33:19.843 [DEBUG] [Thread-117523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:33:19.843 [DEBUG] [Thread-117523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:33:19.843 [DEBUG] [Thread-117523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:33:19.843 [DEBUG] [Thread-117523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:33:19.859 [INFO] [Thread-117523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:33:19.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:33:19.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:33:20.686 [DEBUG] [Thread-117523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:33:20.686 [DEBUG] [Thread-117523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:33:20.735 [DEBUG] [Thread-117523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:33:20.735 [DEBUG] [Thread-117523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:33:20.743 [DEBUG] [Thread-117523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:33:20.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:33:20.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:33:20.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:33:20.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:33:20.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:33:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:33:20.778 [DEBUG] [Thread-117523] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:33:26.288 [DEBUG] [Thread-117525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:41.330 [DEBUG] [Thread-117526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:48.242 [DEBUG] [Thread-117527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:33:50.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:33:50.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:33:50.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:33:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 33, 18), 22.77, 21.4, 0.0, 23.71, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:33:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:33:18
2025-12-03T13:33:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:33:51.813 [DEBUG] [Thread-117528] [transport.py] [_log()] starting thread (client mode): 0xa5162020
2025-12-03T13:33:51.813 [DEBUG] [Thread-117528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:33:51.836 [DEBUG] [Thread-117528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:33:51.836 [INFO] [Thread-117528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] client lang: <none>
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] server lang: <none>
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] kex follows: False
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] Compression: none
2025-12-03T13:33:51.839 [DEBUG] [Thread-117528] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:33:51.856 [DEBUG] [Thread-117528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:33:51.856 [DEBUG] [Thread-117528] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:33:51.856 [DEBUG] [Thread-117528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:33:51.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:33:51.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:33:51.857 [DEBUG] [Thread-117528] [transport.py] [_log()] userauth is OK
2025-12-03T13:33:51.857 [DEBUG] [Thread-117528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:33:51.857 [DEBUG] [Thread-117528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:33:51.857 [DEBUG] [Thread-117528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:33:51.857 [DEBUG] [Thread-117528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:33:51.883 [INFO] [Thread-117528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:33:51.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:33:52.539 [DEBUG] [Thread-117528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:33:52.540 [DEBUG] [Thread-117528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:33:52.540 [DEBUG] [Thread-117528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:33:52.581 [DEBUG] [Thread-117528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:33:52.581 [DEBUG] [Thread-117528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:33:52.583 [DEBUG] [Thread-117528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:33:52.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:33:52.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:33:52.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:33:52.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:33:52.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:33:52.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:33:52.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.481647 -999.00  +20.80  16.37     26   +0.80 1 1 1 1 1   888    0 23.63 154.49 ----- 15.4 16.4 176.2 19.9 29.1 -26.6 28.2 -28.0 29.1 -25.5 30.1 -27.9
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.481647
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:33:52.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:33:18', tmtdew=22.77, humidity=21.4, cloud=0.0, wind=23.71, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:33:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:33:52.602 [DEBUG] [Thread-117528] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:33:52.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:33:56.357 [DEBUG] [Thread-117531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:11.400 [DEBUG] [Thread-117532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:12.436 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:12.437 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:26.430 [DEBUG] [Thread-117533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:41.460 [DEBUG] [Thread-117534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:48.276 [DEBUG] [Thread-117535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:34:56.485 [DEBUG] [Thread-117536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:11.514 [DEBUG] [Thread-117537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:12.579 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:12.580 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:26.551 [DEBUG] [Thread-117538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:41.580 [DEBUG] [Thread-117539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:48.312 [DEBUG] [Thread-117540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:35:56.610 [DEBUG] [Thread-117541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:05.526 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T13:36:11.636 [DEBUG] [Thread-117542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:12.721 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:12.722 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:26.665 [DEBUG] [Thread-117543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:35.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:36:35.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:36:35.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 36, 30), 23.07, 21.15, 0.0, 13.91, 20.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:36:30
2025-12-03T13:36:36.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:36:36.512 [DEBUG] [Thread-117544] [transport.py] [_log()] starting thread (client mode): 0xa517dff0
2025-12-03T13:36:36.513 [DEBUG] [Thread-117544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:36:36.533 [DEBUG] [Thread-117544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:36:36.533 [INFO] [Thread-117544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:36:36.536 [DEBUG] [Thread-117544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:36:36.536 [DEBUG] [Thread-117544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:36:36.536 [DEBUG] [Thread-117544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] client lang: <none>
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] server lang: <none>
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] kex follows: False
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] Compression: none
2025-12-03T13:36:36.537 [DEBUG] [Thread-117544] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:36:36.554 [DEBUG] [Thread-117544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:36:36.554 [DEBUG] [Thread-117544] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:36:36.555 [DEBUG] [Thread-117544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:36:36.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:36:36.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:36:36.557 [DEBUG] [Thread-117544] [transport.py] [_log()] userauth is OK
2025-12-03T13:36:36.557 [DEBUG] [Thread-117544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:36:36.557 [DEBUG] [Thread-117544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:36:36.557 [DEBUG] [Thread-117544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:36:36.557 [DEBUG] [Thread-117544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:36:36.582 [INFO] [Thread-117544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:36:36.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:36:37.214 [DEBUG] [Thread-117544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:36:37.214 [DEBUG] [Thread-117544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:36:37.214 [DEBUG] [Thread-117544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:36:37.255 [DEBUG] [Thread-117544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:36:37.255 [DEBUG] [Thread-117544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:36:37.258 [DEBUG] [Thread-117544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:36:37.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:36:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:36:37.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:36:37.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:36:37.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:36:37.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:36:37.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.483383 -999.00  +20.70  11.39     27   +1.00 1 1 1 1 1   888    0 23.40 163.34 ----- 15.4 11.4 97.2 16.6 28.9 -33.6 29.0 -25.1 29.7 -25.0 30.4 -26.5
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:36:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.483383
2025-12-03T13:36:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:36:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:36:37.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:36:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:36:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:36:37.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:36:30', tmtdew=23.07, humidity=21.15, cloud=0.0, wind=13.91, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:36:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:36:37.284 [DEBUG] [Thread-117544] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:36:37.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:36:37.387 [DEBUG] [Thread-117547] [transport.py] [_log()] starting thread (client mode): 0xa5162ad0
2025-12-03T13:36:37.387 [DEBUG] [Thread-117547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:36:37.405 [DEBUG] [Thread-117547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:36:37.405 [INFO] [Thread-117547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:36:37.412 [DEBUG] [Thread-117547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] client lang: <none>
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] server lang: <none>
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] kex follows: False
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:36:37.413 [DEBUG] [Thread-117547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:36:37.414 [DEBUG] [Thread-117547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:36:37.414 [DEBUG] [Thread-117547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:36:37.414 [DEBUG] [Thread-117547] [transport.py] [_log()] Compression: none
2025-12-03T13:36:37.414 [DEBUG] [Thread-117547] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:36:37.471 [DEBUG] [Thread-117547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:36:37.472 [DEBUG] [Thread-117547] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:36:37.472 [DEBUG] [Thread-117547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:36:37.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:36:37.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:36:37.528 [DEBUG] [Thread-117547] [transport.py] [_log()] userauth is OK
2025-12-03T13:36:37.528 [DEBUG] [Thread-117547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:36:37.529 [DEBUG] [Thread-117547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:36:37.529 [DEBUG] [Thread-117547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:36:37.529 [DEBUG] [Thread-117547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:36:37.547 [INFO] [Thread-117547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:36:37.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:36:37.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:36:38.377 [DEBUG] [Thread-117547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:36:38.377 [DEBUG] [Thread-117547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:36:38.425 [DEBUG] [Thread-117547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:36:38.425 [DEBUG] [Thread-117547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:36:38.434 [DEBUG] [Thread-117547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:36:38.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:36:38.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:36:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:36:38.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:36:38.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:36:38.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:36:38.467 [DEBUG] [Thread-117547] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:36:41.700 [DEBUG] [Thread-117549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:48.340 [DEBUG] [Thread-117550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:36:56.743 [DEBUG] [Thread-117551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:08.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:37:08.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:37:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:37:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 37, 2), 22.88, 21.38, 0.0, 11.59, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:37:09.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:37:02
2025-12-03T13:37:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:37:09.431 [DEBUG] [Thread-117552] [transport.py] [_log()] starting thread (client mode): 0xa27b6560
2025-12-03T13:37:09.431 [DEBUG] [Thread-117552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:37:09.453 [DEBUG] [Thread-117552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:37:09.453 [INFO] [Thread-117552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] client lang: <none>
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] server lang: <none>
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] kex follows: False
2025-12-03T13:37:09.456 [DEBUG] [Thread-117552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] Compression: none
2025-12-03T13:37:09.457 [DEBUG] [Thread-117552] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:37:09.475 [DEBUG] [Thread-117552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:37:09.475 [DEBUG] [Thread-117552] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:37:09.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:37:09.477 [DEBUG] [Thread-117552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:37:09.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:37:09.479 [DEBUG] [Thread-117552] [transport.py] [_log()] userauth is OK
2025-12-03T13:37:09.479 [DEBUG] [Thread-117552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:37:09.479 [DEBUG] [Thread-117552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:37:09.479 [DEBUG] [Thread-117552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:37:09.479 [DEBUG] [Thread-117552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:37:09.502 [INFO] [Thread-117552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:37:09.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:37:10.140 [DEBUG] [Thread-117552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:37:10.140 [DEBUG] [Thread-117552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:37:10.141 [DEBUG] [Thread-117552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:37:10.182 [DEBUG] [Thread-117552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:37:10.182 [DEBUG] [Thread-117552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:37:10.185 [DEBUG] [Thread-117552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:37:10.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:37:10.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:37:10.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:37:10.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:37:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:37:10.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:37:10.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.483730 -999.00  +20.40   7.50     27   +0.80 1 1 1 1 1   888    0 24.09 153.99 ----- 7.3 7.5 120.4 16.1 28.9 -27.9 28.8 -27.7 29.5 -26.4 30.2 -29.1
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:37:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.483730
2025-12-03T13:37:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:37:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:37:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:37:10.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:37:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:37:10.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:37:02', tmtdew=22.88, humidity=21.38, cloud=0.0, wind=11.59, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:36:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:37:10.208 [DEBUG] [Thread-117552] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:37:10.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:37:10.302 [DEBUG] [Thread-117555] [transport.py] [_log()] starting thread (client mode): 0xa517c550
2025-12-03T13:37:10.302 [DEBUG] [Thread-117555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:37:10.317 [DEBUG] [Thread-117555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:37:10.317 [INFO] [Thread-117555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:37:10.324 [DEBUG] [Thread-117555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:37:10.324 [DEBUG] [Thread-117555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] client lang: <none>
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] server lang: <none>
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] kex follows: False
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] Compression: none
2025-12-03T13:37:10.325 [DEBUG] [Thread-117555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:37:10.384 [DEBUG] [Thread-117555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:37:10.384 [DEBUG] [Thread-117555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:37:10.384 [DEBUG] [Thread-117555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:37:10.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:37:10.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:37:10.440 [DEBUG] [Thread-117555] [transport.py] [_log()] userauth is OK
2025-12-03T13:37:10.440 [DEBUG] [Thread-117555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:37:10.440 [DEBUG] [Thread-117555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:37:10.440 [DEBUG] [Thread-117555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:37:10.440 [DEBUG] [Thread-117555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:37:10.459 [INFO] [Thread-117555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:37:10.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:37:10.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:37:11.280 [DEBUG] [Thread-117555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:37:11.280 [DEBUG] [Thread-117555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:37:11.328 [DEBUG] [Thread-117555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:37:11.328 [DEBUG] [Thread-117555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:37:11.337 [DEBUG] [Thread-117555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:37:11.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:37:11.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:37:11.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:37:11.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:37:11.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:37:11.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:37:11.372 [DEBUG] [Thread-117555] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:37:11.770 [DEBUG] [Thread-117557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:12.873 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:12.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:26.821 [DEBUG] [Thread-117558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:37:41.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:37:41.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:37:41.844 [DEBUG] [Thread-117559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:42.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 37, 34), 22.22, 22.43, 0.0, 9.07, 19.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:37:42.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:37:34
2025-12-03T13:37:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:37:42.353 [DEBUG] [Thread-117560] [transport.py] [_log()] starting thread (client mode): 0xa27a37f0
2025-12-03T13:37:42.353 [DEBUG] [Thread-117560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:37:42.373 [DEBUG] [Thread-117560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:37:42.373 [INFO] [Thread-117560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:37:42.376 [DEBUG] [Thread-117560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] client lang: <none>
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] server lang: <none>
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] kex follows: False
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] Compression: none
2025-12-03T13:37:42.377 [DEBUG] [Thread-117560] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:37:42.395 [DEBUG] [Thread-117560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:37:42.395 [DEBUG] [Thread-117560] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:37:42.396 [DEBUG] [Thread-117560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:37:42.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:37:42.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:37:42.397 [DEBUG] [Thread-117560] [transport.py] [_log()] userauth is OK
2025-12-03T13:37:42.397 [DEBUG] [Thread-117560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:37:42.398 [DEBUG] [Thread-117560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:37:42.398 [DEBUG] [Thread-117560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:37:42.398 [DEBUG] [Thread-117560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:37:42.422 [INFO] [Thread-117560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:37:42.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:37:43.027 [DEBUG] [Thread-117560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:37:43.028 [DEBUG] [Thread-117560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:37:43.028 [DEBUG] [Thread-117560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:37:43.069 [DEBUG] [Thread-117560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:37:43.069 [DEBUG] [Thread-117560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:37:43.072 [DEBUG] [Thread-117560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:37:43.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:37:43.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:37:43.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:37:43.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:37:43.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:37:43.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:37:43.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:37:43.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:37:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:37:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.484424 -999.00  +20.50   7.49     27   +1.00 1 1 1 1 1   888    0 23.29 144.39 ----- 5.8 7.5 118.6 12.2 28.8 -30.0 28.8 -28.2 29.4 -26.5 30.1 -27.7
2025-12-03T13:37:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:37:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:37:43.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.484424
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:37:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:37:34', tmtdew=22.22, humidity=22.43, cloud=0.0, wind=9.07, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:37:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:37:43.097 [DEBUG] [Thread-117560] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:37:43.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:37:43.193 [DEBUG] [Thread-117563] [transport.py] [_log()] starting thread (client mode): 0xa27b42e0
2025-12-03T13:37:43.193 [DEBUG] [Thread-117563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:37:43.207 [DEBUG] [Thread-117563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:37:43.207 [INFO] [Thread-117563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] client lang: <none>
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] server lang: <none>
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] kex follows: False
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:37:43.215 [DEBUG] [Thread-117563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:37:43.216 [DEBUG] [Thread-117563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:37:43.216 [DEBUG] [Thread-117563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:37:43.216 [DEBUG] [Thread-117563] [transport.py] [_log()] Compression: none
2025-12-03T13:37:43.216 [DEBUG] [Thread-117563] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:37:43.273 [DEBUG] [Thread-117563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:37:43.273 [DEBUG] [Thread-117563] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:37:43.274 [DEBUG] [Thread-117563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:37:43.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:37:43.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:37:43.329 [DEBUG] [Thread-117563] [transport.py] [_log()] userauth is OK
2025-12-03T13:37:43.329 [DEBUG] [Thread-117563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:37:43.329 [DEBUG] [Thread-117563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:37:43.330 [DEBUG] [Thread-117563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:37:43.330 [DEBUG] [Thread-117563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:37:43.348 [INFO] [Thread-117563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:37:43.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:37:43.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:37:44.180 [DEBUG] [Thread-117563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:37:44.181 [DEBUG] [Thread-117563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:37:44.228 [DEBUG] [Thread-117563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:37:44.229 [DEBUG] [Thread-117563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:37:44.237 [DEBUG] [Thread-117563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:37:44.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:37:44.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:37:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:37:44.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:37:44.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:37:44.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:37:44.272 [DEBUG] [Thread-117563] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:37:48.393 [DEBUG] [Thread-117565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:37:56.876 [DEBUG] [Thread-117566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:11.915 [DEBUG] [Thread-117567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:13.023 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:13.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:14.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:38:14.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:38:14.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:38:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 38, 6), 21.81, 23.03, 0.0, 7.41, 19.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:38:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:38:06
2025-12-03T13:38:15.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:38:15.240 [DEBUG] [Thread-117568] [transport.py] [_log()] starting thread (client mode): 0xa27525f0
2025-12-03T13:38:15.240 [DEBUG] [Thread-117568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:38:15.261 [DEBUG] [Thread-117568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:38:15.261 [INFO] [Thread-117568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:38:15.264 [DEBUG] [Thread-117568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] client lang: <none>
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] server lang: <none>
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] kex follows: False
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] Compression: none
2025-12-03T13:38:15.265 [DEBUG] [Thread-117568] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:38:15.275 [DEBUG] [Thread-117568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:38:15.276 [DEBUG] [Thread-117568] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:38:15.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:38:15.277 [DEBUG] [Thread-117568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:38:15.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:38:15.279 [DEBUG] [Thread-117568] [transport.py] [_log()] userauth is OK
2025-12-03T13:38:15.279 [DEBUG] [Thread-117568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:38:15.279 [DEBUG] [Thread-117568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:38:15.280 [DEBUG] [Thread-117568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:38:15.280 [DEBUG] [Thread-117568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:38:15.297 [INFO] [Thread-117568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:38:15.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:38:15.932 [DEBUG] [Thread-117568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:38:15.933 [DEBUG] [Thread-117568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:38:15.933 [DEBUG] [Thread-117568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:38:15.974 [DEBUG] [Thread-117568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:38:15.974 [DEBUG] [Thread-117568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:38:15.977 [DEBUG] [Thread-117568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:38:15.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:38:15.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:38:15.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:38:15.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:38:16.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:38:16.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:38:16.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:38:16.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.484772 -999.00  +20.40   5.26     27   +1.10 1 1 1 1 1   888    0 22.80 146.99 ----- 8.4 5.3 102.8 8.8 28.8 -27.1 28.9 -26.5 29.5 -25.2 30.0 -27.1
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.484772
2025-12-03T13:38:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:38:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:38:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:38:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:38:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:38:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:38:06', tmtdew=21.81, humidity=23.03, cloud=0.0, wind=7.41, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:38:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:38:16.005 [DEBUG] [Thread-117568] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:38:16.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:38:16.100 [DEBUG] [Thread-117571] [transport.py] [_log()] starting thread (client mode): 0xa51cfcd0
2025-12-03T13:38:16.100 [DEBUG] [Thread-117571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:38:16.115 [DEBUG] [Thread-117571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:38:16.115 [INFO] [Thread-117571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] client lang: <none>
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] server lang: <none>
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] kex follows: False
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:38:16.123 [DEBUG] [Thread-117571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:38:16.124 [DEBUG] [Thread-117571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:38:16.124 [DEBUG] [Thread-117571] [transport.py] [_log()] Compression: none
2025-12-03T13:38:16.124 [DEBUG] [Thread-117571] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:38:16.180 [DEBUG] [Thread-117571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:38:16.181 [DEBUG] [Thread-117571] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:38:16.182 [DEBUG] [Thread-117571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:38:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:38:16.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:38:16.237 [DEBUG] [Thread-117571] [transport.py] [_log()] userauth is OK
2025-12-03T13:38:16.237 [DEBUG] [Thread-117571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:38:16.237 [DEBUG] [Thread-117571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:38:16.238 [DEBUG] [Thread-117571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:38:16.238 [DEBUG] [Thread-117571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:38:16.265 [INFO] [Thread-117571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:38:16.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:38:16.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:38:17.087 [DEBUG] [Thread-117571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:38:17.087 [DEBUG] [Thread-117571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:38:17.135 [DEBUG] [Thread-117571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:38:17.135 [DEBUG] [Thread-117571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:38:17.144 [DEBUG] [Thread-117571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:38:17.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:38:17.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:38:17.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:38:17.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:38:17.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:38:17.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:38:17.185 [DEBUG] [Thread-117571] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:38:26.949 [DEBUG] [Thread-117573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:41.995 [DEBUG] [Thread-117574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:38:47.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:38:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:38:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 38, 38), 21.45, 23.21, 0.0, 2.91, 19.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:38:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:38:38
2025-12-03T13:38:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:38:48.194 [DEBUG] [Thread-117575] [transport.py] [_log()] starting thread (client mode): 0xa51cd750
2025-12-03T13:38:48.194 [DEBUG] [Thread-117575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:38:48.213 [DEBUG] [Thread-117575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:38:48.214 [INFO] [Thread-117575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] client lang: <none>
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] server lang: <none>
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] kex follows: False
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:38:48.215 [DEBUG] [Thread-117575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:38:48.216 [DEBUG] [Thread-117575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:38:48.216 [DEBUG] [Thread-117575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:38:48.216 [DEBUG] [Thread-117575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:38:48.216 [DEBUG] [Thread-117575] [transport.py] [_log()] Compression: none
2025-12-03T13:38:48.216 [DEBUG] [Thread-117575] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:38:48.228 [DEBUG] [Thread-117575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:38:48.228 [DEBUG] [Thread-117575] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:38:48.229 [DEBUG] [Thread-117575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:38:48.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:38:48.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:38:48.230 [DEBUG] [Thread-117575] [transport.py] [_log()] userauth is OK
2025-12-03T13:38:48.231 [DEBUG] [Thread-117575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:38:48.231 [DEBUG] [Thread-117575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:38:48.231 [DEBUG] [Thread-117575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:38:48.231 [DEBUG] [Thread-117575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:38:48.255 [INFO] [Thread-117575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:38:48.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:38:48.447 [DEBUG] [Thread-117577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:38:48.907 [DEBUG] [Thread-117575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:38:48.907 [DEBUG] [Thread-117575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:38:48.907 [DEBUG] [Thread-117575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:38:48.948 [DEBUG] [Thread-117575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:38:48.948 [DEBUG] [Thread-117575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:38:48.951 [DEBUG] [Thread-117575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:38:48.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:38:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:38:48.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:38:48.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:38:48.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:38:48.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:38:48.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:38:48.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:38:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:38:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.485119 -999.00  +20.40   9.35     27   +1.00 1 1 1 1 1   888    0 23.53 147.04 ----- 8.5 9.3 83.6 13.4 28.4 -32.5 28.9 -26.9 29.4 -26.8 30.1 -27.5
2025-12-03T13:38:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:38:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:38:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.485119
2025-12-03T13:38:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:38:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:38:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:38:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:38:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:38:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:38:38', tmtdew=21.45, humidity=23.21, cloud=0.0, wind=2.91, temperature=19.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:38:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:38:48.975 [DEBUG] [Thread-117575] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:38:49.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:38:49.073 [DEBUG] [Thread-117579] [transport.py] [_log()] starting thread (client mode): 0xa2708100
2025-12-03T13:38:49.073 [DEBUG] [Thread-117579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:38:49.088 [DEBUG] [Thread-117579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:38:49.088 [INFO] [Thread-117579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:38:49.095 [DEBUG] [Thread-117579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:38:49.095 [DEBUG] [Thread-117579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] client lang: <none>
2025-12-03T13:38:49.096 [DEBUG] [Thread-117579] [transport.py] [_log()] server lang: <none>
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] kex follows: False
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] Compression: none
2025-12-03T13:38:49.097 [DEBUG] [Thread-117579] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:38:49.152 [DEBUG] [Thread-117579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:38:49.153 [DEBUG] [Thread-117579] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:38:49.153 [DEBUG] [Thread-117579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:38:49.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:38:49.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:38:49.209 [DEBUG] [Thread-117579] [transport.py] [_log()] userauth is OK
2025-12-03T13:38:49.209 [DEBUG] [Thread-117579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:38:49.209 [DEBUG] [Thread-117579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:38:49.209 [DEBUG] [Thread-117579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:38:49.209 [DEBUG] [Thread-117579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:38:49.228 [INFO] [Thread-117579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:38:49.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:38:49.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:38:50.037 [DEBUG] [Thread-117579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:38:50.037 [DEBUG] [Thread-117579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:38:50.085 [DEBUG] [Thread-117579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:38:50.085 [DEBUG] [Thread-117579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:38:50.094 [DEBUG] [Thread-117579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:38:50.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:38:50.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:38:50.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:38:50.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:38:50.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:38:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:38:50.128 [DEBUG] [Thread-117579] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:38:57.021 [DEBUG] [Thread-117581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:12.066 [DEBUG] [Thread-117582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:13.172 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:13.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:39:20.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:39:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:39:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 39, 10), 21.34, 23.39, 0.0, 5.35, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:39:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:39:10
2025-12-03T13:39:20.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:39:21.140 [DEBUG] [Thread-117583] [transport.py] [_log()] starting thread (client mode): 0xa5161390
2025-12-03T13:39:21.140 [DEBUG] [Thread-117583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:39:21.154 [DEBUG] [Thread-117583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:39:21.154 [INFO] [Thread-117583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:39:21.156 [DEBUG] [Thread-117583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:39:21.156 [DEBUG] [Thread-117583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:39:21.156 [DEBUG] [Thread-117583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] client lang: <none>
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] server lang: <none>
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] kex follows: False
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] Compression: none
2025-12-03T13:39:21.157 [DEBUG] [Thread-117583] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:39:21.167 [DEBUG] [Thread-117583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:39:21.167 [DEBUG] [Thread-117583] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:39:21.167 [DEBUG] [Thread-117583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:39:21.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:39:21.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:39:21.168 [DEBUG] [Thread-117583] [transport.py] [_log()] userauth is OK
2025-12-03T13:39:21.168 [DEBUG] [Thread-117583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:39:21.168 [DEBUG] [Thread-117583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:39:21.168 [DEBUG] [Thread-117583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:39:21.168 [DEBUG] [Thread-117583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:39:21.177 [INFO] [Thread-117583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:39:21.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:39:21.767 [DEBUG] [Thread-117583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:39:21.767 [DEBUG] [Thread-117583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:39:21.767 [DEBUG] [Thread-117583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:39:21.807 [DEBUG] [Thread-117583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:39:21.807 [DEBUG] [Thread-117583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:39:21.809 [DEBUG] [Thread-117583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:39:21.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:39:21.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:39:21.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:39:21.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:39:21.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:39:21.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:39:21.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.485466 -999.00  +20.40  10.81     27   +1.20 1 1 1 1 1   888    0 23.75 145.40 ----- 13.7 10.8 114.2 13.9 28.9 -25.9 28.9 -26.0 29.4 -23.6 30.0 -26.4
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.485466
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:39:21.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:39:10', tmtdew=21.34, humidity=23.39, cloud=0.0, wind=5.35, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:39:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:39:21.827 [DEBUG] [Thread-117583] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:39:21.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:39:21.913 [DEBUG] [Thread-117586] [transport.py] [_log()] starting thread (client mode): 0xa5162ad0
2025-12-03T13:39:21.913 [DEBUG] [Thread-117586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:39:21.927 [DEBUG] [Thread-117586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:39:21.927 [INFO] [Thread-117586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] client lang: <none>
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] server lang: <none>
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] kex follows: False
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:39:21.935 [DEBUG] [Thread-117586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:39:21.936 [DEBUG] [Thread-117586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:39:21.936 [DEBUG] [Thread-117586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:39:21.936 [DEBUG] [Thread-117586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:39:21.936 [DEBUG] [Thread-117586] [transport.py] [_log()] Compression: none
2025-12-03T13:39:21.936 [DEBUG] [Thread-117586] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:39:21.991 [DEBUG] [Thread-117586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:39:21.992 [DEBUG] [Thread-117586] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:39:21.992 [DEBUG] [Thread-117586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:39:21.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:39:21.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:39:22.049 [DEBUG] [Thread-117586] [transport.py] [_log()] userauth is OK
2025-12-03T13:39:22.049 [DEBUG] [Thread-117586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:39:22.049 [DEBUG] [Thread-117586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:39:22.049 [DEBUG] [Thread-117586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:39:22.049 [DEBUG] [Thread-117586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:39:22.062 [INFO] [Thread-117586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:39:22.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:39:22.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:39:22.847 [DEBUG] [Thread-117586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:39:22.847 [DEBUG] [Thread-117586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:39:22.895 [DEBUG] [Thread-117586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:39:22.895 [DEBUG] [Thread-117586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:39:22.904 [DEBUG] [Thread-117586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:39:22.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:39:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:39:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:39:22.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:39:22.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:39:22.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:39:22.935 [DEBUG] [Thread-117586] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:39:27.091 [DEBUG] [Thread-117588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:42.141 [DEBUG] [Thread-117589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:48.493 [DEBUG] [Thread-117590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:39:52.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:39:52.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:39:52.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:39:53.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 39, 42), 22.03, 22.61, 0.0, 9.18, 19.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:39:53.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:39:42
2025-12-03T13:39:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:39:53.909 [DEBUG] [Thread-117591] [transport.py] [_log()] starting thread (client mode): 0xa27b5330
2025-12-03T13:39:53.909 [DEBUG] [Thread-117591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:39:53.926 [DEBUG] [Thread-117591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:39:53.926 [INFO] [Thread-117591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] client lang: <none>
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] server lang: <none>
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] kex follows: False
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] Compression: none
2025-12-03T13:39:53.928 [DEBUG] [Thread-117591] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:39:53.939 [DEBUG] [Thread-117591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:39:53.939 [DEBUG] [Thread-117591] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:39:53.940 [DEBUG] [Thread-117591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:39:53.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:39:53.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:39:53.941 [DEBUG] [Thread-117591] [transport.py] [_log()] userauth is OK
2025-12-03T13:39:53.941 [DEBUG] [Thread-117591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:39:53.942 [DEBUG] [Thread-117591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:39:53.942 [DEBUG] [Thread-117591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:39:53.942 [DEBUG] [Thread-117591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:39:53.964 [INFO] [Thread-117591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:39:53.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:39:54.579 [DEBUG] [Thread-117591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:39:54.579 [DEBUG] [Thread-117591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:39:54.579 [DEBUG] [Thread-117591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:39:54.620 [DEBUG] [Thread-117591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:39:54.620 [DEBUG] [Thread-117591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:39:54.622 [DEBUG] [Thread-117591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:39:54.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:39:54.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:39:54.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:39:54.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:39:54.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:39:54.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:39:54.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.485813 -999.00  +20.40   7.75     26   +0.60 1 1 1 1 1   888    0 23.32 148.49 ----- 7.1 7.8 144.2 15.2 29.0 -25.8 29.0 -25.6 29.6 -25.1 30.0 -25.4
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.485813
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:39:54.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:39:42', tmtdew=22.03, humidity=22.61, cloud=0.0, wind=9.18, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:39:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:39:54.639 [DEBUG] [Thread-117591] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:39:54.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:39:54.721 [DEBUG] [Thread-117594] [transport.py] [_log()] starting thread (client mode): 0xa27b5fc0
2025-12-03T13:39:54.721 [DEBUG] [Thread-117594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:39:54.739 [DEBUG] [Thread-117594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:39:54.739 [INFO] [Thread-117594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:54.746 [DEBUG] [Thread-117594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] client lang: <none>
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] server lang: <none>
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] kex follows: False
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] Compression: none
2025-12-03T13:39:54.747 [DEBUG] [Thread-117594] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:39:54.804 [DEBUG] [Thread-117594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:39:54.805 [DEBUG] [Thread-117594] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:39:54.805 [DEBUG] [Thread-117594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:39:54.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:39:54.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:39:54.861 [DEBUG] [Thread-117594] [transport.py] [_log()] userauth is OK
2025-12-03T13:39:54.862 [DEBUG] [Thread-117594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:39:54.862 [DEBUG] [Thread-117594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:39:54.862 [DEBUG] [Thread-117594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:39:54.862 [DEBUG] [Thread-117594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:39:54.880 [INFO] [Thread-117594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:39:54.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:39:54.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:39:55.715 [DEBUG] [Thread-117594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:39:55.715 [DEBUG] [Thread-117594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:39:55.763 [DEBUG] [Thread-117594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:39:55.763 [DEBUG] [Thread-117594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:39:55.772 [DEBUG] [Thread-117594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:39:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:39:55.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:39:55.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:39:55.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:39:55.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:39:55.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:39:55.807 [DEBUG] [Thread-117594] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:39:57.174 [DEBUG] [Thread-117596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:12.226 [DEBUG] [Thread-117597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:13.320 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:13.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:40:25.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:40:25.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:40:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 40, 14), 22.01, 22.66, 0.0, 12.02, 19.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:40:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:40:14
2025-12-03T13:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:40:26.759 [DEBUG] [Thread-117598] [transport.py] [_log()] starting thread (client mode): 0xa2753e50
2025-12-03T13:40:26.759 [DEBUG] [Thread-117598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:40:26.770 [DEBUG] [Thread-117598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:40:26.770 [INFO] [Thread-117598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] client lang: <none>
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] server lang: <none>
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] kex follows: False
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] Compression: none
2025-12-03T13:40:26.771 [DEBUG] [Thread-117598] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:40:26.779 [DEBUG] [Thread-117598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:40:26.779 [DEBUG] [Thread-117598] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:40:26.780 [DEBUG] [Thread-117598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:40:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:40:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:40:26.780 [DEBUG] [Thread-117598] [transport.py] [_log()] userauth is OK
2025-12-03T13:40:26.781 [DEBUG] [Thread-117598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:40:26.781 [DEBUG] [Thread-117598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:40:26.781 [DEBUG] [Thread-117598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:40:26.781 [DEBUG] [Thread-117598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:40:26.792 [INFO] [Thread-117598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:40:26.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:40:27.255 [DEBUG] [Thread-117600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:27.360 [DEBUG] [Thread-117598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:40:27.360 [DEBUG] [Thread-117598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:40:27.360 [DEBUG] [Thread-117598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:40:27.401 [DEBUG] [Thread-117598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:40:27.401 [DEBUG] [Thread-117598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:40:27.404 [DEBUG] [Thread-117598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:40:27.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:40:27.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:40:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:40:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:40:27.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:40:27.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:40:27.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:40:27.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.486160 -999.00  +20.30  16.54     26   +0.40 1 1 1 1 1   888    0 23.51 145.97 ----- 14.6 16.5 124.6 19.6 29.0 -26.7 29.0 -25.4 29.7 -25.2 30.1 -25.9
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.486160
2025-12-03T13:40:27.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:40:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:40:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:40:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:40:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:40:27.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:40:14', tmtdew=22.01, humidity=22.66, cloud=0.0, wind=12.02, temperature=19.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:40:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:40:27.429 [DEBUG] [Thread-117598] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:40:27.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:40:27.526 [DEBUG] [Thread-117602] [transport.py] [_log()] starting thread (client mode): 0xa27531c0
2025-12-03T13:40:27.526 [DEBUG] [Thread-117602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:40:27.541 [DEBUG] [Thread-117602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:40:27.541 [INFO] [Thread-117602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:27.552 [DEBUG] [Thread-117602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] client lang: <none>
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] server lang: <none>
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] kex follows: False
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:40:27.553 [DEBUG] [Thread-117602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:40:27.554 [DEBUG] [Thread-117602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:40:27.554 [DEBUG] [Thread-117602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:40:27.554 [DEBUG] [Thread-117602] [transport.py] [_log()] Compression: none
2025-12-03T13:40:27.554 [DEBUG] [Thread-117602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:40:27.608 [DEBUG] [Thread-117602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:40:27.609 [DEBUG] [Thread-117602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:40:27.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:40:27.610 [DEBUG] [Thread-117602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:40:27.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:40:27.668 [DEBUG] [Thread-117602] [transport.py] [_log()] userauth is OK
2025-12-03T13:40:27.668 [DEBUG] [Thread-117602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:40:27.669 [DEBUG] [Thread-117602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:40:27.669 [DEBUG] [Thread-117602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:40:27.669 [DEBUG] [Thread-117602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:40:27.689 [INFO] [Thread-117602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:40:27.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:40:27.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:40:28.522 [DEBUG] [Thread-117602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:40:28.522 [DEBUG] [Thread-117602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:40:28.570 [DEBUG] [Thread-117602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:40:28.570 [DEBUG] [Thread-117602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:40:28.586 [DEBUG] [Thread-117602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:40:28.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:40:28.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:40:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:40:28.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:40:28.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:40:28.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:40:28.624 [DEBUG] [Thread-117602] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:40:42.285 [DEBUG] [Thread-117604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:48.522 [DEBUG] [Thread-117605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:57.328 [DEBUG] [Thread-117606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:40:58.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:40:58.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:40:58.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:40:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 40, 46), 22.46, 21.7, 0.0, 16.83, 19.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:40:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:40:46
2025-12-03T13:40:59.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:40:59.602 [DEBUG] [Thread-117607] [transport.py] [_log()] starting thread (client mode): 0xa2751990
2025-12-03T13:40:59.603 [DEBUG] [Thread-117607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:40:59.622 [DEBUG] [Thread-117607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:40:59.622 [INFO] [Thread-117607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:40:59.623 [DEBUG] [Thread-117607] [transport.py] [_log()] client lang: <none>
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] server lang: <none>
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] kex follows: False
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] Compression: none
2025-12-03T13:40:59.624 [DEBUG] [Thread-117607] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:40:59.633 [DEBUG] [Thread-117607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:40:59.634 [DEBUG] [Thread-117607] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:40:59.634 [DEBUG] [Thread-117607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:40:59.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:40:59.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:40:59.636 [DEBUG] [Thread-117607] [transport.py] [_log()] userauth is OK
2025-12-03T13:40:59.636 [DEBUG] [Thread-117607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:40:59.636 [DEBUG] [Thread-117607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:40:59.636 [DEBUG] [Thread-117607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:40:59.636 [DEBUG] [Thread-117607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:40:59.653 [INFO] [Thread-117607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:40:59.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:41:00.285 [DEBUG] [Thread-117607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:41:00.286 [DEBUG] [Thread-117607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:41:00.286 [DEBUG] [Thread-117607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:41:00.327 [DEBUG] [Thread-117607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:41:00.327 [DEBUG] [Thread-117607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:41:00.329 [DEBUG] [Thread-117607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:41:00.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:41:00.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:41:00.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:41:00.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:41:00.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:41:00.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:41:00.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.486508 -999.00  +20.40  13.98     26   +0.50 1 1 1 1 1   888    0 23.16 139.93 ----- 14.0 14.0 138.8 17.1 29.0 -26.5 29.0 -25.8 29.6 -25.8 30.0 -26.3
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:41:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.486508
2025-12-03T13:41:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:41:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:41:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:41:00.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:41:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:41:00.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:40:46', tmtdew=22.46, humidity=21.7, cloud=0.0, wind=16.83, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:40:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:41:00.353 [DEBUG] [Thread-117607] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:41:00.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:41:00.449 [DEBUG] [Thread-117610] [transport.py] [_log()] starting thread (client mode): 0xa27b7e50
2025-12-03T13:41:00.449 [DEBUG] [Thread-117610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:41:00.463 [DEBUG] [Thread-117610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:41:00.463 [INFO] [Thread-117610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:00.471 [DEBUG] [Thread-117610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] client lang: <none>
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] server lang: <none>
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] kex follows: False
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] Compression: none
2025-12-03T13:41:00.472 [DEBUG] [Thread-117610] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:41:00.533 [DEBUG] [Thread-117610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:41:00.534 [DEBUG] [Thread-117610] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:41:00.534 [DEBUG] [Thread-117610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:41:00.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:41:00.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:41:00.590 [DEBUG] [Thread-117610] [transport.py] [_log()] userauth is OK
2025-12-03T13:41:00.590 [DEBUG] [Thread-117610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:41:00.590 [DEBUG] [Thread-117610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:41:00.590 [DEBUG] [Thread-117610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:41:00.591 [DEBUG] [Thread-117610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:41:00.609 [INFO] [Thread-117610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:41:00.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:41:00.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:41:01.410 [DEBUG] [Thread-117610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:41:01.410 [DEBUG] [Thread-117610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:41:01.458 [DEBUG] [Thread-117610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:41:01.458 [DEBUG] [Thread-117610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:41:01.469 [DEBUG] [Thread-117610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:41:01.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:41:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:41:01.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:41:01.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:41:01.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:41:01.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:41:01.505 [DEBUG] [Thread-117610] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:41:12.358 [DEBUG] [Thread-117612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:13.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:13.465 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:27.402 [DEBUG] [Thread-117613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:41:31.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:41:31.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:41:32.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 41, 19), 22.51, 21.67, 0.0, 16.6, 20.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:41:32.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:41:19
2025-12-03T13:41:32.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:41:32.466 [DEBUG] [Thread-117614] [transport.py] [_log()] starting thread (client mode): 0xa5163820
2025-12-03T13:41:32.466 [DEBUG] [Thread-117614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:41:32.488 [DEBUG] [Thread-117614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:41:32.488 [INFO] [Thread-117614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:41:32.492 [DEBUG] [Thread-117614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:41:32.492 [DEBUG] [Thread-117614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] client lang: <none>
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] server lang: <none>
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] kex follows: False
2025-12-03T13:41:32.493 [DEBUG] [Thread-117614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] Compression: none
2025-12-03T13:41:32.494 [DEBUG] [Thread-117614] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:41:32.513 [DEBUG] [Thread-117614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:41:32.514 [DEBUG] [Thread-117614] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:41:32.514 [DEBUG] [Thread-117614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:41:32.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:41:32.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:41:32.516 [DEBUG] [Thread-117614] [transport.py] [_log()] userauth is OK
2025-12-03T13:41:32.516 [DEBUG] [Thread-117614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:41:32.516 [DEBUG] [Thread-117614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:41:32.516 [DEBUG] [Thread-117614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:41:32.516 [DEBUG] [Thread-117614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:41:32.539 [INFO] [Thread-117614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:41:32.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:41:33.173 [DEBUG] [Thread-117614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:41:33.173 [DEBUG] [Thread-117614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:41:33.173 [DEBUG] [Thread-117614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:41:33.214 [DEBUG] [Thread-117614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:41:33.215 [DEBUG] [Thread-117614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:41:33.217 [DEBUG] [Thread-117614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:41:33.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:41:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:41:33.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:41:33.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:41:33.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:41:33.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:41:33.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:41:33.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:41:33.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:41:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.486855 -999.00  +20.30   9.72     27   +0.70 1 1 1 1 1   888    0 23.66 137.09 ----- 9.8 9.7 125.8 16.1 28.9 -26.0 29.0 -25.4 29.7 -24.3 29.9 -26.1
2025-12-03T13:41:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:41:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:41:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.486855
2025-12-03T13:41:33.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:41:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:41:33.241 [DEBUG] [Thread-117614] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:41:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:41:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:41:33.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:41:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:41:19', tmtdew=22.51, humidity=21.67, cloud=0.0, wind=16.6, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:41:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:41:33.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:41:33.341 [DEBUG] [Thread-117617] [transport.py] [_log()] starting thread (client mode): 0xa27b5300
2025-12-03T13:41:33.341 [DEBUG] [Thread-117617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:41:33.357 [DEBUG] [Thread-117617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:41:33.357 [INFO] [Thread-117617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:41:33.367 [DEBUG] [Thread-117617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] client lang: <none>
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] server lang: <none>
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] kex follows: False
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:41:33.368 [DEBUG] [Thread-117617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:41:33.369 [DEBUG] [Thread-117617] [transport.py] [_log()] Compression: none
2025-12-03T13:41:33.369 [DEBUG] [Thread-117617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:41:33.430 [DEBUG] [Thread-117617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:41:33.430 [DEBUG] [Thread-117617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:41:33.431 [DEBUG] [Thread-117617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:41:33.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:41:33.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:41:33.486 [DEBUG] [Thread-117617] [transport.py] [_log()] userauth is OK
2025-12-03T13:41:33.486 [DEBUG] [Thread-117617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:41:33.487 [DEBUG] [Thread-117617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:41:33.487 [DEBUG] [Thread-117617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:41:33.487 [DEBUG] [Thread-117617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:41:33.505 [INFO] [Thread-117617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:41:33.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:41:33.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:41:34.343 [DEBUG] [Thread-117617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:41:34.343 [DEBUG] [Thread-117617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:41:34.391 [DEBUG] [Thread-117617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:41:34.391 [DEBUG] [Thread-117617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:41:34.400 [DEBUG] [Thread-117617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:41:34.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:41:34.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:41:34.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:41:34.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:41:34.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:41:34.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:41:34.435 [DEBUG] [Thread-117617] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:41:42.432 [DEBUG] [Thread-117619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:48.561 [DEBUG] [Thread-117620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:41:57.480 [DEBUG] [Thread-117621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:42:04.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:42:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:42:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 41, 51), 22.44, 21.82, 0.0, 12.58, 19.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:42:05.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:41:51
2025-12-03T13:42:05.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:42:05.398 [DEBUG] [Thread-117622] [transport.py] [_log()] starting thread (client mode): 0xa5162230
2025-12-03T13:42:05.398 [DEBUG] [Thread-117622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:42:05.417 [DEBUG] [Thread-117622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:42:05.417 [INFO] [Thread-117622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:42:05.418 [DEBUG] [Thread-117622] [transport.py] [_log()] client lang: <none>
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] server lang: <none>
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] kex follows: False
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] Compression: none
2025-12-03T13:42:05.419 [DEBUG] [Thread-117622] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:42:05.427 [DEBUG] [Thread-117622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:42:05.428 [DEBUG] [Thread-117622] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:42:05.428 [DEBUG] [Thread-117622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:42:05.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:42:05.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:42:05.429 [DEBUG] [Thread-117622] [transport.py] [_log()] userauth is OK
2025-12-03T13:42:05.429 [DEBUG] [Thread-117622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:42:05.430 [DEBUG] [Thread-117622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:42:05.430 [DEBUG] [Thread-117622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:42:05.430 [DEBUG] [Thread-117622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:42:05.449 [INFO] [Thread-117622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:42:05.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:42:06.068 [DEBUG] [Thread-117622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:42:06.068 [DEBUG] [Thread-117622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:42:06.068 [DEBUG] [Thread-117622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:42:06.109 [DEBUG] [Thread-117622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:42:06.109 [DEBUG] [Thread-117622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:42:06.112 [DEBUG] [Thread-117622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:42:06.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:42:06.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:42:06.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:42:06.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:42:06.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:42:06.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:42:06.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:42:06.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.487202 -999.00  +20.40  12.72     26   +0.40 1 1 1 1 1   888    0 23.13 133.82 ----- 15.0 12.7 117.6 15.1 28.8 -26.5 29.0 -25.3 29.7 -24.6 30.1 -25.8
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.487202
2025-12-03T13:42:06.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:42:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:42:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:42:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:42:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:42:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:41:51', tmtdew=22.44, humidity=21.82, cloud=0.0, wind=12.58, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:41:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:42:06.135 [DEBUG] [Thread-117622] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:42:06.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:42:06.231 [DEBUG] [Thread-117625] [transport.py] [_log()] starting thread (client mode): 0xa27c9e40
2025-12-03T13:42:06.231 [DEBUG] [Thread-117625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:42:06.246 [DEBUG] [Thread-117625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:42:06.246 [INFO] [Thread-117625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:42:06.253 [DEBUG] [Thread-117625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:42:06.253 [DEBUG] [Thread-117625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] client lang: <none>
2025-12-03T13:42:06.254 [DEBUG] [Thread-117625] [transport.py] [_log()] server lang: <none>
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] kex follows: False
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] Compression: none
2025-12-03T13:42:06.255 [DEBUG] [Thread-117625] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:42:06.309 [DEBUG] [Thread-117625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:42:06.310 [DEBUG] [Thread-117625] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:42:06.311 [DEBUG] [Thread-117625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:42:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:42:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:42:06.370 [DEBUG] [Thread-117625] [transport.py] [_log()] userauth is OK
2025-12-03T13:42:06.370 [DEBUG] [Thread-117625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:42:06.370 [DEBUG] [Thread-117625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:42:06.371 [DEBUG] [Thread-117625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:42:06.371 [DEBUG] [Thread-117625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:42:06.391 [INFO] [Thread-117625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:42:06.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:42:06.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:42:07.206 [DEBUG] [Thread-117625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:42:07.206 [DEBUG] [Thread-117625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:42:07.254 [DEBUG] [Thread-117625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:42:07.254 [DEBUG] [Thread-117625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:42:07.263 [DEBUG] [Thread-117625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:42:07.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:42:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:42:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:42:07.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:42:07.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:42:07.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:42:07.297 [DEBUG] [Thread-117625] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:42:12.505 [DEBUG] [Thread-117627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:13.604 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:13.605 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:27.548 [DEBUG] [Thread-117628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:37.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:42:37.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:42:37.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:42:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 42, 23), 22.41, 21.83, 0.0, 11.7, 19.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:42:38.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:42:23
2025-12-03T13:42:38.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:42:38.309 [DEBUG] [Thread-117629] [transport.py] [_log()] starting thread (client mode): 0xa27b4f10
2025-12-03T13:42:38.309 [DEBUG] [Thread-117629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:42:38.324 [DEBUG] [Thread-117629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:42:38.324 [INFO] [Thread-117629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] client lang: <none>
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] server lang: <none>
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] kex follows: False
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] Compression: none
2025-12-03T13:42:38.328 [DEBUG] [Thread-117629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:42:38.344 [DEBUG] [Thread-117629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:42:38.344 [DEBUG] [Thread-117629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:42:38.344 [DEBUG] [Thread-117629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:42:38.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:42:38.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:42:38.345 [DEBUG] [Thread-117629] [transport.py] [_log()] userauth is OK
2025-12-03T13:42:38.345 [DEBUG] [Thread-117629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:42:38.345 [DEBUG] [Thread-117629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:42:38.345 [DEBUG] [Thread-117629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:42:38.345 [DEBUG] [Thread-117629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:42:38.354 [INFO] [Thread-117629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:42:38.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:42:38.975 [DEBUG] [Thread-117629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:42:38.975 [DEBUG] [Thread-117629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:42:38.975 [DEBUG] [Thread-117629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:42:39.016 [DEBUG] [Thread-117629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:42:39.016 [DEBUG] [Thread-117629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:42:39.018 [DEBUG] [Thread-117629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:42:39.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:42:39.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:42:39.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:42:39.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:42:39.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:42:39.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:42:39.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.487549 -999.00  +20.00   7.13     26   +0.40 1 1 1 1 1   888    0 23.77 144.26 ----- 8.6 7.1 139.4 16.7 29.0 -25.7 29.0 -24.9 29.7 -23.4 30.1 -25.3
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:42:39.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.487549
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:42:39.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:42:23', tmtdew=22.41, humidity=21.83, cloud=0.0, wind=11.7, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:42:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:42:39.038 [DEBUG] [Thread-117629] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:42:39.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:42:39.124 [DEBUG] [Thread-117632] [transport.py] [_log()] starting thread (client mode): 0xa5161180
2025-12-03T13:42:39.124 [DEBUG] [Thread-117632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:42:39.138 [DEBUG] [Thread-117632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:42:39.138 [INFO] [Thread-117632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:42:39.145 [DEBUG] [Thread-117632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] client lang: <none>
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] server lang: <none>
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] kex follows: False
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] Compression: none
2025-12-03T13:42:39.146 [DEBUG] [Thread-117632] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:42:39.200 [DEBUG] [Thread-117632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:42:39.200 [DEBUG] [Thread-117632] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:42:39.200 [DEBUG] [Thread-117632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:42:39.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:42:39.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:42:39.258 [DEBUG] [Thread-117632] [transport.py] [_log()] userauth is OK
2025-12-03T13:42:39.258 [DEBUG] [Thread-117632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:42:39.258 [DEBUG] [Thread-117632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:42:39.258 [DEBUG] [Thread-117632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:42:39.258 [DEBUG] [Thread-117632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:42:39.272 [INFO] [Thread-117632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:42:39.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:42:39.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:42:40.095 [DEBUG] [Thread-117632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:42:40.095 [DEBUG] [Thread-117632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:42:40.143 [DEBUG] [Thread-117632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:42:40.144 [DEBUG] [Thread-117632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:42:40.152 [DEBUG] [Thread-117632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:42:40.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:42:40.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:42:40.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:42:40.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:42:40.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:42:40.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:42:40.184 [DEBUG] [Thread-117632] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:42:42.579 [DEBUG] [Thread-117634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:48.595 [DEBUG] [Thread-117635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:42:57.625 [DEBUG] [Thread-117636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:10.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:43:10.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:43:10.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:43:10.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 42, 55), 22.56, 21.97, 0.0, 10.25, 20.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:43:10.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:42:55
2025-12-03T13:43:11.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:43:11.160 [DEBUG] [Thread-117637] [transport.py] [_log()] starting thread (client mode): 0xa2752620
2025-12-03T13:43:11.160 [DEBUG] [Thread-117637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:43:11.174 [DEBUG] [Thread-117637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:43:11.174 [INFO] [Thread-117637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:43:11.175 [DEBUG] [Thread-117637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:43:11.175 [DEBUG] [Thread-117637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:43:11.175 [DEBUG] [Thread-117637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] client lang: <none>
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] server lang: <none>
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] kex follows: False
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] Compression: none
2025-12-03T13:43:11.176 [DEBUG] [Thread-117637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:43:11.183 [DEBUG] [Thread-117637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:43:11.184 [DEBUG] [Thread-117637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:43:11.184 [DEBUG] [Thread-117637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:43:11.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:43:11.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:43:11.185 [DEBUG] [Thread-117637] [transport.py] [_log()] userauth is OK
2025-12-03T13:43:11.185 [DEBUG] [Thread-117637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:43:11.185 [DEBUG] [Thread-117637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:43:11.185 [DEBUG] [Thread-117637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:43:11.185 [DEBUG] [Thread-117637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:43:11.204 [INFO] [Thread-117637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:43:11.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:43:11.786 [DEBUG] [Thread-117637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:43:11.786 [DEBUG] [Thread-117637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:43:11.786 [DEBUG] [Thread-117637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:43:11.827 [DEBUG] [Thread-117637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:43:11.827 [DEBUG] [Thread-117637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:43:11.829 [DEBUG] [Thread-117637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:43:11.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:43:11.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:43:11.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:43:11.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:43:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:43:11.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:43:11.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:43:11.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.488244 -999.00  +20.70  10.25     26   +0.90 1 1 1 1 1   888    0 23.71 143.04 ----- 7.9 10.2 124.4 13.1 29.1 -25.5 29.2 -24.3 30.0 -23.1 30.3 -24.4
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.488244
2025-12-03T13:43:11.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:43:11.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:43:11.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:43:11.848 [DEBUG] [Thread-117637] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:43:11.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:43:11.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:43:11.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:42:55', tmtdew=22.56, humidity=21.97, cloud=0.0, wind=10.25, temperature=20.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:43:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:43:11.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:43:11.952 [DEBUG] [Thread-117640] [transport.py] [_log()] starting thread (client mode): 0xa517eb60
2025-12-03T13:43:11.952 [DEBUG] [Thread-117640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:43:11.967 [DEBUG] [Thread-117640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:43:11.967 [INFO] [Thread-117640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:43:11.978 [DEBUG] [Thread-117640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:43:11.978 [DEBUG] [Thread-117640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] client lang: <none>
2025-12-03T13:43:11.979 [DEBUG] [Thread-117640] [transport.py] [_log()] server lang: <none>
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] kex follows: False
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] Compression: none
2025-12-03T13:43:11.980 [DEBUG] [Thread-117640] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:43:12.037 [DEBUG] [Thread-117640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:43:12.037 [DEBUG] [Thread-117640] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:43:12.038 [DEBUG] [Thread-117640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:43:12.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:43:12.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:43:12.094 [DEBUG] [Thread-117640] [transport.py] [_log()] userauth is OK
2025-12-03T13:43:12.094 [DEBUG] [Thread-117640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:43:12.094 [DEBUG] [Thread-117640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:43:12.094 [DEBUG] [Thread-117640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:43:12.094 [DEBUG] [Thread-117640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:43:12.112 [INFO] [Thread-117640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:43:12.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:43:12.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:43:12.654 [DEBUG] [Thread-117642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:12.957 [DEBUG] [Thread-117640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:43:12.957 [DEBUG] [Thread-117640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:43:13.005 [DEBUG] [Thread-117640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:43:13.005 [DEBUG] [Thread-117640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:43:13.014 [DEBUG] [Thread-117640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:43:13.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:43:13.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:43:13.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:43:13.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:43:13.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:43:13.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:43:13.051 [DEBUG] [Thread-117640] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:43:13.747 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:13.748 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:27.695 [DEBUG] [Thread-117643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:42.723 [DEBUG] [Thread-117644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:43.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:43:43.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:43:43.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:43:43.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 43, 27), 22.64, 21.85, 0.0, 8.75, 20.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:43:43.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:43:27
2025-12-03T13:43:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:43:44.019 [DEBUG] [Thread-117645] [transport.py] [_log()] starting thread (client mode): 0xa517f4c0
2025-12-03T13:43:44.019 [DEBUG] [Thread-117645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:43:44.031 [DEBUG] [Thread-117645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:43:44.031 [INFO] [Thread-117645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] client lang: <none>
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] server lang: <none>
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] kex follows: False
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] Compression: none
2025-12-03T13:43:44.033 [DEBUG] [Thread-117645] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:43:44.051 [DEBUG] [Thread-117645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:43:44.052 [DEBUG] [Thread-117645] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:43:44.052 [DEBUG] [Thread-117645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:43:44.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:43:44.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:43:44.054 [DEBUG] [Thread-117645] [transport.py] [_log()] userauth is OK
2025-12-03T13:43:44.054 [DEBUG] [Thread-117645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:43:44.054 [DEBUG] [Thread-117645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:43:44.054 [DEBUG] [Thread-117645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:43:44.054 [DEBUG] [Thread-117645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:43:44.087 [INFO] [Thread-117645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:43:44.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:43:44.672 [DEBUG] [Thread-117645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:43:44.672 [DEBUG] [Thread-117645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:43:44.672 [DEBUG] [Thread-117645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:43:44.713 [DEBUG] [Thread-117645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:43:44.713 [DEBUG] [Thread-117645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:43:44.715 [DEBUG] [Thread-117645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:43:44.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:43:44.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:43:44.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:43:44.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:43:44.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:43:44.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:43:44.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:43:44.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:43:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:43:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.488591 -999.00  +20.90  18.44     27   +1.50 1 1 1 1 1   888    0 23.51 126.74 ----- 14.7 18.4 136.6 19.9 29.1 -27.5 29.3 -24.1 30.1 -25.0 30.5 -24.9
2025-12-03T13:43:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:43:44.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:43:44.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.488591
2025-12-03T13:43:44.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:43:44.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:43:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:43:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:43:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:43:44.732 [DEBUG] [Thread-117645] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:43:44.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:43:27', tmtdew=22.64, humidity=21.85, cloud=0.0, wind=8.75, temperature=20.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:43:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:43:44.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:43:44.826 [DEBUG] [Thread-117648] [transport.py] [_log()] starting thread (client mode): 0xa27c82e0
2025-12-03T13:43:44.826 [DEBUG] [Thread-117648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:43:44.840 [DEBUG] [Thread-117648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:43:44.840 [INFO] [Thread-117648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:43:44.847 [DEBUG] [Thread-117648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:43:44.848 [DEBUG] [Thread-117648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] client lang: <none>
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] server lang: <none>
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] kex follows: False
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:43:44.849 [DEBUG] [Thread-117648] [transport.py] [_log()] Compression: none
2025-12-03T13:43:44.850 [DEBUG] [Thread-117648] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:43:44.906 [DEBUG] [Thread-117648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:43:44.907 [DEBUG] [Thread-117648] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:43:44.907 [DEBUG] [Thread-117648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:43:44.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:43:44.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:43:44.969 [DEBUG] [Thread-117648] [transport.py] [_log()] userauth is OK
2025-12-03T13:43:44.969 [DEBUG] [Thread-117648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:43:44.970 [DEBUG] [Thread-117648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:43:44.970 [DEBUG] [Thread-117648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:43:44.970 [DEBUG] [Thread-117648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:43:44.989 [INFO] [Thread-117648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:43:44.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:43:44.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:43:45.825 [DEBUG] [Thread-117648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:43:45.826 [DEBUG] [Thread-117648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:43:45.873 [DEBUG] [Thread-117648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:43:45.873 [DEBUG] [Thread-117648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:43:45.882 [DEBUG] [Thread-117648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:43:45.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:43:45.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:43:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:43:45.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:43:45.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:43:45.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:43:45.919 [DEBUG] [Thread-117648] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:43:48.641 [DEBUG] [Thread-117650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:43:57.750 [DEBUG] [Thread-117651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:12.786 [DEBUG] [Thread-117652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:13.887 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:13.889 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:15.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:44:15.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:44:15.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:44:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 43, 59), 22.67, 21.73, 0.0, 13.8, 20.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:44:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:43:59
2025-12-03T13:44:16.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:44:16.880 [DEBUG] [Thread-117653] [transport.py] [_log()] starting thread (client mode): 0xa5163c40
2025-12-03T13:44:16.880 [DEBUG] [Thread-117653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:44:16.897 [DEBUG] [Thread-117653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:44:16.898 [INFO] [Thread-117653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] client lang: <none>
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] server lang: <none>
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] kex follows: False
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] Compression: none
2025-12-03T13:44:16.899 [DEBUG] [Thread-117653] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:44:16.909 [DEBUG] [Thread-117653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:44:16.910 [DEBUG] [Thread-117653] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:44:16.910 [DEBUG] [Thread-117653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:44:16.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:44:16.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:44:16.912 [DEBUG] [Thread-117653] [transport.py] [_log()] userauth is OK
2025-12-03T13:44:16.912 [DEBUG] [Thread-117653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:44:16.912 [DEBUG] [Thread-117653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:44:16.912 [DEBUG] [Thread-117653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:44:16.912 [DEBUG] [Thread-117653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:44:16.928 [INFO] [Thread-117653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:44:16.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:44:17.543 [DEBUG] [Thread-117653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:44:17.543 [DEBUG] [Thread-117653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:44:17.543 [DEBUG] [Thread-117653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:44:17.584 [DEBUG] [Thread-117653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:44:17.584 [DEBUG] [Thread-117653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:44:17.587 [DEBUG] [Thread-117653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:44:17.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:44:17.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:44:17.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:44:17.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:44:17.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:44:17.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:44:17.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:44:17.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.488938 -999.00  +20.40  17.92     28   +1.50 1 1 1 1 1   888    0 23.51 134.23 ----- 13.6 17.9 108.2 21.0 28.6 -32.3 29.1 -26.3 29.8 -26.8 30.3 -27.3
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.488938
2025-12-03T13:44:17.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:44:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:44:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:44:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:44:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:44:17.611 [DEBUG] [Thread-117653] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:44:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:43:59', tmtdew=22.67, humidity=21.73, cloud=0.0, wind=13.8, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:44:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:44:17.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:44:17.708 [DEBUG] [Thread-117656] [transport.py] [_log()] starting thread (client mode): 0xa5161ba0
2025-12-03T13:44:17.708 [DEBUG] [Thread-117656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:44:17.723 [DEBUG] [Thread-117656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:44:17.723 [INFO] [Thread-117656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:44:17.730 [DEBUG] [Thread-117656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:44:17.730 [DEBUG] [Thread-117656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:44:17.730 [DEBUG] [Thread-117656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] client lang: <none>
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] server lang: <none>
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] kex follows: False
2025-12-03T13:44:17.731 [DEBUG] [Thread-117656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] Compression: none
2025-12-03T13:44:17.732 [DEBUG] [Thread-117656] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:44:17.790 [DEBUG] [Thread-117656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:44:17.791 [DEBUG] [Thread-117656] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:44:17.791 [DEBUG] [Thread-117656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:44:17.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:44:17.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:44:17.855 [DEBUG] [Thread-117656] [transport.py] [_log()] userauth is OK
2025-12-03T13:44:17.856 [DEBUG] [Thread-117656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:44:17.856 [DEBUG] [Thread-117656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:44:17.856 [DEBUG] [Thread-117656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:44:17.856 [DEBUG] [Thread-117656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:44:17.879 [INFO] [Thread-117656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:44:17.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:44:17.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:44:18.691 [DEBUG] [Thread-117656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:44:18.691 [DEBUG] [Thread-117656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:44:18.739 [DEBUG] [Thread-117656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:44:18.739 [DEBUG] [Thread-117656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:44:18.748 [DEBUG] [Thread-117656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:44:18.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:44:18.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:44:18.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:44:18.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:44:18.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:44:18.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:44:18.783 [DEBUG] [Thread-117656] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:44:27.813 [DEBUG] [Thread-117658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:42.859 [DEBUG] [Thread-117659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:48.682 [DEBUG] [Thread-117660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:44:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:44:48.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:44:48.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:44:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 44, 31), 22.4, 22.17, 0.0, 12.3, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:44:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:44:31
2025-12-03T13:44:49.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:44:49.742 [DEBUG] [Thread-117661] [transport.py] [_log()] starting thread (client mode): 0xa27c9390
2025-12-03T13:44:49.742 [DEBUG] [Thread-117661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:44:49.762 [DEBUG] [Thread-117661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:44:49.762 [INFO] [Thread-117661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] client lang: <none>
2025-12-03T13:44:49.763 [DEBUG] [Thread-117661] [transport.py] [_log()] server lang: <none>
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] kex follows: False
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] Compression: none
2025-12-03T13:44:49.764 [DEBUG] [Thread-117661] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:44:49.785 [DEBUG] [Thread-117661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:44:49.785 [DEBUG] [Thread-117661] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:44:49.786 [DEBUG] [Thread-117661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:44:49.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:44:49.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:44:49.787 [DEBUG] [Thread-117661] [transport.py] [_log()] userauth is OK
2025-12-03T13:44:49.788 [DEBUG] [Thread-117661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:44:49.788 [DEBUG] [Thread-117661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:44:49.788 [DEBUG] [Thread-117661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:44:49.788 [DEBUG] [Thread-117661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:44:49.805 [INFO] [Thread-117661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:44:49.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:44:50.417 [DEBUG] [Thread-117661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:44:50.417 [DEBUG] [Thread-117661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:44:50.417 [DEBUG] [Thread-117661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:44:50.458 [DEBUG] [Thread-117661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:44:50.458 [DEBUG] [Thread-117661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:44:50.460 [DEBUG] [Thread-117661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:44:50.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:44:50.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:44:50.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:44:50.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:44:50.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:44:50.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:44:50.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:44:50.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.489285 -999.00  +20.20   7.07     29   +1.90 1 1 1 1 1   888    0 23.46 115.88 ----- 7.5 7.1 144.5 13.8 29.0 -25.2 29.1 -25.8 29.8 -24.5 30.1 -25.7
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.489285
2025-12-03T13:44:50.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:44:50.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:44:50.481 [DEBUG] [Thread-117661] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:44:50.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:44:50.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:44:50.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:44:50.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:44:31', tmtdew=22.4, humidity=22.17, cloud=0.0, wind=12.3, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:44:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:44:50.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:44:50.577 [DEBUG] [Thread-117664] [transport.py] [_log()] starting thread (client mode): 0xa27a0610
2025-12-03T13:44:50.577 [DEBUG] [Thread-117664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:44:50.592 [DEBUG] [Thread-117664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:44:50.592 [INFO] [Thread-117664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:44:50.599 [DEBUG] [Thread-117664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:44:50.599 [DEBUG] [Thread-117664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:44:50.599 [DEBUG] [Thread-117664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] client lang: <none>
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] server lang: <none>
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] kex follows: False
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] Compression: none
2025-12-03T13:44:50.600 [DEBUG] [Thread-117664] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:44:50.656 [DEBUG] [Thread-117664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:44:50.657 [DEBUG] [Thread-117664] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:44:50.657 [DEBUG] [Thread-117664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:44:50.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:44:50.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:44:50.713 [DEBUG] [Thread-117664] [transport.py] [_log()] userauth is OK
2025-12-03T13:44:50.713 [DEBUG] [Thread-117664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:44:50.713 [DEBUG] [Thread-117664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:44:50.713 [DEBUG] [Thread-117664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:44:50.713 [DEBUG] [Thread-117664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:44:50.732 [INFO] [Thread-117664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:44:50.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:44:50.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:44:51.630 [DEBUG] [Thread-117664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:44:51.630 [DEBUG] [Thread-117664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:44:51.677 [DEBUG] [Thread-117664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:44:51.678 [DEBUG] [Thread-117664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:44:51.686 [DEBUG] [Thread-117664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:44:51.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:44:51.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:44:51.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:44:51.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:44:51.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:44:51.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:44:51.719 [DEBUG] [Thread-117664] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:44:57.894 [DEBUG] [Thread-117666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:12.938 [DEBUG] [Thread-117667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:14.054 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:14.055 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:21.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:45:21.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:45:21.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:45:22.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 45, 3), 22.7, 21.75, 0.0, 10.52, 20.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:45:22.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:45:03
2025-12-03T13:45:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:45:22.704 [DEBUG] [Thread-117668] [transport.py] [_log()] starting thread (client mode): 0xa27c8070
2025-12-03T13:45:22.704 [DEBUG] [Thread-117668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:45:22.723 [DEBUG] [Thread-117668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:45:22.723 [INFO] [Thread-117668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:22.726 [DEBUG] [Thread-117668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] client lang: <none>
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] server lang: <none>
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] kex follows: False
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] Compression: none
2025-12-03T13:45:22.727 [DEBUG] [Thread-117668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:45:22.744 [DEBUG] [Thread-117668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:45:22.744 [DEBUG] [Thread-117668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:45:22.745 [DEBUG] [Thread-117668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:45:22.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:45:22.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:45:22.747 [DEBUG] [Thread-117668] [transport.py] [_log()] userauth is OK
2025-12-03T13:45:22.747 [DEBUG] [Thread-117668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:45:22.747 [DEBUG] [Thread-117668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:45:22.747 [DEBUG] [Thread-117668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:45:22.747 [DEBUG] [Thread-117668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:45:22.771 [INFO] [Thread-117668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:45:22.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:45:23.338 [DEBUG] [Thread-117668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:45:23.338 [DEBUG] [Thread-117668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:45:23.339 [DEBUG] [Thread-117668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:45:23.379 [DEBUG] [Thread-117668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:45:23.379 [DEBUG] [Thread-117668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:45:23.382 [DEBUG] [Thread-117668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:45:23.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:45:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:45:23.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:45:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:45:23.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:45:23.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:45:23.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:45:23.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:45:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:45:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.489632 -999.00  +20.50  17.83     28   +1.50 1 1 1 1 1   888    0 22.35 99.54 ----- 17.1 17.8 171.4 20.8 28.9 -26.9 29.0 -27.6 29.6 -26.5 30.2 -27.1
2025-12-03T13:45:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:45:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:45:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.489632
2025-12-03T13:45:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:45:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:45:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:45:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:45:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:45:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:45:03', tmtdew=22.7, humidity=21.75, cloud=0.0, wind=10.52, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:45:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:45:23.407 [DEBUG] [Thread-117668] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:45:23.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:45:23.502 [DEBUG] [Thread-117671] [transport.py] [_log()] starting thread (client mode): 0xa5161180
2025-12-03T13:45:23.502 [DEBUG] [Thread-117671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:45:23.516 [DEBUG] [Thread-117671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:45:23.517 [INFO] [Thread-117671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:23.524 [DEBUG] [Thread-117671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] client lang: <none>
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] server lang: <none>
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] kex follows: False
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] Compression: none
2025-12-03T13:45:23.525 [DEBUG] [Thread-117671] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:45:23.589 [DEBUG] [Thread-117671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:45:23.589 [DEBUG] [Thread-117671] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:45:23.590 [DEBUG] [Thread-117671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:45:23.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:45:23.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:45:23.645 [DEBUG] [Thread-117671] [transport.py] [_log()] userauth is OK
2025-12-03T13:45:23.645 [DEBUG] [Thread-117671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:45:23.645 [DEBUG] [Thread-117671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:45:23.645 [DEBUG] [Thread-117671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:45:23.645 [DEBUG] [Thread-117671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:45:23.663 [INFO] [Thread-117671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:45:23.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:45:23.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:45:24.504 [DEBUG] [Thread-117671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:45:24.504 [DEBUG] [Thread-117671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:45:24.553 [DEBUG] [Thread-117671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:45:24.553 [DEBUG] [Thread-117671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:45:24.561 [DEBUG] [Thread-117671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:45:24.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:45:24.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:45:24.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:45:24.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:45:24.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:45:24.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:45:24.596 [DEBUG] [Thread-117671] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:45:27.970 [DEBUG] [Thread-117673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:43.026 [DEBUG] [Thread-117674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:48.723 [DEBUG] [Thread-117675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:45:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:45:54.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:45:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:45:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 45, 35), 22.62, 21.6, 0.0, 6.71, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:45:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:45:35
2025-12-03T13:45:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:45:55.616 [DEBUG] [Thread-117676] [transport.py] [_log()] starting thread (client mode): 0xa519a4a0
2025-12-03T13:45:55.616 [DEBUG] [Thread-117676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:45:55.636 [DEBUG] [Thread-117676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:45:55.636 [INFO] [Thread-117676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] client lang: <none>
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] server lang: <none>
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] kex follows: False
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:45:55.639 [DEBUG] [Thread-117676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:45:55.640 [DEBUG] [Thread-117676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:45:55.640 [DEBUG] [Thread-117676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:45:55.640 [DEBUG] [Thread-117676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:45:55.640 [DEBUG] [Thread-117676] [transport.py] [_log()] Compression: none
2025-12-03T13:45:55.640 [DEBUG] [Thread-117676] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:45:55.651 [DEBUG] [Thread-117676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:45:55.652 [DEBUG] [Thread-117676] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:45:55.652 [DEBUG] [Thread-117676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:45:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:45:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:45:55.652 [DEBUG] [Thread-117676] [transport.py] [_log()] userauth is OK
2025-12-03T13:45:55.652 [DEBUG] [Thread-117676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:45:55.653 [DEBUG] [Thread-117676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:45:55.653 [DEBUG] [Thread-117676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:45:55.653 [DEBUG] [Thread-117676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:45:55.661 [INFO] [Thread-117676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:45:55.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:45:56.283 [DEBUG] [Thread-117676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:45:56.284 [DEBUG] [Thread-117676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:45:56.284 [DEBUG] [Thread-117676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:45:56.325 [DEBUG] [Thread-117676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:45:56.326 [DEBUG] [Thread-117676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:45:56.329 [DEBUG] [Thread-117676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:45:56.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:45:56.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:45:56.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:45:56.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:45:56.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:45:56.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:45:56.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.489980 -999.00  +20.40  10.52     28   +1.30 1 1 1 1 1   888    0 22.62 95.49 ----- 7.6 10.5 165.8 15.9 28.9 -26.6 28.8 -26.4 29.5 -27.0 30.0 -26.8
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:45:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.489980
2025-12-03T13:45:56.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:45:56.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:45:56.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:45:56.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:45:56.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:45:56.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:45:35', tmtdew=22.62, humidity=21.6, cloud=0.0, wind=6.71, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:45:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:45:56.357 [DEBUG] [Thread-117676] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:45:56.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:45:56.466 [DEBUG] [Thread-117679] [transport.py] [_log()] starting thread (client mode): 0xa5162950
2025-12-03T13:45:56.466 [DEBUG] [Thread-117679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:45:56.482 [DEBUG] [Thread-117679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:45:56.482 [INFO] [Thread-117679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:45:56.489 [DEBUG] [Thread-117679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:45:56.489 [DEBUG] [Thread-117679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] client lang: <none>
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] server lang: <none>
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] kex follows: False
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] Compression: none
2025-12-03T13:45:56.490 [DEBUG] [Thread-117679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:45:56.548 [DEBUG] [Thread-117679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:45:56.548 [DEBUG] [Thread-117679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:45:56.549 [DEBUG] [Thread-117679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:45:56.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:45:56.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:45:56.605 [DEBUG] [Thread-117679] [transport.py] [_log()] userauth is OK
2025-12-03T13:45:56.605 [DEBUG] [Thread-117679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:45:56.605 [DEBUG] [Thread-117679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:45:56.605 [DEBUG] [Thread-117679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:45:56.605 [DEBUG] [Thread-117679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:45:56.624 [INFO] [Thread-117679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:45:56.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:45:56.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:45:57.467 [DEBUG] [Thread-117679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:45:57.467 [DEBUG] [Thread-117679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:45:57.515 [DEBUG] [Thread-117679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:45:57.515 [DEBUG] [Thread-117679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:45:57.524 [DEBUG] [Thread-117679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:45:57.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:45:57.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:45:57.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:45:57.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:45:57.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:45:57.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:45:57.562 [DEBUG] [Thread-117679] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:45:58.058 [DEBUG] [Thread-117681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:13.103 [DEBUG] [Thread-117682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:14.194 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:14.196 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:46:27.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:46:27.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:46:28.132 [DEBUG] [Thread-117683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 46, 7), 22.47, 21.82, 0.0, 7.57, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:46:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:46:07
2025-12-03T13:46:28.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:46:28.500 [DEBUG] [Thread-117684] [transport.py] [_log()] starting thread (client mode): 0xa5162530
2025-12-03T13:46:28.501 [DEBUG] [Thread-117684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:46:28.521 [DEBUG] [Thread-117684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:46:28.521 [INFO] [Thread-117684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:46:28.524 [DEBUG] [Thread-117684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:46:28.524 [DEBUG] [Thread-117684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] client lang: <none>
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] server lang: <none>
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] kex follows: False
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:46:28.525 [DEBUG] [Thread-117684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:46:28.526 [DEBUG] [Thread-117684] [transport.py] [_log()] Compression: none
2025-12-03T13:46:28.526 [DEBUG] [Thread-117684] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:46:28.543 [DEBUG] [Thread-117684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:46:28.543 [DEBUG] [Thread-117684] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:46:28.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:46:28.544 [DEBUG] [Thread-117684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:46:28.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:46:28.546 [DEBUG] [Thread-117684] [transport.py] [_log()] userauth is OK
2025-12-03T13:46:28.546 [DEBUG] [Thread-117684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:46:28.546 [DEBUG] [Thread-117684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:46:28.546 [DEBUG] [Thread-117684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:46:28.546 [DEBUG] [Thread-117684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:46:28.569 [INFO] [Thread-117684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:46:28.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:46:29.284 [DEBUG] [Thread-117684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:46:29.284 [DEBUG] [Thread-117684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:46:29.284 [DEBUG] [Thread-117684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:46:29.324 [DEBUG] [Thread-117684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:46:29.324 [DEBUG] [Thread-117684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:46:29.326 [DEBUG] [Thread-117684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:46:29.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:46:29.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:46:29.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:46:29.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:46:29.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:46:29.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:46:29.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.489980 -999.00  +20.40  10.52     28   +1.30 1 1 1 1 1   888    0 22.62 95.49 ----- 7.6 10.5 165.8 15.9 28.9 -26.6 28.8 -26.4 29.5 -27.0 30.0 -26.8
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.489980
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:46:29.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:46:07', tmtdew=22.47, humidity=21.82, cloud=0.0, wind=7.57, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:45:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:46:29.338 [DEBUG] [Thread-117684] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:46:29.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:46:29.424 [DEBUG] [Thread-117687] [transport.py] [_log()] starting thread (client mode): 0xa51cc9a0
2025-12-03T13:46:29.424 [DEBUG] [Thread-117687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:46:29.444 [DEBUG] [Thread-117687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:46:29.444 [INFO] [Thread-117687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:46:29.451 [DEBUG] [Thread-117687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] client lang: <none>
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] server lang: <none>
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] kex follows: False
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] Compression: none
2025-12-03T13:46:29.452 [DEBUG] [Thread-117687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:46:29.507 [DEBUG] [Thread-117687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:46:29.507 [DEBUG] [Thread-117687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:46:29.507 [DEBUG] [Thread-117687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:46:29.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:46:29.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:46:29.564 [DEBUG] [Thread-117687] [transport.py] [_log()] userauth is OK
2025-12-03T13:46:29.564 [DEBUG] [Thread-117687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:46:29.564 [DEBUG] [Thread-117687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:46:29.564 [DEBUG] [Thread-117687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:46:29.564 [DEBUG] [Thread-117687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:46:29.578 [INFO] [Thread-117687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:46:29.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:46:29.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:46:30.478 [DEBUG] [Thread-117687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:46:30.478 [DEBUG] [Thread-117687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:46:30.525 [DEBUG] [Thread-117687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:46:30.525 [DEBUG] [Thread-117687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:46:30.533 [DEBUG] [Thread-117687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:46:30.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:46:30.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:46:30.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:46:30.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:46:30.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:46:30.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:46:30.564 [DEBUG] [Thread-117687] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:46:43.156 [DEBUG] [Thread-117689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:48.764 [DEBUG] [Thread-117690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:46:58.202 [DEBUG] [Thread-117691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:00.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:47:00.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:47:00.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:47:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 46, 39), 22.52, 22.05, 0.0, 6.95, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:47:01.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:46:39
2025-12-03T13:47:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:47:01.537 [DEBUG] [Thread-117692] [transport.py] [_log()] starting thread (client mode): 0xa5161660
2025-12-03T13:47:01.537 [DEBUG] [Thread-117692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:47:01.559 [DEBUG] [Thread-117692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:47:01.559 [INFO] [Thread-117692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] client lang: <none>
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] server lang: <none>
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] kex follows: False
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:47:01.563 [DEBUG] [Thread-117692] [transport.py] [_log()] Compression: none
2025-12-03T13:47:01.564 [DEBUG] [Thread-117692] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:47:01.582 [DEBUG] [Thread-117692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:47:01.582 [DEBUG] [Thread-117692] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:47:01.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:47:01.582 [DEBUG] [Thread-117692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:47:01.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:47:01.583 [DEBUG] [Thread-117692] [transport.py] [_log()] userauth is OK
2025-12-03T13:47:01.583 [DEBUG] [Thread-117692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:47:01.583 [DEBUG] [Thread-117692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:47:01.583 [DEBUG] [Thread-117692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:47:01.583 [DEBUG] [Thread-117692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:47:01.599 [INFO] [Thread-117692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:47:01.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:47:02.255 [DEBUG] [Thread-117692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:47:02.255 [DEBUG] [Thread-117692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:47:02.256 [DEBUG] [Thread-117692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:47:02.296 [DEBUG] [Thread-117692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:47:02.296 [DEBUG] [Thread-117692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:47:02.298 [DEBUG] [Thread-117692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:47:02.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:47:02.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:47:02.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:47:02.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:47:02.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:47:02.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:47:02.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.490327 -999.00  +20.40   4.44     28   +1.50 1 1 1 1 1   888    0 22.56 92.21 ----- 2.7 4.4 194.2 9.2 29.0 -25.4 28.6 -29.3 29.5 -25.3 29.9 -26.7
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:47:02.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.490327
2025-12-03T13:47:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:47:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:47:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:47:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:47:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:47:02.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:46:39', tmtdew=22.52, humidity=22.05, cloud=0.0, wind=6.95, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:46:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:47:02.324 [DEBUG] [Thread-117692] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:47:02.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:47:02.421 [DEBUG] [Thread-117695] [transport.py] [_log()] starting thread (client mode): 0xa27a39a0
2025-12-03T13:47:02.421 [DEBUG] [Thread-117695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:47:02.436 [DEBUG] [Thread-117695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:47:02.436 [INFO] [Thread-117695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:47:02.443 [DEBUG] [Thread-117695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] client lang: <none>
2025-12-03T13:47:02.444 [DEBUG] [Thread-117695] [transport.py] [_log()] server lang: <none>
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] kex follows: False
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] Compression: none
2025-12-03T13:47:02.445 [DEBUG] [Thread-117695] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:47:02.500 [DEBUG] [Thread-117695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:47:02.500 [DEBUG] [Thread-117695] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:47:02.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:47:02.501 [DEBUG] [Thread-117695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:47:02.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:47:02.556 [DEBUG] [Thread-117695] [transport.py] [_log()] userauth is OK
2025-12-03T13:47:02.556 [DEBUG] [Thread-117695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:47:02.556 [DEBUG] [Thread-117695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:47:02.556 [DEBUG] [Thread-117695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:47:02.556 [DEBUG] [Thread-117695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:47:02.574 [INFO] [Thread-117695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:47:02.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:47:02.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:47:03.400 [DEBUG] [Thread-117695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:47:03.400 [DEBUG] [Thread-117695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:47:03.447 [DEBUG] [Thread-117695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:47:03.447 [DEBUG] [Thread-117695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:47:03.456 [DEBUG] [Thread-117695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:47:03.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:47:03.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:47:03.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:47:03.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:47:03.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:47:03.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:47:03.490 [DEBUG] [Thread-117695] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:47:13.231 [DEBUG] [Thread-117697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:14.336 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:14.337 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:28.267 [DEBUG] [Thread-117698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:33.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:47:33.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:47:33.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:47:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 47, 11), 22.44, 22.17, 0.0, 8.01, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:47:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:47:11
2025-12-03T13:47:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:47:34.450 [DEBUG] [Thread-117699] [transport.py] [_log()] starting thread (client mode): 0xa517f040
2025-12-03T13:47:34.450 [DEBUG] [Thread-117699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:47:34.472 [DEBUG] [Thread-117699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:47:34.472 [INFO] [Thread-117699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:34.475 [DEBUG] [Thread-117699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] client lang: <none>
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] server lang: <none>
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] kex follows: False
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] Compression: none
2025-12-03T13:47:34.476 [DEBUG] [Thread-117699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:47:34.493 [DEBUG] [Thread-117699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:47:34.493 [DEBUG] [Thread-117699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:47:34.494 [DEBUG] [Thread-117699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:47:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:47:34.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:47:34.495 [DEBUG] [Thread-117699] [transport.py] [_log()] userauth is OK
2025-12-03T13:47:34.496 [DEBUG] [Thread-117699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:47:34.496 [DEBUG] [Thread-117699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:47:34.496 [DEBUG] [Thread-117699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:47:34.496 [DEBUG] [Thread-117699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:47:34.519 [INFO] [Thread-117699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:47:34.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:47:35.280 [DEBUG] [Thread-117699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:47:35.280 [DEBUG] [Thread-117699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:47:35.280 [DEBUG] [Thread-117699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:47:35.320 [DEBUG] [Thread-117699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:47:35.321 [DEBUG] [Thread-117699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:47:35.323 [DEBUG] [Thread-117699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:47:35.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:47:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:47:35.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:47:35.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:47:35.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:47:35.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:47:35.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.490674 -999.00  +20.50   8.05     28   +1.50 1 1 1 1 1   888    0 21.70 84.01 ----- 8.4 8.1 114.6 10.6 29.1 -25.9 28.7 -25.7 29.5 -25.2 30.0 -26.2
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:47:35.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.490674
2025-12-03T13:47:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:47:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:47:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:47:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:47:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:47:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:47:11', tmtdew=22.44, humidity=22.17, cloud=0.0, wind=8.01, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:46:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:47:35.339 [DEBUG] [Thread-117699] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:47:35.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:47:35.436 [DEBUG] [Thread-117702] [transport.py] [_log()] starting thread (client mode): 0xa2747b50
2025-12-03T13:47:35.436 [DEBUG] [Thread-117702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:47:35.453 [DEBUG] [Thread-117702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:47:35.453 [INFO] [Thread-117702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:47:35.460 [DEBUG] [Thread-117702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] client lang: <none>
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] server lang: <none>
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] kex follows: False
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:47:35.461 [DEBUG] [Thread-117702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:47:35.462 [DEBUG] [Thread-117702] [transport.py] [_log()] Compression: none
2025-12-03T13:47:35.462 [DEBUG] [Thread-117702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:47:35.519 [DEBUG] [Thread-117702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:47:35.520 [DEBUG] [Thread-117702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:47:35.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:47:35.521 [DEBUG] [Thread-117702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:47:35.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:47:35.576 [DEBUG] [Thread-117702] [transport.py] [_log()] userauth is OK
2025-12-03T13:47:35.576 [DEBUG] [Thread-117702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:47:35.576 [DEBUG] [Thread-117702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:47:35.576 [DEBUG] [Thread-117702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:47:35.577 [DEBUG] [Thread-117702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:47:35.599 [INFO] [Thread-117702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:47:35.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:47:35.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:47:36.414 [DEBUG] [Thread-117702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:47:36.414 [DEBUG] [Thread-117702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:47:36.462 [DEBUG] [Thread-117702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:47:36.462 [DEBUG] [Thread-117702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:47:36.471 [DEBUG] [Thread-117702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:47:36.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:47:36.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:47:36.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:47:36.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:47:36.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:47:36.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:47:36.506 [DEBUG] [Thread-117702] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:47:43.297 [DEBUG] [Thread-117704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:48.792 [DEBUG] [Thread-117705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:47:58.345 [DEBUG] [Thread-117706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:06.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:48:06.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:48:06.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:48:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 47, 43), 22.07, 22.7, 0.0, 10.64, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:48:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:47:43
2025-12-03T13:48:07.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:48:07.471 [DEBUG] [Thread-117707] [transport.py] [_log()] starting thread (client mode): 0xa27a14b0
2025-12-03T13:48:07.471 [DEBUG] [Thread-117707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:48:07.491 [DEBUG] [Thread-117707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:48:07.491 [INFO] [Thread-117707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:48:07.494 [DEBUG] [Thread-117707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:48:07.494 [DEBUG] [Thread-117707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:48:07.494 [DEBUG] [Thread-117707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:48:07.494 [DEBUG] [Thread-117707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:07.494 [DEBUG] [Thread-117707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] client lang: <none>
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] server lang: <none>
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] kex follows: False
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] Compression: none
2025-12-03T13:48:07.495 [DEBUG] [Thread-117707] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:48:07.515 [DEBUG] [Thread-117707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:48:07.515 [DEBUG] [Thread-117707] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:48:07.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:48:07.516 [DEBUG] [Thread-117707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:48:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:48:07.557 [DEBUG] [Thread-117707] [transport.py] [_log()] userauth is OK
2025-12-03T13:48:07.557 [DEBUG] [Thread-117707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:48:07.557 [DEBUG] [Thread-117707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:48:07.557 [DEBUG] [Thread-117707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:48:07.557 [DEBUG] [Thread-117707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:48:07.580 [INFO] [Thread-117707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:48:07.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:48:08.219 [DEBUG] [Thread-117707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:48:08.219 [DEBUG] [Thread-117707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:48:08.228 [DEBUG] [Thread-117707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:48:08.260 [DEBUG] [Thread-117707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:48:08.260 [DEBUG] [Thread-117707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:48:08.262 [DEBUG] [Thread-117707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:48:08.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:48:08.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:48:08.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:48:08.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:48:08.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:48:08.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:48:08.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.491022 -999.00  +20.70  11.03     27   +1.50 1 1 1 1 1   888    0 21.24 68.22 ----- 12.3 11.0 128.9 16.9 29.0 -25.2 28.8 -27.3 29.6 -25.4 30.1 -25.0
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:48:08.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.491022
2025-12-03T13:48:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:48:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:48:08.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:48:08.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:48:08.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:48:08.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:47:43', tmtdew=22.07, humidity=22.7, cloud=0.0, wind=10.64, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:47:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:48:08.285 [DEBUG] [Thread-117707] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:48:08.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:48:08.381 [DEBUG] [Thread-117710] [transport.py] [_log()] starting thread (client mode): 0xa51624d0
2025-12-03T13:48:08.382 [DEBUG] [Thread-117710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:48:08.396 [DEBUG] [Thread-117710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:48:08.396 [INFO] [Thread-117710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:08.403 [DEBUG] [Thread-117710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] client lang: <none>
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] server lang: <none>
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] kex follows: False
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] Compression: none
2025-12-03T13:48:08.404 [DEBUG] [Thread-117710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:48:08.464 [DEBUG] [Thread-117710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:48:08.464 [DEBUG] [Thread-117710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:48:08.465 [DEBUG] [Thread-117710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:48:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:48:08.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:48:08.520 [DEBUG] [Thread-117710] [transport.py] [_log()] userauth is OK
2025-12-03T13:48:08.520 [DEBUG] [Thread-117710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:48:08.520 [DEBUG] [Thread-117710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:48:08.520 [DEBUG] [Thread-117710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:48:08.520 [DEBUG] [Thread-117710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:48:08.539 [INFO] [Thread-117710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:48:08.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:48:08.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:48:09.335 [DEBUG] [Thread-117710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:48:09.335 [DEBUG] [Thread-117710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:48:09.384 [DEBUG] [Thread-117710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:48:09.384 [DEBUG] [Thread-117710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:48:09.393 [DEBUG] [Thread-117710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:48:09.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:48:09.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:48:09.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:48:09.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:48:09.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:48:09.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:48:09.428 [DEBUG] [Thread-117710] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:48:13.376 [DEBUG] [Thread-117712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:14.476 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:14.477 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:28.427 [DEBUG] [Thread-117713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:39.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:48:39.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:48:39.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:48:40.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 48, 15), 21.79, 23.1, 0.0, 10.38, 20.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:48:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:48:15
2025-12-03T13:48:40.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:48:40.387 [DEBUG] [Thread-117714] [transport.py] [_log()] starting thread (client mode): 0xa27cab90
2025-12-03T13:48:40.387 [DEBUG] [Thread-117714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:48:40.408 [DEBUG] [Thread-117714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:48:40.408 [INFO] [Thread-117714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:48:40.411 [DEBUG] [Thread-117714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:48:40.411 [DEBUG] [Thread-117714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] client lang: <none>
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] server lang: <none>
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] kex follows: False
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] Compression: none
2025-12-03T13:48:40.412 [DEBUG] [Thread-117714] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:48:40.429 [DEBUG] [Thread-117714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:48:40.430 [DEBUG] [Thread-117714] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:48:40.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:48:40.431 [DEBUG] [Thread-117714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:48:40.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:48:40.432 [DEBUG] [Thread-117714] [transport.py] [_log()] userauth is OK
2025-12-03T13:48:40.432 [DEBUG] [Thread-117714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:48:40.432 [DEBUG] [Thread-117714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:48:40.433 [DEBUG] [Thread-117714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:48:40.433 [DEBUG] [Thread-117714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:48:40.455 [INFO] [Thread-117714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:48:40.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:48:41.242 [DEBUG] [Thread-117714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:48:41.242 [DEBUG] [Thread-117714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:48:41.242 [DEBUG] [Thread-117714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:48:41.283 [DEBUG] [Thread-117714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:48:41.283 [DEBUG] [Thread-117714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:48:41.289 [DEBUG] [Thread-117714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:48:41.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:48:41.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:48:41.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:48:41.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:48:41.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:48:41.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:48:41.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:48:41.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.491369 -999.00  +20.50  10.99     28   +1.40 1 1 1 1 1   888    0 20.46 56.68 ----- 10.7 11.0 111.0 16.4 29.0 -24.9 28.9 -26.4 29.6 -25.7 30.0 -26.0
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.491369
2025-12-03T13:48:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:48:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:48:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:48:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:48:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:48:41.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:48:15', tmtdew=21.79, humidity=23.1, cloud=0.0, wind=10.38, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:47:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:48:41.314 [DEBUG] [Thread-117714] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:48:41.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:48:41.411 [DEBUG] [Thread-117717] [transport.py] [_log()] starting thread (client mode): 0xa51639a0
2025-12-03T13:48:41.411 [DEBUG] [Thread-117717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:48:41.430 [DEBUG] [Thread-117717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:48:41.430 [INFO] [Thread-117717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:48:41.437 [DEBUG] [Thread-117717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:48:41.437 [DEBUG] [Thread-117717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] client lang: <none>
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] server lang: <none>
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] kex follows: False
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:48:41.438 [DEBUG] [Thread-117717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:48:41.439 [DEBUG] [Thread-117717] [transport.py] [_log()] Compression: none
2025-12-03T13:48:41.439 [DEBUG] [Thread-117717] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:48:41.495 [DEBUG] [Thread-117717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:48:41.496 [DEBUG] [Thread-117717] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:48:41.496 [DEBUG] [Thread-117717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:48:41.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:48:41.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:48:41.552 [DEBUG] [Thread-117717] [transport.py] [_log()] userauth is OK
2025-12-03T13:48:41.552 [DEBUG] [Thread-117717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:48:41.552 [DEBUG] [Thread-117717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:48:41.552 [DEBUG] [Thread-117717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:48:41.552 [DEBUG] [Thread-117717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:48:41.572 [INFO] [Thread-117717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:48:41.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:48:41.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:48:42.430 [DEBUG] [Thread-117717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:48:42.430 [DEBUG] [Thread-117717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:48:42.479 [DEBUG] [Thread-117717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:48:42.479 [DEBUG] [Thread-117717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:48:42.488 [DEBUG] [Thread-117717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:48:42.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:48:42.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:48:42.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:48:42.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:48:42.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:48:42.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:48:42.523 [DEBUG] [Thread-117717] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:48:43.455 [DEBUG] [Thread-117719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:48.821 [DEBUG] [Thread-117720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:48:58.498 [DEBUG] [Thread-117721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:12.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:49:12.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:49:12.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:49:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 48, 47), 21.99, 22.73, 0.0, 15.33, 20.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:49:13.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:48:47
2025-12-03T13:49:13.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:49:13.483 [DEBUG] [Thread-117722] [transport.py] [_log()] starting thread (client mode): 0xa2747d00
2025-12-03T13:49:13.483 [DEBUG] [Thread-117722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:49:13.505 [DEBUG] [Thread-117722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:49:13.505 [INFO] [Thread-117722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:49:13.508 [DEBUG] [Thread-117722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:49:13.508 [DEBUG] [Thread-117722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:49:13.508 [DEBUG] [Thread-117722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] client lang: <none>
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] server lang: <none>
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] kex follows: False
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:49:13.509 [DEBUG] [Thread-117722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:49:13.510 [DEBUG] [Thread-117722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:49:13.510 [DEBUG] [Thread-117722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:49:13.510 [DEBUG] [Thread-117722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:49:13.510 [DEBUG] [Thread-117722] [transport.py] [_log()] Compression: none
2025-12-03T13:49:13.510 [DEBUG] [Thread-117722] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:49:13.525 [DEBUG] [Thread-117724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:13.528 [DEBUG] [Thread-117722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:49:13.529 [DEBUG] [Thread-117722] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:49:13.530 [DEBUG] [Thread-117722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:49:13.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:49:13.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:49:13.532 [DEBUG] [Thread-117722] [transport.py] [_log()] userauth is OK
2025-12-03T13:49:13.532 [DEBUG] [Thread-117722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:49:13.533 [DEBUG] [Thread-117722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:49:13.533 [DEBUG] [Thread-117722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:49:13.533 [DEBUG] [Thread-117722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:49:13.556 [INFO] [Thread-117722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:49:13.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:49:14.205 [DEBUG] [Thread-117722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:49:14.205 [DEBUG] [Thread-117722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:49:14.205 [DEBUG] [Thread-117722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:49:14.246 [DEBUG] [Thread-117722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:49:14.246 [DEBUG] [Thread-117722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:49:14.249 [DEBUG] [Thread-117722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:49:14.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:49:14.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:49:14.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:49:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:49:14.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:49:14.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:49:14.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:49:14.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.492063 -999.00  +20.70  16.72     28   +1.50 1 1 1 1 1   888    0 20.86 44.21 ----- 16.8 16.7 145.0 17.4 28.9 -26.4 29.0 -25.2 29.7 -26.3 30.1 -25.1
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.492063
2025-12-03T13:49:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:49:14.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:49:14.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:49:14.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:49:14.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:49:14.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:48:47', tmtdew=21.99, humidity=22.73, cloud=0.0, wind=15.33, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:48:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:49:14.274 [DEBUG] [Thread-117722] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:49:14.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:49:14.371 [DEBUG] [Thread-117726] [transport.py] [_log()] starting thread (client mode): 0xa27442e0
2025-12-03T13:49:14.371 [DEBUG] [Thread-117726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:49:14.388 [DEBUG] [Thread-117726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:49:14.388 [INFO] [Thread-117726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:49:14.395 [DEBUG] [Thread-117726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:49:14.395 [DEBUG] [Thread-117726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:49:14.395 [DEBUG] [Thread-117726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:49:14.395 [DEBUG] [Thread-117726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] client lang: <none>
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] server lang: <none>
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] kex follows: False
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] Compression: none
2025-12-03T13:49:14.396 [DEBUG] [Thread-117726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:49:14.455 [DEBUG] [Thread-117726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:49:14.455 [DEBUG] [Thread-117726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:49:14.456 [DEBUG] [Thread-117726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:49:14.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:49:14.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:49:14.511 [DEBUG] [Thread-117726] [transport.py] [_log()] userauth is OK
2025-12-03T13:49:14.512 [DEBUG] [Thread-117726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:49:14.512 [DEBUG] [Thread-117726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:49:14.512 [DEBUG] [Thread-117726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:49:14.512 [DEBUG] [Thread-117726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:49:14.531 [INFO] [Thread-117726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:49:14.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:49:14.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:49:14.616 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:14.617 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:15.355 [DEBUG] [Thread-117726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:49:15.355 [DEBUG] [Thread-117726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:49:15.404 [DEBUG] [Thread-117726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:49:15.404 [DEBUG] [Thread-117726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:49:15.413 [DEBUG] [Thread-117726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:49:15.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:49:15.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:49:15.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:49:15.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:49:15.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:49:15.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:49:15.447 [DEBUG] [Thread-117726] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:49:28.561 [DEBUG] [Thread-117728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:43.608 [DEBUG] [Thread-117729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:45.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:49:45.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:49:45.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:49:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 49, 19), 22.02, 22.66, 0.0, 15.65, 20.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:49:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:49:19
2025-12-03T13:49:46.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:49:46.457 [DEBUG] [Thread-117730] [transport.py] [_log()] starting thread (client mode): 0xa2750430
2025-12-03T13:49:46.458 [DEBUG] [Thread-117730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:49:46.477 [DEBUG] [Thread-117730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:49:46.477 [INFO] [Thread-117730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:49:46.480 [DEBUG] [Thread-117730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:49:46.480 [DEBUG] [Thread-117730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:49:46.480 [DEBUG] [Thread-117730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] client lang: <none>
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] server lang: <none>
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] kex follows: False
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] Compression: none
2025-12-03T13:49:46.481 [DEBUG] [Thread-117730] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:49:46.498 [DEBUG] [Thread-117730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:49:46.498 [DEBUG] [Thread-117730] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:49:46.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:49:46.499 [DEBUG] [Thread-117730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:49:46.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:49:46.500 [DEBUG] [Thread-117730] [transport.py] [_log()] userauth is OK
2025-12-03T13:49:46.500 [DEBUG] [Thread-117730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:49:46.500 [DEBUG] [Thread-117730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:49:46.500 [DEBUG] [Thread-117730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:49:46.500 [DEBUG] [Thread-117730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:49:46.512 [INFO] [Thread-117730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:49:46.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:49:47.249 [DEBUG] [Thread-117730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:49:47.249 [DEBUG] [Thread-117730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:49:47.249 [DEBUG] [Thread-117730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:49:47.290 [DEBUG] [Thread-117730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:49:47.290 [DEBUG] [Thread-117730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:49:47.293 [DEBUG] [Thread-117730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:49:47.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:49:47.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:49:47.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:49:47.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:49:47.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:49:47.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:49:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.492410 -999.00  +20.70  15.23     28   +1.50 1 1 1 1 1   888    0 19.96 33.61 ----- 10.1 15.2 128.8 18.2 29.1 -25.3 28.9 -25.7 29.5 -25.3 30.0 -25.1
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.492410
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:49:47.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:49:19', tmtdew=22.02, humidity=22.66, cloud=0.0, wind=15.65, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:49:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:49:47.313 [DEBUG] [Thread-117730] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:49:47.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:49:47.401 [DEBUG] [Thread-117733] [transport.py] [_log()] starting thread (client mode): 0xa2751f00
2025-12-03T13:49:47.401 [DEBUG] [Thread-117733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:49:47.416 [DEBUG] [Thread-117733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:49:47.416 [INFO] [Thread-117733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:49:47.423 [DEBUG] [Thread-117733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] client lang: <none>
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] server lang: <none>
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] kex follows: False
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] Compression: none
2025-12-03T13:49:47.424 [DEBUG] [Thread-117733] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:49:47.482 [DEBUG] [Thread-117733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:49:47.483 [DEBUG] [Thread-117733] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:49:47.483 [DEBUG] [Thread-117733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:49:47.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:49:47.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:49:47.540 [DEBUG] [Thread-117733] [transport.py] [_log()] userauth is OK
2025-12-03T13:49:47.540 [DEBUG] [Thread-117733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:49:47.540 [DEBUG] [Thread-117733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:49:47.540 [DEBUG] [Thread-117733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:49:47.540 [DEBUG] [Thread-117733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:49:47.556 [INFO] [Thread-117733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:49:47.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:49:47.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:49:48.433 [DEBUG] [Thread-117733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:49:48.433 [DEBUG] [Thread-117733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:49:48.480 [DEBUG] [Thread-117733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:49:48.480 [DEBUG] [Thread-117733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:49:48.489 [DEBUG] [Thread-117733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:49:48.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:49:48.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:49:48.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:49:48.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:49:48.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:49:48.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:49:48.521 [DEBUG] [Thread-117733] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:49:48.850 [DEBUG] [Thread-117735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:49:58.641 [DEBUG] [Thread-117736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:13.695 [DEBUG] [Thread-117737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:14.755 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:14.756 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:18.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:50:18.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:50:18.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:50:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 49, 50), 22.25, 22.13, 0.0, 16.96, 20.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:50:19.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:49:50
2025-12-03T13:50:19.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:50:19.491 [DEBUG] [Thread-117738] [transport.py] [_log()] starting thread (client mode): 0xa2745f60
2025-12-03T13:50:19.491 [DEBUG] [Thread-117738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:50:19.511 [DEBUG] [Thread-117738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:50:19.511 [INFO] [Thread-117738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:50:19.516 [DEBUG] [Thread-117738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] client lang: <none>
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] server lang: <none>
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] kex follows: False
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] Compression: none
2025-12-03T13:50:19.517 [DEBUG] [Thread-117738] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:50:19.533 [DEBUG] [Thread-117738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:50:19.534 [DEBUG] [Thread-117738] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:50:19.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:50:19.534 [DEBUG] [Thread-117738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:50:19.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:50:19.536 [DEBUG] [Thread-117738] [transport.py] [_log()] userauth is OK
2025-12-03T13:50:19.536 [DEBUG] [Thread-117738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:50:19.537 [DEBUG] [Thread-117738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:50:19.537 [DEBUG] [Thread-117738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:50:19.537 [DEBUG] [Thread-117738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:50:19.554 [INFO] [Thread-117738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:50:19.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:50:20.199 [DEBUG] [Thread-117738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:50:20.199 [DEBUG] [Thread-117738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:50:20.199 [DEBUG] [Thread-117738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:50:20.240 [DEBUG] [Thread-117738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:50:20.240 [DEBUG] [Thread-117738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:50:20.243 [DEBUG] [Thread-117738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:50:20.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:50:20.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:50:20.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:50:20.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:50:20.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:50:20.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:50:20.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:50:20.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:50:20.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:50:20.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.492758 -999.00  +21.10  12.09     28   +1.80 1 1 1 1 1   888    0 20.01 24.01 ----- 11.0 12.1 183.4 13.7 29.2 -26.0 28.9 -25.4 29.7 -23.7 30.1 -24.9
2025-12-03T13:50:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:50:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:50:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.492758
2025-12-03T13:50:20.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:50:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:50:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:50:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:50:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:50:20.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:49:50', tmtdew=22.25, humidity=22.13, cloud=0.0, wind=16.96, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:49:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:50:20.269 [DEBUG] [Thread-117738] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:50:20.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:50:20.366 [DEBUG] [Thread-117741] [transport.py] [_log()] starting thread (client mode): 0xa5163bb0
2025-12-03T13:50:20.366 [DEBUG] [Thread-117741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:50:20.381 [DEBUG] [Thread-117741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:50:20.381 [INFO] [Thread-117741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:50:20.388 [DEBUG] [Thread-117741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:50:20.388 [DEBUG] [Thread-117741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] client lang: <none>
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] server lang: <none>
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] kex follows: False
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:50:20.389 [DEBUG] [Thread-117741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:50:20.390 [DEBUG] [Thread-117741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:50:20.390 [DEBUG] [Thread-117741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:50:20.390 [DEBUG] [Thread-117741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:50:20.390 [DEBUG] [Thread-117741] [transport.py] [_log()] Compression: none
2025-12-03T13:50:20.390 [DEBUG] [Thread-117741] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:50:20.446 [DEBUG] [Thread-117741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:50:20.447 [DEBUG] [Thread-117741] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:50:20.447 [DEBUG] [Thread-117741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:50:20.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:50:20.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:50:20.503 [DEBUG] [Thread-117741] [transport.py] [_log()] userauth is OK
2025-12-03T13:50:20.504 [DEBUG] [Thread-117741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:50:20.504 [DEBUG] [Thread-117741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:50:20.504 [DEBUG] [Thread-117741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:50:20.504 [DEBUG] [Thread-117741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:50:20.522 [INFO] [Thread-117741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:50:20.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:50:20.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:50:21.353 [DEBUG] [Thread-117741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:50:21.354 [DEBUG] [Thread-117741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:50:21.402 [DEBUG] [Thread-117741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:50:21.402 [DEBUG] [Thread-117741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:50:21.410 [DEBUG] [Thread-117741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:50:21.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:50:21.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:50:21.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:50:21.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:50:21.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:50:21.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:50:21.450 [DEBUG] [Thread-117741] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:50:28.723 [DEBUG] [Thread-117743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:43.767 [DEBUG] [Thread-117744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:48.914 [DEBUG] [Thread-117745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:50:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:50:51.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:50:51.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:50:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 50, 23), 22.28, 22.05, 0.0, 14.19, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:50:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:50:23
2025-12-03T13:50:52.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:50:52.422 [DEBUG] [Thread-117746] [transport.py] [_log()] starting thread (client mode): 0xa2744cd0
2025-12-03T13:50:52.423 [DEBUG] [Thread-117746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:50:52.444 [DEBUG] [Thread-117746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:50:52.444 [INFO] [Thread-117746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] client lang: <none>
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] server lang: <none>
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] kex follows: False
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:50:52.447 [DEBUG] [Thread-117746] [transport.py] [_log()] Compression: none
2025-12-03T13:50:52.448 [DEBUG] [Thread-117746] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:50:52.464 [DEBUG] [Thread-117746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:50:52.464 [DEBUG] [Thread-117746] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:50:52.465 [DEBUG] [Thread-117746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:50:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:50:52.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:50:52.467 [DEBUG] [Thread-117746] [transport.py] [_log()] userauth is OK
2025-12-03T13:50:52.467 [DEBUG] [Thread-117746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:50:52.467 [DEBUG] [Thread-117746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:50:52.467 [DEBUG] [Thread-117746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:50:52.468 [DEBUG] [Thread-117746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:50:52.487 [INFO] [Thread-117746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:50:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:50:53.149 [DEBUG] [Thread-117746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:50:53.149 [DEBUG] [Thread-117746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:50:53.150 [DEBUG] [Thread-117746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:50:53.190 [DEBUG] [Thread-117746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:50:53.190 [DEBUG] [Thread-117746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:50:53.193 [DEBUG] [Thread-117746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:50:53.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:50:53.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:50:53.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:50:53.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:50:53.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:50:53.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:50:53.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:50:53.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.493105 -999.00  +21.40   9.13     27   +1.70 1 1 1 1 1   888    0 19.98 17.59 ----- 9.6 9.1 156.7 16.7 29.3 -25.8 28.9 -26.3 29.7 -24.7 30.1 -26.5
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.493105
2025-12-03T13:50:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:50:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:50:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:50:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:50:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:50:53.217 [DEBUG] [Thread-117746] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:50:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:50:23', tmtdew=22.28, humidity=22.05, cloud=0.0, wind=14.19, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:50:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:50:53.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:50:53.315 [DEBUG] [Thread-117749] [transport.py] [_log()] starting thread (client mode): 0xa27450f0
2025-12-03T13:50:53.315 [DEBUG] [Thread-117749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:50:53.329 [DEBUG] [Thread-117749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:50:53.329 [INFO] [Thread-117749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] client lang: <none>
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] server lang: <none>
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] kex follows: False
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:50:53.337 [DEBUG] [Thread-117749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:50:53.338 [DEBUG] [Thread-117749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:50:53.338 [DEBUG] [Thread-117749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:50:53.338 [DEBUG] [Thread-117749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:50:53.338 [DEBUG] [Thread-117749] [transport.py] [_log()] Compression: none
2025-12-03T13:50:53.338 [DEBUG] [Thread-117749] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:50:53.395 [DEBUG] [Thread-117749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:50:53.395 [DEBUG] [Thread-117749] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:50:53.395 [DEBUG] [Thread-117749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:50:53.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:50:53.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:50:53.451 [DEBUG] [Thread-117749] [transport.py] [_log()] userauth is OK
2025-12-03T13:50:53.451 [DEBUG] [Thread-117749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:50:53.451 [DEBUG] [Thread-117749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:50:53.451 [DEBUG] [Thread-117749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:50:53.452 [DEBUG] [Thread-117749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:50:53.465 [INFO] [Thread-117749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:50:53.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:50:53.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:50:54.274 [DEBUG] [Thread-117749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:50:54.274 [DEBUG] [Thread-117749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:50:54.322 [DEBUG] [Thread-117749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:50:54.322 [DEBUG] [Thread-117749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:50:54.331 [DEBUG] [Thread-117749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:50:54.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:50:54.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:50:54.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:50:54.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:50:54.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:50:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:50:54.364 [DEBUG] [Thread-117749] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:50:58.794 [DEBUG] [Thread-117751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:13.842 [DEBUG] [Thread-117752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:14.894 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:14.895 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:24.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:51:24.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:51:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:51:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 50, 55), 22.03, 22.76, 0.0, 14.15, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:51:25.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:50:55
2025-12-03T13:51:25.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:51:25.339 [DEBUG] [Thread-117753] [transport.py] [_log()] starting thread (client mode): 0xa27467d0
2025-12-03T13:51:25.340 [DEBUG] [Thread-117753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:51:25.360 [DEBUG] [Thread-117753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:51:25.360 [INFO] [Thread-117753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:51:25.363 [DEBUG] [Thread-117753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:51:25.363 [DEBUG] [Thread-117753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] client lang: <none>
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] server lang: <none>
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] kex follows: False
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] Compression: none
2025-12-03T13:51:25.364 [DEBUG] [Thread-117753] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:51:25.383 [DEBUG] [Thread-117753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:51:25.383 [DEBUG] [Thread-117753] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:51:25.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:51:25.384 [DEBUG] [Thread-117753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:51:25.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:51:25.386 [DEBUG] [Thread-117753] [transport.py] [_log()] userauth is OK
2025-12-03T13:51:25.386 [DEBUG] [Thread-117753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:51:25.386 [DEBUG] [Thread-117753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:51:25.386 [DEBUG] [Thread-117753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:51:25.386 [DEBUG] [Thread-117753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:51:25.401 [INFO] [Thread-117753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:51:25.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:51:26.044 [DEBUG] [Thread-117753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:51:26.044 [DEBUG] [Thread-117753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:51:26.044 [DEBUG] [Thread-117753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:51:26.085 [DEBUG] [Thread-117753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:51:26.085 [DEBUG] [Thread-117753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:51:26.088 [DEBUG] [Thread-117753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:51:26.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:51:26.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:51:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:51:26.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:51:26.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:51:26.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:51:26.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:51:26.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:51:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:51:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.493452 -999.00  +21.50  12.01     26   +1.30 1 1 1 1 1   888    0 19.58 15.17 ----- 14.7 12.0 135.4 14.6 29.4 -25.3 29.0 -26.0 29.8 -24.8 30.4 -24.9
2025-12-03T13:51:26.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:51:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:51:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.493452
2025-12-03T13:51:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:51:26.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:51:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:51:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:51:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:51:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:50:55', tmtdew=22.03, humidity=22.76, cloud=0.0, wind=14.15, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:50:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:51:26.111 [DEBUG] [Thread-117753] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:51:26.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:51:26.200 [DEBUG] [Thread-117756] [transport.py] [_log()] starting thread (client mode): 0xa5199630
2025-12-03T13:51:26.200 [DEBUG] [Thread-117756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:51:26.215 [DEBUG] [Thread-117756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:51:26.215 [INFO] [Thread-117756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:51:26.223 [DEBUG] [Thread-117756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] client lang: <none>
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] server lang: <none>
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] kex follows: False
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] Compression: none
2025-12-03T13:51:26.224 [DEBUG] [Thread-117756] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:51:26.278 [DEBUG] [Thread-117756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:51:26.279 [DEBUG] [Thread-117756] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:51:26.279 [DEBUG] [Thread-117756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:51:26.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:51:26.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:51:26.335 [DEBUG] [Thread-117756] [transport.py] [_log()] userauth is OK
2025-12-03T13:51:26.336 [DEBUG] [Thread-117756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:51:26.336 [DEBUG] [Thread-117756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:51:26.336 [DEBUG] [Thread-117756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:51:26.336 [DEBUG] [Thread-117756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:51:26.355 [INFO] [Thread-117756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:51:26.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:51:26.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:51:27.201 [DEBUG] [Thread-117756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:51:27.201 [DEBUG] [Thread-117756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:51:27.250 [DEBUG] [Thread-117756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:51:27.250 [DEBUG] [Thread-117756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:51:27.259 [DEBUG] [Thread-117756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:51:27.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:51:27.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:51:27.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:51:27.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:51:27.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:51:27.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:51:27.293 [DEBUG] [Thread-117756] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:51:28.871 [DEBUG] [Thread-117758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:43.904 [DEBUG] [Thread-117759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:48.967 [DEBUG] [Thread-117760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:57.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:51:57.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:51:57.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:51:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 51, 27), 22.2, 22.55, 0.0, 15.37, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:51:57.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:51:27
2025-12-03T13:51:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:51:58.277 [DEBUG] [Thread-117761] [transport.py] [_log()] starting thread (client mode): 0xa2746c80
2025-12-03T13:51:58.277 [DEBUG] [Thread-117761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:51:58.302 [DEBUG] [Thread-117761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:51:58.302 [INFO] [Thread-117761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:51:58.306 [DEBUG] [Thread-117761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] client lang: <none>
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] server lang: <none>
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] kex follows: False
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] Compression: none
2025-12-03T13:51:58.307 [DEBUG] [Thread-117761] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:51:58.324 [DEBUG] [Thread-117761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:51:58.324 [DEBUG] [Thread-117761] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:51:58.325 [DEBUG] [Thread-117761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:51:58.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:51:58.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:51:58.327 [DEBUG] [Thread-117761] [transport.py] [_log()] userauth is OK
2025-12-03T13:51:58.327 [DEBUG] [Thread-117761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:51:58.327 [DEBUG] [Thread-117761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:51:58.327 [DEBUG] [Thread-117761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:51:58.327 [DEBUG] [Thread-117761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:51:58.347 [INFO] [Thread-117761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:51:58.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:51:58.932 [DEBUG] [Thread-117763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:51:59.012 [DEBUG] [Thread-117761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:51:59.012 [DEBUG] [Thread-117761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:51:59.013 [DEBUG] [Thread-117761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:51:59.054 [DEBUG] [Thread-117761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:51:59.054 [DEBUG] [Thread-117761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:51:59.057 [DEBUG] [Thread-117761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:51:59.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:51:59.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:51:59.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:51:59.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:51:59.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:51:59.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:51:59.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.493799 -999.00  +21.10  14.28     26   +1.00 1 1 1 1 1   888    0 20.36 14.33 ----- 11.8 14.3 135.6 18.8 29.4 -26.1 29.2 -26.1 29.9 -26.1 30.4 -27.0
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:51:59.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.493799
2025-12-03T13:51:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:51:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:51:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:51:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:51:59.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:51:59.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:51:27', tmtdew=22.2, humidity=22.55, cloud=0.0, wind=15.37, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:51:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:51:59.082 [DEBUG] [Thread-117761] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:51:59.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:51:59.173 [DEBUG] [Thread-117765] [transport.py] [_log()] starting thread (client mode): 0xa27456c0
2025-12-03T13:51:59.173 [DEBUG] [Thread-117765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:51:59.189 [DEBUG] [Thread-117765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:51:59.189 [INFO] [Thread-117765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:51:59.196 [DEBUG] [Thread-117765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] client lang: <none>
2025-12-03T13:51:59.197 [DEBUG] [Thread-117765] [transport.py] [_log()] server lang: <none>
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] kex follows: False
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] Compression: none
2025-12-03T13:51:59.198 [DEBUG] [Thread-117765] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:51:59.259 [DEBUG] [Thread-117765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:51:59.259 [DEBUG] [Thread-117765] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:51:59.260 [DEBUG] [Thread-117765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:51:59.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:51:59.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:51:59.319 [DEBUG] [Thread-117765] [transport.py] [_log()] userauth is OK
2025-12-03T13:51:59.319 [DEBUG] [Thread-117765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:51:59.319 [DEBUG] [Thread-117765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:51:59.319 [DEBUG] [Thread-117765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:51:59.320 [DEBUG] [Thread-117765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:51:59.339 [INFO] [Thread-117765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:51:59.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:51:59.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:52:00.142 [DEBUG] [Thread-117765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:52:00.142 [DEBUG] [Thread-117765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:52:00.190 [DEBUG] [Thread-117765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:52:00.190 [DEBUG] [Thread-117765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:52:00.198 [DEBUG] [Thread-117765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:52:00.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:52:00.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:52:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:52:00.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:52:00.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:52:00.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:52:00.230 [DEBUG] [Thread-117765] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:52:13.958 [DEBUG] [Thread-117767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:15.036 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:15.038 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:29.005 [DEBUG] [Thread-117768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:30.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:52:30.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:52:30.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:52:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 51, 59), 22.48, 22.16, 0.0, 16.39, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:52:30.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:51:59
2025-12-03T13:52:31.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:52:31.200 [DEBUG] [Thread-117769] [transport.py] [_log()] starting thread (client mode): 0xa5161f60
2025-12-03T13:52:31.200 [DEBUG] [Thread-117769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:52:31.220 [DEBUG] [Thread-117769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:52:31.220 [INFO] [Thread-117769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:52:31.223 [DEBUG] [Thread-117769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] client lang: <none>
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] server lang: <none>
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] kex follows: False
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:52:31.224 [DEBUG] [Thread-117769] [transport.py] [_log()] Compression: none
2025-12-03T13:52:31.225 [DEBUG] [Thread-117769] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:52:31.241 [DEBUG] [Thread-117769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:52:31.241 [DEBUG] [Thread-117769] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:52:31.242 [DEBUG] [Thread-117769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:52:31.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:52:31.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:52:31.245 [DEBUG] [Thread-117769] [transport.py] [_log()] userauth is OK
2025-12-03T13:52:31.245 [DEBUG] [Thread-117769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:52:31.245 [DEBUG] [Thread-117769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:52:31.245 [DEBUG] [Thread-117769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:52:31.245 [DEBUG] [Thread-117769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:52:31.280 [INFO] [Thread-117769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:52:31.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:52:31.903 [DEBUG] [Thread-117769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:52:31.903 [DEBUG] [Thread-117769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:52:31.903 [DEBUG] [Thread-117769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:52:31.944 [DEBUG] [Thread-117769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:52:31.944 [DEBUG] [Thread-117769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:52:31.946 [DEBUG] [Thread-117769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:52:31.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:52:31.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:52:31.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:52:31.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:52:31.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:52:31.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:52:31.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.494147 -999.00  +21.00  11.17     27   +1.30 1 1 1 1 1   888    0 19.22 10.67 ----- 13.7 11.2 154.1 14.4 29.5 -25.1 29.1 -25.7 30.0 -25.6 30.4 -25.1
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.494147
2025-12-03T13:52:31.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:52:31.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:51:59', tmtdew=22.48, humidity=22.16, cloud=0.0, wind=16.39, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:51:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:52:31.964 [DEBUG] [Thread-117769] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:52:32.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:52:32.054 [DEBUG] [Thread-117772] [transport.py] [_log()] starting thread (client mode): 0xa5163610
2025-12-03T13:52:32.054 [DEBUG] [Thread-117772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:52:32.069 [DEBUG] [Thread-117772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:52:32.069 [INFO] [Thread-117772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] client lang: <none>
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] server lang: <none>
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] kex follows: False
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:52:32.076 [DEBUG] [Thread-117772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:52:32.077 [DEBUG] [Thread-117772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:52:32.077 [DEBUG] [Thread-117772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:52:32.077 [DEBUG] [Thread-117772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:52:32.077 [DEBUG] [Thread-117772] [transport.py] [_log()] Compression: none
2025-12-03T13:52:32.077 [DEBUG] [Thread-117772] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:52:32.133 [DEBUG] [Thread-117772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:52:32.134 [DEBUG] [Thread-117772] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:52:32.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:52:32.134 [DEBUG] [Thread-117772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:52:32.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:52:32.190 [DEBUG] [Thread-117772] [transport.py] [_log()] userauth is OK
2025-12-03T13:52:32.191 [DEBUG] [Thread-117772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:52:32.191 [DEBUG] [Thread-117772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:52:32.191 [DEBUG] [Thread-117772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:52:32.191 [DEBUG] [Thread-117772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:52:32.207 [INFO] [Thread-117772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:52:32.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:52:32.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:52:33.024 [DEBUG] [Thread-117772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:52:33.024 [DEBUG] [Thread-117772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:52:33.072 [DEBUG] [Thread-117772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:52:33.072 [DEBUG] [Thread-117772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:52:33.081 [DEBUG] [Thread-117772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:52:33.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:52:33.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:52:33.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:52:33.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:52:33.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:52:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:52:33.112 [DEBUG] [Thread-117772] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:52:44.036 [DEBUG] [Thread-117774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:49.011 [DEBUG] [Thread-117775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:52:59.081 [DEBUG] [Thread-117776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:53:03.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:53:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:53:03.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 52, 31), 22.53, 22.06, 0.0, 14.52, 20.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:53:03.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:52:31
2025-12-03T13:53:03.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:53:04.147 [DEBUG] [Thread-117777] [transport.py] [_log()] starting thread (client mode): 0xa2744880
2025-12-03T13:53:04.147 [DEBUG] [Thread-117777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:53:04.168 [DEBUG] [Thread-117777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:53:04.168 [INFO] [Thread-117777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] client lang: <none>
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] server lang: <none>
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] kex follows: False
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] Compression: none
2025-12-03T13:53:04.171 [DEBUG] [Thread-117777] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:53:04.186 [DEBUG] [Thread-117777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:53:04.186 [DEBUG] [Thread-117777] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:53:04.186 [DEBUG] [Thread-117777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:53:04.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:53:04.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:53:04.228 [DEBUG] [Thread-117777] [transport.py] [_log()] userauth is OK
2025-12-03T13:53:04.228 [DEBUG] [Thread-117777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:53:04.228 [DEBUG] [Thread-117777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:53:04.228 [DEBUG] [Thread-117777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:53:04.228 [DEBUG] [Thread-117777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:53:04.246 [INFO] [Thread-117777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:53:04.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:53:04.913 [DEBUG] [Thread-117777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:53:04.913 [DEBUG] [Thread-117777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:53:04.914 [DEBUG] [Thread-117777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:53:04.954 [DEBUG] [Thread-117777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:53:04.955 [DEBUG] [Thread-117777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:53:04.957 [DEBUG] [Thread-117777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:53:04.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:53:04.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:53:04.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:53:04.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:53:04.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:53:04.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:53:04.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.494494 -999.00  +21.20   9.43     26   +1.00 1 1 1 1 1   888    0 19.78 6.92 ----- 11.9 9.4 124.1 12.5 29.6 -24.8 29.2 -25.8 30.1 -24.3 30.6 -24.9
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:53:04.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.494494
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:53:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:52:31', tmtdew=22.53, humidity=22.06, cloud=0.0, wind=14.52, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:52:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:53:04.978 [DEBUG] [Thread-117777] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:53:05.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:53:05.063 [DEBUG] [Thread-117780] [transport.py] [_log()] starting thread (client mode): 0xa27a2440
2025-12-03T13:53:05.063 [DEBUG] [Thread-117780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:53:05.078 [DEBUG] [Thread-117780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:53:05.078 [INFO] [Thread-117780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:53:05.085 [DEBUG] [Thread-117780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:53:05.085 [DEBUG] [Thread-117780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:53:05.085 [DEBUG] [Thread-117780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] client lang: <none>
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] server lang: <none>
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] kex follows: False
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] Compression: none
2025-12-03T13:53:05.086 [DEBUG] [Thread-117780] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:53:05.145 [DEBUG] [Thread-117780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:53:05.145 [DEBUG] [Thread-117780] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:53:05.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:53:05.146 [DEBUG] [Thread-117780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:53:05.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:53:05.202 [DEBUG] [Thread-117780] [transport.py] [_log()] userauth is OK
2025-12-03T13:53:05.203 [DEBUG] [Thread-117780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:53:05.203 [DEBUG] [Thread-117780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:53:05.203 [DEBUG] [Thread-117780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:53:05.203 [DEBUG] [Thread-117780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:53:05.216 [INFO] [Thread-117780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:53:05.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:53:05.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:53:06.049 [DEBUG] [Thread-117780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:53:06.049 [DEBUG] [Thread-117780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:53:06.097 [DEBUG] [Thread-117780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:53:06.097 [DEBUG] [Thread-117780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:53:06.105 [DEBUG] [Thread-117780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:53:06.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:53:06.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:53:06.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:53:06.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:53:06.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:53:06.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:53:06.139 [DEBUG] [Thread-117780] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:53:14.107 [DEBUG] [Thread-117782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:15.180 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:15.183 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:29.161 [DEBUG] [Thread-117783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:53:36.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:53:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:53:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 53, 3), 22.28, 22.43, 0.0, 13.89, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:53:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:53:03
2025-12-03T13:53:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:53:37.159 [DEBUG] [Thread-117784] [transport.py] [_log()] starting thread (client mode): 0xa5161f90
2025-12-03T13:53:37.159 [DEBUG] [Thread-117784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:53:37.179 [DEBUG] [Thread-117784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:53:37.179 [INFO] [Thread-117784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] client lang: <none>
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] server lang: <none>
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] kex follows: False
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] Compression: none
2025-12-03T13:53:37.182 [DEBUG] [Thread-117784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:53:37.197 [DEBUG] [Thread-117784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:53:37.198 [DEBUG] [Thread-117784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:53:37.198 [DEBUG] [Thread-117784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:53:37.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:53:37.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:53:37.199 [DEBUG] [Thread-117784] [transport.py] [_log()] userauth is OK
2025-12-03T13:53:37.199 [DEBUG] [Thread-117784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:53:37.199 [DEBUG] [Thread-117784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:53:37.199 [DEBUG] [Thread-117784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:53:37.199 [DEBUG] [Thread-117784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:53:37.213 [INFO] [Thread-117784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:53:37.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:53:37.828 [DEBUG] [Thread-117784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:53:37.828 [DEBUG] [Thread-117784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:53:37.828 [DEBUG] [Thread-117784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:53:37.869 [DEBUG] [Thread-117784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:53:37.869 [DEBUG] [Thread-117784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:53:37.871 [DEBUG] [Thread-117784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:53:37.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:53:37.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:53:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:53:37.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:53:37.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:53:37.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:53:37.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.494841 -999.00  +21.30  15.93     26   +1.00 1 1 1 1 1   888    0 19.65 3.81 ----- 12.9 15.9 136.8 17.0 29.8 -26.4 29.4 -25.5 30.3 -24.5 30.9 -24.6
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.494841
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:53:37.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:53:03', tmtdew=22.28, humidity=22.43, cloud=0.0, wind=13.89, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:52:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:53:37.890 [DEBUG] [Thread-117784] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:53:37.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:53:37.975 [DEBUG] [Thread-117787] [transport.py] [_log()] starting thread (client mode): 0xa519bd60
2025-12-03T13:53:37.976 [DEBUG] [Thread-117787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:53:37.990 [DEBUG] [Thread-117787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:53:37.990 [INFO] [Thread-117787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] client lang: <none>
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] server lang: <none>
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] kex follows: False
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] Compression: none
2025-12-03T13:53:37.998 [DEBUG] [Thread-117787] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:53:38.053 [DEBUG] [Thread-117787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:53:38.053 [DEBUG] [Thread-117787] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:53:38.054 [DEBUG] [Thread-117787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:53:38.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:53:38.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:53:38.111 [DEBUG] [Thread-117787] [transport.py] [_log()] userauth is OK
2025-12-03T13:53:38.111 [DEBUG] [Thread-117787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:53:38.111 [DEBUG] [Thread-117787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:53:38.111 [DEBUG] [Thread-117787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:53:38.111 [DEBUG] [Thread-117787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:53:38.125 [INFO] [Thread-117787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:53:38.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:53:38.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:53:38.938 [DEBUG] [Thread-117787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:53:38.939 [DEBUG] [Thread-117787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:53:38.987 [DEBUG] [Thread-117787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:53:38.987 [DEBUG] [Thread-117787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:53:38.995 [DEBUG] [Thread-117787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:53:39.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:53:39.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:53:39.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:53:39.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:53:39.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:53:39.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:53:39.026 [DEBUG] [Thread-117787] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:53:44.194 [DEBUG] [Thread-117789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:49.047 [DEBUG] [Thread-117790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:53:59.242 [DEBUG] [Thread-117791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:09.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:54:09.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:54:09.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:54:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 53, 35), 22.54, 21.63, 0.0, 18.35, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:54:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:53:35
2025-12-03T13:54:09.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:54:10.032 [DEBUG] [Thread-117792] [transport.py] [_log()] starting thread (client mode): 0xa5162a70
2025-12-03T13:54:10.032 [DEBUG] [Thread-117792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:54:10.049 [DEBUG] [Thread-117792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:54:10.049 [INFO] [Thread-117792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:54:10.052 [DEBUG] [Thread-117792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] client lang: <none>
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] server lang: <none>
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] kex follows: False
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] Compression: none
2025-12-03T13:54:10.053 [DEBUG] [Thread-117792] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:54:10.070 [DEBUG] [Thread-117792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:54:10.070 [DEBUG] [Thread-117792] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:54:10.071 [DEBUG] [Thread-117792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:54:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:54:10.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:54:10.072 [DEBUG] [Thread-117792] [transport.py] [_log()] userauth is OK
2025-12-03T13:54:10.072 [DEBUG] [Thread-117792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:54:10.073 [DEBUG] [Thread-117792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:54:10.073 [DEBUG] [Thread-117792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:54:10.073 [DEBUG] [Thread-117792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:54:10.090 [INFO] [Thread-117792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:54:10.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:54:10.722 [DEBUG] [Thread-117792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:54:10.722 [DEBUG] [Thread-117792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:54:10.723 [DEBUG] [Thread-117792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:54:10.763 [DEBUG] [Thread-117792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:54:10.763 [DEBUG] [Thread-117792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:54:10.765 [DEBUG] [Thread-117792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:54:10.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:54:10.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:54:10.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:54:10.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:54:10.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:54:10.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:54:10.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.495535 -999.00  +21.00   8.60     26   +1.10 1 1 1 1 1   888    0 19.51 -2.12 ----- 8.4 8.6 157.7 16.9 29.9 -25.3 29.4 -26.2 30.4 -26.3 30.9 -25.2
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:54:10.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.495535
2025-12-03T13:54:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:54:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:54:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:54:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:54:10.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:54:10.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:53:35', tmtdew=22.54, humidity=21.63, cloud=0.0, wind=18.35, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:53:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:54:10.789 [DEBUG] [Thread-117792] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:54:10.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:54:10.884 [DEBUG] [Thread-117795] [transport.py] [_log()] starting thread (client mode): 0xa51624d0
2025-12-03T13:54:10.884 [DEBUG] [Thread-117795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:54:10.899 [DEBUG] [Thread-117795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:54:10.899 [INFO] [Thread-117795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:54:10.906 [DEBUG] [Thread-117795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] client lang: <none>
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] server lang: <none>
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] kex follows: False
2025-12-03T13:54:10.907 [DEBUG] [Thread-117795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] Compression: none
2025-12-03T13:54:10.908 [DEBUG] [Thread-117795] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:54:10.966 [DEBUG] [Thread-117795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:54:10.967 [DEBUG] [Thread-117795] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:54:10.967 [DEBUG] [Thread-117795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:54:10.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:54:10.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:54:11.023 [DEBUG] [Thread-117795] [transport.py] [_log()] userauth is OK
2025-12-03T13:54:11.023 [DEBUG] [Thread-117795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:54:11.023 [DEBUG] [Thread-117795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:54:11.023 [DEBUG] [Thread-117795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:54:11.023 [DEBUG] [Thread-117795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:54:11.042 [INFO] [Thread-117795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:54:11.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:54:11.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:54:11.837 [DEBUG] [Thread-117795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:54:11.837 [DEBUG] [Thread-117795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:54:11.885 [DEBUG] [Thread-117795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:54:11.885 [DEBUG] [Thread-117795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:54:11.894 [DEBUG] [Thread-117795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:54:11.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:54:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:54:11.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:54:11.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:54:11.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:54:11.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:54:11.929 [DEBUG] [Thread-117795] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:54:14.271 [DEBUG] [Thread-117797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:15.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:15.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:29.313 [DEBUG] [Thread-117798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:41.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:54:41.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:54:41.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:54:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 54, 39), 22.64, 22.0, 0.0, 11.75, 20.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:54:42.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:54:39
2025-12-03T13:54:42.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:54:42.909 [DEBUG] [Thread-117799] [transport.py] [_log()] starting thread (client mode): 0xa2745270
2025-12-03T13:54:42.909 [DEBUG] [Thread-117799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:54:42.929 [DEBUG] [Thread-117799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:54:42.929 [INFO] [Thread-117799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] client lang: <none>
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] server lang: <none>
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] kex follows: False
2025-12-03T13:54:42.933 [DEBUG] [Thread-117799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] Compression: none
2025-12-03T13:54:42.934 [DEBUG] [Thread-117799] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:54:42.952 [DEBUG] [Thread-117799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:54:42.953 [DEBUG] [Thread-117799] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:54:42.953 [DEBUG] [Thread-117799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:54:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:54:42.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:54:42.955 [DEBUG] [Thread-117799] [transport.py] [_log()] userauth is OK
2025-12-03T13:54:42.955 [DEBUG] [Thread-117799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:54:42.955 [DEBUG] [Thread-117799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:54:42.956 [DEBUG] [Thread-117799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:54:42.956 [DEBUG] [Thread-117799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:54:42.979 [INFO] [Thread-117799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:54:42.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:54:43.601 [DEBUG] [Thread-117799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:54:43.601 [DEBUG] [Thread-117799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:54:43.601 [DEBUG] [Thread-117799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:54:43.642 [DEBUG] [Thread-117799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:54:43.642 [DEBUG] [Thread-117799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:54:43.645 [DEBUG] [Thread-117799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:54:43.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:54:43.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:54:43.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:54:43.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:54:43.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:54:43.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:54:43.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:54:43.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.495883 -999.00  +20.90  11.71     26   +0.90 1 1 1 1 1   888    0 19.56 -5.13 ----- 9.9 11.7 139.6 14.8 30.0 -27.2 29.5 -26.4 30.5 -25.3 31.1 -25.4
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.495883
2025-12-03T13:54:43.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:54:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:54:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:54:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:54:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:54:43.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:54:39', tmtdew=22.64, humidity=22.0, cloud=0.0, wind=11.75, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:54:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:54:43.670 [DEBUG] [Thread-117799] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:54:43.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:54:43.765 [DEBUG] [Thread-117802] [transport.py] [_log()] starting thread (client mode): 0xa51cc2e0
2025-12-03T13:54:43.765 [DEBUG] [Thread-117802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:54:43.783 [DEBUG] [Thread-117802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:54:43.783 [INFO] [Thread-117802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:54:43.794 [DEBUG] [Thread-117802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:54:43.794 [DEBUG] [Thread-117802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:54:43.795 [DEBUG] [Thread-117802] [transport.py] [_log()] client lang: <none>
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] server lang: <none>
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] kex follows: False
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] Compression: none
2025-12-03T13:54:43.796 [DEBUG] [Thread-117802] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:54:43.850 [DEBUG] [Thread-117802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:54:43.851 [DEBUG] [Thread-117802] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:54:43.851 [DEBUG] [Thread-117802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:54:43.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:54:43.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:54:43.907 [DEBUG] [Thread-117802] [transport.py] [_log()] userauth is OK
2025-12-03T13:54:43.907 [DEBUG] [Thread-117802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:54:43.907 [DEBUG] [Thread-117802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:54:43.907 [DEBUG] [Thread-117802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:54:43.907 [DEBUG] [Thread-117802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:54:43.926 [INFO] [Thread-117802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:54:43.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:54:43.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:54:44.342 [DEBUG] [Thread-117804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:44.753 [DEBUG] [Thread-117802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:54:44.753 [DEBUG] [Thread-117802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:54:44.801 [DEBUG] [Thread-117802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:54:44.801 [DEBUG] [Thread-117802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:54:44.812 [DEBUG] [Thread-117802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:54:44.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:54:44.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:54:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:54:44.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:54:44.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:54:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:54:44.847 [DEBUG] [Thread-117802] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:54:49.093 [DEBUG] [Thread-117805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:54:59.384 [DEBUG] [Thread-117806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:14.410 [DEBUG] [Thread-117807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:55:14.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:55:14.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:55:15.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:15.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 55, 11), 23.12, 21.32, 0.0, 12.53, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:55:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:55:11
2025-12-03T13:55:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:55:15.825 [DEBUG] [Thread-117808] [transport.py] [_log()] starting thread (client mode): 0xa5198040
2025-12-03T13:55:15.826 [DEBUG] [Thread-117808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:55:15.846 [DEBUG] [Thread-117808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:55:15.846 [INFO] [Thread-117808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:55:15.849 [DEBUG] [Thread-117808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:55:15.849 [DEBUG] [Thread-117808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] client lang: <none>
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] server lang: <none>
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] kex follows: False
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:55:15.850 [DEBUG] [Thread-117808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:55:15.851 [DEBUG] [Thread-117808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:55:15.851 [DEBUG] [Thread-117808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:55:15.851 [DEBUG] [Thread-117808] [transport.py] [_log()] Compression: none
2025-12-03T13:55:15.851 [DEBUG] [Thread-117808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:55:15.869 [DEBUG] [Thread-117808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:55:15.870 [DEBUG] [Thread-117808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:55:15.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:55:15.870 [DEBUG] [Thread-117808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:55:15.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:55:15.873 [DEBUG] [Thread-117808] [transport.py] [_log()] userauth is OK
2025-12-03T13:55:15.873 [DEBUG] [Thread-117808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:55:15.873 [DEBUG] [Thread-117808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:55:15.873 [DEBUG] [Thread-117808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:55:15.873 [DEBUG] [Thread-117808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:55:15.893 [INFO] [Thread-117808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:55:15.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:55:16.617 [DEBUG] [Thread-117808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:55:16.618 [DEBUG] [Thread-117808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:55:16.618 [DEBUG] [Thread-117808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:55:16.659 [DEBUG] [Thread-117808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:55:16.659 [DEBUG] [Thread-117808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:55:16.662 [DEBUG] [Thread-117808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:55:16.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:55:16.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:55:16.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:55:16.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:55:16.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:55:16.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:55:16.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.496230 -999.00  +21.10  10.50     26   +1.20 1 1 1 1 1   888    0 19.06 -6.10 ----- 10.9 10.5 132.1 14.4 30.2 -26.5 29.5 -26.5 30.6 -24.7 31.3 -25.8
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:55:16.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.496230
2025-12-03T13:55:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:55:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:55:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:55:16.686 [DEBUG] [Thread-117808] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:55:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:55:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:55:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:55:11', tmtdew=23.12, humidity=21.32, cloud=0.0, wind=12.53, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:54:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:55:16.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:55:16.780 [DEBUG] [Thread-117811] [transport.py] [_log()] starting thread (client mode): 0xa27a0610
2025-12-03T13:55:16.780 [DEBUG] [Thread-117811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:55:16.795 [DEBUG] [Thread-117811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:55:16.795 [INFO] [Thread-117811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:16.802 [DEBUG] [Thread-117811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] client lang: <none>
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] server lang: <none>
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] kex follows: False
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] Compression: none
2025-12-03T13:55:16.803 [DEBUG] [Thread-117811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:55:16.862 [DEBUG] [Thread-117811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:55:16.863 [DEBUG] [Thread-117811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:55:16.864 [DEBUG] [Thread-117811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:55:16.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:55:16.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:55:16.919 [DEBUG] [Thread-117811] [transport.py] [_log()] userauth is OK
2025-12-03T13:55:16.919 [DEBUG] [Thread-117811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:55:16.919 [DEBUG] [Thread-117811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:55:16.919 [DEBUG] [Thread-117811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:55:16.919 [DEBUG] [Thread-117811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:55:16.938 [INFO] [Thread-117811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:55:16.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:55:16.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:55:17.749 [DEBUG] [Thread-117811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:55:17.750 [DEBUG] [Thread-117811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:55:17.798 [DEBUG] [Thread-117811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:55:17.798 [DEBUG] [Thread-117811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:55:17.807 [DEBUG] [Thread-117811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:55:17.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:55:17.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:55:17.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:55:17.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:55:17.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:55:17.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:55:17.841 [DEBUG] [Thread-117811] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:55:29.437 [DEBUG] [Thread-117813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:44.480 [DEBUG] [Thread-117814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:47.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:55:47.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:55:47.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:55:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 55, 43), 23.31, 20.67, 0.0, 13.06, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:55:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:55:43
2025-12-03T13:55:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:55:48.790 [DEBUG] [Thread-117815] [transport.py] [_log()] starting thread (client mode): 0xa519a710
2025-12-03T13:55:48.790 [DEBUG] [Thread-117815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:55:48.818 [DEBUG] [Thread-117815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:55:48.818 [INFO] [Thread-117815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:55:48.822 [DEBUG] [Thread-117815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] client lang: <none>
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] server lang: <none>
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] kex follows: False
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] Compression: none
2025-12-03T13:55:48.823 [DEBUG] [Thread-117815] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:55:48.834 [DEBUG] [Thread-117815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:55:48.834 [DEBUG] [Thread-117815] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:55:48.835 [DEBUG] [Thread-117815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:55:48.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:55:48.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:55:48.837 [DEBUG] [Thread-117815] [transport.py] [_log()] userauth is OK
2025-12-03T13:55:48.837 [DEBUG] [Thread-117815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:55:48.837 [DEBUG] [Thread-117815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:55:48.837 [DEBUG] [Thread-117815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:55:48.837 [DEBUG] [Thread-117815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:55:48.855 [INFO] [Thread-117815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:55:48.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:55:49.126 [DEBUG] [Thread-117817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:55:49.492 [DEBUG] [Thread-117815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:55:49.493 [DEBUG] [Thread-117815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:55:49.493 [DEBUG] [Thread-117815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:55:49.534 [DEBUG] [Thread-117815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:55:49.534 [DEBUG] [Thread-117815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:55:49.536 [DEBUG] [Thread-117815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:55:49.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:55:49.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:55:49.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:55:49.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:55:49.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:55:49.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:55:49.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:55:49.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.496577 -999.00  +21.20   8.72     26   +1.00 1 1 1 1 1   888    0 19.66 -5.37 ----- 13.2 8.7 130.7 13.7 30.2 -26.7 29.6 -28.7 30.7 -25.5 31.4 -26.9
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.496577
2025-12-03T13:55:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:55:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:55:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:55:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:55:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:55:49.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:55:43', tmtdew=23.31, humidity=20.67, cloud=0.0, wind=13.06, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:55:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:55:49.569 [DEBUG] [Thread-117815] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:55:49.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:55:49.665 [DEBUG] [Thread-117819] [transport.py] [_log()] starting thread (client mode): 0xa27b6440
2025-12-03T13:55:49.665 [DEBUG] [Thread-117819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:55:49.680 [DEBUG] [Thread-117819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:55:49.681 [INFO] [Thread-117819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:55:49.688 [DEBUG] [Thread-117819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:55:49.688 [DEBUG] [Thread-117819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] client lang: <none>
2025-12-03T13:55:49.689 [DEBUG] [Thread-117819] [transport.py] [_log()] server lang: <none>
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] kex follows: False
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] Compression: none
2025-12-03T13:55:49.690 [DEBUG] [Thread-117819] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:55:49.746 [DEBUG] [Thread-117819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:55:49.747 [DEBUG] [Thread-117819] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:55:49.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:55:49.748 [DEBUG] [Thread-117819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:55:49.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:55:49.802 [DEBUG] [Thread-117819] [transport.py] [_log()] userauth is OK
2025-12-03T13:55:49.803 [DEBUG] [Thread-117819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:55:49.803 [DEBUG] [Thread-117819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:55:49.803 [DEBUG] [Thread-117819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:55:49.803 [DEBUG] [Thread-117819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:55:49.821 [INFO] [Thread-117819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:55:49.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:55:49.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:55:50.680 [DEBUG] [Thread-117819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:55:50.680 [DEBUG] [Thread-117819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:55:50.728 [DEBUG] [Thread-117819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:55:50.728 [DEBUG] [Thread-117819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:55:50.736 [DEBUG] [Thread-117819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:55:50.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:55:50.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:55:50.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:55:50.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:55:50.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:55:50.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:55:50.771 [DEBUG] [Thread-117819] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:55:59.510 [DEBUG] [Thread-117821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:14.552 [DEBUG] [Thread-117822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:15.604 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:15.605 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:20.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:56:20.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:56:20.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:56:21.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 56, 15), 23.36, 20.6, 0.0, 14.5, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:56:21.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:56:15
2025-12-03T13:56:21.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:56:21.780 [DEBUG] [Thread-117823] [transport.py] [_log()] starting thread (client mode): 0xa27b5540
2025-12-03T13:56:21.780 [DEBUG] [Thread-117823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:56:21.799 [DEBUG] [Thread-117823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:56:21.799 [INFO] [Thread-117823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] client lang: <none>
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] server lang: <none>
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] kex follows: False
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:56:21.802 [DEBUG] [Thread-117823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:56:21.803 [DEBUG] [Thread-117823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:56:21.803 [DEBUG] [Thread-117823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:56:21.803 [DEBUG] [Thread-117823] [transport.py] [_log()] Compression: none
2025-12-03T13:56:21.803 [DEBUG] [Thread-117823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:56:21.819 [DEBUG] [Thread-117823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:56:21.820 [DEBUG] [Thread-117823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:56:21.820 [DEBUG] [Thread-117823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:56:21.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:56:21.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:56:21.822 [DEBUG] [Thread-117823] [transport.py] [_log()] userauth is OK
2025-12-03T13:56:21.822 [DEBUG] [Thread-117823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:56:21.822 [DEBUG] [Thread-117823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:56:21.822 [DEBUG] [Thread-117823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:56:21.822 [DEBUG] [Thread-117823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:56:21.846 [INFO] [Thread-117823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:56:21.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:56:22.475 [DEBUG] [Thread-117823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:56:22.475 [DEBUG] [Thread-117823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:56:22.475 [DEBUG] [Thread-117823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:56:22.516 [DEBUG] [Thread-117823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:56:22.516 [DEBUG] [Thread-117823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:56:22.518 [DEBUG] [Thread-117823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:56:22.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:56:22.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:56:22.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:56:22.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:56:22.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:56:22.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:56:22.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:56:22.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:56:22.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:56:22.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.496924 -999.00  +21.00  10.24     25   +0.50 1 1 1 1 1   888    0 19.80 -3.41 ----- 12.1 10.2 135.0 14.6 30.2 -27.2 29.7 -27.1 30.7 -26.0 31.4 -26.5
2025-12-03T13:56:22.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:56:22.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.496924
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:56:22.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:56:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:56:15', tmtdew=23.36, humidity=20.6, cloud=0.0, wind=14.5, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:55:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:56:22.539 [DEBUG] [Thread-117823] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:56:22.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:56:22.635 [DEBUG] [Thread-117826] [transport.py] [_log()] starting thread (client mode): 0xa517dc90
2025-12-03T13:56:22.635 [DEBUG] [Thread-117826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:56:22.650 [DEBUG] [Thread-117826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:56:22.650 [INFO] [Thread-117826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:56:22.658 [DEBUG] [Thread-117826] [transport.py] [_log()] client lang: <none>
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] server lang: <none>
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] kex follows: False
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] Compression: none
2025-12-03T13:56:22.659 [DEBUG] [Thread-117826] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:56:22.714 [DEBUG] [Thread-117826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:56:22.714 [DEBUG] [Thread-117826] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:56:22.715 [DEBUG] [Thread-117826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:56:22.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:56:22.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:56:22.770 [DEBUG] [Thread-117826] [transport.py] [_log()] userauth is OK
2025-12-03T13:56:22.771 [DEBUG] [Thread-117826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:56:22.771 [DEBUG] [Thread-117826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:56:22.771 [DEBUG] [Thread-117826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:56:22.771 [DEBUG] [Thread-117826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:56:22.789 [INFO] [Thread-117826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:56:22.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:56:22.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:56:23.616 [DEBUG] [Thread-117826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:56:23.616 [DEBUG] [Thread-117826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:56:23.664 [DEBUG] [Thread-117826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:56:23.664 [DEBUG] [Thread-117826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:56:23.673 [DEBUG] [Thread-117826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:56:23.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:56:23.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:56:23.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:56:23.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:56:23.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:56:23.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:56:23.707 [DEBUG] [Thread-117826] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:56:29.582 [DEBUG] [Thread-117828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:44.626 [DEBUG] [Thread-117829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:49.155 [DEBUG] [Thread-117830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:56:53.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:56:53.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:56:53.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:56:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 56, 47), 23.04, 20.83, 0.0, 6.79, 20.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:56:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:56:47
2025-12-03T13:56:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:56:54.738 [DEBUG] [Thread-117831] [transport.py] [_log()] starting thread (client mode): 0xa27b4250
2025-12-03T13:56:54.738 [DEBUG] [Thread-117831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:56:54.757 [DEBUG] [Thread-117831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:56:54.758 [INFO] [Thread-117831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] client lang: <none>
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] server lang: <none>
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] kex follows: False
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] Compression: none
2025-12-03T13:56:54.761 [DEBUG] [Thread-117831] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:56:54.776 [DEBUG] [Thread-117831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:56:54.776 [DEBUG] [Thread-117831] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:56:54.776 [DEBUG] [Thread-117831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:56:54.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:56:54.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:56:54.777 [DEBUG] [Thread-117831] [transport.py] [_log()] userauth is OK
2025-12-03T13:56:54.777 [DEBUG] [Thread-117831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:56:54.777 [DEBUG] [Thread-117831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:56:54.777 [DEBUG] [Thread-117831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:56:54.777 [DEBUG] [Thread-117831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:56:54.787 [INFO] [Thread-117831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:56:54.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:56:55.549 [DEBUG] [Thread-117831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:56:55.549 [DEBUG] [Thread-117831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:56:55.549 [DEBUG] [Thread-117831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:56:55.589 [DEBUG] [Thread-117831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:56:55.590 [DEBUG] [Thread-117831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:56:55.592 [DEBUG] [Thread-117831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:56:55.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:56:55.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:56:55.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:56:55.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:56:55.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:56:55.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:56:55.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.497272 -999.00  +20.70   6.49     25   +0.20 1 1 1 1 1   888    0 19.72 -0.30 ----- 4.3 6.5 198.2 12.4 30.3 -27.1 29.5 -33.7 30.7 -25.8 31.4 -28.1
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.497272
2025-12-03T13:56:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:56:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:56:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:56:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:56:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:56:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:56:47', tmtdew=23.04, humidity=20.83, cloud=0.0, wind=6.79, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:56:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:56:55.611 [DEBUG] [Thread-117831] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:56:55.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:56:55.698 [DEBUG] [Thread-117834] [transport.py] [_log()] starting thread (client mode): 0xa2745c30
2025-12-03T13:56:55.698 [DEBUG] [Thread-117834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:56:55.712 [DEBUG] [Thread-117834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:56:55.712 [INFO] [Thread-117834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] client lang: <none>
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] server lang: <none>
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] kex follows: False
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] Compression: none
2025-12-03T13:56:55.720 [DEBUG] [Thread-117834] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:56:55.777 [DEBUG] [Thread-117834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:56:55.777 [DEBUG] [Thread-117834] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:56:55.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:56:55.777 [DEBUG] [Thread-117834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:56:55.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:56:55.834 [DEBUG] [Thread-117834] [transport.py] [_log()] userauth is OK
2025-12-03T13:56:55.834 [DEBUG] [Thread-117834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:56:55.834 [DEBUG] [Thread-117834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:56:55.834 [DEBUG] [Thread-117834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:56:55.834 [DEBUG] [Thread-117834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:56:55.852 [INFO] [Thread-117834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:56:55.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:56:55.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:56:56.664 [DEBUG] [Thread-117834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:56:56.664 [DEBUG] [Thread-117834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:56:56.711 [DEBUG] [Thread-117834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:56:56.712 [DEBUG] [Thread-117834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:56:56.720 [DEBUG] [Thread-117834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:56:56.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:56:56.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:56:56.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:56:56.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:56:56.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:56:56.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:56:56.753 [DEBUG] [Thread-117834] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:56:59.655 [DEBUG] [Thread-117836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:14.699 [DEBUG] [Thread-117837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:15.743 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:15.744 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:26.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:57:26.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:57:26.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:57:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 57, 19), 23.25, 20.57, 0.0, 6.9, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:57:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:57:19
2025-12-03T13:57:27.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:57:27.734 [DEBUG] [Thread-117838] [transport.py] [_log()] starting thread (client mode): 0xa5161660
2025-12-03T13:57:27.735 [DEBUG] [Thread-117838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:57:27.754 [DEBUG] [Thread-117838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:57:27.754 [INFO] [Thread-117838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:57:27.757 [DEBUG] [Thread-117838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] client lang: <none>
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] server lang: <none>
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] kex follows: False
2025-12-03T13:57:27.758 [DEBUG] [Thread-117838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] Compression: none
2025-12-03T13:57:27.759 [DEBUG] [Thread-117838] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:57:27.779 [DEBUG] [Thread-117838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:57:27.780 [DEBUG] [Thread-117838] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:57:27.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:57:27.780 [DEBUG] [Thread-117838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:57:27.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:57:27.782 [DEBUG] [Thread-117838] [transport.py] [_log()] userauth is OK
2025-12-03T13:57:27.782 [DEBUG] [Thread-117838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:57:27.782 [DEBUG] [Thread-117838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:57:27.782 [DEBUG] [Thread-117838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:57:27.783 [DEBUG] [Thread-117838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:57:27.805 [INFO] [Thread-117838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:57:27.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:57:28.469 [DEBUG] [Thread-117838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:57:28.470 [DEBUG] [Thread-117838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:57:28.470 [DEBUG] [Thread-117838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:57:28.511 [DEBUG] [Thread-117838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:57:28.511 [DEBUG] [Thread-117838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:57:28.514 [DEBUG] [Thread-117838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:57:28.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:57:28.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:57:28.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:57:28.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:57:28.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:57:28.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:57:28.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:57:28.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:57:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:57:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.497619 -999.00  +21.00   6.52     26   +0.70 1 1 1 1 1   888    0 19.65 2.53 ----- 10.4 6.5 168.4 10.2 30.4 -26.8 29.6 -28.8 31.0 -25.2 31.7 -25.3
2025-12-03T13:57:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:57:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:57:28.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.497619
2025-12-03T13:57:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:57:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:57:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:57:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:57:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:57:28.538 [DEBUG] [Thread-117838] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:57:28.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:57:19', tmtdew=23.25, humidity=20.57, cloud=0.0, wind=6.9, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:56:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:57:28.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:57:28.646 [DEBUG] [Thread-117841] [transport.py] [_log()] starting thread (client mode): 0xa51cd630
2025-12-03T13:57:28.646 [DEBUG] [Thread-117841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:57:28.661 [DEBUG] [Thread-117841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:57:28.662 [INFO] [Thread-117841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:57:28.669 [DEBUG] [Thread-117841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:57:28.669 [DEBUG] [Thread-117841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:57:28.669 [DEBUG] [Thread-117841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:57:28.669 [DEBUG] [Thread-117841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:57:28.669 [DEBUG] [Thread-117841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] client lang: <none>
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] server lang: <none>
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] kex follows: False
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] Compression: none
2025-12-03T13:57:28.670 [DEBUG] [Thread-117841] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:57:28.726 [DEBUG] [Thread-117841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:57:28.726 [DEBUG] [Thread-117841] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:57:28.727 [DEBUG] [Thread-117841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:57:28.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:57:28.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:57:28.782 [DEBUG] [Thread-117841] [transport.py] [_log()] userauth is OK
2025-12-03T13:57:28.782 [DEBUG] [Thread-117841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:57:28.783 [DEBUG] [Thread-117841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:57:28.783 [DEBUG] [Thread-117841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:57:28.783 [DEBUG] [Thread-117841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:57:28.801 [INFO] [Thread-117841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:57:28.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:57:28.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:57:29.675 [DEBUG] [Thread-117841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:57:29.675 [DEBUG] [Thread-117841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:57:29.723 [DEBUG] [Thread-117841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:57:29.723 [DEBUG] [Thread-117841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:57:29.729 [DEBUG] [Thread-117843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:29.732 [DEBUG] [Thread-117841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:57:29.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:57:29.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:57:29.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:57:29.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:57:29.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:57:29.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:57:29.766 [DEBUG] [Thread-117841] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:57:44.773 [DEBUG] [Thread-117844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:49.196 [DEBUG] [Thread-117845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:57:59.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:57:59.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:57:59.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:57:59.801 [DEBUG] [Thread-117846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 57, 51), 23.49, 20.61, 0.0, 8.1, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:58:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:57:51
2025-12-03T13:58:00.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:58:00.739 [DEBUG] [Thread-117847] [transport.py] [_log()] starting thread (client mode): 0xa27b7910
2025-12-03T13:58:00.739 [DEBUG] [Thread-117847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:58:00.759 [DEBUG] [Thread-117847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:58:00.759 [INFO] [Thread-117847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:58:00.762 [DEBUG] [Thread-117847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] client lang: <none>
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] server lang: <none>
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] kex follows: False
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:58:00.763 [DEBUG] [Thread-117847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:58:00.764 [DEBUG] [Thread-117847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:58:00.764 [DEBUG] [Thread-117847] [transport.py] [_log()] Compression: none
2025-12-03T13:58:00.764 [DEBUG] [Thread-117847] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:58:00.780 [DEBUG] [Thread-117847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:58:00.781 [DEBUG] [Thread-117847] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:58:00.781 [DEBUG] [Thread-117847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:58:00.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:58:00.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:58:00.825 [DEBUG] [Thread-117847] [transport.py] [_log()] userauth is OK
2025-12-03T13:58:00.825 [DEBUG] [Thread-117847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:58:00.825 [DEBUG] [Thread-117847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:58:00.825 [DEBUG] [Thread-117847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:58:00.825 [DEBUG] [Thread-117847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:58:00.856 [INFO] [Thread-117847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:58:00.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:58:01.586 [DEBUG] [Thread-117847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:58:01.586 [DEBUG] [Thread-117847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:58:01.587 [DEBUG] [Thread-117847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:58:01.627 [DEBUG] [Thread-117847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:58:01.627 [DEBUG] [Thread-117847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:58:01.629 [DEBUG] [Thread-117847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:58:01.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:58:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:58:01.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:58:01.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:58:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:58:01.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:58:01.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:58:01.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.497966 -999.00  +21.00  10.30     25   +0.60 1 1 1 1 1   888    0 19.66 5.06 ----- 8.0 10.3 167.2 12.7 30.5 -27.5 29.8 -26.6 31.0 -26.2 31.8 -27.1
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.497966
2025-12-03T13:58:01.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:58:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:58:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:58:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:58:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:58:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:57:51', tmtdew=23.49, humidity=20.61, cloud=0.0, wind=8.1, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:57:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:58:01.647 [DEBUG] [Thread-117847] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:58:01.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:58:01.742 [DEBUG] [Thread-117850] [transport.py] [_log()] starting thread (client mode): 0xa5160880
2025-12-03T13:58:01.742 [DEBUG] [Thread-117850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:58:01.759 [DEBUG] [Thread-117850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:58:01.759 [INFO] [Thread-117850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] client lang: <none>
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] server lang: <none>
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] kex follows: False
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] Compression: none
2025-12-03T13:58:01.767 [DEBUG] [Thread-117850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:58:01.826 [DEBUG] [Thread-117850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:58:01.826 [DEBUG] [Thread-117850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:58:01.827 [DEBUG] [Thread-117850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:58:01.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:58:01.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:58:01.882 [DEBUG] [Thread-117850] [transport.py] [_log()] userauth is OK
2025-12-03T13:58:01.882 [DEBUG] [Thread-117850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:58:01.883 [DEBUG] [Thread-117850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:58:01.883 [DEBUG] [Thread-117850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:58:01.883 [DEBUG] [Thread-117850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:58:01.902 [INFO] [Thread-117850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:58:01.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:58:01.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:58:02.726 [DEBUG] [Thread-117850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:58:02.726 [DEBUG] [Thread-117850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:58:02.774 [DEBUG] [Thread-117850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:58:02.774 [DEBUG] [Thread-117850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:58:02.782 [DEBUG] [Thread-117850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:58:02.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:58:02.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:58:02.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:58:02.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:58:02.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:58:02.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:58:02.816 [DEBUG] [Thread-117850] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:58:14.824 [DEBUG] [Thread-117852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:15.886 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:15.887 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:29.861 [DEBUG] [Thread-117853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:32.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:58:32.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:58:32.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:58:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 58, 23), 23.53, 20.57, 0.0, 5.96, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:58:33.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:58:23
2025-12-03T13:58:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:58:33.794 [DEBUG] [Thread-117854] [transport.py] [_log()] starting thread (client mode): 0xa517c730
2025-12-03T13:58:33.794 [DEBUG] [Thread-117854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:58:33.815 [DEBUG] [Thread-117854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:58:33.815 [INFO] [Thread-117854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:33.819 [DEBUG] [Thread-117854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] client lang: <none>
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] server lang: <none>
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] kex follows: False
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:58:33.820 [DEBUG] [Thread-117854] [transport.py] [_log()] Compression: none
2025-12-03T13:58:33.821 [DEBUG] [Thread-117854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:58:33.837 [DEBUG] [Thread-117854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:58:33.838 [DEBUG] [Thread-117854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:58:33.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:58:33.839 [DEBUG] [Thread-117854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:58:33.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:58:33.841 [DEBUG] [Thread-117854] [transport.py] [_log()] userauth is OK
2025-12-03T13:58:33.841 [DEBUG] [Thread-117854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:58:33.841 [DEBUG] [Thread-117854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:58:33.841 [DEBUG] [Thread-117854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:58:33.841 [DEBUG] [Thread-117854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:58:33.865 [INFO] [Thread-117854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:58:33.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:58:34.502 [DEBUG] [Thread-117854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:58:34.503 [DEBUG] [Thread-117854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:58:34.503 [DEBUG] [Thread-117854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:58:34.544 [DEBUG] [Thread-117854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:58:34.544 [DEBUG] [Thread-117854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:58:34.547 [DEBUG] [Thread-117854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:58:34.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:58:34.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:58:34.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:58:34.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:58:34.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:58:34.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:58:34.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:58:34.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:58:34.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:58:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.498313 -999.00  +21.10  12.20     25   +0.80 1 1 1 1 1   888    0 20.05 7.65 ----- 15.1 12.2 54.6 14.7 30.5 -32.5 29.8 -28.8 31.2 -26.4 31.9 -25.7
2025-12-03T13:58:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:58:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:58:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.498313
2025-12-03T13:58:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:58:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:58:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:58:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:58:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:58:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:58:23', tmtdew=23.53, humidity=20.57, cloud=0.0, wind=5.96, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:57:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:58:34.573 [DEBUG] [Thread-117854] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:58:34.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:58:34.669 [DEBUG] [Thread-117857] [transport.py] [_log()] starting thread (client mode): 0xa27c99f0
2025-12-03T13:58:34.669 [DEBUG] [Thread-117857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:58:34.688 [DEBUG] [Thread-117857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:58:34.688 [INFO] [Thread-117857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] client lang: <none>
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] server lang: <none>
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] kex follows: False
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] Compression: none
2025-12-03T13:58:34.696 [DEBUG] [Thread-117857] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:58:34.754 [DEBUG] [Thread-117857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:58:34.755 [DEBUG] [Thread-117857] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:58:34.755 [DEBUG] [Thread-117857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:58:34.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:58:34.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:58:34.810 [DEBUG] [Thread-117857] [transport.py] [_log()] userauth is OK
2025-12-03T13:58:34.811 [DEBUG] [Thread-117857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:58:34.811 [DEBUG] [Thread-117857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:58:34.811 [DEBUG] [Thread-117857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:58:34.811 [DEBUG] [Thread-117857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:58:34.831 [INFO] [Thread-117857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:58:34.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:58:34.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:58:35.635 [DEBUG] [Thread-117857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:58:35.635 [DEBUG] [Thread-117857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:58:35.683 [DEBUG] [Thread-117857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:58:35.684 [DEBUG] [Thread-117857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:58:35.692 [DEBUG] [Thread-117857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:58:35.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:58:35.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:58:35.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:58:35.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:58:35.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:58:35.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:58:35.726 [DEBUG] [Thread-117857] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:58:44.894 [DEBUG] [Thread-117859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:49.237 [DEBUG] [Thread-117860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:58:59.942 [DEBUG] [Thread-117861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:59:05.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:59:05.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:59:06.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 58, 55), 23.69, 20.12, 0.0, 6.57, 21.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:59:06.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:58:55
2025-12-03T13:59:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:59:06.712 [DEBUG] [Thread-117862] [transport.py] [_log()] starting thread (client mode): 0xa27b6110
2025-12-03T13:59:06.712 [DEBUG] [Thread-117862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:59:06.732 [DEBUG] [Thread-117862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:59:06.732 [INFO] [Thread-117862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:06.735 [DEBUG] [Thread-117862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] client lang: <none>
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] server lang: <none>
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] kex follows: False
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] Compression: none
2025-12-03T13:59:06.736 [DEBUG] [Thread-117862] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:59:06.755 [DEBUG] [Thread-117862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:59:06.756 [DEBUG] [Thread-117862] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:59:06.756 [DEBUG] [Thread-117862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:59:06.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:59:06.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:59:06.758 [DEBUG] [Thread-117862] [transport.py] [_log()] userauth is OK
2025-12-03T13:59:06.758 [DEBUG] [Thread-117862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:59:06.758 [DEBUG] [Thread-117862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:59:06.758 [DEBUG] [Thread-117862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:59:06.758 [DEBUG] [Thread-117862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:59:06.775 [INFO] [Thread-117862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:59:06.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:59:07.524 [DEBUG] [Thread-117862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:59:07.524 [DEBUG] [Thread-117862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:59:07.524 [DEBUG] [Thread-117862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:59:07.565 [DEBUG] [Thread-117862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:59:07.565 [DEBUG] [Thread-117862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:59:07.569 [DEBUG] [Thread-117862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:59:07.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:59:07.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:59:07.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:59:07.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:59:07.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:59:07.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:59:07.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:59:07.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.498660 -999.00  +20.70  14.00     25   +0.10 1 1 1 1 1   888    0 20.22 10.48 ----- 13.8 14.0 57.8 15.9 30.2 -29.7 29.8 -28.9 30.7 -30.6 31.8 -29.2
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.498660
2025-12-03T13:59:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:59:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:59:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:59:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:59:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:59:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:58:55', tmtdew=23.69, humidity=20.12, cloud=0.0, wind=6.57, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:58:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:59:07.592 [DEBUG] [Thread-117862] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:59:07.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:59:07.688 [DEBUG] [Thread-117865] [transport.py] [_log()] starting thread (client mode): 0xa517fb50
2025-12-03T13:59:07.688 [DEBUG] [Thread-117865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:59:07.703 [DEBUG] [Thread-117865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:59:07.703 [INFO] [Thread-117865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:07.711 [DEBUG] [Thread-117865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] client lang: <none>
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] server lang: <none>
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] kex follows: False
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] Compression: none
2025-12-03T13:59:07.712 [DEBUG] [Thread-117865] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:59:07.770 [DEBUG] [Thread-117865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:59:07.771 [DEBUG] [Thread-117865] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:59:07.771 [DEBUG] [Thread-117865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:59:07.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:59:07.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:59:07.826 [DEBUG] [Thread-117865] [transport.py] [_log()] userauth is OK
2025-12-03T13:59:07.827 [DEBUG] [Thread-117865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:59:07.827 [DEBUG] [Thread-117865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:59:07.827 [DEBUG] [Thread-117865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:59:07.827 [DEBUG] [Thread-117865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:59:07.846 [INFO] [Thread-117865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:59:07.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:59:07.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:59:08.661 [DEBUG] [Thread-117865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:59:08.661 [DEBUG] [Thread-117865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:59:08.709 [DEBUG] [Thread-117865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:59:08.709 [DEBUG] [Thread-117865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:59:08.718 [DEBUG] [Thread-117865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:59:08.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:59:08.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:59:08.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:59:08.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:59:08.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:59:08.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:59:08.759 [DEBUG] [Thread-117865] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:59:14.972 [DEBUG] [Thread-117867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:16.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:16.027 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:30.014 [DEBUG] [Thread-117868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T13:59:38.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T13:59:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T13:59:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 59, 27), 23.22, 20.72, 0.0, 5.91, 20.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T13:59:39.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:59:27
2025-12-03T13:59:39.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T13:59:39.708 [DEBUG] [Thread-117869] [transport.py] [_log()] starting thread (client mode): 0xa27521a0
2025-12-03T13:59:39.708 [DEBUG] [Thread-117869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:59:39.728 [DEBUG] [Thread-117869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T13:59:39.728 [INFO] [Thread-117869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:39.731 [DEBUG] [Thread-117869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] client lang: <none>
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] server lang: <none>
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] kex follows: False
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] Compression: none
2025-12-03T13:59:39.732 [DEBUG] [Thread-117869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:59:39.749 [DEBUG] [Thread-117869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:59:39.749 [DEBUG] [Thread-117869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:59:39.750 [DEBUG] [Thread-117869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T13:59:39.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T13:59:39.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:59:39.752 [DEBUG] [Thread-117869] [transport.py] [_log()] userauth is OK
2025-12-03T13:59:39.752 [DEBUG] [Thread-117869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:59:39.752 [DEBUG] [Thread-117869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:59:39.752 [DEBUG] [Thread-117869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T13:59:39.752 [DEBUG] [Thread-117869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:59:39.776 [INFO] [Thread-117869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:59:39.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:59:40.376 [DEBUG] [Thread-117869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:59:40.376 [DEBUG] [Thread-117869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:59:40.377 [DEBUG] [Thread-117869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T13:59:40.417 [DEBUG] [Thread-117869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:59:40.417 [DEBUG] [Thread-117869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:59:40.420 [DEBUG] [Thread-117869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:59:40.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:59:40.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T13:59:40.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T13:59:40.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T13:59:40.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:59:40.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T13:59:40.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:59:40.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:59:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T13:59:40.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.499355 -999.00  +20.70   2.03     25   +0.40 1 1 1 1 1   888    0 20.35 12.54 ----- 1.2 2.0 34.8 10.5 30.0 -29.6 29.6 -29.7 30.6 -27.2 31.4 -29.2
2025-12-03T13:59:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T13:59:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T13:59:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.499355
2025-12-03T13:59:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T13:59:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T13:59:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T13:59:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T13:59:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T13:59:40.445 [DEBUG] [Thread-117869] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:59:40.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:59:27', tmtdew=23.22, humidity=20.72, cloud=0.0, wind=5.91, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:59:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T13:59:40.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T13:59:40.542 [DEBUG] [Thread-117872] [transport.py] [_log()] starting thread (client mode): 0xa27503a0
2025-12-03T13:59:40.542 [DEBUG] [Thread-117872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T13:59:40.556 [DEBUG] [Thread-117872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T13:59:40.556 [INFO] [Thread-117872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:40.564 [DEBUG] [Thread-117872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] client lang: <none>
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] server lang: <none>
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] kex follows: False
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T13:59:40.565 [DEBUG] [Thread-117872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T13:59:40.566 [DEBUG] [Thread-117872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T13:59:40.566 [DEBUG] [Thread-117872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T13:59:40.566 [DEBUG] [Thread-117872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T13:59:40.566 [DEBUG] [Thread-117872] [transport.py] [_log()] Compression: none
2025-12-03T13:59:40.566 [DEBUG] [Thread-117872] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T13:59:40.622 [DEBUG] [Thread-117872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T13:59:40.622 [DEBUG] [Thread-117872] [transport.py] [_log()] Switch to new keys ...
2025-12-03T13:59:40.623 [DEBUG] [Thread-117872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T13:59:40.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T13:59:40.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T13:59:40.678 [DEBUG] [Thread-117872] [transport.py] [_log()] userauth is OK
2025-12-03T13:59:40.679 [DEBUG] [Thread-117872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T13:59:40.679 [DEBUG] [Thread-117872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T13:59:40.679 [DEBUG] [Thread-117872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T13:59:40.679 [DEBUG] [Thread-117872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T13:59:40.697 [INFO] [Thread-117872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T13:59:40.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T13:59:40.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T13:59:41.522 [DEBUG] [Thread-117872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T13:59:41.522 [DEBUG] [Thread-117872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T13:59:41.570 [DEBUG] [Thread-117872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T13:59:41.570 [DEBUG] [Thread-117872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T13:59:41.581 [DEBUG] [Thread-117872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T13:59:41.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T13:59:41.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T13:59:41.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T13:59:41.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T13:59:41.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T13:59:41.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T13:59:41.615 [DEBUG] [Thread-117872] [transport.py] [_log()] EOF in transport thread
2025-12-03T13:59:45.040 [DEBUG] [Thread-117874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T13:59:49.300 [DEBUG] [Thread-117875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:00.086 [DEBUG] [Thread-117876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:00:11.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:00:11.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:00:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 13, 59, 59), 23.4, 20.43, 0.0, 6.71, 20.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:00:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 13:59:59
2025-12-03T14:00:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:00:12.617 [DEBUG] [Thread-117877] [transport.py] [_log()] starting thread (client mode): 0xa27b79d0
2025-12-03T14:00:12.617 [DEBUG] [Thread-117877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:00:12.637 [DEBUG] [Thread-117877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:00:12.638 [INFO] [Thread-117877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] client lang: <none>
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] server lang: <none>
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] kex follows: False
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] Compression: none
2025-12-03T14:00:12.641 [DEBUG] [Thread-117877] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:00:12.657 [DEBUG] [Thread-117877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:00:12.657 [DEBUG] [Thread-117877] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:00:12.657 [DEBUG] [Thread-117877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:00:12.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:00:12.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:00:12.658 [DEBUG] [Thread-117877] [transport.py] [_log()] userauth is OK
2025-12-03T14:00:12.658 [DEBUG] [Thread-117877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:00:12.658 [DEBUG] [Thread-117877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:00:12.658 [DEBUG] [Thread-117877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:00:12.658 [DEBUG] [Thread-117877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:00:12.685 [INFO] [Thread-117877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:00:12.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:00:13.774 [DEBUG] [Thread-117877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:00:13.775 [DEBUG] [Thread-117877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:00:13.775 [DEBUG] [Thread-117877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:00:13.816 [DEBUG] [Thread-117877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:00:13.816 [DEBUG] [Thread-117877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:00:13.819 [DEBUG] [Thread-117877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:00:13.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:00:13.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:00:13.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:00:13.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:00:13.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:00:13.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:00:13.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:00:13.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:00:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:00:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.499702 -999.00  +20.80   2.12     25   +0.50 1 1 1 1 1   888    0 20.22 12.54 ----- 5.2 2.1 76.1 4.4 30.1 -27.7 29.8 -26.9 30.9 -26.0 31.6 -25.9
2025-12-03T14:00:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:00:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:00:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.499702
2025-12-03T14:00:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:00:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:00:13.848 [DEBUG] [Thread-117877] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:00:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:00:13.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:00:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:00:13.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T13:59:59', tmtdew=23.4, humidity=20.43, cloud=0.0, wind=6.71, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T11:59:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:00:13.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:00:13.947 [DEBUG] [Thread-117880] [transport.py] [_log()] starting thread (client mode): 0xa51cd1b0
2025-12-03T14:00:13.947 [DEBUG] [Thread-117880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:00:13.962 [DEBUG] [Thread-117880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:00:13.962 [INFO] [Thread-117880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:00:13.969 [DEBUG] [Thread-117880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] client lang: <none>
2025-12-03T14:00:13.970 [DEBUG] [Thread-117880] [transport.py] [_log()] server lang: <none>
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] kex follows: False
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] Compression: none
2025-12-03T14:00:13.971 [DEBUG] [Thread-117880] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:00:14.026 [DEBUG] [Thread-117880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:00:14.026 [DEBUG] [Thread-117880] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:00:14.027 [DEBUG] [Thread-117880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:00:14.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:00:14.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:00:14.082 [DEBUG] [Thread-117880] [transport.py] [_log()] userauth is OK
2025-12-03T14:00:14.083 [DEBUG] [Thread-117880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:00:14.083 [DEBUG] [Thread-117880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:00:14.092 [DEBUG] [Thread-117880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:00:14.092 [DEBUG] [Thread-117880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:00:14.115 [INFO] [Thread-117880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:00:14.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:00:14.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:00:14.930 [DEBUG] [Thread-117880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:00:14.931 [DEBUG] [Thread-117880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:00:14.979 [DEBUG] [Thread-117880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:00:14.980 [DEBUG] [Thread-117880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:00:14.988 [DEBUG] [Thread-117880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:00:15.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:00:15.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:00:15.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:00:15.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:00:15.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:00:15.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:00:15.029 [DEBUG] [Thread-117880] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:00:15.114 [DEBUG] [Thread-117882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:16.176 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:16.177 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:30.164 [DEBUG] [Thread-117883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:45.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:00:45.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:00:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:00:45.193 [DEBUG] [Thread-117884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:00:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 0, 32), 23.22, 20.63, 0.0, 8.21, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:00:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:00:32
2025-12-03T14:00:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:00:46.017 [DEBUG] [Thread-117885] [transport.py] [_log()] starting thread (client mode): 0xa517f460
2025-12-03T14:00:46.017 [DEBUG] [Thread-117885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:00:46.036 [DEBUG] [Thread-117885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:00:46.037 [INFO] [Thread-117885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] client lang: <none>
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] server lang: <none>
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] kex follows: False
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:00:46.040 [DEBUG] [Thread-117885] [transport.py] [_log()] Compression: none
2025-12-03T14:00:46.041 [DEBUG] [Thread-117885] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:00:46.059 [DEBUG] [Thread-117885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:00:46.059 [DEBUG] [Thread-117885] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:00:46.060 [DEBUG] [Thread-117885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:00:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:00:46.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:00:46.062 [DEBUG] [Thread-117885] [transport.py] [_log()] userauth is OK
2025-12-03T14:00:46.062 [DEBUG] [Thread-117885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:00:46.062 [DEBUG] [Thread-117885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:00:46.062 [DEBUG] [Thread-117885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:00:46.062 [DEBUG] [Thread-117885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:00:46.083 [INFO] [Thread-117885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:00:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:00:46.682 [DEBUG] [Thread-117885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:00:46.683 [DEBUG] [Thread-117885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:00:46.683 [DEBUG] [Thread-117885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:00:46.723 [DEBUG] [Thread-117885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:00:46.724 [DEBUG] [Thread-117885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:00:46.725 [DEBUG] [Thread-117885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:00:46.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:00:46.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:00:46.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:00:46.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:00:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:00:46.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:00:46.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.500049 -999.00  +20.60  13.31     26   +0.60 1 1 1 1 1   888    0 20.03 14.37 ----- 7.9 13.3 18.6 16.4 30.4 -28.2 30.0 -29.1 30.9 -26.2 31.7 -26.8
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.500049
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:00:46.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:00:32', tmtdew=23.22, humidity=20.63, cloud=0.0, wind=8.21, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:00:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:00:46.744 [DEBUG] [Thread-117885] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:00:46.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:00:46.831 [DEBUG] [Thread-117888] [transport.py] [_log()] starting thread (client mode): 0xa2747a00
2025-12-03T14:00:46.831 [DEBUG] [Thread-117888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:00:46.847 [DEBUG] [Thread-117888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:00:46.847 [INFO] [Thread-117888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:00:46.854 [DEBUG] [Thread-117888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] client lang: <none>
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] server lang: <none>
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] kex follows: False
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] Compression: none
2025-12-03T14:00:46.855 [DEBUG] [Thread-117888] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:00:46.913 [DEBUG] [Thread-117888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:00:46.913 [DEBUG] [Thread-117888] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:00:46.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:00:46.914 [DEBUG] [Thread-117888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:00:46.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:00:46.974 [DEBUG] [Thread-117888] [transport.py] [_log()] userauth is OK
2025-12-03T14:00:46.974 [DEBUG] [Thread-117888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:00:46.974 [DEBUG] [Thread-117888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:00:46.974 [DEBUG] [Thread-117888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:00:46.974 [DEBUG] [Thread-117888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:00:46.988 [INFO] [Thread-117888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:00:46.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:00:46.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:00:47.854 [DEBUG] [Thread-117888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:00:47.854 [DEBUG] [Thread-117888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:00:47.902 [DEBUG] [Thread-117888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:00:47.902 [DEBUG] [Thread-117888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:00:47.910 [DEBUG] [Thread-117888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:00:47.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:00:47.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:00:47.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:00:47.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:00:47.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:00:47.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:00:47.943 [DEBUG] [Thread-117888] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:00:49.331 [DEBUG] [Thread-117890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:00.218 [DEBUG] [Thread-117891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:15.264 [DEBUG] [Thread-117892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:16.314 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:16.315 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:17.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:01:17.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:01:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:01:18.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 1, 4), 22.82, 21.18, 0.0, 9.23, 20.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:01:18.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:01:04
2025-12-03T14:01:18.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:01:18.919 [DEBUG] [Thread-117893] [transport.py] [_log()] starting thread (client mode): 0xa2753d00
2025-12-03T14:01:18.919 [DEBUG] [Thread-117893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:01:18.939 [DEBUG] [Thread-117893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:01:18.939 [INFO] [Thread-117893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:18.943 [DEBUG] [Thread-117893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] client lang: <none>
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] server lang: <none>
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] kex follows: False
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] Compression: none
2025-12-03T14:01:18.944 [DEBUG] [Thread-117893] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:01:18.957 [DEBUG] [Thread-117893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:01:18.957 [DEBUG] [Thread-117893] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:01:18.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:01:18.958 [DEBUG] [Thread-117893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:01:18.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:01:18.960 [DEBUG] [Thread-117893] [transport.py] [_log()] userauth is OK
2025-12-03T14:01:18.961 [DEBUG] [Thread-117893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:01:18.961 [DEBUG] [Thread-117893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:01:18.961 [DEBUG] [Thread-117893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:01:18.961 [DEBUG] [Thread-117893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:01:18.984 [INFO] [Thread-117893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:01:18.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:01:19.712 [DEBUG] [Thread-117893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:01:19.712 [DEBUG] [Thread-117893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:01:19.712 [DEBUG] [Thread-117893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:01:19.753 [DEBUG] [Thread-117893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:01:19.753 [DEBUG] [Thread-117893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:01:19.755 [DEBUG] [Thread-117893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:01:19.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:01:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:01:19.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:01:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:01:19.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:01:19.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:01:19.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:01:19.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.500397 -999.00  +20.30   8.18     27   +0.70 1 1 1 1 1   888    0 20.17 13.88 ----- 5.6 8.2 310.0 12.8 30.4 -29.1 30.0 -29.0 31.0 -24.7 31.5 -26.2
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.500397
2025-12-03T14:01:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:01:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:01:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:01:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:01:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:01:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:01:04', tmtdew=22.82, humidity=21.18, cloud=0.0, wind=9.23, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:00:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:01:19.778 [DEBUG] [Thread-117893] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:01:19.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:01:19.874 [DEBUG] [Thread-117896] [transport.py] [_log()] starting thread (client mode): 0xa2761120
2025-12-03T14:01:19.874 [DEBUG] [Thread-117896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:01:19.889 [DEBUG] [Thread-117896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:01:19.889 [INFO] [Thread-117896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:01:19.896 [DEBUG] [Thread-117896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:01:19.896 [DEBUG] [Thread-117896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] client lang: <none>
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] server lang: <none>
2025-12-03T14:01:19.897 [DEBUG] [Thread-117896] [transport.py] [_log()] kex follows: False
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] Compression: none
2025-12-03T14:01:19.898 [DEBUG] [Thread-117896] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:01:19.954 [DEBUG] [Thread-117896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:01:19.954 [DEBUG] [Thread-117896] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:01:19.955 [DEBUG] [Thread-117896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:01:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:01:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:01:20.010 [DEBUG] [Thread-117896] [transport.py] [_log()] userauth is OK
2025-12-03T14:01:20.011 [DEBUG] [Thread-117896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:01:20.011 [DEBUG] [Thread-117896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:01:20.011 [DEBUG] [Thread-117896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:01:20.011 [DEBUG] [Thread-117896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:01:20.030 [INFO] [Thread-117896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:01:20.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:01:20.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:01:20.850 [DEBUG] [Thread-117896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:01:20.850 [DEBUG] [Thread-117896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:01:20.898 [DEBUG] [Thread-117896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:01:20.898 [DEBUG] [Thread-117896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:01:20.907 [DEBUG] [Thread-117896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:01:20.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:01:20.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:01:20.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:01:20.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:01:20.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:01:20.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:01:20.939 [DEBUG] [Thread-117896] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:01:30.291 [DEBUG] [Thread-117898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:45.330 [DEBUG] [Thread-117899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:49.372 [DEBUG] [Thread-117900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:01:50.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:01:50.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:01:50.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:01:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 1, 35), 22.49, 22.04, 0.0, 6.02, 20.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:01:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:01:35
2025-12-03T14:01:51.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:01:51.924 [DEBUG] [Thread-117901] [transport.py] [_log()] starting thread (client mode): 0xa2761ab0
2025-12-03T14:01:51.924 [DEBUG] [Thread-117901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:01:51.944 [DEBUG] [Thread-117901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:01:51.945 [INFO] [Thread-117901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] client lang: <none>
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] server lang: <none>
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] kex follows: False
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] Compression: none
2025-12-03T14:01:51.949 [DEBUG] [Thread-117901] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:01:51.968 [DEBUG] [Thread-117901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:01:51.969 [DEBUG] [Thread-117901] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:01:51.969 [DEBUG] [Thread-117901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:01:51.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:01:51.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:01:51.972 [DEBUG] [Thread-117901] [transport.py] [_log()] userauth is OK
2025-12-03T14:01:51.972 [DEBUG] [Thread-117901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:01:51.972 [DEBUG] [Thread-117901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:01:51.972 [DEBUG] [Thread-117901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:01:51.972 [DEBUG] [Thread-117901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:01:52.009 [INFO] [Thread-117901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:01:52.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:01:52.657 [DEBUG] [Thread-117901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:01:52.657 [DEBUG] [Thread-117901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:01:52.657 [DEBUG] [Thread-117901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:01:52.699 [DEBUG] [Thread-117901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:01:52.699 [DEBUG] [Thread-117901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:01:52.701 [DEBUG] [Thread-117901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:01:52.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:01:52.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:01:52.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:01:52.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:01:52.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:01:52.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:01:52.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.500744 -999.00  +20.40   3.00     27   +0.90 1 1 1 1 1   888    0 20.27 12.01 ----- 2.2 3.0 271.0 9.4 30.5 -28.4 30.2 -27.0 31.0 -24.6 31.7 -25.5
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:01:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.500744
2025-12-03T14:01:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:01:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:01:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:01:52.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:01:52.723 [DEBUG] [Thread-117901] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:01:52.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:01:52.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:01:35', tmtdew=22.49, humidity=22.04, cloud=0.0, wind=6.02, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:01:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:01:52.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:01:52.832 [DEBUG] [Thread-117904] [transport.py] [_log()] starting thread (client mode): 0xa27622f0
2025-12-03T14:01:52.832 [DEBUG] [Thread-117904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:01:52.851 [DEBUG] [Thread-117904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:01:52.851 [INFO] [Thread-117904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:01:52.858 [DEBUG] [Thread-117904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:01:52.859 [DEBUG] [Thread-117904] [transport.py] [_log()] client lang: <none>
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] server lang: <none>
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] kex follows: False
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] Compression: none
2025-12-03T14:01:52.860 [DEBUG] [Thread-117904] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:01:52.917 [DEBUG] [Thread-117904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:01:52.917 [DEBUG] [Thread-117904] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:01:52.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:01:52.918 [DEBUG] [Thread-117904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:01:52.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:01:52.974 [DEBUG] [Thread-117904] [transport.py] [_log()] userauth is OK
2025-12-03T14:01:52.974 [DEBUG] [Thread-117904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:01:52.974 [DEBUG] [Thread-117904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:01:52.975 [DEBUG] [Thread-117904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:01:52.975 [DEBUG] [Thread-117904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:01:52.993 [INFO] [Thread-117904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:01:52.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:01:52.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:01:53.822 [DEBUG] [Thread-117904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:01:53.822 [DEBUG] [Thread-117904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:01:53.871 [DEBUG] [Thread-117904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:01:53.872 [DEBUG] [Thread-117904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:01:53.881 [DEBUG] [Thread-117904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:01:53.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:01:53.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:01:53.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:01:53.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:01:53.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:01:53.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:01:53.915 [DEBUG] [Thread-117904] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:02:00.359 [DEBUG] [Thread-117906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:15.409 [DEBUG] [Thread-117907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:16.454 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:16.456 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:23.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:02:23.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:02:23.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:02:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 2, 8), 22.73, 21.73, 0.0, 6.83, 20.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:02:24.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:02:08
2025-12-03T14:02:24.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:02:24.875 [DEBUG] [Thread-117908] [transport.py] [_log()] starting thread (client mode): 0xa2761600
2025-12-03T14:02:24.875 [DEBUG] [Thread-117908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:02:24.896 [DEBUG] [Thread-117908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:02:24.896 [INFO] [Thread-117908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] client lang: <none>
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] server lang: <none>
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] kex follows: False
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] Compression: none
2025-12-03T14:02:24.897 [DEBUG] [Thread-117908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:02:24.915 [DEBUG] [Thread-117908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:02:24.915 [DEBUG] [Thread-117908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:02:24.915 [DEBUG] [Thread-117908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:02:24.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:02:24.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:02:24.917 [DEBUG] [Thread-117908] [transport.py] [_log()] userauth is OK
2025-12-03T14:02:24.917 [DEBUG] [Thread-117908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:02:24.918 [DEBUG] [Thread-117908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:02:24.918 [DEBUG] [Thread-117908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:02:24.918 [DEBUG] [Thread-117908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:02:24.941 [INFO] [Thread-117908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:02:24.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:02:25.679 [DEBUG] [Thread-117908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:02:25.679 [DEBUG] [Thread-117908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:02:25.679 [DEBUG] [Thread-117908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:02:25.720 [DEBUG] [Thread-117908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:02:25.720 [DEBUG] [Thread-117908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:02:25.726 [DEBUG] [Thread-117908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:02:25.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:02:25.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:02:25.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:02:25.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:02:25.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:02:25.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:02:25.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.501091 -999.00  +20.70   5.16     27   +1.00 1 1 1 1 1   888    0 20.68 13.27 ----- 4.5 5.2 33.6 9.0 30.7 -26.5 30.4 -26.2 31.1 -25.8 31.8 -26.1
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:02:25.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.501091
2025-12-03T14:02:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:02:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:02:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:02:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:02:25.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:02:25.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:02:08', tmtdew=22.73, humidity=21.73, cloud=0.0, wind=6.83, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:01:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:02:25.764 [DEBUG] [Thread-117908] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:02:25.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:02:30.438 [DEBUG] [Thread-117911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:45.479 [DEBUG] [Thread-117912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:02:49.411 [DEBUG] [Thread-117913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:00.508 [DEBUG] [Thread-117914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:15.538 [DEBUG] [Thread-117915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:16.602 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:16.604 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:30.565 [DEBUG] [Thread-117916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:45.595 [DEBUG] [Thread-117917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:03:49.481 [DEBUG] [Thread-117918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:00.620 [DEBUG] [Thread-117919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:15.645 [DEBUG] [Thread-117920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:16.743 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:16.744 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:30.672 [DEBUG] [Thread-117921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:37.654 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T14:04:45.704 [DEBUG] [Thread-117922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:04:49.532 [DEBUG] [Thread-117923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:00.732 [DEBUG] [Thread-117924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:07.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:05:07.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:05:07.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:05:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 4, 48), 23.64, 20.2, 0.0, 19.16, 21.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:05:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:04:48
2025-12-03T14:05:08.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:05:08.629 [DEBUG] [Thread-117925] [transport.py] [_log()] starting thread (client mode): 0xa27c8bb0
2025-12-03T14:05:08.629 [DEBUG] [Thread-117925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:05:08.648 [DEBUG] [Thread-117925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:05:08.648 [INFO] [Thread-117925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] client lang: <none>
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] server lang: <none>
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] kex follows: False
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:05:08.651 [DEBUG] [Thread-117925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:05:08.652 [DEBUG] [Thread-117925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:05:08.652 [DEBUG] [Thread-117925] [transport.py] [_log()] Compression: none
2025-12-03T14:05:08.652 [DEBUG] [Thread-117925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:05:08.668 [DEBUG] [Thread-117925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:05:08.669 [DEBUG] [Thread-117925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:05:08.669 [DEBUG] [Thread-117925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:05:08.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:05:08.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:05:08.671 [DEBUG] [Thread-117925] [transport.py] [_log()] userauth is OK
2025-12-03T14:05:08.671 [DEBUG] [Thread-117925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:05:08.671 [DEBUG] [Thread-117925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:05:08.671 [DEBUG] [Thread-117925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:05:08.671 [DEBUG] [Thread-117925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:05:08.689 [INFO] [Thread-117925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:05:08.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:05:09.577 [DEBUG] [Thread-117925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:05:09.578 [DEBUG] [Thread-117925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:05:09.578 [DEBUG] [Thread-117925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:05:09.619 [DEBUG] [Thread-117925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:05:09.619 [DEBUG] [Thread-117925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:05:09.621 [DEBUG] [Thread-117925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:05:09.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:05:09.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:05:09.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:05:09.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:05:09.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:05:09.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:05:09.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:05:09.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.503174 -999.00  +21.80  16.59     26   +1.40 1 1 1 1 1   888    0 20.92 37.07 ----- 19.8 16.6 105.6 20.7 30.7 -26.9 30.3 -25.6 31.3 -24.2 31.9 -25.8
2025-12-03T14:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:05:09.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.503174
2025-12-03T14:05:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:05:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:05:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:05:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:05:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:05:09.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:04:48', tmtdew=23.64, humidity=20.2, cloud=0.0, wind=19.16, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:04:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:05:09.645 [DEBUG] [Thread-117925] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:05:09.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:05:09.752 [DEBUG] [Thread-117928] [transport.py] [_log()] starting thread (client mode): 0xa27c9b70
2025-12-03T14:05:09.752 [DEBUG] [Thread-117928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:05:09.768 [DEBUG] [Thread-117928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:05:09.768 [INFO] [Thread-117928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:05:09.776 [DEBUG] [Thread-117928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:05:09.776 [DEBUG] [Thread-117928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:05:09.776 [DEBUG] [Thread-117928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:05:09.776 [DEBUG] [Thread-117928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:09.776 [DEBUG] [Thread-117928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] client lang: <none>
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] server lang: <none>
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] kex follows: False
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] Compression: none
2025-12-03T14:05:09.777 [DEBUG] [Thread-117928] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:05:09.834 [DEBUG] [Thread-117928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:05:09.835 [DEBUG] [Thread-117928] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:05:09.835 [DEBUG] [Thread-117928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:05:09.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:05:09.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:05:09.891 [DEBUG] [Thread-117928] [transport.py] [_log()] userauth is OK
2025-12-03T14:05:09.891 [DEBUG] [Thread-117928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:05:09.891 [DEBUG] [Thread-117928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:05:09.891 [DEBUG] [Thread-117928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:05:09.891 [DEBUG] [Thread-117928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:05:09.910 [INFO] [Thread-117928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:05:09.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:05:09.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:05:10.800 [DEBUG] [Thread-117928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:05:10.800 [DEBUG] [Thread-117928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:05:10.848 [DEBUG] [Thread-117928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:05:10.848 [DEBUG] [Thread-117928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:05:10.857 [DEBUG] [Thread-117928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:05:10.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:05:10.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:05:10.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:05:10.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:05:10.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:05:10.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:05:10.891 [DEBUG] [Thread-117928] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:05:15.764 [DEBUG] [Thread-117930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:16.889 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:16.890 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:30.819 [DEBUG] [Thread-117931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:05:40.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:05:40.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:05:41.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 5, 20), 23.47, 20.42, 0.0, 17.24, 21.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:05:41.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:05:20
2025-12-03T14:05:41.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:05:41.866 [DEBUG] [Thread-117932] [transport.py] [_log()] starting thread (client mode): 0xa2760040
2025-12-03T14:05:41.866 [DEBUG] [Thread-117932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:05:41.887 [DEBUG] [Thread-117932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:05:41.887 [INFO] [Thread-117932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] client lang: <none>
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] server lang: <none>
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] kex follows: False
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:05:41.890 [DEBUG] [Thread-117932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:05:41.891 [DEBUG] [Thread-117932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:05:41.891 [DEBUG] [Thread-117932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:05:41.891 [DEBUG] [Thread-117932] [transport.py] [_log()] Compression: none
2025-12-03T14:05:41.891 [DEBUG] [Thread-117932] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:05:41.907 [DEBUG] [Thread-117932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:05:41.908 [DEBUG] [Thread-117932] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:05:41.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:05:41.909 [DEBUG] [Thread-117932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:05:41.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:05:41.910 [DEBUG] [Thread-117932] [transport.py] [_log()] userauth is OK
2025-12-03T14:05:41.910 [DEBUG] [Thread-117932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:05:41.911 [DEBUG] [Thread-117932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:05:41.911 [DEBUG] [Thread-117932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:05:41.911 [DEBUG] [Thread-117932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:05:41.934 [INFO] [Thread-117932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:05:41.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:05:42.579 [DEBUG] [Thread-117932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:05:42.579 [DEBUG] [Thread-117932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:05:42.580 [DEBUG] [Thread-117932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:05:42.622 [DEBUG] [Thread-117932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:05:42.623 [DEBUG] [Thread-117932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:05:42.625 [DEBUG] [Thread-117932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:05:42.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:05:42.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:05:42.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:05:42.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:05:42.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:05:42.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:05:42.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.503521 -999.00  +21.50  17.16     24   +0.50 1 1 1 1 1   888    0 21.09 42.03 ----- 16.2 17.2 118.4 27.2 30.4 -29.8 30.4 -26.4 31.3 -24.5 31.8 -26.5
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:05:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.503521
2025-12-03T14:05:42.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:05:42.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:05:42.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:05:42.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:05:42.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:05:42.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:05:20', tmtdew=23.47, humidity=20.42, cloud=0.0, wind=17.24, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:05:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:05:42.653 [DEBUG] [Thread-117932] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:05:42.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:05:42.752 [DEBUG] [Thread-117935] [transport.py] [_log()] starting thread (client mode): 0xa27cb1f0
2025-12-03T14:05:42.752 [DEBUG] [Thread-117935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:05:42.767 [DEBUG] [Thread-117935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:05:42.767 [INFO] [Thread-117935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:05:42.774 [DEBUG] [Thread-117935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] client lang: <none>
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] server lang: <none>
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] kex follows: False
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] Compression: none
2025-12-03T14:05:42.775 [DEBUG] [Thread-117935] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:05:42.830 [DEBUG] [Thread-117935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:05:42.830 [DEBUG] [Thread-117935] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:05:42.831 [DEBUG] [Thread-117935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:05:42.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:05:42.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:05:42.887 [DEBUG] [Thread-117935] [transport.py] [_log()] userauth is OK
2025-12-03T14:05:42.887 [DEBUG] [Thread-117935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:05:42.887 [DEBUG] [Thread-117935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:05:42.887 [DEBUG] [Thread-117935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:05:42.887 [DEBUG] [Thread-117935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:05:42.907 [INFO] [Thread-117935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:05:42.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:05:42.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:05:43.732 [DEBUG] [Thread-117935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:05:43.732 [DEBUG] [Thread-117935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:05:43.779 [DEBUG] [Thread-117935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:05:43.780 [DEBUG] [Thread-117935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:05:43.788 [DEBUG] [Thread-117935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:05:43.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:05:43.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:05:43.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:05:43.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:05:43.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:05:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:05:43.822 [DEBUG] [Thread-117935] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:05:45.852 [DEBUG] [Thread-117937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:05:49.577 [DEBUG] [Thread-117938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:00.899 [DEBUG] [Thread-117939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:13.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:06:13.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:06:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:06:14.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 5, 52), 23.72, 20.05, 0.0, 20.47, 20.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:06:14.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:05:52
2025-12-03T14:06:14.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:06:14.802 [DEBUG] [Thread-117940] [transport.py] [_log()] starting thread (client mode): 0xa5163820
2025-12-03T14:06:14.803 [DEBUG] [Thread-117940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:06:14.823 [DEBUG] [Thread-117940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:06:14.823 [INFO] [Thread-117940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:06:14.826 [DEBUG] [Thread-117940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] client lang: <none>
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] server lang: <none>
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] kex follows: False
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] Compression: none
2025-12-03T14:06:14.827 [DEBUG] [Thread-117940] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:06:14.845 [DEBUG] [Thread-117940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:06:14.846 [DEBUG] [Thread-117940] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:06:14.846 [DEBUG] [Thread-117940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:06:14.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:06:14.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:06:14.848 [DEBUG] [Thread-117940] [transport.py] [_log()] userauth is OK
2025-12-03T14:06:14.848 [DEBUG] [Thread-117940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:06:14.848 [DEBUG] [Thread-117940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:06:14.849 [DEBUG] [Thread-117940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:06:14.849 [DEBUG] [Thread-117940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:06:14.866 [INFO] [Thread-117940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:06:14.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:06:15.495 [DEBUG] [Thread-117940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:06:15.495 [DEBUG] [Thread-117940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:06:15.495 [DEBUG] [Thread-117940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:06:15.536 [DEBUG] [Thread-117940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:06:15.536 [DEBUG] [Thread-117940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:06:15.538 [DEBUG] [Thread-117940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:06:15.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:06:15.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:06:15.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:06:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:06:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:06:15.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:06:15.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.503869 -999.00  +21.10  16.08     25   +0.60 1 1 1 1 1   888    0 21.90 50.30 ----- 17.3 16.1 112.4 20.9 30.3 -29.3 30.4 -25.2 31.3 -25.6 31.9 -26.7
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:06:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.503869
2025-12-03T14:06:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:06:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:06:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:06:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:06:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:06:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:05:52', tmtdew=23.72, humidity=20.05, cloud=0.0, wind=20.47, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:05:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:06:15.565 [DEBUG] [Thread-117940] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:06:15.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:06:15.661 [DEBUG] [Thread-117943] [transport.py] [_log()] starting thread (client mode): 0xa2760b80
2025-12-03T14:06:15.661 [DEBUG] [Thread-117943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:06:15.677 [DEBUG] [Thread-117943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:06:15.678 [INFO] [Thread-117943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:06:15.685 [DEBUG] [Thread-117943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:15.686 [DEBUG] [Thread-117943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] client lang: <none>
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] server lang: <none>
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] kex follows: False
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:06:15.687 [DEBUG] [Thread-117943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:06:15.688 [DEBUG] [Thread-117943] [transport.py] [_log()] Compression: none
2025-12-03T14:06:15.688 [DEBUG] [Thread-117943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:06:15.743 [DEBUG] [Thread-117943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:06:15.743 [DEBUG] [Thread-117943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:06:15.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:06:15.744 [DEBUG] [Thread-117943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:06:15.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:06:15.798 [DEBUG] [Thread-117943] [transport.py] [_log()] userauth is OK
2025-12-03T14:06:15.799 [DEBUG] [Thread-117943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:06:15.799 [DEBUG] [Thread-117943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:06:15.799 [DEBUG] [Thread-117943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:06:15.799 [DEBUG] [Thread-117943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:06:15.817 [INFO] [Thread-117943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:06:15.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:06:15.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:06:15.925 [DEBUG] [Thread-117945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:16.675 [DEBUG] [Thread-117943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:06:16.675 [DEBUG] [Thread-117943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:06:16.724 [DEBUG] [Thread-117943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:06:16.724 [DEBUG] [Thread-117943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:06:16.751 [DEBUG] [Thread-117943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:06:16.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:06:16.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:06:16.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:06:16.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:06:16.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:06:16.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:06:16.816 [DEBUG] [Thread-117943] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:06:17.028 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:17.030 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:30.966 [DEBUG] [Thread-117946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:45.993 [DEBUG] [Thread-117947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:46.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:06:46.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:06:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:06:47.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 6, 24), 23.56, 20.23, 0.0, 15.86, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:06:47.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:06:24
2025-12-03T14:06:47.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:06:47.790 [DEBUG] [Thread-117948] [transport.py] [_log()] starting thread (client mode): 0xa2753790
2025-12-03T14:06:47.790 [DEBUG] [Thread-117948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:06:47.809 [DEBUG] [Thread-117948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:06:47.810 [INFO] [Thread-117948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] client lang: <none>
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] server lang: <none>
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] kex follows: False
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] Compression: none
2025-12-03T14:06:47.813 [DEBUG] [Thread-117948] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:06:47.830 [DEBUG] [Thread-117948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:06:47.831 [DEBUG] [Thread-117948] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:06:47.831 [DEBUG] [Thread-117948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:06:47.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:06:47.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:06:47.833 [DEBUG] [Thread-117948] [transport.py] [_log()] userauth is OK
2025-12-03T14:06:47.833 [DEBUG] [Thread-117948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:06:47.833 [DEBUG] [Thread-117948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:06:47.833 [DEBUG] [Thread-117948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:06:47.833 [DEBUG] [Thread-117948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:06:47.856 [INFO] [Thread-117948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:06:47.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:06:48.469 [DEBUG] [Thread-117948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:06:48.469 [DEBUG] [Thread-117948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:06:48.470 [DEBUG] [Thread-117948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:06:48.510 [DEBUG] [Thread-117948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:06:48.510 [DEBUG] [Thread-117948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:06:48.513 [DEBUG] [Thread-117948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:06:48.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:06:48.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:06:48.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:06:48.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:06:48.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:06:48.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:06:48.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:06:48.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:06:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:06:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.504216 -999.00  +21.10   8.74     25   +0.70 1 1 1 1 1   888    0 20.95 50.65 ----- 8.9 8.7 107.7 15.7 30.3 -26.6 30.4 -25.1 31.5 -24.6 32.0 -25.6
2025-12-03T14:06:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:06:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:06:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.504216
2025-12-03T14:06:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:06:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:06:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:06:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:06:48.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:06:48.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:06:24', tmtdew=23.56, humidity=20.23, cloud=0.0, wind=15.86, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:06:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:06:48.541 [DEBUG] [Thread-117948] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:06:48.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:06:48.638 [DEBUG] [Thread-117951] [transport.py] [_log()] starting thread (client mode): 0xa2752e30
2025-12-03T14:06:48.638 [DEBUG] [Thread-117951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:06:48.652 [DEBUG] [Thread-117951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:06:48.652 [INFO] [Thread-117951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] client lang: <none>
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] server lang: <none>
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] kex follows: False
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:06:48.660 [DEBUG] [Thread-117951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:06:48.661 [DEBUG] [Thread-117951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:06:48.661 [DEBUG] [Thread-117951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:06:48.661 [DEBUG] [Thread-117951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:06:48.661 [DEBUG] [Thread-117951] [transport.py] [_log()] Compression: none
2025-12-03T14:06:48.661 [DEBUG] [Thread-117951] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:06:48.718 [DEBUG] [Thread-117951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:06:48.718 [DEBUG] [Thread-117951] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:06:48.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:06:48.719 [DEBUG] [Thread-117951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:06:48.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:06:48.779 [DEBUG] [Thread-117951] [transport.py] [_log()] userauth is OK
2025-12-03T14:06:48.779 [DEBUG] [Thread-117951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:06:48.779 [DEBUG] [Thread-117951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:06:48.779 [DEBUG] [Thread-117951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:06:48.779 [DEBUG] [Thread-117951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:06:48.797 [INFO] [Thread-117951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:06:48.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:06:48.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:06:49.622 [DEBUG] [Thread-117953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:06:49.640 [DEBUG] [Thread-117951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:06:49.641 [DEBUG] [Thread-117951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:06:49.689 [DEBUG] [Thread-117951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:06:49.689 [DEBUG] [Thread-117951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:06:49.698 [DEBUG] [Thread-117951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:06:49.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:06:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:06:49.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:06:49.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:06:49.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:06:49.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:06:49.732 [DEBUG] [Thread-117951] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:07:01.023 [DEBUG] [Thread-117954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:16.061 [DEBUG] [Thread-117955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:17.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:17.174 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:07:19.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:07:19.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 6, 56), 23.41, 20.61, 0.0, 15.4, 20.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:07:20.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:06:56
2025-12-03T14:07:20.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:07:20.744 [DEBUG] [Thread-117956] [transport.py] [_log()] starting thread (client mode): 0xa27513c0
2025-12-03T14:07:20.744 [DEBUG] [Thread-117956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:07:20.763 [DEBUG] [Thread-117956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:07:20.763 [INFO] [Thread-117956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] client lang: <none>
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] server lang: <none>
2025-12-03T14:07:20.766 [DEBUG] [Thread-117956] [transport.py] [_log()] kex follows: False
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] Compression: none
2025-12-03T14:07:20.767 [DEBUG] [Thread-117956] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:07:20.785 [DEBUG] [Thread-117956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:07:20.786 [DEBUG] [Thread-117956] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:07:20.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:07:20.787 [DEBUG] [Thread-117956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:07:20.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:07:20.789 [DEBUG] [Thread-117956] [transport.py] [_log()] userauth is OK
2025-12-03T14:07:20.789 [DEBUG] [Thread-117956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:07:20.789 [DEBUG] [Thread-117956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:07:20.789 [DEBUG] [Thread-117956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:07:20.789 [DEBUG] [Thread-117956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:07:20.814 [INFO] [Thread-117956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:07:20.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:07:21.425 [DEBUG] [Thread-117956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:07:21.425 [DEBUG] [Thread-117956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:07:21.426 [DEBUG] [Thread-117956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:07:21.466 [DEBUG] [Thread-117956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:07:21.466 [DEBUG] [Thread-117956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:07:21.469 [DEBUG] [Thread-117956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:07:21.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:07:21.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:07:21.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:07:21.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:07:21.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:07:21.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:07:21.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.504563 -999.00  +21.40  18.45     25   +0.80 1 1 1 1 1   888    0 22.01 51.22 ----- 16.4 18.4 111.0 22.0 30.3 -28.9 30.6 -24.1 31.6 -23.6 32.1 -25.8
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:07:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.504563
2025-12-03T14:07:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:07:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:07:21.494 [DEBUG] [Thread-117956] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:07:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:06:56', tmtdew=23.41, humidity=20.61, cloud=0.0, wind=15.4, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:06:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:07:21.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:07:21.600 [DEBUG] [Thread-117959] [transport.py] [_log()] starting thread (client mode): 0xa2762bf0
2025-12-03T14:07:21.601 [DEBUG] [Thread-117959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:07:21.618 [DEBUG] [Thread-117959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:07:21.619 [INFO] [Thread-117959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] client lang: <none>
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] server lang: <none>
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] kex follows: False
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:07:21.626 [DEBUG] [Thread-117959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:07:21.627 [DEBUG] [Thread-117959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:07:21.627 [DEBUG] [Thread-117959] [transport.py] [_log()] Compression: none
2025-12-03T14:07:21.627 [DEBUG] [Thread-117959] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:07:21.683 [DEBUG] [Thread-117959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:07:21.683 [DEBUG] [Thread-117959] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:07:21.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:07:21.685 [DEBUG] [Thread-117959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:07:21.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:07:21.739 [DEBUG] [Thread-117959] [transport.py] [_log()] userauth is OK
2025-12-03T14:07:21.739 [DEBUG] [Thread-117959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:07:21.739 [DEBUG] [Thread-117959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:07:21.739 [DEBUG] [Thread-117959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:07:21.739 [DEBUG] [Thread-117959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:07:21.758 [INFO] [Thread-117959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:07:21.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:07:21.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:07:22.593 [DEBUG] [Thread-117959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:07:22.593 [DEBUG] [Thread-117959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:07:22.641 [DEBUG] [Thread-117959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:07:22.641 [DEBUG] [Thread-117959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:07:22.650 [DEBUG] [Thread-117959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:07:22.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:07:22.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:07:22.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:07:22.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:07:22.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:07:22.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:07:22.684 [DEBUG] [Thread-117959] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:07:31.086 [DEBUG] [Thread-117961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:46.132 [DEBUG] [Thread-117962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:49.668 [DEBUG] [Thread-117963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:07:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:07:52.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:07:52.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:07:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 7, 28), 23.51, 20.47, 0.0, 12.67, 20.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:07:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:07:28
2025-12-03T14:07:53.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:07:53.658 [DEBUG] [Thread-117964] [transport.py] [_log()] starting thread (client mode): 0xa5162020
2025-12-03T14:07:53.658 [DEBUG] [Thread-117964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:07:53.678 [DEBUG] [Thread-117964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:07:53.678 [INFO] [Thread-117964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:07:53.681 [DEBUG] [Thread-117964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:07:53.681 [DEBUG] [Thread-117964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:07:53.681 [DEBUG] [Thread-117964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:07:53.681 [DEBUG] [Thread-117964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] client lang: <none>
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] server lang: <none>
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] kex follows: False
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] Compression: none
2025-12-03T14:07:53.682 [DEBUG] [Thread-117964] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:07:53.701 [DEBUG] [Thread-117964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:07:53.702 [DEBUG] [Thread-117964] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:07:53.702 [DEBUG] [Thread-117964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:07:53.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:07:53.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:07:53.704 [DEBUG] [Thread-117964] [transport.py] [_log()] userauth is OK
2025-12-03T14:07:53.704 [DEBUG] [Thread-117964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:07:53.705 [DEBUG] [Thread-117964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:07:53.705 [DEBUG] [Thread-117964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:07:53.705 [DEBUG] [Thread-117964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:07:53.739 [INFO] [Thread-117964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:07:53.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:07:54.387 [DEBUG] [Thread-117964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:07:54.387 [DEBUG] [Thread-117964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:07:54.387 [DEBUG] [Thread-117964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:07:54.428 [DEBUG] [Thread-117964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:07:54.428 [DEBUG] [Thread-117964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:07:54.430 [DEBUG] [Thread-117964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:07:54.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:07:54.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:07:54.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:07:54.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:07:54.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:07:54.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:07:54.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.504910 -999.00  +21.10   9.04     25   +0.50 1 1 1 1 1   888    0 21.51 55.94 ----- 9.8 9.0 98.4 16.0 30.3 -26.0 30.6 -24.2 31.7 -23.3 32.0 -25.5
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.504910
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:07:28', tmtdew=23.51, humidity=20.47, cloud=0.0, wind=12.67, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:07:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:07:54.448 [DEBUG] [Thread-117964] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:07:54.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:07:54.534 [DEBUG] [Thread-117967] [transport.py] [_log()] starting thread (client mode): 0xa2762320
2025-12-03T14:07:54.534 [DEBUG] [Thread-117967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:07:54.549 [DEBUG] [Thread-117967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:07:54.549 [INFO] [Thread-117967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:07:54.556 [DEBUG] [Thread-117967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] client lang: <none>
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] server lang: <none>
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] kex follows: False
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] Compression: none
2025-12-03T14:07:54.557 [DEBUG] [Thread-117967] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:07:54.613 [DEBUG] [Thread-117967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:07:54.613 [DEBUG] [Thread-117967] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:07:54.614 [DEBUG] [Thread-117967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:07:54.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:07:54.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:07:54.670 [DEBUG] [Thread-117967] [transport.py] [_log()] userauth is OK
2025-12-03T14:07:54.670 [DEBUG] [Thread-117967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:07:54.670 [DEBUG] [Thread-117967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:07:54.670 [DEBUG] [Thread-117967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:07:54.670 [DEBUG] [Thread-117967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:07:54.684 [INFO] [Thread-117967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:07:54.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:07:54.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:07:55.531 [DEBUG] [Thread-117967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:07:55.531 [DEBUG] [Thread-117967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:07:55.579 [DEBUG] [Thread-117967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:07:55.579 [DEBUG] [Thread-117967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:07:55.587 [DEBUG] [Thread-117967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:07:55.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:07:55.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:07:55.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:07:55.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:07:55.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:07:55.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:07:55.618 [DEBUG] [Thread-117967] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:08:01.159 [DEBUG] [Thread-117969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:16.196 [DEBUG] [Thread-117970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:17.313 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:17.314 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:25.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:08:25.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:08:25.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:08:26.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 7, 28), 23.51, 20.47, 0.0, 12.67, 20.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:08:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:07:28
2025-12-03T14:08:26.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:08:26.591 [DEBUG] [Thread-117971] [transport.py] [_log()] starting thread (client mode): 0xa2752ef0
2025-12-03T14:08:26.591 [DEBUG] [Thread-117971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:08:26.611 [DEBUG] [Thread-117971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:08:26.611 [INFO] [Thread-117971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] client lang: <none>
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] server lang: <none>
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] kex follows: False
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:08:26.615 [DEBUG] [Thread-117971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:08:26.616 [DEBUG] [Thread-117971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:08:26.616 [DEBUG] [Thread-117971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:08:26.616 [DEBUG] [Thread-117971] [transport.py] [_log()] Compression: none
2025-12-03T14:08:26.616 [DEBUG] [Thread-117971] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:08:26.633 [DEBUG] [Thread-117971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:08:26.634 [DEBUG] [Thread-117971] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:08:26.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:08:26.635 [DEBUG] [Thread-117971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:08:26.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:08:26.676 [DEBUG] [Thread-117971] [transport.py] [_log()] userauth is OK
2025-12-03T14:08:26.677 [DEBUG] [Thread-117971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:08:26.677 [DEBUG] [Thread-117971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:08:26.677 [DEBUG] [Thread-117971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:08:26.677 [DEBUG] [Thread-117971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:08:26.710 [INFO] [Thread-117971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:08:26.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:08:27.354 [DEBUG] [Thread-117971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:08:27.354 [DEBUG] [Thread-117971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:08:27.355 [DEBUG] [Thread-117971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:08:27.395 [DEBUG] [Thread-117971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:08:27.395 [DEBUG] [Thread-117971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:08:27.398 [DEBUG] [Thread-117971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:08:27.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:08:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:08:27.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:08:27.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:08:27.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:08:27.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:08:27.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:08:27.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.505258 -999.00  +21.20  18.52     26   +1.00 1 1 1 1 1   888    0 21.37 54.89 ----- 19.4 18.5 132.8 20.7 30.3 -25.1 30.7 -24.1 31.8 -23.9 32.2 -25.8
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.505258
2025-12-03T14:08:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:08:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:08:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:08:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:08:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:08:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:07:28', tmtdew=23.51, humidity=20.47, cloud=0.0, wind=12.67, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:07:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:08:27.423 [DEBUG] [Thread-117971] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:08:27.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:08:27.520 [DEBUG] [Thread-117974] [transport.py] [_log()] starting thread (client mode): 0xa27b7f70
2025-12-03T14:08:27.520 [DEBUG] [Thread-117974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:08:27.534 [DEBUG] [Thread-117974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:08:27.534 [INFO] [Thread-117974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:27.542 [DEBUG] [Thread-117974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] client lang: <none>
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] server lang: <none>
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] kex follows: False
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] Compression: none
2025-12-03T14:08:27.543 [DEBUG] [Thread-117974] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:08:27.606 [DEBUG] [Thread-117974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:08:27.606 [DEBUG] [Thread-117974] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:08:27.607 [DEBUG] [Thread-117974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:08:27.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:08:27.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:08:27.662 [DEBUG] [Thread-117974] [transport.py] [_log()] userauth is OK
2025-12-03T14:08:27.663 [DEBUG] [Thread-117974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:08:27.663 [DEBUG] [Thread-117974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:08:27.663 [DEBUG] [Thread-117974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:08:27.663 [DEBUG] [Thread-117974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:08:27.681 [INFO] [Thread-117974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:08:27.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:08:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:08:28.520 [DEBUG] [Thread-117974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:08:28.521 [DEBUG] [Thread-117974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:08:28.569 [DEBUG] [Thread-117974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:08:28.569 [DEBUG] [Thread-117974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:08:28.578 [DEBUG] [Thread-117974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:08:28.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:08:28.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:08:28.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:08:28.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:08:28.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:08:28.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:08:28.617 [DEBUG] [Thread-117974] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:08:31.230 [DEBUG] [Thread-117976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:46.269 [DEBUG] [Thread-117977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:49.702 [DEBUG] [Thread-117978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:08:58.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:08:58.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:08:58.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:08:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 8, 32), 24.02, 19.85, 0.0, 18.33, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:08:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:08:32
2025-12-03T14:08:59.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:08:59.583 [DEBUG] [Thread-117979] [transport.py] [_log()] starting thread (client mode): 0xa27b5000
2025-12-03T14:08:59.583 [DEBUG] [Thread-117979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:08:59.603 [DEBUG] [Thread-117979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:08:59.603 [INFO] [Thread-117979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] client lang: <none>
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] server lang: <none>
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] kex follows: False
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] Compression: none
2025-12-03T14:08:59.606 [DEBUG] [Thread-117979] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:08:59.622 [DEBUG] [Thread-117979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:08:59.623 [DEBUG] [Thread-117979] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:08:59.623 [DEBUG] [Thread-117979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:08:59.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:08:59.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:08:59.625 [DEBUG] [Thread-117979] [transport.py] [_log()] userauth is OK
2025-12-03T14:08:59.625 [DEBUG] [Thread-117979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:08:59.625 [DEBUG] [Thread-117979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:08:59.625 [DEBUG] [Thread-117979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:08:59.626 [DEBUG] [Thread-117979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:08:59.650 [INFO] [Thread-117979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:08:59.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:09:00.297 [DEBUG] [Thread-117979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:09:00.297 [DEBUG] [Thread-117979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:09:00.298 [DEBUG] [Thread-117979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:09:00.339 [DEBUG] [Thread-117979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:09:00.339 [DEBUG] [Thread-117979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:09:00.342 [DEBUG] [Thread-117979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:09:00.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:09:00.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:09:00.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:09:00.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:09:00.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:09:00.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:09:00.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:09:00.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.505605 -999.00  +21.40  14.64     26   +1.10 1 1 1 1 1   888    0 21.65 52.81 ----- 15.7 14.6 150.2 18.5 30.5 -26.4 30.7 -24.9 31.7 -24.0 32.1 -26.0
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.505605
2025-12-03T14:09:00.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:09:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:09:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:09:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:09:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:09:00.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:08:32', tmtdew=24.02, humidity=19.85, cloud=0.0, wind=18.33, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:08:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:09:00.369 [DEBUG] [Thread-117979] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:09:00.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:09:00.460 [DEBUG] [Thread-117982] [transport.py] [_log()] starting thread (client mode): 0xa2751cf0
2025-12-03T14:09:00.460 [DEBUG] [Thread-117982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:09:00.475 [DEBUG] [Thread-117982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:09:00.475 [INFO] [Thread-117982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:09:00.482 [DEBUG] [Thread-117982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] client lang: <none>
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] server lang: <none>
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] kex follows: False
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] Compression: none
2025-12-03T14:09:00.483 [DEBUG] [Thread-117982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:09:00.538 [DEBUG] [Thread-117982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:09:00.538 [DEBUG] [Thread-117982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:09:00.539 [DEBUG] [Thread-117982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:09:00.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:09:00.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:09:00.595 [DEBUG] [Thread-117982] [transport.py] [_log()] userauth is OK
2025-12-03T14:09:00.595 [DEBUG] [Thread-117982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:09:00.595 [DEBUG] [Thread-117982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:09:00.595 [DEBUG] [Thread-117982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:09:00.595 [DEBUG] [Thread-117982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:09:00.614 [INFO] [Thread-117982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:09:00.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:09:00.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:09:01.299 [DEBUG] [Thread-117984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:01.434 [DEBUG] [Thread-117982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:09:01.434 [DEBUG] [Thread-117982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:09:01.482 [DEBUG] [Thread-117982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:09:01.482 [DEBUG] [Thread-117982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:09:01.491 [DEBUG] [Thread-117982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:09:01.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:09:01.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:09:01.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:09:01.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:09:01.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:09:01.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:09:01.522 [DEBUG] [Thread-117982] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:09:16.340 [DEBUG] [Thread-117985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:17.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:17.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:31.364 [DEBUG] [Thread-117986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:09:31.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:09:31.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:09:32.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 9, 4), 23.66, 20.32, 0.0, 17.45, 21.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:09:32.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:09:04
2025-12-03T14:09:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:09:32.498 [DEBUG] [Thread-117987] [transport.py] [_log()] starting thread (client mode): 0xa519bf40
2025-12-03T14:09:32.498 [DEBUG] [Thread-117987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:09:32.517 [DEBUG] [Thread-117987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:09:32.518 [INFO] [Thread-117987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] client lang: <none>
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] server lang: <none>
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] kex follows: False
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] Compression: none
2025-12-03T14:09:32.521 [DEBUG] [Thread-117987] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:09:32.538 [DEBUG] [Thread-117987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:09:32.538 [DEBUG] [Thread-117987] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:09:32.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:09:32.539 [DEBUG] [Thread-117987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:09:32.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:09:32.541 [DEBUG] [Thread-117987] [transport.py] [_log()] userauth is OK
2025-12-03T14:09:32.541 [DEBUG] [Thread-117987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:09:32.542 [DEBUG] [Thread-117987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:09:32.542 [DEBUG] [Thread-117987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:09:32.542 [DEBUG] [Thread-117987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:09:32.566 [INFO] [Thread-117987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:09:32.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:09:33.225 [DEBUG] [Thread-117987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:09:33.225 [DEBUG] [Thread-117987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:09:33.225 [DEBUG] [Thread-117987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:09:33.266 [DEBUG] [Thread-117987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:09:33.266 [DEBUG] [Thread-117987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:09:33.268 [DEBUG] [Thread-117987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:09:33.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:09:33.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:09:33.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:09:33.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:09:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:09:33.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:09:33.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:09:33.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:09:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:09:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.505952 -999.00  +21.40  12.83     26   +1.30 1 1 1 1 1   888    0 21.53 50.66 ----- 16.3 12.8 134.8 19.6 30.5 -27.2 30.5 -25.4 31.6 -22.7 32.0 -26.4
2025-12-03T14:09:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:09:33.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:09:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.505952
2025-12-03T14:09:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:09:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:09:33.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:09:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:09:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:09:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:09:04', tmtdew=23.66, humidity=20.32, cloud=0.0, wind=17.45, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:08:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:09:33.293 [DEBUG] [Thread-117987] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:09:33.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:09:33.401 [DEBUG] [Thread-117990] [transport.py] [_log()] starting thread (client mode): 0xa27c8a60
2025-12-03T14:09:33.401 [DEBUG] [Thread-117990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:09:33.416 [DEBUG] [Thread-117990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:09:33.416 [INFO] [Thread-117990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:09:33.423 [DEBUG] [Thread-117990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:09:33.423 [DEBUG] [Thread-117990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] client lang: <none>
2025-12-03T14:09:33.424 [DEBUG] [Thread-117990] [transport.py] [_log()] server lang: <none>
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] kex follows: False
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] Compression: none
2025-12-03T14:09:33.425 [DEBUG] [Thread-117990] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:09:33.482 [DEBUG] [Thread-117990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:09:33.482 [DEBUG] [Thread-117990] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:09:33.483 [DEBUG] [Thread-117990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:09:33.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:09:33.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:09:33.539 [DEBUG] [Thread-117990] [transport.py] [_log()] userauth is OK
2025-12-03T14:09:33.539 [DEBUG] [Thread-117990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:09:33.539 [DEBUG] [Thread-117990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:09:33.539 [DEBUG] [Thread-117990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:09:33.539 [DEBUG] [Thread-117990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:09:33.559 [INFO] [Thread-117990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:09:33.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:09:33.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:09:34.397 [DEBUG] [Thread-117990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:09:34.397 [DEBUG] [Thread-117990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:09:34.445 [DEBUG] [Thread-117990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:09:34.445 [DEBUG] [Thread-117990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:09:34.454 [DEBUG] [Thread-117990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:09:34.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:09:34.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:09:34.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:09:34.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:09:34.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:09:34.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:09:34.489 [DEBUG] [Thread-117990] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:09:46.394 [DEBUG] [Thread-117992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:09:49.753 [DEBUG] [Thread-117993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:01.445 [DEBUG] [Thread-117994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:04.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:10:04.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:10:04.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:10:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 9, 36), 23.02, 21.21, 0.0, 19.94, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:10:05.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:09:36
2025-12-03T14:10:05.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:10:05.458 [DEBUG] [Thread-117995] [transport.py] [_log()] starting thread (client mode): 0xa2751930
2025-12-03T14:10:05.458 [DEBUG] [Thread-117995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:10:05.479 [DEBUG] [Thread-117995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:10:05.479 [INFO] [Thread-117995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] client lang: <none>
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] server lang: <none>
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] kex follows: False
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] Compression: none
2025-12-03T14:10:05.482 [DEBUG] [Thread-117995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:10:05.499 [DEBUG] [Thread-117995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:10:05.499 [DEBUG] [Thread-117995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:10:05.500 [DEBUG] [Thread-117995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:10:05.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:10:05.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:10:05.502 [DEBUG] [Thread-117995] [transport.py] [_log()] userauth is OK
2025-12-03T14:10:05.502 [DEBUG] [Thread-117995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:10:05.502 [DEBUG] [Thread-117995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:10:05.502 [DEBUG] [Thread-117995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:10:05.502 [DEBUG] [Thread-117995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:10:05.520 [INFO] [Thread-117995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:10:05.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:10:06.419 [DEBUG] [Thread-117995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:10:06.419 [DEBUG] [Thread-117995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:10:06.420 [DEBUG] [Thread-117995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:10:06.461 [DEBUG] [Thread-117995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:10:06.461 [DEBUG] [Thread-117995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:10:06.464 [DEBUG] [Thread-117995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:10:06.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:10:06.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:10:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:10:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:10:06.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:10:06.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:10:06.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:10:06.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:10:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:10:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.506646 -999.00  +21.00  15.74     26   +0.90 1 1 1 1 1   888    0 21.50 50.05 ----- 13.5 15.7 117.0 24.1 30.5 -25.8 30.4 -24.3 31.5 -24.5 32.0 -25.5
2025-12-03T14:10:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:10:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:10:06.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.506646
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:10:06.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:09:36', tmtdew=23.02, humidity=21.21, cloud=0.0, wind=19.94, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:09:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:10:06.492 [DEBUG] [Thread-117995] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:10:06.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:10:06.586 [DEBUG] [Thread-117998] [transport.py] [_log()] starting thread (client mode): 0xa27b7b50
2025-12-03T14:10:06.586 [DEBUG] [Thread-117998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:10:06.601 [DEBUG] [Thread-117998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:10:06.602 [INFO] [Thread-117998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:10:06.609 [DEBUG] [Thread-117998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:10:06.609 [DEBUG] [Thread-117998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:10:06.609 [DEBUG] [Thread-117998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] client lang: <none>
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] server lang: <none>
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] kex follows: False
2025-12-03T14:10:06.610 [DEBUG] [Thread-117998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] Compression: none
2025-12-03T14:10:06.611 [DEBUG] [Thread-117998] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:10:06.667 [DEBUG] [Thread-117998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:10:06.668 [DEBUG] [Thread-117998] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:10:06.669 [DEBUG] [Thread-117998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:10:06.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:10:06.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:10:06.723 [DEBUG] [Thread-117998] [transport.py] [_log()] userauth is OK
2025-12-03T14:10:06.723 [DEBUG] [Thread-117998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:10:06.723 [DEBUG] [Thread-117998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:10:06.724 [DEBUG] [Thread-117998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:10:06.724 [DEBUG] [Thread-117998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:10:06.746 [INFO] [Thread-117998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:10:06.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:10:06.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:10:07.613 [DEBUG] [Thread-117998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:10:07.613 [DEBUG] [Thread-117998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:10:07.661 [DEBUG] [Thread-117998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:10:07.661 [DEBUG] [Thread-117998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:10:07.670 [DEBUG] [Thread-117998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:10:07.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:10:07.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:10:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:10:07.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:10:07.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:10:07.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:10:07.706 [DEBUG] [Thread-117998] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:10:16.473 [DEBUG] [Thread-118000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:17.594 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:17.595 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:31.520 [DEBUG] [Thread-118001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:10:37.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:10:37.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:10:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 10, 8), 23.01, 21.25, 0.0, 20.61, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:10:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:10:08
2025-12-03T14:10:38.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:10:38.671 [DEBUG] [Thread-118002] [transport.py] [_log()] starting thread (client mode): 0xa5161270
2025-12-03T14:10:38.671 [DEBUG] [Thread-118002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:10:38.691 [DEBUG] [Thread-118002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:10:38.691 [INFO] [Thread-118002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] client lang: <none>
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] server lang: <none>
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] kex follows: False
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:10:38.695 [DEBUG] [Thread-118002] [transport.py] [_log()] Compression: none
2025-12-03T14:10:38.696 [DEBUG] [Thread-118002] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:10:38.715 [DEBUG] [Thread-118002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:10:38.716 [DEBUG] [Thread-118002] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:10:38.716 [DEBUG] [Thread-118002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:10:38.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:10:38.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:10:38.756 [DEBUG] [Thread-118002] [transport.py] [_log()] userauth is OK
2025-12-03T14:10:38.757 [DEBUG] [Thread-118002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:10:38.757 [DEBUG] [Thread-118002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:10:38.757 [DEBUG] [Thread-118002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:10:38.757 [DEBUG] [Thread-118002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:10:38.792 [INFO] [Thread-118002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:10:38.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:10:39.426 [DEBUG] [Thread-118002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:10:39.427 [DEBUG] [Thread-118002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:10:39.427 [DEBUG] [Thread-118002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:10:39.468 [DEBUG] [Thread-118002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:10:39.468 [DEBUG] [Thread-118002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:10:39.471 [DEBUG] [Thread-118002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:10:39.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:10:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:10:39.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:10:39.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:10:39.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:10:39.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:10:39.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:10:39.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:10:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:10:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.506993 -999.00  +21.00  20.40     26   +0.80 1 1 1 1 1   888    0 21.47 49.70 ----- 21.6 20.4 141.6 25.0 30.3 -25.6 30.3 -24.0 31.3 -23.6 31.9 -26.2
2025-12-03T14:10:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:10:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:10:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.506993
2025-12-03T14:10:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:10:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:10:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:10:39.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:10:39.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:10:39.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:10:08', tmtdew=23.01, humidity=21.25, cloud=0.0, wind=20.61, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:10:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:10:39.497 [DEBUG] [Thread-118002] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:10:39.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:10:39.595 [DEBUG] [Thread-118005] [transport.py] [_log()] starting thread (client mode): 0xa27b6560
2025-12-03T14:10:39.595 [DEBUG] [Thread-118005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:10:39.609 [DEBUG] [Thread-118005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:10:39.609 [INFO] [Thread-118005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] client lang: <none>
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] server lang: <none>
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] kex follows: False
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:10:39.617 [DEBUG] [Thread-118005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:10:39.618 [DEBUG] [Thread-118005] [transport.py] [_log()] Compression: none
2025-12-03T14:10:39.618 [DEBUG] [Thread-118005] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:10:39.678 [DEBUG] [Thread-118005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:10:39.679 [DEBUG] [Thread-118005] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:10:39.679 [DEBUG] [Thread-118005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:10:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:10:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:10:39.735 [DEBUG] [Thread-118005] [transport.py] [_log()] userauth is OK
2025-12-03T14:10:39.735 [DEBUG] [Thread-118005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:10:39.735 [DEBUG] [Thread-118005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:10:39.735 [DEBUG] [Thread-118005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:10:39.735 [DEBUG] [Thread-118005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:10:39.755 [INFO] [Thread-118005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:10:39.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:10:39.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:10:40.613 [DEBUG] [Thread-118005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:10:40.614 [DEBUG] [Thread-118005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:10:40.661 [DEBUG] [Thread-118005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:10:40.662 [DEBUG] [Thread-118005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:10:40.670 [DEBUG] [Thread-118005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:10:40.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:10:40.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:10:40.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:10:40.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:10:40.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:10:40.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:10:40.701 [DEBUG] [Thread-118005] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:10:46.545 [DEBUG] [Thread-118007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:10:49.816 [DEBUG] [Thread-118008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:01.590 [DEBUG] [Thread-118009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:10.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:11:10.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:11:10.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:11:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 10, 40), 23.17, 21.08, 0.0, 21.47, 20.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:11:11.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:10:40
2025-12-03T14:11:11.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:11:11.725 [DEBUG] [Thread-118010] [transport.py] [_log()] starting thread (client mode): 0xa27b6ad0
2025-12-03T14:11:11.725 [DEBUG] [Thread-118010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:11:11.740 [DEBUG] [Thread-118010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:11:11.740 [INFO] [Thread-118010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] client lang: <none>
2025-12-03T14:11:11.743 [DEBUG] [Thread-118010] [transport.py] [_log()] server lang: <none>
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] kex follows: False
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] Compression: none
2025-12-03T14:11:11.744 [DEBUG] [Thread-118010] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:11:11.762 [DEBUG] [Thread-118010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:11:11.762 [DEBUG] [Thread-118010] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:11:11.762 [DEBUG] [Thread-118010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:11:11.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:11:11.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:11:11.763 [DEBUG] [Thread-118010] [transport.py] [_log()] userauth is OK
2025-12-03T14:11:11.763 [DEBUG] [Thread-118010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:11:11.763 [DEBUG] [Thread-118010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:11:11.763 [DEBUG] [Thread-118010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:11:11.763 [DEBUG] [Thread-118010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:11:11.781 [INFO] [Thread-118010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:11:11.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:11:12.436 [DEBUG] [Thread-118010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:11:12.436 [DEBUG] [Thread-118010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:11:12.436 [DEBUG] [Thread-118010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:11:12.477 [DEBUG] [Thread-118010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:11:12.477 [DEBUG] [Thread-118010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:11:12.480 [DEBUG] [Thread-118010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:11:12.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:11:12.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:11:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:11:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:11:12.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:11:12.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:11:12.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.507341 -999.00  +20.90  19.04     26   +0.80 1 1 1 1 1   888    0 21.43 47.43 ----- 15.8 19.0 124.4 22.1 30.3 -25.4 30.2 -24.7 31.2 -23.6 31.6 -25.1
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.507341
2025-12-03T14:11:12.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:11:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:11:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:11:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:11:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:11:12.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:10:40', tmtdew=23.17, humidity=21.08, cloud=0.0, wind=21.47, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:10:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:11:12.500 [DEBUG] [Thread-118010] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:11:12.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:11:12.587 [DEBUG] [Thread-118013] [transport.py] [_log()] starting thread (client mode): 0xa27a3100
2025-12-03T14:11:12.587 [DEBUG] [Thread-118013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:11:12.601 [DEBUG] [Thread-118013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:11:12.601 [INFO] [Thread-118013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] client lang: <none>
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] server lang: <none>
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] kex follows: False
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] Compression: none
2025-12-03T14:11:12.609 [DEBUG] [Thread-118013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:11:12.665 [DEBUG] [Thread-118013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:11:12.666 [DEBUG] [Thread-118013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:11:12.666 [DEBUG] [Thread-118013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:11:12.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:11:12.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:11:12.723 [DEBUG] [Thread-118013] [transport.py] [_log()] userauth is OK
2025-12-03T14:11:12.723 [DEBUG] [Thread-118013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:11:12.723 [DEBUG] [Thread-118013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:11:12.723 [DEBUG] [Thread-118013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:11:12.723 [DEBUG] [Thread-118013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:11:12.737 [INFO] [Thread-118013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:11:12.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:11:12.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:11:13.516 [DEBUG] [Thread-118013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:11:13.516 [DEBUG] [Thread-118013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:11:13.563 [DEBUG] [Thread-118013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:11:13.563 [DEBUG] [Thread-118013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:11:13.571 [DEBUG] [Thread-118013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:11:13.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:11:13.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:11:13.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:11:13.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:11:13.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:11:13.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:11:13.606 [DEBUG] [Thread-118013] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:11:16.619 [DEBUG] [Thread-118015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:17.745 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:17.746 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:31.666 [DEBUG] [Thread-118016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:11:43.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:11:43.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:11:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 11, 12), 23.06, 21.21, 0.0, 19.67, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:11:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:11:12
2025-12-03T14:11:44.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:11:44.587 [DEBUG] [Thread-118017] [transport.py] [_log()] starting thread (client mode): 0xa27521a0
2025-12-03T14:11:44.587 [DEBUG] [Thread-118017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:11:44.608 [DEBUG] [Thread-118017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:11:44.609 [INFO] [Thread-118017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:44.612 [DEBUG] [Thread-118017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] client lang: <none>
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] server lang: <none>
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] kex follows: False
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] Compression: none
2025-12-03T14:11:44.613 [DEBUG] [Thread-118017] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:11:44.632 [DEBUG] [Thread-118017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:11:44.632 [DEBUG] [Thread-118017] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:11:44.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:11:44.633 [DEBUG] [Thread-118017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:11:44.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:11:44.635 [DEBUG] [Thread-118017] [transport.py] [_log()] userauth is OK
2025-12-03T14:11:44.635 [DEBUG] [Thread-118017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:11:44.635 [DEBUG] [Thread-118017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:11:44.635 [DEBUG] [Thread-118017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:11:44.635 [DEBUG] [Thread-118017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:11:44.651 [INFO] [Thread-118017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:11:44.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:11:45.300 [DEBUG] [Thread-118017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:11:45.301 [DEBUG] [Thread-118017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:11:45.301 [DEBUG] [Thread-118017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:11:45.343 [DEBUG] [Thread-118017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:11:45.343 [DEBUG] [Thread-118017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:11:45.345 [DEBUG] [Thread-118017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:11:45.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:11:45.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:11:45.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:11:45.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:11:45.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:11:45.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:11:45.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.507688 -999.00  +20.90  18.08     25   +0.60 1 1 1 1 1   888    0 21.50 46.01 ----- 15.0 18.1 123.6 21.4 30.1 -25.3 30.1 -23.2 31.2 -24.1 31.7 -26.4
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.507688
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:11:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:11:12', tmtdew=23.06, humidity=21.21, cloud=0.0, wind=19.67, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:11:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:11:45.366 [DEBUG] [Thread-118017] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:11:45.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:11:45.452 [DEBUG] [Thread-118020] [transport.py] [_log()] starting thread (client mode): 0xa517e110
2025-12-03T14:11:45.452 [DEBUG] [Thread-118020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:11:45.467 [DEBUG] [Thread-118020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:11:45.467 [INFO] [Thread-118020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] client lang: <none>
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] server lang: <none>
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] kex follows: False
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:11:45.474 [DEBUG] [Thread-118020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:11:45.475 [DEBUG] [Thread-118020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:11:45.475 [DEBUG] [Thread-118020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:11:45.475 [DEBUG] [Thread-118020] [transport.py] [_log()] Compression: none
2025-12-03T14:11:45.475 [DEBUG] [Thread-118020] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:11:45.529 [DEBUG] [Thread-118020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:11:45.530 [DEBUG] [Thread-118020] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:11:45.530 [DEBUG] [Thread-118020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:11:45.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:11:45.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:11:45.587 [DEBUG] [Thread-118020] [transport.py] [_log()] userauth is OK
2025-12-03T14:11:45.587 [DEBUG] [Thread-118020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:11:45.587 [DEBUG] [Thread-118020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:11:45.587 [DEBUG] [Thread-118020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:11:45.587 [DEBUG] [Thread-118020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:11:45.604 [INFO] [Thread-118020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:11:45.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:11:45.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:11:46.400 [DEBUG] [Thread-118020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:11:46.400 [DEBUG] [Thread-118020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:11:46.447 [DEBUG] [Thread-118020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:11:46.447 [DEBUG] [Thread-118020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:11:46.456 [DEBUG] [Thread-118020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:11:46.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:11:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:11:46.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:11:46.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:11:46.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:11:46.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:11:46.488 [DEBUG] [Thread-118020] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:11:46.694 [DEBUG] [Thread-118022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:11:49.846 [DEBUG] [Thread-118023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:01.735 [DEBUG] [Thread-118024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:16.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:12:16.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:12:16.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:12:16.760 [DEBUG] [Thread-118025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 11, 44), 22.85, 21.36, 0.0, 15.19, 20.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:12:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:11:44
2025-12-03T14:12:17.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:12:17.534 [DEBUG] [Thread-118026] [transport.py] [_log()] starting thread (client mode): 0xa27b62f0
2025-12-03T14:12:17.534 [DEBUG] [Thread-118026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:12:17.553 [DEBUG] [Thread-118026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:12:17.553 [INFO] [Thread-118026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] client lang: <none>
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] server lang: <none>
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] kex follows: False
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] Compression: none
2025-12-03T14:12:17.557 [DEBUG] [Thread-118026] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:12:17.571 [DEBUG] [Thread-118026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:12:17.572 [DEBUG] [Thread-118026] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:12:17.572 [DEBUG] [Thread-118026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:12:17.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:12:17.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:12:17.573 [DEBUG] [Thread-118026] [transport.py] [_log()] userauth is OK
2025-12-03T14:12:17.573 [DEBUG] [Thread-118026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:12:17.573 [DEBUG] [Thread-118026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:12:17.573 [DEBUG] [Thread-118026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:12:17.573 [DEBUG] [Thread-118026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:12:17.591 [INFO] [Thread-118026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:12:17.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:12:17.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:17.885 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:18.233 [DEBUG] [Thread-118026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:12:18.233 [DEBUG] [Thread-118026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:12:18.233 [DEBUG] [Thread-118026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:12:18.274 [DEBUG] [Thread-118026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:12:18.274 [DEBUG] [Thread-118026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:12:18.277 [DEBUG] [Thread-118026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:12:18.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:12:18.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:12:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:12:18.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:12:18.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:12:18.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.508035 -999.00  +20.90  14.60     26   +1.10 1 1 1 1 1   888    0 21.48 47.77 ----- 14.4 14.6 111.2 21.0 30.0 -24.7 30.2 -24.2 31.1 -23.0 31.5 -25.4
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:12:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.508035
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:12:18.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:11:44', tmtdew=22.85, humidity=21.36, cloud=0.0, wind=15.19, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:11:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:12:18.295 [DEBUG] [Thread-118026] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:12:18.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:12:18.380 [DEBUG] [Thread-118029] [transport.py] [_log()] starting thread (client mode): 0xa27b5300
2025-12-03T14:12:18.380 [DEBUG] [Thread-118029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:12:18.394 [DEBUG] [Thread-118029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:12:18.394 [INFO] [Thread-118029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:12:18.401 [DEBUG] [Thread-118029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] client lang: <none>
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] server lang: <none>
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] kex follows: False
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] Compression: none
2025-12-03T14:12:18.402 [DEBUG] [Thread-118029] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:12:18.457 [DEBUG] [Thread-118029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:12:18.457 [DEBUG] [Thread-118029] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:12:18.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:12:18.458 [DEBUG] [Thread-118029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:12:18.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:12:18.515 [DEBUG] [Thread-118029] [transport.py] [_log()] userauth is OK
2025-12-03T14:12:18.515 [DEBUG] [Thread-118029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:12:18.515 [DEBUG] [Thread-118029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:12:18.515 [DEBUG] [Thread-118029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:12:18.515 [DEBUG] [Thread-118029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:12:18.529 [INFO] [Thread-118029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:12:18.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:12:18.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:12:19.352 [DEBUG] [Thread-118029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:12:19.352 [DEBUG] [Thread-118029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:12:19.400 [DEBUG] [Thread-118029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:12:19.400 [DEBUG] [Thread-118029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:12:19.409 [DEBUG] [Thread-118029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:12:19.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:12:19.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:12:19.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:12:19.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:12:19.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:12:19.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:12:19.444 [DEBUG] [Thread-118029] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:12:31.785 [DEBUG] [Thread-118031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:46.821 [DEBUG] [Thread-118032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:49.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:12:49.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:12:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:12:49.882 [DEBUG] [Thread-118033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:12:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 12, 16), 22.91, 21.28, 0.0, 14.05, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:12:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:12:16
2025-12-03T14:12:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:12:50.485 [DEBUG] [Thread-118034] [transport.py] [_log()] starting thread (client mode): 0xa517d450
2025-12-03T14:12:50.485 [DEBUG] [Thread-118034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:12:50.506 [DEBUG] [Thread-118034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:12:50.507 [INFO] [Thread-118034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:50.510 [DEBUG] [Thread-118034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] client lang: <none>
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] server lang: <none>
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] kex follows: False
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] Compression: none
2025-12-03T14:12:50.511 [DEBUG] [Thread-118034] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:12:50.525 [DEBUG] [Thread-118034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:12:50.525 [DEBUG] [Thread-118034] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:12:50.525 [DEBUG] [Thread-118034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:12:50.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:12:50.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:12:50.526 [DEBUG] [Thread-118034] [transport.py] [_log()] userauth is OK
2025-12-03T14:12:50.526 [DEBUG] [Thread-118034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:12:50.526 [DEBUG] [Thread-118034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:12:50.526 [DEBUG] [Thread-118034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:12:50.526 [DEBUG] [Thread-118034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:12:50.544 [INFO] [Thread-118034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:12:50.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:12:51.152 [DEBUG] [Thread-118034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:12:51.152 [DEBUG] [Thread-118034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:12:51.153 [DEBUG] [Thread-118034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:12:51.193 [DEBUG] [Thread-118034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:12:51.193 [DEBUG] [Thread-118034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:12:51.196 [DEBUG] [Thread-118034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:12:51.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:12:51.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:12:51.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:12:51.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:12:51.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:12:51.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:12:51.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.508383 -999.00  +20.70  10.38     26   +0.80 1 1 1 1 1   888    0 21.53 53.17 ----- 10.3 10.4 114.8 18.0 29.4 -27.4 30.0 -24.1 30.9 -23.1 31.3 -25.6
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:12:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.508383
2025-12-03T14:12:51.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:12:51.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:12:51.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:12:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:12:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:12:51.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:12:16', tmtdew=22.91, humidity=21.28, cloud=0.0, wind=14.05, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:12:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:12:51.222 [DEBUG] [Thread-118034] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:12:51.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:12:51.327 [DEBUG] [Thread-118037] [transport.py] [_log()] starting thread (client mode): 0xa2753d90
2025-12-03T14:12:51.327 [DEBUG] [Thread-118037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:12:51.342 [DEBUG] [Thread-118037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:12:51.342 [INFO] [Thread-118037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:12:51.349 [DEBUG] [Thread-118037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:12:51.349 [DEBUG] [Thread-118037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:12:51.349 [DEBUG] [Thread-118037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] client lang: <none>
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] server lang: <none>
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] kex follows: False
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] Compression: none
2025-12-03T14:12:51.350 [DEBUG] [Thread-118037] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:12:51.407 [DEBUG] [Thread-118037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:12:51.407 [DEBUG] [Thread-118037] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:12:51.408 [DEBUG] [Thread-118037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:12:51.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:12:51.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:12:51.463 [DEBUG] [Thread-118037] [transport.py] [_log()] userauth is OK
2025-12-03T14:12:51.463 [DEBUG] [Thread-118037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:12:51.463 [DEBUG] [Thread-118037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:12:51.463 [DEBUG] [Thread-118037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:12:51.463 [DEBUG] [Thread-118037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:12:51.481 [INFO] [Thread-118037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:12:51.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:12:51.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:12:52.310 [DEBUG] [Thread-118037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:12:52.310 [DEBUG] [Thread-118037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:12:52.359 [DEBUG] [Thread-118037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:12:52.359 [DEBUG] [Thread-118037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:12:52.368 [DEBUG] [Thread-118037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:12:52.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:12:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:12:52.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:12:52.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:12:52.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:12:52.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:12:52.403 [DEBUG] [Thread-118037] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:13:01.846 [DEBUG] [Thread-118039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:16.893 [DEBUG] [Thread-118040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:18.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:18.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:13:22.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:13:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:13:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 12, 48), 22.68, 21.38, 0.0, 14.45, 20.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:13:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:12:48
2025-12-03T14:13:23.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:13:23.388 [DEBUG] [Thread-118041] [transport.py] [_log()] starting thread (client mode): 0xa27a2620
2025-12-03T14:13:23.388 [DEBUG] [Thread-118041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:13:23.409 [DEBUG] [Thread-118041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:13:23.409 [INFO] [Thread-118041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:13:23.412 [DEBUG] [Thread-118041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] client lang: <none>
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] server lang: <none>
2025-12-03T14:13:23.413 [DEBUG] [Thread-118041] [transport.py] [_log()] kex follows: False
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] Compression: none
2025-12-03T14:13:23.414 [DEBUG] [Thread-118041] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:13:23.431 [DEBUG] [Thread-118041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:13:23.432 [DEBUG] [Thread-118041] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:13:23.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:13:23.433 [DEBUG] [Thread-118041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:13:23.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:13:23.434 [DEBUG] [Thread-118041] [transport.py] [_log()] userauth is OK
2025-12-03T14:13:23.435 [DEBUG] [Thread-118041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:13:23.435 [DEBUG] [Thread-118041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:13:23.435 [DEBUG] [Thread-118041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:13:23.435 [DEBUG] [Thread-118041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:13:23.461 [INFO] [Thread-118041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:13:23.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:13:24.110 [DEBUG] [Thread-118041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:13:24.110 [DEBUG] [Thread-118041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:13:24.111 [DEBUG] [Thread-118041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:13:24.151 [DEBUG] [Thread-118041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:13:24.151 [DEBUG] [Thread-118041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:13:24.154 [DEBUG] [Thread-118041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:13:24.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:13:24.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:13:24.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:13:24.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:13:24.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:13:24.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:13:24.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:13:24.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.508730 -999.00  +20.80  12.90     26   +0.70 1 2 1 1 1   888    0 21.77 50.81 ----- 10.4 12.9 123.6 15.5 29.7 -23.9 30.0 -23.1 30.9 -22.3 31.3 -24.9
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.508730
2025-12-03T14:13:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:13:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:13:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:13:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:13:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:13:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:12:48', tmtdew=22.68, humidity=21.38, cloud=0.0, wind=14.45, temperature=20.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:12:34.272', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:13:24.182 [DEBUG] [Thread-118041] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:13:24.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:13:24.275 [DEBUG] [Thread-118044] [transport.py] [_log()] starting thread (client mode): 0xa2752680
2025-12-03T14:13:24.276 [DEBUG] [Thread-118044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:13:24.289 [DEBUG] [Thread-118044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:13:24.290 [INFO] [Thread-118044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:13:24.297 [DEBUG] [Thread-118044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:13:24.297 [DEBUG] [Thread-118044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:13:24.297 [DEBUG] [Thread-118044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:13:24.297 [DEBUG] [Thread-118044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] client lang: <none>
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] server lang: <none>
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] kex follows: False
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:13:24.298 [DEBUG] [Thread-118044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:13:24.299 [DEBUG] [Thread-118044] [transport.py] [_log()] Compression: none
2025-12-03T14:13:24.299 [DEBUG] [Thread-118044] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:13:24.355 [DEBUG] [Thread-118044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:13:24.355 [DEBUG] [Thread-118044] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:13:24.356 [DEBUG] [Thread-118044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:13:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:13:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:13:24.411 [DEBUG] [Thread-118044] [transport.py] [_log()] userauth is OK
2025-12-03T14:13:24.411 [DEBUG] [Thread-118044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:13:24.411 [DEBUG] [Thread-118044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:13:24.412 [DEBUG] [Thread-118044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:13:24.412 [DEBUG] [Thread-118044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:13:24.431 [INFO] [Thread-118044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:13:24.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:13:24.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:13:25.277 [DEBUG] [Thread-118044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:13:25.277 [DEBUG] [Thread-118044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:13:25.326 [DEBUG] [Thread-118044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:13:25.326 [DEBUG] [Thread-118044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:13:25.335 [DEBUG] [Thread-118044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:13:25.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:13:25.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:13:25.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:13:25.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:13:25.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:13:25.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:13:25.369 [DEBUG] [Thread-118044] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:13:31.924 [DEBUG] [Thread-118046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:46.966 [DEBUG] [Thread-118047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:49.916 [DEBUG] [Thread-118048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:13:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:13:55.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:13:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:13:56.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 13, 52), 22.61, 21.54, 0.0, 12.71, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:13:56.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:13:52
2025-12-03T14:13:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:13:56.375 [DEBUG] [Thread-118049] [transport.py] [_log()] starting thread (client mode): 0xa27a1480
2025-12-03T14:13:56.376 [DEBUG] [Thread-118049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:13:56.395 [DEBUG] [Thread-118049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:13:56.395 [INFO] [Thread-118049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:13:56.398 [DEBUG] [Thread-118049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] client lang: <none>
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] server lang: <none>
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] kex follows: False
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] Compression: none
2025-12-03T14:13:56.399 [DEBUG] [Thread-118049] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:13:56.407 [DEBUG] [Thread-118049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:13:56.407 [DEBUG] [Thread-118049] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:13:56.407 [DEBUG] [Thread-118049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:13:56.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:13:56.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:13:56.408 [DEBUG] [Thread-118049] [transport.py] [_log()] userauth is OK
2025-12-03T14:13:56.408 [DEBUG] [Thread-118049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:13:56.408 [DEBUG] [Thread-118049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:13:56.409 [DEBUG] [Thread-118049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:13:56.409 [DEBUG] [Thread-118049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:13:56.423 [INFO] [Thread-118049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:13:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:13:57.057 [DEBUG] [Thread-118049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:13:57.058 [DEBUG] [Thread-118049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:13:57.058 [DEBUG] [Thread-118049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:13:57.099 [DEBUG] [Thread-118049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:13:57.099 [DEBUG] [Thread-118049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:13:57.102 [DEBUG] [Thread-118049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:13:57.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:13:57.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:13:57.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:13:57.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:13:57.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:13:57.123 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:13:57.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.509077 -999.00  +21.10  11.05     26   +1.20 1 2 1 1 1   888    0 21.46 47.02 ----- 9.8 11.1 127.6 14.6 29.8 -23.4 30.1 -21.8 31.1 -22.0 31.4 -23.7
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:13:57.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.509077
2025-12-03T14:13:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:13:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:13:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:13:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:13:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:13:57.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:13:52', tmtdew=22.61, humidity=21.54, cloud=0.0, wind=12.71, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:13:04.253', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:13:57.126 [DEBUG] [Thread-118049] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:13:57.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:13:57.222 [DEBUG] [Thread-118052] [transport.py] [_log()] starting thread (client mode): 0xa51cfcd0
2025-12-03T14:13:57.222 [DEBUG] [Thread-118052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:13:57.236 [DEBUG] [Thread-118052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:13:57.236 [INFO] [Thread-118052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:13:57.244 [DEBUG] [Thread-118052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:13:57.244 [DEBUG] [Thread-118052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:13:57.244 [DEBUG] [Thread-118052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:13:57.244 [DEBUG] [Thread-118052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:57.244 [DEBUG] [Thread-118052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] client lang: <none>
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] server lang: <none>
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] kex follows: False
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:13:57.245 [DEBUG] [Thread-118052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:13:57.246 [DEBUG] [Thread-118052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:13:57.246 [DEBUG] [Thread-118052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:13:57.246 [DEBUG] [Thread-118052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:13:57.246 [DEBUG] [Thread-118052] [transport.py] [_log()] Compression: none
2025-12-03T14:13:57.246 [DEBUG] [Thread-118052] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:13:57.303 [DEBUG] [Thread-118052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:13:57.304 [DEBUG] [Thread-118052] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:13:57.305 [DEBUG] [Thread-118052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:13:57.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:13:57.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:13:57.359 [DEBUG] [Thread-118052] [transport.py] [_log()] userauth is OK
2025-12-03T14:13:57.359 [DEBUG] [Thread-118052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:13:57.360 [DEBUG] [Thread-118052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:13:57.360 [DEBUG] [Thread-118052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:13:57.360 [DEBUG] [Thread-118052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:13:57.381 [INFO] [Thread-118052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:13:57.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:13:57.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:13:58.207 [DEBUG] [Thread-118052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:13:58.207 [DEBUG] [Thread-118052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:13:58.255 [DEBUG] [Thread-118052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:13:58.255 [DEBUG] [Thread-118052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:13:58.264 [DEBUG] [Thread-118052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:13:58.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:13:58.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:13:58.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:13:58.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:13:58.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:13:58.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:13:58.299 [DEBUG] [Thread-118052] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:14:01.991 [DEBUG] [Thread-118054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:17.034 [DEBUG] [Thread-118055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:18.162 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:18.163 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:14:28.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:14:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:14:28.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 14, 24), 22.58, 21.58, 0.0, 12.05, 20.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:14:28.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:14:24
2025-12-03T14:14:29.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:14:29.275 [DEBUG] [Thread-118056] [transport.py] [_log()] starting thread (client mode): 0xa2753430
2025-12-03T14:14:29.275 [DEBUG] [Thread-118056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:14:29.296 [DEBUG] [Thread-118056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:14:29.296 [INFO] [Thread-118056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] client lang: <none>
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] server lang: <none>
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] kex follows: False
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:14:29.299 [DEBUG] [Thread-118056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:14:29.300 [DEBUG] [Thread-118056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:14:29.300 [DEBUG] [Thread-118056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:14:29.300 [DEBUG] [Thread-118056] [transport.py] [_log()] Compression: none
2025-12-03T14:14:29.300 [DEBUG] [Thread-118056] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:14:29.316 [DEBUG] [Thread-118056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:14:29.317 [DEBUG] [Thread-118056] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:14:29.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:14:29.318 [DEBUG] [Thread-118056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:14:29.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:14:29.319 [DEBUG] [Thread-118056] [transport.py] [_log()] userauth is OK
2025-12-03T14:14:29.319 [DEBUG] [Thread-118056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:14:29.319 [DEBUG] [Thread-118056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:14:29.320 [DEBUG] [Thread-118056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:14:29.320 [DEBUG] [Thread-118056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:14:29.354 [INFO] [Thread-118056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:14:29.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:14:29.997 [DEBUG] [Thread-118056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:14:29.998 [DEBUG] [Thread-118056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:14:29.998 [DEBUG] [Thread-118056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:14:30.039 [DEBUG] [Thread-118056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:14:30.039 [DEBUG] [Thread-118056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:14:30.042 [DEBUG] [Thread-118056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:14:30.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:14:30.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:14:30.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:14:30.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:14:30.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:14:30.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:14:30.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:14:30.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.509424 -999.00  +21.70   7.88     25   +1.10 1 2 1 1 1   888    0 21.25 46.15 ----- 6.6 7.9 140.8 12.1 30.0 -22.3 30.2 -21.6 31.3 -21.0 31.6 -21.9
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.509424
2025-12-03T14:14:30.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:14:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:14:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:14:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:14:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:14:30.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:14:24', tmtdew=22.58, humidity=21.58, cloud=0.0, wind=12.05, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:13:34.234', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:14:30.067 [DEBUG] [Thread-118056] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:14:30.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:14:30.170 [DEBUG] [Thread-118059] [transport.py] [_log()] starting thread (client mode): 0xa2744490
2025-12-03T14:14:30.170 [DEBUG] [Thread-118059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:14:30.185 [DEBUG] [Thread-118059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:14:30.185 [INFO] [Thread-118059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] client lang: <none>
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] server lang: <none>
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] kex follows: False
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] Compression: none
2025-12-03T14:14:30.193 [DEBUG] [Thread-118059] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:14:30.251 [DEBUG] [Thread-118059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:14:30.252 [DEBUG] [Thread-118059] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:14:30.252 [DEBUG] [Thread-118059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:14:30.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:14:30.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:14:30.313 [DEBUG] [Thread-118059] [transport.py] [_log()] userauth is OK
2025-12-03T14:14:30.313 [DEBUG] [Thread-118059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:14:30.313 [DEBUG] [Thread-118059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:14:30.313 [DEBUG] [Thread-118059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:14:30.314 [DEBUG] [Thread-118059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:14:30.333 [INFO] [Thread-118059] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:14:30.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:14:30.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:14:31.183 [DEBUG] [Thread-118059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:14:31.184 [DEBUG] [Thread-118059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:14:31.232 [DEBUG] [Thread-118059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:14:31.232 [DEBUG] [Thread-118059] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:14:31.241 [DEBUG] [Thread-118059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:14:31.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:14:31.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:14:31.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:14:31.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:14:31.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:14:31.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:14:31.276 [DEBUG] [Thread-118059] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:14:32.067 [DEBUG] [Thread-118061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:47.116 [DEBUG] [Thread-118062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:14:49.973 [DEBUG] [Thread-118063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:15:01.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:15:01.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:15:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 14, 56), 22.64, 21.71, 0.0, 10.23, 20.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:15:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:14:56
2025-12-03T14:15:02.145 [DEBUG] [Thread-118064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:15:02.365 [DEBUG] [Thread-118065] [transport.py] [_log()] starting thread (client mode): 0xa2744550
2025-12-03T14:15:02.365 [DEBUG] [Thread-118065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:15:02.386 [DEBUG] [Thread-118065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:15:02.386 [INFO] [Thread-118065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:15:02.389 [DEBUG] [Thread-118065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:15:02.389 [DEBUG] [Thread-118065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:15:02.389 [DEBUG] [Thread-118065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:15:02.389 [DEBUG] [Thread-118065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] client lang: <none>
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] server lang: <none>
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] kex follows: False
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] Compression: none
2025-12-03T14:15:02.390 [DEBUG] [Thread-118065] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:15:02.404 [DEBUG] [Thread-118065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:15:02.404 [DEBUG] [Thread-118065] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:15:02.404 [DEBUG] [Thread-118065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:15:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:15:02.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:15:02.405 [DEBUG] [Thread-118065] [transport.py] [_log()] userauth is OK
2025-12-03T14:15:02.405 [DEBUG] [Thread-118065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:15:02.405 [DEBUG] [Thread-118065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:15:02.405 [DEBUG] [Thread-118065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:15:02.405 [DEBUG] [Thread-118065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:15:02.415 [INFO] [Thread-118065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:15:02.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:15:03.100 [DEBUG] [Thread-118065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:15:03.100 [DEBUG] [Thread-118065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:15:03.101 [DEBUG] [Thread-118065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:15:03.141 [DEBUG] [Thread-118065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:15:03.141 [DEBUG] [Thread-118065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:15:03.144 [DEBUG] [Thread-118065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:15:03.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:15:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:15:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:15:03.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:15:03.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:15:03.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:15:03.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.509771 -999.00  +21.60  10.27     25   +1.00 1 2 1 1 1   888    0 21.47 48.49 ----- 11.9 10.3 141.0 13.5 30.1 -22.9 30.2 -22.3 31.1 -22.1 31.5 -24.5
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.509771
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:15:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:15:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:14:56', tmtdew=22.64, humidity=21.71, cloud=0.0, wind=10.23, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:14:04.214', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:15:03.161 [DEBUG] [Thread-118065] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:15:03.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:15:03.247 [DEBUG] [Thread-118068] [transport.py] [_log()] starting thread (client mode): 0xa51cf910
2025-12-03T14:15:03.247 [DEBUG] [Thread-118068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:15:03.263 [DEBUG] [Thread-118068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:15:03.264 [INFO] [Thread-118068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] client lang: <none>
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] server lang: <none>
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] kex follows: False
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] Compression: none
2025-12-03T14:15:03.271 [DEBUG] [Thread-118068] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:15:03.333 [DEBUG] [Thread-118068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:15:03.333 [DEBUG] [Thread-118068] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:15:03.333 [DEBUG] [Thread-118068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:15:03.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:15:03.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:15:03.391 [DEBUG] [Thread-118068] [transport.py] [_log()] userauth is OK
2025-12-03T14:15:03.391 [DEBUG] [Thread-118068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:15:03.391 [DEBUG] [Thread-118068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:15:03.391 [DEBUG] [Thread-118068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:15:03.391 [DEBUG] [Thread-118068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:15:03.405 [INFO] [Thread-118068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:15:03.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:15:03.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:15:04.236 [DEBUG] [Thread-118068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:15:04.236 [DEBUG] [Thread-118068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:15:04.284 [DEBUG] [Thread-118068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:15:04.284 [DEBUG] [Thread-118068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:15:04.292 [DEBUG] [Thread-118068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:15:04.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:15:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:15:04.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:15:04.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:15:04.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:15:04.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:15:04.325 [DEBUG] [Thread-118068] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:15:17.173 [DEBUG] [Thread-118070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:18.306 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:18.307 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:32.220 [DEBUG] [Thread-118071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:15:34.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:15:34.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:15:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 15, 28), 22.69, 21.64, 0.0, 7.64, 20.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:15:35.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:15:28
2025-12-03T14:15:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:15:35.307 [DEBUG] [Thread-118072] [transport.py] [_log()] starting thread (client mode): 0xa2745330
2025-12-03T14:15:35.307 [DEBUG] [Thread-118072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:15:35.327 [DEBUG] [Thread-118072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:15:35.327 [INFO] [Thread-118072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] client lang: <none>
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] server lang: <none>
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] kex follows: False
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:15:35.330 [DEBUG] [Thread-118072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:15:35.331 [DEBUG] [Thread-118072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:15:35.331 [DEBUG] [Thread-118072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:15:35.331 [DEBUG] [Thread-118072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:15:35.331 [DEBUG] [Thread-118072] [transport.py] [_log()] Compression: none
2025-12-03T14:15:35.331 [DEBUG] [Thread-118072] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:15:35.347 [DEBUG] [Thread-118072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:15:35.347 [DEBUG] [Thread-118072] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:15:35.348 [DEBUG] [Thread-118072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:15:35.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:15:35.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:15:35.350 [DEBUG] [Thread-118072] [transport.py] [_log()] userauth is OK
2025-12-03T14:15:35.350 [DEBUG] [Thread-118072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:15:35.350 [DEBUG] [Thread-118072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:15:35.350 [DEBUG] [Thread-118072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:15:35.350 [DEBUG] [Thread-118072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:15:35.373 [INFO] [Thread-118072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:15:35.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:15:36.012 [DEBUG] [Thread-118072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:15:36.012 [DEBUG] [Thread-118072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:15:36.013 [DEBUG] [Thread-118072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:15:36.054 [DEBUG] [Thread-118072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:15:36.054 [DEBUG] [Thread-118072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:15:36.057 [DEBUG] [Thread-118072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:15:36.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:15:36.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:15:36.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:15:36.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:15:36.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:15:36.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:15:36.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:15:36.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.510466 -999.00  +21.50   5.16     25   +1.20 1 2 1 1 1   888    0 21.54 42.86 ----- 6.6 5.2 165.5 6.8 30.3 -22.7 30.2 -22.2 31.3 -21.1 31.6 -23.8
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.510466
2025-12-03T14:15:36.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:15:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:15:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:15:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:15:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:15:36.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:15:28', tmtdew=22.69, humidity=21.64, cloud=0.0, wind=7.64, temperature=20.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:15:04.262', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:15:36.078 [DEBUG] [Thread-118072] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:15:36.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:15:36.180 [DEBUG] [Thread-118075] [transport.py] [_log()] starting thread (client mode): 0xa2747190
2025-12-03T14:15:36.180 [DEBUG] [Thread-118075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:15:36.195 [DEBUG] [Thread-118075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:15:36.195 [INFO] [Thread-118075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:36.202 [DEBUG] [Thread-118075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] client lang: <none>
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] server lang: <none>
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] kex follows: False
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] Compression: none
2025-12-03T14:15:36.203 [DEBUG] [Thread-118075] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:15:36.259 [DEBUG] [Thread-118075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:15:36.259 [DEBUG] [Thread-118075] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:15:36.260 [DEBUG] [Thread-118075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:15:36.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:15:36.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:15:36.315 [DEBUG] [Thread-118075] [transport.py] [_log()] userauth is OK
2025-12-03T14:15:36.316 [DEBUG] [Thread-118075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:15:36.316 [DEBUG] [Thread-118075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:15:36.316 [DEBUG] [Thread-118075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:15:36.316 [DEBUG] [Thread-118075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:15:36.334 [INFO] [Thread-118075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:15:36.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:15:36.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:15:37.139 [DEBUG] [Thread-118075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:15:37.140 [DEBUG] [Thread-118075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:15:37.188 [DEBUG] [Thread-118075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:15:37.188 [DEBUG] [Thread-118075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:15:37.197 [DEBUG] [Thread-118075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:15:37.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:15:37.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:15:37.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:15:37.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:15:37.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:15:37.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:15:37.231 [DEBUG] [Thread-118075] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:15:47.248 [DEBUG] [Thread-118077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:15:50.015 [DEBUG] [Thread-118078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:02.289 [DEBUG] [Thread-118079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:16:07.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:16:07.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:16:07.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 16), 22.58, 21.74, 0.0, 7.62, 20.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:16:07.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:16:00
2025-12-03T14:16:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:16:08.212 [DEBUG] [Thread-118080] [transport.py] [_log()] starting thread (client mode): 0xa27465f0
2025-12-03T14:16:08.212 [DEBUG] [Thread-118080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:16:08.233 [DEBUG] [Thread-118080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:16:08.233 [INFO] [Thread-118080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] client lang: <none>
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] server lang: <none>
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] kex follows: False
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] Compression: none
2025-12-03T14:16:08.236 [DEBUG] [Thread-118080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:16:08.253 [DEBUG] [Thread-118080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:16:08.253 [DEBUG] [Thread-118080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:16:08.254 [DEBUG] [Thread-118080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:16:08.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:16:08.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:16:08.255 [DEBUG] [Thread-118080] [transport.py] [_log()] userauth is OK
2025-12-03T14:16:08.256 [DEBUG] [Thread-118080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:16:08.256 [DEBUG] [Thread-118080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:16:08.256 [DEBUG] [Thread-118080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:16:08.256 [DEBUG] [Thread-118080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:16:08.273 [INFO] [Thread-118080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:16:08.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:16:08.943 [DEBUG] [Thread-118080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:16:08.944 [DEBUG] [Thread-118080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:16:08.944 [DEBUG] [Thread-118080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:16:08.985 [DEBUG] [Thread-118080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:16:08.985 [DEBUG] [Thread-118080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:16:08.988 [DEBUG] [Thread-118080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:16:08.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:16:09.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:16:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:16:09.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:16:09.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:16:09.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:16:09.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:16:09.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.510813 -999.00  +21.30   7.24     25   +0.70 1 2 1 1 1   888    0 21.32 44.67 ----- 5.9 7.2 170.1 12.2 30.4 -23.6 30.2 -22.4 31.0 -23.4 31.6 -24.9
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.510813
2025-12-03T14:16:09.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:16:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:16:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:16:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:16:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:16:09.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:16:00', tmtdew=22.58, humidity=21.74, cloud=0.0, wind=7.62, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:15:34.243', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:16:09.012 [DEBUG] [Thread-118080] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:16:09.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:16:09.099 [DEBUG] [Thread-118083] [transport.py] [_log()] starting thread (client mode): 0xa2745de0
2025-12-03T14:16:09.099 [DEBUG] [Thread-118083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:16:09.114 [DEBUG] [Thread-118083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:16:09.114 [INFO] [Thread-118083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:16:09.121 [DEBUG] [Thread-118083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:16:09.122 [DEBUG] [Thread-118083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] client lang: <none>
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] server lang: <none>
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] kex follows: False
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:16:09.123 [DEBUG] [Thread-118083] [transport.py] [_log()] Compression: none
2025-12-03T14:16:09.124 [DEBUG] [Thread-118083] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:16:09.180 [DEBUG] [Thread-118083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:16:09.180 [DEBUG] [Thread-118083] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:16:09.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:16:09.181 [DEBUG] [Thread-118083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:16:09.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:16:09.235 [DEBUG] [Thread-118083] [transport.py] [_log()] userauth is OK
2025-12-03T14:16:09.236 [DEBUG] [Thread-118083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:16:09.236 [DEBUG] [Thread-118083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:16:09.236 [DEBUG] [Thread-118083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:16:09.236 [DEBUG] [Thread-118083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:16:09.257 [INFO] [Thread-118083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:16:09.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:16:09.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:16:10.137 [DEBUG] [Thread-118083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:16:10.137 [DEBUG] [Thread-118083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:16:10.185 [DEBUG] [Thread-118083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:16:10.185 [DEBUG] [Thread-118083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:16:10.194 [DEBUG] [Thread-118083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:16:10.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:16:10.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:16:10.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:16:10.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:16:10.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:16:10.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:16:10.228 [DEBUG] [Thread-118083] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:16:17.315 [DEBUG] [Thread-118085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:18.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:18.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:32.358 [DEBUG] [Thread-118086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:16:40.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:16:40.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:16:40.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 16, 32), 22.76, 21.48, 0.0, 7.02, 20.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:16:40.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:16:32
2025-12-03T14:16:41.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:16:41.195 [DEBUG] [Thread-118087] [transport.py] [_log()] starting thread (client mode): 0xa2745cc0
2025-12-03T14:16:41.195 [DEBUG] [Thread-118087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:16:41.215 [DEBUG] [Thread-118087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:16:41.215 [INFO] [Thread-118087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:41.218 [DEBUG] [Thread-118087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] client lang: <none>
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] server lang: <none>
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] kex follows: False
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] Compression: none
2025-12-03T14:16:41.219 [DEBUG] [Thread-118087] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:16:41.236 [DEBUG] [Thread-118087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:16:41.237 [DEBUG] [Thread-118087] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:16:41.237 [DEBUG] [Thread-118087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:16:41.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:16:41.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:16:41.239 [DEBUG] [Thread-118087] [transport.py] [_log()] userauth is OK
2025-12-03T14:16:41.239 [DEBUG] [Thread-118087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:16:41.240 [DEBUG] [Thread-118087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:16:41.240 [DEBUG] [Thread-118087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:16:41.240 [DEBUG] [Thread-118087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:16:41.260 [INFO] [Thread-118087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:16:41.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:16:41.889 [DEBUG] [Thread-118087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:16:41.889 [DEBUG] [Thread-118087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:16:41.889 [DEBUG] [Thread-118087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:16:41.930 [DEBUG] [Thread-118087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:16:41.930 [DEBUG] [Thread-118087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:16:41.933 [DEBUG] [Thread-118087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:16:41.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:16:41.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:16:41.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:16:41.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:16:41.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:16:41.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:16:41.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:16:41.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:16:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:16:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.511160 -999.00  +21.30   5.66     26   +1.00 1 2 1 1 1   888    0 21.27 39.47 ----- 5.2 5.7 335.8 6.3 30.3 -22.7 30.2 -22.4 31.1 -22.4 31.7 -22.3
2025-12-03T14:16:41.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:16:41.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:16:41.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.511160
2025-12-03T14:16:41.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:16:41.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:16:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:16:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:16:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:16:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:16:32', tmtdew=22.76, humidity=21.48, cloud=0.0, wind=7.02, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:16:04.224', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:16:41.954 [DEBUG] [Thread-118087] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:16:42.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:16:42.053 [DEBUG] [Thread-118090] [transport.py] [_log()] starting thread (client mode): 0xa27a2500
2025-12-03T14:16:42.053 [DEBUG] [Thread-118090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:16:42.067 [DEBUG] [Thread-118090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:16:42.067 [INFO] [Thread-118090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:16:42.075 [DEBUG] [Thread-118090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] client lang: <none>
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] server lang: <none>
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] kex follows: False
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:16:42.076 [DEBUG] [Thread-118090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:16:42.077 [DEBUG] [Thread-118090] [transport.py] [_log()] Compression: none
2025-12-03T14:16:42.077 [DEBUG] [Thread-118090] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:16:42.131 [DEBUG] [Thread-118090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:16:42.132 [DEBUG] [Thread-118090] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:16:42.132 [DEBUG] [Thread-118090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:16:42.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:16:42.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:16:42.187 [DEBUG] [Thread-118090] [transport.py] [_log()] userauth is OK
2025-12-03T14:16:42.187 [DEBUG] [Thread-118090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:16:42.188 [DEBUG] [Thread-118090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:16:42.188 [DEBUG] [Thread-118090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:16:42.188 [DEBUG] [Thread-118090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:16:42.206 [INFO] [Thread-118090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:16:42.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:16:42.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:16:43.047 [DEBUG] [Thread-118090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:16:43.049 [DEBUG] [Thread-118090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:16:43.095 [DEBUG] [Thread-118090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:16:43.096 [DEBUG] [Thread-118090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:16:43.104 [DEBUG] [Thread-118090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:16:43.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:16:43.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:16:43.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:16:43.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:16:43.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:16:43.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:16:43.138 [DEBUG] [Thread-118090] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:16:47.387 [DEBUG] [Thread-118092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:16:50.065 [DEBUG] [Thread-118093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:02.427 [DEBUG] [Thread-118094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:13.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:17:13.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:17:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:17:13.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 17, 4), 22.84, 21.33, 0.0, 8.86, 20.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:17:13.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:17:04
2025-12-03T14:17:13.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:17:14.117 [DEBUG] [Thread-118095] [transport.py] [_log()] starting thread (client mode): 0xa51cefe0
2025-12-03T14:17:14.117 [DEBUG] [Thread-118095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:17:14.138 [DEBUG] [Thread-118095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:17:14.138 [INFO] [Thread-118095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] client lang: <none>
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] server lang: <none>
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] kex follows: False
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] Compression: none
2025-12-03T14:17:14.141 [DEBUG] [Thread-118095] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:17:14.159 [DEBUG] [Thread-118095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:17:14.159 [DEBUG] [Thread-118095] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:17:14.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:17:14.160 [DEBUG] [Thread-118095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:17:14.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:17:14.162 [DEBUG] [Thread-118095] [transport.py] [_log()] userauth is OK
2025-12-03T14:17:14.163 [DEBUG] [Thread-118095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:17:14.163 [DEBUG] [Thread-118095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:17:14.163 [DEBUG] [Thread-118095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:17:14.163 [DEBUG] [Thread-118095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:17:14.197 [INFO] [Thread-118095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:17:14.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:17:14.862 [DEBUG] [Thread-118095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:17:14.862 [DEBUG] [Thread-118095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:17:14.863 [DEBUG] [Thread-118095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:17:14.903 [DEBUG] [Thread-118095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:17:14.903 [DEBUG] [Thread-118095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:17:14.906 [DEBUG] [Thread-118095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:17:14.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:17:14.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:17:14.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:17:14.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:17:14.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:17:14.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:17:14.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:17:14.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:17:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:17:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.511507 -999.00  +21.20   4.47     25   +0.90 1 2 1 1 1   888    0 20.76 35.86 ----- 3.6 4.5 126.7 7.1 30.4 -22.9 30.3 -23.1 31.1 -22.0 31.6 -22.9
2025-12-03T14:17:14.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:17:14.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:17:14.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.511507
2025-12-03T14:17:14.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:17:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:17:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:17:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:17:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-12-03T14:17:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:17:04', tmtdew=22.84, humidity=21.33, cloud=0.0, wind=8.86, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:16:34.205', atlas_cloud=2, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:17:14.930 [DEBUG] [Thread-118095] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:17:15.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:17:15.029 [DEBUG] [Thread-118098] [transport.py] [_log()] starting thread (client mode): 0xa5162890
2025-12-03T14:17:15.029 [DEBUG] [Thread-118098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:17:15.045 [DEBUG] [Thread-118098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:17:15.045 [INFO] [Thread-118098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:15.052 [DEBUG] [Thread-118098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] client lang: <none>
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] server lang: <none>
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] kex follows: False
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:17:15.053 [DEBUG] [Thread-118098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:17:15.054 [DEBUG] [Thread-118098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:17:15.054 [DEBUG] [Thread-118098] [transport.py] [_log()] Compression: none
2025-12-03T14:17:15.054 [DEBUG] [Thread-118098] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:17:15.111 [DEBUG] [Thread-118098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:17:15.111 [DEBUG] [Thread-118098] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:17:15.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:17:15.112 [DEBUG] [Thread-118098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:17:15.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:17:15.166 [DEBUG] [Thread-118098] [transport.py] [_log()] userauth is OK
2025-12-03T14:17:15.166 [DEBUG] [Thread-118098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:17:15.167 [DEBUG] [Thread-118098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:17:15.167 [DEBUG] [Thread-118098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:17:15.167 [DEBUG] [Thread-118098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:17:15.186 [INFO] [Thread-118098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:17:15.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:17:15.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:17:16.016 [DEBUG] [Thread-118098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:17:16.016 [DEBUG] [Thread-118098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:17:16.064 [DEBUG] [Thread-118098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:17:16.064 [DEBUG] [Thread-118098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:17:16.072 [DEBUG] [Thread-118098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:17:16.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:17:16.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:17:16.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:17:16.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:17:16.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:17:16.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:17:16.107 [DEBUG] [Thread-118098] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:17:17.453 [DEBUG] [Thread-118100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:18.587 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:18.588 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:32.500 [DEBUG] [Thread-118101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:46.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:17:46.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:17:46.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:17:46.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 17, 36), 23.01, 21.23, 0.0, 8.84, 20.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:17:46.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:17:36
2025-12-03T14:17:46.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:17:47.076 [DEBUG] [Thread-118102] [transport.py] [_log()] starting thread (client mode): 0xa2746a10
2025-12-03T14:17:47.076 [DEBUG] [Thread-118102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:17:47.097 [DEBUG] [Thread-118102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:17:47.097 [INFO] [Thread-118102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:17:47.100 [DEBUG] [Thread-118102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:17:47.100 [DEBUG] [Thread-118102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:17:47.100 [DEBUG] [Thread-118102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] client lang: <none>
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] server lang: <none>
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] kex follows: False
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] Compression: none
2025-12-03T14:17:47.101 [DEBUG] [Thread-118102] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:17:47.118 [DEBUG] [Thread-118102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:17:47.118 [DEBUG] [Thread-118102] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:17:47.119 [DEBUG] [Thread-118102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:17:47.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:17:47.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:17:47.121 [DEBUG] [Thread-118102] [transport.py] [_log()] userauth is OK
2025-12-03T14:17:47.121 [DEBUG] [Thread-118102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:17:47.121 [DEBUG] [Thread-118102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:17:47.121 [DEBUG] [Thread-118102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:17:47.121 [DEBUG] [Thread-118102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:17:47.145 [INFO] [Thread-118102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:17:47.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:17:47.529 [DEBUG] [Thread-118104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:17:47.800 [DEBUG] [Thread-118102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:17:47.800 [DEBUG] [Thread-118102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:17:47.801 [DEBUG] [Thread-118102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:17:47.841 [DEBUG] [Thread-118102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:17:47.841 [DEBUG] [Thread-118102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:17:47.844 [DEBUG] [Thread-118102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:17:47.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:17:47.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:17:47.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:17:47.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:17:47.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:17:47.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:17:47.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.511855 -999.00  +21.20   7.71     25   +0.80 1 1 1 1 1   888    0 20.74 32.95 ----- 6.5 7.7 56.4 9.9 30.5 -23.7 30.4 -23.0 31.0 -24.3 31.7 -23.3
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:17:47.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.511855
2025-12-03T14:17:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:17:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:17:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:17:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:17:47.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:17:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:17:36', tmtdew=23.01, humidity=21.23, cloud=0.0, wind=8.84, temperature=20.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:17:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:17:47.869 [DEBUG] [Thread-118102] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:17:47.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:17:47.976 [DEBUG] [Thread-118106] [transport.py] [_log()] starting thread (client mode): 0xa517c730
2025-12-03T14:17:47.976 [DEBUG] [Thread-118106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:17:47.991 [DEBUG] [Thread-118106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:17:47.992 [INFO] [Thread-118106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:17:47.999 [DEBUG] [Thread-118106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:17:47.999 [DEBUG] [Thread-118106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:17:47.999 [DEBUG] [Thread-118106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:17:47.999 [DEBUG] [Thread-118106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:47.999 [DEBUG] [Thread-118106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] client lang: <none>
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] server lang: <none>
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] kex follows: False
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] Compression: none
2025-12-03T14:17:48.000 [DEBUG] [Thread-118106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:17:48.060 [DEBUG] [Thread-118106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:17:48.060 [DEBUG] [Thread-118106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:17:48.061 [DEBUG] [Thread-118106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:17:48.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:17:48.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:17:48.116 [DEBUG] [Thread-118106] [transport.py] [_log()] userauth is OK
2025-12-03T14:17:48.116 [DEBUG] [Thread-118106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:17:48.116 [DEBUG] [Thread-118106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:17:48.116 [DEBUG] [Thread-118106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:17:48.116 [DEBUG] [Thread-118106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:17:48.139 [INFO] [Thread-118106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:17:48.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:17:48.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:17:49.011 [DEBUG] [Thread-118106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:17:49.011 [DEBUG] [Thread-118106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:17:49.059 [DEBUG] [Thread-118106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:17:49.059 [DEBUG] [Thread-118106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:17:49.067 [DEBUG] [Thread-118106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:17:49.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:17:49.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:17:49.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:17:49.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:17:49.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:17:49.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:17:49.102 [DEBUG] [Thread-118106] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:17:50.109 [DEBUG] [Thread-118108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:02.560 [DEBUG] [Thread-118109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:17.611 [DEBUG] [Thread-118110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:18.729 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:18.729 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:19.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:18:19.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:18:19.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:18:19.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 18, 8), 22.89, 21.38, 0.0, 6.94, 20.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:18:19.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:18:08
2025-12-03T14:18:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:18:20.094 [DEBUG] [Thread-118111] [transport.py] [_log()] starting thread (client mode): 0xa2747250
2025-12-03T14:18:20.094 [DEBUG] [Thread-118111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:18:20.116 [DEBUG] [Thread-118111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:18:20.117 [INFO] [Thread-118111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] client lang: <none>
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] server lang: <none>
2025-12-03T14:18:20.120 [DEBUG] [Thread-118111] [transport.py] [_log()] kex follows: False
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] Compression: none
2025-12-03T14:18:20.121 [DEBUG] [Thread-118111] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:18:20.137 [DEBUG] [Thread-118111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:18:20.137 [DEBUG] [Thread-118111] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:18:20.137 [DEBUG] [Thread-118111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:18:20.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:18:20.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:18:20.138 [DEBUG] [Thread-118111] [transport.py] [_log()] userauth is OK
2025-12-03T14:18:20.139 [DEBUG] [Thread-118111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:18:20.139 [DEBUG] [Thread-118111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:18:20.139 [DEBUG] [Thread-118111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:18:20.139 [DEBUG] [Thread-118111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:18:20.148 [INFO] [Thread-118111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:18:20.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:18:20.799 [DEBUG] [Thread-118111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:18:20.799 [DEBUG] [Thread-118111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:18:20.799 [DEBUG] [Thread-118111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:18:20.842 [DEBUG] [Thread-118111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:18:20.842 [DEBUG] [Thread-118111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:18:20.844 [DEBUG] [Thread-118111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:18:20.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:18:20.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:18:20.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:18:20.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:18:20.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:18:20.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:18:20.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:18:20.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.512202 -999.00  +21.10   5.05     25   +0.70 1 1 1 1 1   888    0 21.23 30.66 ----- 3.3 5.0 52.4 6.0 30.5 -23.7 30.2 -24.4 30.9 -22.2 31.5 -23.3
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.512202
2025-12-03T14:18:20.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:18:20.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:18:20.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:18:20.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:18:20.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:18:20.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:18:08', tmtdew=22.89, humidity=21.38, cloud=0.0, wind=6.94, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:17:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:18:20.868 [DEBUG] [Thread-118111] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:18:20.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:18:20.954 [DEBUG] [Thread-118114] [transport.py] [_log()] starting thread (client mode): 0xa2745840
2025-12-03T14:18:20.954 [DEBUG] [Thread-118114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:18:20.968 [DEBUG] [Thread-118114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:18:20.968 [INFO] [Thread-118114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] client lang: <none>
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] server lang: <none>
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] kex follows: False
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] Compression: none
2025-12-03T14:18:20.976 [DEBUG] [Thread-118114] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:18:21.032 [DEBUG] [Thread-118114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:18:21.032 [DEBUG] [Thread-118114] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:18:21.033 [DEBUG] [Thread-118114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:18:21.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:18:21.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:18:21.090 [DEBUG] [Thread-118114] [transport.py] [_log()] userauth is OK
2025-12-03T14:18:21.090 [DEBUG] [Thread-118114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:18:21.090 [DEBUG] [Thread-118114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:18:21.090 [DEBUG] [Thread-118114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:18:21.090 [DEBUG] [Thread-118114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:18:21.112 [INFO] [Thread-118114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:18:21.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:18:21.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:18:21.927 [DEBUG] [Thread-118114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:18:21.927 [DEBUG] [Thread-118114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:18:21.976 [DEBUG] [Thread-118114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:18:21.976 [DEBUG] [Thread-118114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:18:21.985 [DEBUG] [Thread-118114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:18:21.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:18:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:18:22.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:18:22.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:18:22.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:18:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:18:22.019 [DEBUG] [Thread-118114] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:18:32.636 [DEBUG] [Thread-118116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:47.679 [DEBUG] [Thread-118117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:50.142 [DEBUG] [Thread-118118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:18:52.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:18:52.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:18:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:18:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 18, 40), 22.85, 21.35, 0.0, 4.64, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:18:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:18:40
2025-12-03T14:18:52.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:18:53.001 [DEBUG] [Thread-118119] [transport.py] [_log()] starting thread (client mode): 0xa27a2620
2025-12-03T14:18:53.001 [DEBUG] [Thread-118119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:18:53.022 [DEBUG] [Thread-118119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:18:53.022 [INFO] [Thread-118119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:53.025 [DEBUG] [Thread-118119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] client lang: <none>
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] server lang: <none>
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] kex follows: False
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] Compression: none
2025-12-03T14:18:53.026 [DEBUG] [Thread-118119] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:18:53.043 [DEBUG] [Thread-118119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:18:53.044 [DEBUG] [Thread-118119] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:18:53.044 [DEBUG] [Thread-118119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:18:53.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:18:53.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:18:53.046 [DEBUG] [Thread-118119] [transport.py] [_log()] userauth is OK
2025-12-03T14:18:53.046 [DEBUG] [Thread-118119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:18:53.046 [DEBUG] [Thread-118119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:18:53.046 [DEBUG] [Thread-118119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:18:53.047 [DEBUG] [Thread-118119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:18:53.081 [INFO] [Thread-118119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:18:53.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:18:53.733 [DEBUG] [Thread-118119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:18:53.733 [DEBUG] [Thread-118119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:18:53.733 [DEBUG] [Thread-118119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:18:53.773 [DEBUG] [Thread-118119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:18:53.773 [DEBUG] [Thread-118119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:18:53.775 [DEBUG] [Thread-118119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:18:53.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:18:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:18:53.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:18:53.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:18:53.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:18:53.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:18:53.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:18:53.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.512549 -999.00  +21.20   7.83     26   +1.00 1 1 1 1 1   888    0 20.48 23.86 ----- 8.4 7.8 270.8 9.7 30.5 -23.6 30.4 -23.2 30.9 -22.9 31.5 -23.1
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.512549
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:18:53.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:18:40', tmtdew=22.85, humidity=21.35, cloud=0.0, wind=4.64, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:18:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:18:53.794 [DEBUG] [Thread-118119] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:18:53.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:18:53.886 [DEBUG] [Thread-118122] [transport.py] [_log()] starting thread (client mode): 0xa51cc640
2025-12-03T14:18:53.886 [DEBUG] [Thread-118122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:18:53.904 [DEBUG] [Thread-118122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:18:53.904 [INFO] [Thread-118122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:18:53.911 [DEBUG] [Thread-118122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:18:53.911 [DEBUG] [Thread-118122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:18:53.911 [DEBUG] [Thread-118122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] client lang: <none>
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] server lang: <none>
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] kex follows: False
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] Compression: none
2025-12-03T14:18:53.912 [DEBUG] [Thread-118122] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:18:53.967 [DEBUG] [Thread-118122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:18:53.967 [DEBUG] [Thread-118122] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:18:53.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:18:53.967 [DEBUG] [Thread-118122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:18:53.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:18:54.024 [DEBUG] [Thread-118122] [transport.py] [_log()] userauth is OK
2025-12-03T14:18:54.024 [DEBUG] [Thread-118122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:18:54.024 [DEBUG] [Thread-118122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:18:54.024 [DEBUG] [Thread-118122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:18:54.024 [DEBUG] [Thread-118122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:18:54.038 [INFO] [Thread-118122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:18:54.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:18:54.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:18:54.866 [DEBUG] [Thread-118122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:18:54.866 [DEBUG] [Thread-118122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:18:54.913 [DEBUG] [Thread-118122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:18:54.913 [DEBUG] [Thread-118122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:18:54.921 [DEBUG] [Thread-118122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:18:54.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:18:54.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:18:54.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:18:54.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:18:54.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:18:54.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:18:54.952 [DEBUG] [Thread-118122] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:19:02.707 [DEBUG] [Thread-118124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:17.759 [DEBUG] [Thread-118125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:18.868 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:18.869 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:24.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:19:24.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:19:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 19, 12), 22.7, 21.59, 0.0, 5.52, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:19:25.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:19:12
2025-12-03T14:19:25.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:19:25.934 [DEBUG] [Thread-118126] [transport.py] [_log()] starting thread (client mode): 0xa517f880
2025-12-03T14:19:25.934 [DEBUG] [Thread-118126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:19:25.954 [DEBUG] [Thread-118126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:19:25.954 [INFO] [Thread-118126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:25.957 [DEBUG] [Thread-118126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] client lang: <none>
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] server lang: <none>
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] kex follows: False
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] Compression: none
2025-12-03T14:19:25.958 [DEBUG] [Thread-118126] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:19:25.976 [DEBUG] [Thread-118126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:19:25.977 [DEBUG] [Thread-118126] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:19:25.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:19:25.978 [DEBUG] [Thread-118126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:19:25.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:19:25.979 [DEBUG] [Thread-118126] [transport.py] [_log()] userauth is OK
2025-12-03T14:19:25.980 [DEBUG] [Thread-118126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:19:25.980 [DEBUG] [Thread-118126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:19:25.980 [DEBUG] [Thread-118126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:19:25.980 [DEBUG] [Thread-118126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:19:25.997 [INFO] [Thread-118126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:19:25.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:19:26.619 [DEBUG] [Thread-118126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:19:26.619 [DEBUG] [Thread-118126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:19:26.619 [DEBUG] [Thread-118126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:19:26.659 [DEBUG] [Thread-118126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:19:26.660 [DEBUG] [Thread-118126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:19:26.662 [DEBUG] [Thread-118126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:19:26.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:19:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:19:26.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:19:26.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:19:26.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:19:26.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:19:26.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.512896 -999.00  +21.20   4.95     26   +0.90 1 1 1 1 1   888    0 20.87 20.35 ----- 3.4 5.0 293.8 8.7 30.5 -23.8 30.4 -23.9 30.8 -23.3 31.4 -23.1
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:19:26.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.512896
2025-12-03T14:19:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:19:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:19:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:19:26.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:19:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:19:26.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:19:12', tmtdew=22.7, humidity=21.59, cloud=0.0, wind=5.52, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:18:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:19:26.689 [DEBUG] [Thread-118126] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:19:26.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:19:26.785 [DEBUG] [Thread-118129] [transport.py] [_log()] starting thread (client mode): 0xa5199c00
2025-12-03T14:19:26.785 [DEBUG] [Thread-118129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:19:26.800 [DEBUG] [Thread-118129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:19:26.800 [INFO] [Thread-118129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:19:26.807 [DEBUG] [Thread-118129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:19:26.807 [DEBUG] [Thread-118129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:19:26.807 [DEBUG] [Thread-118129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] client lang: <none>
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] server lang: <none>
2025-12-03T14:19:26.808 [DEBUG] [Thread-118129] [transport.py] [_log()] kex follows: False
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] Compression: none
2025-12-03T14:19:26.809 [DEBUG] [Thread-118129] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:19:26.867 [DEBUG] [Thread-118129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:19:26.867 [DEBUG] [Thread-118129] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:19:26.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:19:26.868 [DEBUG] [Thread-118129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:19:26.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:19:26.922 [DEBUG] [Thread-118129] [transport.py] [_log()] userauth is OK
2025-12-03T14:19:26.923 [DEBUG] [Thread-118129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:19:26.923 [DEBUG] [Thread-118129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:19:26.923 [DEBUG] [Thread-118129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:19:26.923 [DEBUG] [Thread-118129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:19:26.942 [INFO] [Thread-118129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:19:26.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:19:26.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:19:27.764 [DEBUG] [Thread-118129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:19:27.764 [DEBUG] [Thread-118129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:19:27.812 [DEBUG] [Thread-118129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:19:27.812 [DEBUG] [Thread-118129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:19:27.821 [DEBUG] [Thread-118129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:19:27.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:19:27.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:19:27.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:19:27.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:19:27.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:19:27.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:19:27.856 [DEBUG] [Thread-118129] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:19:32.788 [DEBUG] [Thread-118131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:47.821 [DEBUG] [Thread-118132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:50.176 [DEBUG] [Thread-118133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:19:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:19:57.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:19:57.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:19:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 19, 44), 22.75, 21.38, 0.0, 4.99, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:19:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:19:44
2025-12-03T14:19:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:19:58.831 [DEBUG] [Thread-118134] [transport.py] [_log()] starting thread (client mode): 0xa51cdd20
2025-12-03T14:19:58.831 [DEBUG] [Thread-118134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:19:58.852 [DEBUG] [Thread-118134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:19:58.852 [INFO] [Thread-118134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] client lang: <none>
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] server lang: <none>
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] kex follows: False
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:19:58.855 [DEBUG] [Thread-118134] [transport.py] [_log()] Compression: none
2025-12-03T14:19:58.856 [DEBUG] [Thread-118134] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:19:58.873 [DEBUG] [Thread-118134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:19:58.873 [DEBUG] [Thread-118134] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:19:58.873 [DEBUG] [Thread-118134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:19:58.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:19:58.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:19:58.875 [DEBUG] [Thread-118134] [transport.py] [_log()] userauth is OK
2025-12-03T14:19:58.875 [DEBUG] [Thread-118134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:19:58.875 [DEBUG] [Thread-118134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:19:58.876 [DEBUG] [Thread-118134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:19:58.876 [DEBUG] [Thread-118134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:19:58.899 [INFO] [Thread-118134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:19:58.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:19:59.546 [DEBUG] [Thread-118134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:19:59.547 [DEBUG] [Thread-118134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:19:59.547 [DEBUG] [Thread-118134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:19:59.588 [DEBUG] [Thread-118134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:19:59.588 [DEBUG] [Thread-118134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:19:59.591 [DEBUG] [Thread-118134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:19:59.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:19:59.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:19:59.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:19:59.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:19:59.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:19:59.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:19:59.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:19:59.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.513244 -999.00  +21.20   1.87     26   +1.00 1 1 1 1 1   888    0 20.90 17.25 ----- 3.3 1.9 200.5 5.5 30.6 -23.8 30.4 -23.3 -999.0 -999.0 31.3 -22.7
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.513244
2025-12-03T14:19:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:19:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:19:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:19:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:19:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:19:59.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:19:44', tmtdew=22.75, humidity=21.38, cloud=0.0, wind=4.99, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:19:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:19:59.616 [DEBUG] [Thread-118134] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:19:59.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:19:59.712 [DEBUG] [Thread-118137] [transport.py] [_log()] starting thread (client mode): 0xa27a3ee0
2025-12-03T14:19:59.712 [DEBUG] [Thread-118137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:19:59.727 [DEBUG] [Thread-118137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:19:59.727 [INFO] [Thread-118137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:19:59.735 [DEBUG] [Thread-118137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] client lang: <none>
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] server lang: <none>
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] kex follows: False
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] Compression: none
2025-12-03T14:19:59.736 [DEBUG] [Thread-118137] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:19:59.792 [DEBUG] [Thread-118137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:19:59.792 [DEBUG] [Thread-118137] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:19:59.793 [DEBUG] [Thread-118137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:19:59.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:19:59.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:19:59.856 [DEBUG] [Thread-118137] [transport.py] [_log()] userauth is OK
2025-12-03T14:19:59.856 [DEBUG] [Thread-118137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:19:59.856 [DEBUG] [Thread-118137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:19:59.856 [DEBUG] [Thread-118137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:19:59.856 [DEBUG] [Thread-118137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:19:59.881 [INFO] [Thread-118137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:19:59.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:19:59.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:20:00.698 [DEBUG] [Thread-118137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:20:00.698 [DEBUG] [Thread-118137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:20:00.746 [DEBUG] [Thread-118137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:20:00.746 [DEBUG] [Thread-118137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:20:00.755 [DEBUG] [Thread-118137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:20:00.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:20:00.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:20:00.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:20:00.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:20:00.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:20:00.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:20:00.793 [DEBUG] [Thread-118137] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:20:02.852 [DEBUG] [Thread-118139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:17.892 [DEBUG] [Thread-118140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:19.010 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:19.011 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:20:30.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:20:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:20:31.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 20, 17), 22.76, 21.36, 0.0, 8.56, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:20:31.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:20:17
2025-12-03T14:20:31.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:20:31.755 [DEBUG] [Thread-118141] [transport.py] [_log()] starting thread (client mode): 0xa517dff0
2025-12-03T14:20:31.755 [DEBUG] [Thread-118141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:20:31.767 [DEBUG] [Thread-118141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:20:31.767 [INFO] [Thread-118141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] client lang: <none>
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] server lang: <none>
2025-12-03T14:20:31.770 [DEBUG] [Thread-118141] [transport.py] [_log()] kex follows: False
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] Compression: none
2025-12-03T14:20:31.771 [DEBUG] [Thread-118141] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:20:31.786 [DEBUG] [Thread-118141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:20:31.786 [DEBUG] [Thread-118141] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:20:31.787 [DEBUG] [Thread-118141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:20:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:20:31.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:20:31.788 [DEBUG] [Thread-118141] [transport.py] [_log()] userauth is OK
2025-12-03T14:20:31.788 [DEBUG] [Thread-118141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:20:31.788 [DEBUG] [Thread-118141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:20:31.788 [DEBUG] [Thread-118141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:20:31.788 [DEBUG] [Thread-118141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:20:31.812 [INFO] [Thread-118141] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:20:31.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:20:32.484 [DEBUG] [Thread-118141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:20:32.484 [DEBUG] [Thread-118141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:20:32.485 [DEBUG] [Thread-118141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:20:32.525 [DEBUG] [Thread-118141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:20:32.525 [DEBUG] [Thread-118141] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:20:32.528 [DEBUG] [Thread-118141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:20:32.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:20:32.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:20:32.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:20:32.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:20:32.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:20:32.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:20:32.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:20:32.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:20:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:20:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.513938 -999.00  +21.50   6.18     24   +0.60 1 1 1 1 1   888    0 20.93 14.22 ----- 7.7 6.2 201.2 7.0 30.6 -24.9 30.2 -24.6 30.5 -24.1 31.1 -25.5
2025-12-03T14:20:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:20:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:20:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.513938
2025-12-03T14:20:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:20:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:20:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:20:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:20:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:20:32.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:20:17', tmtdew=22.76, humidity=21.36, cloud=0.0, wind=8.56, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:20:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:20:32.556 [DEBUG] [Thread-118141] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:20:32.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:20:32.652 [DEBUG] [Thread-118144] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T14:20:32.652 [DEBUG] [Thread-118144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:20:32.667 [DEBUG] [Thread-118144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:20:32.667 [INFO] [Thread-118144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:20:32.674 [DEBUG] [Thread-118144] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] client lang: <none>
2025-12-03T14:20:32.675 [DEBUG] [Thread-118144] [transport.py] [_log()] server lang: <none>
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] kex follows: False
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] Compression: none
2025-12-03T14:20:32.676 [DEBUG] [Thread-118144] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:20:32.730 [DEBUG] [Thread-118144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:20:32.730 [DEBUG] [Thread-118144] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:20:32.731 [DEBUG] [Thread-118144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:20:32.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:20:32.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:20:32.787 [DEBUG] [Thread-118144] [transport.py] [_log()] userauth is OK
2025-12-03T14:20:32.787 [DEBUG] [Thread-118144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:20:32.787 [DEBUG] [Thread-118144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:20:32.787 [DEBUG] [Thread-118144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:20:32.787 [DEBUG] [Thread-118144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:20:32.806 [INFO] [Thread-118144] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:20:32.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:20:32.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:20:32.921 [DEBUG] [Thread-118146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:33.609 [DEBUG] [Thread-118144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:20:33.609 [DEBUG] [Thread-118144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:20:33.657 [DEBUG] [Thread-118144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:20:33.658 [DEBUG] [Thread-118144] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:20:33.666 [DEBUG] [Thread-118144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:20:33.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:20:33.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:20:33.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:20:33.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:20:33.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:20:33.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:20:33.700 [DEBUG] [Thread-118144] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:20:47.964 [DEBUG] [Thread-118147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:20:50.209 [DEBUG] [Thread-118148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:02.994 [DEBUG] [Thread-118149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:03.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:21:03.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:21:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:21:04.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 20, 49), 23.24, 20.95, 0.0, 11.47, 20.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:21:04.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:20:49
2025-12-03T14:21:04.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:21:04.668 [DEBUG] [Thread-118150] [transport.py] [_log()] starting thread (client mode): 0xa2744ca0
2025-12-03T14:21:04.668 [DEBUG] [Thread-118150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:21:04.689 [DEBUG] [Thread-118150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:21:04.689 [INFO] [Thread-118150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] client lang: <none>
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] server lang: <none>
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] kex follows: False
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:21:04.692 [DEBUG] [Thread-118150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:21:04.693 [DEBUG] [Thread-118150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:21:04.693 [DEBUG] [Thread-118150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:21:04.693 [DEBUG] [Thread-118150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:21:04.693 [DEBUG] [Thread-118150] [transport.py] [_log()] Compression: none
2025-12-03T14:21:04.693 [DEBUG] [Thread-118150] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:21:04.709 [DEBUG] [Thread-118150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:21:04.710 [DEBUG] [Thread-118150] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:21:04.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:21:04.710 [DEBUG] [Thread-118150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:21:04.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:21:04.713 [DEBUG] [Thread-118150] [transport.py] [_log()] userauth is OK
2025-12-03T14:21:04.713 [DEBUG] [Thread-118150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:21:04.713 [DEBUG] [Thread-118150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:21:04.713 [DEBUG] [Thread-118150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:21:04.713 [DEBUG] [Thread-118150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:21:04.739 [INFO] [Thread-118150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:21:04.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:21:05.397 [DEBUG] [Thread-118150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:21:05.397 [DEBUG] [Thread-118150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:21:05.398 [DEBUG] [Thread-118150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:21:05.438 [DEBUG] [Thread-118150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:21:05.438 [DEBUG] [Thread-118150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:21:05.441 [DEBUG] [Thread-118150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:21:05.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:21:05.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:21:05.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:21:05.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:21:05.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:21:05.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:21:05.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.514285 -999.00  +21.50   1.45     25   +0.80 1 1 1 1 1   888    0 20.78 16.30 ----- 2.9 1.4 191.6 7.6 30.4 -24.3 29.8 -24.0 30.5 -23.7 31.0 -23.3
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:21:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.514285
2025-12-03T14:21:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:21:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:21:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:21:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:21:05.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:21:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:20:49', tmtdew=23.24, humidity=20.95, cloud=0.0, wind=11.47, temperature=20.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:20:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:21:05.466 [DEBUG] [Thread-118150] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:21:05.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:21:05.562 [DEBUG] [Thread-118153] [transport.py] [_log()] starting thread (client mode): 0xa517db10
2025-12-03T14:21:05.562 [DEBUG] [Thread-118153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:21:05.577 [DEBUG] [Thread-118153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:21:05.578 [INFO] [Thread-118153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:21:05.585 [DEBUG] [Thread-118153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:21:05.585 [DEBUG] [Thread-118153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] client lang: <none>
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] server lang: <none>
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] kex follows: False
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:21:05.586 [DEBUG] [Thread-118153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:21:05.587 [DEBUG] [Thread-118153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:21:05.587 [DEBUG] [Thread-118153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:21:05.587 [DEBUG] [Thread-118153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:21:05.587 [DEBUG] [Thread-118153] [transport.py] [_log()] Compression: none
2025-12-03T14:21:05.587 [DEBUG] [Thread-118153] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:21:05.645 [DEBUG] [Thread-118153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:21:05.646 [DEBUG] [Thread-118153] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:21:05.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:21:05.646 [DEBUG] [Thread-118153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:21:05.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:21:05.701 [DEBUG] [Thread-118153] [transport.py] [_log()] userauth is OK
2025-12-03T14:21:05.701 [DEBUG] [Thread-118153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:21:05.702 [DEBUG] [Thread-118153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:21:05.702 [DEBUG] [Thread-118153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:21:05.702 [DEBUG] [Thread-118153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:21:05.721 [INFO] [Thread-118153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:21:05.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:21:05.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:21:06.594 [DEBUG] [Thread-118153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:21:06.594 [DEBUG] [Thread-118153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:21:06.641 [DEBUG] [Thread-118153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:21:06.642 [DEBUG] [Thread-118153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:21:06.650 [DEBUG] [Thread-118153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:21:06.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:21:06.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:21:06.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:21:06.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:21:06.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:21:06.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:21:06.684 [DEBUG] [Thread-118153] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:21:18.025 [DEBUG] [Thread-118155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:19.149 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:19.151 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:33.064 [DEBUG] [Thread-118156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:36.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:21:36.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:21:36.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:21:37.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 21, 21), 23.64, 20.45, 0.0, 13.27, 21.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:21:37.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:21:21
2025-12-03T14:21:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:21:37.645 [DEBUG] [Thread-118157] [transport.py] [_log()] starting thread (client mode): 0xa27a11e0
2025-12-03T14:21:37.645 [DEBUG] [Thread-118157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:21:37.663 [DEBUG] [Thread-118157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:21:37.663 [INFO] [Thread-118157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] client lang: <none>
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] server lang: <none>
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] kex follows: False
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:21:37.665 [DEBUG] [Thread-118157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:21:37.666 [DEBUG] [Thread-118157] [transport.py] [_log()] Compression: none
2025-12-03T14:21:37.666 [DEBUG] [Thread-118157] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:21:37.682 [DEBUG] [Thread-118157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:21:37.682 [DEBUG] [Thread-118157] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:21:37.683 [DEBUG] [Thread-118157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:21:37.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:21:37.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:21:37.685 [DEBUG] [Thread-118157] [transport.py] [_log()] userauth is OK
2025-12-03T14:21:37.686 [DEBUG] [Thread-118157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:21:37.686 [DEBUG] [Thread-118157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:21:37.686 [DEBUG] [Thread-118157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:21:37.686 [DEBUG] [Thread-118157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:21:37.711 [INFO] [Thread-118157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:21:37.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:21:38.330 [DEBUG] [Thread-118157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:21:38.330 [DEBUG] [Thread-118157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:21:38.330 [DEBUG] [Thread-118157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:21:38.371 [DEBUG] [Thread-118157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:21:38.371 [DEBUG] [Thread-118157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:21:38.374 [DEBUG] [Thread-118157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:21:38.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:21:38.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:21:38.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:21:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:21:38.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:21:38.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:21:38.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:21:38.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.514633 -999.00  +21.60   3.20     24   +0.70 1 1 1 1 1   888    0 20.36 18.27 ----- 3.6 3.2 62.2 7.6 30.4 -23.9 30.0 -23.8 30.5 -23.0 31.0 -23.0
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.514633
2025-12-03T14:21:38.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:21:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:21:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:21:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:21:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:21:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:21:21', tmtdew=23.64, humidity=20.45, cloud=0.0, wind=13.27, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:21:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:21:38.397 [DEBUG] [Thread-118157] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:21:38.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:21:38.489 [DEBUG] [Thread-118160] [transport.py] [_log()] starting thread (client mode): 0xa27a3550
2025-12-03T14:21:38.489 [DEBUG] [Thread-118160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:21:38.504 [DEBUG] [Thread-118160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:21:38.504 [INFO] [Thread-118160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:21:38.511 [DEBUG] [Thread-118160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] client lang: <none>
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] server lang: <none>
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] kex follows: False
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] Compression: none
2025-12-03T14:21:38.512 [DEBUG] [Thread-118160] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:21:38.575 [DEBUG] [Thread-118160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:21:38.576 [DEBUG] [Thread-118160] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:21:38.576 [DEBUG] [Thread-118160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:21:38.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:21:38.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:21:38.632 [DEBUG] [Thread-118160] [transport.py] [_log()] userauth is OK
2025-12-03T14:21:38.632 [DEBUG] [Thread-118160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:21:38.632 [DEBUG] [Thread-118160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:21:38.632 [DEBUG] [Thread-118160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:21:38.632 [DEBUG] [Thread-118160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:21:38.651 [INFO] [Thread-118160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:21:38.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:21:38.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:21:39.493 [DEBUG] [Thread-118160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:21:39.493 [DEBUG] [Thread-118160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:21:39.541 [DEBUG] [Thread-118160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:21:39.541 [DEBUG] [Thread-118160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:21:39.550 [DEBUG] [Thread-118160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:21:39.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:21:39.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:21:39.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:21:39.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:21:39.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:21:39.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:21:39.585 [DEBUG] [Thread-118160] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:21:48.092 [DEBUG] [Thread-118162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:21:50.268 [DEBUG] [Thread-118163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:03.139 [DEBUG] [Thread-118164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:09.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:22:09.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:22:09.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:22:10.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 21, 53), 23.52, 20.63, 0.0, 14.7, 21.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:22:10.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:21:53
2025-12-03T14:22:10.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:22:10.566 [DEBUG] [Thread-118165] [transport.py] [_log()] starting thread (client mode): 0xa2762a70
2025-12-03T14:22:10.566 [DEBUG] [Thread-118165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:22:10.586 [DEBUG] [Thread-118165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:22:10.586 [INFO] [Thread-118165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] client lang: <none>
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] server lang: <none>
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] kex follows: False
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] Compression: none
2025-12-03T14:22:10.590 [DEBUG] [Thread-118165] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:22:10.606 [DEBUG] [Thread-118165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:22:10.606 [DEBUG] [Thread-118165] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:22:10.606 [DEBUG] [Thread-118165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:22:10.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:22:10.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:22:10.607 [DEBUG] [Thread-118165] [transport.py] [_log()] userauth is OK
2025-12-03T14:22:10.607 [DEBUG] [Thread-118165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:22:10.607 [DEBUG] [Thread-118165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:22:10.607 [DEBUG] [Thread-118165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:22:10.607 [DEBUG] [Thread-118165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:22:10.634 [INFO] [Thread-118165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:22:10.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:22:11.289 [DEBUG] [Thread-118165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:22:11.289 [DEBUG] [Thread-118165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:22:11.289 [DEBUG] [Thread-118165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:22:11.329 [DEBUG] [Thread-118165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:22:11.329 [DEBUG] [Thread-118165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:22:11.332 [DEBUG] [Thread-118165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:22:11.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:22:11.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:22:11.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:22:11.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:22:11.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:22:11.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.514980 -999.00  +21.70   7.48     24   +0.70 1 1 1 1 1   888    0 21.22 19.57 ----- 7.7 7.5 89.6 9.5 30.4 -23.0 30.1 -24.0 30.5 -22.4 31.1 -22.8
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.514980
2025-12-03T14:22:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:22:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:22:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:22:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:22:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:22:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:21:53', tmtdew=23.52, humidity=20.63, cloud=0.0, wind=14.7, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:21:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:22:11.350 [DEBUG] [Thread-118165] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:22:11.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:22:11.435 [DEBUG] [Thread-118168] [transport.py] [_log()] starting thread (client mode): 0xa27b6110
2025-12-03T14:22:11.435 [DEBUG] [Thread-118168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:22:11.450 [DEBUG] [Thread-118168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:22:11.450 [INFO] [Thread-118168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] client lang: <none>
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] server lang: <none>
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] kex follows: False
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] Compression: none
2025-12-03T14:22:11.458 [DEBUG] [Thread-118168] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:22:11.513 [DEBUG] [Thread-118168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:22:11.513 [DEBUG] [Thread-118168] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:22:11.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:22:11.513 [DEBUG] [Thread-118168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:22:11.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:22:11.570 [DEBUG] [Thread-118168] [transport.py] [_log()] userauth is OK
2025-12-03T14:22:11.570 [DEBUG] [Thread-118168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:22:11.570 [DEBUG] [Thread-118168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:22:11.570 [DEBUG] [Thread-118168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:22:11.570 [DEBUG] [Thread-118168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:22:11.588 [INFO] [Thread-118168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:22:11.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:22:11.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:22:12.450 [DEBUG] [Thread-118168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:22:12.450 [DEBUG] [Thread-118168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:22:12.497 [DEBUG] [Thread-118168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:22:12.498 [DEBUG] [Thread-118168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:22:12.506 [DEBUG] [Thread-118168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:22:12.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:22:12.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:22:12.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:22:12.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:22:12.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:22:12.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:22:12.538 [DEBUG] [Thread-118168] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:22:18.173 [DEBUG] [Thread-118170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:19.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:19.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:33.218 [DEBUG] [Thread-118171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:22:42.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:22:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:22:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 22, 25), 23.32, 20.87, 0.0, 12.21, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:22:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:22:25
2025-12-03T14:22:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:22:43.507 [DEBUG] [Thread-118172] [transport.py] [_log()] starting thread (client mode): 0xa27ca380
2025-12-03T14:22:43.507 [DEBUG] [Thread-118172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:22:43.526 [DEBUG] [Thread-118172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:22:43.527 [INFO] [Thread-118172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:22:43.528 [DEBUG] [Thread-118172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] client lang: <none>
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] server lang: <none>
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] kex follows: False
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] Compression: none
2025-12-03T14:22:43.529 [DEBUG] [Thread-118172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:22:43.540 [DEBUG] [Thread-118172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:22:43.541 [DEBUG] [Thread-118172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:22:43.541 [DEBUG] [Thread-118172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:22:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:22:43.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:22:43.543 [DEBUG] [Thread-118172] [transport.py] [_log()] userauth is OK
2025-12-03T14:22:43.543 [DEBUG] [Thread-118172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:22:43.543 [DEBUG] [Thread-118172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:22:43.543 [DEBUG] [Thread-118172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:22:43.543 [DEBUG] [Thread-118172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:22:43.564 [INFO] [Thread-118172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:22:43.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:22:44.235 [DEBUG] [Thread-118172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:22:44.235 [DEBUG] [Thread-118172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:22:44.236 [DEBUG] [Thread-118172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:22:44.276 [DEBUG] [Thread-118172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:22:44.276 [DEBUG] [Thread-118172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:22:44.279 [DEBUG] [Thread-118172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:22:44.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:22:44.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:22:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:22:44.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:22:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:22:44.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:22:44.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.515327 -999.00  +21.70   5.31     25   +0.80 1 1 1 1 1   888    0 20.09 21.33 ----- 5.2 5.3 165.4 7.7 30.4 -23.8 30.1 -24.3 30.4 -22.8 30.9 -23.7
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:22:44.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.515327
2025-12-03T14:22:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:22:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:22:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:22:44.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:22:44.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:22:44.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:22:25', tmtdew=23.32, humidity=20.87, cloud=0.0, wind=12.21, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:22:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:22:44.303 [DEBUG] [Thread-118172] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:22:44.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:22:44.401 [DEBUG] [Thread-118175] [transport.py] [_log()] starting thread (client mode): 0xa2746e00
2025-12-03T14:22:44.401 [DEBUG] [Thread-118175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:22:44.415 [DEBUG] [Thread-118175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:22:44.416 [INFO] [Thread-118175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] client lang: <none>
2025-12-03T14:22:44.423 [DEBUG] [Thread-118175] [transport.py] [_log()] server lang: <none>
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] kex follows: False
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] Compression: none
2025-12-03T14:22:44.424 [DEBUG] [Thread-118175] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:22:44.479 [DEBUG] [Thread-118175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:22:44.479 [DEBUG] [Thread-118175] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:22:44.479 [DEBUG] [Thread-118175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:22:44.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:22:44.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:22:44.537 [DEBUG] [Thread-118175] [transport.py] [_log()] userauth is OK
2025-12-03T14:22:44.537 [DEBUG] [Thread-118175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:22:44.537 [DEBUG] [Thread-118175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:22:44.538 [DEBUG] [Thread-118175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:22:44.538 [DEBUG] [Thread-118175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:22:44.557 [INFO] [Thread-118175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:22:44.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:22:44.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:22:45.348 [DEBUG] [Thread-118175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:22:45.348 [DEBUG] [Thread-118175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:22:45.396 [DEBUG] [Thread-118175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:22:45.396 [DEBUG] [Thread-118175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:22:45.405 [DEBUG] [Thread-118175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:22:45.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:22:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:22:45.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:22:45.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:22:45.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:22:45.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:22:45.440 [DEBUG] [Thread-118175] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:22:48.250 [DEBUG] [Thread-118177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:22:50.298 [DEBUG] [Thread-118178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:03.294 [DEBUG] [Thread-118179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:15.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:23:15.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:23:15.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:23:16.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 22, 57), 23.53, 20.33, 0.0, 11.06, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:23:16.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:22:57
2025-12-03T14:23:16.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:23:16.406 [DEBUG] [Thread-118180] [transport.py] [_log()] starting thread (client mode): 0xa27a2470
2025-12-03T14:23:16.407 [DEBUG] [Thread-118180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:23:16.427 [DEBUG] [Thread-118180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:23:16.427 [INFO] [Thread-118180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] client lang: <none>
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] server lang: <none>
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] kex follows: False
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] Compression: none
2025-12-03T14:23:16.430 [DEBUG] [Thread-118180] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:23:16.451 [DEBUG] [Thread-118180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:23:16.452 [DEBUG] [Thread-118180] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:23:16.452 [DEBUG] [Thread-118180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:23:16.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:23:16.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:23:16.454 [DEBUG] [Thread-118180] [transport.py] [_log()] userauth is OK
2025-12-03T14:23:16.454 [DEBUG] [Thread-118180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:23:16.455 [DEBUG] [Thread-118180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:23:16.455 [DEBUG] [Thread-118180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:23:16.455 [DEBUG] [Thread-118180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:23:16.477 [INFO] [Thread-118180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:23:16.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:23:17.114 [DEBUG] [Thread-118180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:23:17.115 [DEBUG] [Thread-118180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:23:17.115 [DEBUG] [Thread-118180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:23:17.156 [DEBUG] [Thread-118180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:23:17.156 [DEBUG] [Thread-118180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:23:17.159 [DEBUG] [Thread-118180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:23:17.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:23:17.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:23:17.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:23:17.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:23:17.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:23:17.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:23:17.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:23:17.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.515674 -999.00  +21.70  11.28     24   +0.70 1 1 1 1 1   888    0 20.90 23.93 ----- 13.5 11.3 151.4 12.9 30.4 -23.5 30.1 -24.3 30.5 -23.8 31.0 -23.4
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.515674
2025-12-03T14:23:17.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:23:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:23:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:23:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:23:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:23:17.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:22:57', tmtdew=23.53, humidity=20.33, cloud=0.0, wind=11.06, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:22:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:23:17.184 [DEBUG] [Thread-118180] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:23:17.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:23:17.292 [DEBUG] [Thread-118183] [transport.py] [_log()] starting thread (client mode): 0xa27a13f0
2025-12-03T14:23:17.292 [DEBUG] [Thread-118183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:23:17.306 [DEBUG] [Thread-118183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:23:17.307 [INFO] [Thread-118183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:23:17.314 [DEBUG] [Thread-118183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:23:17.314 [DEBUG] [Thread-118183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:23:17.314 [DEBUG] [Thread-118183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:23:17.314 [DEBUG] [Thread-118183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:17.314 [DEBUG] [Thread-118183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] client lang: <none>
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] server lang: <none>
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] kex follows: False
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] Compression: none
2025-12-03T14:23:17.315 [DEBUG] [Thread-118183] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:23:17.371 [DEBUG] [Thread-118183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:23:17.372 [DEBUG] [Thread-118183] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:23:17.372 [DEBUG] [Thread-118183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:23:17.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:23:17.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:23:17.428 [DEBUG] [Thread-118183] [transport.py] [_log()] userauth is OK
2025-12-03T14:23:17.428 [DEBUG] [Thread-118183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:23:17.428 [DEBUG] [Thread-118183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:23:17.428 [DEBUG] [Thread-118183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:23:17.428 [DEBUG] [Thread-118183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:23:17.447 [INFO] [Thread-118183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:23:17.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:23:17.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:23:18.277 [DEBUG] [Thread-118183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:23:18.278 [DEBUG] [Thread-118183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:23:18.324 [DEBUG] [Thread-118185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:18.326 [DEBUG] [Thread-118183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:23:18.326 [DEBUG] [Thread-118183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:23:18.335 [DEBUG] [Thread-118183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:23:18.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:23:18.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:23:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:23:18.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:23:18.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:23:18.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:23:18.370 [DEBUG] [Thread-118183] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:23:19.431 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:19.432 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:33.366 [DEBUG] [Thread-118186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:48.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:23:48.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:23:48.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:23:48.396 [DEBUG] [Thread-118187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 23, 29), 23.45, 20.43, 0.0, 12.35, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:23:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:23:29
2025-12-03T14:23:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:23:49.330 [DEBUG] [Thread-118188] [transport.py] [_log()] starting thread (client mode): 0xa27617b0
2025-12-03T14:23:49.330 [DEBUG] [Thread-118188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:23:49.345 [DEBUG] [Thread-118188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:23:49.345 [INFO] [Thread-118188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:23:49.348 [DEBUG] [Thread-118188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] client lang: <none>
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] server lang: <none>
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] kex follows: False
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] Compression: none
2025-12-03T14:23:49.349 [DEBUG] [Thread-118188] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:23:49.362 [DEBUG] [Thread-118188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:23:49.362 [DEBUG] [Thread-118188] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:23:49.362 [DEBUG] [Thread-118188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:23:49.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:23:49.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:23:49.364 [DEBUG] [Thread-118188] [transport.py] [_log()] userauth is OK
2025-12-03T14:23:49.364 [DEBUG] [Thread-118188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:23:49.364 [DEBUG] [Thread-118188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:23:49.364 [DEBUG] [Thread-118188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:23:49.364 [DEBUG] [Thread-118188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:23:49.382 [INFO] [Thread-118188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:23:49.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:23:50.020 [DEBUG] [Thread-118188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:23:50.020 [DEBUG] [Thread-118188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:23:50.020 [DEBUG] [Thread-118188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:23:50.061 [DEBUG] [Thread-118188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:23:50.061 [DEBUG] [Thread-118188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:23:50.064 [DEBUG] [Thread-118188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:23:50.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:23:50.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:23:50.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:23:50.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:23:50.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:23:50.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:23:50.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:23:50.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:23:50.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:23:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.516021 -999.00  +21.60  12.54     24   +0.50 1 1 1 1 1   888    0 21.32 31.28 ----- 16.2 12.5 135.4 16.7 30.3 -24.6 30.0 -24.7 30.2 -24.4 30.8 -24.9
2025-12-03T14:23:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:23:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:23:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.516021
2025-12-03T14:23:50.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:23:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:23:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:23:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:23:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:23:50.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:23:29', tmtdew=23.45, humidity=20.43, cloud=0.0, wind=12.35, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:23:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:23:50.089 [DEBUG] [Thread-118188] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:23:50.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:23:50.181 [DEBUG] [Thread-118191] [transport.py] [_log()] starting thread (client mode): 0xa27a2dd0
2025-12-03T14:23:50.181 [DEBUG] [Thread-118191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:23:50.196 [DEBUG] [Thread-118191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:23:50.196 [INFO] [Thread-118191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:23:50.204 [DEBUG] [Thread-118191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] client lang: <none>
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] server lang: <none>
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] kex follows: False
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] Compression: none
2025-12-03T14:23:50.205 [DEBUG] [Thread-118191] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:23:50.262 [DEBUG] [Thread-118191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:23:50.262 [DEBUG] [Thread-118191] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:23:50.263 [DEBUG] [Thread-118191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:23:50.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:23:50.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:23:50.318 [DEBUG] [Thread-118191] [transport.py] [_log()] userauth is OK
2025-12-03T14:23:50.319 [DEBUG] [Thread-118191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:23:50.319 [DEBUG] [Thread-118191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:23:50.319 [DEBUG] [Thread-118191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:23:50.319 [DEBUG] [Thread-118191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:23:50.332 [INFO] [Thread-118191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:23:50.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:23:50.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:23:50.338 [DEBUG] [Thread-118193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:23:51.145 [DEBUG] [Thread-118191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:23:51.146 [DEBUG] [Thread-118191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:23:51.194 [DEBUG] [Thread-118191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:23:51.194 [DEBUG] [Thread-118191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:23:51.203 [DEBUG] [Thread-118191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:23:51.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:23:51.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:23:51.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:23:51.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:23:51.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:23:51.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:23:51.237 [DEBUG] [Thread-118191] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:24:03.425 [DEBUG] [Thread-118194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:18.458 [DEBUG] [Thread-118195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:19.571 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:19.573 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:21.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:24:21.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:24:21.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:24:21.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 24, 1), 23.38, 20.55, 0.0, 14.52, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:24:21.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:24:01
2025-12-03T14:24:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:24:22.209 [DEBUG] [Thread-118196] [transport.py] [_log()] starting thread (client mode): 0xa27cb1f0
2025-12-03T14:24:22.209 [DEBUG] [Thread-118196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:24:22.229 [DEBUG] [Thread-118196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:24:22.229 [INFO] [Thread-118196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:22.232 [DEBUG] [Thread-118196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] client lang: <none>
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] server lang: <none>
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] kex follows: False
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] Compression: none
2025-12-03T14:24:22.233 [DEBUG] [Thread-118196] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:24:22.251 [DEBUG] [Thread-118196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:24:22.252 [DEBUG] [Thread-118196] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:24:22.252 [DEBUG] [Thread-118196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:24:22.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:24:22.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:24:22.254 [DEBUG] [Thread-118196] [transport.py] [_log()] userauth is OK
2025-12-03T14:24:22.254 [DEBUG] [Thread-118196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:24:22.254 [DEBUG] [Thread-118196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:24:22.254 [DEBUG] [Thread-118196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:24:22.254 [DEBUG] [Thread-118196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:24:22.269 [INFO] [Thread-118196] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:24:22.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:24:22.926 [DEBUG] [Thread-118196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:24:22.926 [DEBUG] [Thread-118196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:24:22.927 [DEBUG] [Thread-118196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:24:22.968 [DEBUG] [Thread-118196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:24:22.968 [DEBUG] [Thread-118196] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:24:22.971 [DEBUG] [Thread-118196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:24:22.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:24:22.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:24:22.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:24:22.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:24:22.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:24:22.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:24:22.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:24:22.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.516369 -999.00  +21.50  14.30     25   +0.60 1 1 1 1 1   888    0 20.92 32.08 ----- 17.9 14.3 135.4 21.0 30.1 -24.4 29.9 -24.7 30.2 -24.9 30.8 -23.7
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.516369
2025-12-03T14:24:22.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:24:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:24:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:24:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:24:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:24:22.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:24:01', tmtdew=23.38, humidity=20.55, cloud=0.0, wind=14.52, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:23:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:24:22.997 [DEBUG] [Thread-118196] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:24:23.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:24:23.092 [DEBUG] [Thread-118199] [transport.py] [_log()] starting thread (client mode): 0xa27b5750
2025-12-03T14:24:23.092 [DEBUG] [Thread-118199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:24:23.106 [DEBUG] [Thread-118199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:24:23.106 [INFO] [Thread-118199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:24:23.113 [DEBUG] [Thread-118199] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:24:23.113 [DEBUG] [Thread-118199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] client lang: <none>
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] server lang: <none>
2025-12-03T14:24:23.114 [DEBUG] [Thread-118199] [transport.py] [_log()] kex follows: False
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] Compression: none
2025-12-03T14:24:23.115 [DEBUG] [Thread-118199] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:24:23.174 [DEBUG] [Thread-118199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:24:23.174 [DEBUG] [Thread-118199] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:24:23.175 [DEBUG] [Thread-118199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:24:23.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:24:23.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:24:23.230 [DEBUG] [Thread-118199] [transport.py] [_log()] userauth is OK
2025-12-03T14:24:23.230 [DEBUG] [Thread-118199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:24:23.230 [DEBUG] [Thread-118199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:24:23.230 [DEBUG] [Thread-118199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:24:23.231 [DEBUG] [Thread-118199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:24:23.250 [INFO] [Thread-118199] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:24:23.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:24:23.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:24:24.070 [DEBUG] [Thread-118199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:24:24.070 [DEBUG] [Thread-118199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:24:24.118 [DEBUG] [Thread-118199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:24:24.118 [DEBUG] [Thread-118199] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:24:24.127 [DEBUG] [Thread-118199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:24:24.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:24:24.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:24:24.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:24:24.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:24:24.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:24:24.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:24:24.161 [DEBUG] [Thread-118199] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:24:33.491 [DEBUG] [Thread-118201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:48.544 [DEBUG] [Thread-118202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:50.385 [DEBUG] [Thread-118203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:24:54.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:24:54.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:24:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:24:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 24, 33), 24.54, 19.2, 0.0, 16.8, 22.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:24:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:24:33
2025-12-03T14:24:54.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:24:55.109 [DEBUG] [Thread-118204] [transport.py] [_log()] starting thread (client mode): 0xa517eb60
2025-12-03T14:24:55.110 [DEBUG] [Thread-118204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:24:55.131 [DEBUG] [Thread-118204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:24:55.131 [INFO] [Thread-118204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:24:55.134 [DEBUG] [Thread-118204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] client lang: <none>
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] server lang: <none>
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] kex follows: False
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:24:55.135 [DEBUG] [Thread-118204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:24:55.136 [DEBUG] [Thread-118204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:24:55.136 [DEBUG] [Thread-118204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:24:55.136 [DEBUG] [Thread-118204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:24:55.136 [DEBUG] [Thread-118204] [transport.py] [_log()] Compression: none
2025-12-03T14:24:55.136 [DEBUG] [Thread-118204] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:24:55.153 [DEBUG] [Thread-118204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:24:55.153 [DEBUG] [Thread-118204] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:24:55.154 [DEBUG] [Thread-118204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:24:55.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:24:55.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:24:55.156 [DEBUG] [Thread-118204] [transport.py] [_log()] userauth is OK
2025-12-03T14:24:55.156 [DEBUG] [Thread-118204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:24:55.156 [DEBUG] [Thread-118204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:24:55.156 [DEBUG] [Thread-118204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:24:55.156 [DEBUG] [Thread-118204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:24:55.192 [INFO] [Thread-118204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:24:55.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:24:55.887 [DEBUG] [Thread-118204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:24:55.887 [DEBUG] [Thread-118204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:24:55.887 [DEBUG] [Thread-118204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:24:55.928 [DEBUG] [Thread-118204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:24:55.928 [DEBUG] [Thread-118204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:24:55.931 [DEBUG] [Thread-118204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:24:55.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:24:55.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:24:55.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:24:55.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:24:55.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:24:55.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:24:55.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.516716 -999.00  +21.40  14.54     25   +0.60 1 1 1 1 1   888    0 21.74 32.84 ----- 16.3 14.5 129.2 21.2 29.9 -24.2 29.8 -25.8 30.2 -23.1 30.6 -23.2
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:24:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.516716
2025-12-03T14:24:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:24:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:24:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:24:55.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:24:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:24:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:24:33', tmtdew=24.54, humidity=19.2, cloud=0.0, wind=16.8, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:24:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:24:55.957 [DEBUG] [Thread-118204] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:24:56.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:24:56.053 [DEBUG] [Thread-118207] [transport.py] [_log()] starting thread (client mode): 0xa517d5d0
2025-12-03T14:24:56.054 [DEBUG] [Thread-118207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:24:56.068 [DEBUG] [Thread-118207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:24:56.068 [INFO] [Thread-118207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:56.076 [DEBUG] [Thread-118207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] client lang: <none>
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] server lang: <none>
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] kex follows: False
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:24:56.077 [DEBUG] [Thread-118207] [transport.py] [_log()] Compression: none
2025-12-03T14:24:56.078 [DEBUG] [Thread-118207] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:24:56.134 [DEBUG] [Thread-118207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:24:56.134 [DEBUG] [Thread-118207] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:24:56.135 [DEBUG] [Thread-118207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:24:56.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:24:56.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:24:56.193 [DEBUG] [Thread-118207] [transport.py] [_log()] userauth is OK
2025-12-03T14:24:56.193 [DEBUG] [Thread-118207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:24:56.193 [DEBUG] [Thread-118207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:24:56.193 [DEBUG] [Thread-118207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:24:56.193 [DEBUG] [Thread-118207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:24:56.212 [INFO] [Thread-118207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:24:56.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:24:56.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:24:57.023 [DEBUG] [Thread-118207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:24:57.023 [DEBUG] [Thread-118207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:24:57.073 [DEBUG] [Thread-118207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:24:57.074 [DEBUG] [Thread-118207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:24:57.084 [DEBUG] [Thread-118207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:24:57.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:24:57.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:24:57.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:24:57.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:24:57.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:24:57.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:24:57.121 [DEBUG] [Thread-118207] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:25:03.580 [DEBUG] [Thread-118209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:18.621 [DEBUG] [Thread-118210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:19.710 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:19.712 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:25:27.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:25:27.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:25:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 25, 5), 24.0, 19.77, 0.0, 12.55, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:25:27.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:25:05
2025-12-03T14:25:27.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:25:28.081 [DEBUG] [Thread-118211] [transport.py] [_log()] starting thread (client mode): 0xa27b7ac0
2025-12-03T14:25:28.081 [DEBUG] [Thread-118211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:25:28.101 [DEBUG] [Thread-118211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:25:28.101 [INFO] [Thread-118211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:25:28.104 [DEBUG] [Thread-118211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] client lang: <none>
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] server lang: <none>
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] kex follows: False
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] Compression: none
2025-12-03T14:25:28.105 [DEBUG] [Thread-118211] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:25:28.123 [DEBUG] [Thread-118211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:25:28.124 [DEBUG] [Thread-118211] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:25:28.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:25:28.125 [DEBUG] [Thread-118211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:25:28.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:25:28.127 [DEBUG] [Thread-118211] [transport.py] [_log()] userauth is OK
2025-12-03T14:25:28.128 [DEBUG] [Thread-118211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:25:28.128 [DEBUG] [Thread-118211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:25:28.128 [DEBUG] [Thread-118211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:25:28.128 [DEBUG] [Thread-118211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:25:28.148 [INFO] [Thread-118211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:25:28.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:25:28.787 [DEBUG] [Thread-118211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:25:28.788 [DEBUG] [Thread-118211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:25:28.788 [DEBUG] [Thread-118211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:25:28.829 [DEBUG] [Thread-118211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:25:28.829 [DEBUG] [Thread-118211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:25:28.832 [DEBUG] [Thread-118211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:25:28.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:25:28.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:25:28.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:25:28.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:25:28.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:25:28.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:25:28.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:25:28.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.517063 -999.00  +21.20  16.25     25   +0.80 1 1 1 1 1   888    0 21.44 30.57 ----- 15.1 16.2 121.6 20.0 29.8 -24.0 29.7 -25.0 30.1 -23.9 30.6 -24.0
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.517063
2025-12-03T14:25:28.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:25:28.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:25:28.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:25:28.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:25:28.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:25:28.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:25:05', tmtdew=24.0, humidity=19.77, cloud=0.0, wind=12.55, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:24:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:25:28.859 [DEBUG] [Thread-118211] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:25:28.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:25:28.956 [DEBUG] [Thread-118214] [transport.py] [_log()] starting thread (client mode): 0xa517feb0
2025-12-03T14:25:28.956 [DEBUG] [Thread-118214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:25:28.970 [DEBUG] [Thread-118214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:25:28.971 [INFO] [Thread-118214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] client lang: <none>
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] server lang: <none>
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] kex follows: False
2025-12-03T14:25:28.978 [DEBUG] [Thread-118214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] Compression: none
2025-12-03T14:25:28.979 [DEBUG] [Thread-118214] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:25:29.035 [DEBUG] [Thread-118214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:25:29.036 [DEBUG] [Thread-118214] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:25:29.036 [DEBUG] [Thread-118214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:25:29.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:25:29.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:25:29.091 [DEBUG] [Thread-118214] [transport.py] [_log()] userauth is OK
2025-12-03T14:25:29.092 [DEBUG] [Thread-118214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:25:29.092 [DEBUG] [Thread-118214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:25:29.092 [DEBUG] [Thread-118214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:25:29.092 [DEBUG] [Thread-118214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:25:29.110 [INFO] [Thread-118214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:25:29.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:25:29.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:25:29.942 [DEBUG] [Thread-118214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:25:29.942 [DEBUG] [Thread-118214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:25:29.990 [DEBUG] [Thread-118214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:25:29.990 [DEBUG] [Thread-118214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:25:29.999 [DEBUG] [Thread-118214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:25:30.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:25:30.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:25:30.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:25:30.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:25:30.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:25:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:25:30.033 [DEBUG] [Thread-118214] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:25:33.647 [DEBUG] [Thread-118216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:48.701 [DEBUG] [Thread-118217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:25:50.423 [DEBUG] [Thread-118218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:26:00.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:26:00.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:26:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 25, 37), 23.68, 19.98, 0.0, 11.35, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:26:00.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:25:37
2025-12-03T14:26:00.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:26:01.045 [DEBUG] [Thread-118219] [transport.py] [_log()] starting thread (client mode): 0xa27b7940
2025-12-03T14:26:01.045 [DEBUG] [Thread-118219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:26:01.065 [DEBUG] [Thread-118219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:26:01.065 [INFO] [Thread-118219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] client lang: <none>
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] server lang: <none>
2025-12-03T14:26:01.067 [DEBUG] [Thread-118219] [transport.py] [_log()] kex follows: False
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] Compression: none
2025-12-03T14:26:01.068 [DEBUG] [Thread-118219] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:26:01.080 [DEBUG] [Thread-118219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:26:01.080 [DEBUG] [Thread-118219] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:26:01.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:26:01.081 [DEBUG] [Thread-118219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:26:01.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:26:01.081 [DEBUG] [Thread-118219] [transport.py] [_log()] userauth is OK
2025-12-03T14:26:01.081 [DEBUG] [Thread-118219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:26:01.081 [DEBUG] [Thread-118219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:26:01.081 [DEBUG] [Thread-118219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:26:01.082 [DEBUG] [Thread-118219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:26:01.091 [INFO] [Thread-118219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:26:01.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:26:01.835 [DEBUG] [Thread-118219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:26:01.835 [DEBUG] [Thread-118219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:26:01.835 [DEBUG] [Thread-118219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:26:01.877 [DEBUG] [Thread-118219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:26:01.877 [DEBUG] [Thread-118219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:26:01.879 [DEBUG] [Thread-118219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:26:01.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:26:01.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:26:01.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:26:01.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:26:01.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:26:01.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:26:01.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.517757 -999.00  +21.10  11.53     25   +0.30 1 1 1 1 1   888    0 21.72 35.39 ----- 11.9 11.5 140.8 17.9 29.7 -24.1 29.6 -25.8 30.1 -24.9 30.4 -24.5
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.517757
2025-12-03T14:26:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:26:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:26:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:26:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:26:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:26:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:25:37', tmtdew=23.68, humidity=19.98, cloud=0.0, wind=11.35, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:25:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:26:01.899 [DEBUG] [Thread-118219] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:26:01.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:26:01.985 [DEBUG] [Thread-118222] [transport.py] [_log()] starting thread (client mode): 0xa27530d0
2025-12-03T14:26:01.985 [DEBUG] [Thread-118222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:26:02.000 [DEBUG] [Thread-118222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:26:02.000 [INFO] [Thread-118222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:26:02.008 [DEBUG] [Thread-118222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:26:02.008 [DEBUG] [Thread-118222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:26:02.008 [DEBUG] [Thread-118222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:26:02.008 [DEBUG] [Thread-118222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] client lang: <none>
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] server lang: <none>
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] kex follows: False
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] Compression: none
2025-12-03T14:26:02.009 [DEBUG] [Thread-118222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:26:02.070 [DEBUG] [Thread-118222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:26:02.070 [DEBUG] [Thread-118222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:26:02.071 [DEBUG] [Thread-118222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:26:02.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:26:02.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:26:02.130 [DEBUG] [Thread-118222] [transport.py] [_log()] userauth is OK
2025-12-03T14:26:02.130 [DEBUG] [Thread-118222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:26:02.130 [DEBUG] [Thread-118222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:26:02.130 [DEBUG] [Thread-118222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:26:02.130 [DEBUG] [Thread-118222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:26:02.144 [INFO] [Thread-118222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:26:02.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:26:02.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:26:02.981 [DEBUG] [Thread-118222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:26:02.981 [DEBUG] [Thread-118222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:26:03.029 [DEBUG] [Thread-118222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:26:03.029 [DEBUG] [Thread-118222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:26:03.037 [DEBUG] [Thread-118222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:26:03.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:26:03.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:26:03.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:26:03.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:26:03.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:26:03.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:26:03.069 [DEBUG] [Thread-118222] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:26:03.733 [DEBUG] [Thread-118224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:18.778 [DEBUG] [Thread-118225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:19.861 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:19.862 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:33.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:26:33.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:26:33.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:26:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 26, 10), 23.57, 20.15, 0.0, 11.61, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:26:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:26:10
2025-12-03T14:26:33.813 [DEBUG] [Thread-118226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:26:34.026 [DEBUG] [Thread-118227] [transport.py] [_log()] starting thread (client mode): 0xa27a2a70
2025-12-03T14:26:34.026 [DEBUG] [Thread-118227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:26:34.048 [DEBUG] [Thread-118227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:26:34.049 [INFO] [Thread-118227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] client lang: <none>
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] server lang: <none>
2025-12-03T14:26:34.052 [DEBUG] [Thread-118227] [transport.py] [_log()] kex follows: False
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] Compression: none
2025-12-03T14:26:34.053 [DEBUG] [Thread-118227] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:26:34.072 [DEBUG] [Thread-118227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:26:34.073 [DEBUG] [Thread-118227] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:26:34.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:26:34.074 [DEBUG] [Thread-118227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:26:34.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:26:34.076 [DEBUG] [Thread-118227] [transport.py] [_log()] userauth is OK
2025-12-03T14:26:34.076 [DEBUG] [Thread-118227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:26:34.076 [DEBUG] [Thread-118227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:26:34.076 [DEBUG] [Thread-118227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:26:34.076 [DEBUG] [Thread-118227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:26:34.110 [INFO] [Thread-118227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:26:34.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:26:34.751 [DEBUG] [Thread-118227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:26:34.751 [DEBUG] [Thread-118227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:26:34.751 [DEBUG] [Thread-118227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:26:34.792 [DEBUG] [Thread-118227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:26:34.792 [DEBUG] [Thread-118227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:26:34.795 [DEBUG] [Thread-118227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:26:34.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:26:34.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:26:34.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:26:34.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:26:34.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:26:34.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:26:34.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:26:34.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:26:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:26:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.518105 -999.00  +21.20   7.54     25   +0.60 1 1 1 1 1   888    0 21.46 37.73 ----- 8.1 7.5 125.4 13.9 29.7 -24.0 29.6 -25.5 30.2 -23.6 30.6 -23.4
2025-12-03T14:26:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:26:34.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:26:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.518105
2025-12-03T14:26:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:26:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:26:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:26:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:26:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:26:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:26:10', tmtdew=23.57, humidity=20.15, cloud=0.0, wind=11.61, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:26:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:26:34.822 [DEBUG] [Thread-118227] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:26:34.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:26:34.920 [DEBUG] [Thread-118230] [transport.py] [_log()] starting thread (client mode): 0xa2752290
2025-12-03T14:26:34.920 [DEBUG] [Thread-118230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:26:34.938 [DEBUG] [Thread-118230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:26:34.938 [INFO] [Thread-118230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:26:34.945 [DEBUG] [Thread-118230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:26:34.945 [DEBUG] [Thread-118230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:26:34.945 [DEBUG] [Thread-118230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] client lang: <none>
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] server lang: <none>
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] kex follows: False
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] Compression: none
2025-12-03T14:26:34.946 [DEBUG] [Thread-118230] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:26:35.007 [DEBUG] [Thread-118230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:26:35.008 [DEBUG] [Thread-118230] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:26:35.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:26:35.009 [DEBUG] [Thread-118230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:26:35.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:26:35.066 [DEBUG] [Thread-118230] [transport.py] [_log()] userauth is OK
2025-12-03T14:26:35.066 [DEBUG] [Thread-118230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:26:35.066 [DEBUG] [Thread-118230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:26:35.066 [DEBUG] [Thread-118230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:26:35.066 [DEBUG] [Thread-118230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:26:35.085 [INFO] [Thread-118230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:26:35.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:26:35.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:26:35.913 [DEBUG] [Thread-118230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:26:35.913 [DEBUG] [Thread-118230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:26:35.961 [DEBUG] [Thread-118230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:26:35.961 [DEBUG] [Thread-118230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:26:35.970 [DEBUG] [Thread-118230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:26:35.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:26:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:26:35.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:26:35.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:26:35.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:26:35.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:26:36.004 [DEBUG] [Thread-118230] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:26:48.843 [DEBUG] [Thread-118232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:26:50.479 [DEBUG] [Thread-118233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:03.890 [DEBUG] [Thread-118234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:06.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:27:06.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:27:06.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:27:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 26, 42), 23.53, 20.21, 0.0, 14.17, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:27:06.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:26:42
2025-12-03T14:27:06.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:27:06.936 [DEBUG] [Thread-118235] [transport.py] [_log()] starting thread (client mode): 0xa27510f0
2025-12-03T14:27:06.936 [DEBUG] [Thread-118235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:27:06.956 [DEBUG] [Thread-118235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:27:06.956 [INFO] [Thread-118235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:27:06.959 [DEBUG] [Thread-118235] [transport.py] [_log()] client lang: <none>
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] server lang: <none>
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] kex follows: False
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] Compression: none
2025-12-03T14:27:06.960 [DEBUG] [Thread-118235] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:27:06.977 [DEBUG] [Thread-118235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:27:06.977 [DEBUG] [Thread-118235] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:27:06.977 [DEBUG] [Thread-118235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:27:06.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:27:06.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:27:06.978 [DEBUG] [Thread-118235] [transport.py] [_log()] userauth is OK
2025-12-03T14:27:06.978 [DEBUG] [Thread-118235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:27:06.978 [DEBUG] [Thread-118235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:27:06.978 [DEBUG] [Thread-118235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:27:06.978 [DEBUG] [Thread-118235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:27:07.008 [INFO] [Thread-118235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:27:07.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:27:07.731 [DEBUG] [Thread-118235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:27:07.731 [DEBUG] [Thread-118235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:27:07.731 [DEBUG] [Thread-118235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:27:07.772 [DEBUG] [Thread-118235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:27:07.772 [DEBUG] [Thread-118235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:27:07.774 [DEBUG] [Thread-118235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:27:07.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:27:07.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:27:07.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:27:07.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:27:07.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:27:07.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:27:07.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:27:07.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:27:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:27:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.518452 -999.00  +21.30  11.94     25   +0.80 1 1 1 1 1   888    0 21.31 38.83 ----- 11.1 11.9 157.8 18.3 29.7 -24.6 29.6 -25.3 30.1 -24.7 30.6 -24.0
2025-12-03T14:27:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:27:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:27:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.518452
2025-12-03T14:27:07.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:27:07.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:27:07.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:27:07.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:27:07.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:27:07.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:26:42', tmtdew=23.53, humidity=20.21, cloud=0.0, wind=14.17, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:26:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:27:07.795 [DEBUG] [Thread-118235] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:27:07.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:27:07.890 [DEBUG] [Thread-118238] [transport.py] [_log()] starting thread (client mode): 0xa2752620
2025-12-03T14:27:07.890 [DEBUG] [Thread-118238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:27:07.904 [DEBUG] [Thread-118238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:27:07.904 [INFO] [Thread-118238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] client lang: <none>
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] server lang: <none>
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] kex follows: False
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:27:07.912 [DEBUG] [Thread-118238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:27:07.913 [DEBUG] [Thread-118238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:27:07.913 [DEBUG] [Thread-118238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:27:07.913 [DEBUG] [Thread-118238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:27:07.913 [DEBUG] [Thread-118238] [transport.py] [_log()] Compression: none
2025-12-03T14:27:07.913 [DEBUG] [Thread-118238] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:27:07.968 [DEBUG] [Thread-118238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:27:07.969 [DEBUG] [Thread-118238] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:27:07.969 [DEBUG] [Thread-118238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:27:07.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:27:07.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:27:08.025 [DEBUG] [Thread-118238] [transport.py] [_log()] userauth is OK
2025-12-03T14:27:08.025 [DEBUG] [Thread-118238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:27:08.025 [DEBUG] [Thread-118238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:27:08.025 [DEBUG] [Thread-118238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:27:08.025 [DEBUG] [Thread-118238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:27:08.046 [INFO] [Thread-118238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:27:08.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:27:08.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:27:08.892 [DEBUG] [Thread-118238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:27:08.892 [DEBUG] [Thread-118238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:27:08.940 [DEBUG] [Thread-118238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:27:08.940 [DEBUG] [Thread-118238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:27:08.949 [DEBUG] [Thread-118238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:27:08.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:27:08.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:27:08.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:27:08.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:27:08.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:27:08.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:27:08.983 [DEBUG] [Thread-118238] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:27:18.922 [DEBUG] [Thread-118240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:20.013 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:20.013 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:33.957 [DEBUG] [Thread-118241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:39.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:27:39.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:27:39.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:27:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 27, 14), 23.77, 19.87, 0.0, 13.59, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:27:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:27:14
2025-12-03T14:27:39.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:27:39.934 [DEBUG] [Thread-118242] [transport.py] [_log()] starting thread (client mode): 0xa27c8b50
2025-12-03T14:27:39.934 [DEBUG] [Thread-118242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:27:39.954 [DEBUG] [Thread-118242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:27:39.954 [INFO] [Thread-118242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] client lang: <none>
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] server lang: <none>
2025-12-03T14:27:39.958 [DEBUG] [Thread-118242] [transport.py] [_log()] kex follows: False
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] Compression: none
2025-12-03T14:27:39.959 [DEBUG] [Thread-118242] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:27:39.975 [DEBUG] [Thread-118242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:27:39.975 [DEBUG] [Thread-118242] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:27:39.976 [DEBUG] [Thread-118242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:27:39.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:27:39.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:27:39.978 [DEBUG] [Thread-118242] [transport.py] [_log()] userauth is OK
2025-12-03T14:27:39.978 [DEBUG] [Thread-118242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:27:39.978 [DEBUG] [Thread-118242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:27:39.978 [DEBUG] [Thread-118242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:27:39.978 [DEBUG] [Thread-118242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:27:40.003 [INFO] [Thread-118242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:27:40.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:27:40.636 [DEBUG] [Thread-118242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:27:40.637 [DEBUG] [Thread-118242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:27:40.637 [DEBUG] [Thread-118242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:27:40.678 [DEBUG] [Thread-118242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:27:40.678 [DEBUG] [Thread-118242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:27:40.681 [DEBUG] [Thread-118242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:27:40.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:27:40.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:27:40.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:27:40.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:27:40.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:27:40.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:27:40.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.518799 -999.00  +21.20   8.88     25   +0.30 1 1 1 1 1   888    0 21.74 42.43 ----- 9.2 8.9 135.4 16.7 29.7 -24.0 29.4 -25.8 30.1 -24.2 30.6 -24.3
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.518799
2025-12-03T14:27:40.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:27:40.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:27:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:27:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:27:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:27:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:27:14', tmtdew=23.77, humidity=19.87, cloud=0.0, wind=13.59, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:27:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:27:40.702 [DEBUG] [Thread-118242] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:27:40.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:27:40.798 [DEBUG] [Thread-118245] [transport.py] [_log()] starting thread (client mode): 0xa51cf7c0
2025-12-03T14:27:40.798 [DEBUG] [Thread-118245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:27:40.812 [DEBUG] [Thread-118245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:27:40.812 [INFO] [Thread-118245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] client lang: <none>
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] server lang: <none>
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] kex follows: False
2025-12-03T14:27:40.820 [DEBUG] [Thread-118245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] Compression: none
2025-12-03T14:27:40.821 [DEBUG] [Thread-118245] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:27:40.879 [DEBUG] [Thread-118245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:27:40.880 [DEBUG] [Thread-118245] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:27:40.880 [DEBUG] [Thread-118245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:27:40.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:27:40.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:27:40.937 [DEBUG] [Thread-118245] [transport.py] [_log()] userauth is OK
2025-12-03T14:27:40.937 [DEBUG] [Thread-118245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:27:40.937 [DEBUG] [Thread-118245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:27:40.937 [DEBUG] [Thread-118245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:27:40.937 [DEBUG] [Thread-118245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:27:40.955 [INFO] [Thread-118245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:27:40.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:27:40.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:27:41.779 [DEBUG] [Thread-118245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:27:41.779 [DEBUG] [Thread-118245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:27:41.827 [DEBUG] [Thread-118245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:27:41.827 [DEBUG] [Thread-118245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:27:41.836 [DEBUG] [Thread-118245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:27:41.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:27:41.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:27:41.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:27:41.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:27:41.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:27:41.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:27:41.870 [DEBUG] [Thread-118245] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:27:48.990 [DEBUG] [Thread-118247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:27:50.536 [DEBUG] [Thread-118248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:04.035 [DEBUG] [Thread-118249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:28:11.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:28:11.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:28:12.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 27, 46), 23.8, 19.8, 0.0, 15.76, 20.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:28:12.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:27:46
2025-12-03T14:28:12.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:28:12.823 [DEBUG] [Thread-118250] [transport.py] [_log()] starting thread (client mode): 0xa27c9bd0
2025-12-03T14:28:12.824 [DEBUG] [Thread-118250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:28:12.843 [DEBUG] [Thread-118250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:28:12.844 [INFO] [Thread-118250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:28:12.845 [DEBUG] [Thread-118250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:28:12.845 [DEBUG] [Thread-118250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:28:12.845 [DEBUG] [Thread-118250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] client lang: <none>
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] server lang: <none>
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] kex follows: False
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] Compression: none
2025-12-03T14:28:12.846 [DEBUG] [Thread-118250] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:28:12.864 [DEBUG] [Thread-118250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:28:12.864 [DEBUG] [Thread-118250] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:28:12.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:28:12.866 [DEBUG] [Thread-118250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:28:12.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:28:12.867 [DEBUG] [Thread-118250] [transport.py] [_log()] userauth is OK
2025-12-03T14:28:12.868 [DEBUG] [Thread-118250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:28:12.868 [DEBUG] [Thread-118250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:28:12.868 [DEBUG] [Thread-118250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:28:12.868 [DEBUG] [Thread-118250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:28:12.893 [INFO] [Thread-118250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:28:12.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:28:13.658 [DEBUG] [Thread-118250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:28:13.658 [DEBUG] [Thread-118250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:28:13.658 [DEBUG] [Thread-118250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:28:13.699 [DEBUG] [Thread-118250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:28:13.699 [DEBUG] [Thread-118250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:28:13.701 [DEBUG] [Thread-118250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:28:13.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:28:13.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:28:13.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:28:13.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:28:13.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:28:13.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:28:13.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:28:13.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.519146 -999.00  +21.20  17.29     24   +0.30 1 1 1 1 1   888    0 21.94 39.36 ----- 13.9 17.3 164.4 18.3 29.6 -26.1 29.4 -27.0 29.9 -25.7 30.5 -25.5
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.519146
2025-12-03T14:28:13.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:28:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:28:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:28:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:28:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:28:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:27:46', tmtdew=23.8, humidity=19.8, cloud=0.0, wind=15.76, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:27:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:28:13.722 [DEBUG] [Thread-118250] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:28:13.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:28:13.816 [DEBUG] [Thread-118253] [transport.py] [_log()] starting thread (client mode): 0xa27a0760
2025-12-03T14:28:13.816 [DEBUG] [Thread-118253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:28:13.831 [DEBUG] [Thread-118253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:28:13.831 [INFO] [Thread-118253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:28:13.840 [DEBUG] [Thread-118253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:28:13.840 [DEBUG] [Thread-118253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] client lang: <none>
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] server lang: <none>
2025-12-03T14:28:13.841 [DEBUG] [Thread-118253] [transport.py] [_log()] kex follows: False
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] Compression: none
2025-12-03T14:28:13.842 [DEBUG] [Thread-118253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:28:13.894 [DEBUG] [Thread-118253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:28:13.895 [DEBUG] [Thread-118253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:28:13.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:28:13.896 [DEBUG] [Thread-118253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:28:13.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:28:13.951 [DEBUG] [Thread-118253] [transport.py] [_log()] userauth is OK
2025-12-03T14:28:13.952 [DEBUG] [Thread-118253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:28:13.952 [DEBUG] [Thread-118253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:28:13.952 [DEBUG] [Thread-118253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:28:13.952 [DEBUG] [Thread-118253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:28:13.974 [INFO] [Thread-118253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:28:13.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:28:13.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:28:14.780 [DEBUG] [Thread-118253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:28:14.780 [DEBUG] [Thread-118253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:28:14.828 [DEBUG] [Thread-118253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:28:14.828 [DEBUG] [Thread-118253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:28:14.837 [DEBUG] [Thread-118253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:28:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:28:14.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:28:14.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:28:14.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:28:14.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:28:14.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:28:14.871 [DEBUG] [Thread-118253] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:28:19.064 [DEBUG] [Thread-118255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:20.152 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:20.153 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:34.100 [DEBUG] [Thread-118256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:28:44.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:28:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:28:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 28, 18), 23.93, 19.63, 0.0, 15.53, 20.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:28:45.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:28:18
2025-12-03T14:28:45.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:28:45.833 [DEBUG] [Thread-118257] [transport.py] [_log()] starting thread (client mode): 0xa2753f70
2025-12-03T14:28:45.833 [DEBUG] [Thread-118257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:28:45.853 [DEBUG] [Thread-118257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:28:45.853 [INFO] [Thread-118257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] client lang: <none>
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] server lang: <none>
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] kex follows: False
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] Compression: none
2025-12-03T14:28:45.857 [DEBUG] [Thread-118257] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:28:45.874 [DEBUG] [Thread-118257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:28:45.875 [DEBUG] [Thread-118257] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:28:45.875 [DEBUG] [Thread-118257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:28:45.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:28:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:28:45.877 [DEBUG] [Thread-118257] [transport.py] [_log()] userauth is OK
2025-12-03T14:28:45.877 [DEBUG] [Thread-118257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:28:45.877 [DEBUG] [Thread-118257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:28:45.877 [DEBUG] [Thread-118257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:28:45.877 [DEBUG] [Thread-118257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:28:45.912 [INFO] [Thread-118257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:28:45.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:28:46.537 [DEBUG] [Thread-118257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:28:46.537 [DEBUG] [Thread-118257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:28:46.538 [DEBUG] [Thread-118257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:28:46.578 [DEBUG] [Thread-118257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:28:46.578 [DEBUG] [Thread-118257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:28:46.581 [DEBUG] [Thread-118257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:28:46.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:28:46.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:28:46.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:28:46.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:28:46.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:28:46.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:28:46.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:28:46.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.519493 -999.00  +21.00  17.11     25   +0.20 1 1 1 1 1   888    0 21.77 42.86 ----- 13.0 17.1 167.0 19.8 29.6 -25.7 29.0 -27.7 29.9 -24.9 30.5 -24.6
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.519493
2025-12-03T14:28:46.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:28:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:28:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:28:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:28:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:28:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:28:18', tmtdew=23.93, humidity=19.63, cloud=0.0, wind=15.53, temperature=20.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:28:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:28:46.605 [DEBUG] [Thread-118257] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:28:46.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:28:46.701 [DEBUG] [Thread-118260] [transport.py] [_log()] starting thread (client mode): 0xa27520e0
2025-12-03T14:28:46.702 [DEBUG] [Thread-118260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:28:46.720 [DEBUG] [Thread-118260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:28:46.720 [INFO] [Thread-118260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:28:46.728 [DEBUG] [Thread-118260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] client lang: <none>
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] server lang: <none>
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] kex follows: False
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] Compression: none
2025-12-03T14:28:46.729 [DEBUG] [Thread-118260] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:28:46.786 [DEBUG] [Thread-118260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:28:46.786 [DEBUG] [Thread-118260] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:28:46.787 [DEBUG] [Thread-118260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:28:46.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:28:46.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:28:46.842 [DEBUG] [Thread-118260] [transport.py] [_log()] userauth is OK
2025-12-03T14:28:46.843 [DEBUG] [Thread-118260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:28:46.843 [DEBUG] [Thread-118260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:28:46.843 [DEBUG] [Thread-118260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:28:46.843 [DEBUG] [Thread-118260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:28:46.861 [INFO] [Thread-118260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:28:46.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:28:46.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:28:47.689 [DEBUG] [Thread-118260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:28:47.689 [DEBUG] [Thread-118260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:28:47.737 [DEBUG] [Thread-118260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:28:47.737 [DEBUG] [Thread-118260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:28:47.746 [DEBUG] [Thread-118260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:28:47.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:28:47.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:28:47.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:28:47.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:28:47.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:28:47.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:28:47.781 [DEBUG] [Thread-118260] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:28:49.128 [DEBUG] [Thread-118262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:28:50.576 [DEBUG] [Thread-118263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:04.171 [DEBUG] [Thread-118264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:17.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:29:17.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:29:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:29:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 28, 50), 24.01, 19.53, 0.0, 16.29, 20.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:29:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:28:50
2025-12-03T14:29:18.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:29:18.748 [DEBUG] [Thread-118265] [transport.py] [_log()] starting thread (client mode): 0xa27b5a80
2025-12-03T14:29:18.748 [DEBUG] [Thread-118265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:29:18.768 [DEBUG] [Thread-118265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:29:18.768 [INFO] [Thread-118265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] client lang: <none>
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] server lang: <none>
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] kex follows: False
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] Compression: none
2025-12-03T14:29:18.770 [DEBUG] [Thread-118265] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:29:18.782 [DEBUG] [Thread-118265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:29:18.782 [DEBUG] [Thread-118265] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:29:18.782 [DEBUG] [Thread-118265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:29:18.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:29:18.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:29:18.783 [DEBUG] [Thread-118265] [transport.py] [_log()] userauth is OK
2025-12-03T14:29:18.783 [DEBUG] [Thread-118265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:29:18.783 [DEBUG] [Thread-118265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:29:18.783 [DEBUG] [Thread-118265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:29:18.783 [DEBUG] [Thread-118265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:29:18.794 [INFO] [Thread-118265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:29:18.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:29:19.200 [DEBUG] [Thread-118267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:19.514 [DEBUG] [Thread-118265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:29:19.514 [DEBUG] [Thread-118265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:29:19.515 [DEBUG] [Thread-118265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:29:19.555 [DEBUG] [Thread-118265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:29:19.555 [DEBUG] [Thread-118265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:29:19.558 [DEBUG] [Thread-118265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:29:19.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:29:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:29:19.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:29:19.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:29:19.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:29:19.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:29:19.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:29:19.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:29:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:29:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.519841 -999.00  +21.10   8.82     25   +0.30 1 1 1 1 1   888    0 22.12 44.98 ----- 10.7 8.8 163.6 16.2 29.6 -24.7 29.1 -25.5 29.9 -25.1 30.6 -24.8
2025-12-03T14:29:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:29:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:29:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.519841
2025-12-03T14:29:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:29:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:29:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:29:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:29:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:29:19.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:28:50', tmtdew=24.01, humidity=19.53, cloud=0.0, wind=16.29, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:28:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:29:19.585 [DEBUG] [Thread-118265] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:29:19.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:29:19.681 [DEBUG] [Thread-118269] [transport.py] [_log()] starting thread (client mode): 0xa51cce50
2025-12-03T14:29:19.681 [DEBUG] [Thread-118269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:29:19.696 [DEBUG] [Thread-118269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:29:19.696 [INFO] [Thread-118269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:29:19.703 [DEBUG] [Thread-118269] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:29:19.703 [DEBUG] [Thread-118269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:29:19.703 [DEBUG] [Thread-118269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] client lang: <none>
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] server lang: <none>
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] kex follows: False
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] Compression: none
2025-12-03T14:29:19.704 [DEBUG] [Thread-118269] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:29:19.761 [DEBUG] [Thread-118269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:29:19.762 [DEBUG] [Thread-118269] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:29:19.762 [DEBUG] [Thread-118269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:29:19.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:29:19.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:29:19.818 [DEBUG] [Thread-118269] [transport.py] [_log()] userauth is OK
2025-12-03T14:29:19.818 [DEBUG] [Thread-118269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:29:19.819 [DEBUG] [Thread-118269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:29:19.819 [DEBUG] [Thread-118269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:29:19.819 [DEBUG] [Thread-118269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:29:19.838 [INFO] [Thread-118269] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:29:19.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:29:19.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:29:20.294 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:20.295 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:20.659 [DEBUG] [Thread-118269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:29:20.659 [DEBUG] [Thread-118269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:29:20.708 [DEBUG] [Thread-118269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:29:20.708 [DEBUG] [Thread-118269] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:29:20.716 [DEBUG] [Thread-118269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:29:20.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:29:20.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:29:20.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:29:20.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:29:20.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:29:20.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:29:20.750 [DEBUG] [Thread-118269] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:29:34.230 [DEBUG] [Thread-118271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:49.276 [DEBUG] [Thread-118272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:50.609 [DEBUG] [Thread-118273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:29:50.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:29:50.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:29:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:29:51.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 29, 22), 24.14, 19.4, 0.0, 17.63, 21.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:29:51.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:29:22
2025-12-03T14:29:51.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:29:51.695 [DEBUG] [Thread-118274] [transport.py] [_log()] starting thread (client mode): 0xa51cd960
2025-12-03T14:29:51.695 [DEBUG] [Thread-118274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:29:51.714 [DEBUG] [Thread-118274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:29:51.714 [INFO] [Thread-118274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] client lang: <none>
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] server lang: <none>
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] kex follows: False
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] Compression: none
2025-12-03T14:29:51.718 [DEBUG] [Thread-118274] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:29:51.731 [DEBUG] [Thread-118274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:29:51.731 [DEBUG] [Thread-118274] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:29:51.732 [DEBUG] [Thread-118274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:29:51.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:29:51.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:29:51.733 [DEBUG] [Thread-118274] [transport.py] [_log()] userauth is OK
2025-12-03T14:29:51.733 [DEBUG] [Thread-118274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:29:51.733 [DEBUG] [Thread-118274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:29:51.733 [DEBUG] [Thread-118274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:29:51.733 [DEBUG] [Thread-118274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:29:51.751 [INFO] [Thread-118274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:29:51.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:29:52.402 [DEBUG] [Thread-118274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:29:52.402 [DEBUG] [Thread-118274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:29:52.402 [DEBUG] [Thread-118274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:29:52.442 [DEBUG] [Thread-118274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:29:52.443 [DEBUG] [Thread-118274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:29:52.445 [DEBUG] [Thread-118274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:29:52.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:29:52.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:29:52.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:29:52.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:29:52.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:29:52.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:29:52.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:29:52.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:29:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:29:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.520188 -999.00  +21.10  12.66     24   +0.20 1 1 1 1 1   888    0 21.64 44.13 ----- 8.3 12.7 139.4 19.9 29.6 -25.6 29.1 -26.7 29.8 -25.6 30.5 -26.0
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.520188
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:29:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:29:22', tmtdew=24.14, humidity=19.4, cloud=0.0, wind=17.63, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:29:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:29:52.464 [DEBUG] [Thread-118274] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:29:52.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:29:52.548 [DEBUG] [Thread-118277] [transport.py] [_log()] starting thread (client mode): 0xa2753a00
2025-12-03T14:29:52.548 [DEBUG] [Thread-118277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:29:52.563 [DEBUG] [Thread-118277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:29:52.563 [INFO] [Thread-118277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:29:52.570 [DEBUG] [Thread-118277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] client lang: <none>
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] server lang: <none>
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] kex follows: False
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] Compression: none
2025-12-03T14:29:52.571 [DEBUG] [Thread-118277] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:29:52.628 [DEBUG] [Thread-118277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:29:52.628 [DEBUG] [Thread-118277] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:29:52.628 [DEBUG] [Thread-118277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:29:52.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:29:52.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:29:52.685 [DEBUG] [Thread-118277] [transport.py] [_log()] userauth is OK
2025-12-03T14:29:52.685 [DEBUG] [Thread-118277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:29:52.685 [DEBUG] [Thread-118277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:29:52.685 [DEBUG] [Thread-118277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:29:52.685 [DEBUG] [Thread-118277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:29:52.699 [INFO] [Thread-118277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:29:52.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:29:52.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:29:53.535 [DEBUG] [Thread-118277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:29:53.535 [DEBUG] [Thread-118277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:29:53.583 [DEBUG] [Thread-118277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:29:53.583 [DEBUG] [Thread-118277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:29:53.591 [DEBUG] [Thread-118277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:29:53.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:29:53.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:29:53.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:29:53.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:29:53.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:29:53.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:29:53.622 [DEBUG] [Thread-118277] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:30:04.304 [DEBUG] [Thread-118279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:19.350 [DEBUG] [Thread-118280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:20.450 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:20.451 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:23.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:30:23.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:30:23.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:30:24.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 29, 54), 23.99, 19.69, 0.0, 12.39, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:30:24.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:29:54
2025-12-03T14:30:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:30:24.561 [DEBUG] [Thread-118281] [transport.py] [_log()] starting thread (client mode): 0xa27b7a00
2025-12-03T14:30:24.561 [DEBUG] [Thread-118281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:30:24.582 [DEBUG] [Thread-118281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:30:24.582 [INFO] [Thread-118281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] client lang: <none>
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] server lang: <none>
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] kex follows: False
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] Compression: none
2025-12-03T14:30:24.585 [DEBUG] [Thread-118281] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:30:24.601 [DEBUG] [Thread-118281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:30:24.601 [DEBUG] [Thread-118281] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:30:24.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:30:24.602 [DEBUG] [Thread-118281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:30:24.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:30:24.604 [DEBUG] [Thread-118281] [transport.py] [_log()] userauth is OK
2025-12-03T14:30:24.604 [DEBUG] [Thread-118281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:30:24.604 [DEBUG] [Thread-118281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:30:24.604 [DEBUG] [Thread-118281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:30:24.604 [DEBUG] [Thread-118281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:30:24.629 [INFO] [Thread-118281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:30:24.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:30:25.418 [DEBUG] [Thread-118281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:30:25.418 [DEBUG] [Thread-118281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:30:25.419 [DEBUG] [Thread-118281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:30:25.460 [DEBUG] [Thread-118281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:30:25.460 [DEBUG] [Thread-118281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:30:25.463 [DEBUG] [Thread-118281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:30:25.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:30:25.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:30:25.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:30:25.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:30:25.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:30:25.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:30:25.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.520535 -999.00  +21.20   9.09     25   +0.50 1 1 1 1 1   888    0 21.75 43.72 ----- 17.3 9.1 118.8 11.4 29.6 -25.0 29.1 -26.6 30.0 -24.5 30.6 -23.9
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:30:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.520535
2025-12-03T14:30:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:30:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:30:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:30:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:30:25.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:30:25.485 [DEBUG] [Thread-118281] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:30:25.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:29:54', tmtdew=23.99, humidity=19.69, cloud=0.0, wind=12.39, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:29:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:30:25.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:30:25.582 [DEBUG] [Thread-118284] [transport.py] [_log()] starting thread (client mode): 0xa27b6110
2025-12-03T14:30:25.582 [DEBUG] [Thread-118284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:30:25.597 [DEBUG] [Thread-118284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:30:25.597 [INFO] [Thread-118284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:30:25.604 [DEBUG] [Thread-118284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:30:25.605 [DEBUG] [Thread-118284] [transport.py] [_log()] client lang: <none>
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] server lang: <none>
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] kex follows: False
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] Compression: none
2025-12-03T14:30:25.606 [DEBUG] [Thread-118284] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:30:25.664 [DEBUG] [Thread-118284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:30:25.665 [DEBUG] [Thread-118284] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:30:25.665 [DEBUG] [Thread-118284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:30:25.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:30:25.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:30:25.721 [DEBUG] [Thread-118284] [transport.py] [_log()] userauth is OK
2025-12-03T14:30:25.721 [DEBUG] [Thread-118284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:30:25.721 [DEBUG] [Thread-118284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:30:25.721 [DEBUG] [Thread-118284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:30:25.721 [DEBUG] [Thread-118284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:30:25.741 [INFO] [Thread-118284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:30:25.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:30:25.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:30:26.615 [DEBUG] [Thread-118284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:30:26.616 [DEBUG] [Thread-118284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:30:26.663 [DEBUG] [Thread-118284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:30:26.663 [DEBUG] [Thread-118284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:30:26.672 [DEBUG] [Thread-118284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:30:26.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:30:26.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:30:26.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:30:26.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:30:26.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:30:26.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:30:26.706 [DEBUG] [Thread-118284] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:30:34.377 [DEBUG] [Thread-118286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:49.414 [DEBUG] [Thread-118287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:50.653 [DEBUG] [Thread-118288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:30:56.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:30:56.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:30:56.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:30:57.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 30, 26), 23.9, 19.79, 0.0, 10.96, 20.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:30:57.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:30:26
2025-12-03T14:30:57.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:30:57.662 [DEBUG] [Thread-118289] [transport.py] [_log()] starting thread (client mode): 0xa27c9270
2025-12-03T14:30:57.662 [DEBUG] [Thread-118289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:30:57.682 [DEBUG] [Thread-118289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:30:57.682 [INFO] [Thread-118289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] client lang: <none>
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] server lang: <none>
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] kex follows: False
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] Compression: none
2025-12-03T14:30:57.685 [DEBUG] [Thread-118289] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:30:57.702 [DEBUG] [Thread-118289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:30:57.702 [DEBUG] [Thread-118289] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:30:57.702 [DEBUG] [Thread-118289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:30:57.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:30:57.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:30:57.704 [DEBUG] [Thread-118289] [transport.py] [_log()] userauth is OK
2025-12-03T14:30:57.704 [DEBUG] [Thread-118289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:30:57.704 [DEBUG] [Thread-118289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:30:57.705 [DEBUG] [Thread-118289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:30:57.705 [DEBUG] [Thread-118289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:30:57.728 [INFO] [Thread-118289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:30:57.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:30:58.356 [DEBUG] [Thread-118289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:30:58.357 [DEBUG] [Thread-118289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:30:58.357 [DEBUG] [Thread-118289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:30:58.398 [DEBUG] [Thread-118289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:30:58.398 [DEBUG] [Thread-118289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:30:58.401 [DEBUG] [Thread-118289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:30:58.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:30:58.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:30:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:30:58.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:30:58.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:30:58.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:30:58.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.521230 -999.00  +21.20  15.18     25   +0.40 1 1 1 1 1   888    0 21.60 41.69 ----- 12.3 15.2 132.0 18.4 29.6 -25.0 29.3 -26.7 30.1 -26.0 30.9 -25.6
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:30:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.521230
2025-12-03T14:30:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:30:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:30:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:30:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:30:58.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:30:58.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:30:26', tmtdew=23.9, humidity=19.79, cloud=0.0, wind=10.96, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:30:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:30:58.430 [DEBUG] [Thread-118289] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:30:58.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:30:58.527 [DEBUG] [Thread-118292] [transport.py] [_log()] starting thread (client mode): 0xa2760940
2025-12-03T14:30:58.527 [DEBUG] [Thread-118292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:30:58.542 [DEBUG] [Thread-118292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:30:58.542 [INFO] [Thread-118292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:30:58.550 [DEBUG] [Thread-118292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] client lang: <none>
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] server lang: <none>
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] kex follows: False
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:30:58.551 [DEBUG] [Thread-118292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:30:58.552 [DEBUG] [Thread-118292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:30:58.552 [DEBUG] [Thread-118292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:30:58.552 [DEBUG] [Thread-118292] [transport.py] [_log()] Compression: none
2025-12-03T14:30:58.552 [DEBUG] [Thread-118292] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:30:58.608 [DEBUG] [Thread-118292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:30:58.608 [DEBUG] [Thread-118292] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:30:58.609 [DEBUG] [Thread-118292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:30:58.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:30:58.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:30:58.668 [DEBUG] [Thread-118292] [transport.py] [_log()] userauth is OK
2025-12-03T14:30:58.668 [DEBUG] [Thread-118292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:30:58.668 [DEBUG] [Thread-118292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:30:58.668 [DEBUG] [Thread-118292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:30:58.668 [DEBUG] [Thread-118292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:30:58.688 [INFO] [Thread-118292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:30:58.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:30:58.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:30:59.507 [DEBUG] [Thread-118292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:30:59.507 [DEBUG] [Thread-118292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:30:59.554 [DEBUG] [Thread-118292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:30:59.554 [DEBUG] [Thread-118292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:30:59.563 [DEBUG] [Thread-118292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:30:59.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:30:59.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:30:59.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:30:59.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:30:59.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:30:59.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:30:59.595 [DEBUG] [Thread-118292] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:31:04.443 [DEBUG] [Thread-118294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:19.485 [DEBUG] [Thread-118295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:20.590 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:20.591 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:31:29.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:31:29.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:31:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 30, 58), 24.07, 19.69, 0.0, 14.66, 20.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:31:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:30:58
2025-12-03T14:31:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:31:30.566 [DEBUG] [Thread-118296] [transport.py] [_log()] starting thread (client mode): 0xa2761ab0
2025-12-03T14:31:30.566 [DEBUG] [Thread-118296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:31:30.585 [DEBUG] [Thread-118296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:31:30.585 [INFO] [Thread-118296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] client lang: <none>
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] server lang: <none>
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] kex follows: False
2025-12-03T14:31:30.589 [DEBUG] [Thread-118296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] Compression: none
2025-12-03T14:31:30.590 [DEBUG] [Thread-118296] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:31:30.609 [DEBUG] [Thread-118296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:31:30.610 [DEBUG] [Thread-118296] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:31:30.610 [DEBUG] [Thread-118296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:31:30.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:31:30.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:31:30.613 [DEBUG] [Thread-118296] [transport.py] [_log()] userauth is OK
2025-12-03T14:31:30.613 [DEBUG] [Thread-118296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:31:30.613 [DEBUG] [Thread-118296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:31:30.613 [DEBUG] [Thread-118296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:31:30.613 [DEBUG] [Thread-118296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:31:30.631 [INFO] [Thread-118296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:31:30.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:31:31.368 [DEBUG] [Thread-118296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:31:31.368 [DEBUG] [Thread-118296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:31:31.368 [DEBUG] [Thread-118296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:31:31.410 [DEBUG] [Thread-118296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:31:31.410 [DEBUG] [Thread-118296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:31:31.412 [DEBUG] [Thread-118296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:31:31.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:31:31.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:31:31.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:31:31.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:31:31.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:31:31.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:31:31.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.521577 -999.00  +21.00  12.07     25   +0.20 1 1 1 1 1   888    0 22.02 41.31 ----- 9.6 12.1 124.1 16.6 29.6 -25.6 29.4 -27.1 30.3 -25.8 31.0 -24.3
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.521577
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:31:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:30:58', tmtdew=24.07, humidity=19.69, cloud=0.0, wind=14.66, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:31:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:31:31.428 [DEBUG] [Thread-118296] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:31:31.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:31:31.512 [DEBUG] [Thread-118299] [transport.py] [_log()] starting thread (client mode): 0xa2753130
2025-12-03T14:31:31.513 [DEBUG] [Thread-118299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:31:31.528 [DEBUG] [Thread-118299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:31:31.528 [INFO] [Thread-118299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] client lang: <none>
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] server lang: <none>
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] kex follows: False
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] Compression: none
2025-12-03T14:31:31.536 [DEBUG] [Thread-118299] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:31:31.595 [DEBUG] [Thread-118299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:31:31.595 [DEBUG] [Thread-118299] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:31:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:31:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:31:31.596 [DEBUG] [Thread-118299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:31:31.651 [DEBUG] [Thread-118299] [transport.py] [_log()] userauth is OK
2025-12-03T14:31:31.651 [DEBUG] [Thread-118299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:31:31.651 [DEBUG] [Thread-118299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:31:31.651 [DEBUG] [Thread-118299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:31:31.651 [DEBUG] [Thread-118299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:31:31.669 [INFO] [Thread-118299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:31:31.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:31:31.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:31:32.501 [DEBUG] [Thread-118299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:31:32.501 [DEBUG] [Thread-118299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:31:32.548 [DEBUG] [Thread-118299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:31:32.549 [DEBUG] [Thread-118299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:31:32.557 [DEBUG] [Thread-118299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:31:32.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:31:32.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:31:32.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:31:32.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:31:32.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:31:32.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:31:32.588 [DEBUG] [Thread-118299] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:31:34.515 [DEBUG] [Thread-118301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:49.556 [DEBUG] [Thread-118302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:31:50.683 [DEBUG] [Thread-118303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:02.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:32:02.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:32:02.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:32:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 31, 30), 23.85, 19.92, 0.0, 16.0, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:32:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:31:30
2025-12-03T14:32:03.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:32:03.559 [DEBUG] [Thread-118304] [transport.py] [_log()] starting thread (client mode): 0xa2762950
2025-12-03T14:32:03.559 [DEBUG] [Thread-118304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:32:03.579 [DEBUG] [Thread-118304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:32:03.579 [INFO] [Thread-118304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] client lang: <none>
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] server lang: <none>
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] kex follows: False
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] Compression: none
2025-12-03T14:32:03.583 [DEBUG] [Thread-118304] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:32:03.601 [DEBUG] [Thread-118304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:32:03.601 [DEBUG] [Thread-118304] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:32:03.601 [DEBUG] [Thread-118304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:32:03.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:32:03.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:32:03.644 [DEBUG] [Thread-118304] [transport.py] [_log()] userauth is OK
2025-12-03T14:32:03.644 [DEBUG] [Thread-118304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:32:03.644 [DEBUG] [Thread-118304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:32:03.644 [DEBUG] [Thread-118304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:32:03.644 [DEBUG] [Thread-118304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:32:03.663 [INFO] [Thread-118304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:32:03.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:32:04.296 [DEBUG] [Thread-118304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:32:04.296 [DEBUG] [Thread-118304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:32:04.296 [DEBUG] [Thread-118304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:32:04.337 [DEBUG] [Thread-118304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:32:04.337 [DEBUG] [Thread-118304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:32:04.340 [DEBUG] [Thread-118304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:32:04.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:32:04.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:32:04.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:32:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:32:04.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:32:04.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:32:04.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.521924 -999.00  +20.90  10.35     25   +0.20 1 1 1 1 1   888    0 21.47 36.83 ----- 10.6 10.3 128.2 12.0 29.7 -25.3 29.5 -26.9 30.3 -27.3 31.0 -26.3
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.521924
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:32:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:31:30', tmtdew=23.85, humidity=19.92, cloud=0.0, wind=16.0, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:31:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:32:04.360 [DEBUG] [Thread-118304] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:32:04.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:32:04.445 [DEBUG] [Thread-118307] [transport.py] [_log()] starting thread (client mode): 0xa2761900
2025-12-03T14:32:04.445 [DEBUG] [Thread-118307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:32:04.460 [DEBUG] [Thread-118307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:32:04.460 [INFO] [Thread-118307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] client lang: <none>
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] server lang: <none>
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] kex follows: False
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] Compression: none
2025-12-03T14:32:04.467 [DEBUG] [Thread-118307] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:32:04.525 [DEBUG] [Thread-118307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:32:04.525 [DEBUG] [Thread-118307] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:32:04.525 [DEBUG] [Thread-118307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:32:04.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:32:04.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:32:04.582 [DEBUG] [Thread-118307] [transport.py] [_log()] userauth is OK
2025-12-03T14:32:04.582 [DEBUG] [Thread-118307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:32:04.582 [DEBUG] [Thread-118307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:32:04.582 [DEBUG] [Thread-118307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:32:04.582 [DEBUG] [Thread-118307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:32:04.582 [DEBUG] [Thread-118309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:04.596 [INFO] [Thread-118307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:32:04.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:32:04.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:32:05.424 [DEBUG] [Thread-118307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:32:05.425 [DEBUG] [Thread-118307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:32:05.472 [DEBUG] [Thread-118307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:32:05.473 [DEBUG] [Thread-118307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:32:05.481 [DEBUG] [Thread-118307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:32:05.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:32:05.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:32:05.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:32:05.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:32:05.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:32:05.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:32:05.519 [DEBUG] [Thread-118307] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:32:19.616 [DEBUG] [Thread-118310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:20.746 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:20.747 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:34.646 [DEBUG] [Thread-118311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:35.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:32:35.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:32:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:32:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 32, 3), 23.53, 20.33, 0.0, 12.0, 20.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:32:36.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:32:03
2025-12-03T14:32:36.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:32:36.562 [DEBUG] [Thread-118312] [transport.py] [_log()] starting thread (client mode): 0xa2763040
2025-12-03T14:32:36.562 [DEBUG] [Thread-118312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:32:36.582 [DEBUG] [Thread-118312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:32:36.582 [INFO] [Thread-118312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:32:36.585 [DEBUG] [Thread-118312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:32:36.585 [DEBUG] [Thread-118312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:32:36.585 [DEBUG] [Thread-118312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:32:36.585 [DEBUG] [Thread-118312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:36.585 [DEBUG] [Thread-118312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] client lang: <none>
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] server lang: <none>
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] kex follows: False
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] Compression: none
2025-12-03T14:32:36.586 [DEBUG] [Thread-118312] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:32:36.601 [DEBUG] [Thread-118312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:32:36.601 [DEBUG] [Thread-118312] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:32:36.601 [DEBUG] [Thread-118312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:32:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:32:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:32:36.602 [DEBUG] [Thread-118312] [transport.py] [_log()] userauth is OK
2025-12-03T14:32:36.602 [DEBUG] [Thread-118312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:32:36.602 [DEBUG] [Thread-118312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:32:36.602 [DEBUG] [Thread-118312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:32:36.602 [DEBUG] [Thread-118312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:32:36.611 [INFO] [Thread-118312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:32:36.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:32:37.340 [DEBUG] [Thread-118312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:32:37.341 [DEBUG] [Thread-118312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:32:37.341 [DEBUG] [Thread-118312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:32:37.382 [DEBUG] [Thread-118312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:32:37.382 [DEBUG] [Thread-118312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:32:37.387 [DEBUG] [Thread-118312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:32:37.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:32:37.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:32:37.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:32:37.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:32:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:32:37.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:32:37.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.522271 -999.00  +21.20  10.79     25   +0.50 1 1 1 1 1   888    0 21.95 34.05 ----- 8.3 10.8 122.3 12.1 29.7 -26.1 29.5 -27.8 30.4 -25.9 31.1 -26.6
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:32:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.522271
2025-12-03T14:32:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:32:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:32:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:32:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:32:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:32:37.411 [DEBUG] [Thread-118312] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:32:37.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:32:03', tmtdew=23.53, humidity=20.33, cloud=0.0, wind=12.0, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:32:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:32:37.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:32:37.515 [DEBUG] [Thread-118315] [transport.py] [_log()] starting thread (client mode): 0xa2761540
2025-12-03T14:32:37.516 [DEBUG] [Thread-118315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:32:37.531 [DEBUG] [Thread-118315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:32:37.531 [INFO] [Thread-118315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:32:37.538 [DEBUG] [Thread-118315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] client lang: <none>
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] server lang: <none>
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] kex follows: False
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:32:37.539 [DEBUG] [Thread-118315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:32:37.540 [DEBUG] [Thread-118315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:32:37.540 [DEBUG] [Thread-118315] [transport.py] [_log()] Compression: none
2025-12-03T14:32:37.540 [DEBUG] [Thread-118315] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:32:37.597 [DEBUG] [Thread-118315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:32:37.597 [DEBUG] [Thread-118315] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:32:37.598 [DEBUG] [Thread-118315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:32:37.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:32:37.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:32:37.654 [DEBUG] [Thread-118315] [transport.py] [_log()] userauth is OK
2025-12-03T14:32:37.654 [DEBUG] [Thread-118315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:32:37.654 [DEBUG] [Thread-118315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:32:37.654 [DEBUG] [Thread-118315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:32:37.654 [DEBUG] [Thread-118315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:32:37.673 [INFO] [Thread-118315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:32:37.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:32:37.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:32:38.508 [DEBUG] [Thread-118315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:32:38.508 [DEBUG] [Thread-118315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:32:38.556 [DEBUG] [Thread-118315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:32:38.556 [DEBUG] [Thread-118315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:32:38.565 [DEBUG] [Thread-118315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:32:38.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:32:38.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:32:38.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:32:38.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:32:38.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:32:38.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:32:38.599 [DEBUG] [Thread-118315] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:32:49.681 [DEBUG] [Thread-118317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:32:50.725 [DEBUG] [Thread-118318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:04.720 [DEBUG] [Thread-118319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:08.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:33:08.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:33:08.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:33:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 32, 35), 23.68, 19.88, 0.0, 10.22, 20.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:33:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:32:35
2025-12-03T14:33:09.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:33:09.623 [DEBUG] [Thread-118320] [transport.py] [_log()] starting thread (client mode): 0xa2761990
2025-12-03T14:33:09.623 [DEBUG] [Thread-118320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:33:09.644 [DEBUG] [Thread-118320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:33:09.644 [INFO] [Thread-118320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:33:09.645 [DEBUG] [Thread-118320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] client lang: <none>
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] server lang: <none>
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] kex follows: False
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] Compression: none
2025-12-03T14:33:09.646 [DEBUG] [Thread-118320] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:33:09.658 [DEBUG] [Thread-118320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:33:09.658 [DEBUG] [Thread-118320] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:33:09.658 [DEBUG] [Thread-118320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:33:09.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:33:09.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:33:09.659 [DEBUG] [Thread-118320] [transport.py] [_log()] userauth is OK
2025-12-03T14:33:09.659 [DEBUG] [Thread-118320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:33:09.659 [DEBUG] [Thread-118320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:33:09.659 [DEBUG] [Thread-118320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:33:09.659 [DEBUG] [Thread-118320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:33:09.688 [INFO] [Thread-118320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:33:09.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:33:10.314 [DEBUG] [Thread-118320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:33:10.314 [DEBUG] [Thread-118320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:33:10.314 [DEBUG] [Thread-118320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:33:10.355 [DEBUG] [Thread-118320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:33:10.356 [DEBUG] [Thread-118320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:33:10.358 [DEBUG] [Thread-118320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:33:10.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:33:10.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:33:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:33:10.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:33:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:33:10.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:33:10.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.522618 -999.00  +21.30  13.12     25   +0.50 1 1 1 1 1   888    0 21.91 33.28 ----- 11.2 13.1 145.0 15.7 29.9 -25.4 29.5 -26.6 30.6 -24.9 31.2 -25.7
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:33:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.522618
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:33:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:32:35', tmtdew=23.68, humidity=19.88, cloud=0.0, wind=10.22, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:32:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:33:10.374 [DEBUG] [Thread-118320] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:33:10.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:33:10.478 [DEBUG] [Thread-118323] [transport.py] [_log()] starting thread (client mode): 0xa5199ba0
2025-12-03T14:33:10.478 [DEBUG] [Thread-118323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:33:10.493 [DEBUG] [Thread-118323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:33:10.493 [INFO] [Thread-118323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] client lang: <none>
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] server lang: <none>
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] kex follows: False
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] Compression: none
2025-12-03T14:33:10.504 [DEBUG] [Thread-118323] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:33:10.557 [DEBUG] [Thread-118323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:33:10.558 [DEBUG] [Thread-118323] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:33:10.558 [DEBUG] [Thread-118323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:33:10.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:33:10.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:33:10.614 [DEBUG] [Thread-118323] [transport.py] [_log()] userauth is OK
2025-12-03T14:33:10.614 [DEBUG] [Thread-118323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:33:10.614 [DEBUG] [Thread-118323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:33:10.614 [DEBUG] [Thread-118323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:33:10.614 [DEBUG] [Thread-118323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:33:10.636 [INFO] [Thread-118323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:33:10.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:33:10.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:33:11.438 [DEBUG] [Thread-118323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:33:11.439 [DEBUG] [Thread-118323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:33:11.487 [DEBUG] [Thread-118323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:33:11.487 [DEBUG] [Thread-118323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:33:11.496 [DEBUG] [Thread-118323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:33:11.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:33:11.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:33:11.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:33:11.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:33:11.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:33:11.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:33:11.530 [DEBUG] [Thread-118323] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:33:19.750 [DEBUG] [Thread-118325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:20.885 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:20.886 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:34.795 [DEBUG] [Thread-118326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:41.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:33:41.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:33:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:33:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 33, 39), 23.63, 20.11, 0.0, 9.97, 20.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:33:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:33:39
2025-12-03T14:33:42.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:33:42.540 [DEBUG] [Thread-118327] [transport.py] [_log()] starting thread (client mode): 0xa27c8640
2025-12-03T14:33:42.540 [DEBUG] [Thread-118327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:33:42.555 [DEBUG] [Thread-118327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:33:42.555 [INFO] [Thread-118327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] client lang: <none>
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] server lang: <none>
2025-12-03T14:33:42.558 [DEBUG] [Thread-118327] [transport.py] [_log()] kex follows: False
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] Compression: none
2025-12-03T14:33:42.559 [DEBUG] [Thread-118327] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:33:42.577 [DEBUG] [Thread-118327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:33:42.577 [DEBUG] [Thread-118327] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:33:42.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:33:42.578 [DEBUG] [Thread-118327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:33:42.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:33:42.580 [DEBUG] [Thread-118327] [transport.py] [_log()] userauth is OK
2025-12-03T14:33:42.580 [DEBUG] [Thread-118327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:33:42.580 [DEBUG] [Thread-118327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:33:42.580 [DEBUG] [Thread-118327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:33:42.580 [DEBUG] [Thread-118327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:33:42.604 [INFO] [Thread-118327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:33:42.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:33:43.316 [DEBUG] [Thread-118327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:33:43.316 [DEBUG] [Thread-118327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:33:43.316 [DEBUG] [Thread-118327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:33:43.357 [DEBUG] [Thread-118327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:33:43.357 [DEBUG] [Thread-118327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:33:43.359 [DEBUG] [Thread-118327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:33:43.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:33:43.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:33:43.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:33:43.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:33:43.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:33:43.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:33:43.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.522966 -999.00  +21.60  10.56     24   +0.60 1 1 1 1 1   888    0 21.55 32.00 ----- 9.7 10.6 139.8 15.2 30.0 -25.3 29.7 -26.8 30.9 -24.8 31.5 -24.2
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.522966
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:33:43.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:33:39', tmtdew=23.63, humidity=20.11, cloud=0.0, wind=9.97, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:33:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:33:43.377 [DEBUG] [Thread-118327] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:33:43.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:33:43.463 [DEBUG] [Thread-118330] [transport.py] [_log()] starting thread (client mode): 0xa517fd90
2025-12-03T14:33:43.463 [DEBUG] [Thread-118330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:33:43.478 [DEBUG] [Thread-118330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:33:43.478 [INFO] [Thread-118330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] client lang: <none>
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] server lang: <none>
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] kex follows: False
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:33:43.485 [DEBUG] [Thread-118330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:33:43.486 [DEBUG] [Thread-118330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:33:43.486 [DEBUG] [Thread-118330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:33:43.486 [DEBUG] [Thread-118330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:33:43.486 [DEBUG] [Thread-118330] [transport.py] [_log()] Compression: none
2025-12-03T14:33:43.486 [DEBUG] [Thread-118330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:33:43.543 [DEBUG] [Thread-118330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:33:43.544 [DEBUG] [Thread-118330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:33:43.544 [DEBUG] [Thread-118330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:33:43.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:33:43.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:33:43.600 [DEBUG] [Thread-118330] [transport.py] [_log()] userauth is OK
2025-12-03T14:33:43.601 [DEBUG] [Thread-118330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:33:43.601 [DEBUG] [Thread-118330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:33:43.601 [DEBUG] [Thread-118330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:33:43.601 [DEBUG] [Thread-118330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:33:43.618 [INFO] [Thread-118330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:33:43.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:33:43.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:33:44.449 [DEBUG] [Thread-118330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:33:44.449 [DEBUG] [Thread-118330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:33:44.497 [DEBUG] [Thread-118330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:33:44.497 [DEBUG] [Thread-118330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:33:44.505 [DEBUG] [Thread-118330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:33:44.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:33:44.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:33:44.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:33:44.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:33:44.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:33:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:33:44.536 [DEBUG] [Thread-118330] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:33:49.824 [DEBUG] [Thread-118332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:33:50.772 [DEBUG] [Thread-118333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:04.875 [DEBUG] [Thread-118334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:14.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:34:14.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:34:14.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:34:15.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 34, 11), 23.67, 20.08, 0.0, 13.06, 20.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:34:15.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:34:11
2025-12-03T14:34:15.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:34:15.520 [DEBUG] [Thread-118335] [transport.py] [_log()] starting thread (client mode): 0xa517f070
2025-12-03T14:34:15.520 [DEBUG] [Thread-118335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:34:15.540 [DEBUG] [Thread-118335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:34:15.541 [INFO] [Thread-118335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:15.544 [DEBUG] [Thread-118335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] client lang: <none>
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] server lang: <none>
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] kex follows: False
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] Compression: none
2025-12-03T14:34:15.545 [DEBUG] [Thread-118335] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:34:15.563 [DEBUG] [Thread-118335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:34:15.564 [DEBUG] [Thread-118335] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:34:15.564 [DEBUG] [Thread-118335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:34:15.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:34:15.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:34:15.566 [DEBUG] [Thread-118335] [transport.py] [_log()] userauth is OK
2025-12-03T14:34:15.567 [DEBUG] [Thread-118335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:34:15.567 [DEBUG] [Thread-118335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:34:15.567 [DEBUG] [Thread-118335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:34:15.567 [DEBUG] [Thread-118335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:34:15.591 [INFO] [Thread-118335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:34:15.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:34:16.242 [DEBUG] [Thread-118335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:34:16.242 [DEBUG] [Thread-118335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:34:16.243 [DEBUG] [Thread-118335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:34:16.283 [DEBUG] [Thread-118335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:34:16.283 [DEBUG] [Thread-118335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:34:16.285 [DEBUG] [Thread-118335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:34:16.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:34:16.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:34:16.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:34:16.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:34:16.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:34:16.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:34:16.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:34:16.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.523313 -999.00  +22.00  15.74     24   +0.80 1 1 1 1 1   888    0 21.41 33.81 ----- 19.0 15.7 145.4 21.1 30.2 -25.8 29.8 -26.9 30.9 -26.9 31.6 -28.2
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.523313
2025-12-03T14:34:16.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:34:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:34:16.308 [DEBUG] [Thread-118335] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:34:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:34:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:34:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:34:16.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:34:11', tmtdew=23.67, humidity=20.08, cloud=0.0, wind=13.06, temperature=20.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:33:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:34:16.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:34:16.402 [DEBUG] [Thread-118338] [transport.py] [_log()] starting thread (client mode): 0xa517caf0
2025-12-03T14:34:16.402 [DEBUG] [Thread-118338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:34:16.421 [DEBUG] [Thread-118338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:34:16.421 [INFO] [Thread-118338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:34:16.429 [DEBUG] [Thread-118338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:34:16.429 [DEBUG] [Thread-118338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:34:16.429 [DEBUG] [Thread-118338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:34:16.429 [DEBUG] [Thread-118338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] client lang: <none>
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] server lang: <none>
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] kex follows: False
2025-12-03T14:34:16.430 [DEBUG] [Thread-118338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] Compression: none
2025-12-03T14:34:16.431 [DEBUG] [Thread-118338] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:34:16.488 [DEBUG] [Thread-118338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:34:16.489 [DEBUG] [Thread-118338] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:34:16.489 [DEBUG] [Thread-118338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:34:16.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:34:16.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:34:16.544 [DEBUG] [Thread-118338] [transport.py] [_log()] userauth is OK
2025-12-03T14:34:16.545 [DEBUG] [Thread-118338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:34:16.545 [DEBUG] [Thread-118338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:34:16.545 [DEBUG] [Thread-118338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:34:16.545 [DEBUG] [Thread-118338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:34:16.564 [INFO] [Thread-118338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:34:16.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:34:16.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:34:17.433 [DEBUG] [Thread-118338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:34:17.433 [DEBUG] [Thread-118338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:34:17.482 [DEBUG] [Thread-118338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:34:17.482 [DEBUG] [Thread-118338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:34:17.492 [DEBUG] [Thread-118338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:34:17.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:34:17.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:34:17.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:34:17.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:34:17.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:34:17.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:34:17.526 [DEBUG] [Thread-118338] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:34:19.905 [DEBUG] [Thread-118340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:21.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:21.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:34.957 [DEBUG] [Thread-118341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:34:47.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:34:47.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:34:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 34, 43), 23.62, 20.25, 0.0, 18.63, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:34:48.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:34:43
2025-12-03T14:34:48.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:34:48.505 [DEBUG] [Thread-118342] [transport.py] [_log()] starting thread (client mode): 0xa2760ca0
2025-12-03T14:34:48.505 [DEBUG] [Thread-118342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:34:48.525 [DEBUG] [Thread-118342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:34:48.525 [INFO] [Thread-118342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] client lang: <none>
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] server lang: <none>
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] kex follows: False
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:34:48.529 [DEBUG] [Thread-118342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:34:48.530 [DEBUG] [Thread-118342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:34:48.530 [DEBUG] [Thread-118342] [transport.py] [_log()] Compression: none
2025-12-03T14:34:48.530 [DEBUG] [Thread-118342] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:34:48.547 [DEBUG] [Thread-118342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:34:48.548 [DEBUG] [Thread-118342] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:34:48.548 [DEBUG] [Thread-118342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:34:48.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:34:48.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:34:48.550 [DEBUG] [Thread-118342] [transport.py] [_log()] userauth is OK
2025-12-03T14:34:48.550 [DEBUG] [Thread-118342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:34:48.550 [DEBUG] [Thread-118342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:34:48.551 [DEBUG] [Thread-118342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:34:48.551 [DEBUG] [Thread-118342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:34:48.568 [INFO] [Thread-118342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:34:48.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:34:49.291 [DEBUG] [Thread-118342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:34:49.291 [DEBUG] [Thread-118342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:34:49.292 [DEBUG] [Thread-118342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:34:49.333 [DEBUG] [Thread-118342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:34:49.333 [DEBUG] [Thread-118342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:34:49.336 [DEBUG] [Thread-118342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:34:49.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:34:49.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:34:49.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:34:49.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:34:49.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:34:49.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:34:49.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:34:49.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:34:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:34:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.523660 -999.00  +21.40  16.50     25   +0.50 1 1 1 1 1   888    0 22.15 39.20 ----- 14.4 16.5 116.2 20.7 30.1 -27.3 29.8 -28.0 30.9 -26.0 31.5 -26.5
2025-12-03T14:34:49.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:34:49.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:34:49.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.523660
2025-12-03T14:34:49.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:34:49.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:34:49.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:34:49.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:34:49.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:34:49.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:34:43', tmtdew=23.62, humidity=20.25, cloud=0.0, wind=18.63, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:34:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:34:49.362 [DEBUG] [Thread-118342] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:34:49.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:34:49.458 [DEBUG] [Thread-118345] [transport.py] [_log()] starting thread (client mode): 0xa2763280
2025-12-03T14:34:49.458 [DEBUG] [Thread-118345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:34:49.473 [DEBUG] [Thread-118345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:34:49.473 [INFO] [Thread-118345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:34:49.480 [DEBUG] [Thread-118345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:34:49.480 [DEBUG] [Thread-118345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] client lang: <none>
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] server lang: <none>
2025-12-03T14:34:49.481 [DEBUG] [Thread-118345] [transport.py] [_log()] kex follows: False
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] Compression: none
2025-12-03T14:34:49.482 [DEBUG] [Thread-118345] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:34:49.540 [DEBUG] [Thread-118345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:34:49.540 [DEBUG] [Thread-118345] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:34:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:34:49.541 [DEBUG] [Thread-118345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:34:49.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:34:49.596 [DEBUG] [Thread-118345] [transport.py] [_log()] userauth is OK
2025-12-03T14:34:49.596 [DEBUG] [Thread-118345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:34:49.596 [DEBUG] [Thread-118345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:34:49.596 [DEBUG] [Thread-118345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:34:49.596 [DEBUG] [Thread-118345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:34:49.617 [INFO] [Thread-118345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:34:49.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:34:49.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:34:49.988 [DEBUG] [Thread-118347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:34:50.450 [DEBUG] [Thread-118345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:34:50.451 [DEBUG] [Thread-118345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:34:50.499 [DEBUG] [Thread-118345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:34:50.499 [DEBUG] [Thread-118345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:34:50.508 [DEBUG] [Thread-118345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:34:50.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:34:50.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:34:50.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:34:50.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:34:50.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:34:50.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:34:50.542 [DEBUG] [Thread-118345] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:34:50.818 [DEBUG] [Thread-118348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:05.031 [DEBUG] [Thread-118349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:20.062 [DEBUG] [Thread-118350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:20.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:35:20.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:35:20.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:35:21.166 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:21.167 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:21.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 35, 15), 23.74, 20.1, 0.0, 18.05, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:35:21.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:35:15
2025-12-03T14:35:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:35:21.506 [DEBUG] [Thread-118351] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T14:35:21.507 [DEBUG] [Thread-118351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:35:21.526 [DEBUG] [Thread-118351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:35:21.527 [INFO] [Thread-118351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] client lang: <none>
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] server lang: <none>
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] kex follows: False
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:35:21.530 [DEBUG] [Thread-118351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:35:21.531 [DEBUG] [Thread-118351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:35:21.531 [DEBUG] [Thread-118351] [transport.py] [_log()] Compression: none
2025-12-03T14:35:21.531 [DEBUG] [Thread-118351] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:35:21.550 [DEBUG] [Thread-118351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:35:21.550 [DEBUG] [Thread-118351] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:35:21.551 [DEBUG] [Thread-118351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:35:21.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:35:21.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:35:21.552 [DEBUG] [Thread-118351] [transport.py] [_log()] userauth is OK
2025-12-03T14:35:21.553 [DEBUG] [Thread-118351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:35:21.553 [DEBUG] [Thread-118351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:35:21.553 [DEBUG] [Thread-118351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:35:21.553 [DEBUG] [Thread-118351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:35:21.589 [INFO] [Thread-118351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:35:21.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:35:22.192 [DEBUG] [Thread-118351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:35:22.193 [DEBUG] [Thread-118351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:35:22.193 [DEBUG] [Thread-118351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:35:22.234 [DEBUG] [Thread-118351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:35:22.234 [DEBUG] [Thread-118351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:35:22.237 [DEBUG] [Thread-118351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:35:22.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:35:22.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:35:22.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:35:22.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:35:22.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:35:22.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:35:22.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:35:22.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:35:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:35:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.524007 -999.00  +21.60  16.87     24   +0.60 1 1 1 1 1   888    0 21.29 39.11 ----- 10.9 16.9 169.0 17.5 30.1 -27.8 29.8 -28.6 30.9 -26.6 31.6 -28.0
2025-12-03T14:35:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:35:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:35:22.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.524007
2025-12-03T14:35:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:35:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:35:22.261 [DEBUG] [Thread-118351] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:35:22.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:35:22.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:35:22.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:35:22.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:35:15', tmtdew=23.74, humidity=20.1, cloud=0.0, wind=18.05, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:34:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:35:22.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:35:22.354 [DEBUG] [Thread-118354] [transport.py] [_log()] starting thread (client mode): 0xa27513c0
2025-12-03T14:35:22.354 [DEBUG] [Thread-118354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:35:22.368 [DEBUG] [Thread-118354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:35:22.369 [INFO] [Thread-118354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:22.376 [DEBUG] [Thread-118354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] client lang: <none>
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] server lang: <none>
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] kex follows: False
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] Compression: none
2025-12-03T14:35:22.377 [DEBUG] [Thread-118354] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:35:22.435 [DEBUG] [Thread-118354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:35:22.435 [DEBUG] [Thread-118354] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:35:22.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:35:22.436 [DEBUG] [Thread-118354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:35:22.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:35:22.492 [DEBUG] [Thread-118354] [transport.py] [_log()] userauth is OK
2025-12-03T14:35:22.492 [DEBUG] [Thread-118354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:35:22.492 [DEBUG] [Thread-118354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:35:22.492 [DEBUG] [Thread-118354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:35:22.492 [DEBUG] [Thread-118354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:35:22.512 [INFO] [Thread-118354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:35:22.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:35:22.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:35:23.386 [DEBUG] [Thread-118354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:35:23.386 [DEBUG] [Thread-118354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:35:23.433 [DEBUG] [Thread-118354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:35:23.434 [DEBUG] [Thread-118354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:35:23.442 [DEBUG] [Thread-118354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:35:23.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:35:23.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:35:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:35:23.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:35:23.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:35:23.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:35:23.476 [DEBUG] [Thread-118354] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:35:35.097 [DEBUG] [Thread-118356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:50.141 [DEBUG] [Thread-118357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:50.847 [DEBUG] [Thread-118358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:35:53.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:35:53.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:35:53.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:35:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 35, 47), 23.34, 20.68, 0.0, 14.82, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:35:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:35:47
2025-12-03T14:35:54.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:35:54.452 [DEBUG] [Thread-118359] [transport.py] [_log()] starting thread (client mode): 0xa27478b0
2025-12-03T14:35:54.452 [DEBUG] [Thread-118359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:35:54.472 [DEBUG] [Thread-118359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:35:54.472 [INFO] [Thread-118359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:35:54.475 [DEBUG] [Thread-118359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] client lang: <none>
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] server lang: <none>
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] kex follows: False
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:35:54.476 [DEBUG] [Thread-118359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:35:54.477 [DEBUG] [Thread-118359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:35:54.477 [DEBUG] [Thread-118359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:35:54.477 [DEBUG] [Thread-118359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:35:54.477 [DEBUG] [Thread-118359] [transport.py] [_log()] Compression: none
2025-12-03T14:35:54.477 [DEBUG] [Thread-118359] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:35:54.497 [DEBUG] [Thread-118359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:35:54.498 [DEBUG] [Thread-118359] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:35:54.498 [DEBUG] [Thread-118359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:35:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:35:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:35:54.500 [DEBUG] [Thread-118359] [transport.py] [_log()] userauth is OK
2025-12-03T14:35:54.500 [DEBUG] [Thread-118359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:35:54.500 [DEBUG] [Thread-118359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:35:54.501 [DEBUG] [Thread-118359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:35:54.501 [DEBUG] [Thread-118359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:35:54.524 [INFO] [Thread-118359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:35:54.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:35:55.329 [DEBUG] [Thread-118359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:35:55.329 [DEBUG] [Thread-118359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:35:55.330 [DEBUG] [Thread-118359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:35:55.370 [DEBUG] [Thread-118359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:35:55.370 [DEBUG] [Thread-118359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:35:55.372 [DEBUG] [Thread-118359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:35:55.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:35:55.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:35:55.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:35:55.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:35:55.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:35:55.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:35:55.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.524702 -999.00  +21.40  11.03     25   +0.60 1 1 1 1 1   888    0 22.22 53.25 ----- 11.4 11.0 161.8 17.3 30.3 -27.6 29.4 -30.1 31.0 -26.2 31.7 -27.3
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.524702
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:35:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:35:47', tmtdew=23.34, humidity=20.68, cloud=0.0, wind=14.82, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:35:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:35:55.385 [DEBUG] [Thread-118359] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:35:55.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:35:55.469 [DEBUG] [Thread-118362] [transport.py] [_log()] starting thread (client mode): 0xa2761b10
2025-12-03T14:35:55.469 [DEBUG] [Thread-118362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:35:55.484 [DEBUG] [Thread-118362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:35:55.484 [INFO] [Thread-118362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:35:55.491 [DEBUG] [Thread-118362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:35:55.491 [DEBUG] [Thread-118362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:35:55.491 [DEBUG] [Thread-118362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] client lang: <none>
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] server lang: <none>
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] kex follows: False
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] Compression: none
2025-12-03T14:35:55.492 [DEBUG] [Thread-118362] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:35:55.551 [DEBUG] [Thread-118362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:35:55.552 [DEBUG] [Thread-118362] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:35:55.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:35:55.553 [DEBUG] [Thread-118362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:35:55.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:35:55.607 [DEBUG] [Thread-118362] [transport.py] [_log()] userauth is OK
2025-12-03T14:35:55.608 [DEBUG] [Thread-118362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:35:55.608 [DEBUG] [Thread-118362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:35:55.608 [DEBUG] [Thread-118362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:35:55.608 [DEBUG] [Thread-118362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:35:55.630 [INFO] [Thread-118362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:35:55.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:35:55.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:35:56.455 [DEBUG] [Thread-118362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:35:56.455 [DEBUG] [Thread-118362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:35:56.504 [DEBUG] [Thread-118362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:35:56.504 [DEBUG] [Thread-118362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:35:56.512 [DEBUG] [Thread-118362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:35:56.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:35:56.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:35:56.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:35:56.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:35:56.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:35:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:35:56.546 [DEBUG] [Thread-118362] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:36:05.170 [DEBUG] [Thread-118364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:20.211 [DEBUG] [Thread-118365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:21.311 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:21.312 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:26.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:36:26.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:36:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:36:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 36, 19), 23.39, 20.6, 0.0, 13.53, 20.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:36:27.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:36:19
2025-12-03T14:36:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:36:27.506 [DEBUG] [Thread-118366] [transport.py] [_log()] starting thread (client mode): 0xa2746b00
2025-12-03T14:36:27.506 [DEBUG] [Thread-118366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:36:27.526 [DEBUG] [Thread-118366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:36:27.526 [INFO] [Thread-118366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] client lang: <none>
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] server lang: <none>
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] kex follows: False
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:36:27.530 [DEBUG] [Thread-118366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:36:27.531 [DEBUG] [Thread-118366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:36:27.531 [DEBUG] [Thread-118366] [transport.py] [_log()] Compression: none
2025-12-03T14:36:27.531 [DEBUG] [Thread-118366] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:36:27.548 [DEBUG] [Thread-118366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:36:27.549 [DEBUG] [Thread-118366] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:36:27.549 [DEBUG] [Thread-118366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:36:27.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:36:27.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:36:27.551 [DEBUG] [Thread-118366] [transport.py] [_log()] userauth is OK
2025-12-03T14:36:27.551 [DEBUG] [Thread-118366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:36:27.551 [DEBUG] [Thread-118366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:36:27.551 [DEBUG] [Thread-118366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:36:27.552 [DEBUG] [Thread-118366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:36:27.582 [INFO] [Thread-118366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:36:27.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:36:28.193 [DEBUG] [Thread-118366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:36:28.193 [DEBUG] [Thread-118366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:36:28.194 [DEBUG] [Thread-118366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:36:28.234 [DEBUG] [Thread-118366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:36:28.234 [DEBUG] [Thread-118366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:36:28.237 [DEBUG] [Thread-118366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:36:28.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:36:28.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:36:28.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:36:28.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:36:28.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:36:28.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:36:28.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.525049 -999.00  +21.40  11.50     25   +0.60 1 1 1 1 1   888    0 22.52 50.64 ----- 10.0 11.5 150.8 17.0 30.3 -27.9 29.6 -28.4 31.1 -27.6 31.9 -26.8
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:36:28.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.525049
2025-12-03T14:36:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:36:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:36:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:36:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:36:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:36:28.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:36:19', tmtdew=23.39, humidity=20.6, cloud=0.0, wind=13.53, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:36:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:36:28.261 [DEBUG] [Thread-118366] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:36:28.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:36:28.358 [DEBUG] [Thread-118369] [transport.py] [_log()] starting thread (client mode): 0xa517caf0
2025-12-03T14:36:28.358 [DEBUG] [Thread-118369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:36:28.373 [DEBUG] [Thread-118369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:36:28.373 [INFO] [Thread-118369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:36:28.380 [DEBUG] [Thread-118369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:36:28.381 [DEBUG] [Thread-118369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] client lang: <none>
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] server lang: <none>
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] kex follows: False
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] Compression: none
2025-12-03T14:36:28.382 [DEBUG] [Thread-118369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:36:28.443 [DEBUG] [Thread-118369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:36:28.443 [DEBUG] [Thread-118369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:36:28.444 [DEBUG] [Thread-118369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:36:28.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:36:28.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:36:28.499 [DEBUG] [Thread-118369] [transport.py] [_log()] userauth is OK
2025-12-03T14:36:28.499 [DEBUG] [Thread-118369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:36:28.499 [DEBUG] [Thread-118369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:36:28.499 [DEBUG] [Thread-118369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:36:28.499 [DEBUG] [Thread-118369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:36:28.518 [INFO] [Thread-118369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:36:28.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:36:28.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:36:29.357 [DEBUG] [Thread-118369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:36:29.357 [DEBUG] [Thread-118369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:36:29.404 [DEBUG] [Thread-118369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:36:29.405 [DEBUG] [Thread-118369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:36:29.414 [DEBUG] [Thread-118369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:36:29.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:36:29.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:36:29.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:36:29.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:36:29.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:36:29.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:36:29.449 [DEBUG] [Thread-118369] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:36:35.238 [DEBUG] [Thread-118371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:50.283 [DEBUG] [Thread-118372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:50.895 [DEBUG] [Thread-118373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:36:59.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:36:59.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:36:59.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:37:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 36, 51), 23.84, 20.0, 0.0, 6.62, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:37:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:36:51
2025-12-03T14:37:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:37:00.470 [DEBUG] [Thread-118374] [transport.py] [_log()] starting thread (client mode): 0xa2760910
2025-12-03T14:37:00.470 [DEBUG] [Thread-118374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:37:00.490 [DEBUG] [Thread-118374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:37:00.490 [INFO] [Thread-118374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] client lang: <none>
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] server lang: <none>
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] kex follows: False
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] Compression: none
2025-12-03T14:37:00.494 [DEBUG] [Thread-118374] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:37:00.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:37:00.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] userauth is OK
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:37:00.510 [DEBUG] [Thread-118374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:37:00.511 [DEBUG] [Thread-118374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:37:00.511 [DEBUG] [Thread-118374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:37:00.520 [INFO] [Thread-118374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:37:00.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:37:01.279 [DEBUG] [Thread-118374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:37:01.279 [DEBUG] [Thread-118374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:37:01.279 [DEBUG] [Thread-118374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:37:01.319 [DEBUG] [Thread-118374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:37:01.319 [DEBUG] [Thread-118374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:37:01.321 [DEBUG] [Thread-118374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:37:01.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:37:01.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:37:01.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:37:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:37:01.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:37:01.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:37:01.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.525396 -999.00  +21.40  10.30     24   +0.50 1 1 1 1 1   888    0 22.01 45.06 ----- 11.2 10.3 163.2 14.0 30.4 -28.1 29.7 -28.3 31.0 -28.2 31.9 -28.2
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:37:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.525396
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:37:01.335 [DEBUG] [Thread-118374] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:37:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:36:51', tmtdew=23.84, humidity=20.0, cloud=0.0, wind=6.62, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:36:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:37:01.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:37:01.422 [DEBUG] [Thread-118377] [transport.py] [_log()] starting thread (client mode): 0xa27443a0
2025-12-03T14:37:01.422 [DEBUG] [Thread-118377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:37:01.437 [DEBUG] [Thread-118377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:37:01.437 [INFO] [Thread-118377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:01.444 [DEBUG] [Thread-118377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] client lang: <none>
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] server lang: <none>
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] kex follows: False
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] Compression: none
2025-12-03T14:37:01.445 [DEBUG] [Thread-118377] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:37:01.501 [DEBUG] [Thread-118377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:37:01.501 [DEBUG] [Thread-118377] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:37:01.501 [DEBUG] [Thread-118377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:37:01.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:37:01.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:37:01.558 [DEBUG] [Thread-118377] [transport.py] [_log()] userauth is OK
2025-12-03T14:37:01.558 [DEBUG] [Thread-118377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:37:01.558 [DEBUG] [Thread-118377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:37:01.558 [DEBUG] [Thread-118377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:37:01.558 [DEBUG] [Thread-118377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:37:01.573 [INFO] [Thread-118377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:37:01.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:37:01.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:37:02.419 [DEBUG] [Thread-118377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:37:02.419 [DEBUG] [Thread-118377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:37:02.470 [DEBUG] [Thread-118377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:37:02.470 [DEBUG] [Thread-118377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:37:02.481 [DEBUG] [Thread-118377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:37:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:37:02.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:37:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:37:02.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:37:02.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:37:02.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:37:02.525 [DEBUG] [Thread-118377] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:37:05.310 [DEBUG] [Thread-118379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:20.351 [DEBUG] [Thread-118380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:21.451 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:21.452 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:32.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:37:32.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:37:32.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:37:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 37, 23), 23.73, 20.15, 0.0, 7.41, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:37:33.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:37:23
2025-12-03T14:37:33.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:37:33.500 [DEBUG] [Thread-118381] [transport.py] [_log()] starting thread (client mode): 0xa2744430
2025-12-03T14:37:33.500 [DEBUG] [Thread-118381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:37:33.520 [DEBUG] [Thread-118381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:37:33.520 [INFO] [Thread-118381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] client lang: <none>
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] server lang: <none>
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] kex follows: False
2025-12-03T14:37:33.523 [DEBUG] [Thread-118381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] Compression: none
2025-12-03T14:37:33.524 [DEBUG] [Thread-118381] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:37:33.539 [DEBUG] [Thread-118381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:37:33.540 [DEBUG] [Thread-118381] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:37:33.540 [DEBUG] [Thread-118381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:37:33.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:37:33.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:37:33.541 [DEBUG] [Thread-118381] [transport.py] [_log()] userauth is OK
2025-12-03T14:37:33.541 [DEBUG] [Thread-118381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:37:33.541 [DEBUG] [Thread-118381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:37:33.541 [DEBUG] [Thread-118381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:37:33.541 [DEBUG] [Thread-118381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:37:33.555 [INFO] [Thread-118381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:37:33.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:37:34.189 [DEBUG] [Thread-118381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:37:34.189 [DEBUG] [Thread-118381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:37:34.189 [DEBUG] [Thread-118381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:37:34.230 [DEBUG] [Thread-118381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:37:34.230 [DEBUG] [Thread-118381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:37:34.234 [DEBUG] [Thread-118381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:37:34.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:37:34.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:37:34.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:37:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:37:34.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:37:34.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:37:34.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:37:34.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:37:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:37:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.525743 -999.00  +21.10  11.23     25   +0.40 1 1 1 1 1   888    0 21.77 47.70 ----- 9.5 11.2 125.4 13.6 30.4 -28.3 29.8 -29.3 31.1 -28.0 32.0 -27.4
2025-12-03T14:37:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:37:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:37:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.525743
2025-12-03T14:37:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:37:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:37:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:37:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:37:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:37:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:37:23', tmtdew=23.73, humidity=20.15, cloud=0.0, wind=7.41, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:37:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:37:34.258 [DEBUG] [Thread-118381] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:37:34.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:37:34.355 [DEBUG] [Thread-118384] [transport.py] [_log()] starting thread (client mode): 0xa2744c10
2025-12-03T14:37:34.355 [DEBUG] [Thread-118384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:37:34.371 [DEBUG] [Thread-118384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:37:34.371 [INFO] [Thread-118384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:37:34.379 [DEBUG] [Thread-118384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] client lang: <none>
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] server lang: <none>
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] kex follows: False
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:37:34.380 [DEBUG] [Thread-118384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:37:34.381 [DEBUG] [Thread-118384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:37:34.381 [DEBUG] [Thread-118384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:37:34.381 [DEBUG] [Thread-118384] [transport.py] [_log()] Compression: none
2025-12-03T14:37:34.381 [DEBUG] [Thread-118384] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:37:34.437 [DEBUG] [Thread-118384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:37:34.438 [DEBUG] [Thread-118384] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:37:34.438 [DEBUG] [Thread-118384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:37:34.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:37:34.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:37:34.494 [DEBUG] [Thread-118384] [transport.py] [_log()] userauth is OK
2025-12-03T14:37:34.494 [DEBUG] [Thread-118384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:37:34.494 [DEBUG] [Thread-118384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:37:34.494 [DEBUG] [Thread-118384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:37:34.495 [DEBUG] [Thread-118384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:37:34.514 [INFO] [Thread-118384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:37:34.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:37:34.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:37:35.336 [DEBUG] [Thread-118384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:37:35.336 [DEBUG] [Thread-118384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:37:35.384 [DEBUG] [Thread-118386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:35.385 [DEBUG] [Thread-118384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:37:35.386 [DEBUG] [Thread-118384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:37:35.395 [DEBUG] [Thread-118384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:37:35.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:37:35.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:37:35.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:37:35.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:37:35.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:37:35.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:37:35.431 [DEBUG] [Thread-118384] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:37:50.432 [DEBUG] [Thread-118387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:37:50.928 [DEBUG] [Thread-118388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:05.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:38:05.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:38:05.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:38:05.460 [DEBUG] [Thread-118389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 37, 55), 23.57, 20.18, 0.0, 5.51, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:38:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:37:55
2025-12-03T14:38:06.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:38:06.434 [DEBUG] [Thread-118390] [transport.py] [_log()] starting thread (client mode): 0xa2744a60
2025-12-03T14:38:06.434 [DEBUG] [Thread-118390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:38:06.454 [DEBUG] [Thread-118390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:38:06.454 [INFO] [Thread-118390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:06.456 [DEBUG] [Thread-118390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] client lang: <none>
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] server lang: <none>
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] kex follows: False
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] Compression: none
2025-12-03T14:38:06.457 [DEBUG] [Thread-118390] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:38:06.475 [DEBUG] [Thread-118390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:38:06.475 [DEBUG] [Thread-118390] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:38:06.476 [DEBUG] [Thread-118390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:38:06.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:38:06.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:38:06.477 [DEBUG] [Thread-118390] [transport.py] [_log()] userauth is OK
2025-12-03T14:38:06.478 [DEBUG] [Thread-118390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:38:06.478 [DEBUG] [Thread-118390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:38:06.478 [DEBUG] [Thread-118390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:38:06.478 [DEBUG] [Thread-118390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:38:06.513 [INFO] [Thread-118390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:38:06.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:38:07.248 [DEBUG] [Thread-118390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:38:07.249 [DEBUG] [Thread-118390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:38:07.249 [DEBUG] [Thread-118390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:38:07.290 [DEBUG] [Thread-118390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:38:07.290 [DEBUG] [Thread-118390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:38:07.293 [DEBUG] [Thread-118390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:38:07.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:38:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:38:07.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:38:07.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:38:07.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:38:07.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:38:07.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:38:07.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.526091 -999.00  +21.00  11.44     25   +0.30 1 1 1 1 1   888    0 21.71 49.12 ----- 9.3 11.4 123.6 13.6 30.1 -29.5 29.8 -29.4 31.2 -29.2 32.1 -28.4
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.526091
2025-12-03T14:38:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:38:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:38:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:38:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:38:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:38:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:37:55', tmtdew=23.57, humidity=20.18, cloud=0.0, wind=5.51, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:37:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:38:07.320 [DEBUG] [Thread-118390] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:38:07.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:38:07.418 [DEBUG] [Thread-118393] [transport.py] [_log()] starting thread (client mode): 0xa27442e0
2025-12-03T14:38:07.418 [DEBUG] [Thread-118393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:38:07.436 [DEBUG] [Thread-118393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:38:07.436 [INFO] [Thread-118393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:38:07.444 [DEBUG] [Thread-118393] [transport.py] [_log()] client lang: <none>
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] server lang: <none>
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] kex follows: False
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] Compression: none
2025-12-03T14:38:07.445 [DEBUG] [Thread-118393] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:38:07.503 [DEBUG] [Thread-118393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:38:07.503 [DEBUG] [Thread-118393] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:38:07.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:38:07.504 [DEBUG] [Thread-118393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:38:07.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:38:07.561 [DEBUG] [Thread-118393] [transport.py] [_log()] userauth is OK
2025-12-03T14:38:07.561 [DEBUG] [Thread-118393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:38:07.562 [DEBUG] [Thread-118393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:38:07.562 [DEBUG] [Thread-118393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:38:07.562 [DEBUG] [Thread-118393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:38:07.582 [INFO] [Thread-118393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:38:07.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:38:07.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:38:08.399 [DEBUG] [Thread-118393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:38:08.399 [DEBUG] [Thread-118393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:38:08.447 [DEBUG] [Thread-118393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:38:08.447 [DEBUG] [Thread-118393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:38:08.456 [DEBUG] [Thread-118393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:38:08.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:38:08.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:38:08.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:38:08.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:38:08.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:38:08.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:38:08.490 [DEBUG] [Thread-118393] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:38:20.489 [DEBUG] [Thread-118395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:21.595 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:21.596 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:35.534 [DEBUG] [Thread-118396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:38:38.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:38:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:38:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 38, 27), 23.61, 20.15, 0.0, 7.2, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:38:39.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:38:27
2025-12-03T14:38:39.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:38:39.476 [DEBUG] [Thread-118397] [transport.py] [_log()] starting thread (client mode): 0xa27458d0
2025-12-03T14:38:39.476 [DEBUG] [Thread-118397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:38:39.496 [DEBUG] [Thread-118397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:38:39.496 [INFO] [Thread-118397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:38:39.499 [DEBUG] [Thread-118397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:38:39.499 [DEBUG] [Thread-118397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:38:39.499 [DEBUG] [Thread-118397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:38:39.499 [DEBUG] [Thread-118397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] client lang: <none>
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] server lang: <none>
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] kex follows: False
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] Compression: none
2025-12-03T14:38:39.500 [DEBUG] [Thread-118397] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:38:39.521 [DEBUG] [Thread-118397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:38:39.522 [DEBUG] [Thread-118397] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:38:39.522 [DEBUG] [Thread-118397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:38:39.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:38:39.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:38:39.524 [DEBUG] [Thread-118397] [transport.py] [_log()] userauth is OK
2025-12-03T14:38:39.524 [DEBUG] [Thread-118397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:38:39.524 [DEBUG] [Thread-118397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:38:39.524 [DEBUG] [Thread-118397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:38:39.524 [DEBUG] [Thread-118397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:38:39.547 [INFO] [Thread-118397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:38:39.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:38:40.193 [DEBUG] [Thread-118397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:38:40.194 [DEBUG] [Thread-118397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:38:40.194 [DEBUG] [Thread-118397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:38:40.235 [DEBUG] [Thread-118397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:38:40.235 [DEBUG] [Thread-118397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:38:40.237 [DEBUG] [Thread-118397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:38:40.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:38:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:38:40.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:38:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:38:40.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:38:40.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:38:40.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:38:40.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.526438 -999.00  +21.00   4.74     25   +0.30 1 1 1 1 1   888    0 22.24 48.24 ----- 3.0 4.7 41.2 7.3 30.2 -28.9 29.9 -29.1 31.4 -26.7 32.2 -26.7
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.526438
2025-12-03T14:38:40.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:38:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:38:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:38:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:38:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:38:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:38:27', tmtdew=23.61, humidity=20.15, cloud=0.0, wind=7.2, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:38:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:38:40.261 [DEBUG] [Thread-118397] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:38:40.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:38:40.361 [DEBUG] [Thread-118400] [transport.py] [_log()] starting thread (client mode): 0xa519ba00
2025-12-03T14:38:40.361 [DEBUG] [Thread-118400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:38:40.377 [DEBUG] [Thread-118400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:38:40.378 [INFO] [Thread-118400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:38:40.385 [DEBUG] [Thread-118400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:38:40.385 [DEBUG] [Thread-118400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:38:40.385 [DEBUG] [Thread-118400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:38:40.385 [DEBUG] [Thread-118400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:40.385 [DEBUG] [Thread-118400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] client lang: <none>
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] server lang: <none>
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] kex follows: False
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] Compression: none
2025-12-03T14:38:40.386 [DEBUG] [Thread-118400] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:38:40.445 [DEBUG] [Thread-118400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:38:40.445 [DEBUG] [Thread-118400] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:38:40.445 [DEBUG] [Thread-118400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:38:40.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:38:40.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:38:40.501 [DEBUG] [Thread-118400] [transport.py] [_log()] userauth is OK
2025-12-03T14:38:40.501 [DEBUG] [Thread-118400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:38:40.501 [DEBUG] [Thread-118400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:38:40.501 [DEBUG] [Thread-118400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:38:40.501 [DEBUG] [Thread-118400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:38:40.521 [INFO] [Thread-118400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:38:40.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:38:40.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:38:41.315 [DEBUG] [Thread-118400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:38:41.315 [DEBUG] [Thread-118400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:38:41.364 [DEBUG] [Thread-118400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:38:41.364 [DEBUG] [Thread-118400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:38:41.373 [DEBUG] [Thread-118400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:38:41.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:38:41.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:38:41.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:38:41.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:38:41.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:38:41.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:38:41.409 [DEBUG] [Thread-118400] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:38:50.566 [DEBUG] [Thread-118402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:38:50.963 [DEBUG] [Thread-118403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:05.608 [DEBUG] [Thread-118404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:39:11.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:39:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:39:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 38, 59), 23.49, 20.25, 0.0, 8.13, 20.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:39:12.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:38:59
2025-12-03T14:39:12.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:39:12.371 [DEBUG] [Thread-118405] [transport.py] [_log()] starting thread (client mode): 0xa517c220
2025-12-03T14:39:12.371 [DEBUG] [Thread-118405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:39:12.389 [DEBUG] [Thread-118405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:39:12.389 [INFO] [Thread-118405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] client lang: <none>
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] server lang: <none>
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] kex follows: False
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] Compression: none
2025-12-03T14:39:12.393 [DEBUG] [Thread-118405] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:39:12.409 [DEBUG] [Thread-118405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:39:12.410 [DEBUG] [Thread-118405] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:39:12.410 [DEBUG] [Thread-118405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:39:12.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:39:12.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:39:12.412 [DEBUG] [Thread-118405] [transport.py] [_log()] userauth is OK
2025-12-03T14:39:12.412 [DEBUG] [Thread-118405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:39:12.412 [DEBUG] [Thread-118405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:39:12.412 [DEBUG] [Thread-118405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:39:12.412 [DEBUG] [Thread-118405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:39:12.436 [INFO] [Thread-118405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:39:12.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:39:13.240 [DEBUG] [Thread-118405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:39:13.240 [DEBUG] [Thread-118405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:39:13.240 [DEBUG] [Thread-118405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:39:13.281 [DEBUG] [Thread-118405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:39:13.281 [DEBUG] [Thread-118405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:39:13.283 [DEBUG] [Thread-118405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:39:13.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:39:13.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:39:13.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:39:13.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:39:13.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:39:13.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:39:13.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:39:13.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.526785 -999.00  +20.80   6.39     25   +0.10 1 1 1 1 1   888    0 21.98 42.07 ----- 4.4 6.4 317.0 8.5 30.5 -28.4 30.1 -28.7 31.6 -26.6 32.3 -26.8
2025-12-03T14:39:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:39:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:39:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.526785
2025-12-03T14:39:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:39:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:39:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:39:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:39:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:39:13.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:38:59', tmtdew=23.49, humidity=20.25, cloud=0.0, wind=8.13, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:38:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:39:13.307 [DEBUG] [Thread-118405] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:39:13.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:39:13.403 [DEBUG] [Thread-118408] [transport.py] [_log()] starting thread (client mode): 0xa517fca0
2025-12-03T14:39:13.403 [DEBUG] [Thread-118408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:39:13.418 [DEBUG] [Thread-118408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:39:13.418 [INFO] [Thread-118408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] client lang: <none>
2025-12-03T14:39:13.426 [DEBUG] [Thread-118408] [transport.py] [_log()] server lang: <none>
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] kex follows: False
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] Compression: none
2025-12-03T14:39:13.427 [DEBUG] [Thread-118408] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:39:13.485 [DEBUG] [Thread-118408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:39:13.485 [DEBUG] [Thread-118408] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:39:13.486 [DEBUG] [Thread-118408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:39:13.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:39:13.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:39:13.545 [DEBUG] [Thread-118408] [transport.py] [_log()] userauth is OK
2025-12-03T14:39:13.545 [DEBUG] [Thread-118408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:39:13.545 [DEBUG] [Thread-118408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:39:13.545 [DEBUG] [Thread-118408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:39:13.545 [DEBUG] [Thread-118408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:39:13.564 [INFO] [Thread-118408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:39:13.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:39:13.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:39:14.427 [DEBUG] [Thread-118408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:39:14.427 [DEBUG] [Thread-118408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:39:14.475 [DEBUG] [Thread-118408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:39:14.475 [DEBUG] [Thread-118408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:39:14.484 [DEBUG] [Thread-118408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:39:14.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:39:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:39:14.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:39:14.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:39:14.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:39:14.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:39:14.519 [DEBUG] [Thread-118408] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:39:20.637 [DEBUG] [Thread-118410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:21.736 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:21.737 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:35.679 [DEBUG] [Thread-118411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:39:44.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:39:44.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:39:45.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 39, 31), 23.96, 19.6, 0.0, 8.43, 20.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:39:45.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:39:31
2025-12-03T14:39:45.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:39:45.478 [DEBUG] [Thread-118412] [transport.py] [_log()] starting thread (client mode): 0xa27443a0
2025-12-03T14:39:45.478 [DEBUG] [Thread-118412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:39:45.496 [DEBUG] [Thread-118412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:39:45.496 [INFO] [Thread-118412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] client lang: <none>
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] server lang: <none>
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] kex follows: False
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] Compression: none
2025-12-03T14:39:45.499 [DEBUG] [Thread-118412] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:39:45.515 [DEBUG] [Thread-118412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:39:45.515 [DEBUG] [Thread-118412] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:39:45.515 [DEBUG] [Thread-118412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:39:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:39:45.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:39:45.517 [DEBUG] [Thread-118412] [transport.py] [_log()] userauth is OK
2025-12-03T14:39:45.518 [DEBUG] [Thread-118412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:39:45.518 [DEBUG] [Thread-118412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:39:45.518 [DEBUG] [Thread-118412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:39:45.518 [DEBUG] [Thread-118412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:39:45.542 [INFO] [Thread-118412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:39:45.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:39:46.179 [DEBUG] [Thread-118412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:39:46.180 [DEBUG] [Thread-118412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:39:46.180 [DEBUG] [Thread-118412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:39:46.221 [DEBUG] [Thread-118412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:39:46.221 [DEBUG] [Thread-118412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:39:46.224 [DEBUG] [Thread-118412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:39:46.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:39:46.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:39:46.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:39:46.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:39:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:39:46.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:39:46.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:39:46.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.527133 -999.00  +21.10   1.82     24   +0.20 1 1 1 1 1   888    0 21.66 38.28 ----- 2.4 1.8 176.6 5.6 30.8 -28.0 30.2 -28.3 31.7 -26.5 32.4 -28.2
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.527133
2025-12-03T14:39:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:39:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:39:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:39:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:39:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:39:46.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:39:31', tmtdew=23.96, humidity=19.6, cloud=0.0, wind=8.43, temperature=20.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:39:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:39:46.250 [DEBUG] [Thread-118412] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:39:46.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:39:46.347 [DEBUG] [Thread-118415] [transport.py] [_log()] starting thread (client mode): 0xa27ca5c0
2025-12-03T14:39:46.347 [DEBUG] [Thread-118415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:39:46.362 [DEBUG] [Thread-118415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:39:46.362 [INFO] [Thread-118415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:46.370 [DEBUG] [Thread-118415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] client lang: <none>
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] server lang: <none>
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] kex follows: False
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:39:46.371 [DEBUG] [Thread-118415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:39:46.372 [DEBUG] [Thread-118415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:39:46.372 [DEBUG] [Thread-118415] [transport.py] [_log()] Compression: none
2025-12-03T14:39:46.372 [DEBUG] [Thread-118415] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:39:46.429 [DEBUG] [Thread-118415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:39:46.429 [DEBUG] [Thread-118415] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:39:46.429 [DEBUG] [Thread-118415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:39:46.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:39:46.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:39:46.484 [DEBUG] [Thread-118415] [transport.py] [_log()] userauth is OK
2025-12-03T14:39:46.484 [DEBUG] [Thread-118415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:39:46.484 [DEBUG] [Thread-118415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:39:46.484 [DEBUG] [Thread-118415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:39:46.485 [DEBUG] [Thread-118415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:39:46.503 [INFO] [Thread-118415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:39:46.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:39:46.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:39:47.346 [DEBUG] [Thread-118415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:39:47.346 [DEBUG] [Thread-118415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:39:47.394 [DEBUG] [Thread-118415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:39:47.394 [DEBUG] [Thread-118415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:39:47.403 [DEBUG] [Thread-118415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:39:47.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:39:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:39:47.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:39:47.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:39:47.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:39:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:39:47.440 [DEBUG] [Thread-118415] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:39:50.709 [DEBUG] [Thread-118417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:39:50.998 [DEBUG] [Thread-118418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:05.763 [DEBUG] [Thread-118419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:17.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:40:17.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:40:17.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:40:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 40, 3), 23.96, 19.64, 0.0, 11.54, 20.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:40:18.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:40:03
2025-12-03T14:40:18.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:40:18.395 [DEBUG] [Thread-118420] [transport.py] [_log()] starting thread (client mode): 0xa2747970
2025-12-03T14:40:18.395 [DEBUG] [Thread-118420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:40:18.411 [DEBUG] [Thread-118420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:40:18.411 [INFO] [Thread-118420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] client lang: <none>
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] server lang: <none>
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] kex follows: False
2025-12-03T14:40:18.413 [DEBUG] [Thread-118420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] Compression: none
2025-12-03T14:40:18.414 [DEBUG] [Thread-118420] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:40:18.423 [DEBUG] [Thread-118420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:40:18.423 [DEBUG] [Thread-118420] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:40:18.424 [DEBUG] [Thread-118420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:40:18.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:40:18.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:40:18.426 [DEBUG] [Thread-118420] [transport.py] [_log()] userauth is OK
2025-12-03T14:40:18.426 [DEBUG] [Thread-118420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:40:18.426 [DEBUG] [Thread-118420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:40:18.426 [DEBUG] [Thread-118420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:40:18.426 [DEBUG] [Thread-118420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:40:18.441 [INFO] [Thread-118420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:40:18.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:40:19.326 [DEBUG] [Thread-118420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:40:19.327 [DEBUG] [Thread-118420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:40:19.327 [DEBUG] [Thread-118420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:40:19.368 [DEBUG] [Thread-118420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:40:19.368 [DEBUG] [Thread-118420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:40:19.371 [DEBUG] [Thread-118420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:40:19.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:40:19.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:40:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:40:19.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:40:19.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:40:19.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:40:19.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:40:19.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:40:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:40:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.527479 -999.00  +21.40  15.39     24   +0.10 1 1 1 1 1   888    0 21.62 41.18 ----- 15.1 15.4 148.0 19.7 31.0 -28.5 30.3 -28.3 31.8 -27.7 32.5 -27.8
2025-12-03T14:40:19.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:40:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:40:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.527479
2025-12-03T14:40:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:40:19.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:40:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:40:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:40:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:40:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:40:03', tmtdew=23.96, humidity=19.64, cloud=0.0, wind=11.54, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:39:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:40:19.403 [DEBUG] [Thread-118420] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:40:19.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:40:19.504 [DEBUG] [Thread-118423] [transport.py] [_log()] starting thread (client mode): 0xa2746a40
2025-12-03T14:40:19.504 [DEBUG] [Thread-118423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:40:19.518 [DEBUG] [Thread-118423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:40:19.518 [INFO] [Thread-118423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:40:19.525 [DEBUG] [Thread-118423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:40:19.526 [DEBUG] [Thread-118423] [transport.py] [_log()] client lang: <none>
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] server lang: <none>
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] kex follows: False
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] Compression: none
2025-12-03T14:40:19.527 [DEBUG] [Thread-118423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:40:19.583 [DEBUG] [Thread-118423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:40:19.584 [DEBUG] [Thread-118423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:40:19.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:40:19.584 [DEBUG] [Thread-118423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:40:19.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:40:19.644 [DEBUG] [Thread-118423] [transport.py] [_log()] userauth is OK
2025-12-03T14:40:19.644 [DEBUG] [Thread-118423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:40:19.644 [DEBUG] [Thread-118423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:40:19.644 [DEBUG] [Thread-118423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:40:19.644 [DEBUG] [Thread-118423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:40:19.663 [INFO] [Thread-118423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:40:19.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:40:19.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:40:20.531 [DEBUG] [Thread-118423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:40:20.532 [DEBUG] [Thread-118423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:40:20.579 [DEBUG] [Thread-118423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:40:20.580 [DEBUG] [Thread-118423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:40:20.588 [DEBUG] [Thread-118423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:40:20.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:40:20.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:40:20.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:40:20.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:40:20.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:40:20.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:40:20.622 [DEBUG] [Thread-118423] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:40:20.792 [DEBUG] [Thread-118425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:21.875 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:21.876 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:35.844 [DEBUG] [Thread-118426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:50.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:40:50.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:40:50.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:40:50.870 [DEBUG] [Thread-118427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:51.032 [DEBUG] [Thread-118428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:40:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 40, 35), 24.96, 18.71, 0.0, 18.32, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:40:51.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:40:35
2025-12-03T14:40:51.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:40:51.648 [DEBUG] [Thread-118429] [transport.py] [_log()] starting thread (client mode): 0xa51cce50
2025-12-03T14:40:51.648 [DEBUG] [Thread-118429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:40:51.668 [DEBUG] [Thread-118429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:40:51.669 [INFO] [Thread-118429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] client lang: <none>
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] server lang: <none>
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] kex follows: False
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] Compression: none
2025-12-03T14:40:51.672 [DEBUG] [Thread-118429] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:40:51.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:40:51.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] userauth is OK
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:40:51.686 [DEBUG] [Thread-118429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:40:51.696 [INFO] [Thread-118429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:40:51.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:40:52.311 [DEBUG] [Thread-118429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:40:52.311 [DEBUG] [Thread-118429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:40:52.311 [DEBUG] [Thread-118429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:40:52.352 [DEBUG] [Thread-118429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:40:52.352 [DEBUG] [Thread-118429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:40:52.354 [DEBUG] [Thread-118429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:40:52.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:40:52.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:40:52.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:40:52.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:40:52.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:40:52.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:40:52.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.527827 -999.00  +21.70  13.62     23   +0.00 1 1 1 1 1   888    0 21.68 38.68 ----- 12.7 13.6 139.8 19.9 30.9 -29.0 30.4 -29.2 31.8 -28.3 32.6 -28.7
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.527827
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:40:52.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:40:35', tmtdew=24.96, humidity=18.71, cloud=0.0, wind=18.32, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:40:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:40:52.371 [DEBUG] [Thread-118429] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:40:52.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:40:52.457 [DEBUG] [Thread-118432] [transport.py] [_log()] starting thread (client mode): 0xa517c880
2025-12-03T14:40:52.457 [DEBUG] [Thread-118432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:40:52.472 [DEBUG] [Thread-118432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:40:52.472 [INFO] [Thread-118432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] client lang: <none>
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] server lang: <none>
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] kex follows: False
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:40:52.479 [DEBUG] [Thread-118432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:40:52.480 [DEBUG] [Thread-118432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:40:52.480 [DEBUG] [Thread-118432] [transport.py] [_log()] Compression: none
2025-12-03T14:40:52.480 [DEBUG] [Thread-118432] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:40:52.539 [DEBUG] [Thread-118432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:40:52.539 [DEBUG] [Thread-118432] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:40:52.540 [DEBUG] [Thread-118432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:40:52.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:40:52.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:40:52.596 [DEBUG] [Thread-118432] [transport.py] [_log()] userauth is OK
2025-12-03T14:40:52.596 [DEBUG] [Thread-118432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:40:52.596 [DEBUG] [Thread-118432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:40:52.596 [DEBUG] [Thread-118432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:40:52.596 [DEBUG] [Thread-118432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:40:52.626 [INFO] [Thread-118432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:40:52.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:40:52.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:40:53.476 [DEBUG] [Thread-118432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:40:53.476 [DEBUG] [Thread-118432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:40:53.525 [DEBUG] [Thread-118432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:40:53.525 [DEBUG] [Thread-118432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:40:53.533 [DEBUG] [Thread-118432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:40:53.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:40:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:40:53.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:40:53.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:40:53.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:40:53.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:40:53.565 [DEBUG] [Thread-118432] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:41:05.899 [DEBUG] [Thread-118434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:20.949 [DEBUG] [Thread-118435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:22.015 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:22.017 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:41:23.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:41:23.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:41:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 41, 7), 24.58, 19.15, 0.0, 14.24, 21.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:41:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:41:07
2025-12-03T14:41:24.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:41:24.539 [DEBUG] [Thread-118436] [transport.py] [_log()] starting thread (client mode): 0xa27cbb20
2025-12-03T14:41:24.539 [DEBUG] [Thread-118436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:41:24.560 [DEBUG] [Thread-118436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:41:24.560 [INFO] [Thread-118436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] client lang: <none>
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] server lang: <none>
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] kex follows: False
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] Compression: none
2025-12-03T14:41:24.563 [DEBUG] [Thread-118436] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:41:24.574 [DEBUG] [Thread-118436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:41:24.574 [DEBUG] [Thread-118436] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:41:24.574 [DEBUG] [Thread-118436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:41:24.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:41:24.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:41:24.576 [DEBUG] [Thread-118436] [transport.py] [_log()] userauth is OK
2025-12-03T14:41:24.576 [DEBUG] [Thread-118436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:41:24.576 [DEBUG] [Thread-118436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:41:24.576 [DEBUG] [Thread-118436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:41:24.576 [DEBUG] [Thread-118436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:41:24.595 [INFO] [Thread-118436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:41:24.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:41:25.206 [DEBUG] [Thread-118436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:41:25.206 [DEBUG] [Thread-118436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:41:25.206 [DEBUG] [Thread-118436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:41:25.247 [DEBUG] [Thread-118436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:41:25.247 [DEBUG] [Thread-118436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:41:25.250 [DEBUG] [Thread-118436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:41:25.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:41:25.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:41:25.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:41:25.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:41:25.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:41:25.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:41:25.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:41:25.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.528521 -999.00  +21.90   7.56     24   +0.40 1 1 1 1 1   888    0 22.21 44.22 ----- 7.2 7.6 173.2 13.5 30.9 -29.9 30.1 -31.8 31.8 -28.2 32.6 -27.9
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.528521
2025-12-03T14:41:25.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:41:25.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:41:25.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:41:25.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:41:25.275 [DEBUG] [Thread-118436] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:41:25.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:41:25.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:41:07', tmtdew=24.58, humidity=19.15, cloud=0.0, wind=14.24, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:41:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:41:25.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:41:25.379 [DEBUG] [Thread-118439] [transport.py] [_log()] starting thread (client mode): 0xa27c8eb0
2025-12-03T14:41:25.379 [DEBUG] [Thread-118439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:41:25.394 [DEBUG] [Thread-118439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:41:25.394 [INFO] [Thread-118439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:41:25.401 [DEBUG] [Thread-118439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:41:25.401 [DEBUG] [Thread-118439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:41:25.401 [DEBUG] [Thread-118439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:41:25.401 [DEBUG] [Thread-118439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] client lang: <none>
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] server lang: <none>
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] kex follows: False
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] Compression: none
2025-12-03T14:41:25.402 [DEBUG] [Thread-118439] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:41:25.463 [DEBUG] [Thread-118439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:41:25.463 [DEBUG] [Thread-118439] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:41:25.463 [DEBUG] [Thread-118439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:41:25.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:41:25.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:41:25.523 [DEBUG] [Thread-118439] [transport.py] [_log()] userauth is OK
2025-12-03T14:41:25.523 [DEBUG] [Thread-118439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:41:25.523 [DEBUG] [Thread-118439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:41:25.523 [DEBUG] [Thread-118439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:41:25.523 [DEBUG] [Thread-118439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:41:25.539 [INFO] [Thread-118439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:41:25.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:41:25.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:41:26.385 [DEBUG] [Thread-118439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:41:26.385 [DEBUG] [Thread-118439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:41:26.435 [DEBUG] [Thread-118439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:41:26.435 [DEBUG] [Thread-118439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:41:26.447 [DEBUG] [Thread-118439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:41:26.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:41:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:41:26.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:41:26.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:41:26.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:41:26.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:41:26.483 [DEBUG] [Thread-118439] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:41:35.979 [DEBUG] [Thread-118441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:51.022 [DEBUG] [Thread-118442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:51.097 [DEBUG] [Thread-118443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:41:56.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:41:56.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:41:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:41:57.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 41, 39), 24.07, 19.53, 0.0, 11.58, 20.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:41:57.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:41:39
2025-12-03T14:41:57.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:41:57.448 [DEBUG] [Thread-118444] [transport.py] [_log()] starting thread (client mode): 0xa51cddb0
2025-12-03T14:41:57.448 [DEBUG] [Thread-118444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:41:57.467 [DEBUG] [Thread-118444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:41:57.467 [INFO] [Thread-118444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] client lang: <none>
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] server lang: <none>
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] kex follows: False
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:41:57.471 [DEBUG] [Thread-118444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:41:57.472 [DEBUG] [Thread-118444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:41:57.472 [DEBUG] [Thread-118444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:41:57.472 [DEBUG] [Thread-118444] [transport.py] [_log()] Compression: none
2025-12-03T14:41:57.472 [DEBUG] [Thread-118444] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:41:57.489 [DEBUG] [Thread-118444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:41:57.490 [DEBUG] [Thread-118444] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:41:57.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:41:57.491 [DEBUG] [Thread-118444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:41:57.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:41:57.493 [DEBUG] [Thread-118444] [transport.py] [_log()] userauth is OK
2025-12-03T14:41:57.493 [DEBUG] [Thread-118444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:41:57.494 [DEBUG] [Thread-118444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:41:57.494 [DEBUG] [Thread-118444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:41:57.494 [DEBUG] [Thread-118444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:41:57.518 [INFO] [Thread-118444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:41:57.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:41:58.110 [DEBUG] [Thread-118444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:41:58.110 [DEBUG] [Thread-118444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:41:58.111 [DEBUG] [Thread-118444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:41:58.151 [DEBUG] [Thread-118444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:41:58.151 [DEBUG] [Thread-118444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:41:58.154 [DEBUG] [Thread-118444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:41:58.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:41:58.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:41:58.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:41:58.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:41:58.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:41:58.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:41:58.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.528869 -999.00  +22.10  11.48     23   +0.30 1 1 1 1 1   888    0 22.54 47.01 ----- 9.6 11.5 178.4 12.6 30.9 -29.5 30.1 -34.2 31.8 -27.5 32.6 -29.3
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:41:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.528869
2025-12-03T14:41:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:41:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:41:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:41:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:41:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:41:58.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:41:39', tmtdew=24.07, humidity=19.53, cloud=0.0, wind=11.58, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:41:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:41:58.181 [DEBUG] [Thread-118444] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:41:58.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:41:58.277 [DEBUG] [Thread-118447] [transport.py] [_log()] starting thread (client mode): 0xa51cc4f0
2025-12-03T14:41:58.277 [DEBUG] [Thread-118447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:41:58.291 [DEBUG] [Thread-118447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:41:58.292 [INFO] [Thread-118447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:41:58.299 [DEBUG] [Thread-118447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:41:58.299 [DEBUG] [Thread-118447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:41:58.299 [DEBUG] [Thread-118447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:41:58.299 [DEBUG] [Thread-118447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] client lang: <none>
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] server lang: <none>
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] kex follows: False
2025-12-03T14:41:58.300 [DEBUG] [Thread-118447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] Compression: none
2025-12-03T14:41:58.301 [DEBUG] [Thread-118447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:41:58.359 [DEBUG] [Thread-118447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:41:58.359 [DEBUG] [Thread-118447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:41:58.360 [DEBUG] [Thread-118447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:41:58.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:41:58.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:41:58.415 [DEBUG] [Thread-118447] [transport.py] [_log()] userauth is OK
2025-12-03T14:41:58.415 [DEBUG] [Thread-118447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:41:58.415 [DEBUG] [Thread-118447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:41:58.415 [DEBUG] [Thread-118447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:41:58.415 [DEBUG] [Thread-118447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:41:58.435 [INFO] [Thread-118447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:41:58.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:41:58.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:41:59.231 [DEBUG] [Thread-118447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:41:59.232 [DEBUG] [Thread-118447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:41:59.280 [DEBUG] [Thread-118447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:41:59.280 [DEBUG] [Thread-118447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:41:59.288 [DEBUG] [Thread-118447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:41:59.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:41:59.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:41:59.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:41:59.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:41:59.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:41:59.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:41:59.323 [DEBUG] [Thread-118447] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:42:06.050 [DEBUG] [Thread-118449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:21.100 [DEBUG] [Thread-118450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:22.159 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:22.161 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:29.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:42:29.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:42:29.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:42:30.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 42, 11), 23.78, 19.95, 0.0, 12.21, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:42:30.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:42:11
2025-12-03T14:42:30.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:42:30.296 [DEBUG] [Thread-118451] [transport.py] [_log()] starting thread (client mode): 0xa517f130
2025-12-03T14:42:30.296 [DEBUG] [Thread-118451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:42:30.315 [DEBUG] [Thread-118451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:42:30.315 [INFO] [Thread-118451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:42:30.318 [DEBUG] [Thread-118451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] client lang: <none>
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] server lang: <none>
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] kex follows: False
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] Compression: none
2025-12-03T14:42:30.319 [DEBUG] [Thread-118451] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:42:30.335 [DEBUG] [Thread-118451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:42:30.336 [DEBUG] [Thread-118451] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:42:30.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:42:30.336 [DEBUG] [Thread-118451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:42:30.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:42:30.338 [DEBUG] [Thread-118451] [transport.py] [_log()] userauth is OK
2025-12-03T14:42:30.338 [DEBUG] [Thread-118451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:42:30.338 [DEBUG] [Thread-118451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:42:30.339 [DEBUG] [Thread-118451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:42:30.339 [DEBUG] [Thread-118451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:42:30.362 [INFO] [Thread-118451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:42:30.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:42:31.000 [DEBUG] [Thread-118451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:42:31.000 [DEBUG] [Thread-118451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:42:31.001 [DEBUG] [Thread-118451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:42:31.041 [DEBUG] [Thread-118451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:42:31.041 [DEBUG] [Thread-118451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:42:31.044 [DEBUG] [Thread-118451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:42:31.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:42:31.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:42:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:42:31.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:42:31.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:42:31.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:42:31.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:42:31.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:42:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:42:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.529216 -999.00  +22.10  10.97     23   +0.20 1 1 1 1 1   888    0 21.90 44.66 ----- 11.3 11.0 201.0 13.4 31.0 -29.3 30.1 -30.3 31.8 -28.8 32.7 -29.1
2025-12-03T14:42:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:42:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:42:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.529216
2025-12-03T14:42:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:42:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:42:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:42:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:42:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:42:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:42:11', tmtdew=23.78, humidity=19.95, cloud=0.0, wind=12.21, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:42:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:42:31.069 [DEBUG] [Thread-118451] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:42:31.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:42:31.166 [DEBUG] [Thread-118454] [transport.py] [_log()] starting thread (client mode): 0xa27b4700
2025-12-03T14:42:31.166 [DEBUG] [Thread-118454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:42:31.181 [DEBUG] [Thread-118454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:42:31.181 [INFO] [Thread-118454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:42:31.189 [DEBUG] [Thread-118454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] client lang: <none>
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] server lang: <none>
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] kex follows: False
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] Compression: none
2025-12-03T14:42:31.190 [DEBUG] [Thread-118454] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:42:31.247 [DEBUG] [Thread-118454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:42:31.247 [DEBUG] [Thread-118454] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:42:31.248 [DEBUG] [Thread-118454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:42:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:42:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:42:31.303 [DEBUG] [Thread-118454] [transport.py] [_log()] userauth is OK
2025-12-03T14:42:31.303 [DEBUG] [Thread-118454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:42:31.303 [DEBUG] [Thread-118454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:42:31.303 [DEBUG] [Thread-118454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:42:31.303 [DEBUG] [Thread-118454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:42:31.322 [INFO] [Thread-118454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:42:31.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:42:31.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:42:32.144 [DEBUG] [Thread-118454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:42:32.145 [DEBUG] [Thread-118454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:42:32.193 [DEBUG] [Thread-118454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:42:32.193 [DEBUG] [Thread-118454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:42:32.203 [DEBUG] [Thread-118454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:42:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:42:32.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:42:32.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:42:32.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:42:32.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:42:32.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:42:32.238 [DEBUG] [Thread-118454] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:42:36.131 [DEBUG] [Thread-118456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:51.127 [DEBUG] [Thread-118457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:42:51.184 [DEBUG] [Thread-118458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:02.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:43:02.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:43:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:43:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 42, 43), 24.25, 19.12, 0.0, 7.78, 20.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:43:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:42:43
2025-12-03T14:43:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:43:03.188 [DEBUG] [Thread-118459] [transport.py] [_log()] starting thread (client mode): 0xa51cd240
2025-12-03T14:43:03.188 [DEBUG] [Thread-118459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:43:03.208 [DEBUG] [Thread-118459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:43:03.208 [INFO] [Thread-118459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] client lang: <none>
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] server lang: <none>
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] kex follows: False
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] Compression: none
2025-12-03T14:43:03.211 [DEBUG] [Thread-118459] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:43:03.228 [DEBUG] [Thread-118459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:43:03.228 [DEBUG] [Thread-118459] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:43:03.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:43:03.229 [DEBUG] [Thread-118459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:43:03.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:43:03.231 [DEBUG] [Thread-118459] [transport.py] [_log()] userauth is OK
2025-12-03T14:43:03.231 [DEBUG] [Thread-118459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:43:03.232 [DEBUG] [Thread-118459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:43:03.232 [DEBUG] [Thread-118459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:43:03.232 [DEBUG] [Thread-118459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:43:03.253 [INFO] [Thread-118459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:43:03.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:43:03.903 [DEBUG] [Thread-118459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:43:03.903 [DEBUG] [Thread-118459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:43:03.903 [DEBUG] [Thread-118459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:43:03.944 [DEBUG] [Thread-118459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:43:03.944 [DEBUG] [Thread-118459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:43:03.947 [DEBUG] [Thread-118459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:43:03.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:43:03.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:43:03.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:43:03.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:43:03.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:43:03.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:43:03.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.529563 -999.00  +22.30   5.97     23   +0.60 1 1 1 1 1   888    0 22.83 46.15 ----- 5.6 6.0 181.1 12.6 30.9 -30.8 30.1 -28.8 31.8 -29.1 32.6 -29.8
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:43:03.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.529563
2025-12-03T14:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:43:03.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:43:03.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:42:43', tmtdew=24.25, humidity=19.12, cloud=0.0, wind=7.78, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:42:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:43:03.969 [DEBUG] [Thread-118459] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:43:04.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:43:04.064 [DEBUG] [Thread-118462] [transport.py] [_log()] starting thread (client mode): 0xa517df90
2025-12-03T14:43:04.064 [DEBUG] [Thread-118462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:43:04.079 [DEBUG] [Thread-118462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:43:04.079 [INFO] [Thread-118462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] client lang: <none>
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] server lang: <none>
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] kex follows: False
2025-12-03T14:43:04.087 [DEBUG] [Thread-118462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] Compression: none
2025-12-03T14:43:04.088 [DEBUG] [Thread-118462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:43:04.147 [DEBUG] [Thread-118462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:43:04.147 [DEBUG] [Thread-118462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:43:04.148 [DEBUG] [Thread-118462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:43:04.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:43:04.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:43:04.202 [DEBUG] [Thread-118462] [transport.py] [_log()] userauth is OK
2025-12-03T14:43:04.203 [DEBUG] [Thread-118462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:43:04.203 [DEBUG] [Thread-118462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:43:04.203 [DEBUG] [Thread-118462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:43:04.203 [DEBUG] [Thread-118462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:43:04.223 [INFO] [Thread-118462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:43:04.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:43:04.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:43:05.060 [DEBUG] [Thread-118462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:43:05.061 [DEBUG] [Thread-118462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:43:05.111 [DEBUG] [Thread-118462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:43:05.111 [DEBUG] [Thread-118462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:43:05.120 [DEBUG] [Thread-118462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:43:05.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:43:05.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:43:05.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:43:05.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:43:05.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:43:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:43:05.154 [DEBUG] [Thread-118462] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:43:06.214 [DEBUG] [Thread-118464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:21.255 [DEBUG] [Thread-118465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:22.306 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:22.307 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:35.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:43:35.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:43:35.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 43, 15), 24.16, 19.22, 0.0, 5.14, 20.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:43:35.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:43:15
2025-12-03T14:43:35.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:43:36.118 [DEBUG] [Thread-118466] [transport.py] [_log()] starting thread (client mode): 0xa27cbca0
2025-12-03T14:43:36.118 [DEBUG] [Thread-118466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:43:36.138 [DEBUG] [Thread-118466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:43:36.138 [INFO] [Thread-118466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:36.141 [DEBUG] [Thread-118466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] client lang: <none>
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] server lang: <none>
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] kex follows: False
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] Compression: none
2025-12-03T14:43:36.142 [DEBUG] [Thread-118466] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:43:36.160 [DEBUG] [Thread-118466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:43:36.161 [DEBUG] [Thread-118466] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:43:36.161 [DEBUG] [Thread-118466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:43:36.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:43:36.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:43:36.163 [DEBUG] [Thread-118466] [transport.py] [_log()] userauth is OK
2025-12-03T14:43:36.163 [DEBUG] [Thread-118466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:43:36.163 [DEBUG] [Thread-118466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:43:36.163 [DEBUG] [Thread-118466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:43:36.164 [DEBUG] [Thread-118466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:43:36.180 [INFO] [Thread-118466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:43:36.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:43:36.283 [DEBUG] [Thread-118468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:36.828 [DEBUG] [Thread-118466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:43:36.828 [DEBUG] [Thread-118466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:43:36.828 [DEBUG] [Thread-118466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:43:36.869 [DEBUG] [Thread-118466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:43:36.869 [DEBUG] [Thread-118466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:43:36.872 [DEBUG] [Thread-118466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:43:36.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:43:36.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:43:36.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:43:36.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:43:36.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:43:36.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:43:36.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.529910 -999.00  +22.50   8.89     23   +0.30 1 1 1 1 1   888    0 21.91 47.00 ----- 5.0 8.9 181.8 9.7 30.9 -30.9 30.1 -29.7 31.7 -27.7 32.6 -29.3
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:43:36.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.529910
2025-12-03T14:43:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:43:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:43:36.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:43:36.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:43:36.896 [DEBUG] [Thread-118466] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:43:36.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:43:36.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:43:15', tmtdew=24.16, humidity=19.22, cloud=0.0, wind=5.14, temperature=20.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:43:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:43:36.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:43:36.993 [DEBUG] [Thread-118470] [transport.py] [_log()] starting thread (client mode): 0xa27473d0
2025-12-03T14:43:36.993 [DEBUG] [Thread-118470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:43:37.007 [DEBUG] [Thread-118470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:43:37.007 [INFO] [Thread-118470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] client lang: <none>
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] server lang: <none>
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] kex follows: False
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:43:37.016 [DEBUG] [Thread-118470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:43:37.017 [DEBUG] [Thread-118470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:43:37.017 [DEBUG] [Thread-118470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:43:37.017 [DEBUG] [Thread-118470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:43:37.017 [DEBUG] [Thread-118470] [transport.py] [_log()] Compression: none
2025-12-03T14:43:37.017 [DEBUG] [Thread-118470] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:43:37.077 [DEBUG] [Thread-118470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:43:37.078 [DEBUG] [Thread-118470] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:43:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:43:37.079 [DEBUG] [Thread-118470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:43:37.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:43:37.134 [DEBUG] [Thread-118470] [transport.py] [_log()] userauth is OK
2025-12-03T14:43:37.134 [DEBUG] [Thread-118470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:43:37.134 [DEBUG] [Thread-118470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:43:37.134 [DEBUG] [Thread-118470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:43:37.134 [DEBUG] [Thread-118470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:43:37.153 [INFO] [Thread-118470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:43:37.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:43:37.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:43:37.941 [DEBUG] [Thread-118470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:43:37.941 [DEBUG] [Thread-118470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:43:37.989 [DEBUG] [Thread-118470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:43:37.989 [DEBUG] [Thread-118470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:43:37.998 [DEBUG] [Thread-118470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:43:38.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:43:38.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:43:38.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:43:38.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:43:38.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:43:38.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:43:38.039 [DEBUG] [Thread-118470] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:43:51.171 [DEBUG] [Thread-118472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:43:51.312 [DEBUG] [Thread-118473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:06.353 [DEBUG] [Thread-118474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:44:08.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:44:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:44:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 43, 47), 23.85, 19.88, 0.0, 5.3, 20.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:44:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:43:47
2025-12-03T14:44:08.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:44:08.982 [DEBUG] [Thread-118475] [transport.py] [_log()] starting thread (client mode): 0xa27b42e0
2025-12-03T14:44:08.982 [DEBUG] [Thread-118475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:44:09.002 [DEBUG] [Thread-118475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:44:09.002 [INFO] [Thread-118475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:44:09.005 [DEBUG] [Thread-118475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] client lang: <none>
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] server lang: <none>
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] kex follows: False
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] Compression: none
2025-12-03T14:44:09.006 [DEBUG] [Thread-118475] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:44:09.023 [DEBUG] [Thread-118475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:44:09.024 [DEBUG] [Thread-118475] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:44:09.024 [DEBUG] [Thread-118475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:44:09.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:44:09.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:44:09.026 [DEBUG] [Thread-118475] [transport.py] [_log()] userauth is OK
2025-12-03T14:44:09.026 [DEBUG] [Thread-118475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:44:09.026 [DEBUG] [Thread-118475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:44:09.026 [DEBUG] [Thread-118475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:44:09.027 [DEBUG] [Thread-118475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:44:09.047 [INFO] [Thread-118475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:44:09.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:44:09.686 [DEBUG] [Thread-118475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:44:09.686 [DEBUG] [Thread-118475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:44:09.686 [DEBUG] [Thread-118475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:44:09.727 [DEBUG] [Thread-118475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:44:09.728 [DEBUG] [Thread-118475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:44:09.730 [DEBUG] [Thread-118475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:44:09.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:44:09.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:44:09.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:44:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:44:09.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:44:09.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:44:09.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.530257 -999.00  +22.60   5.23     22   +0.30 1 1 1 1 1   888    0 22.11 53.22 ----- 5.5 5.2 240.1 7.0 31.0 -30.8 30.4 -29.1 31.9 -27.3 32.7 -29.6
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:44:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.530257
2025-12-03T14:44:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:44:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:44:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:44:09.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:44:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:44:09.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:43:47', tmtdew=23.85, humidity=19.88, cloud=0.0, wind=5.3, temperature=20.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:43:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:44:09.755 [DEBUG] [Thread-118475] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:44:09.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:44:09.850 [DEBUG] [Thread-118478] [transport.py] [_log()] starting thread (client mode): 0xa51cc970
2025-12-03T14:44:09.850 [DEBUG] [Thread-118478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:44:09.864 [DEBUG] [Thread-118478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:44:09.864 [INFO] [Thread-118478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] client lang: <none>
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] server lang: <none>
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] kex follows: False
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:44:09.872 [DEBUG] [Thread-118478] [transport.py] [_log()] Compression: none
2025-12-03T14:44:09.873 [DEBUG] [Thread-118478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:44:09.933 [DEBUG] [Thread-118478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:44:09.933 [DEBUG] [Thread-118478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:44:09.934 [DEBUG] [Thread-118478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:44:09.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:44:09.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:44:09.990 [DEBUG] [Thread-118478] [transport.py] [_log()] userauth is OK
2025-12-03T14:44:09.990 [DEBUG] [Thread-118478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:44:09.990 [DEBUG] [Thread-118478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:44:09.991 [DEBUG] [Thread-118478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:44:09.991 [DEBUG] [Thread-118478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:44:10.009 [INFO] [Thread-118478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:44:10.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:44:10.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:44:10.843 [DEBUG] [Thread-118478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:44:10.843 [DEBUG] [Thread-118478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:44:10.890 [DEBUG] [Thread-118478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:44:10.890 [DEBUG] [Thread-118478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:44:10.900 [DEBUG] [Thread-118478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:44:10.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:44:10.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:44:10.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:44:10.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:44:10.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:44:10.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:44:10.934 [DEBUG] [Thread-118478] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:44:21.380 [DEBUG] [Thread-118480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:22.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:22.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:36.418 [DEBUG] [Thread-118481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:40.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:44:40.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:44:40.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:44:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 44, 19), 24.04, 19.63, 0.0, 5.01, 20.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:44:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:44:19
2025-12-03T14:44:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:44:41.951 [DEBUG] [Thread-118482] [transport.py] [_log()] starting thread (client mode): 0xa27c9390
2025-12-03T14:44:41.951 [DEBUG] [Thread-118482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:44:41.973 [DEBUG] [Thread-118482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:44:41.973 [INFO] [Thread-118482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] client lang: <none>
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] server lang: <none>
2025-12-03T14:44:41.976 [DEBUG] [Thread-118482] [transport.py] [_log()] kex follows: False
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] Compression: none
2025-12-03T14:44:41.977 [DEBUG] [Thread-118482] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:44:41.992 [DEBUG] [Thread-118482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:44:41.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:44:41.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] userauth is OK
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:44:41.993 [DEBUG] [Thread-118482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:44:42.002 [INFO] [Thread-118482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:44:42.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:44:42.594 [DEBUG] [Thread-118482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:44:42.594 [DEBUG] [Thread-118482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:44:42.594 [DEBUG] [Thread-118482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:44:42.636 [DEBUG] [Thread-118482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:44:42.636 [DEBUG] [Thread-118482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:44:42.638 [DEBUG] [Thread-118482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:44:42.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:44:42.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:44:42.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:44:42.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:44:42.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:44:42.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:44:42.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.530604 -999.00  +22.50   3.13     23   +0.30 1 1 1 1 1   888    0 22.61 61.35 ----- 6.6 3.1 226.3 7.5 31.1 -29.5 30.4 -29.4 32.0 -27.2 32.9 -29.3
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.530604
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:44:42.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:44:19', tmtdew=24.04, humidity=19.63, cloud=0.0, wind=5.01, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:44:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:44:42.656 [DEBUG] [Thread-118482] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:44:42.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:44:42.743 [DEBUG] [Thread-118485] [transport.py] [_log()] starting thread (client mode): 0xa27b43d0
2025-12-03T14:44:42.743 [DEBUG] [Thread-118485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:44:42.757 [DEBUG] [Thread-118485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:44:42.757 [INFO] [Thread-118485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] client lang: <none>
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] server lang: <none>
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] kex follows: False
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] Compression: none
2025-12-03T14:44:42.765 [DEBUG] [Thread-118485] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:44:42.824 [DEBUG] [Thread-118485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:44:42.824 [DEBUG] [Thread-118485] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:44:42.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:44:42.825 [DEBUG] [Thread-118485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:44:42.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:44:42.881 [DEBUG] [Thread-118485] [transport.py] [_log()] userauth is OK
2025-12-03T14:44:42.881 [DEBUG] [Thread-118485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:44:42.881 [DEBUG] [Thread-118485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:44:42.881 [DEBUG] [Thread-118485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:44:42.881 [DEBUG] [Thread-118485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:44:42.899 [INFO] [Thread-118485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:44:42.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:44:42.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:44:43.737 [DEBUG] [Thread-118485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:44:43.737 [DEBUG] [Thread-118485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:44:43.785 [DEBUG] [Thread-118485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:44:43.786 [DEBUG] [Thread-118485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:44:43.794 [DEBUG] [Thread-118485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:44:43.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:44:43.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:44:43.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:44:43.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:44:43.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:44:43.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:44:43.826 [DEBUG] [Thread-118485] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:44:51.204 [DEBUG] [Thread-118487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:44:51.448 [DEBUG] [Thread-118488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:06.490 [DEBUG] [Thread-118489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:45:13.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:45:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:45:14.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 44, 51), 24.01, 19.7, 0.0, 2.88, 20.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:45:14.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:44:51
2025-12-03T14:45:14.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:45:14.798 [DEBUG] [Thread-118490] [transport.py] [_log()] starting thread (client mode): 0xa2750820
2025-12-03T14:45:14.798 [DEBUG] [Thread-118490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:45:14.827 [DEBUG] [Thread-118490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:45:14.827 [INFO] [Thread-118490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:45:14.830 [DEBUG] [Thread-118490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] client lang: <none>
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] server lang: <none>
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] kex follows: False
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] Compression: none
2025-12-03T14:45:14.831 [DEBUG] [Thread-118490] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:45:14.850 [DEBUG] [Thread-118490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:45:14.851 [DEBUG] [Thread-118490] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:45:14.851 [DEBUG] [Thread-118490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:45:14.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:45:14.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:45:14.853 [DEBUG] [Thread-118490] [transport.py] [_log()] userauth is OK
2025-12-03T14:45:14.853 [DEBUG] [Thread-118490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:45:14.854 [DEBUG] [Thread-118490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:45:14.854 [DEBUG] [Thread-118490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:45:14.854 [DEBUG] [Thread-118490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:45:14.888 [INFO] [Thread-118490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:45:14.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:45:15.548 [DEBUG] [Thread-118490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:45:15.548 [DEBUG] [Thread-118490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:45:15.549 [DEBUG] [Thread-118490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:45:15.590 [DEBUG] [Thread-118490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:45:15.590 [DEBUG] [Thread-118490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:45:15.593 [DEBUG] [Thread-118490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:45:15.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:45:15.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:45:15.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:45:15.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:45:15.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:45:15.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:45:15.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:45:15.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.530952 -999.00  +22.40   4.28     23   +0.50 1 1 1 1 1   888    0 22.81 67.87 ----- 4.9 4.3 241.4 10.8 31.1 -29.6 30.5 -29.1 31.9 -27.3 32.9 -27.9
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.530952
2025-12-03T14:45:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:45:15.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:44:51', tmtdew=24.01, humidity=19.7, cloud=0.0, wind=2.88, temperature=20.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:44:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:45:15.618 [DEBUG] [Thread-118490] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:45:15.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:45:15.715 [DEBUG] [Thread-118493] [transport.py] [_log()] starting thread (client mode): 0xa519bf70
2025-12-03T14:45:15.715 [DEBUG] [Thread-118493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:45:15.730 [DEBUG] [Thread-118493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:45:15.731 [INFO] [Thread-118493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:45:15.738 [DEBUG] [Thread-118493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:45:15.739 [DEBUG] [Thread-118493] [transport.py] [_log()] client lang: <none>
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] server lang: <none>
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] kex follows: False
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] Compression: none
2025-12-03T14:45:15.740 [DEBUG] [Thread-118493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:45:15.797 [DEBUG] [Thread-118493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:45:15.797 [DEBUG] [Thread-118493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:45:15.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:45:15.798 [DEBUG] [Thread-118493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:45:15.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:45:15.853 [DEBUG] [Thread-118493] [transport.py] [_log()] userauth is OK
2025-12-03T14:45:15.853 [DEBUG] [Thread-118493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:45:15.854 [DEBUG] [Thread-118493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:45:15.854 [DEBUG] [Thread-118493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:45:15.854 [DEBUG] [Thread-118493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:45:15.872 [INFO] [Thread-118493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:45:15.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:45:15.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:45:16.707 [DEBUG] [Thread-118493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:45:16.707 [DEBUG] [Thread-118493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:45:16.755 [DEBUG] [Thread-118493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:45:16.755 [DEBUG] [Thread-118493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:45:16.764 [DEBUG] [Thread-118493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:45:16.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:45:16.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:45:16.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:45:16.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:45:16.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:45:16.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:45:16.798 [DEBUG] [Thread-118493] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:45:21.518 [DEBUG] [Thread-118495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:22.586 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:22.587 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:36.549 [DEBUG] [Thread-118496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:46.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:45:46.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:45:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:45:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 45, 23), 24.04, 19.68, 0.0, 3.69, 21.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:45:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:45:23
2025-12-03T14:45:47.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:45:47.773 [DEBUG] [Thread-118497] [transport.py] [_log()] starting thread (client mode): 0xa2751f00
2025-12-03T14:45:47.773 [DEBUG] [Thread-118497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:45:47.793 [DEBUG] [Thread-118497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:45:47.794 [INFO] [Thread-118497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] client lang: <none>
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] server lang: <none>
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] kex follows: False
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] Compression: none
2025-12-03T14:45:47.795 [DEBUG] [Thread-118497] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:45:47.803 [DEBUG] [Thread-118497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:45:47.803 [DEBUG] [Thread-118497] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:45:47.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:45:47.803 [DEBUG] [Thread-118497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:45:47.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:45:47.804 [DEBUG] [Thread-118497] [transport.py] [_log()] userauth is OK
2025-12-03T14:45:47.804 [DEBUG] [Thread-118497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:45:47.804 [DEBUG] [Thread-118497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:45:47.804 [DEBUG] [Thread-118497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:45:47.804 [DEBUG] [Thread-118497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:45:47.817 [INFO] [Thread-118497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:45:47.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:45:48.464 [DEBUG] [Thread-118497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:45:48.464 [DEBUG] [Thread-118497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:45:48.465 [DEBUG] [Thread-118497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:45:48.505 [DEBUG] [Thread-118497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:45:48.505 [DEBUG] [Thread-118497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:45:48.508 [DEBUG] [Thread-118497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:45:48.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:45:48.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:45:48.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:45:48.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:45:48.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:45:48.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:45:48.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:45:48.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:45:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:45:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.531299 -999.00  +22.50  10.23     23   +0.40 1 1 1 1 1   888    0 23.36 65.70 ----- 7.9 10.2 165.9 11.9 31.1 -30.6 30.6 -30.8 31.7 -28.7 32.7 -29.3
2025-12-03T14:45:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:45:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:45:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.531299
2025-12-03T14:45:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:45:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:45:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:45:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:45:48.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:45:48.533 [DEBUG] [Thread-118497] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:45:48.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:45:23', tmtdew=24.04, humidity=19.68, cloud=0.0, wind=3.69, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:45:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:45:48.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:45:48.630 [DEBUG] [Thread-118500] [transport.py] [_log()] starting thread (client mode): 0xa517e260
2025-12-03T14:45:48.630 [DEBUG] [Thread-118500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:45:48.645 [DEBUG] [Thread-118500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:45:48.646 [INFO] [Thread-118500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:45:48.654 [DEBUG] [Thread-118500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] client lang: <none>
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] server lang: <none>
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] kex follows: False
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:45:48.655 [DEBUG] [Thread-118500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:45:48.656 [DEBUG] [Thread-118500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:45:48.656 [DEBUG] [Thread-118500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:45:48.656 [DEBUG] [Thread-118500] [transport.py] [_log()] Compression: none
2025-12-03T14:45:48.656 [DEBUG] [Thread-118500] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:45:48.714 [DEBUG] [Thread-118500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:45:48.715 [DEBUG] [Thread-118500] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:45:48.715 [DEBUG] [Thread-118500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:45:48.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:45:48.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:45:48.773 [DEBUG] [Thread-118500] [transport.py] [_log()] userauth is OK
2025-12-03T14:45:48.773 [DEBUG] [Thread-118500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:45:48.773 [DEBUG] [Thread-118500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:45:48.773 [DEBUG] [Thread-118500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:45:48.773 [DEBUG] [Thread-118500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:45:48.793 [INFO] [Thread-118500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:45:48.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:45:48.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:45:49.633 [DEBUG] [Thread-118500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:45:49.633 [DEBUG] [Thread-118500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:45:49.681 [DEBUG] [Thread-118500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:45:49.681 [DEBUG] [Thread-118500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:45:49.690 [DEBUG] [Thread-118500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:45:49.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:45:49.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:45:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:45:49.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:45:49.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:45:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:45:49.724 [DEBUG] [Thread-118500] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:45:51.248 [DEBUG] [Thread-118502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:45:51.581 [DEBUG] [Thread-118503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:06.628 [DEBUG] [Thread-118504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:46:19.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:46:19.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:46:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 45, 55), 24.24, 19.55, 0.0, 6.6, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:46:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:45:55
2025-12-03T14:46:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:46:20.690 [DEBUG] [Thread-118505] [transport.py] [_log()] starting thread (client mode): 0xa2763910
2025-12-03T14:46:20.690 [DEBUG] [Thread-118505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:46:20.712 [DEBUG] [Thread-118505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:46:20.712 [INFO] [Thread-118505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:20.715 [DEBUG] [Thread-118505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] client lang: <none>
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] server lang: <none>
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] kex follows: False
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] Compression: none
2025-12-03T14:46:20.716 [DEBUG] [Thread-118505] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:46:20.726 [DEBUG] [Thread-118505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:46:20.727 [DEBUG] [Thread-118505] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:46:20.728 [DEBUG] [Thread-118505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:46:20.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:46:20.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:46:20.730 [DEBUG] [Thread-118505] [transport.py] [_log()] userauth is OK
2025-12-03T14:46:20.730 [DEBUG] [Thread-118505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:46:20.731 [DEBUG] [Thread-118505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:46:20.731 [DEBUG] [Thread-118505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:46:20.731 [DEBUG] [Thread-118505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:46:20.749 [INFO] [Thread-118505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:46:20.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:46:21.389 [DEBUG] [Thread-118505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:46:21.389 [DEBUG] [Thread-118505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:46:21.390 [DEBUG] [Thread-118505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:46:21.430 [DEBUG] [Thread-118505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:46:21.430 [DEBUG] [Thread-118505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:46:21.433 [DEBUG] [Thread-118505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:46:21.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:46:21.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:46:21.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:46:21.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:46:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:46:21.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:46:21.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:46:21.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:46:21.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:46:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.531993 -999.00  +22.30   6.72     23   +0.20 1 1 1 1 1   888    0 23.24 70.13 ----- 5.6 6.7 233.8 14.8 31.0 -30.3 30.5 -29.4 31.8 -27.1 32.6 -27.9
2025-12-03T14:46:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:46:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:46:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.531993
2025-12-03T14:46:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:46:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:46:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:46:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:46:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:46:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:45:55', tmtdew=24.24, humidity=19.55, cloud=0.0, wind=6.6, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:46:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:46:21.457 [DEBUG] [Thread-118505] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:46:21.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:46:21.549 [DEBUG] [Thread-118508] [transport.py] [_log()] starting thread (client mode): 0xa2747e50
2025-12-03T14:46:21.549 [DEBUG] [Thread-118508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:46:21.564 [DEBUG] [Thread-118508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:46:21.564 [INFO] [Thread-118508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] client lang: <none>
2025-12-03T14:46:21.572 [DEBUG] [Thread-118508] [transport.py] [_log()] server lang: <none>
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] kex follows: False
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] Compression: none
2025-12-03T14:46:21.573 [DEBUG] [Thread-118508] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:46:21.629 [DEBUG] [Thread-118508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:46:21.630 [DEBUG] [Thread-118508] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:46:21.630 [DEBUG] [Thread-118508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:46:21.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:46:21.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:46:21.660 [DEBUG] [Thread-118510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:21.688 [DEBUG] [Thread-118508] [transport.py] [_log()] userauth is OK
2025-12-03T14:46:21.689 [DEBUG] [Thread-118508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:46:21.689 [DEBUG] [Thread-118508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:46:21.689 [DEBUG] [Thread-118508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:46:21.689 [DEBUG] [Thread-118508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:46:21.709 [INFO] [Thread-118508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:46:21.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:46:21.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:46:22.540 [DEBUG] [Thread-118508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:46:22.541 [DEBUG] [Thread-118508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:46:22.590 [DEBUG] [Thread-118508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:46:22.590 [DEBUG] [Thread-118508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:46:22.599 [DEBUG] [Thread-118508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:46:22.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:46:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:46:22.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:46:22.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:46:22.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:46:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:46:22.635 [DEBUG] [Thread-118508] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:46:22.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:22.731 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:36.698 [DEBUG] [Thread-118511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:51.298 [DEBUG] [Thread-118512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:51.733 [DEBUG] [Thread-118513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:46:52.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:46:52.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:46:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:46:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 46, 27), 24.64, 19.05, 0.0, 6.48, 21.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:46:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:46:27
2025-12-03T14:46:53.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:46:53.580 [DEBUG] [Thread-118514] [transport.py] [_log()] starting thread (client mode): 0xa277a2c0
2025-12-03T14:46:53.580 [DEBUG] [Thread-118514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:46:53.600 [DEBUG] [Thread-118514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:46:53.600 [INFO] [Thread-118514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:46:53.603 [DEBUG] [Thread-118514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:46:53.603 [DEBUG] [Thread-118514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] client lang: <none>
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] server lang: <none>
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] kex follows: False
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:46:53.604 [DEBUG] [Thread-118514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:46:53.605 [DEBUG] [Thread-118514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:46:53.605 [DEBUG] [Thread-118514] [transport.py] [_log()] Compression: none
2025-12-03T14:46:53.605 [DEBUG] [Thread-118514] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:46:53.622 [DEBUG] [Thread-118514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:46:53.623 [DEBUG] [Thread-118514] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:46:53.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:46:53.624 [DEBUG] [Thread-118514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:46:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:46:53.625 [DEBUG] [Thread-118514] [transport.py] [_log()] userauth is OK
2025-12-03T14:46:53.626 [DEBUG] [Thread-118514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:46:53.626 [DEBUG] [Thread-118514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:46:53.626 [DEBUG] [Thread-118514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:46:53.626 [DEBUG] [Thread-118514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:46:53.645 [INFO] [Thread-118514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:46:53.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:46:54.296 [DEBUG] [Thread-118514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:46:54.296 [DEBUG] [Thread-118514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:46:54.297 [DEBUG] [Thread-118514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:46:54.337 [DEBUG] [Thread-118514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:46:54.337 [DEBUG] [Thread-118514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:46:54.339 [DEBUG] [Thread-118514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:46:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:46:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:46:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:46:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:46:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:46:54.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:46:54.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:46:54.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.532341 -999.00  +22.60  12.54     23   +0.50 1 1 1 1 1   888    0 23.23 69.14 ----- 8.0 12.5 218.6 14.7 30.9 -32.4 30.4 -29.7 31.7 -27.7 32.4 -30.5
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.532341
2025-12-03T14:46:54.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:46:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:46:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:46:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:46:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:46:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:46:27', tmtdew=24.64, humidity=19.05, cloud=0.0, wind=6.48, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:46:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:46:54.363 [DEBUG] [Thread-118514] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:46:54.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:46:54.461 [DEBUG] [Thread-118517] [transport.py] [_log()] starting thread (client mode): 0xa517e830
2025-12-03T14:46:54.461 [DEBUG] [Thread-118517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:46:54.476 [DEBUG] [Thread-118517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:46:54.476 [INFO] [Thread-118517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:46:54.484 [DEBUG] [Thread-118517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] client lang: <none>
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] server lang: <none>
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] kex follows: False
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] Compression: none
2025-12-03T14:46:54.485 [DEBUG] [Thread-118517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:46:54.545 [DEBUG] [Thread-118517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:46:54.545 [DEBUG] [Thread-118517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:46:54.546 [DEBUG] [Thread-118517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:46:54.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:46:54.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:46:54.600 [DEBUG] [Thread-118517] [transport.py] [_log()] userauth is OK
2025-12-03T14:46:54.600 [DEBUG] [Thread-118517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:46:54.600 [DEBUG] [Thread-118517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:46:54.600 [DEBUG] [Thread-118517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:46:54.600 [DEBUG] [Thread-118517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:46:54.614 [INFO] [Thread-118517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:46:54.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:46:54.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:46:55.485 [DEBUG] [Thread-118517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:46:55.485 [DEBUG] [Thread-118517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:46:55.532 [DEBUG] [Thread-118517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:46:55.533 [DEBUG] [Thread-118517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:46:55.542 [DEBUG] [Thread-118517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:46:55.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:46:55.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:46:55.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:46:55.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:46:55.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:46:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:46:55.575 [DEBUG] [Thread-118517] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:47:06.762 [DEBUG] [Thread-118519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:21.802 [DEBUG] [Thread-118520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:22.872 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:22.873 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:25.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:47:25.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:47:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:47:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 46, 27), 24.74, 19.05, 0.0, 10.08, 21.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:47:26.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:46:27
2025-12-03T14:47:26.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:47:26.513 [DEBUG] [Thread-118521] [transport.py] [_log()] starting thread (client mode): 0xa517db10
2025-12-03T14:47:26.513 [DEBUG] [Thread-118521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:47:26.532 [DEBUG] [Thread-118521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:47:26.532 [INFO] [Thread-118521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] client lang: <none>
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] server lang: <none>
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] kex follows: False
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] Compression: none
2025-12-03T14:47:26.535 [DEBUG] [Thread-118521] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:47:26.551 [DEBUG] [Thread-118521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:47:26.552 [DEBUG] [Thread-118521] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:47:26.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:47:26.553 [DEBUG] [Thread-118521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:47:26.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:47:26.555 [DEBUG] [Thread-118521] [transport.py] [_log()] userauth is OK
2025-12-03T14:47:26.555 [DEBUG] [Thread-118521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:47:26.555 [DEBUG] [Thread-118521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:47:26.555 [DEBUG] [Thread-118521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:47:26.555 [DEBUG] [Thread-118521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:47:26.579 [INFO] [Thread-118521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:47:26.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:47:27.206 [DEBUG] [Thread-118521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:47:27.206 [DEBUG] [Thread-118521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:47:27.207 [DEBUG] [Thread-118521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:47:27.248 [DEBUG] [Thread-118521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:47:27.248 [DEBUG] [Thread-118521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:47:27.251 [DEBUG] [Thread-118521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:47:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:47:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:47:27.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:47:27.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:47:27.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:47:27.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:47:27.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:47:27.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:47:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:47:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.532688 -999.00  +22.80   5.49     23   +0.60 1 1 1 1 1   888    0 23.57 71.97 ----- 5.2 5.5 190.8 13.8 30.9 -29.9 30.3 -31.0 31.6 -27.4 32.3 -31.2
2025-12-03T14:47:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:47:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:47:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.532688
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:47:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:46:27', tmtdew=24.74, humidity=19.05, cloud=0.0, wind=10.08, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:47:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:47:27.275 [DEBUG] [Thread-118521] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:47:27.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:47:27.375 [DEBUG] [Thread-118524] [transport.py] [_log()] starting thread (client mode): 0xa2752ec0
2025-12-03T14:47:27.375 [DEBUG] [Thread-118524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:47:27.390 [DEBUG] [Thread-118524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:47:27.390 [INFO] [Thread-118524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] client lang: <none>
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] server lang: <none>
2025-12-03T14:47:27.398 [DEBUG] [Thread-118524] [transport.py] [_log()] kex follows: False
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] Compression: none
2025-12-03T14:47:27.399 [DEBUG] [Thread-118524] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:47:27.455 [DEBUG] [Thread-118524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:47:27.456 [DEBUG] [Thread-118524] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:47:27.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:47:27.457 [DEBUG] [Thread-118524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:47:27.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:47:27.512 [DEBUG] [Thread-118524] [transport.py] [_log()] userauth is OK
2025-12-03T14:47:27.512 [DEBUG] [Thread-118524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:47:27.512 [DEBUG] [Thread-118524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:47:27.512 [DEBUG] [Thread-118524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:47:27.513 [DEBUG] [Thread-118524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:47:27.532 [INFO] [Thread-118524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:47:27.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:47:27.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:47:28.402 [DEBUG] [Thread-118524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:47:28.402 [DEBUG] [Thread-118524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:47:28.450 [DEBUG] [Thread-118524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:47:28.450 [DEBUG] [Thread-118524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:47:28.459 [DEBUG] [Thread-118524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:47:28.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:47:28.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:47:28.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:47:28.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:47:28.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:47:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:47:28.493 [DEBUG] [Thread-118524] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:47:36.828 [DEBUG] [Thread-118526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:51.332 [DEBUG] [Thread-118527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:51.882 [DEBUG] [Thread-118528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:47:58.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:47:58.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:47:58.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:47:59.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 47, 32), 24.93, 18.84, 0.0, 13.46, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:47:59.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:47:32
2025-12-03T14:47:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:47:59.506 [DEBUG] [Thread-118529] [transport.py] [_log()] starting thread (client mode): 0xa277b580
2025-12-03T14:47:59.506 [DEBUG] [Thread-118529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:47:59.525 [DEBUG] [Thread-118529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:47:59.525 [INFO] [Thread-118529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:47:59.528 [DEBUG] [Thread-118529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:47:59.528 [DEBUG] [Thread-118529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:47:59.528 [DEBUG] [Thread-118529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:47:59.528 [DEBUG] [Thread-118529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:59.528 [DEBUG] [Thread-118529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] client lang: <none>
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] server lang: <none>
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] kex follows: False
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] Compression: none
2025-12-03T14:47:59.529 [DEBUG] [Thread-118529] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:47:59.544 [DEBUG] [Thread-118529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:47:59.544 [DEBUG] [Thread-118529] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:47:59.544 [DEBUG] [Thread-118529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:47:59.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:47:59.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:47:59.545 [DEBUG] [Thread-118529] [transport.py] [_log()] userauth is OK
2025-12-03T14:47:59.545 [DEBUG] [Thread-118529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:47:59.545 [DEBUG] [Thread-118529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:47:59.545 [DEBUG] [Thread-118529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:47:59.545 [DEBUG] [Thread-118529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:47:59.555 [INFO] [Thread-118529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:47:59.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:48:00.160 [DEBUG] [Thread-118529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:48:00.160 [DEBUG] [Thread-118529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:48:00.160 [DEBUG] [Thread-118529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:48:00.200 [DEBUG] [Thread-118529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:48:00.200 [DEBUG] [Thread-118529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:48:00.202 [DEBUG] [Thread-118529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:48:00.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:48:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:48:00.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:48:00.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:48:00.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:48:00.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:48:00.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.533035 -999.00  +23.00   8.09     22   +0.60 1 1 1 1 1   888    0 23.71 82.96 ----- 5.7 8.1 208.0 10.7 30.8 -31.6 30.3 -29.2 31.6 -27.1 32.3 -29.4
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.533035
2025-12-03T14:48:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:48:00.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:47:32', tmtdew=24.93, humidity=18.84, cloud=0.0, wind=13.46, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:47:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:48:00.219 [DEBUG] [Thread-118529] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:48:00.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:48:00.305 [DEBUG] [Thread-118532] [transport.py] [_log()] starting thread (client mode): 0xa277acb0
2025-12-03T14:48:00.305 [DEBUG] [Thread-118532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:48:00.323 [DEBUG] [Thread-118532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:48:00.323 [INFO] [Thread-118532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:00.330 [DEBUG] [Thread-118532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] client lang: <none>
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] server lang: <none>
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] kex follows: False
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] Compression: none
2025-12-03T14:48:00.331 [DEBUG] [Thread-118532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:48:00.389 [DEBUG] [Thread-118532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:48:00.389 [DEBUG] [Thread-118532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:48:00.390 [DEBUG] [Thread-118532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:48:00.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:48:00.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:48:00.449 [DEBUG] [Thread-118532] [transport.py] [_log()] userauth is OK
2025-12-03T14:48:00.449 [DEBUG] [Thread-118532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:48:00.449 [DEBUG] [Thread-118532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:48:00.449 [DEBUG] [Thread-118532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:48:00.449 [DEBUG] [Thread-118532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:48:00.469 [INFO] [Thread-118532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:48:00.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:48:00.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:48:01.291 [DEBUG] [Thread-118532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:48:01.291 [DEBUG] [Thread-118532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:48:01.339 [DEBUG] [Thread-118532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:48:01.339 [DEBUG] [Thread-118532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:48:01.348 [DEBUG] [Thread-118532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:48:01.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:48:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:48:01.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:48:01.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:48:01.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:48:01.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:48:01.383 [DEBUG] [Thread-118532] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:48:06.911 [DEBUG] [Thread-118534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:21.953 [DEBUG] [Thread-118535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:23.011 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:23.012 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:48:31.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:48:31.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:48:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 48, 4), 24.96, 18.77, 0.0, 13.23, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:48:32.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:48:04
2025-12-03T14:48:32.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:48:32.333 [DEBUG] [Thread-118536] [transport.py] [_log()] starting thread (client mode): 0xa277bd30
2025-12-03T14:48:32.333 [DEBUG] [Thread-118536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:48:32.353 [DEBUG] [Thread-118536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:48:32.353 [INFO] [Thread-118536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] client lang: <none>
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] server lang: <none>
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] kex follows: False
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:48:32.356 [DEBUG] [Thread-118536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:48:32.357 [DEBUG] [Thread-118536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:48:32.357 [DEBUG] [Thread-118536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:48:32.357 [DEBUG] [Thread-118536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:48:32.357 [DEBUG] [Thread-118536] [transport.py] [_log()] Compression: none
2025-12-03T14:48:32.357 [DEBUG] [Thread-118536] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:48:32.373 [DEBUG] [Thread-118536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:48:32.374 [DEBUG] [Thread-118536] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:48:32.374 [DEBUG] [Thread-118536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:48:32.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:48:32.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:48:32.376 [DEBUG] [Thread-118536] [transport.py] [_log()] userauth is OK
2025-12-03T14:48:32.377 [DEBUG] [Thread-118536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:48:32.377 [DEBUG] [Thread-118536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:48:32.377 [DEBUG] [Thread-118536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:48:32.377 [DEBUG] [Thread-118536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:48:32.397 [INFO] [Thread-118536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:48:32.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:48:33.035 [DEBUG] [Thread-118536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:48:33.035 [DEBUG] [Thread-118536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:48:33.036 [DEBUG] [Thread-118536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:48:33.077 [DEBUG] [Thread-118536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:48:33.077 [DEBUG] [Thread-118536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:48:33.080 [DEBUG] [Thread-118536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:48:33.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:48:33.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:48:33.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:48:33.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:48:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:48:33.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:48:33.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.533382 -999.00  +22.80   3.00     22   +0.20 1 1 1 1 1   888    0 23.92 80.86 ----- 5.1 3.0 257.5 10.4 30.7 -31.4 30.3 -29.8 31.6 -26.6 32.3 -28.6
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:48:33.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.533382
2025-12-03T14:48:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:48:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:48:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:48:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:48:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:48:33.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:48:04', tmtdew=24.96, humidity=18.77, cloud=0.0, wind=13.23, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:48:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:48:33.103 [DEBUG] [Thread-118536] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:48:33.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:48:33.199 [DEBUG] [Thread-118539] [transport.py] [_log()] starting thread (client mode): 0xa277b2e0
2025-12-03T14:48:33.199 [DEBUG] [Thread-118539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:48:33.214 [DEBUG] [Thread-118539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:48:33.214 [INFO] [Thread-118539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:48:33.221 [DEBUG] [Thread-118539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:48:33.221 [DEBUG] [Thread-118539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] client lang: <none>
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] server lang: <none>
2025-12-03T14:48:33.222 [DEBUG] [Thread-118539] [transport.py] [_log()] kex follows: False
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] Compression: none
2025-12-03T14:48:33.223 [DEBUG] [Thread-118539] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:48:33.278 [DEBUG] [Thread-118539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:48:33.279 [DEBUG] [Thread-118539] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:48:33.279 [DEBUG] [Thread-118539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:48:33.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:48:33.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:48:33.335 [DEBUG] [Thread-118539] [transport.py] [_log()] userauth is OK
2025-12-03T14:48:33.335 [DEBUG] [Thread-118539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:48:33.336 [DEBUG] [Thread-118539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:48:33.336 [DEBUG] [Thread-118539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:48:33.336 [DEBUG] [Thread-118539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:48:33.354 [INFO] [Thread-118539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:48:33.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:48:33.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:48:34.180 [DEBUG] [Thread-118539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:48:34.180 [DEBUG] [Thread-118539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:48:34.228 [DEBUG] [Thread-118539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:48:34.228 [DEBUG] [Thread-118539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:48:34.236 [DEBUG] [Thread-118539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:48:34.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:48:34.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:48:34.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:48:34.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:48:34.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:48:34.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:48:34.267 [DEBUG] [Thread-118539] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:48:36.978 [DEBUG] [Thread-118541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:51.365 [DEBUG] [Thread-118542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:48:52.013 [DEBUG] [Thread-118543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:49:04.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:49:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:49:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 48, 36), 24.71, 19.05, 0.0, 8.74, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:49:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:48:36
2025-12-03T14:49:05.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:49:05.219 [DEBUG] [Thread-118544] [transport.py] [_log()] starting thread (client mode): 0xa2779a50
2025-12-03T14:49:05.220 [DEBUG] [Thread-118544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:49:05.242 [DEBUG] [Thread-118544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:49:05.242 [INFO] [Thread-118544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:49:05.245 [DEBUG] [Thread-118544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:49:05.245 [DEBUG] [Thread-118544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] client lang: <none>
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] server lang: <none>
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] kex follows: False
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] Compression: none
2025-12-03T14:49:05.246 [DEBUG] [Thread-118544] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:49:05.264 [DEBUG] [Thread-118544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:49:05.265 [DEBUG] [Thread-118544] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:49:05.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:49:05.266 [DEBUG] [Thread-118544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:49:05.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:49:05.267 [DEBUG] [Thread-118544] [transport.py] [_log()] userauth is OK
2025-12-03T14:49:05.267 [DEBUG] [Thread-118544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:49:05.268 [DEBUG] [Thread-118544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:49:05.268 [DEBUG] [Thread-118544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:49:05.268 [DEBUG] [Thread-118544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:49:05.292 [INFO] [Thread-118544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:49:05.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:49:05.879 [DEBUG] [Thread-118544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:49:05.879 [DEBUG] [Thread-118544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:49:05.879 [DEBUG] [Thread-118544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:49:05.920 [DEBUG] [Thread-118544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:49:05.920 [DEBUG] [Thread-118544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:49:05.922 [DEBUG] [Thread-118544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:49:05.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:49:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:49:05.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:49:05.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:49:05.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:49:05.943 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:49:05.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.533729 -999.00  +22.80   7.12     22   +0.20 1 1 1 1 1   888    0 22.97 74.22 ----- 6.7 7.1 196.6 9.6 30.9 -29.7 30.2 -29.2 31.8 -26.4 32.5 -27.8
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:49:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.533729
2025-12-03T14:49:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:49:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:49:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:49:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:49:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:49:05.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:48:36', tmtdew=24.71, humidity=19.05, cloud=0.0, wind=8.74, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:48:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:49:05.946 [DEBUG] [Thread-118544] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:49:06.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:49:06.042 [DEBUG] [Thread-118547] [transport.py] [_log()] starting thread (client mode): 0xa2779960
2025-12-03T14:49:06.042 [DEBUG] [Thread-118547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:49:06.061 [DEBUG] [Thread-118547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:49:06.061 [INFO] [Thread-118547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:49:06.075 [DEBUG] [Thread-118547] [transport.py] [_log()] client lang: <none>
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] server lang: <none>
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] kex follows: False
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] Compression: none
2025-12-03T14:49:06.076 [DEBUG] [Thread-118547] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:49:06.127 [DEBUG] [Thread-118547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:49:06.127 [DEBUG] [Thread-118547] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:49:06.128 [DEBUG] [Thread-118547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:49:06.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:49:06.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:49:06.184 [DEBUG] [Thread-118547] [transport.py] [_log()] userauth is OK
2025-12-03T14:49:06.184 [DEBUG] [Thread-118547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:49:06.184 [DEBUG] [Thread-118547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:49:06.184 [DEBUG] [Thread-118547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:49:06.184 [DEBUG] [Thread-118547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:49:06.204 [INFO] [Thread-118547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:49:06.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:49:06.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:49:07.043 [DEBUG] [Thread-118549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:07.071 [DEBUG] [Thread-118547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:49:07.071 [DEBUG] [Thread-118547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:49:07.120 [DEBUG] [Thread-118547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:49:07.120 [DEBUG] [Thread-118547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:49:07.128 [DEBUG] [Thread-118547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:49:07.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:49:07.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:49:07.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:49:07.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:49:07.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:49:07.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:49:07.162 [DEBUG] [Thread-118547] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:49:22.086 [DEBUG] [Thread-118550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:23.150 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:23.151 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:37.117 [DEBUG] [Thread-118551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:49:37.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:49:37.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:49:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 49, 8), 24.85, 18.86, 29.3, 12.14, 21.28, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:49:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:49:08
2025-12-03T14:49:37.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:49:38.132 [DEBUG] [Thread-118552] [transport.py] [_log()] starting thread (client mode): 0xa27b7f70
2025-12-03T14:49:38.132 [DEBUG] [Thread-118552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:49:38.152 [DEBUG] [Thread-118552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:49:38.152 [INFO] [Thread-118552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:49:38.155 [DEBUG] [Thread-118552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] client lang: <none>
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] server lang: <none>
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] kex follows: False
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:49:38.156 [DEBUG] [Thread-118552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:49:38.157 [DEBUG] [Thread-118552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:49:38.157 [DEBUG] [Thread-118552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:49:38.157 [DEBUG] [Thread-118552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:49:38.157 [DEBUG] [Thread-118552] [transport.py] [_log()] Compression: none
2025-12-03T14:49:38.157 [DEBUG] [Thread-118552] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:49:38.174 [DEBUG] [Thread-118552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:49:38.175 [DEBUG] [Thread-118552] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:49:38.175 [DEBUG] [Thread-118552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:49:38.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:49:38.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:49:38.177 [DEBUG] [Thread-118552] [transport.py] [_log()] userauth is OK
2025-12-03T14:49:38.177 [DEBUG] [Thread-118552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:49:38.177 [DEBUG] [Thread-118552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:49:38.178 [DEBUG] [Thread-118552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:49:38.178 [DEBUG] [Thread-118552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:49:38.201 [INFO] [Thread-118552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:49:38.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:49:38.857 [DEBUG] [Thread-118552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:49:38.857 [DEBUG] [Thread-118552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:49:38.857 [DEBUG] [Thread-118552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:49:38.898 [DEBUG] [Thread-118552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:49:38.898 [DEBUG] [Thread-118552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:49:38.901 [DEBUG] [Thread-118552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:49:38.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:49:38.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:49:38.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:49:38.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:49:38.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:49:38.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:49:38.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:49:38.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:49:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:49:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.534077 -999.00  +23.10   5.75     22   +0.40 1 1 1 1 1   888    0 24.01 73.72 ----- 6.1 5.8 190.2 10.3 31.1 -28.5 30.2 -28.6 31.9 -26.1 32.6 -28.2
2025-12-03T14:49:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:49:38.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:49:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.534077
2025-12-03T14:49:38.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:49:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:49:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:49:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:49:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:49:38.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:49:08', tmtdew=24.85, humidity=18.86, cloud=29.3, wind=12.14, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:49:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:49:38.925 [DEBUG] [Thread-118552] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:49:39.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:49:39.020 [DEBUG] [Thread-118555] [transport.py] [_log()] starting thread (client mode): 0xa2751630
2025-12-03T14:49:39.020 [DEBUG] [Thread-118555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:49:39.035 [DEBUG] [Thread-118555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:49:39.035 [INFO] [Thread-118555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:39.042 [DEBUG] [Thread-118555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] client lang: <none>
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] server lang: <none>
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] kex follows: False
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] Compression: none
2025-12-03T14:49:39.043 [DEBUG] [Thread-118555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:49:39.098 [DEBUG] [Thread-118555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:49:39.099 [DEBUG] [Thread-118555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:49:39.099 [DEBUG] [Thread-118555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:49:39.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:49:39.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:49:39.155 [DEBUG] [Thread-118555] [transport.py] [_log()] userauth is OK
2025-12-03T14:49:39.155 [DEBUG] [Thread-118555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:49:39.155 [DEBUG] [Thread-118555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:49:39.155 [DEBUG] [Thread-118555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:49:39.155 [DEBUG] [Thread-118555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:49:39.173 [INFO] [Thread-118555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:49:39.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:49:39.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:49:39.967 [DEBUG] [Thread-118555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:49:39.968 [DEBUG] [Thread-118555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:49:40.016 [DEBUG] [Thread-118555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:49:40.016 [DEBUG] [Thread-118555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:49:40.025 [DEBUG] [Thread-118555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:49:40.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:49:40.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:49:40.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:49:40.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:49:40.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:49:40.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:49:40.058 [DEBUG] [Thread-118555] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:49:51.419 [DEBUG] [Thread-118557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:49:52.148 [DEBUG] [Thread-118558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:07.227 [DEBUG] [Thread-118559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:50:10.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:50:10.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:50:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 49, 40), 24.77, 18.49, 29.3, 13.16, 21.35, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:50:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:49:40
2025-12-03T14:50:10.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:50:11.022 [DEBUG] [Thread-118560] [transport.py] [_log()] starting thread (client mode): 0xa27b5300
2025-12-03T14:50:11.022 [DEBUG] [Thread-118560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:50:11.043 [DEBUG] [Thread-118560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:50:11.043 [INFO] [Thread-118560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] client lang: <none>
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] server lang: <none>
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] kex follows: False
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] Compression: none
2025-12-03T14:50:11.046 [DEBUG] [Thread-118560] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:50:11.063 [DEBUG] [Thread-118560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:50:11.064 [DEBUG] [Thread-118560] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:50:11.064 [DEBUG] [Thread-118560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:50:11.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:50:11.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:50:11.066 [DEBUG] [Thread-118560] [transport.py] [_log()] userauth is OK
2025-12-03T14:50:11.066 [DEBUG] [Thread-118560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:50:11.066 [DEBUG] [Thread-118560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:50:11.067 [DEBUG] [Thread-118560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:50:11.067 [DEBUG] [Thread-118560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:50:11.090 [INFO] [Thread-118560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:50:11.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:50:12.156 [DEBUG] [Thread-118560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:50:12.156 [DEBUG] [Thread-118560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:50:12.156 [DEBUG] [Thread-118560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:50:12.197 [DEBUG] [Thread-118560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:50:12.197 [DEBUG] [Thread-118560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:50:12.200 [DEBUG] [Thread-118560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:50:12.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:50:12.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:50:12.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:50:12.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:50:12.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:50:12.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:50:12.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:50:12.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.534424 -999.00  +23.10   8.70     22   +0.50 1 1 1 1 1   888    0 24.00 80.12 ----- 15.7 8.7 165.7 13.9 31.1 -29.2 30.3 -29.5 31.8 -28.6 32.6 -29.9
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.534424
2025-12-03T14:50:12.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:50:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:50:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:50:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:50:12.239 [DEBUG] [Thread-118560] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:50:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:50:12.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:49:40', tmtdew=24.77, humidity=18.49, cloud=29.3, wind=13.16, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:49:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:50:12.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:50:12.336 [DEBUG] [Thread-118563] [transport.py] [_log()] starting thread (client mode): 0xa2752320
2025-12-03T14:50:12.336 [DEBUG] [Thread-118563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:50:12.353 [DEBUG] [Thread-118563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:50:12.353 [INFO] [Thread-118563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:12.361 [DEBUG] [Thread-118563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] client lang: <none>
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] server lang: <none>
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] kex follows: False
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] Compression: none
2025-12-03T14:50:12.362 [DEBUG] [Thread-118563] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:50:12.417 [DEBUG] [Thread-118563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:50:12.417 [DEBUG] [Thread-118563] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:50:12.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:50:12.418 [DEBUG] [Thread-118563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:50:12.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:50:12.475 [DEBUG] [Thread-118563] [transport.py] [_log()] userauth is OK
2025-12-03T14:50:12.475 [DEBUG] [Thread-118563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:50:12.475 [DEBUG] [Thread-118563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:50:12.475 [DEBUG] [Thread-118563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:50:12.475 [DEBUG] [Thread-118563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:50:12.489 [INFO] [Thread-118563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:50:12.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:50:12.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:50:13.334 [DEBUG] [Thread-118563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:50:13.334 [DEBUG] [Thread-118563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:50:13.382 [DEBUG] [Thread-118563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:50:13.382 [DEBUG] [Thread-118563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:50:13.391 [DEBUG] [Thread-118563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:50:13.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:50:13.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:50:13.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:50:13.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:50:13.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:50:13.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:50:13.426 [DEBUG] [Thread-118563] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:50:22.257 [DEBUG] [Thread-118565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:23.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:23.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:37.301 [DEBUG] [Thread-118566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:43.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:50:43.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:50:43.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:50:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 50, 12), 24.54, 18.75, 29.3, 16.09, 21.15, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:50:44.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:50:12
2025-12-03T14:50:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:50:44.411 [DEBUG] [Thread-118567] [transport.py] [_log()] starting thread (client mode): 0xa27780d0
2025-12-03T14:50:44.411 [DEBUG] [Thread-118567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:50:44.431 [DEBUG] [Thread-118567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:50:44.431 [INFO] [Thread-118567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] client lang: <none>
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] server lang: <none>
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] kex follows: False
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:50:44.434 [DEBUG] [Thread-118567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:50:44.435 [DEBUG] [Thread-118567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:50:44.435 [DEBUG] [Thread-118567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:50:44.435 [DEBUG] [Thread-118567] [transport.py] [_log()] Compression: none
2025-12-03T14:50:44.435 [DEBUG] [Thread-118567] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:50:44.452 [DEBUG] [Thread-118567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:50:44.452 [DEBUG] [Thread-118567] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:50:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:50:44.453 [DEBUG] [Thread-118567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:50:44.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:50:44.454 [DEBUG] [Thread-118567] [transport.py] [_log()] userauth is OK
2025-12-03T14:50:44.455 [DEBUG] [Thread-118567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:50:44.455 [DEBUG] [Thread-118567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:50:44.455 [DEBUG] [Thread-118567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:50:44.455 [DEBUG] [Thread-118567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:50:44.474 [INFO] [Thread-118567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:50:44.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:50:45.132 [DEBUG] [Thread-118567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:50:45.132 [DEBUG] [Thread-118567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:50:45.132 [DEBUG] [Thread-118567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:50:45.173 [DEBUG] [Thread-118567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:50:45.173 [DEBUG] [Thread-118567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:50:45.175 [DEBUG] [Thread-118567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:50:45.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:50:45.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:50:45.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:50:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:50:45.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:50:45.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:50:45.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.534771 -999.00  +23.00   9.16     22   +0.50 1 1 1 1 1   888    0 23.87 76.99 ----- 11.1 9.2 146.8 17.8 31.1 -28.9 30.4 -28.6 32.0 -26.1 32.8 -27.7
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.534771
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:50:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:50:12', tmtdew=24.54, humidity=18.75, cloud=29.3, wind=16.09, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:50:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:50:45.195 [DEBUG] [Thread-118567] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:50:45.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:50:45.281 [DEBUG] [Thread-118570] [transport.py] [_log()] starting thread (client mode): 0xa277ae30
2025-12-03T14:50:45.281 [DEBUG] [Thread-118570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:50:45.295 [DEBUG] [Thread-118570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:50:45.295 [INFO] [Thread-118570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] client lang: <none>
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] server lang: <none>
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] kex follows: False
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] Compression: none
2025-12-03T14:50:45.303 [DEBUG] [Thread-118570] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:50:45.361 [DEBUG] [Thread-118570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:50:45.362 [DEBUG] [Thread-118570] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:50:45.362 [DEBUG] [Thread-118570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:50:45.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:50:45.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:50:45.419 [DEBUG] [Thread-118570] [transport.py] [_log()] userauth is OK
2025-12-03T14:50:45.419 [DEBUG] [Thread-118570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:50:45.419 [DEBUG] [Thread-118570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:50:45.419 [DEBUG] [Thread-118570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:50:45.419 [DEBUG] [Thread-118570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:50:45.433 [INFO] [Thread-118570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:50:45.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:50:45.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:50:46.229 [DEBUG] [Thread-118570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:50:46.229 [DEBUG] [Thread-118570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:50:46.277 [DEBUG] [Thread-118570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:50:46.277 [DEBUG] [Thread-118570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:50:46.285 [DEBUG] [Thread-118570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:50:46.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:50:46.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:50:46.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:50:46.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:50:46.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:50:46.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:50:46.317 [DEBUG] [Thread-118570] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:50:51.473 [DEBUG] [Thread-118572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:50:52.329 [DEBUG] [Thread-118573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:07.372 [DEBUG] [Thread-118574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:51:16.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:51:16.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:51:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 50, 44), 24.91, 18.49, 29.3, 18.44, 21.77, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:51:17.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:50:44
2025-12-03T14:51:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:51:17.324 [DEBUG] [Thread-118575] [transport.py] [_log()] starting thread (client mode): 0xa2752c50
2025-12-03T14:51:17.325 [DEBUG] [Thread-118575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:51:17.345 [DEBUG] [Thread-118575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:51:17.345 [INFO] [Thread-118575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] client lang: <none>
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] server lang: <none>
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] kex follows: False
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] Compression: none
2025-12-03T14:51:17.349 [DEBUG] [Thread-118575] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:51:17.365 [DEBUG] [Thread-118575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:51:17.366 [DEBUG] [Thread-118575] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:51:17.366 [DEBUG] [Thread-118575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:51:17.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:51:17.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:51:17.367 [DEBUG] [Thread-118575] [transport.py] [_log()] userauth is OK
2025-12-03T14:51:17.367 [DEBUG] [Thread-118575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:51:17.367 [DEBUG] [Thread-118575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:51:17.367 [DEBUG] [Thread-118575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:51:17.367 [DEBUG] [Thread-118575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:51:17.377 [INFO] [Thread-118575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:51:17.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:51:17.996 [DEBUG] [Thread-118575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:51:17.996 [DEBUG] [Thread-118575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:51:17.996 [DEBUG] [Thread-118575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:51:18.037 [DEBUG] [Thread-118575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:51:18.037 [DEBUG] [Thread-118575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:51:18.039 [DEBUG] [Thread-118575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:51:18.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:51:18.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:51:18.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:51:18.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:51:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:51:18.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:51:18.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.535118 -999.00  +23.10  16.78     22   +0.50 1 1 1 1 1   888    0 23.54 79.44 ----- 15.2 16.8 164.0 18.9 31.1 -30.7 30.4 -29.7 31.8 -28.1 32.7 -29.9
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.535118
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:51:18.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:50:44', tmtdew=24.91, humidity=18.49, cloud=29.3, wind=18.44, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:50:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:51:18.057 [DEBUG] [Thread-118575] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:51:18.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:51:18.143 [DEBUG] [Thread-118578] [transport.py] [_log()] starting thread (client mode): 0xa27514e0
2025-12-03T14:51:18.143 [DEBUG] [Thread-118578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:51:18.158 [DEBUG] [Thread-118578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:51:18.158 [INFO] [Thread-118578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:51:18.165 [DEBUG] [Thread-118578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:51:18.165 [DEBUG] [Thread-118578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:51:18.165 [DEBUG] [Thread-118578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:51:18.165 [DEBUG] [Thread-118578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] client lang: <none>
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] server lang: <none>
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] kex follows: False
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] Compression: none
2025-12-03T14:51:18.166 [DEBUG] [Thread-118578] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:51:18.227 [DEBUG] [Thread-118578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:51:18.227 [DEBUG] [Thread-118578] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:51:18.227 [DEBUG] [Thread-118578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:51:18.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:51:18.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:51:18.283 [DEBUG] [Thread-118578] [transport.py] [_log()] userauth is OK
2025-12-03T14:51:18.283 [DEBUG] [Thread-118578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:51:18.283 [DEBUG] [Thread-118578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:51:18.283 [DEBUG] [Thread-118578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:51:18.283 [DEBUG] [Thread-118578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:51:18.296 [INFO] [Thread-118578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:51:18.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:51:18.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:51:19.129 [DEBUG] [Thread-118578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:51:19.129 [DEBUG] [Thread-118578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:51:19.177 [DEBUG] [Thread-118578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:51:19.177 [DEBUG] [Thread-118578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:51:19.186 [DEBUG] [Thread-118578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:51:19.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:51:19.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:51:19.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:51:19.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:51:19.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:51:19.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:51:19.220 [DEBUG] [Thread-118578] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:51:22.398 [DEBUG] [Thread-118580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:23.432 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:23.434 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:37.441 [DEBUG] [Thread-118581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:49.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:51:49.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:51:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:51:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 51, 16), 24.95, 18.45, 29.3, 20.06, 21.85, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:51:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:51:16
2025-12-03T14:51:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:51:50.275 [DEBUG] [Thread-118582] [transport.py] [_log()] starting thread (client mode): 0xa2752ad0
2025-12-03T14:51:50.275 [DEBUG] [Thread-118582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:51:50.296 [DEBUG] [Thread-118582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:51:50.296 [INFO] [Thread-118582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] client lang: <none>
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] server lang: <none>
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] kex follows: False
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] Compression: none
2025-12-03T14:51:50.298 [DEBUG] [Thread-118582] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:51:50.306 [DEBUG] [Thread-118582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:51:50.306 [DEBUG] [Thread-118582] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:51:50.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:51:50.306 [DEBUG] [Thread-118582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:51:50.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:51:50.307 [DEBUG] [Thread-118582] [transport.py] [_log()] userauth is OK
2025-12-03T14:51:50.307 [DEBUG] [Thread-118582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:51:50.307 [DEBUG] [Thread-118582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:51:50.307 [DEBUG] [Thread-118582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:51:50.307 [DEBUG] [Thread-118582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:51:50.320 [INFO] [Thread-118582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:51:50.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:51:50.939 [DEBUG] [Thread-118582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:51:50.939 [DEBUG] [Thread-118582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:51:50.939 [DEBUG] [Thread-118582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:51:50.980 [DEBUG] [Thread-118582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:51:50.980 [DEBUG] [Thread-118582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:51:50.982 [DEBUG] [Thread-118582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:51:50.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:51:50.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:51:50.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:51:50.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:51:51.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:51:51.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:51:51.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.535813 -999.00  +22.70  13.85     22   +0.30 1 1 1 1 1   888    0 24.04 80.35 ----- 16.1 13.8 159.0 22.4 30.8 -30.8 30.1 -29.9 31.4 -28.6 32.4 -31.6
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.535813
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:51:51.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:51:16', tmtdew=24.95, humidity=18.45, cloud=29.3, wind=20.06, temperature=21.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:51:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:51:51.001 [DEBUG] [Thread-118582] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:51:51.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:51:51.088 [DEBUG] [Thread-118585] [transport.py] [_log()] starting thread (client mode): 0xa2778b20
2025-12-03T14:51:51.088 [DEBUG] [Thread-118585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:51:51.103 [DEBUG] [Thread-118585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:51:51.103 [INFO] [Thread-118585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] client lang: <none>
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] server lang: <none>
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] kex follows: False
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] Compression: none
2025-12-03T14:51:51.111 [DEBUG] [Thread-118585] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:51:51.170 [DEBUG] [Thread-118585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:51:51.171 [DEBUG] [Thread-118585] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:51:51.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:51:51.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:51:51.171 [DEBUG] [Thread-118585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:51:51.229 [DEBUG] [Thread-118585] [transport.py] [_log()] userauth is OK
2025-12-03T14:51:51.229 [DEBUG] [Thread-118585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:51:51.229 [DEBUG] [Thread-118585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:51:51.229 [DEBUG] [Thread-118585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:51:51.230 [DEBUG] [Thread-118585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:51:51.248 [INFO] [Thread-118585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:51:51.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:51:51.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:51:51.504 [DEBUG] [Thread-118587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:51:52.127 [DEBUG] [Thread-118585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:51:52.127 [DEBUG] [Thread-118585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:51:52.174 [DEBUG] [Thread-118585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:51:52.175 [DEBUG] [Thread-118585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:51:52.183 [DEBUG] [Thread-118585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:51:52.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:51:52.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:51:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:51:52.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:51:52.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:51:52.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:51:52.215 [DEBUG] [Thread-118585] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:51:52.468 [DEBUG] [Thread-118588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:07.507 [DEBUG] [Thread-118589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:22.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:52:22.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:52:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:52:22.540 [DEBUG] [Thread-118590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:22.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 51, 48), 24.99, 18.37, 29.3, 19.78, 21.9, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:52:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:51:48
2025-12-03T14:52:23.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:52:23.198 [DEBUG] [Thread-118591] [transport.py] [_log()] starting thread (client mode): 0xa27b5330
2025-12-03T14:52:23.198 [DEBUG] [Thread-118591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:52:23.220 [DEBUG] [Thread-118591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:52:23.220 [INFO] [Thread-118591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:52:23.223 [DEBUG] [Thread-118591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:52:23.223 [DEBUG] [Thread-118591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:52:23.223 [DEBUG] [Thread-118591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:52:23.223 [DEBUG] [Thread-118591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] client lang: <none>
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] server lang: <none>
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] kex follows: False
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] Compression: none
2025-12-03T14:52:23.224 [DEBUG] [Thread-118591] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:52:23.243 [DEBUG] [Thread-118591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:52:23.243 [DEBUG] [Thread-118591] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:52:23.244 [DEBUG] [Thread-118591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:52:23.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:52:23.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:52:23.245 [DEBUG] [Thread-118591] [transport.py] [_log()] userauth is OK
2025-12-03T14:52:23.246 [DEBUG] [Thread-118591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:52:23.246 [DEBUG] [Thread-118591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:52:23.246 [DEBUG] [Thread-118591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:52:23.246 [DEBUG] [Thread-118591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:52:23.269 [INFO] [Thread-118591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:52:23.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:52:23.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:23.575 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:23.920 [DEBUG] [Thread-118591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:52:23.920 [DEBUG] [Thread-118591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:52:23.920 [DEBUG] [Thread-118591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:52:23.961 [DEBUG] [Thread-118591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:52:23.961 [DEBUG] [Thread-118591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:52:23.964 [DEBUG] [Thread-118591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:52:23.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:52:23.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:52:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:52:23.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:52:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:52:23.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:52:23.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.536160 -999.00  +22.50  20.70     22   +0.10 1 1 1 1 1   888    0 23.76 78.63 ----- 18.0 20.7 165.8 28.5 30.4 -33.3 29.9 -31.2 30.9 -30.8 31.8 -33.9
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:52:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.536160
2025-12-03T14:52:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:52:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:52:23.988 [DEBUG] [Thread-118591] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:52:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:52:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:52:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:52:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:51:48', tmtdew=24.99, humidity=18.37, cloud=29.3, wind=19.78, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:52:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:52:24.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:52:24.084 [DEBUG] [Thread-118594] [transport.py] [_log()] starting thread (client mode): 0xa51ce5c0
2025-12-03T14:52:24.084 [DEBUG] [Thread-118594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:52:24.103 [DEBUG] [Thread-118594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:52:24.103 [INFO] [Thread-118594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:24.111 [DEBUG] [Thread-118594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] client lang: <none>
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] server lang: <none>
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] kex follows: False
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] Compression: none
2025-12-03T14:52:24.112 [DEBUG] [Thread-118594] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:52:24.168 [DEBUG] [Thread-118594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:52:24.169 [DEBUG] [Thread-118594] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:52:24.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:52:24.170 [DEBUG] [Thread-118594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:52:24.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:52:24.224 [DEBUG] [Thread-118594] [transport.py] [_log()] userauth is OK
2025-12-03T14:52:24.225 [DEBUG] [Thread-118594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:52:24.225 [DEBUG] [Thread-118594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:52:24.225 [DEBUG] [Thread-118594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:52:24.225 [DEBUG] [Thread-118594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:52:24.243 [INFO] [Thread-118594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:52:24.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:52:24.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:52:25.051 [DEBUG] [Thread-118594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:52:25.051 [DEBUG] [Thread-118594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:52:25.099 [DEBUG] [Thread-118594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:52:25.099 [DEBUG] [Thread-118594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:52:25.110 [DEBUG] [Thread-118594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:52:25.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:52:25.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:52:25.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:52:25.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:52:25.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:52:25.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:52:25.144 [DEBUG] [Thread-118594] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:52:37.568 [DEBUG] [Thread-118596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:51.551 [DEBUG] [Thread-118597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:52.615 [DEBUG] [Thread-118598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:52:55.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:52:55.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:52:55.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:52:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 52, 52), 25.37, 17.89, 29.3, 18.12, 21.68, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:52:55.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:52:52
2025-12-03T14:52:55.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:52:56.091 [DEBUG] [Thread-118599] [transport.py] [_log()] starting thread (client mode): 0xa2761180
2025-12-03T14:52:56.091 [DEBUG] [Thread-118599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:52:56.114 [DEBUG] [Thread-118599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:52:56.114 [INFO] [Thread-118599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:52:56.117 [DEBUG] [Thread-118599] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:52:56.117 [DEBUG] [Thread-118599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:52:56.117 [DEBUG] [Thread-118599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] client lang: <none>
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] server lang: <none>
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] kex follows: False
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] Compression: none
2025-12-03T14:52:56.118 [DEBUG] [Thread-118599] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:52:56.134 [DEBUG] [Thread-118599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:52:56.135 [DEBUG] [Thread-118599] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:52:56.135 [DEBUG] [Thread-118599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:52:56.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:52:56.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:52:56.137 [DEBUG] [Thread-118599] [transport.py] [_log()] userauth is OK
2025-12-03T14:52:56.137 [DEBUG] [Thread-118599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:52:56.137 [DEBUG] [Thread-118599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:52:56.137 [DEBUG] [Thread-118599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:52:56.137 [DEBUG] [Thread-118599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:52:56.161 [INFO] [Thread-118599] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:52:56.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:52:56.813 [DEBUG] [Thread-118599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:52:56.814 [DEBUG] [Thread-118599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:52:56.814 [DEBUG] [Thread-118599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:52:56.855 [DEBUG] [Thread-118599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:52:56.855 [DEBUG] [Thread-118599] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:52:56.858 [DEBUG] [Thread-118599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:52:56.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:52:56.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:52:56.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:52:56.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:52:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:52:56.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:52:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.536507 -999.00  +22.10  17.24     23   +0.10 1 1 1 1 1   888    0 24.03 78.03 ----- 17.1 17.2 157.0 22.1 30.1 -32.9 29.5 -31.4 30.6 -31.0 31.5 -32.7
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:52:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.536507
2025-12-03T14:52:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:52:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:52:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:52:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:52:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:52:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:52:52', tmtdew=25.37, humidity=17.89, cloud=29.3, wind=18.12, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:52:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:52:56.883 [DEBUG] [Thread-118599] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:52:56.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:52:56.978 [DEBUG] [Thread-118602] [transport.py] [_log()] starting thread (client mode): 0xa2761090
2025-12-03T14:52:56.978 [DEBUG] [Thread-118602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:52:56.993 [DEBUG] [Thread-118602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:52:56.994 [INFO] [Thread-118602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] client lang: <none>
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] server lang: <none>
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] kex follows: False
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:52:57.001 [DEBUG] [Thread-118602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:52:57.002 [DEBUG] [Thread-118602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:52:57.002 [DEBUG] [Thread-118602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:52:57.002 [DEBUG] [Thread-118602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:52:57.002 [DEBUG] [Thread-118602] [transport.py] [_log()] Compression: none
2025-12-03T14:52:57.002 [DEBUG] [Thread-118602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:52:57.060 [DEBUG] [Thread-118602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:52:57.060 [DEBUG] [Thread-118602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:52:57.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:52:57.061 [DEBUG] [Thread-118602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:52:57.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:52:57.117 [DEBUG] [Thread-118602] [transport.py] [_log()] userauth is OK
2025-12-03T14:52:57.117 [DEBUG] [Thread-118602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:52:57.117 [DEBUG] [Thread-118602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:52:57.117 [DEBUG] [Thread-118602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:52:57.117 [DEBUG] [Thread-118602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:52:57.140 [INFO] [Thread-118602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:52:57.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:52:57.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:52:57.960 [DEBUG] [Thread-118602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:52:57.960 [DEBUG] [Thread-118602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:52:58.008 [DEBUG] [Thread-118602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:52:58.008 [DEBUG] [Thread-118602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:52:58.017 [DEBUG] [Thread-118602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:52:58.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:52:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:52:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:52:58.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:52:58.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:52:58.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:52:58.051 [DEBUG] [Thread-118602] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:53:07.644 [DEBUG] [Thread-118604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:22.689 [DEBUG] [Thread-118605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:23.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:23.727 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:53:28.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:53:28.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:53:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 53, 24), 25.63, 17.61, 29.3, 17.29, 21.88, 0, 0, 0, 0, 0, 0),)
2025-12-03T14:53:28.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:53:24
2025-12-03T14:53:28.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:53:29.026 [DEBUG] [Thread-118606] [transport.py] [_log()] starting thread (client mode): 0xa27ca7d0
2025-12-03T14:53:29.026 [DEBUG] [Thread-118606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:53:29.047 [DEBUG] [Thread-118606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:53:29.047 [INFO] [Thread-118606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] client lang: <none>
2025-12-03T14:53:29.050 [DEBUG] [Thread-118606] [transport.py] [_log()] server lang: <none>
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] kex follows: False
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] Compression: none
2025-12-03T14:53:29.051 [DEBUG] [Thread-118606] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:53:29.068 [DEBUG] [Thread-118606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:53:29.068 [DEBUG] [Thread-118606] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:53:29.068 [DEBUG] [Thread-118606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:53:29.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:53:29.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:53:29.071 [DEBUG] [Thread-118606] [transport.py] [_log()] userauth is OK
2025-12-03T14:53:29.071 [DEBUG] [Thread-118606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:53:29.071 [DEBUG] [Thread-118606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:53:29.071 [DEBUG] [Thread-118606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:53:29.071 [DEBUG] [Thread-118606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:53:29.092 [INFO] [Thread-118606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:53:29.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:53:29.743 [DEBUG] [Thread-118606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:53:29.743 [DEBUG] [Thread-118606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:53:29.743 [DEBUG] [Thread-118606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:53:29.784 [DEBUG] [Thread-118606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:53:29.784 [DEBUG] [Thread-118606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:53:29.787 [DEBUG] [Thread-118606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:53:29.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:53:29.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:53:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:53:29.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:53:29.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:53:29.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:53:29.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:53:29.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:53:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:53:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.536854 -999.00  +21.80  13.67     23   +0.00 1 1 1 1 1   888    0 23.77 82.09 ----- 13.4 13.7 150.4 19.2 29.8 -31.9 29.2 -32.1 30.4 -31.5 31.4 -31.7
2025-12-03T14:53:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:53:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:53:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.536854
2025-12-03T14:53:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:53:29.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:53:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:53:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:53:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:53:29.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:53:24', tmtdew=25.63, humidity=17.61, cloud=29.3, wind=17.29, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:53:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:53:29.813 [DEBUG] [Thread-118606] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:53:29.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:53:29.910 [DEBUG] [Thread-118609] [transport.py] [_log()] starting thread (client mode): 0xa27ca620
2025-12-03T14:53:29.910 [DEBUG] [Thread-118609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:53:29.926 [DEBUG] [Thread-118609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:53:29.926 [INFO] [Thread-118609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:53:29.933 [DEBUG] [Thread-118609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] client lang: <none>
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] server lang: <none>
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] kex follows: False
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] Compression: none
2025-12-03T14:53:29.934 [DEBUG] [Thread-118609] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:53:29.993 [DEBUG] [Thread-118609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:53:29.994 [DEBUG] [Thread-118609] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:53:29.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:53:29.995 [DEBUG] [Thread-118609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:53:29.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:53:30.049 [DEBUG] [Thread-118609] [transport.py] [_log()] userauth is OK
2025-12-03T14:53:30.050 [DEBUG] [Thread-118609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:53:30.050 [DEBUG] [Thread-118609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:53:30.050 [DEBUG] [Thread-118609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:53:30.050 [DEBUG] [Thread-118609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:53:30.070 [INFO] [Thread-118609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:53:30.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:53:30.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:53:30.952 [DEBUG] [Thread-118609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:53:30.952 [DEBUG] [Thread-118609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:53:31.000 [DEBUG] [Thread-118609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:53:31.000 [DEBUG] [Thread-118609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:53:31.009 [DEBUG] [Thread-118609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:53:31.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:53:31.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:53:31.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:53:31.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:53:31.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:53:31.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:53:31.043 [DEBUG] [Thread-118609] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:53:37.717 [DEBUG] [Thread-118611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:51.589 [DEBUG] [Thread-118612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:53:52.761 [DEBUG] [Thread-118613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:54:01.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:54:01.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:54:01.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 53, 56), 24.62, 18.77, 0.0, 14.95, 21.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:54:01.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:53:56
2025-12-03T14:54:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:54:02.040 [DEBUG] [Thread-118614] [transport.py] [_log()] starting thread (client mode): 0xa2761420
2025-12-03T14:54:02.040 [DEBUG] [Thread-118614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:54:02.060 [DEBUG] [Thread-118614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:54:02.060 [INFO] [Thread-118614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:54:02.063 [DEBUG] [Thread-118614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:54:02.063 [DEBUG] [Thread-118614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] client lang: <none>
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] server lang: <none>
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] kex follows: False
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] Compression: none
2025-12-03T14:54:02.064 [DEBUG] [Thread-118614] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:54:02.084 [DEBUG] [Thread-118614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:54:02.085 [DEBUG] [Thread-118614] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:54:02.085 [DEBUG] [Thread-118614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:54:02.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:54:02.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:54:02.086 [DEBUG] [Thread-118614] [transport.py] [_log()] userauth is OK
2025-12-03T14:54:02.086 [DEBUG] [Thread-118614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:54:02.086 [DEBUG] [Thread-118614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:54:02.086 [DEBUG] [Thread-118614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:54:02.086 [DEBUG] [Thread-118614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:54:02.097 [INFO] [Thread-118614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:54:02.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:54:02.725 [DEBUG] [Thread-118614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:54:02.726 [DEBUG] [Thread-118614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:54:02.726 [DEBUG] [Thread-118614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:54:02.767 [DEBUG] [Thread-118614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:54:02.767 [DEBUG] [Thread-118614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:54:02.770 [DEBUG] [Thread-118614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:54:02.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:54:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:54:02.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:54:02.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:54:02.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:54:02.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:54:02.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:54:02.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.537202 -999.00  +21.60  12.03     23   +0.00 1 1 1 1 1   888    0 24.36 91.84 ----- 10.1 12.0 163.6 19.0 29.6 -32.3 29.0 -30.9 30.3 -29.6 31.1 -31.4
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.537202
2025-12-03T14:54:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:54:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:54:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:54:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:54:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:54:02.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:53:56', tmtdew=24.62, humidity=18.77, cloud=0.0, wind=14.95, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:53:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:54:02.794 [DEBUG] [Thread-118614] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:54:02.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:54:02.890 [DEBUG] [Thread-118617] [transport.py] [_log()] starting thread (client mode): 0xa2761a50
2025-12-03T14:54:02.890 [DEBUG] [Thread-118617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:54:02.906 [DEBUG] [Thread-118617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:54:02.906 [INFO] [Thread-118617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:54:02.913 [DEBUG] [Thread-118617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] client lang: <none>
2025-12-03T14:54:02.914 [DEBUG] [Thread-118617] [transport.py] [_log()] server lang: <none>
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] kex follows: False
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] Compression: none
2025-12-03T14:54:02.915 [DEBUG] [Thread-118617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:54:02.970 [DEBUG] [Thread-118617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:54:02.970 [DEBUG] [Thread-118617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:54:02.970 [DEBUG] [Thread-118617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:54:02.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:54:02.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:54:03.026 [DEBUG] [Thread-118617] [transport.py] [_log()] userauth is OK
2025-12-03T14:54:03.026 [DEBUG] [Thread-118617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:54:03.027 [DEBUG] [Thread-118617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:54:03.027 [DEBUG] [Thread-118617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:54:03.027 [DEBUG] [Thread-118617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:54:03.045 [INFO] [Thread-118617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:54:03.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:54:03.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:54:03.879 [DEBUG] [Thread-118617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:54:03.879 [DEBUG] [Thread-118617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:54:03.927 [DEBUG] [Thread-118617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:54:03.927 [DEBUG] [Thread-118617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:54:03.936 [DEBUG] [Thread-118617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:54:03.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:54:03.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:54:03.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:54:03.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:54:03.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:54:03.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:54:03.970 [DEBUG] [Thread-118617] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:54:07.795 [DEBUG] [Thread-118619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:22.841 [DEBUG] [Thread-118620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:23.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:23.868 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:33.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:54:33.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:54:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:54:34.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 54, 28), 24.56, 18.84, 0.0, 12.14, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:54:34.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:54:28
2025-12-03T14:54:34.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:54:34.938 [DEBUG] [Thread-118621] [transport.py] [_log()] starting thread (client mode): 0xa51cec80
2025-12-03T14:54:34.938 [DEBUG] [Thread-118621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:54:34.958 [DEBUG] [Thread-118621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:54:34.958 [INFO] [Thread-118621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:54:34.961 [DEBUG] [Thread-118621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:54:34.961 [DEBUG] [Thread-118621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:54:34.961 [DEBUG] [Thread-118621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:54:34.961 [DEBUG] [Thread-118621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] client lang: <none>
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] server lang: <none>
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] kex follows: False
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] Compression: none
2025-12-03T14:54:34.962 [DEBUG] [Thread-118621] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:54:34.980 [DEBUG] [Thread-118621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:54:34.981 [DEBUG] [Thread-118621] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:54:34.981 [DEBUG] [Thread-118621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:54:34.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:54:34.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:54:34.984 [DEBUG] [Thread-118621] [transport.py] [_log()] userauth is OK
2025-12-03T14:54:34.984 [DEBUG] [Thread-118621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:54:34.984 [DEBUG] [Thread-118621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:54:34.984 [DEBUG] [Thread-118621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:54:34.984 [DEBUG] [Thread-118621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:54:35.000 [INFO] [Thread-118621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:54:35.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:54:35.664 [DEBUG] [Thread-118621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:54:35.665 [DEBUG] [Thread-118621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:54:35.665 [DEBUG] [Thread-118621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:54:35.705 [DEBUG] [Thread-118621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:54:35.706 [DEBUG] [Thread-118621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:54:35.709 [DEBUG] [Thread-118621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:54:35.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:54:35.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:54:35.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:54:35.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:54:35.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:54:35.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:54:35.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.537549 -999.00  +21.60   9.08     23   +0.10 1 1 1 1 1   888    0 24.28 89.18 ----- 11.2 9.1 127.2 15.2 29.5 -31.7 28.9 -32.9 30.3 -29.6 31.0 -32.2
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:54:35.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.537549
2025-12-03T14:54:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:54:35.737 [DEBUG] [Thread-118621] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:54:35.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:54:28', tmtdew=24.56, humidity=18.84, cloud=0.0, wind=12.14, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:54:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:54:35.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:54:35.831 [DEBUG] [Thread-118624] [transport.py] [_log()] starting thread (client mode): 0xa519a4a0
2025-12-03T14:54:35.831 [DEBUG] [Thread-118624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:54:35.848 [DEBUG] [Thread-118624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:54:35.848 [INFO] [Thread-118624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:35.856 [DEBUG] [Thread-118624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] client lang: <none>
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] server lang: <none>
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] kex follows: False
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] Compression: none
2025-12-03T14:54:35.857 [DEBUG] [Thread-118624] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:54:35.915 [DEBUG] [Thread-118624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:54:35.915 [DEBUG] [Thread-118624] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:54:35.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:54:35.916 [DEBUG] [Thread-118624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:54:35.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:54:35.975 [DEBUG] [Thread-118624] [transport.py] [_log()] userauth is OK
2025-12-03T14:54:35.975 [DEBUG] [Thread-118624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:54:35.976 [DEBUG] [Thread-118624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:54:35.976 [DEBUG] [Thread-118624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:54:35.976 [DEBUG] [Thread-118624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:54:35.995 [INFO] [Thread-118624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:54:35.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:54:35.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:54:36.852 [DEBUG] [Thread-118624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:54:36.852 [DEBUG] [Thread-118624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:54:36.904 [DEBUG] [Thread-118624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:54:36.904 [DEBUG] [Thread-118624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:54:36.916 [DEBUG] [Thread-118624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:54:36.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:54:36.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:54:36.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:54:36.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:54:36.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:54:36.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:54:36.963 [DEBUG] [Thread-118624] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:54:37.871 [DEBUG] [Thread-118626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:51.644 [DEBUG] [Thread-118627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:54:52.923 [DEBUG] [Thread-118628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:55:06.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:55:06.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:55:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 55), 24.56, 18.87, 0.0, 15.88, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:55:07.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:55:00
2025-12-03T14:55:07.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:55:07.901 [DEBUG] [Thread-118629] [transport.py] [_log()] starting thread (client mode): 0xa27c9690
2025-12-03T14:55:07.901 [DEBUG] [Thread-118629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:55:07.921 [DEBUG] [Thread-118629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:55:07.921 [INFO] [Thread-118629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] client lang: <none>
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] server lang: <none>
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] kex follows: False
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] Compression: none
2025-12-03T14:55:07.923 [DEBUG] [Thread-118629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:55:07.935 [DEBUG] [Thread-118629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:55:07.936 [DEBUG] [Thread-118629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:55:07.936 [DEBUG] [Thread-118629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:55:07.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:55:07.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:55:07.938 [DEBUG] [Thread-118629] [transport.py] [_log()] userauth is OK
2025-12-03T14:55:07.938 [DEBUG] [Thread-118629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:55:07.938 [DEBUG] [Thread-118629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:55:07.938 [DEBUG] [Thread-118629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:55:07.938 [DEBUG] [Thread-118629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:55:07.952 [DEBUG] [Thread-118631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:07.961 [INFO] [Thread-118629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:55:07.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:55:08.737 [DEBUG] [Thread-118629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:55:08.738 [DEBUG] [Thread-118629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:55:08.738 [DEBUG] [Thread-118629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:55:08.779 [DEBUG] [Thread-118629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:55:08.779 [DEBUG] [Thread-118629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:55:08.782 [DEBUG] [Thread-118629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:55:08.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:55:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:55:08.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:55:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:55:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:55:08.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:55:08.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:55:08.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:55:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:55:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.537896 -999.00  +21.40  12.17     24   +0.10 1 1 1 1 1   888    0 24.10 83.04 ----- 10.0 12.2 156.6 21.6 29.2 -31.9 28.9 -32.2 30.1 -30.3 30.7 -30.4
2025-12-03T14:55:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:55:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:55:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.537896
2025-12-03T14:55:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:55:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:55:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:55:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:55:08.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:55:08.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:55:00', tmtdew=24.56, humidity=18.87, cloud=0.0, wind=15.88, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:54:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:55:08.809 [DEBUG] [Thread-118629] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:55:08.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:55:08.903 [DEBUG] [Thread-118633] [transport.py] [_log()] starting thread (client mode): 0xa27793f0
2025-12-03T14:55:08.903 [DEBUG] [Thread-118633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:55:08.919 [DEBUG] [Thread-118633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:55:08.919 [INFO] [Thread-118633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:55:08.927 [DEBUG] [Thread-118633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:55:08.927 [DEBUG] [Thread-118633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] client lang: <none>
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] server lang: <none>
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] kex follows: False
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] Compression: none
2025-12-03T14:55:08.928 [DEBUG] [Thread-118633] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:55:08.984 [DEBUG] [Thread-118633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:55:08.984 [DEBUG] [Thread-118633] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:55:08.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:55:08.986 [DEBUG] [Thread-118633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:55:08.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:55:09.039 [DEBUG] [Thread-118633] [transport.py] [_log()] userauth is OK
2025-12-03T14:55:09.040 [DEBUG] [Thread-118633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:55:09.040 [DEBUG] [Thread-118633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:55:09.040 [DEBUG] [Thread-118633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:55:09.040 [DEBUG] [Thread-118633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:55:09.060 [INFO] [Thread-118633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:55:09.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:55:09.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:55:09.878 [DEBUG] [Thread-118633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:55:09.878 [DEBUG] [Thread-118633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:55:09.926 [DEBUG] [Thread-118633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:55:09.926 [DEBUG] [Thread-118633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:55:09.935 [DEBUG] [Thread-118633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:55:09.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:55:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:55:09.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:55:09.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:55:09.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:55:09.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:55:09.978 [DEBUG] [Thread-118633] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:55:22.990 [DEBUG] [Thread-118635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:24.010 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:24.011 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:38.050 [DEBUG] [Thread-118636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:55:39.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:55:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:55:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 55, 32), 24.52, 18.89, 0.0, 17.05, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:55:40.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:55:32
2025-12-03T14:55:40.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:55:40.930 [DEBUG] [Thread-118637] [transport.py] [_log()] starting thread (client mode): 0xa2760ee0
2025-12-03T14:55:40.930 [DEBUG] [Thread-118637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:55:40.950 [DEBUG] [Thread-118637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:55:40.950 [INFO] [Thread-118637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:55:40.953 [DEBUG] [Thread-118637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:55:40.953 [DEBUG] [Thread-118637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:55:40.953 [DEBUG] [Thread-118637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:55:40.953 [DEBUG] [Thread-118637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:40.953 [DEBUG] [Thread-118637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] client lang: <none>
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] server lang: <none>
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] kex follows: False
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] Compression: none
2025-12-03T14:55:40.954 [DEBUG] [Thread-118637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:55:40.969 [DEBUG] [Thread-118637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:55:40.969 [DEBUG] [Thread-118637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:55:40.969 [DEBUG] [Thread-118637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:55:40.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:55:40.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:55:40.970 [DEBUG] [Thread-118637] [transport.py] [_log()] userauth is OK
2025-12-03T14:55:40.971 [DEBUG] [Thread-118637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:55:40.971 [DEBUG] [Thread-118637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:55:40.971 [DEBUG] [Thread-118637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:55:40.971 [DEBUG] [Thread-118637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:55:40.989 [INFO] [Thread-118637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:55:40.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:55:41.625 [DEBUG] [Thread-118637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:55:41.625 [DEBUG] [Thread-118637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:55:41.625 [DEBUG] [Thread-118637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:55:41.667 [DEBUG] [Thread-118637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:55:41.667 [DEBUG] [Thread-118637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:55:41.669 [DEBUG] [Thread-118637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:55:41.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:55:41.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:55:41.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:55:41.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:55:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:55:41.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:55:41.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.538243 -999.00  +21.40   7.22     24   +0.10 1 1 1 1 1   888    0 23.71 73.89 ----- 8.7 7.2 163.8 15.0 29.4 -28.4 29.0 -28.4 30.0 -26.9 30.8 -28.5
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.538243
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:55:41.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:55:32', tmtdew=24.52, humidity=18.89, cloud=0.0, wind=17.05, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:55:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:55:41.689 [DEBUG] [Thread-118637] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:55:41.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:55:41.774 [DEBUG] [Thread-118640] [transport.py] [_log()] starting thread (client mode): 0xa2760490
2025-12-03T14:55:41.774 [DEBUG] [Thread-118640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:55:41.788 [DEBUG] [Thread-118640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:55:41.788 [INFO] [Thread-118640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] client lang: <none>
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] server lang: <none>
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] kex follows: False
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] Compression: none
2025-12-03T14:55:41.796 [DEBUG] [Thread-118640] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:55:41.855 [DEBUG] [Thread-118640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:55:41.855 [DEBUG] [Thread-118640] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:55:41.855 [DEBUG] [Thread-118640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:55:41.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:55:41.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:55:41.911 [DEBUG] [Thread-118640] [transport.py] [_log()] userauth is OK
2025-12-03T14:55:41.911 [DEBUG] [Thread-118640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:55:41.911 [DEBUG] [Thread-118640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:55:41.911 [DEBUG] [Thread-118640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:55:41.911 [DEBUG] [Thread-118640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:55:41.927 [INFO] [Thread-118640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:55:41.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:55:41.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:55:42.714 [DEBUG] [Thread-118640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:55:42.714 [DEBUG] [Thread-118640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:55:42.762 [DEBUG] [Thread-118640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:55:42.762 [DEBUG] [Thread-118640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:55:42.771 [DEBUG] [Thread-118640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:55:42.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:55:42.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:55:42.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:55:42.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:55:42.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:55:42.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:55:42.803 [DEBUG] [Thread-118640] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:55:51.676 [DEBUG] [Thread-118642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:55:53.086 [DEBUG] [Thread-118643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:08.137 [DEBUG] [Thread-118644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:12.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:56:12.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:56:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:56:13.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 56, 4), 24.51, 18.89, 0.0, 15.86, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:56:13.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:56:04
2025-12-03T14:56:13.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:56:13.779 [DEBUG] [Thread-118645] [transport.py] [_log()] starting thread (client mode): 0xa2760640
2025-12-03T14:56:13.779 [DEBUG] [Thread-118645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:56:13.800 [DEBUG] [Thread-118645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:56:13.800 [INFO] [Thread-118645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:13.803 [DEBUG] [Thread-118645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] client lang: <none>
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] server lang: <none>
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] kex follows: False
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] Compression: none
2025-12-03T14:56:13.804 [DEBUG] [Thread-118645] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:56:13.822 [DEBUG] [Thread-118645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:56:13.823 [DEBUG] [Thread-118645] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:56:13.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:56:13.824 [DEBUG] [Thread-118645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:56:13.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:56:13.826 [DEBUG] [Thread-118645] [transport.py] [_log()] userauth is OK
2025-12-03T14:56:13.826 [DEBUG] [Thread-118645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:56:13.826 [DEBUG] [Thread-118645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:56:13.826 [DEBUG] [Thread-118645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:56:13.827 [DEBUG] [Thread-118645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:56:13.851 [INFO] [Thread-118645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:56:13.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:56:14.515 [DEBUG] [Thread-118645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:56:14.515 [DEBUG] [Thread-118645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:56:14.516 [DEBUG] [Thread-118645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:56:14.556 [DEBUG] [Thread-118645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:56:14.556 [DEBUG] [Thread-118645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:56:14.560 [DEBUG] [Thread-118645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:56:14.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:56:14.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:56:14.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:56:14.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:56:14.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:56:14.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:56:14.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:56:14.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.538590 -999.00  +21.50   8.08     24   +0.20 1 1 1 1 1   888    0 23.59 71.87 ----- 9.5 8.1 147.5 16.2 29.4 -28.1 29.0 -27.8 30.2 -26.1 31.1 -26.5
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.538590
2025-12-03T14:56:14.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:56:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:56:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:56:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:56:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:56:14.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:56:04', tmtdew=24.51, humidity=18.89, cloud=0.0, wind=15.86, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:55:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:56:14.587 [DEBUG] [Thread-118645] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:56:14.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:56:14.688 [DEBUG] [Thread-118648] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T14:56:14.689 [DEBUG] [Thread-118648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:56:14.704 [DEBUG] [Thread-118648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:56:14.705 [INFO] [Thread-118648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:14.712 [DEBUG] [Thread-118648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] client lang: <none>
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] server lang: <none>
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] kex follows: False
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] Compression: none
2025-12-03T14:56:14.713 [DEBUG] [Thread-118648] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:56:14.772 [DEBUG] [Thread-118648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:56:14.772 [DEBUG] [Thread-118648] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:56:14.773 [DEBUG] [Thread-118648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:56:14.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:56:14.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:56:14.829 [DEBUG] [Thread-118648] [transport.py] [_log()] userauth is OK
2025-12-03T14:56:14.829 [DEBUG] [Thread-118648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:56:14.829 [DEBUG] [Thread-118648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:56:14.829 [DEBUG] [Thread-118648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:56:14.829 [DEBUG] [Thread-118648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:56:14.847 [INFO] [Thread-118648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:56:14.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:56:14.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:56:15.676 [DEBUG] [Thread-118648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:56:15.677 [DEBUG] [Thread-118648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:56:15.724 [DEBUG] [Thread-118648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:56:15.724 [DEBUG] [Thread-118648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:56:15.734 [DEBUG] [Thread-118648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:56:15.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:56:15.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:56:15.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:56:15.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:56:15.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:56:15.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:56:15.773 [DEBUG] [Thread-118648] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:56:23.171 [DEBUG] [Thread-118650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:24.156 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:24.157 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:38.210 [DEBUG] [Thread-118651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:56:45.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:56:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:56:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 56, 36), 24.83, 18.49, 0.0, 10.92, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:56:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:56:36
2025-12-03T14:56:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:56:46.746 [DEBUG] [Thread-118652] [transport.py] [_log()] starting thread (client mode): 0xa517df90
2025-12-03T14:56:46.746 [DEBUG] [Thread-118652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:56:46.766 [DEBUG] [Thread-118652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:56:46.767 [INFO] [Thread-118652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] client lang: <none>
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] server lang: <none>
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] kex follows: False
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:56:46.770 [DEBUG] [Thread-118652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:56:46.771 [DEBUG] [Thread-118652] [transport.py] [_log()] Compression: none
2025-12-03T14:56:46.771 [DEBUG] [Thread-118652] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:56:46.788 [DEBUG] [Thread-118652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:56:46.789 [DEBUG] [Thread-118652] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:56:46.789 [DEBUG] [Thread-118652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:56:46.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:56:46.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:56:46.792 [DEBUG] [Thread-118652] [transport.py] [_log()] userauth is OK
2025-12-03T14:56:46.792 [DEBUG] [Thread-118652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:56:46.792 [DEBUG] [Thread-118652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:56:46.792 [DEBUG] [Thread-118652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:56:46.792 [DEBUG] [Thread-118652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:56:46.816 [INFO] [Thread-118652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:56:46.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:56:47.450 [DEBUG] [Thread-118652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:56:47.450 [DEBUG] [Thread-118652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:56:47.451 [DEBUG] [Thread-118652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:56:47.491 [DEBUG] [Thread-118652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:56:47.491 [DEBUG] [Thread-118652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:56:47.495 [DEBUG] [Thread-118652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:56:47.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:56:47.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:56:47.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:56:47.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:56:47.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:56:47.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:56:47.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:56:47.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:56:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:56:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.539285 -999.00  +21.70  10.51     23   +0.20 1 1 1 1 1   888    0 24.09 70.85 ----- 9.6 10.5 119.8 15.6 29.4 -27.8 29.1 -28.1 30.4 -26.9 31.3 -26.9
2025-12-03T14:56:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:56:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:56:47.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.539285
2025-12-03T14:56:47.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:56:47.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:56:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:56:47.522 [DEBUG] [Thread-118652] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:56:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:56:47.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:56:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:56:36', tmtdew=24.83, humidity=18.49, cloud=0.0, wind=10.92, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:56:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:56:47.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:56:47.617 [DEBUG] [Thread-118655] [transport.py] [_log()] starting thread (client mode): 0xa2750c40
2025-12-03T14:56:47.617 [DEBUG] [Thread-118655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:56:47.631 [DEBUG] [Thread-118655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:56:47.631 [INFO] [Thread-118655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] client lang: <none>
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] server lang: <none>
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] kex follows: False
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:56:47.639 [DEBUG] [Thread-118655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:56:47.640 [DEBUG] [Thread-118655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:56:47.640 [DEBUG] [Thread-118655] [transport.py] [_log()] Compression: none
2025-12-03T14:56:47.640 [DEBUG] [Thread-118655] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:56:47.701 [DEBUG] [Thread-118655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:56:47.702 [DEBUG] [Thread-118655] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:56:47.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:56:47.703 [DEBUG] [Thread-118655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:56:47.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:56:47.761 [DEBUG] [Thread-118655] [transport.py] [_log()] userauth is OK
2025-12-03T14:56:47.761 [DEBUG] [Thread-118655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:56:47.761 [DEBUG] [Thread-118655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:56:47.761 [DEBUG] [Thread-118655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:56:47.761 [DEBUG] [Thread-118655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:56:47.780 [INFO] [Thread-118655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:56:47.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:56:47.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:56:48.594 [DEBUG] [Thread-118655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:56:48.594 [DEBUG] [Thread-118655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:56:48.642 [DEBUG] [Thread-118655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:56:48.642 [DEBUG] [Thread-118655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:56:48.651 [DEBUG] [Thread-118655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:56:48.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:56:48.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:56:48.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:56:48.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:56:48.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:56:48.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:56:48.688 [DEBUG] [Thread-118655] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:56:51.719 [DEBUG] [Thread-118657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:56:53.242 [DEBUG] [Thread-118658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:08.284 [DEBUG] [Thread-118659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:18.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:57:18.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:57:18.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:57:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 57, 8), 24.69, 18.65, 0.0, 11.26, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:57:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:57:08
2025-12-03T14:57:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:57:19.649 [DEBUG] [Thread-118660] [transport.py] [_log()] starting thread (client mode): 0xa277aec0
2025-12-03T14:57:19.649 [DEBUG] [Thread-118660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:57:19.670 [DEBUG] [Thread-118660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:57:19.670 [INFO] [Thread-118660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:57:19.673 [DEBUG] [Thread-118660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] client lang: <none>
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] server lang: <none>
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] kex follows: False
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:57:19.674 [DEBUG] [Thread-118660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:57:19.675 [DEBUG] [Thread-118660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:57:19.675 [DEBUG] [Thread-118660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:57:19.675 [DEBUG] [Thread-118660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:57:19.675 [DEBUG] [Thread-118660] [transport.py] [_log()] Compression: none
2025-12-03T14:57:19.675 [DEBUG] [Thread-118660] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:57:19.694 [DEBUG] [Thread-118660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:57:19.694 [DEBUG] [Thread-118660] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:57:19.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:57:19.695 [DEBUG] [Thread-118660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:57:19.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:57:19.697 [DEBUG] [Thread-118660] [transport.py] [_log()] userauth is OK
2025-12-03T14:57:19.697 [DEBUG] [Thread-118660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:57:19.698 [DEBUG] [Thread-118660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:57:19.698 [DEBUG] [Thread-118660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:57:19.698 [DEBUG] [Thread-118660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:57:19.721 [INFO] [Thread-118660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:57:19.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:57:20.326 [DEBUG] [Thread-118660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:57:20.327 [DEBUG] [Thread-118660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:57:20.327 [DEBUG] [Thread-118660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:57:20.367 [DEBUG] [Thread-118660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:57:20.368 [DEBUG] [Thread-118660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:57:20.370 [DEBUG] [Thread-118660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:57:20.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:57:20.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:57:20.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:57:20.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:57:20.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:57:20.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:57:20.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:57:20.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:57:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:57:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.539632 -999.00  +21.80  11.05     22   -0.30 1 1 1 1 1   888    0 23.67 75.63 ----- 9.8 11.1 169.8 16.1 29.6 -28.5 29.2 -31.0 30.6 -25.9 31.4 -25.7
2025-12-03T14:57:20.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:57:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:57:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.539632
2025-12-03T14:57:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:57:20.388 [DEBUG] [Thread-118660] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:57:20.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:57:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:57:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:57:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:57:20.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:57:08', tmtdew=24.69, humidity=18.65, cloud=0.0, wind=11.26, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:57:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:57:20.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:57:20.483 [DEBUG] [Thread-118663] [transport.py] [_log()] starting thread (client mode): 0xa519b790
2025-12-03T14:57:20.484 [DEBUG] [Thread-118663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:57:20.497 [DEBUG] [Thread-118663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:57:20.498 [INFO] [Thread-118663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:57:20.507 [DEBUG] [Thread-118663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:57:20.507 [DEBUG] [Thread-118663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:57:20.507 [DEBUG] [Thread-118663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] client lang: <none>
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] server lang: <none>
2025-12-03T14:57:20.508 [DEBUG] [Thread-118663] [transport.py] [_log()] kex follows: False
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] Compression: none
2025-12-03T14:57:20.509 [DEBUG] [Thread-118663] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:57:20.565 [DEBUG] [Thread-118663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:57:20.565 [DEBUG] [Thread-118663] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:57:20.566 [DEBUG] [Thread-118663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:57:20.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:57:20.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:57:20.621 [DEBUG] [Thread-118663] [transport.py] [_log()] userauth is OK
2025-12-03T14:57:20.622 [DEBUG] [Thread-118663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:57:20.622 [DEBUG] [Thread-118663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:57:20.622 [DEBUG] [Thread-118663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:57:20.622 [DEBUG] [Thread-118663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:57:20.641 [INFO] [Thread-118663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:57:20.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:57:20.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:57:21.453 [DEBUG] [Thread-118663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:57:21.454 [DEBUG] [Thread-118663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:57:21.501 [DEBUG] [Thread-118663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:57:21.502 [DEBUG] [Thread-118663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:57:21.510 [DEBUG] [Thread-118663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:57:21.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:57:21.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:57:21.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:57:21.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:57:21.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:57:21.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:57:21.544 [DEBUG] [Thread-118663] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:57:23.318 [DEBUG] [Thread-118665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:24.297 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:24.298 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:38.370 [DEBUG] [Thread-118666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:57:51.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:57:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:57:51.747 [DEBUG] [Thread-118667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 57, 40), 24.8, 18.7, 0.0, 12.18, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:57:52.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:57:40
2025-12-03T14:57:52.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:57:52.525 [DEBUG] [Thread-118668] [transport.py] [_log()] starting thread (client mode): 0xa519b820
2025-12-03T14:57:52.525 [DEBUG] [Thread-118668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:57:52.546 [DEBUG] [Thread-118668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:57:52.546 [INFO] [Thread-118668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] client lang: <none>
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] server lang: <none>
2025-12-03T14:57:52.549 [DEBUG] [Thread-118668] [transport.py] [_log()] kex follows: False
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] Compression: none
2025-12-03T14:57:52.550 [DEBUG] [Thread-118668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:57:52.565 [DEBUG] [Thread-118668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:57:52.565 [DEBUG] [Thread-118668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:57:52.566 [DEBUG] [Thread-118668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:57:52.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:57:52.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:57:52.568 [DEBUG] [Thread-118668] [transport.py] [_log()] userauth is OK
2025-12-03T14:57:52.568 [DEBUG] [Thread-118668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:57:52.568 [DEBUG] [Thread-118668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:57:52.568 [DEBUG] [Thread-118668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:57:52.569 [DEBUG] [Thread-118668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:57:52.593 [INFO] [Thread-118668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:57:52.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:57:53.214 [DEBUG] [Thread-118668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:57:53.214 [DEBUG] [Thread-118668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:57:53.215 [DEBUG] [Thread-118668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:57:53.255 [DEBUG] [Thread-118668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:57:53.255 [DEBUG] [Thread-118668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:57:53.259 [DEBUG] [Thread-118668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:57:53.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:57:53.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:57:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:57:53.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:57:53.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:57:53.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:57:53.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:57:53.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:57:53.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:57:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.539979 -999.00  +21.70  15.75     23   -0.10 1 1 1 1 1   888    0 24.04 71.89 ----- 13.4 15.8 142.0 20.4 29.7 -28.0 29.3 -27.7 30.8 -26.0 31.4 -27.4
2025-12-03T14:57:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:57:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:57:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.539979
2025-12-03T14:57:53.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:57:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:57:53.286 [DEBUG] [Thread-118668] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:57:53.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:57:53.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:57:53.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:57:53.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:57:40', tmtdew=24.8, humidity=18.7, cloud=0.0, wind=12.18, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:57:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:57:53.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:57:53.379 [DEBUG] [Thread-118671] [transport.py] [_log()] starting thread (client mode): 0xa27c9360
2025-12-03T14:57:53.379 [DEBUG] [Thread-118671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:57:53.394 [DEBUG] [Thread-118671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:57:53.394 [INFO] [Thread-118671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:57:53.401 [DEBUG] [Thread-118671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:57:53.401 [DEBUG] [Thread-118671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:57:53.401 [DEBUG] [Thread-118671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:57:53.401 [DEBUG] [Thread-118671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] client lang: <none>
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] server lang: <none>
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] kex follows: False
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] Compression: none
2025-12-03T14:57:53.402 [DEBUG] [Thread-118671] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:57:53.404 [DEBUG] [Thread-118673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:57:53.461 [DEBUG] [Thread-118671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:57:53.461 [DEBUG] [Thread-118671] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:57:53.462 [DEBUG] [Thread-118671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:57:53.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:57:53.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:57:53.517 [DEBUG] [Thread-118671] [transport.py] [_log()] userauth is OK
2025-12-03T14:57:53.517 [DEBUG] [Thread-118671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:57:53.517 [DEBUG] [Thread-118671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:57:53.517 [DEBUG] [Thread-118671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:57:53.517 [DEBUG] [Thread-118671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:57:53.531 [INFO] [Thread-118671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:57:53.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:57:53.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:57:54.348 [DEBUG] [Thread-118671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:57:54.349 [DEBUG] [Thread-118671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:57:54.396 [DEBUG] [Thread-118671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:57:54.396 [DEBUG] [Thread-118671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:57:54.406 [DEBUG] [Thread-118671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:57:54.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:57:54.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:57:54.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:57:54.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:57:54.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:57:54.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:57:54.443 [DEBUG] [Thread-118671] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:58:08.452 [DEBUG] [Thread-118674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:23.484 [DEBUG] [Thread-118675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:24.448 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:24.449 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:58:24.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:58:25.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 58, 12), 25.04, 18.44, 0.0, 11.93, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:58:25.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:58:12
2025-12-03T14:58:25.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:58:25.400 [DEBUG] [Thread-118676] [transport.py] [_log()] starting thread (client mode): 0xa2745c30
2025-12-03T14:58:25.401 [DEBUG] [Thread-118676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:58:25.420 [DEBUG] [Thread-118676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:58:25.420 [INFO] [Thread-118676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] client lang: <none>
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] server lang: <none>
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] kex follows: False
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] Compression: none
2025-12-03T14:58:25.422 [DEBUG] [Thread-118676] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:58:25.435 [DEBUG] [Thread-118676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:58:25.436 [DEBUG] [Thread-118676] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:58:25.436 [DEBUG] [Thread-118676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:58:25.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:58:25.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:58:25.438 [DEBUG] [Thread-118676] [transport.py] [_log()] userauth is OK
2025-12-03T14:58:25.438 [DEBUG] [Thread-118676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:58:25.438 [DEBUG] [Thread-118676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:58:25.438 [DEBUG] [Thread-118676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:58:25.439 [DEBUG] [Thread-118676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:58:25.465 [INFO] [Thread-118676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:58:25.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:58:26.119 [DEBUG] [Thread-118676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:58:26.119 [DEBUG] [Thread-118676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:58:26.120 [DEBUG] [Thread-118676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:58:26.160 [DEBUG] [Thread-118676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:58:26.160 [DEBUG] [Thread-118676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:58:26.164 [DEBUG] [Thread-118676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:58:26.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:58:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:58:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:58:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:58:26.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:58:26.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:58:26.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:58:26.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:58:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:58:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.540326 -999.00  +21.60  11.02     23   +0.00 1 1 1 1 1   888    0 23.94 74.10 ----- 11.6 11.0 136.0 15.8 29.8 -27.9 29.4 -27.9 30.8 -26.0 31.5 -28.6
2025-12-03T14:58:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:58:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:58:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.540326
2025-12-03T14:58:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:58:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:58:26.190 [DEBUG] [Thread-118676] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:58:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:58:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:58:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:58:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:58:12', tmtdew=25.04, humidity=18.44, cloud=0.0, wind=11.93, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:58:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:58:26.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:58:26.283 [DEBUG] [Thread-118679] [transport.py] [_log()] starting thread (client mode): 0xa2779a50
2025-12-03T14:58:26.283 [DEBUG] [Thread-118679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:58:26.297 [DEBUG] [Thread-118679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:58:26.297 [INFO] [Thread-118679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:58:26.305 [DEBUG] [Thread-118679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:58:26.305 [DEBUG] [Thread-118679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:58:26.305 [DEBUG] [Thread-118679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:58:26.305 [DEBUG] [Thread-118679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:26.305 [DEBUG] [Thread-118679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] client lang: <none>
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] server lang: <none>
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] kex follows: False
2025-12-03T14:58:26.306 [DEBUG] [Thread-118679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] Compression: none
2025-12-03T14:58:26.307 [DEBUG] [Thread-118679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:58:26.362 [DEBUG] [Thread-118679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:58:26.363 [DEBUG] [Thread-118679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:58:26.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:58:26.364 [DEBUG] [Thread-118679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:58:26.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:58:26.422 [DEBUG] [Thread-118679] [transport.py] [_log()] userauth is OK
2025-12-03T14:58:26.422 [DEBUG] [Thread-118679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:58:26.422 [DEBUG] [Thread-118679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:58:26.422 [DEBUG] [Thread-118679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:58:26.422 [DEBUG] [Thread-118679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:58:26.447 [INFO] [Thread-118679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:58:26.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:58:26.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:58:27.280 [DEBUG] [Thread-118679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:58:27.281 [DEBUG] [Thread-118679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:58:27.329 [DEBUG] [Thread-118679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:58:27.329 [DEBUG] [Thread-118679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:58:27.338 [DEBUG] [Thread-118679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:58:27.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:58:27.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:58:27.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:58:27.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:58:27.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:58:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:58:27.373 [DEBUG] [Thread-118679] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:58:38.520 [DEBUG] [Thread-118681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:51.793 [DEBUG] [Thread-118682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:53.569 [DEBUG] [Thread-118683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:58:57.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:58:57.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:58:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:58:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 58, 44), 25.09, 18.24, 0.0, 13.57, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:58:58.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:58:44
2025-12-03T14:58:58.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:58:58.400 [DEBUG] [Thread-118684] [transport.py] [_log()] starting thread (client mode): 0xa2744160
2025-12-03T14:58:58.400 [DEBUG] [Thread-118684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:58:58.419 [DEBUG] [Thread-118684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:58:58.420 [INFO] [Thread-118684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] client lang: <none>
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] server lang: <none>
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] kex follows: False
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] Compression: none
2025-12-03T14:58:58.423 [DEBUG] [Thread-118684] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:58:58.431 [DEBUG] [Thread-118684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:58:58.431 [DEBUG] [Thread-118684] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:58:58.431 [DEBUG] [Thread-118684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:58:58.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:58:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:58:58.432 [DEBUG] [Thread-118684] [transport.py] [_log()] userauth is OK
2025-12-03T14:58:58.432 [DEBUG] [Thread-118684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:58:58.432 [DEBUG] [Thread-118684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:58:58.432 [DEBUG] [Thread-118684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:58:58.432 [DEBUG] [Thread-118684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:58:58.449 [INFO] [Thread-118684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:58:58.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:58:59.088 [DEBUG] [Thread-118684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:58:59.088 [DEBUG] [Thread-118684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:58:59.089 [DEBUG] [Thread-118684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:58:59.129 [DEBUG] [Thread-118684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:58:59.129 [DEBUG] [Thread-118684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:58:59.132 [DEBUG] [Thread-118684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:58:59.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:58:59.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:58:59.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:58:59.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:58:59.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:58:59.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:58:59.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:58:59.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:58:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:58:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.540674 -999.00  +21.40  10.13     23   +0.00 1 1 1 1 1   888    0 23.57 71.83 ----- 9.4 10.1 182.0 20.4 29.7 -28.9 29.3 -28.2 30.9 -27.4 31.5 -28.5
2025-12-03T14:58:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:58:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:58:59.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.540674
2025-12-03T14:58:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:58:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:58:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:58:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:58:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:58:59.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:58:44', tmtdew=25.09, humidity=18.24, cloud=0.0, wind=13.57, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:58:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:58:59.159 [DEBUG] [Thread-118684] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:58:59.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:58:59.252 [DEBUG] [Thread-118687] [transport.py] [_log()] starting thread (client mode): 0xa27b5b70
2025-12-03T14:58:59.252 [DEBUG] [Thread-118687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:58:59.266 [DEBUG] [Thread-118687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:58:59.267 [INFO] [Thread-118687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:58:59.274 [DEBUG] [Thread-118687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] client lang: <none>
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] server lang: <none>
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] kex follows: False
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] Compression: none
2025-12-03T14:58:59.275 [DEBUG] [Thread-118687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:58:59.334 [DEBUG] [Thread-118687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:58:59.335 [DEBUG] [Thread-118687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:58:59.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:58:59.336 [DEBUG] [Thread-118687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:58:59.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:58:59.390 [DEBUG] [Thread-118687] [transport.py] [_log()] userauth is OK
2025-12-03T14:58:59.390 [DEBUG] [Thread-118687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:58:59.391 [DEBUG] [Thread-118687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:58:59.391 [DEBUG] [Thread-118687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:58:59.391 [DEBUG] [Thread-118687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:58:59.409 [INFO] [Thread-118687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:58:59.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:58:59.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:59:00.215 [DEBUG] [Thread-118687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:59:00.215 [DEBUG] [Thread-118687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:59:00.264 [DEBUG] [Thread-118687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:59:00.264 [DEBUG] [Thread-118687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:59:00.273 [DEBUG] [Thread-118687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:59:00.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:59:00.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:59:00.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:59:00.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:59:00.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:59:00.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:59:00.310 [DEBUG] [Thread-118687] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:59:08.602 [DEBUG] [Thread-118689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:23.649 [DEBUG] [Thread-118690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:24.591 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:24.592 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:30.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T14:59:30.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T14:59:30.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T14:59:31.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 59, 16), 25.22, 18.07, 0.0, 15.28, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T14:59:31.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:59:16
2025-12-03T14:59:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T14:59:31.279 [DEBUG] [Thread-118691] [transport.py] [_log()] starting thread (client mode): 0xa27442b0
2025-12-03T14:59:31.279 [DEBUG] [Thread-118691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:59:31.299 [DEBUG] [Thread-118691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T14:59:31.299 [INFO] [Thread-118691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T14:59:31.302 [DEBUG] [Thread-118691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] client lang: <none>
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] server lang: <none>
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] kex follows: False
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:59:31.303 [DEBUG] [Thread-118691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:59:31.304 [DEBUG] [Thread-118691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:59:31.304 [DEBUG] [Thread-118691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:59:31.304 [DEBUG] [Thread-118691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:59:31.304 [DEBUG] [Thread-118691] [transport.py] [_log()] Compression: none
2025-12-03T14:59:31.304 [DEBUG] [Thread-118691] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:59:31.323 [DEBUG] [Thread-118691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:59:31.324 [DEBUG] [Thread-118691] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:59:31.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T14:59:31.325 [DEBUG] [Thread-118691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T14:59:31.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:59:31.327 [DEBUG] [Thread-118691] [transport.py] [_log()] userauth is OK
2025-12-03T14:59:31.327 [DEBUG] [Thread-118691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:59:31.328 [DEBUG] [Thread-118691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:59:31.328 [DEBUG] [Thread-118691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T14:59:31.328 [DEBUG] [Thread-118691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:59:31.351 [INFO] [Thread-118691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:59:31.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:59:31.965 [DEBUG] [Thread-118691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:59:31.965 [DEBUG] [Thread-118691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:59:31.965 [DEBUG] [Thread-118691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T14:59:32.006 [DEBUG] [Thread-118691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:59:32.006 [DEBUG] [Thread-118691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:59:32.008 [DEBUG] [Thread-118691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:59:32.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:59:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T14:59:32.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T14:59:32.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T14:59:32.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:59:32.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T14:59:32.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.541021 -999.00  +21.40  12.57     23   -0.00 1 1 1 1 1   888    0 23.65 69.59 ----- 13.8 12.6 156.6 17.0 29.8 -27.9 29.2 -27.6 30.8 -26.5 31.6 -28.2
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.541021
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T14:59:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:59:16', tmtdew=25.22, humidity=18.07, cloud=0.0, wind=15.28, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:59:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T14:59:32.028 [DEBUG] [Thread-118691] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:59:32.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T14:59:32.114 [DEBUG] [Thread-118694] [transport.py] [_log()] starting thread (client mode): 0xa27473d0
2025-12-03T14:59:32.114 [DEBUG] [Thread-118694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T14:59:32.129 [DEBUG] [Thread-118694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T14:59:32.129 [INFO] [Thread-118694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] client lang: <none>
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] server lang: <none>
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] kex follows: False
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] Compression: none
2025-12-03T14:59:32.136 [DEBUG] [Thread-118694] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T14:59:32.193 [DEBUG] [Thread-118694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T14:59:32.193 [DEBUG] [Thread-118694] [transport.py] [_log()] Switch to new keys ...
2025-12-03T14:59:32.193 [DEBUG] [Thread-118694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T14:59:32.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T14:59:32.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T14:59:32.250 [DEBUG] [Thread-118694] [transport.py] [_log()] userauth is OK
2025-12-03T14:59:32.250 [DEBUG] [Thread-118694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T14:59:32.250 [DEBUG] [Thread-118694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T14:59:32.250 [DEBUG] [Thread-118694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T14:59:32.250 [DEBUG] [Thread-118694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T14:59:32.264 [INFO] [Thread-118694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T14:59:32.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T14:59:32.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T14:59:33.158 [DEBUG] [Thread-118694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T14:59:33.158 [DEBUG] [Thread-118694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T14:59:33.206 [DEBUG] [Thread-118694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T14:59:33.206 [DEBUG] [Thread-118694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T14:59:33.214 [DEBUG] [Thread-118694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T14:59:33.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T14:59:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T14:59:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T14:59:33.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T14:59:33.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T14:59:33.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T14:59:33.245 [DEBUG] [Thread-118694] [transport.py] [_log()] EOF in transport thread
2025-12-03T14:59:38.684 [DEBUG] [Thread-118696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:51.854 [DEBUG] [Thread-118697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T14:59:53.748 [DEBUG] [Thread-118698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:03.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:00:03.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:00:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:00:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 14, 59, 48), 24.65, 19.0, 0.0, 14.71, 21.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:00:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 14:59:48
2025-12-03T15:00:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:00:04.215 [DEBUG] [Thread-118699] [transport.py] [_log()] starting thread (client mode): 0xa27458a0
2025-12-03T15:00:04.215 [DEBUG] [Thread-118699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:00:04.237 [DEBUG] [Thread-118699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:00:04.237 [INFO] [Thread-118699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:00:04.240 [DEBUG] [Thread-118699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] client lang: <none>
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] server lang: <none>
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] kex follows: False
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:00:04.241 [DEBUG] [Thread-118699] [transport.py] [_log()] Compression: none
2025-12-03T15:00:04.242 [DEBUG] [Thread-118699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:00:04.258 [DEBUG] [Thread-118699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:00:04.259 [DEBUG] [Thread-118699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:00:04.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:00:04.260 [DEBUG] [Thread-118699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:00:04.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:00:04.261 [DEBUG] [Thread-118699] [transport.py] [_log()] userauth is OK
2025-12-03T15:00:04.261 [DEBUG] [Thread-118699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:00:04.261 [DEBUG] [Thread-118699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:00:04.261 [DEBUG] [Thread-118699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:00:04.261 [DEBUG] [Thread-118699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:00:04.278 [INFO] [Thread-118699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:00:04.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:00:05.078 [DEBUG] [Thread-118699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:00:05.078 [DEBUG] [Thread-118699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:00:05.078 [DEBUG] [Thread-118699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:00:05.119 [DEBUG] [Thread-118699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:00:05.119 [DEBUG] [Thread-118699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:00:05.122 [DEBUG] [Thread-118699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:00:05.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:00:05.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:00:05.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:00:05.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:00:05.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:00:05.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:00:05.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:00:05.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:00:05.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:00:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.541368 -999.00  +21.60  11.59     23   -0.20 1 1 1 1 1   888    0 23.97 71.17 ----- 10.8 11.6 137.4 16.5 29.9 -27.7 29.4 -27.8 30.8 -27.0 31.8 -27.3
2025-12-03T15:00:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:00:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:00:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.541368
2025-12-03T15:00:05.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:00:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:00:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:00:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:00:05.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:00:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T14:59:48', tmtdew=24.65, humidity=19.0, cloud=0.0, wind=14.71, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T12:59:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:00:05.166 [DEBUG] [Thread-118699] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:00:05.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:00:05.261 [DEBUG] [Thread-118702] [transport.py] [_log()] starting thread (client mode): 0xa2747b50
2025-12-03T15:00:05.261 [DEBUG] [Thread-118702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:00:05.276 [DEBUG] [Thread-118702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:00:05.276 [INFO] [Thread-118702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:00:05.284 [DEBUG] [Thread-118702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:00:05.284 [DEBUG] [Thread-118702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:00:05.284 [DEBUG] [Thread-118702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:00:05.284 [DEBUG] [Thread-118702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] client lang: <none>
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] server lang: <none>
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] kex follows: False
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] Compression: none
2025-12-03T15:00:05.285 [DEBUG] [Thread-118702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:00:05.347 [DEBUG] [Thread-118702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:00:05.347 [DEBUG] [Thread-118702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:00:05.348 [DEBUG] [Thread-118702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:00:05.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:00:05.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:00:05.403 [DEBUG] [Thread-118702] [transport.py] [_log()] userauth is OK
2025-12-03T15:00:05.403 [DEBUG] [Thread-118702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:00:05.403 [DEBUG] [Thread-118702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:00:05.403 [DEBUG] [Thread-118702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:00:05.403 [DEBUG] [Thread-118702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:00:05.422 [INFO] [Thread-118702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:00:05.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:00:05.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:00:06.253 [DEBUG] [Thread-118702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:00:06.253 [DEBUG] [Thread-118702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:00:06.302 [DEBUG] [Thread-118702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:00:06.303 [DEBUG] [Thread-118702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:00:06.312 [DEBUG] [Thread-118702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:00:06.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:00:06.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:00:06.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:00:06.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:00:06.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:00:06.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:00:06.349 [DEBUG] [Thread-118702] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:00:08.782 [DEBUG] [Thread-118704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:23.827 [DEBUG] [Thread-118705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:24.732 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:24.733 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:36.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:00:36.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:00:36.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:00:37.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 0, 20), 24.48, 19.22, 0.0, 14.71, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:00:37.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:00:20
2025-12-03T15:00:37.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:00:37.316 [DEBUG] [Thread-118706] [transport.py] [_log()] starting thread (client mode): 0xa27458d0
2025-12-03T15:00:37.316 [DEBUG] [Thread-118706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:00:37.336 [DEBUG] [Thread-118706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:00:37.336 [INFO] [Thread-118706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:00:37.339 [DEBUG] [Thread-118706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:00:37.339 [DEBUG] [Thread-118706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] client lang: <none>
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] server lang: <none>
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] kex follows: False
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] Compression: none
2025-12-03T15:00:37.340 [DEBUG] [Thread-118706] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:00:37.358 [DEBUG] [Thread-118706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:00:37.359 [DEBUG] [Thread-118706] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:00:37.359 [DEBUG] [Thread-118706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:00:37.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:00:37.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:00:37.361 [DEBUG] [Thread-118706] [transport.py] [_log()] userauth is OK
2025-12-03T15:00:37.361 [DEBUG] [Thread-118706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:00:37.362 [DEBUG] [Thread-118706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:00:37.362 [DEBUG] [Thread-118706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:00:37.362 [DEBUG] [Thread-118706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:00:37.397 [INFO] [Thread-118706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:00:37.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:00:38.034 [DEBUG] [Thread-118706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:00:38.035 [DEBUG] [Thread-118706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:00:38.035 [DEBUG] [Thread-118706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:00:38.076 [DEBUG] [Thread-118706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:00:38.077 [DEBUG] [Thread-118706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:00:38.080 [DEBUG] [Thread-118706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:00:38.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:00:38.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:00:38.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:00:38.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:00:38.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:00:38.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:00:38.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:00:38.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:00:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:00:38.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.541715 -999.00  +21.60  10.61     23   -0.30 1 1 1 1 1   888    0 23.73 70.55 ----- 12.9 10.6 158.6 15.6 29.9 -28.6 29.4 -30.4 31.0 -26.9 31.8 -28.1
2025-12-03T15:00:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:00:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:00:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.541715
2025-12-03T15:00:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:00:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:00:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:00:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:00:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:00:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:00:20', tmtdew=24.48, humidity=19.22, cloud=0.0, wind=14.71, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:00:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:00:38.106 [DEBUG] [Thread-118706] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:00:38.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:00:38.202 [DEBUG] [Thread-118709] [transport.py] [_log()] starting thread (client mode): 0xa519b9d0
2025-12-03T15:00:38.202 [DEBUG] [Thread-118709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:00:38.217 [DEBUG] [Thread-118709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:00:38.217 [INFO] [Thread-118709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:00:38.225 [DEBUG] [Thread-118709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] client lang: <none>
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] server lang: <none>
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] kex follows: False
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] Compression: none
2025-12-03T15:00:38.226 [DEBUG] [Thread-118709] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:00:38.283 [DEBUG] [Thread-118709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:00:38.283 [DEBUG] [Thread-118709] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:00:38.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:00:38.285 [DEBUG] [Thread-118709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:00:38.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:00:38.343 [DEBUG] [Thread-118709] [transport.py] [_log()] userauth is OK
2025-12-03T15:00:38.344 [DEBUG] [Thread-118709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:00:38.344 [DEBUG] [Thread-118709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:00:38.344 [DEBUG] [Thread-118709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:00:38.344 [DEBUG] [Thread-118709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:00:38.362 [INFO] [Thread-118709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:00:38.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:00:38.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:00:38.863 [DEBUG] [Thread-118711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:39.193 [DEBUG] [Thread-118709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:00:39.194 [DEBUG] [Thread-118709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:00:39.242 [DEBUG] [Thread-118709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:00:39.242 [DEBUG] [Thread-118709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:00:39.251 [DEBUG] [Thread-118709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:00:39.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:00:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:00:39.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:00:39.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:00:39.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:00:39.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:00:39.288 [DEBUG] [Thread-118709] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:00:51.883 [DEBUG] [Thread-118712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:00:53.916 [DEBUG] [Thread-118713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:08.951 [DEBUG] [Thread-118714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:09.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:01:09.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:01:09.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:01:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 0, 52), 24.98, 18.52, 0.0, 14.61, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:01:09.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:00:52
2025-12-03T15:01:10.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:01:10.265 [DEBUG] [Thread-118715] [transport.py] [_log()] starting thread (client mode): 0xa517f5b0
2025-12-03T15:01:10.265 [DEBUG] [Thread-118715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:01:10.286 [DEBUG] [Thread-118715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:01:10.286 [INFO] [Thread-118715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] client lang: <none>
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] server lang: <none>
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] kex follows: False
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:01:10.289 [DEBUG] [Thread-118715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:01:10.290 [DEBUG] [Thread-118715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:01:10.290 [DEBUG] [Thread-118715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:01:10.290 [DEBUG] [Thread-118715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:01:10.290 [DEBUG] [Thread-118715] [transport.py] [_log()] Compression: none
2025-12-03T15:01:10.290 [DEBUG] [Thread-118715] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:01:10.307 [DEBUG] [Thread-118715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:01:10.308 [DEBUG] [Thread-118715] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:01:10.308 [DEBUG] [Thread-118715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:01:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:01:10.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:01:10.311 [DEBUG] [Thread-118715] [transport.py] [_log()] userauth is OK
2025-12-03T15:01:10.311 [DEBUG] [Thread-118715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:01:10.311 [DEBUG] [Thread-118715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:01:10.311 [DEBUG] [Thread-118715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:01:10.311 [DEBUG] [Thread-118715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:01:10.346 [INFO] [Thread-118715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:01:10.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:01:10.998 [DEBUG] [Thread-118715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:01:10.998 [DEBUG] [Thread-118715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:01:10.999 [DEBUG] [Thread-118715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:01:11.040 [DEBUG] [Thread-118715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:01:11.040 [DEBUG] [Thread-118715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:01:11.044 [DEBUG] [Thread-118715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:01:11.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:01:11.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:01:11.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:01:11.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:01:11.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:01:11.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:01:11.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:01:11.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:01:11.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:01:11.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.542063 -999.00  +21.60  12.75     23   -0.30 1 1 1 1 1   888    0 23.44 71.44 ----- 11.7 12.8 163.6 14.8 30.0 -28.9 29.3 -31.9 31.0 -27.4 31.9 -28.6
2025-12-03T15:01:11.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:01:11.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:01:11.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.542063
2025-12-03T15:01:11.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:01:11.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:01:11.069 [DEBUG] [Thread-118715] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:01:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:01:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:01:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:01:11.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:00:52', tmtdew=24.98, humidity=18.52, cloud=0.0, wind=14.61, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:00:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:01:11.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:01:11.166 [DEBUG] [Thread-118718] [transport.py] [_log()] starting thread (client mode): 0xa517d870
2025-12-03T15:01:11.166 [DEBUG] [Thread-118718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:01:11.181 [DEBUG] [Thread-118718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:01:11.181 [INFO] [Thread-118718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] client lang: <none>
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] server lang: <none>
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] kex follows: False
2025-12-03T15:01:11.189 [DEBUG] [Thread-118718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] Compression: none
2025-12-03T15:01:11.190 [DEBUG] [Thread-118718] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:01:11.248 [DEBUG] [Thread-118718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:01:11.248 [DEBUG] [Thread-118718] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:01:11.249 [DEBUG] [Thread-118718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:01:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:01:11.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:01:11.307 [DEBUG] [Thread-118718] [transport.py] [_log()] userauth is OK
2025-12-03T15:01:11.307 [DEBUG] [Thread-118718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:01:11.307 [DEBUG] [Thread-118718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:01:11.308 [DEBUG] [Thread-118718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:01:11.308 [DEBUG] [Thread-118718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:01:11.326 [INFO] [Thread-118718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:01:11.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:01:11.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:01:12.165 [DEBUG] [Thread-118718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:01:12.165 [DEBUG] [Thread-118718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:01:12.213 [DEBUG] [Thread-118718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:01:12.213 [DEBUG] [Thread-118718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:01:12.223 [DEBUG] [Thread-118718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:01:12.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:01:12.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:01:12.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:01:12.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:01:12.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:01:12.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:01:12.264 [DEBUG] [Thread-118718] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:01:23.985 [DEBUG] [Thread-118720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:24.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:24.875 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:39.034 [DEBUG] [Thread-118721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:01:42.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:01:42.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:01:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 1, 24), 24.74, 18.8, 0.0, 11.81, 21.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:01:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:01:24
2025-12-03T15:01:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:01:43.209 [DEBUG] [Thread-118722] [transport.py] [_log()] starting thread (client mode): 0xa27cbaf0
2025-12-03T15:01:43.209 [DEBUG] [Thread-118722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:01:43.222 [DEBUG] [Thread-118722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:01:43.223 [INFO] [Thread-118722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] client lang: <none>
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] server lang: <none>
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] kex follows: False
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:01:43.225 [DEBUG] [Thread-118722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:01:43.226 [DEBUG] [Thread-118722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:01:43.226 [DEBUG] [Thread-118722] [transport.py] [_log()] Compression: none
2025-12-03T15:01:43.226 [DEBUG] [Thread-118722] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:01:43.243 [DEBUG] [Thread-118722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:01:43.244 [DEBUG] [Thread-118722] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:01:43.244 [DEBUG] [Thread-118722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:01:43.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:01:43.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:01:43.246 [DEBUG] [Thread-118722] [transport.py] [_log()] userauth is OK
2025-12-03T15:01:43.247 [DEBUG] [Thread-118722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:01:43.247 [DEBUG] [Thread-118722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:01:43.247 [DEBUG] [Thread-118722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:01:43.247 [DEBUG] [Thread-118722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:01:43.271 [INFO] [Thread-118722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:01:43.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:01:43.943 [DEBUG] [Thread-118722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:01:43.943 [DEBUG] [Thread-118722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:01:43.943 [DEBUG] [Thread-118722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:01:43.984 [DEBUG] [Thread-118722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:01:43.984 [DEBUG] [Thread-118722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:01:43.987 [DEBUG] [Thread-118722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:01:43.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:01:43.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:01:44.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:01:44.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:01:44.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:01:44.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:01:44.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.542410 -999.00  +21.60   9.08     23   -0.30 1 1 1 1 1   888    0 23.85 77.48 ----- 10.1 9.1 175.0 12.9 30.1 -29.1 29.5 -27.9 31.1 -26.9 32.0 -27.7
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:01:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.542410
2025-12-03T15:01:44.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:01:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:01:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:01:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:01:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:01:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:01:24', tmtdew=24.74, humidity=18.8, cloud=0.0, wind=11.81, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:01:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:01:44.013 [DEBUG] [Thread-118722] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:01:44.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:01:44.109 [DEBUG] [Thread-118725] [transport.py] [_log()] starting thread (client mode): 0xa27c8220
2025-12-03T15:01:44.109 [DEBUG] [Thread-118725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:01:44.124 [DEBUG] [Thread-118725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:01:44.124 [INFO] [Thread-118725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:01:44.131 [DEBUG] [Thread-118725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] client lang: <none>
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] server lang: <none>
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] kex follows: False
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] Compression: none
2025-12-03T15:01:44.132 [DEBUG] [Thread-118725] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:01:44.191 [DEBUG] [Thread-118725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:01:44.192 [DEBUG] [Thread-118725] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:01:44.192 [DEBUG] [Thread-118725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:01:44.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:01:44.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:01:44.247 [DEBUG] [Thread-118725] [transport.py] [_log()] userauth is OK
2025-12-03T15:01:44.248 [DEBUG] [Thread-118725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:01:44.248 [DEBUG] [Thread-118725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:01:44.248 [DEBUG] [Thread-118725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:01:44.248 [DEBUG] [Thread-118725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:01:44.267 [INFO] [Thread-118725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:01:44.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:01:44.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:01:45.096 [DEBUG] [Thread-118725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:01:45.097 [DEBUG] [Thread-118725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:01:45.144 [DEBUG] [Thread-118725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:01:45.144 [DEBUG] [Thread-118725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:01:45.153 [DEBUG] [Thread-118725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:01:45.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:01:45.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:01:45.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:01:45.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:01:45.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:01:45.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:01:45.189 [DEBUG] [Thread-118725] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:01:51.919 [DEBUG] [Thread-118727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:01:54.070 [DEBUG] [Thread-118728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:09.117 [DEBUG] [Thread-118729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:15.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:02:15.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:02:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:02:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 1, 56), 24.47, 19.05, 0.0, 11.47, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:02:15.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:01:56
2025-12-03T15:02:16.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:02:16.153 [DEBUG] [Thread-118730] [transport.py] [_log()] starting thread (client mode): 0xa51cc280
2025-12-03T15:02:16.153 [DEBUG] [Thread-118730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:02:16.173 [DEBUG] [Thread-118730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:02:16.173 [INFO] [Thread-118730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:02:16.176 [DEBUG] [Thread-118730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:02:16.176 [DEBUG] [Thread-118730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:02:16.176 [DEBUG] [Thread-118730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:02:16.176 [DEBUG] [Thread-118730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:16.176 [DEBUG] [Thread-118730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] client lang: <none>
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] server lang: <none>
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] kex follows: False
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:02:16.177 [DEBUG] [Thread-118730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:02:16.178 [DEBUG] [Thread-118730] [transport.py] [_log()] Compression: none
2025-12-03T15:02:16.178 [DEBUG] [Thread-118730] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:02:16.197 [DEBUG] [Thread-118730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:02:16.198 [DEBUG] [Thread-118730] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:02:16.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:02:16.200 [DEBUG] [Thread-118730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:02:16.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:02:16.202 [DEBUG] [Thread-118730] [transport.py] [_log()] userauth is OK
2025-12-03T15:02:16.202 [DEBUG] [Thread-118730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:02:16.202 [DEBUG] [Thread-118730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:02:16.202 [DEBUG] [Thread-118730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:02:16.202 [DEBUG] [Thread-118730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:02:16.226 [INFO] [Thread-118730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:02:16.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:02:16.877 [DEBUG] [Thread-118730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:02:16.877 [DEBUG] [Thread-118730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:02:16.877 [DEBUG] [Thread-118730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:02:16.918 [DEBUG] [Thread-118730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:02:16.918 [DEBUG] [Thread-118730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:02:16.922 [DEBUG] [Thread-118730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:02:16.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:02:16.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:02:16.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:02:16.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:02:16.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:02:16.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:02:16.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:02:16.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:02:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:02:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.543104 -999.00  +21.90  10.86     23   +0.20 1 1 1 1 1   888    0 23.35 68.13 ----- 8.8 10.9 152.2 19.2 30.2 -29.0 29.7 -28.6 31.4 -26.4 32.2 -28.0
2025-12-03T15:02:16.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:02:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:02:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.543104
2025-12-03T15:02:16.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:02:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:02:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:02:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:02:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:02:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:01:56', tmtdew=24.47, humidity=19.05, cloud=0.0, wind=11.47, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:02:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:02:16.949 [DEBUG] [Thread-118730] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:02:17.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:02:17.046 [DEBUG] [Thread-118733] [transport.py] [_log()] starting thread (client mode): 0xa519a020
2025-12-03T15:02:17.046 [DEBUG] [Thread-118733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:02:17.064 [DEBUG] [Thread-118733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:02:17.065 [INFO] [Thread-118733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:02:17.072 [DEBUG] [Thread-118733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:02:17.072 [DEBUG] [Thread-118733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] client lang: <none>
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] server lang: <none>
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] kex follows: False
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:02:17.073 [DEBUG] [Thread-118733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:02:17.074 [DEBUG] [Thread-118733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:02:17.074 [DEBUG] [Thread-118733] [transport.py] [_log()] Compression: none
2025-12-03T15:02:17.074 [DEBUG] [Thread-118733] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:02:17.132 [DEBUG] [Thread-118733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:02:17.133 [DEBUG] [Thread-118733] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:02:17.133 [DEBUG] [Thread-118733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:02:17.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:02:17.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:02:17.192 [DEBUG] [Thread-118733] [transport.py] [_log()] userauth is OK
2025-12-03T15:02:17.192 [DEBUG] [Thread-118733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:02:17.192 [DEBUG] [Thread-118733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:02:17.192 [DEBUG] [Thread-118733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:02:17.192 [DEBUG] [Thread-118733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:02:17.211 [INFO] [Thread-118733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:02:17.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:02:17.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:02:18.020 [DEBUG] [Thread-118733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:02:18.020 [DEBUG] [Thread-118733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:02:18.068 [DEBUG] [Thread-118733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:02:18.068 [DEBUG] [Thread-118733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:02:18.077 [DEBUG] [Thread-118733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:02:18.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:02:18.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:02:18.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:02:18.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:02:18.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:02:18.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:02:18.114 [DEBUG] [Thread-118733] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:02:24.148 [DEBUG] [Thread-118735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:25.014 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:25.015 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:39.202 [DEBUG] [Thread-118736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:48.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:02:48.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:02:48.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:02:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 2, 28), 24.98, 18.39, 0.0, 11.54, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:02:48.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:02:28
2025-12-03T15:02:48.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:02:49.111 [DEBUG] [Thread-118737] [transport.py] [_log()] starting thread (client mode): 0xa51cf340
2025-12-03T15:02:49.112 [DEBUG] [Thread-118737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:02:49.131 [DEBUG] [Thread-118737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:02:49.131 [INFO] [Thread-118737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] client lang: <none>
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] server lang: <none>
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] kex follows: False
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] Compression: none
2025-12-03T15:02:49.133 [DEBUG] [Thread-118737] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:02:49.146 [DEBUG] [Thread-118737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:02:49.146 [DEBUG] [Thread-118737] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:02:49.146 [DEBUG] [Thread-118737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:02:49.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:02:49.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:02:49.148 [DEBUG] [Thread-118737] [transport.py] [_log()] userauth is OK
2025-12-03T15:02:49.148 [DEBUG] [Thread-118737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:02:49.148 [DEBUG] [Thread-118737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:02:49.148 [DEBUG] [Thread-118737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:02:49.148 [DEBUG] [Thread-118737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:02:49.164 [INFO] [Thread-118737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:02:49.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:02:49.813 [DEBUG] [Thread-118737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:02:49.813 [DEBUG] [Thread-118737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:02:49.813 [DEBUG] [Thread-118737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:02:49.855 [DEBUG] [Thread-118737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:02:49.855 [DEBUG] [Thread-118737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:02:49.857 [DEBUG] [Thread-118737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:02:49.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:02:49.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:02:49.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:02:49.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:02:49.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:02:49.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:02:49.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.543452 -999.00  +22.30  10.59     22   +0.00 1 1 1 1 1   888    0 23.82 67.42 ----- 11.3 10.6 186.4 13.4 30.2 -29.9 29.5 -29.7 31.4 -28.4 32.0 -29.5
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.543452
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:02:49.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:02:28', tmtdew=24.98, humidity=18.39, cloud=0.0, wind=11.54, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:02:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:02:49.877 [DEBUG] [Thread-118737] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:02:49.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:02:49.963 [DEBUG] [Thread-118740] [transport.py] [_log()] starting thread (client mode): 0xa517d2a0
2025-12-03T15:02:49.963 [DEBUG] [Thread-118740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:02:49.978 [DEBUG] [Thread-118740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:02:49.978 [INFO] [Thread-118740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] client lang: <none>
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] server lang: <none>
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] kex follows: False
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:02:49.986 [DEBUG] [Thread-118740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:02:49.987 [DEBUG] [Thread-118740] [transport.py] [_log()] Compression: none
2025-12-03T15:02:49.987 [DEBUG] [Thread-118740] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:02:50.043 [DEBUG] [Thread-118740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:02:50.043 [DEBUG] [Thread-118740] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:02:50.043 [DEBUG] [Thread-118740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:02:50.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:02:50.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:02:50.099 [DEBUG] [Thread-118740] [transport.py] [_log()] userauth is OK
2025-12-03T15:02:50.099 [DEBUG] [Thread-118740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:02:50.099 [DEBUG] [Thread-118740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:02:50.100 [DEBUG] [Thread-118740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:02:50.100 [DEBUG] [Thread-118740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:02:50.117 [INFO] [Thread-118740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:02:50.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:02:50.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:02:50.948 [DEBUG] [Thread-118740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:02:50.948 [DEBUG] [Thread-118740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:02:50.996 [DEBUG] [Thread-118740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:02:50.997 [DEBUG] [Thread-118740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:02:51.005 [DEBUG] [Thread-118740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:02:51.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:02:51.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:02:51.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:02:51.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:02:51.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:02:51.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:02:51.036 [DEBUG] [Thread-118740] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:02:51.953 [DEBUG] [Thread-118742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:02:54.240 [DEBUG] [Thread-118743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:09.298 [DEBUG] [Thread-118744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:21.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:03:21.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:03:21.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:03:21.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 3), 24.87, 18.57, 0.0, 12.26, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:03:21.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:03:00
2025-12-03T15:03:21.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:03:22.010 [DEBUG] [Thread-118745] [transport.py] [_log()] starting thread (client mode): 0xa517d180
2025-12-03T15:03:22.010 [DEBUG] [Thread-118745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:03:22.032 [DEBUG] [Thread-118745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:03:22.032 [INFO] [Thread-118745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:03:22.035 [DEBUG] [Thread-118745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] client lang: <none>
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] server lang: <none>
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] kex follows: False
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] Compression: none
2025-12-03T15:03:22.036 [DEBUG] [Thread-118745] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:03:22.052 [DEBUG] [Thread-118745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:03:22.053 [DEBUG] [Thread-118745] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:03:22.053 [DEBUG] [Thread-118745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:03:22.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:03:22.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:03:22.056 [DEBUG] [Thread-118745] [transport.py] [_log()] userauth is OK
2025-12-03T15:03:22.056 [DEBUG] [Thread-118745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:03:22.056 [DEBUG] [Thread-118745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:03:22.056 [DEBUG] [Thread-118745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:03:22.056 [DEBUG] [Thread-118745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:03:22.092 [INFO] [Thread-118745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:03:22.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:03:22.737 [DEBUG] [Thread-118745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:03:22.737 [DEBUG] [Thread-118745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:03:22.738 [DEBUG] [Thread-118745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:03:22.779 [DEBUG] [Thread-118745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:03:22.779 [DEBUG] [Thread-118745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:03:22.782 [DEBUG] [Thread-118745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:03:22.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:03:22.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:03:22.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:03:22.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:03:22.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:03:22.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:03:22.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:03:22.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.543799 -999.00  +22.30  14.65     22   +0.00 1 1 1 1 1   888    0 23.45 59.65 ----- 16.3 14.7 170.5 19.1 30.1 -29.5 29.4 -36.0 31.4 -27.6 32.0 -29.3
2025-12-03T15:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:03:22.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.543799
2025-12-03T15:03:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:03:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:03:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:03:22.807 [DEBUG] [Thread-118745] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:03:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:03:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:03:22.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:03:00', tmtdew=24.87, humidity=18.57, cloud=0.0, wind=12.26, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:03:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:03:22.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:03:22.906 [DEBUG] [Thread-118748] [transport.py] [_log()] starting thread (client mode): 0xa519b9d0
2025-12-03T15:03:22.906 [DEBUG] [Thread-118748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:03:22.921 [DEBUG] [Thread-118748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:03:22.921 [INFO] [Thread-118748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:22.929 [DEBUG] [Thread-118748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] client lang: <none>
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] server lang: <none>
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] kex follows: False
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] Compression: none
2025-12-03T15:03:22.930 [DEBUG] [Thread-118748] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:03:22.986 [DEBUG] [Thread-118748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:03:22.986 [DEBUG] [Thread-118748] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:03:22.986 [DEBUG] [Thread-118748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:03:22.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:03:22.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:03:23.043 [DEBUG] [Thread-118748] [transport.py] [_log()] userauth is OK
2025-12-03T15:03:23.043 [DEBUG] [Thread-118748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:03:23.043 [DEBUG] [Thread-118748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:03:23.043 [DEBUG] [Thread-118748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:03:23.044 [DEBUG] [Thread-118748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:03:23.062 [INFO] [Thread-118748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:03:23.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:03:23.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:03:23.903 [DEBUG] [Thread-118748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:03:23.904 [DEBUG] [Thread-118748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:03:23.952 [DEBUG] [Thread-118748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:03:23.952 [DEBUG] [Thread-118748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:03:23.960 [DEBUG] [Thread-118748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:03:23.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:03:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:03:23.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:03:23.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:03:23.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:03:23.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:03:23.994 [DEBUG] [Thread-118748] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:03:24.331 [DEBUG] [Thread-118750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:25.156 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:25.156 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:39.370 [DEBUG] [Thread-118751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:52.010 [DEBUG] [Thread-118752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:03:54.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:03:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:03:54.404 [DEBUG] [Thread-118753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:03:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 3, 32), 24.84, 18.62, 0.0, 10.38, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:03:54.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:03:32
2025-12-03T15:03:54.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:03:54.952 [DEBUG] [Thread-118754] [transport.py] [_log()] starting thread (client mode): 0xa51ce0b0
2025-12-03T15:03:54.952 [DEBUG] [Thread-118754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:03:54.969 [DEBUG] [Thread-118754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:03:54.969 [INFO] [Thread-118754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] client lang: <none>
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] server lang: <none>
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] kex follows: False
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:03:54.971 [DEBUG] [Thread-118754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:03:54.972 [DEBUG] [Thread-118754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:03:54.972 [DEBUG] [Thread-118754] [transport.py] [_log()] Compression: none
2025-12-03T15:03:54.972 [DEBUG] [Thread-118754] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:03:54.981 [DEBUG] [Thread-118754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:03:54.981 [DEBUG] [Thread-118754] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:03:54.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:03:54.982 [DEBUG] [Thread-118754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:03:54.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:03:54.984 [DEBUG] [Thread-118754] [transport.py] [_log()] userauth is OK
2025-12-03T15:03:54.984 [DEBUG] [Thread-118754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:03:54.984 [DEBUG] [Thread-118754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:03:54.984 [DEBUG] [Thread-118754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:03:54.984 [DEBUG] [Thread-118754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:03:55.001 [INFO] [Thread-118754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:03:55.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:03:55.563 [DEBUG] [Thread-118754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:03:55.563 [DEBUG] [Thread-118754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:03:55.564 [DEBUG] [Thread-118754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:03:55.604 [DEBUG] [Thread-118754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:03:55.604 [DEBUG] [Thread-118754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:03:55.607 [DEBUG] [Thread-118754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:03:55.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:03:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:03:55.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:03:55.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:03:55.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:03:55.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:03:55.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.544146 -999.00  +22.40  11.42     23   +0.50 1 1 1 1 1   888    0 23.07 59.82 ----- 14.7 11.4 139.5 22.3 30.1 -30.2 29.6 -28.3 31.2 -28.8 32.1 -30.6
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:03:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.544146
2025-12-03T15:03:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:03:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:03:55.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:03:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:03:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:03:55.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:03:32', tmtdew=24.84, humidity=18.62, cloud=0.0, wind=10.38, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:03:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:03:55.632 [DEBUG] [Thread-118754] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:03:55.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:03:55.727 [DEBUG] [Thread-118757] [transport.py] [_log()] starting thread (client mode): 0xa27c9120
2025-12-03T15:03:55.727 [DEBUG] [Thread-118757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:03:55.743 [DEBUG] [Thread-118757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:03:55.743 [INFO] [Thread-118757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:03:55.750 [DEBUG] [Thread-118757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] client lang: <none>
2025-12-03T15:03:55.751 [DEBUG] [Thread-118757] [transport.py] [_log()] server lang: <none>
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] kex follows: False
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] Compression: none
2025-12-03T15:03:55.752 [DEBUG] [Thread-118757] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:03:55.808 [DEBUG] [Thread-118757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:03:55.809 [DEBUG] [Thread-118757] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:03:55.809 [DEBUG] [Thread-118757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:03:55.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:03:55.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:03:55.864 [DEBUG] [Thread-118757] [transport.py] [_log()] userauth is OK
2025-12-03T15:03:55.865 [DEBUG] [Thread-118757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:03:55.865 [DEBUG] [Thread-118757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:03:55.865 [DEBUG] [Thread-118757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:03:55.865 [DEBUG] [Thread-118757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:03:55.884 [INFO] [Thread-118757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:03:55.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:03:55.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:03:56.765 [DEBUG] [Thread-118757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:03:56.765 [DEBUG] [Thread-118757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:03:56.813 [DEBUG] [Thread-118757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:03:56.813 [DEBUG] [Thread-118757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:03:56.821 [DEBUG] [Thread-118757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:03:56.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:03:56.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:03:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:03:56.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:03:56.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:03:56.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:03:56.855 [DEBUG] [Thread-118757] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:04:09.433 [DEBUG] [Thread-118759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:24.485 [DEBUG] [Thread-118760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:25.297 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:25.298 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:26.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:04:26.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:04:26.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:04:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 4, 4), 24.84, 18.6, 0.0, 12.85, 21.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:04:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:04:04
2025-12-03T15:04:27.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:04:27.817 [DEBUG] [Thread-118761] [transport.py] [_log()] starting thread (client mode): 0xa2747160
2025-12-03T15:04:27.817 [DEBUG] [Thread-118761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:04:27.837 [DEBUG] [Thread-118761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:04:27.837 [INFO] [Thread-118761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:04:27.840 [DEBUG] [Thread-118761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] client lang: <none>
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] server lang: <none>
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] kex follows: False
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] Compression: none
2025-12-03T15:04:27.841 [DEBUG] [Thread-118761] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:04:27.858 [DEBUG] [Thread-118761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:04:27.859 [DEBUG] [Thread-118761] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:04:27.859 [DEBUG] [Thread-118761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:04:27.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:04:27.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:04:27.861 [DEBUG] [Thread-118761] [transport.py] [_log()] userauth is OK
2025-12-03T15:04:27.862 [DEBUG] [Thread-118761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:04:27.862 [DEBUG] [Thread-118761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:04:27.862 [DEBUG] [Thread-118761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:04:27.862 [DEBUG] [Thread-118761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:04:27.886 [INFO] [Thread-118761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:04:27.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:04:28.530 [DEBUG] [Thread-118761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:04:28.530 [DEBUG] [Thread-118761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:04:28.531 [DEBUG] [Thread-118761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:04:28.571 [DEBUG] [Thread-118761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:04:28.571 [DEBUG] [Thread-118761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:04:28.575 [DEBUG] [Thread-118761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:04:28.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:04:28.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:04:28.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:04:28.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:04:28.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:04:28.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:04:28.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:04:28.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:04:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:04:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.544493 -999.00  +22.20   8.60     23   +0.30 1 1 1 1 1   888    0 23.48 50.35 ----- 9.9 8.6 146.6 18.5 30.2 -28.8 29.6 -28.6 31.3 -27.5 32.1 -29.0
2025-12-03T15:04:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:04:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:04:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.544493
2025-12-03T15:04:28.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:04:28.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:04:28.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:04:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:04:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:04:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:04:04', tmtdew=24.84, humidity=18.6, cloud=0.0, wind=12.85, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:04:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:04:28.603 [DEBUG] [Thread-118761] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:04:28.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:04:28.697 [DEBUG] [Thread-118764] [transport.py] [_log()] starting thread (client mode): 0xa517cee0
2025-12-03T15:04:28.698 [DEBUG] [Thread-118764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:04:28.713 [DEBUG] [Thread-118764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:04:28.714 [INFO] [Thread-118764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:04:28.721 [DEBUG] [Thread-118764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:04:28.721 [DEBUG] [Thread-118764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] client lang: <none>
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] server lang: <none>
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] kex follows: False
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] Compression: none
2025-12-03T15:04:28.722 [DEBUG] [Thread-118764] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:04:28.780 [DEBUG] [Thread-118764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:04:28.781 [DEBUG] [Thread-118764] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:04:28.781 [DEBUG] [Thread-118764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:04:28.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:04:28.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:04:28.836 [DEBUG] [Thread-118764] [transport.py] [_log()] userauth is OK
2025-12-03T15:04:28.836 [DEBUG] [Thread-118764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:04:28.837 [DEBUG] [Thread-118764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:04:28.837 [DEBUG] [Thread-118764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:04:28.837 [DEBUG] [Thread-118764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:04:28.856 [INFO] [Thread-118764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:04:28.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:04:28.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:04:29.706 [DEBUG] [Thread-118764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:04:29.706 [DEBUG] [Thread-118764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:04:29.754 [DEBUG] [Thread-118764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:04:29.754 [DEBUG] [Thread-118764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:04:29.764 [DEBUG] [Thread-118764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:04:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:04:29.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:04:29.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:04:29.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:04:29.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:04:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:04:29.801 [DEBUG] [Thread-118764] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:04:39.524 [DEBUG] [Thread-118766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:52.056 [DEBUG] [Thread-118767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:54.572 [DEBUG] [Thread-118768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:04:59.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:04:59.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:04:59.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:05:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 4, 36), 24.76, 19.04, 0.0, 14.82, 21.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:05:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:04:36
2025-12-03T15:05:00.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:05:00.766 [DEBUG] [Thread-118769] [transport.py] [_log()] starting thread (client mode): 0xa2761f00
2025-12-03T15:05:00.766 [DEBUG] [Thread-118769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:05:00.787 [DEBUG] [Thread-118769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:05:00.787 [INFO] [Thread-118769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:05:00.789 [DEBUG] [Thread-118769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:05:00.789 [DEBUG] [Thread-118769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:05:00.789 [DEBUG] [Thread-118769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:05:00.789 [DEBUG] [Thread-118769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] client lang: <none>
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] server lang: <none>
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] kex follows: False
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:05:00.790 [DEBUG] [Thread-118769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:05:00.791 [DEBUG] [Thread-118769] [transport.py] [_log()] Compression: none
2025-12-03T15:05:00.791 [DEBUG] [Thread-118769] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:05:00.804 [DEBUG] [Thread-118769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:05:00.804 [DEBUG] [Thread-118769] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:05:00.805 [DEBUG] [Thread-118769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:05:00.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:05:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:05:00.807 [DEBUG] [Thread-118769] [transport.py] [_log()] userauth is OK
2025-12-03T15:05:00.807 [DEBUG] [Thread-118769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:05:00.807 [DEBUG] [Thread-118769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:05:00.807 [DEBUG] [Thread-118769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:05:00.807 [DEBUG] [Thread-118769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:05:00.832 [INFO] [Thread-118769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:05:00.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:05:01.454 [DEBUG] [Thread-118769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:05:01.454 [DEBUG] [Thread-118769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:05:01.455 [DEBUG] [Thread-118769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:05:01.495 [DEBUG] [Thread-118769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:05:01.495 [DEBUG] [Thread-118769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:05:01.498 [DEBUG] [Thread-118769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:05:01.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:05:01.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:05:01.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:05:01.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:05:01.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:05:01.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:05:01.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:05:01.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.544840 -999.00  +22.40   9.32     23   +0.30 1 1 1 1 1   888    0 23.10 48.50 ----- 14.2 9.3 139.0 14.8 30.2 -29.8 29.7 -28.8 31.2 -28.8 32.2 -30.7
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.544840
2025-12-03T15:05:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:05:01.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:05:01.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:05:01.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:05:01.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:05:01.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:04:36', tmtdew=24.76, humidity=19.04, cloud=0.0, wind=14.82, temperature=21.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:04:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:05:01.523 [DEBUG] [Thread-118769] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:05:01.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:05:09.608 [DEBUG] [Thread-118772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:24.643 [DEBUG] [Thread-118773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:25.438 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:25.438 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:39.677 [DEBUG] [Thread-118774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:52.102 [DEBUG] [Thread-118775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:05:54.716 [DEBUG] [Thread-118776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:09.749 [DEBUG] [Thread-118777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:24.787 [DEBUG] [Thread-118778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:25.581 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:25.583 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:39.818 [DEBUG] [Thread-118779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:52.144 [DEBUG] [Thread-118780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:06:54.852 [DEBUG] [Thread-118781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:09.889 [DEBUG] [Thread-118782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:13.686 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T15:07:24.922 [DEBUG] [Thread-118783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:25.725 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:25.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:39.953 [DEBUG] [Thread-118784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:07:43.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:07:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:07:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 7, 16), 24.82, 18.44, 0.0, 9.92, 21.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:07:44.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:07:16
2025-12-03T15:07:44.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:07:44.660 [DEBUG] [Thread-118785] [transport.py] [_log()] starting thread (client mode): 0xa27617b0
2025-12-03T15:07:44.660 [DEBUG] [Thread-118785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:07:44.680 [DEBUG] [Thread-118785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:07:44.680 [INFO] [Thread-118785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:07:44.683 [DEBUG] [Thread-118785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] client lang: <none>
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] server lang: <none>
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] kex follows: False
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] Compression: none
2025-12-03T15:07:44.684 [DEBUG] [Thread-118785] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:07:44.702 [DEBUG] [Thread-118785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:07:44.702 [DEBUG] [Thread-118785] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:07:44.703 [DEBUG] [Thread-118785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:07:44.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:07:44.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:07:44.704 [DEBUG] [Thread-118785] [transport.py] [_log()] userauth is OK
2025-12-03T15:07:44.704 [DEBUG] [Thread-118785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:07:44.704 [DEBUG] [Thread-118785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:07:44.704 [DEBUG] [Thread-118785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:07:44.705 [DEBUG] [Thread-118785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:07:44.718 [INFO] [Thread-118785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:07:44.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:07:45.328 [DEBUG] [Thread-118785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:07:45.328 [DEBUG] [Thread-118785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:07:45.329 [DEBUG] [Thread-118785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:07:45.369 [DEBUG] [Thread-118785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:07:45.370 [DEBUG] [Thread-118785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:07:45.373 [DEBUG] [Thread-118785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:07:45.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:07:45.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:07:45.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:07:45.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:07:45.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:07:45.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:07:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:07:45.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:07:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:07:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.546924 -999.00  +22.60  13.47     22   +0.20 1 1 1 1 1   888    0 22.50 21.44 ----- 12.2 13.5 186.6 16.9 30.2 -30.8 29.7 -29.3 31.5 -28.2 32.1 -29.8
2025-12-03T15:07:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:07:45.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:07:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.546924
2025-12-03T15:07:45.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:07:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:07:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:07:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:07:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:07:45.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:07:16', tmtdew=24.82, humidity=18.44, cloud=0.0, wind=9.92, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:07:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:07:45.399 [DEBUG] [Thread-118785] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:07:45.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:07:45.501 [DEBUG] [Thread-118788] [transport.py] [_log()] starting thread (client mode): 0xa2746a70
2025-12-03T15:07:45.501 [DEBUG] [Thread-118788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:07:45.516 [DEBUG] [Thread-118788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:07:45.516 [INFO] [Thread-118788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:07:45.523 [DEBUG] [Thread-118788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:07:45.523 [DEBUG] [Thread-118788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] client lang: <none>
2025-12-03T15:07:45.524 [DEBUG] [Thread-118788] [transport.py] [_log()] server lang: <none>
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] kex follows: False
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] Compression: none
2025-12-03T15:07:45.525 [DEBUG] [Thread-118788] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:07:45.581 [DEBUG] [Thread-118788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:07:45.581 [DEBUG] [Thread-118788] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:07:45.582 [DEBUG] [Thread-118788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:07:45.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:07:45.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:07:45.637 [DEBUG] [Thread-118788] [transport.py] [_log()] userauth is OK
2025-12-03T15:07:45.637 [DEBUG] [Thread-118788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:07:45.637 [DEBUG] [Thread-118788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:07:45.637 [DEBUG] [Thread-118788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:07:45.637 [DEBUG] [Thread-118788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:07:45.656 [INFO] [Thread-118788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:07:45.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:07:45.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:07:46.455 [DEBUG] [Thread-118788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:07:46.455 [DEBUG] [Thread-118788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:07:46.503 [DEBUG] [Thread-118788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:07:46.503 [DEBUG] [Thread-118788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:07:46.512 [DEBUG] [Thread-118788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:07:46.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:07:46.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:07:46.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:07:46.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:07:46.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:07:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:07:46.550 [DEBUG] [Thread-118788] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:07:52.195 [DEBUG] [Thread-118790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:07:54.982 [DEBUG] [Thread-118791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:10.029 [DEBUG] [Thread-118792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:08:16.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:08:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:08:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 7, 49), 25.0, 18.29, 0.0, 10.96, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:08:17.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:07:49
2025-12-03T15:08:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:08:17.521 [DEBUG] [Thread-118793] [transport.py] [_log()] starting thread (client mode): 0xa2763ee0
2025-12-03T15:08:17.521 [DEBUG] [Thread-118793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:08:17.542 [DEBUG] [Thread-118793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:08:17.542 [INFO] [Thread-118793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:08:17.543 [DEBUG] [Thread-118793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:08:17.543 [DEBUG] [Thread-118793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:08:17.543 [DEBUG] [Thread-118793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:08:17.543 [DEBUG] [Thread-118793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] client lang: <none>
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] server lang: <none>
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] kex follows: False
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:08:17.544 [DEBUG] [Thread-118793] [transport.py] [_log()] Compression: none
2025-12-03T15:08:17.545 [DEBUG] [Thread-118793] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:08:17.557 [DEBUG] [Thread-118793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:08:17.558 [DEBUG] [Thread-118793] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:08:17.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:08:17.559 [DEBUG] [Thread-118793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:08:17.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:08:17.561 [DEBUG] [Thread-118793] [transport.py] [_log()] userauth is OK
2025-12-03T15:08:17.562 [DEBUG] [Thread-118793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:08:17.562 [DEBUG] [Thread-118793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:08:17.562 [DEBUG] [Thread-118793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:08:17.562 [DEBUG] [Thread-118793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:08:17.582 [INFO] [Thread-118793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:08:17.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:08:18.129 [DEBUG] [Thread-118793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:08:18.129 [DEBUG] [Thread-118793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:08:18.130 [DEBUG] [Thread-118793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:08:18.170 [DEBUG] [Thread-118793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:08:18.171 [DEBUG] [Thread-118793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:08:18.174 [DEBUG] [Thread-118793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:08:18.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:08:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:08:18.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:08:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:08:18.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:08:18.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:08:18.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:08:18.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.547271 -999.00  +22.50   8.10     22   +0.00 1 1 1 1 1   888    0 22.43 15.00 ----- 7.4 8.1 195.6 13.4 30.3 -30.3 29.7 -29.0 31.5 -27.9 32.2 -30.6
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.547271
2025-12-03T15:08:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:08:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:08:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:08:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:08:18.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:08:18.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:07:49', tmtdew=25.0, humidity=18.29, cloud=0.0, wind=10.96, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:08:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:08:18.204 [DEBUG] [Thread-118793] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:08:18.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:08:18.308 [DEBUG] [Thread-118796] [transport.py] [_log()] starting thread (client mode): 0xa517c3a0
2025-12-03T15:08:18.308 [DEBUG] [Thread-118796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:08:18.323 [DEBUG] [Thread-118796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:08:18.323 [INFO] [Thread-118796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:18.331 [DEBUG] [Thread-118796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] client lang: <none>
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] server lang: <none>
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] kex follows: False
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] Compression: none
2025-12-03T15:08:18.332 [DEBUG] [Thread-118796] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:08:18.389 [DEBUG] [Thread-118796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:08:18.389 [DEBUG] [Thread-118796] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:08:18.390 [DEBUG] [Thread-118796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:08:18.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:08:18.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:08:18.447 [DEBUG] [Thread-118796] [transport.py] [_log()] userauth is OK
2025-12-03T15:08:18.447 [DEBUG] [Thread-118796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:08:18.447 [DEBUG] [Thread-118796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:08:18.447 [DEBUG] [Thread-118796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:08:18.447 [DEBUG] [Thread-118796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:08:18.466 [INFO] [Thread-118796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:08:18.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:08:18.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:08:19.286 [DEBUG] [Thread-118796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:08:19.286 [DEBUG] [Thread-118796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:08:19.334 [DEBUG] [Thread-118796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:08:19.335 [DEBUG] [Thread-118796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:08:19.344 [DEBUG] [Thread-118796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:08:19.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:08:19.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:08:19.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:08:19.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:08:19.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:08:19.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:08:19.381 [DEBUG] [Thread-118796] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:08:25.063 [DEBUG] [Thread-118798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:25.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:25.868 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:40.122 [DEBUG] [Thread-118799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:08:49.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:08:49.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:08:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 8, 21), 24.94, 18.35, 0.0, 13.82, 21.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:08:50.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:08:21
2025-12-03T15:08:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:08:50.342 [DEBUG] [Thread-118800] [transport.py] [_log()] starting thread (client mode): 0xa2744460
2025-12-03T15:08:50.342 [DEBUG] [Thread-118800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:08:50.361 [DEBUG] [Thread-118800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:08:50.361 [INFO] [Thread-118800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] client lang: <none>
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] server lang: <none>
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] kex follows: False
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:08:50.364 [DEBUG] [Thread-118800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:08:50.365 [DEBUG] [Thread-118800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:08:50.365 [DEBUG] [Thread-118800] [transport.py] [_log()] Compression: none
2025-12-03T15:08:50.365 [DEBUG] [Thread-118800] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:08:50.381 [DEBUG] [Thread-118800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:08:50.382 [DEBUG] [Thread-118800] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:08:50.382 [DEBUG] [Thread-118800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:08:50.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:08:50.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:08:50.384 [DEBUG] [Thread-118800] [transport.py] [_log()] userauth is OK
2025-12-03T15:08:50.384 [DEBUG] [Thread-118800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:08:50.385 [DEBUG] [Thread-118800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:08:50.385 [DEBUG] [Thread-118800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:08:50.385 [DEBUG] [Thread-118800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:08:50.404 [INFO] [Thread-118800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:08:50.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:08:50.981 [DEBUG] [Thread-118800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:08:50.982 [DEBUG] [Thread-118800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:08:50.982 [DEBUG] [Thread-118800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:08:51.022 [DEBUG] [Thread-118800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:08:51.022 [DEBUG] [Thread-118800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:08:51.025 [DEBUG] [Thread-118800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:08:51.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:08:51.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:08:51.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:08:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:08:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:08:51.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:08:51.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:08:51.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:08:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:08:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.547618 -999.00  +22.70   3.69     22   +0.30 1 1 1 1 1   888    0 22.14 10.75 ----- 4.8 3.7 163.6 9.5 30.4 -29.6 29.8 -29.3 31.4 -28.1 32.4 -27.8
2025-12-03T15:08:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:08:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:08:51.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.547618
2025-12-03T15:08:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:08:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:08:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:08:51.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:08:51.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:08:51.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:08:21', tmtdew=24.94, humidity=18.35, cloud=0.0, wind=13.82, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:08:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:08:51.051 [DEBUG] [Thread-118800] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:08:51.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:08:51.147 [DEBUG] [Thread-118803] [transport.py] [_log()] starting thread (client mode): 0xa2752350
2025-12-03T15:08:51.147 [DEBUG] [Thread-118803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:08:51.162 [DEBUG] [Thread-118803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:08:51.162 [INFO] [Thread-118803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:08:51.170 [DEBUG] [Thread-118803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] client lang: <none>
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] server lang: <none>
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] kex follows: False
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:08:51.171 [DEBUG] [Thread-118803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:08:51.172 [DEBUG] [Thread-118803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:08:51.172 [DEBUG] [Thread-118803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:08:51.172 [DEBUG] [Thread-118803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:08:51.172 [DEBUG] [Thread-118803] [transport.py] [_log()] Compression: none
2025-12-03T15:08:51.172 [DEBUG] [Thread-118803] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:08:51.230 [DEBUG] [Thread-118803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:08:51.230 [DEBUG] [Thread-118803] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:08:51.231 [DEBUG] [Thread-118803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:08:51.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:08:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:08:51.289 [DEBUG] [Thread-118803] [transport.py] [_log()] userauth is OK
2025-12-03T15:08:51.289 [DEBUG] [Thread-118803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:08:51.289 [DEBUG] [Thread-118803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:08:51.289 [DEBUG] [Thread-118803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:08:51.289 [DEBUG] [Thread-118803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:08:51.311 [INFO] [Thread-118803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:08:51.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:08:51.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:08:52.113 [DEBUG] [Thread-118803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:08:52.114 [DEBUG] [Thread-118803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:08:52.162 [DEBUG] [Thread-118803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:08:52.163 [DEBUG] [Thread-118803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:08:52.172 [DEBUG] [Thread-118803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:08:52.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:08:52.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:08:52.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:08:52.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:08:52.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:08:52.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:08:52.208 [DEBUG] [Thread-118803] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:08:52.235 [DEBUG] [Thread-118805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:08:55.157 [DEBUG] [Thread-118806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:10.209 [DEBUG] [Thread-118807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:09:22.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:09:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:09:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 8, 53), 24.76, 18.87, 0.0, 11.06, 21.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:09:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:08:53
2025-12-03T15:09:23.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:09:23.187 [DEBUG] [Thread-118808] [transport.py] [_log()] starting thread (client mode): 0xa2762440
2025-12-03T15:09:23.188 [DEBUG] [Thread-118808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:09:23.208 [DEBUG] [Thread-118808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:09:23.208 [INFO] [Thread-118808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:09:23.211 [DEBUG] [Thread-118808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:09:23.211 [DEBUG] [Thread-118808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:09:23.211 [DEBUG] [Thread-118808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] client lang: <none>
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] server lang: <none>
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] kex follows: False
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:09:23.212 [DEBUG] [Thread-118808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:09:23.213 [DEBUG] [Thread-118808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:09:23.213 [DEBUG] [Thread-118808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:09:23.213 [DEBUG] [Thread-118808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:09:23.213 [DEBUG] [Thread-118808] [transport.py] [_log()] Compression: none
2025-12-03T15:09:23.213 [DEBUG] [Thread-118808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:09:23.221 [DEBUG] [Thread-118808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:09:23.222 [DEBUG] [Thread-118808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:09:23.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:09:23.223 [DEBUG] [Thread-118808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:09:23.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:09:23.225 [DEBUG] [Thread-118808] [transport.py] [_log()] userauth is OK
2025-12-03T15:09:23.231 [DEBUG] [Thread-118808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:09:23.231 [DEBUG] [Thread-118808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:09:23.231 [DEBUG] [Thread-118808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:09:23.231 [DEBUG] [Thread-118808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:09:23.254 [INFO] [Thread-118808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:09:23.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:09:23.869 [DEBUG] [Thread-118808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:09:23.869 [DEBUG] [Thread-118808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:09:23.869 [DEBUG] [Thread-118808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:09:23.910 [DEBUG] [Thread-118808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:09:23.911 [DEBUG] [Thread-118808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:09:23.914 [DEBUG] [Thread-118808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:09:23.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:09:23.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:09:23.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:09:23.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:09:23.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:09:23.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:09:23.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:09:23.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:09:23.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:09:23.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.547965 -999.00  +22.80  10.63     22   +0.00 1 1 1 1 1   888    0 22.56 6.91 ----- 10.1 10.6 183.0 13.2 30.4 -30.0 29.8 -35.3 31.6 -27.2 32.1 -30.3
2025-12-03T15:09:23.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:09:23.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:09:23.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.547965
2025-12-03T15:09:23.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:09:23.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:09:23.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:09:23.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:09:23.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:09:23.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:08:53', tmtdew=24.76, humidity=18.87, cloud=0.0, wind=11.06, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:09:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:09:23.941 [DEBUG] [Thread-118808] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:09:24.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:09:24.040 [DEBUG] [Thread-118811] [transport.py] [_log()] starting thread (client mode): 0xa27609d0
2025-12-03T15:09:24.040 [DEBUG] [Thread-118811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:09:24.057 [DEBUG] [Thread-118811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:09:24.057 [INFO] [Thread-118811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:09:24.064 [DEBUG] [Thread-118811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] client lang: <none>
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] server lang: <none>
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] kex follows: False
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:09:24.065 [DEBUG] [Thread-118811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:09:24.066 [DEBUG] [Thread-118811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:09:24.066 [DEBUG] [Thread-118811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:09:24.066 [DEBUG] [Thread-118811] [transport.py] [_log()] Compression: none
2025-12-03T15:09:24.066 [DEBUG] [Thread-118811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:09:24.125 [DEBUG] [Thread-118811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:09:24.125 [DEBUG] [Thread-118811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:09:24.126 [DEBUG] [Thread-118811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:09:24.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:09:24.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:09:24.181 [DEBUG] [Thread-118811] [transport.py] [_log()] userauth is OK
2025-12-03T15:09:24.181 [DEBUG] [Thread-118811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:09:24.181 [DEBUG] [Thread-118811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:09:24.182 [DEBUG] [Thread-118811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:09:24.182 [DEBUG] [Thread-118811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:09:24.200 [INFO] [Thread-118811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:09:24.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:09:24.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:09:25.031 [DEBUG] [Thread-118811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:09:25.031 [DEBUG] [Thread-118811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:09:25.079 [DEBUG] [Thread-118811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:09:25.079 [DEBUG] [Thread-118811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:09:25.089 [DEBUG] [Thread-118811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:09:25.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:09:25.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:09:25.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:09:25.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:09:25.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:09:25.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:09:25.125 [DEBUG] [Thread-118811] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:09:25.245 [DEBUG] [Thread-118813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:26.011 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:26.012 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:40.295 [DEBUG] [Thread-118814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:52.264 [DEBUG] [Thread-118815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:55.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:09:55.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:09:55.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:09:55.324 [DEBUG] [Thread-118816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:09:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 9, 25), 24.99, 18.59, 0.0, 10.57, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:09:55.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:09:25
2025-12-03T15:09:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:09:56.155 [DEBUG] [Thread-118817] [transport.py] [_log()] starting thread (client mode): 0xa517e140
2025-12-03T15:09:56.155 [DEBUG] [Thread-118817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:09:56.171 [DEBUG] [Thread-118817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:09:56.171 [INFO] [Thread-118817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] client lang: <none>
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] server lang: <none>
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] kex follows: False
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] Compression: none
2025-12-03T15:09:56.174 [DEBUG] [Thread-118817] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:09:56.190 [DEBUG] [Thread-118817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:09:56.190 [DEBUG] [Thread-118817] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:09:56.190 [DEBUG] [Thread-118817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:09:56.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:09:56.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:09:56.191 [DEBUG] [Thread-118817] [transport.py] [_log()] userauth is OK
2025-12-03T15:09:56.191 [DEBUG] [Thread-118817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:09:56.191 [DEBUG] [Thread-118817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:09:56.191 [DEBUG] [Thread-118817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:09:56.191 [DEBUG] [Thread-118817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:09:56.206 [INFO] [Thread-118817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:09:56.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:09:56.764 [DEBUG] [Thread-118817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:09:56.764 [DEBUG] [Thread-118817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:09:56.765 [DEBUG] [Thread-118817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:09:56.806 [DEBUG] [Thread-118817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:09:56.806 [DEBUG] [Thread-118817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:09:56.807 [DEBUG] [Thread-118817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:09:56.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:09:56.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:09:56.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:09:56.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:09:56.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:09:56.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:09:56.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.548313 -999.00  +22.70   9.01     22   +0.00 1 1 1 1 1   888    0 22.42 4.94 ----- 7.2 9.0 193.2 12.2 30.4 -29.2 29.7 -32.2 31.6 -26.2 32.4 -28.4
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.548313
2025-12-03T15:09:56.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:09:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:09:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:09:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:09:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:09:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:09:25', tmtdew=24.99, humidity=18.59, cloud=0.0, wind=10.57, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:09:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:09:56.824 [DEBUG] [Thread-118817] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:09:56.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:09:56.915 [DEBUG] [Thread-118820] [transport.py] [_log()] starting thread (client mode): 0xa2761f00
2025-12-03T15:09:56.915 [DEBUG] [Thread-118820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:09:56.930 [DEBUG] [Thread-118820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:09:56.930 [INFO] [Thread-118820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] client lang: <none>
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] server lang: <none>
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] kex follows: False
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] Compression: none
2025-12-03T15:09:56.938 [DEBUG] [Thread-118820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:09:56.995 [DEBUG] [Thread-118820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:09:56.995 [DEBUG] [Thread-118820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:09:56.995 [DEBUG] [Thread-118820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:09:56.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:09:56.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:09:57.052 [DEBUG] [Thread-118820] [transport.py] [_log()] userauth is OK
2025-12-03T15:09:57.053 [DEBUG] [Thread-118820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:09:57.053 [DEBUG] [Thread-118820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:09:57.053 [DEBUG] [Thread-118820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:09:57.053 [DEBUG] [Thread-118820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:09:57.066 [INFO] [Thread-118820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:09:57.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:09:57.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:09:57.876 [DEBUG] [Thread-118820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:09:57.876 [DEBUG] [Thread-118820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:09:57.925 [DEBUG] [Thread-118820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:09:57.925 [DEBUG] [Thread-118820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:09:57.933 [DEBUG] [Thread-118820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:09:57.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:09:57.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:09:57.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:09:57.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:09:57.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:09:57.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:09:57.965 [DEBUG] [Thread-118820] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:10:10.359 [DEBUG] [Thread-118822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:25.411 [DEBUG] [Thread-118823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:26.152 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:26.153 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:10:27.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:10:27.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:10:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 9, 57), 25.18, 18.09, 0.0, 11.06, 21.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:10:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:09:57
2025-12-03T15:10:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:10:28.971 [DEBUG] [Thread-118824] [transport.py] [_log()] starting thread (client mode): 0xa27c81f0
2025-12-03T15:10:28.971 [DEBUG] [Thread-118824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:10:28.988 [DEBUG] [Thread-118824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:10:28.988 [INFO] [Thread-118824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:10:28.990 [DEBUG] [Thread-118824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] client lang: <none>
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] server lang: <none>
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] kex follows: False
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] Compression: none
2025-12-03T15:10:28.991 [DEBUG] [Thread-118824] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:10:29.010 [DEBUG] [Thread-118824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:10:29.010 [DEBUG] [Thread-118824] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:10:29.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:10:29.012 [DEBUG] [Thread-118824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:10:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:10:29.014 [DEBUG] [Thread-118824] [transport.py] [_log()] userauth is OK
2025-12-03T15:10:29.014 [DEBUG] [Thread-118824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:10:29.015 [DEBUG] [Thread-118824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:10:29.015 [DEBUG] [Thread-118824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:10:29.015 [DEBUG] [Thread-118824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:10:29.041 [INFO] [Thread-118824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:10:29.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:10:29.606 [DEBUG] [Thread-118824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:10:29.606 [DEBUG] [Thread-118824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:10:29.606 [DEBUG] [Thread-118824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:10:29.648 [DEBUG] [Thread-118824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:10:29.648 [DEBUG] [Thread-118824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:10:29.650 [DEBUG] [Thread-118824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:10:29.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:10:29.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:10:29.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:10:29.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:10:29.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:10:29.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:10:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:10:29.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.548660 -999.00  +23.00   8.32     22   +0.40 1 1 1 1 1   888    0 22.15 4.63 ----- 4.9 8.3 197.4 11.7 30.4 -29.7 29.9 -30.3 31.6 -27.0 32.4 -28.4
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.548660
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:10:29.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:09:57', tmtdew=25.18, humidity=18.09, cloud=0.0, wind=11.06, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:10:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:10:29.667 [DEBUG] [Thread-118824] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:10:29.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:10:29.754 [DEBUG] [Thread-118827] [transport.py] [_log()] starting thread (client mode): 0xa517e140
2025-12-03T15:10:29.754 [DEBUG] [Thread-118827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:10:29.769 [DEBUG] [Thread-118827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:10:29.769 [INFO] [Thread-118827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:10:29.776 [DEBUG] [Thread-118827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] client lang: <none>
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] server lang: <none>
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] kex follows: False
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] Compression: none
2025-12-03T15:10:29.777 [DEBUG] [Thread-118827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:10:29.831 [DEBUG] [Thread-118827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:10:29.831 [DEBUG] [Thread-118827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:10:29.831 [DEBUG] [Thread-118827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:10:29.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:10:29.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:10:29.888 [DEBUG] [Thread-118827] [transport.py] [_log()] userauth is OK
2025-12-03T15:10:29.888 [DEBUG] [Thread-118827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:10:29.889 [DEBUG] [Thread-118827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:10:29.889 [DEBUG] [Thread-118827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:10:29.889 [DEBUG] [Thread-118827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:10:29.907 [INFO] [Thread-118827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:10:29.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:10:29.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:10:30.798 [DEBUG] [Thread-118827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:10:30.798 [DEBUG] [Thread-118827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:10:30.846 [DEBUG] [Thread-118827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:10:30.846 [DEBUG] [Thread-118827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:10:30.854 [DEBUG] [Thread-118827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:10:30.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:10:30.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:10:30.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:10:30.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:10:30.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:10:30.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:10:30.885 [DEBUG] [Thread-118827] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:10:40.447 [DEBUG] [Thread-118829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:52.306 [DEBUG] [Thread-118830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:10:55.497 [DEBUG] [Thread-118831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:11:00.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:11:00.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:11:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 10, 29), 25.26, 17.99, 0.0, 8.22, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:11:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:10:29
2025-12-03T15:11:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:11:01.928 [DEBUG] [Thread-118832] [transport.py] [_log()] starting thread (client mode): 0xa27cbfd0
2025-12-03T15:11:01.929 [DEBUG] [Thread-118832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:11:01.948 [DEBUG] [Thread-118832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:11:01.948 [INFO] [Thread-118832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] client lang: <none>
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] server lang: <none>
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] kex follows: False
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] Compression: none
2025-12-03T15:11:01.950 [DEBUG] [Thread-118832] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:11:01.959 [DEBUG] [Thread-118832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:11:01.959 [DEBUG] [Thread-118832] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:11:01.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:11:01.959 [DEBUG] [Thread-118832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:11:01.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:11:01.960 [DEBUG] [Thread-118832] [transport.py] [_log()] userauth is OK
2025-12-03T15:11:01.960 [DEBUG] [Thread-118832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:11:01.960 [DEBUG] [Thread-118832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:11:01.960 [DEBUG] [Thread-118832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:11:01.960 [DEBUG] [Thread-118832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:11:01.973 [INFO] [Thread-118832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:11:01.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:11:02.573 [DEBUG] [Thread-118832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:11:02.574 [DEBUG] [Thread-118832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:11:02.574 [DEBUG] [Thread-118832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:11:02.614 [DEBUG] [Thread-118832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:11:02.615 [DEBUG] [Thread-118832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:11:02.617 [DEBUG] [Thread-118832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:11:02.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:11:02.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:11:02.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:11:02.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:11:02.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:11:02.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:11:02.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.549007 -999.00  +23.10   8.73     21   +0.00 1 1 1 1 1   888    0 22.63 6.55 ----- 6.5 8.7 224.9 13.6 30.4 -30.0 29.8 -29.4 31.6 -28.2 32.4 -29.6
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.549007
2025-12-03T15:11:02.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:11:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:11:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:11:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:11:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:11:02.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:10:29', tmtdew=25.26, humidity=17.99, cloud=0.0, wind=8.22, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:10:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:11:02.636 [DEBUG] [Thread-118832] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:11:02.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:11:02.721 [DEBUG] [Thread-118835] [transport.py] [_log()] starting thread (client mode): 0xa277bd90
2025-12-03T15:11:02.722 [DEBUG] [Thread-118835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:11:02.737 [DEBUG] [Thread-118835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:11:02.737 [INFO] [Thread-118835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] client lang: <none>
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] server lang: <none>
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] kex follows: False
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] Compression: none
2025-12-03T15:11:02.746 [DEBUG] [Thread-118835] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:11:02.803 [DEBUG] [Thread-118835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:11:02.803 [DEBUG] [Thread-118835] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:11:02.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:11:02.803 [DEBUG] [Thread-118835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:11:02.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:11:02.860 [DEBUG] [Thread-118835] [transport.py] [_log()] userauth is OK
2025-12-03T15:11:02.860 [DEBUG] [Thread-118835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:11:02.860 [DEBUG] [Thread-118835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:11:02.860 [DEBUG] [Thread-118835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:11:02.860 [DEBUG] [Thread-118835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:11:02.875 [INFO] [Thread-118835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:11:02.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:11:02.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:11:03.761 [DEBUG] [Thread-118835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:11:03.761 [DEBUG] [Thread-118835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:11:03.809 [DEBUG] [Thread-118835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:11:03.809 [DEBUG] [Thread-118835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:11:03.819 [DEBUG] [Thread-118835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:11:03.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:11:03.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:11:03.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:11:03.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:11:03.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:11:03.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:11:03.855 [DEBUG] [Thread-118835] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:11:10.527 [DEBUG] [Thread-118837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:25.566 [DEBUG] [Thread-118838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:26.296 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:26.300 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:33.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:11:33.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:11:33.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:11:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 11, 1), 25.48, 17.86, 0.0, 12.44, 21.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:11:34.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:11:01
2025-12-03T15:11:34.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:11:34.878 [DEBUG] [Thread-118839] [transport.py] [_log()] starting thread (client mode): 0xa277aec0
2025-12-03T15:11:34.878 [DEBUG] [Thread-118839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:11:34.892 [DEBUG] [Thread-118839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:11:34.892 [INFO] [Thread-118839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] client lang: <none>
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] server lang: <none>
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] kex follows: False
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:11:34.894 [DEBUG] [Thread-118839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:11:34.895 [DEBUG] [Thread-118839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:11:34.895 [DEBUG] [Thread-118839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:11:34.895 [DEBUG] [Thread-118839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:11:34.895 [DEBUG] [Thread-118839] [transport.py] [_log()] Compression: none
2025-12-03T15:11:34.895 [DEBUG] [Thread-118839] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:11:34.906 [DEBUG] [Thread-118839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:11:34.906 [DEBUG] [Thread-118839] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:11:34.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:11:34.906 [DEBUG] [Thread-118839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:11:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:11:34.907 [DEBUG] [Thread-118839] [transport.py] [_log()] userauth is OK
2025-12-03T15:11:34.907 [DEBUG] [Thread-118839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:11:34.907 [DEBUG] [Thread-118839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:11:34.907 [DEBUG] [Thread-118839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:11:34.907 [DEBUG] [Thread-118839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:11:34.919 [INFO] [Thread-118839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:11:34.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:11:35.517 [DEBUG] [Thread-118839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:11:35.518 [DEBUG] [Thread-118839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:11:35.518 [DEBUG] [Thread-118839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:11:35.559 [DEBUG] [Thread-118839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:11:35.559 [DEBUG] [Thread-118839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:11:35.561 [DEBUG] [Thread-118839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:11:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:11:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:11:35.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:11:35.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:11:35.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:11:35.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:11:35.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.549354 -999.00  +23.10  10.27     21   +0.10 1 1 1 1 1   888    0 22.51 8.65 ----- 6.6 10.3 192.3 13.5 30.5 -30.4 29.9 -28.6 31.6 -26.7 32.3 -29.4
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:11:35.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.549354
2025-12-03T15:11:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:11:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:11:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:11:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:11:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:11:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:11:01', tmtdew=25.48, humidity=17.86, cloud=0.0, wind=12.44, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:11:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:11:35.585 [DEBUG] [Thread-118839] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:11:35.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:11:35.680 [DEBUG] [Thread-118842] [transport.py] [_log()] starting thread (client mode): 0xa2751db0
2025-12-03T15:11:35.680 [DEBUG] [Thread-118842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:11:35.695 [DEBUG] [Thread-118842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:11:35.695 [INFO] [Thread-118842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:11:35.702 [DEBUG] [Thread-118842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] client lang: <none>
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] server lang: <none>
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] kex follows: False
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] Compression: none
2025-12-03T15:11:35.703 [DEBUG] [Thread-118842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:11:35.761 [DEBUG] [Thread-118842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:11:35.762 [DEBUG] [Thread-118842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:11:35.762 [DEBUG] [Thread-118842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:11:35.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:11:35.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:11:35.819 [DEBUG] [Thread-118842] [transport.py] [_log()] userauth is OK
2025-12-03T15:11:35.819 [DEBUG] [Thread-118842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:11:35.819 [DEBUG] [Thread-118842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:11:35.819 [DEBUG] [Thread-118842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:11:35.819 [DEBUG] [Thread-118842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:11:35.839 [INFO] [Thread-118842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:11:35.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:11:35.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:11:36.640 [DEBUG] [Thread-118842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:11:36.641 [DEBUG] [Thread-118842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:11:36.688 [DEBUG] [Thread-118842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:11:36.689 [DEBUG] [Thread-118842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:11:36.698 [DEBUG] [Thread-118842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:11:36.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:11:36.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:11:36.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:11:36.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:11:36.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:11:36.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:11:36.735 [DEBUG] [Thread-118842] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:11:40.602 [DEBUG] [Thread-118844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:52.334 [DEBUG] [Thread-118845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:11:55.647 [DEBUG] [Thread-118846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:06.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:12:06.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:12:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:12:07.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 11, 33), 25.48, 17.83, 0.0, 8.7, 21.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:12:07.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:11:33
2025-12-03T15:12:07.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:12:07.736 [DEBUG] [Thread-118847] [transport.py] [_log()] starting thread (client mode): 0xa2779f90
2025-12-03T15:12:07.736 [DEBUG] [Thread-118847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:12:07.757 [DEBUG] [Thread-118847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:12:07.757 [INFO] [Thread-118847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:07.758 [DEBUG] [Thread-118847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] client lang: <none>
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] server lang: <none>
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] kex follows: False
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] Compression: none
2025-12-03T15:12:07.759 [DEBUG] [Thread-118847] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:12:07.773 [DEBUG] [Thread-118847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:12:07.774 [DEBUG] [Thread-118847] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:12:07.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:12:07.775 [DEBUG] [Thread-118847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:12:07.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:12:07.777 [DEBUG] [Thread-118847] [transport.py] [_log()] userauth is OK
2025-12-03T15:12:07.777 [DEBUG] [Thread-118847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:12:07.777 [DEBUG] [Thread-118847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:12:07.777 [DEBUG] [Thread-118847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:12:07.777 [DEBUG] [Thread-118847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:12:07.796 [INFO] [Thread-118847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:12:07.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:12:08.409 [DEBUG] [Thread-118847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:12:08.410 [DEBUG] [Thread-118847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:12:08.410 [DEBUG] [Thread-118847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:12:08.450 [DEBUG] [Thread-118847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:12:08.450 [DEBUG] [Thread-118847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:12:08.453 [DEBUG] [Thread-118847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:12:08.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:12:08.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:12:08.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:12:08.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:12:08.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:12:08.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:12:08.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:12:08.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.549702 -999.00  +23.10   7.13     22   +0.40 1 1 1 1 1   888    0 22.47 10.47 ----- 5.2 7.1 262.9 11.7 30.5 -29.7 29.7 -31.4 31.6 -27.9 32.4 -30.3
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.549702
2025-12-03T15:12:08.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:12:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:12:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:12:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:12:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:12:08.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:11:33', tmtdew=25.48, humidity=17.83, cloud=0.0, wind=8.7, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:11:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:12:08.477 [DEBUG] [Thread-118847] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:12:08.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:12:08.572 [DEBUG] [Thread-118850] [transport.py] [_log()] starting thread (client mode): 0xa277a7d0
2025-12-03T15:12:08.572 [DEBUG] [Thread-118850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:12:08.586 [DEBUG] [Thread-118850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:12:08.586 [INFO] [Thread-118850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:08.595 [DEBUG] [Thread-118850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] client lang: <none>
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] server lang: <none>
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] kex follows: False
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:12:08.596 [DEBUG] [Thread-118850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:12:08.597 [DEBUG] [Thread-118850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:12:08.597 [DEBUG] [Thread-118850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:12:08.597 [DEBUG] [Thread-118850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:12:08.597 [DEBUG] [Thread-118850] [transport.py] [_log()] Compression: none
2025-12-03T15:12:08.597 [DEBUG] [Thread-118850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:12:08.658 [DEBUG] [Thread-118850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:12:08.658 [DEBUG] [Thread-118850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:12:08.659 [DEBUG] [Thread-118850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:12:08.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:12:08.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:12:08.713 [DEBUG] [Thread-118850] [transport.py] [_log()] userauth is OK
2025-12-03T15:12:08.713 [DEBUG] [Thread-118850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:12:08.714 [DEBUG] [Thread-118850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:12:08.714 [DEBUG] [Thread-118850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:12:08.714 [DEBUG] [Thread-118850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:12:08.732 [INFO] [Thread-118850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:12:08.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:12:08.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:12:09.552 [DEBUG] [Thread-118850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:12:09.553 [DEBUG] [Thread-118850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:12:09.601 [DEBUG] [Thread-118850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:12:09.601 [DEBUG] [Thread-118850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:12:09.610 [DEBUG] [Thread-118850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:12:09.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:12:09.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:12:09.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:12:09.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:12:09.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:12:09.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:12:09.647 [DEBUG] [Thread-118850] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:12:10.685 [DEBUG] [Thread-118852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:25.736 [DEBUG] [Thread-118853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:26.444 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:26.445 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:39.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:12:39.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:12:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:12:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 12, 37), 25.12, 18.29, 0.0, 11.24, 21.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:12:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:12:37
2025-12-03T15:12:40.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:12:40.618 [DEBUG] [Thread-118854] [transport.py] [_log()] starting thread (client mode): 0xa2778a90
2025-12-03T15:12:40.618 [DEBUG] [Thread-118854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:12:40.638 [DEBUG] [Thread-118854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:12:40.639 [INFO] [Thread-118854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] client lang: <none>
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] server lang: <none>
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] kex follows: False
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:12:40.640 [DEBUG] [Thread-118854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:12:40.641 [DEBUG] [Thread-118854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:12:40.641 [DEBUG] [Thread-118854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:12:40.641 [DEBUG] [Thread-118854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:12:40.641 [DEBUG] [Thread-118854] [transport.py] [_log()] Compression: none
2025-12-03T15:12:40.641 [DEBUG] [Thread-118854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:12:40.650 [DEBUG] [Thread-118854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:12:40.650 [DEBUG] [Thread-118854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:12:40.651 [DEBUG] [Thread-118854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:12:40.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:12:40.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:12:40.658 [DEBUG] [Thread-118854] [transport.py] [_log()] userauth is OK
2025-12-03T15:12:40.658 [DEBUG] [Thread-118854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:12:40.658 [DEBUG] [Thread-118854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:12:40.659 [DEBUG] [Thread-118854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:12:40.659 [DEBUG] [Thread-118854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:12:40.672 [INFO] [Thread-118854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:12:40.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:12:40.768 [DEBUG] [Thread-118856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:41.231 [DEBUG] [Thread-118854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:12:41.232 [DEBUG] [Thread-118854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:12:41.232 [DEBUG] [Thread-118854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:12:41.272 [DEBUG] [Thread-118854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:12:41.272 [DEBUG] [Thread-118854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:12:41.275 [DEBUG] [Thread-118854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:12:41.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:12:41.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:12:41.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:12:41.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:12:41.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:12:41.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:12:41.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:12:41.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.550396 -999.00  +22.90   7.65     21   -0.10 1 1 1 1 1   888    0 22.86 17.13 ----- 9.1 7.7 162.0 12.1 30.6 -30.4 30.0 -29.4 31.8 -26.8 32.6 -29.9
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.550396
2025-12-03T15:12:41.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:12:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:12:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:12:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:12:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:12:41.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:12:37', tmtdew=25.12, humidity=18.29, cloud=0.0, wind=11.24, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:12:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:12:41.304 [DEBUG] [Thread-118854] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:12:41.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:12:41.399 [DEBUG] [Thread-118858] [transport.py] [_log()] starting thread (client mode): 0xa277b3a0
2025-12-03T15:12:41.399 [DEBUG] [Thread-118858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:12:41.413 [DEBUG] [Thread-118858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:12:41.414 [INFO] [Thread-118858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:12:41.421 [DEBUG] [Thread-118858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:12:41.421 [DEBUG] [Thread-118858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:12:41.421 [DEBUG] [Thread-118858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:12:41.421 [DEBUG] [Thread-118858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] client lang: <none>
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] server lang: <none>
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] kex follows: False
2025-12-03T15:12:41.422 [DEBUG] [Thread-118858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] Compression: none
2025-12-03T15:12:41.423 [DEBUG] [Thread-118858] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:12:41.486 [DEBUG] [Thread-118858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:12:41.486 [DEBUG] [Thread-118858] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:12:41.487 [DEBUG] [Thread-118858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:12:41.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:12:41.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:12:41.541 [DEBUG] [Thread-118858] [transport.py] [_log()] userauth is OK
2025-12-03T15:12:41.542 [DEBUG] [Thread-118858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:12:41.542 [DEBUG] [Thread-118858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:12:41.542 [DEBUG] [Thread-118858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:12:41.542 [DEBUG] [Thread-118858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:12:41.561 [INFO] [Thread-118858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:12:41.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:12:41.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:12:42.395 [DEBUG] [Thread-118858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:12:42.396 [DEBUG] [Thread-118858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:12:42.444 [DEBUG] [Thread-118858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:12:42.444 [DEBUG] [Thread-118858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:12:42.453 [DEBUG] [Thread-118858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:12:42.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:12:42.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:12:42.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:12:42.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:12:42.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:12:42.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:12:42.491 [DEBUG] [Thread-118858] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:12:52.369 [DEBUG] [Thread-118860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:12:55.807 [DEBUG] [Thread-118861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:10.855 [DEBUG] [Thread-118862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:12.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:13:12.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:13:12.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:13:13.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 13, 9), 25.39, 18.01, 0.0, 14.13, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:13:13.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:13:09
2025-12-03T15:13:13.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:13:13.451 [DEBUG] [Thread-118863] [transport.py] [_log()] starting thread (client mode): 0xa2752ef0
2025-12-03T15:13:13.451 [DEBUG] [Thread-118863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:13:13.471 [DEBUG] [Thread-118863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:13:13.472 [INFO] [Thread-118863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:13.475 [DEBUG] [Thread-118863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] client lang: <none>
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] server lang: <none>
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] kex follows: False
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] Compression: none
2025-12-03T15:13:13.476 [DEBUG] [Thread-118863] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:13:13.495 [DEBUG] [Thread-118863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:13:13.495 [DEBUG] [Thread-118863] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:13:13.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:13:13.496 [DEBUG] [Thread-118863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:13:13.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:13:13.498 [DEBUG] [Thread-118863] [transport.py] [_log()] userauth is OK
2025-12-03T15:13:13.498 [DEBUG] [Thread-118863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:13:13.499 [DEBUG] [Thread-118863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:13:13.499 [DEBUG] [Thread-118863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:13:13.499 [DEBUG] [Thread-118863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:13:13.520 [INFO] [Thread-118863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:13:13.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:13:14.142 [DEBUG] [Thread-118863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:13:14.142 [DEBUG] [Thread-118863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:13:14.142 [DEBUG] [Thread-118863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:13:14.183 [DEBUG] [Thread-118863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:13:14.183 [DEBUG] [Thread-118863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:13:14.186 [DEBUG] [Thread-118863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:13:14.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:13:14.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:13:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:13:14.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:13:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:13:14.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:13:14.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:13:14.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:13:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:13:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.550396 -999.00  +22.90   7.65     21   -0.10 1 1 1 1 1   888    0 22.86 17.13 ----- 9.1 7.7 162.0 12.1 30.6 -30.4 30.0 -29.4 31.8 -26.8 32.6 -29.9
2025-12-03T15:13:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:13:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:13:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.550396
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:13:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:13:09', tmtdew=25.39, humidity=18.01, cloud=0.0, wind=14.13, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:12:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:13:14.210 [DEBUG] [Thread-118863] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:13:14.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:13:14.304 [DEBUG] [Thread-118866] [transport.py] [_log()] starting thread (client mode): 0xa2779540
2025-12-03T15:13:14.305 [DEBUG] [Thread-118866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:13:14.318 [DEBUG] [Thread-118866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:13:14.319 [INFO] [Thread-118866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:13:14.328 [DEBUG] [Thread-118866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:13:14.328 [DEBUG] [Thread-118866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:13:14.329 [DEBUG] [Thread-118866] [transport.py] [_log()] client lang: <none>
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] server lang: <none>
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] kex follows: False
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:13:14.330 [DEBUG] [Thread-118866] [transport.py] [_log()] Compression: none
2025-12-03T15:13:14.331 [DEBUG] [Thread-118866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:13:14.386 [DEBUG] [Thread-118866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:13:14.386 [DEBUG] [Thread-118866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:13:14.387 [DEBUG] [Thread-118866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:13:14.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:13:14.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:13:14.441 [DEBUG] [Thread-118866] [transport.py] [_log()] userauth is OK
2025-12-03T15:13:14.442 [DEBUG] [Thread-118866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:13:14.442 [DEBUG] [Thread-118866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:13:14.442 [DEBUG] [Thread-118866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:13:14.442 [DEBUG] [Thread-118866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:13:14.461 [INFO] [Thread-118866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:13:14.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:13:14.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:13:15.270 [DEBUG] [Thread-118866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:13:15.270 [DEBUG] [Thread-118866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:13:15.318 [DEBUG] [Thread-118866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:13:15.318 [DEBUG] [Thread-118866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:13:15.327 [DEBUG] [Thread-118866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:13:15.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:13:15.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:13:15.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:13:15.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:13:15.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:13:15.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:13:15.363 [DEBUG] [Thread-118866] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:13:25.890 [DEBUG] [Thread-118868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:26.583 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:26.584 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:40.941 [DEBUG] [Thread-118869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:45.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:13:45.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:13:45.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:13:46.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 13, 41), 25.56, 17.74, 0.0, 6.72, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:13:46.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:13:41
2025-12-03T15:13:46.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:13:46.373 [DEBUG] [Thread-118870] [transport.py] [_log()] starting thread (client mode): 0xa2779ae0
2025-12-03T15:13:46.373 [DEBUG] [Thread-118870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:13:46.393 [DEBUG] [Thread-118870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:13:46.394 [INFO] [Thread-118870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] client lang: <none>
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] server lang: <none>
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] kex follows: False
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] Compression: none
2025-12-03T15:13:46.397 [DEBUG] [Thread-118870] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:13:46.405 [DEBUG] [Thread-118870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:13:46.405 [DEBUG] [Thread-118870] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:13:46.405 [DEBUG] [Thread-118870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:13:46.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:13:46.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:13:46.406 [DEBUG] [Thread-118870] [transport.py] [_log()] userauth is OK
2025-12-03T15:13:46.406 [DEBUG] [Thread-118870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:13:46.406 [DEBUG] [Thread-118870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:13:46.406 [DEBUG] [Thread-118870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:13:46.406 [DEBUG] [Thread-118870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:13:46.423 [INFO] [Thread-118870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:13:46.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:13:47.012 [DEBUG] [Thread-118870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:13:47.012 [DEBUG] [Thread-118870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:13:47.012 [DEBUG] [Thread-118870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:13:47.054 [DEBUG] [Thread-118870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:13:47.054 [DEBUG] [Thread-118870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:13:47.056 [DEBUG] [Thread-118870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:13:47.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:13:47.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:13:47.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:13:47.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:13:47.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:13:47.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:13:47.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.550743 -999.00  +23.00  11.40     21   -0.10 1 1 1 1 1   888    0 22.71 19.34 ----- 10.9 11.4 187.6 13.2 30.6 -30.5 30.1 -30.2 31.8 -28.7 32.6 -29.6
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.550743
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:13:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:13:47.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:13:41', tmtdew=25.56, humidity=17.74, cloud=0.0, wind=6.72, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:13:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:13:47.071 [DEBUG] [Thread-118870] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:13:47.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:13:47.156 [DEBUG] [Thread-118873] [transport.py] [_log()] starting thread (client mode): 0xa2778070
2025-12-03T15:13:47.156 [DEBUG] [Thread-118873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:13:47.171 [DEBUG] [Thread-118873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:13:47.171 [INFO] [Thread-118873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] client lang: <none>
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] server lang: <none>
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] kex follows: False
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] Compression: none
2025-12-03T15:13:47.178 [DEBUG] [Thread-118873] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:13:47.235 [DEBUG] [Thread-118873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:13:47.235 [DEBUG] [Thread-118873] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:13:47.235 [DEBUG] [Thread-118873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:13:47.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:13:47.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:13:47.292 [DEBUG] [Thread-118873] [transport.py] [_log()] userauth is OK
2025-12-03T15:13:47.292 [DEBUG] [Thread-118873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:13:47.292 [DEBUG] [Thread-118873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:13:47.293 [DEBUG] [Thread-118873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:13:47.293 [DEBUG] [Thread-118873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:13:47.310 [INFO] [Thread-118873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:13:47.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:13:47.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:13:48.166 [DEBUG] [Thread-118873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:13:48.166 [DEBUG] [Thread-118873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:13:48.213 [DEBUG] [Thread-118873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:13:48.213 [DEBUG] [Thread-118873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:13:48.222 [DEBUG] [Thread-118873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:13:48.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:13:48.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:13:48.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:13:48.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:13:48.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:13:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:13:48.253 [DEBUG] [Thread-118873] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:13:52.414 [DEBUG] [Thread-118875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:13:55.973 [DEBUG] [Thread-118876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:11.021 [DEBUG] [Thread-118877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:14:18.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:14:18.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:14:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 14, 13), 25.49, 17.81, 0.0, 6.49, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:14:18.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:14:13
2025-12-03T15:14:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:14:19.208 [DEBUG] [Thread-118878] [transport.py] [_log()] starting thread (client mode): 0xa27535e0
2025-12-03T15:14:19.209 [DEBUG] [Thread-118878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:14:19.227 [DEBUG] [Thread-118878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:14:19.227 [INFO] [Thread-118878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] client lang: <none>
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] server lang: <none>
2025-12-03T15:14:19.230 [DEBUG] [Thread-118878] [transport.py] [_log()] kex follows: False
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] Compression: none
2025-12-03T15:14:19.231 [DEBUG] [Thread-118878] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:14:19.248 [DEBUG] [Thread-118878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:14:19.248 [DEBUG] [Thread-118878] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:14:19.249 [DEBUG] [Thread-118878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:14:19.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:14:19.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:14:19.251 [DEBUG] [Thread-118878] [transport.py] [_log()] userauth is OK
2025-12-03T15:14:19.251 [DEBUG] [Thread-118878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:14:19.251 [DEBUG] [Thread-118878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:14:19.251 [DEBUG] [Thread-118878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:14:19.251 [DEBUG] [Thread-118878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:14:19.277 [INFO] [Thread-118878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:14:19.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:14:19.916 [DEBUG] [Thread-118878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:14:19.916 [DEBUG] [Thread-118878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:14:19.917 [DEBUG] [Thread-118878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:14:19.958 [DEBUG] [Thread-118878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:14:19.958 [DEBUG] [Thread-118878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:14:19.960 [DEBUG] [Thread-118878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:14:19.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:14:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:14:19.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:14:19.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:14:19.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:14:19.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:14:19.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:14:19.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:14:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:14:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.551090 -999.00  +22.80   8.06     21   -0.10 1 1 1 1 1   888    0 22.89 23.23 ----- 7.6 8.1 185.8 11.3 30.6 -30.4 29.9 -29.9 31.7 -27.7 32.5 -31.0
2025-12-03T15:14:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:14:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:14:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.551090
2025-12-03T15:14:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:14:19.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:14:19.987 [DEBUG] [Thread-118878] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:14:19.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:14:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:14:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:14:19.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:14:13', tmtdew=25.49, humidity=17.81, cloud=0.0, wind=6.49, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:13:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:14:20.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:14:20.090 [DEBUG] [Thread-118881] [transport.py] [_log()] starting thread (client mode): 0xa27519c0
2025-12-03T15:14:20.090 [DEBUG] [Thread-118881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:14:20.104 [DEBUG] [Thread-118881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:14:20.104 [INFO] [Thread-118881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:14:20.111 [DEBUG] [Thread-118881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] client lang: <none>
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] server lang: <none>
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] kex follows: False
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:14:20.112 [DEBUG] [Thread-118881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:14:20.113 [DEBUG] [Thread-118881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:14:20.113 [DEBUG] [Thread-118881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:14:20.113 [DEBUG] [Thread-118881] [transport.py] [_log()] Compression: none
2025-12-03T15:14:20.113 [DEBUG] [Thread-118881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:14:20.169 [DEBUG] [Thread-118881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:14:20.170 [DEBUG] [Thread-118881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:14:20.170 [DEBUG] [Thread-118881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:14:20.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:14:20.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:14:20.225 [DEBUG] [Thread-118881] [transport.py] [_log()] userauth is OK
2025-12-03T15:14:20.225 [DEBUG] [Thread-118881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:14:20.225 [DEBUG] [Thread-118881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:14:20.225 [DEBUG] [Thread-118881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:14:20.225 [DEBUG] [Thread-118881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:14:20.239 [INFO] [Thread-118881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:14:20.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:14:20.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:14:21.077 [DEBUG] [Thread-118881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:14:21.078 [DEBUG] [Thread-118881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:14:21.125 [DEBUG] [Thread-118881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:14:21.126 [DEBUG] [Thread-118881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:14:21.134 [DEBUG] [Thread-118881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:14:21.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:14:21.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:14:21.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:14:21.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:14:21.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:14:21.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:14:21.168 [DEBUG] [Thread-118881] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:14:26.055 [DEBUG] [Thread-118883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:26.727 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:26.728 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:41.107 [DEBUG] [Thread-118884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:51.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:14:51.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:14:51.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:14:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 14, 45), 25.36, 17.96, 0.0, 7.73, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:14:51.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:14:45
2025-12-03T15:14:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:14:52.110 [DEBUG] [Thread-118885] [transport.py] [_log()] starting thread (client mode): 0xa2750250
2025-12-03T15:14:52.110 [DEBUG] [Thread-118885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:14:52.130 [DEBUG] [Thread-118885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:14:52.130 [INFO] [Thread-118885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:14:52.133 [DEBUG] [Thread-118885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:14:52.133 [DEBUG] [Thread-118885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:14:52.133 [DEBUG] [Thread-118885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:14:52.133 [DEBUG] [Thread-118885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:52.133 [DEBUG] [Thread-118885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] client lang: <none>
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] server lang: <none>
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] kex follows: False
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] Compression: none
2025-12-03T15:14:52.134 [DEBUG] [Thread-118885] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:14:52.150 [DEBUG] [Thread-118885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:14:52.151 [DEBUG] [Thread-118885] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:14:52.151 [DEBUG] [Thread-118885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:14:52.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:14:52.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:14:52.154 [DEBUG] [Thread-118885] [transport.py] [_log()] userauth is OK
2025-12-03T15:14:52.154 [DEBUG] [Thread-118885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:14:52.154 [DEBUG] [Thread-118885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:14:52.154 [DEBUG] [Thread-118885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:14:52.154 [DEBUG] [Thread-118885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:14:52.179 [INFO] [Thread-118885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:14:52.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:14:52.460 [DEBUG] [Thread-118887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:14:52.748 [DEBUG] [Thread-118885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:14:52.748 [DEBUG] [Thread-118885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:14:52.749 [DEBUG] [Thread-118885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:14:52.789 [DEBUG] [Thread-118885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:14:52.790 [DEBUG] [Thread-118885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:14:52.793 [DEBUG] [Thread-118885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:14:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:14:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:14:52.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:14:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:14:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:14:52.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:14:52.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:14:52.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:14:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:14:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.551438 -999.00  +22.70   4.62     21   -0.20 1 1 1 1 1   888    0 23.00 28.00 ----- 4.4 4.6 159.2 6.7 30.7 -30.0 30.1 -28.6 31.8 -27.1 32.6 -29.1
2025-12-03T15:14:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:14:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:14:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.551438
2025-12-03T15:14:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:14:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:14:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:14:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:14:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:14:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:14:45', tmtdew=25.36, humidity=17.96, cloud=0.0, wind=7.73, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:14:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:14:52.819 [DEBUG] [Thread-118885] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:14:52.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:14:52.915 [DEBUG] [Thread-118889] [transport.py] [_log()] starting thread (client mode): 0xa2750f70
2025-12-03T15:14:52.915 [DEBUG] [Thread-118889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:14:52.930 [DEBUG] [Thread-118889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:14:52.930 [INFO] [Thread-118889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:14:52.938 [DEBUG] [Thread-118889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:52.939 [DEBUG] [Thread-118889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] client lang: <none>
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] server lang: <none>
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] kex follows: False
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:14:52.940 [DEBUG] [Thread-118889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:14:52.941 [DEBUG] [Thread-118889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:14:52.941 [DEBUG] [Thread-118889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:14:52.941 [DEBUG] [Thread-118889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:14:52.941 [DEBUG] [Thread-118889] [transport.py] [_log()] Compression: none
2025-12-03T15:14:52.941 [DEBUG] [Thread-118889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:14:52.998 [DEBUG] [Thread-118889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:14:52.999 [DEBUG] [Thread-118889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:14:53.000 [DEBUG] [Thread-118889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:14:53.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:14:53.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:14:53.057 [DEBUG] [Thread-118889] [transport.py] [_log()] userauth is OK
2025-12-03T15:14:53.057 [DEBUG] [Thread-118889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:14:53.058 [DEBUG] [Thread-118889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:14:53.058 [DEBUG] [Thread-118889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:14:53.058 [DEBUG] [Thread-118889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:14:53.086 [INFO] [Thread-118889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:14:53.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:14:53.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:14:53.900 [DEBUG] [Thread-118889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:14:53.900 [DEBUG] [Thread-118889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:14:53.947 [DEBUG] [Thread-118889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:14:53.948 [DEBUG] [Thread-118889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:14:53.956 [DEBUG] [Thread-118889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:14:53.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:14:53.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:14:53.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:14:53.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:14:53.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:14:53.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:14:53.990 [DEBUG] [Thread-118889] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:14:56.143 [DEBUG] [Thread-118891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:11.196 [DEBUG] [Thread-118892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:24.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:15:24.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:15:24.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:15:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 15, 17), 25.41, 17.89, 0.0, 7.25, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:15:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:15:17
2025-12-03T15:15:24.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:15:24.938 [DEBUG] [Thread-118893] [transport.py] [_log()] starting thread (client mode): 0xa2779480
2025-12-03T15:15:24.938 [DEBUG] [Thread-118893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:15:24.957 [DEBUG] [Thread-118893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:15:24.957 [INFO] [Thread-118893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] client lang: <none>
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] server lang: <none>
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] kex follows: False
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] Compression: none
2025-12-03T15:15:24.961 [DEBUG] [Thread-118893] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:15:24.977 [DEBUG] [Thread-118893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:15:24.977 [DEBUG] [Thread-118893] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:15:24.978 [DEBUG] [Thread-118893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:15:24.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:15:24.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:15:24.979 [DEBUG] [Thread-118893] [transport.py] [_log()] userauth is OK
2025-12-03T15:15:24.979 [DEBUG] [Thread-118893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:15:24.979 [DEBUG] [Thread-118893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:15:24.979 [DEBUG] [Thread-118893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:15:24.980 [DEBUG] [Thread-118893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:15:24.993 [INFO] [Thread-118893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:15:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:15:25.627 [DEBUG] [Thread-118893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:15:25.628 [DEBUG] [Thread-118893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:15:25.628 [DEBUG] [Thread-118893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:15:25.668 [DEBUG] [Thread-118893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:15:25.669 [DEBUG] [Thread-118893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:15:25.672 [DEBUG] [Thread-118893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:15:25.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:15:25.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:15:25.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:15:25.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:15:25.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:15:25.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:15:25.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:15:25.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:15:25.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:15:25.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.551785 -999.00  +22.80   7.17     21   +0.00 1 1 1 1 1   888    0 23.50 32.35 ----- 7.1 7.2 198.6 12.7 30.6 -30.7 30.0 -35.7 32.0 -28.6 32.8 -29.2
2025-12-03T15:15:25.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:15:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:15:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.551785
2025-12-03T15:15:25.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:15:25.699 [DEBUG] [Thread-118893] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:15:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:15:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:15:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:15:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:15:25.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:15:17', tmtdew=25.41, humidity=17.89, cloud=0.0, wind=7.25, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:14:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:15:25.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:15:25.794 [DEBUG] [Thread-118896] [transport.py] [_log()] starting thread (client mode): 0xa2778d90
2025-12-03T15:15:25.794 [DEBUG] [Thread-118896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:15:25.809 [DEBUG] [Thread-118896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:15:25.809 [INFO] [Thread-118896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:25.817 [DEBUG] [Thread-118896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] client lang: <none>
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] server lang: <none>
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] kex follows: False
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] Compression: none
2025-12-03T15:15:25.818 [DEBUG] [Thread-118896] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:15:25.886 [DEBUG] [Thread-118896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:15:25.887 [DEBUG] [Thread-118896] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:15:25.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:15:25.888 [DEBUG] [Thread-118896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:15:25.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:15:25.945 [DEBUG] [Thread-118896] [transport.py] [_log()] userauth is OK
2025-12-03T15:15:25.946 [DEBUG] [Thread-118896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:15:25.946 [DEBUG] [Thread-118896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:15:25.946 [DEBUG] [Thread-118896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:15:25.946 [DEBUG] [Thread-118896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:15:25.965 [INFO] [Thread-118896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:15:25.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:15:25.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:15:26.236 [DEBUG] [Thread-118898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:26.852 [DEBUG] [Thread-118896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:15:26.852 [DEBUG] [Thread-118896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:15:26.869 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:26.870 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:26.900 [DEBUG] [Thread-118896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:15:26.900 [DEBUG] [Thread-118896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:15:26.909 [DEBUG] [Thread-118896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:15:26.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:15:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:15:26.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:15:26.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:15:26.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:15:26.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:15:26.946 [DEBUG] [Thread-118896] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:15:41.285 [DEBUG] [Thread-118899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:52.512 [DEBUG] [Thread-118900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:56.319 [DEBUG] [Thread-118901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:15:56.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:15:56.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:15:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:15:57.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 15, 49), 25.42, 18.04, 0.0, 7.2, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:15:57.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:15:49
2025-12-03T15:15:57.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:15:57.876 [DEBUG] [Thread-118902] [transport.py] [_log()] starting thread (client mode): 0xa2778100
2025-12-03T15:15:57.876 [DEBUG] [Thread-118902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:15:57.896 [DEBUG] [Thread-118902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:15:57.896 [INFO] [Thread-118902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:15:57.899 [DEBUG] [Thread-118902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] client lang: <none>
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] server lang: <none>
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] kex follows: False
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] Compression: none
2025-12-03T15:15:57.900 [DEBUG] [Thread-118902] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:15:57.918 [DEBUG] [Thread-118902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:15:57.918 [DEBUG] [Thread-118902] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:15:57.919 [DEBUG] [Thread-118902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:15:57.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:15:57.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:15:57.921 [DEBUG] [Thread-118902] [transport.py] [_log()] userauth is OK
2025-12-03T15:15:57.921 [DEBUG] [Thread-118902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:15:57.921 [DEBUG] [Thread-118902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:15:57.921 [DEBUG] [Thread-118902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:15:57.921 [DEBUG] [Thread-118902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:15:57.947 [INFO] [Thread-118902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:15:57.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:15:58.583 [DEBUG] [Thread-118902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:15:58.583 [DEBUG] [Thread-118902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:15:58.583 [DEBUG] [Thread-118902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:15:58.624 [DEBUG] [Thread-118902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:15:58.624 [DEBUG] [Thread-118902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:15:58.628 [DEBUG] [Thread-118902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:15:58.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:15:58.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:15:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:15:58.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:15:58.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:15:58.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:15:58.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:15:58.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:15:58.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:15:58.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.552132 -999.00  +22.80   4.82     21   -0.10 1 1 1 1 1   888    0 23.65 34.30 ----- 5.0 4.8 263.7 8.1 30.7 -31.5 30.2 -29.0 -999.0 -999.0 32.6 -29.9
2025-12-03T15:15:58.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:15:58.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:15:58.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.552132
2025-12-03T15:15:58.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:15:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:15:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:15:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:15:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:15:58.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:15:49', tmtdew=25.42, humidity=18.04, cloud=0.0, wind=7.2, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:15:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:15:58.654 [DEBUG] [Thread-118902] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:15:58.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:15:58.749 [DEBUG] [Thread-118905] [transport.py] [_log()] starting thread (client mode): 0xa2762710
2025-12-03T15:15:58.750 [DEBUG] [Thread-118905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:15:58.765 [DEBUG] [Thread-118905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:15:58.765 [INFO] [Thread-118905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:15:58.772 [DEBUG] [Thread-118905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] client lang: <none>
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] server lang: <none>
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] kex follows: False
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] Compression: none
2025-12-03T15:15:58.773 [DEBUG] [Thread-118905] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:15:58.831 [DEBUG] [Thread-118905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:15:58.832 [DEBUG] [Thread-118905] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:15:58.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:15:58.833 [DEBUG] [Thread-118905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:15:58.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:15:58.889 [DEBUG] [Thread-118905] [transport.py] [_log()] userauth is OK
2025-12-03T15:15:58.890 [DEBUG] [Thread-118905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:15:58.890 [DEBUG] [Thread-118905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:15:58.890 [DEBUG] [Thread-118905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:15:58.890 [DEBUG] [Thread-118905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:15:58.909 [INFO] [Thread-118905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:15:58.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:15:58.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:15:59.782 [DEBUG] [Thread-118905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:15:59.782 [DEBUG] [Thread-118905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:15:59.830 [DEBUG] [Thread-118905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:15:59.830 [DEBUG] [Thread-118905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:15:59.840 [DEBUG] [Thread-118905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:15:59.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:15:59.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:15:59.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:15:59.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:15:59.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:15:59.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:15:59.877 [DEBUG] [Thread-118905] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:16:11.352 [DEBUG] [Thread-118907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:26.408 [DEBUG] [Thread-118908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:27.012 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:27.013 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:29.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:16:29.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:16:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:16:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 16, 21), 25.57, 17.87, 0.0, 6.34, 21.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:16:30.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:16:21
2025-12-03T15:16:30.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:16:30.817 [DEBUG] [Thread-118909] [transport.py] [_log()] starting thread (client mode): 0xa27630a0
2025-12-03T15:16:30.818 [DEBUG] [Thread-118909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:16:30.839 [DEBUG] [Thread-118909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:16:30.839 [INFO] [Thread-118909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] client lang: <none>
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] server lang: <none>
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] kex follows: False
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] Compression: none
2025-12-03T15:16:30.843 [DEBUG] [Thread-118909] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:16:30.861 [DEBUG] [Thread-118909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:16:30.862 [DEBUG] [Thread-118909] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:16:30.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:16:30.863 [DEBUG] [Thread-118909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:16:30.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:16:30.865 [DEBUG] [Thread-118909] [transport.py] [_log()] userauth is OK
2025-12-03T15:16:30.865 [DEBUG] [Thread-118909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:16:30.866 [DEBUG] [Thread-118909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:16:30.866 [DEBUG] [Thread-118909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:16:30.866 [DEBUG] [Thread-118909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:16:30.902 [INFO] [Thread-118909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:16:30.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:16:31.515 [DEBUG] [Thread-118909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:16:31.515 [DEBUG] [Thread-118909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:16:31.516 [DEBUG] [Thread-118909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:16:31.556 [DEBUG] [Thread-118909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:16:31.556 [DEBUG] [Thread-118909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:16:31.560 [DEBUG] [Thread-118909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:16:31.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:16:31.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:16:31.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:16:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:16:31.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:16:31.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:16:31.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:16:31.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.552479 -999.00  +22.50   5.41     21   -0.40 1 1 1 1 1   888    0 23.03 35.49 ----- 5.7 5.4 301.6 6.8 30.9 -29.5 30.4 -29.9 31.8 -28.1 32.7 -28.2
2025-12-03T15:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:16:31.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.552479
2025-12-03T15:16:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:16:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:16:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:16:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:16:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:16:31.586 [DEBUG] [Thread-118909] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:16:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:16:21', tmtdew=25.57, humidity=17.87, cloud=0.0, wind=6.34, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:15:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:16:31.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:16:31.681 [DEBUG] [Thread-118912] [transport.py] [_log()] starting thread (client mode): 0xa2752530
2025-12-03T15:16:31.681 [DEBUG] [Thread-118912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:16:31.696 [DEBUG] [Thread-118912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:16:31.697 [INFO] [Thread-118912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:16:31.704 [DEBUG] [Thread-118912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:16:31.705 [DEBUG] [Thread-118912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] client lang: <none>
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] server lang: <none>
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] kex follows: False
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:16:31.706 [DEBUG] [Thread-118912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:16:31.707 [DEBUG] [Thread-118912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:16:31.707 [DEBUG] [Thread-118912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:16:31.707 [DEBUG] [Thread-118912] [transport.py] [_log()] Compression: none
2025-12-03T15:16:31.707 [DEBUG] [Thread-118912] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:16:31.766 [DEBUG] [Thread-118912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:16:31.766 [DEBUG] [Thread-118912] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:16:31.767 [DEBUG] [Thread-118912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:16:31.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:16:31.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:16:31.821 [DEBUG] [Thread-118912] [transport.py] [_log()] userauth is OK
2025-12-03T15:16:31.821 [DEBUG] [Thread-118912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:16:31.822 [DEBUG] [Thread-118912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:16:31.822 [DEBUG] [Thread-118912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:16:31.822 [DEBUG] [Thread-118912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:16:31.842 [INFO] [Thread-118912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:16:31.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:16:31.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:16:32.674 [DEBUG] [Thread-118912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:16:32.675 [DEBUG] [Thread-118912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:16:32.723 [DEBUG] [Thread-118912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:16:32.724 [DEBUG] [Thread-118912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:16:32.732 [DEBUG] [Thread-118912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:16:32.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:16:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:16:32.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:16:32.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:16:32.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:16:32.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:16:32.770 [DEBUG] [Thread-118912] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:16:41.443 [DEBUG] [Thread-118914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:52.550 [DEBUG] [Thread-118915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:16:56.494 [DEBUG] [Thread-118916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:02.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:17:02.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:17:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:17:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 16, 53), 25.8, 17.46, 0.0, 10.45, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:17:03.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:16:53
2025-12-03T15:17:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:17:03.742 [DEBUG] [Thread-118917] [transport.py] [_log()] starting thread (client mode): 0xa27cb8b0
2025-12-03T15:17:03.742 [DEBUG] [Thread-118917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:17:03.762 [DEBUG] [Thread-118917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:17:03.762 [INFO] [Thread-118917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] client lang: <none>
2025-12-03T15:17:03.765 [DEBUG] [Thread-118917] [transport.py] [_log()] server lang: <none>
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] kex follows: False
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] Compression: none
2025-12-03T15:17:03.766 [DEBUG] [Thread-118917] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:17:03.781 [DEBUG] [Thread-118917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:17:03.781 [DEBUG] [Thread-118917] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:17:03.781 [DEBUG] [Thread-118917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:17:03.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:17:03.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:17:03.783 [DEBUG] [Thread-118917] [transport.py] [_log()] userauth is OK
2025-12-03T15:17:03.783 [DEBUG] [Thread-118917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:17:03.783 [DEBUG] [Thread-118917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:17:03.783 [DEBUG] [Thread-118917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:17:03.783 [DEBUG] [Thread-118917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:17:03.800 [INFO] [Thread-118917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:17:03.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:17:04.431 [DEBUG] [Thread-118917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:17:04.431 [DEBUG] [Thread-118917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:17:04.431 [DEBUG] [Thread-118917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:17:04.472 [DEBUG] [Thread-118917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:17:04.472 [DEBUG] [Thread-118917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:17:04.475 [DEBUG] [Thread-118917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:17:04.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:17:04.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:17:04.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:17:04.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:17:04.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:17:04.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:17:04.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:17:04.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:17:04.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:17:04.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.552827 -999.00  +22.40   4.07     22   -0.10 1 1 1 1 1   888    0 23.53 38.33 ----- 4.1 4.1 271.1 6.2 30.9 -31.0 30.6 -29.0 32.0 -26.7 32.9 -29.1
2025-12-03T15:17:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:17:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:17:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.552827
2025-12-03T15:17:04.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:17:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:17:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:17:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:17:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:17:04.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:16:53', tmtdew=25.8, humidity=17.46, cloud=0.0, wind=10.45, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:16:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:17:04.503 [DEBUG] [Thread-118917] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:17:04.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:17:04.599 [DEBUG] [Thread-118920] [transport.py] [_log()] starting thread (client mode): 0xa27b5b70
2025-12-03T15:17:04.599 [DEBUG] [Thread-118920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:17:04.614 [DEBUG] [Thread-118920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:17:04.614 [INFO] [Thread-118920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:17:04.621 [DEBUG] [Thread-118920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] client lang: <none>
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] server lang: <none>
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] kex follows: False
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] Compression: none
2025-12-03T15:17:04.622 [DEBUG] [Thread-118920] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:17:04.685 [DEBUG] [Thread-118920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:17:04.686 [DEBUG] [Thread-118920] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:17:04.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:17:04.687 [DEBUG] [Thread-118920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:17:04.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:17:04.741 [DEBUG] [Thread-118920] [transport.py] [_log()] userauth is OK
2025-12-03T15:17:04.741 [DEBUG] [Thread-118920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:17:04.741 [DEBUG] [Thread-118920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:17:04.742 [DEBUG] [Thread-118920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:17:04.742 [DEBUG] [Thread-118920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:17:04.760 [INFO] [Thread-118920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:17:04.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:17:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:17:05.614 [DEBUG] [Thread-118920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:17:05.614 [DEBUG] [Thread-118920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:17:05.665 [DEBUG] [Thread-118920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:17:05.666 [DEBUG] [Thread-118920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:17:05.675 [DEBUG] [Thread-118920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:17:05.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:17:05.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:17:05.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:17:05.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:17:05.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:17:05.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:17:05.711 [DEBUG] [Thread-118920] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:17:11.528 [DEBUG] [Thread-118922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:26.577 [DEBUG] [Thread-118923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:27.158 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:27.160 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:35.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:17:35.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:17:35.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:17:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 17, 25), 25.95, 17.29, 0.0, 8.75, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:17:36.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:17:25
2025-12-03T15:17:36.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:17:36.647 [DEBUG] [Thread-118924] [transport.py] [_log()] starting thread (client mode): 0xa519ac20
2025-12-03T15:17:36.647 [DEBUG] [Thread-118924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:17:36.667 [DEBUG] [Thread-118924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:17:36.667 [INFO] [Thread-118924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] client lang: <none>
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] server lang: <none>
2025-12-03T15:17:36.671 [DEBUG] [Thread-118924] [transport.py] [_log()] kex follows: False
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] Compression: none
2025-12-03T15:17:36.672 [DEBUG] [Thread-118924] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:17:36.691 [DEBUG] [Thread-118924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:17:36.692 [DEBUG] [Thread-118924] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:17:36.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:17:36.693 [DEBUG] [Thread-118924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:17:36.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:17:36.736 [DEBUG] [Thread-118924] [transport.py] [_log()] userauth is OK
2025-12-03T15:17:36.737 [DEBUG] [Thread-118924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:17:36.737 [DEBUG] [Thread-118924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:17:36.737 [DEBUG] [Thread-118924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:17:36.737 [DEBUG] [Thread-118924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:17:36.774 [INFO] [Thread-118924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:17:36.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:17:37.415 [DEBUG] [Thread-118924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:17:37.415 [DEBUG] [Thread-118924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:17:37.415 [DEBUG] [Thread-118924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:17:37.456 [DEBUG] [Thread-118924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:17:37.456 [DEBUG] [Thread-118924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:17:37.458 [DEBUG] [Thread-118924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:17:37.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:17:37.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:17:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:17:37.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:17:37.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:17:37.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:17:37.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.553174 -999.00  +22.40  11.55     22   +0.00 1 1 1 1 1   888    0 23.16 37.76 ----- 10.7 11.6 266.2 14.0 30.9 -30.5 30.7 -29.3 32.0 -27.5 32.7 -29.9
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.553174
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:17:37.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:17:25', tmtdew=25.95, humidity=17.29, cloud=0.0, wind=8.75, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:16:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:17:37.479 [DEBUG] [Thread-118924] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:17:37.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:17:37.565 [DEBUG] [Thread-118927] [transport.py] [_log()] starting thread (client mode): 0xa2779090
2025-12-03T15:17:37.565 [DEBUG] [Thread-118927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:17:37.579 [DEBUG] [Thread-118927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:17:37.579 [INFO] [Thread-118927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] client lang: <none>
2025-12-03T15:17:37.587 [DEBUG] [Thread-118927] [transport.py] [_log()] server lang: <none>
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] kex follows: False
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] Compression: none
2025-12-03T15:17:37.588 [DEBUG] [Thread-118927] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:17:37.648 [DEBUG] [Thread-118927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:17:37.648 [DEBUG] [Thread-118927] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:17:37.648 [DEBUG] [Thread-118927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:17:37.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:17:37.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:17:37.710 [DEBUG] [Thread-118927] [transport.py] [_log()] userauth is OK
2025-12-03T15:17:37.710 [DEBUG] [Thread-118927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:17:37.710 [DEBUG] [Thread-118927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:17:37.710 [DEBUG] [Thread-118927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:17:37.710 [DEBUG] [Thread-118927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:17:37.727 [INFO] [Thread-118927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:17:37.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:17:37.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:17:38.533 [DEBUG] [Thread-118927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:17:38.533 [DEBUG] [Thread-118927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:17:38.581 [DEBUG] [Thread-118927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:17:38.581 [DEBUG] [Thread-118927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:17:38.589 [DEBUG] [Thread-118927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:17:38.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:17:38.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:17:38.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:17:38.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:17:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:17:38.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:17:38.621 [DEBUG] [Thread-118927] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:17:41.606 [DEBUG] [Thread-118929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:52.597 [DEBUG] [Thread-118930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:17:56.649 [DEBUG] [Thread-118931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:08.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:18:08.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:18:08.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:18:09.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 17, 57), 26.0, 17.28, 0.0, 6.95, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:18:09.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:17:57
2025-12-03T15:18:09.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:18:09.573 [DEBUG] [Thread-118932] [transport.py] [_log()] starting thread (client mode): 0xa27c8e20
2025-12-03T15:18:09.573 [DEBUG] [Thread-118932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:18:09.593 [DEBUG] [Thread-118932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:18:09.594 [INFO] [Thread-118932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:18:09.597 [DEBUG] [Thread-118932] [transport.py] [_log()] client lang: <none>
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] server lang: <none>
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] kex follows: False
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] Compression: none
2025-12-03T15:18:09.598 [DEBUG] [Thread-118932] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:18:09.617 [DEBUG] [Thread-118932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:18:09.617 [DEBUG] [Thread-118932] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:18:09.618 [DEBUG] [Thread-118932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:18:09.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:18:09.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:18:09.620 [DEBUG] [Thread-118932] [transport.py] [_log()] userauth is OK
2025-12-03T15:18:09.620 [DEBUG] [Thread-118932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:18:09.620 [DEBUG] [Thread-118932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:18:09.620 [DEBUG] [Thread-118932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:18:09.620 [DEBUG] [Thread-118932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:18:09.638 [INFO] [Thread-118932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:18:09.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:18:10.292 [DEBUG] [Thread-118932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:18:10.292 [DEBUG] [Thread-118932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:18:10.293 [DEBUG] [Thread-118932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:18:10.333 [DEBUG] [Thread-118932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:18:10.333 [DEBUG] [Thread-118932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:18:10.336 [DEBUG] [Thread-118932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:18:10.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:18:10.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:18:10.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:18:10.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:18:10.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:18:10.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:18:10.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:18:10.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.553521 -999.00  +22.60   6.55     22   +0.10 1 1 1 1 1   888    0 23.31 36.05 ----- 8.8 6.5 268.8 10.5 30.9 -33.0 30.6 -29.5 31.6 -29.8 32.5 -30.9
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.553521
2025-12-03T15:18:10.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:18:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:18:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:18:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:18:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:18:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:17:57', tmtdew=26.0, humidity=17.28, cloud=0.0, wind=6.95, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:17:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:18:10.363 [DEBUG] [Thread-118932] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:18:10.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:18:10.463 [DEBUG] [Thread-118935] [transport.py] [_log()] starting thread (client mode): 0xa2779e40
2025-12-03T15:18:10.463 [DEBUG] [Thread-118935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:18:10.478 [DEBUG] [Thread-118935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:18:10.478 [INFO] [Thread-118935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] client lang: <none>
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] server lang: <none>
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] kex follows: False
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:18:10.486 [DEBUG] [Thread-118935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:18:10.487 [DEBUG] [Thread-118935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:18:10.487 [DEBUG] [Thread-118935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:18:10.487 [DEBUG] [Thread-118935] [transport.py] [_log()] Compression: none
2025-12-03T15:18:10.487 [DEBUG] [Thread-118935] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:18:10.547 [DEBUG] [Thread-118935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:18:10.548 [DEBUG] [Thread-118935] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:18:10.548 [DEBUG] [Thread-118935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:18:10.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:18:10.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:18:10.611 [DEBUG] [Thread-118935] [transport.py] [_log()] userauth is OK
2025-12-03T15:18:10.611 [DEBUG] [Thread-118935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:18:10.611 [DEBUG] [Thread-118935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:18:10.611 [DEBUG] [Thread-118935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:18:10.611 [DEBUG] [Thread-118935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:18:10.630 [INFO] [Thread-118935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:18:10.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:18:10.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:18:11.445 [DEBUG] [Thread-118935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:18:11.445 [DEBUG] [Thread-118935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:18:11.496 [DEBUG] [Thread-118935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:18:11.496 [DEBUG] [Thread-118935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:18:11.505 [DEBUG] [Thread-118935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:18:11.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:18:11.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:18:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:18:11.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:18:11.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:18:11.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:18:11.544 [DEBUG] [Thread-118935] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:18:11.685 [DEBUG] [Thread-118937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:26.731 [DEBUG] [Thread-118938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:27.304 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:27.305 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:18:41.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:18:41.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:18:41.770 [DEBUG] [Thread-118939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 18, 29), 25.89, 17.42, 0.0, 7.39, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:18:42.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:18:29
2025-12-03T15:18:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:18:42.508 [DEBUG] [Thread-118940] [transport.py] [_log()] starting thread (client mode): 0xa27b4610
2025-12-03T15:18:42.508 [DEBUG] [Thread-118940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:18:42.529 [DEBUG] [Thread-118940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:18:42.529 [INFO] [Thread-118940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] client lang: <none>
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] server lang: <none>
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] kex follows: False
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:18:42.532 [DEBUG] [Thread-118940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:18:42.533 [DEBUG] [Thread-118940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:18:42.533 [DEBUG] [Thread-118940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:18:42.533 [DEBUG] [Thread-118940] [transport.py] [_log()] Compression: none
2025-12-03T15:18:42.533 [DEBUG] [Thread-118940] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:18:42.550 [DEBUG] [Thread-118940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:18:42.551 [DEBUG] [Thread-118940] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:18:42.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:18:42.552 [DEBUG] [Thread-118940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:18:42.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:18:42.554 [DEBUG] [Thread-118940] [transport.py] [_log()] userauth is OK
2025-12-03T15:18:42.554 [DEBUG] [Thread-118940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:18:42.555 [DEBUG] [Thread-118940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:18:42.555 [DEBUG] [Thread-118940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:18:42.555 [DEBUG] [Thread-118940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:18:42.579 [INFO] [Thread-118940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:18:42.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:18:43.243 [DEBUG] [Thread-118940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:18:43.243 [DEBUG] [Thread-118940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:18:43.243 [DEBUG] [Thread-118940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:18:43.284 [DEBUG] [Thread-118940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:18:43.284 [DEBUG] [Thread-118940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:18:43.288 [DEBUG] [Thread-118940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:18:43.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:18:43.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:18:43.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:18:43.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:18:43.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:18:43.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:18:43.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:18:43.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.554215 -999.00  +21.60  10.56     22   -0.60 1 1 1 1 1   888    0 23.68 43.93 ----- 11.6 10.6 266.0 18.7 30.4 -32.5 30.4 -30.4 31.2 -29.7 31.8 -34.2
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.554215
2025-12-03T15:18:43.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:18:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:18:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:18:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:18:43.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:18:43.317 [DEBUG] [Thread-118940] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:18:43.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:18:29', tmtdew=25.89, humidity=17.42, cloud=0.0, wind=7.39, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:18:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:18:43.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:18:43.413 [DEBUG] [Thread-118943] [transport.py] [_log()] starting thread (client mode): 0xa2751510
2025-12-03T15:18:43.413 [DEBUG] [Thread-118943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:18:43.432 [DEBUG] [Thread-118943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:18:43.432 [INFO] [Thread-118943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] client lang: <none>
2025-12-03T15:18:43.440 [DEBUG] [Thread-118943] [transport.py] [_log()] server lang: <none>
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] kex follows: False
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] Compression: none
2025-12-03T15:18:43.441 [DEBUG] [Thread-118943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:18:43.497 [DEBUG] [Thread-118943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:18:43.498 [DEBUG] [Thread-118943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:18:43.498 [DEBUG] [Thread-118943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:18:43.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:18:43.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:18:43.553 [DEBUG] [Thread-118943] [transport.py] [_log()] userauth is OK
2025-12-03T15:18:43.554 [DEBUG] [Thread-118943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:18:43.554 [DEBUG] [Thread-118943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:18:43.554 [DEBUG] [Thread-118943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:18:43.554 [DEBUG] [Thread-118943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:18:43.573 [INFO] [Thread-118943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:18:43.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:18:43.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:18:44.377 [DEBUG] [Thread-118943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:18:44.377 [DEBUG] [Thread-118943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:18:44.425 [DEBUG] [Thread-118943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:18:44.425 [DEBUG] [Thread-118943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:18:44.434 [DEBUG] [Thread-118943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:18:44.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:18:44.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:18:44.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:18:44.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:18:44.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:18:44.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:18:44.471 [DEBUG] [Thread-118943] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:18:52.648 [DEBUG] [Thread-118945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:18:56.798 [DEBUG] [Thread-118946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:11.833 [DEBUG] [Thread-118947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:14.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:19:14.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:19:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:19:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 19, 1), 25.82, 17.49, 0.0, 5.37, 21.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:19:15.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:19:01
2025-12-03T15:19:15.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:19:15.431 [DEBUG] [Thread-118948] [transport.py] [_log()] starting thread (client mode): 0xa519aef0
2025-12-03T15:19:15.431 [DEBUG] [Thread-118948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:19:15.450 [DEBUG] [Thread-118948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:19:15.451 [INFO] [Thread-118948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:19:15.454 [DEBUG] [Thread-118948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:19:15.454 [DEBUG] [Thread-118948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] client lang: <none>
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] server lang: <none>
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] kex follows: False
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] Compression: none
2025-12-03T15:19:15.455 [DEBUG] [Thread-118948] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:19:15.468 [DEBUG] [Thread-118948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:19:15.468 [DEBUG] [Thread-118948] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:19:15.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:19:15.470 [DEBUG] [Thread-118948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:19:15.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:19:15.512 [DEBUG] [Thread-118948] [transport.py] [_log()] userauth is OK
2025-12-03T15:19:15.512 [DEBUG] [Thread-118948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:19:15.513 [DEBUG] [Thread-118948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:19:15.513 [DEBUG] [Thread-118948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:19:15.513 [DEBUG] [Thread-118948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:19:15.528 [INFO] [Thread-118948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:19:15.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:19:16.169 [DEBUG] [Thread-118948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:19:16.169 [DEBUG] [Thread-118948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:19:16.170 [DEBUG] [Thread-118948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:19:16.210 [DEBUG] [Thread-118948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:19:16.210 [DEBUG] [Thread-118948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:19:16.214 [DEBUG] [Thread-118948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:19:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:19:16.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:19:16.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:19:16.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:19:16.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:19:16.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:19:16.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:19:16.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:19:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:19:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.554563 -999.00  +21.40   7.60     23   -0.40 1 1 1 1 1   888    0 23.70 43.44 ----- 8.3 7.6 281.0 11.8 30.3 -33.3 30.3 -30.3 30.8 -29.0 31.5 -30.6
2025-12-03T15:19:16.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:19:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:19:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.554563
2025-12-03T15:19:16.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:19:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:19:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:19:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:19:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:19:16.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:19:01', tmtdew=25.82, humidity=17.49, cloud=0.0, wind=5.37, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:18:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:19:16.241 [DEBUG] [Thread-118948] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:19:16.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:19:16.347 [DEBUG] [Thread-118951] [transport.py] [_log()] starting thread (client mode): 0xa2763520
2025-12-03T15:19:16.347 [DEBUG] [Thread-118951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:19:16.362 [DEBUG] [Thread-118951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:19:16.362 [INFO] [Thread-118951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:19:16.370 [DEBUG] [Thread-118951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:19:16.370 [DEBUG] [Thread-118951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:19:16.370 [DEBUG] [Thread-118951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:19:16.370 [DEBUG] [Thread-118951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:16.370 [DEBUG] [Thread-118951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] client lang: <none>
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] server lang: <none>
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] kex follows: False
2025-12-03T15:19:16.371 [DEBUG] [Thread-118951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] Compression: none
2025-12-03T15:19:16.372 [DEBUG] [Thread-118951] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:19:16.430 [DEBUG] [Thread-118951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:19:16.430 [DEBUG] [Thread-118951] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:19:16.431 [DEBUG] [Thread-118951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:19:16.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:19:16.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:19:16.486 [DEBUG] [Thread-118951] [transport.py] [_log()] userauth is OK
2025-12-03T15:19:16.486 [DEBUG] [Thread-118951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:19:16.487 [DEBUG] [Thread-118951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:19:16.487 [DEBUG] [Thread-118951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:19:16.487 [DEBUG] [Thread-118951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:19:16.505 [INFO] [Thread-118951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:19:16.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:19:16.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:19:17.339 [DEBUG] [Thread-118951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:19:17.340 [DEBUG] [Thread-118951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:19:17.387 [DEBUG] [Thread-118951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:19:17.387 [DEBUG] [Thread-118951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:19:17.397 [DEBUG] [Thread-118951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:19:17.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:19:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:19:17.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:19:17.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:19:17.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:19:17.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:19:17.433 [DEBUG] [Thread-118951] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:19:26.872 [DEBUG] [Thread-118953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:27.453 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:27.454 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:41.917 [DEBUG] [Thread-118954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:47.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:19:47.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:19:47.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:19:48.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 19, 33), 25.96, 17.34, 0.0, 7.55, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:19:48.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:19:33
2025-12-03T15:19:48.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:19:48.384 [DEBUG] [Thread-118955] [transport.py] [_log()] starting thread (client mode): 0xa517c6d0
2025-12-03T15:19:48.384 [DEBUG] [Thread-118955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:19:48.404 [DEBUG] [Thread-118955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:19:48.405 [INFO] [Thread-118955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:19:48.407 [DEBUG] [Thread-118955] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:19:48.407 [DEBUG] [Thread-118955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:19:48.407 [DEBUG] [Thread-118955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:19:48.407 [DEBUG] [Thread-118955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] client lang: <none>
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] server lang: <none>
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] kex follows: False
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:19:48.408 [DEBUG] [Thread-118955] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:19:48.409 [DEBUG] [Thread-118955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:19:48.409 [DEBUG] [Thread-118955] [transport.py] [_log()] Compression: none
2025-12-03T15:19:48.409 [DEBUG] [Thread-118955] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:19:48.429 [DEBUG] [Thread-118955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:19:48.430 [DEBUG] [Thread-118955] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:19:48.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:19:48.431 [DEBUG] [Thread-118955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:19:48.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:19:48.432 [DEBUG] [Thread-118955] [transport.py] [_log()] userauth is OK
2025-12-03T15:19:48.432 [DEBUG] [Thread-118955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:19:48.432 [DEBUG] [Thread-118955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:19:48.433 [DEBUG] [Thread-118955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:19:48.433 [DEBUG] [Thread-118955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:19:48.455 [INFO] [Thread-118955] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:19:48.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:19:49.090 [DEBUG] [Thread-118955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:19:49.090 [DEBUG] [Thread-118955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:19:49.090 [DEBUG] [Thread-118955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:19:49.131 [DEBUG] [Thread-118955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:19:49.132 [DEBUG] [Thread-118955] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:19:49.135 [DEBUG] [Thread-118955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:19:49.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:19:49.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:19:49.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:19:49.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:19:49.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:19:49.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:19:49.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:19:49.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.554910 -999.00  +21.40   6.34     22   -0.70 1 1 1 1 1   888    0 23.72 42.00 ----- 6.8 6.3 310.4 7.7 30.4 -31.0 30.1 -31.0 30.4 -29.7 31.3 -29.5
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.554910
2025-12-03T15:19:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:19:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:19:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:19:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:19:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:19:49.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:19:33', tmtdew=25.96, humidity=17.34, cloud=0.0, wind=7.55, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:19:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:19:49.161 [DEBUG] [Thread-118955] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:19:49.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:19:49.250 [DEBUG] [Thread-118958] [transport.py] [_log()] starting thread (client mode): 0xa517ee60
2025-12-03T15:19:49.250 [DEBUG] [Thread-118958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:19:49.267 [DEBUG] [Thread-118958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:19:49.267 [INFO] [Thread-118958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:19:49.277 [DEBUG] [Thread-118958] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] client lang: <none>
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] server lang: <none>
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] kex follows: False
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:19:49.278 [DEBUG] [Thread-118958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:19:49.279 [DEBUG] [Thread-118958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:19:49.279 [DEBUG] [Thread-118958] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:19:49.279 [DEBUG] [Thread-118958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:19:49.279 [DEBUG] [Thread-118958] [transport.py] [_log()] Compression: none
2025-12-03T15:19:49.279 [DEBUG] [Thread-118958] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:19:49.337 [DEBUG] [Thread-118958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:19:49.338 [DEBUG] [Thread-118958] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:19:49.338 [DEBUG] [Thread-118958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:19:49.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:19:49.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:19:49.393 [DEBUG] [Thread-118958] [transport.py] [_log()] userauth is OK
2025-12-03T15:19:49.393 [DEBUG] [Thread-118958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:19:49.393 [DEBUG] [Thread-118958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:19:49.394 [DEBUG] [Thread-118958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:19:49.394 [DEBUG] [Thread-118958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:19:49.412 [INFO] [Thread-118958] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:19:49.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:19:49.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:19:50.263 [DEBUG] [Thread-118958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:19:50.263 [DEBUG] [Thread-118958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:19:50.311 [DEBUG] [Thread-118958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:19:50.311 [DEBUG] [Thread-118958] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:19:50.320 [DEBUG] [Thread-118958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:19:50.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:19:50.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:19:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:19:50.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:19:50.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:19:50.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:19:50.355 [DEBUG] [Thread-118958] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:19:52.694 [DEBUG] [Thread-118960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:19:56.958 [DEBUG] [Thread-118961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:12.007 [DEBUG] [Thread-118962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:20.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:20:20.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:20:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:20:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 20, 5), 25.96, 17.34, 0.0, 6.02, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:20:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:20:05
2025-12-03T15:20:21.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:20:21.310 [DEBUG] [Thread-118963] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T15:20:21.311 [DEBUG] [Thread-118963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:20:21.332 [DEBUG] [Thread-118963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:20:21.332 [INFO] [Thread-118963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] client lang: <none>
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] server lang: <none>
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] kex follows: False
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] Compression: none
2025-12-03T15:20:21.334 [DEBUG] [Thread-118963] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:20:21.343 [DEBUG] [Thread-118963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:20:21.343 [DEBUG] [Thread-118963] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:20:21.344 [DEBUG] [Thread-118963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:20:21.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:20:21.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:20:21.346 [DEBUG] [Thread-118963] [transport.py] [_log()] userauth is OK
2025-12-03T15:20:21.346 [DEBUG] [Thread-118963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:20:21.346 [DEBUG] [Thread-118963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:20:21.346 [DEBUG] [Thread-118963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:20:21.346 [DEBUG] [Thread-118963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:20:21.363 [INFO] [Thread-118963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:20:21.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:20:21.921 [DEBUG] [Thread-118963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:20:21.921 [DEBUG] [Thread-118963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:20:21.921 [DEBUG] [Thread-118963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:20:21.964 [DEBUG] [Thread-118963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:20:21.964 [DEBUG] [Thread-118963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:20:21.966 [DEBUG] [Thread-118963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:20:21.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:20:21.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:20:21.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:20:21.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:20:21.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:20:21.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:20:21.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.555257 -999.00  +21.30   3.84     22   -0.80 1 1 1 1 1   888    0 23.77 43.22 ----- 3.8 3.8 302.3 6.4 30.2 -32.0 29.9 -31.7 30.6 -29.2 31.2 -29.8
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:20:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.555257
2025-12-03T15:20:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:20:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:20:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:20:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:20:21.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:20:21.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:20:05', tmtdew=25.96, humidity=17.34, cloud=0.0, wind=6.02, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:19:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:20:21.991 [DEBUG] [Thread-118963] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:20:22.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:20:22.090 [DEBUG] [Thread-118966] [transport.py] [_log()] starting thread (client mode): 0xa2761b10
2025-12-03T15:20:22.090 [DEBUG] [Thread-118966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:20:22.107 [DEBUG] [Thread-118966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:20:22.108 [INFO] [Thread-118966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] client lang: <none>
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] server lang: <none>
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] kex follows: False
2025-12-03T15:20:22.116 [DEBUG] [Thread-118966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] Compression: none
2025-12-03T15:20:22.117 [DEBUG] [Thread-118966] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:20:22.172 [DEBUG] [Thread-118966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:20:22.172 [DEBUG] [Thread-118966] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:20:22.173 [DEBUG] [Thread-118966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:20:22.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:20:22.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:20:22.229 [DEBUG] [Thread-118966] [transport.py] [_log()] userauth is OK
2025-12-03T15:20:22.229 [DEBUG] [Thread-118966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:20:22.229 [DEBUG] [Thread-118966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:20:22.229 [DEBUG] [Thread-118966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:20:22.229 [DEBUG] [Thread-118966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:20:22.249 [INFO] [Thread-118966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:20:22.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:20:22.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:20:23.056 [DEBUG] [Thread-118966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:20:23.056 [DEBUG] [Thread-118966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:20:23.103 [DEBUG] [Thread-118966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:20:23.103 [DEBUG] [Thread-118966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:20:23.112 [DEBUG] [Thread-118966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:20:23.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:20:23.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:20:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:20:23.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:20:23.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:20:23.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:20:23.145 [DEBUG] [Thread-118966] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:20:27.039 [DEBUG] [Thread-118968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:27.592 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:27.593 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:42.091 [DEBUG] [Thread-118969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:52.726 [DEBUG] [Thread-118970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:20:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:20:53.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:20:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:20:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 20, 37), 25.9, 17.41, 0.0, 6.21, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:20:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:20:37
2025-12-03T15:20:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:20:54.149 [DEBUG] [Thread-118971] [transport.py] [_log()] starting thread (client mode): 0xa2778c40
2025-12-03T15:20:54.149 [DEBUG] [Thread-118971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:20:54.169 [DEBUG] [Thread-118971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:20:54.169 [INFO] [Thread-118971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] client lang: <none>
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] server lang: <none>
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] kex follows: False
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] Compression: none
2025-12-03T15:20:54.173 [DEBUG] [Thread-118971] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:20:54.192 [DEBUG] [Thread-118971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:20:54.192 [DEBUG] [Thread-118971] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:20:54.192 [DEBUG] [Thread-118971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:20:54.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:20:54.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:20:54.193 [DEBUG] [Thread-118971] [transport.py] [_log()] userauth is OK
2025-12-03T15:20:54.193 [DEBUG] [Thread-118971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:20:54.193 [DEBUG] [Thread-118971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:20:54.193 [DEBUG] [Thread-118971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:20:54.193 [DEBUG] [Thread-118971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:20:54.203 [INFO] [Thread-118971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:20:54.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:20:54.851 [DEBUG] [Thread-118971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:20:54.851 [DEBUG] [Thread-118971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:20:54.851 [DEBUG] [Thread-118971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:20:54.891 [DEBUG] [Thread-118971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:20:54.891 [DEBUG] [Thread-118971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:20:54.894 [DEBUG] [Thread-118971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:20:54.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:20:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:20:54.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:20:54.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:20:54.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:20:54.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.555604 -999.00  +21.30   5.47     22   -0.90 1 1 1 1 1   888    0 23.26 40.58 ----- 7.9 5.5 337.6 8.6 30.1 -32.0 29.8 -32.3 30.4 -29.7 31.0 -30.5
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:20:54.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.555604
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:20:54.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:20:37', tmtdew=25.9, humidity=17.41, cloud=0.0, wind=6.21, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:20:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:20:54.911 [DEBUG] [Thread-118971] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:20:54.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:20:54.996 [DEBUG] [Thread-118974] [transport.py] [_log()] starting thread (client mode): 0xa5199930
2025-12-03T15:20:54.996 [DEBUG] [Thread-118974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:20:55.010 [DEBUG] [Thread-118974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:20:55.010 [INFO] [Thread-118974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] client lang: <none>
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] server lang: <none>
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] kex follows: False
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] Compression: none
2025-12-03T15:20:55.018 [DEBUG] [Thread-118974] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:20:55.075 [DEBUG] [Thread-118974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:20:55.075 [DEBUG] [Thread-118974] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:20:55.075 [DEBUG] [Thread-118974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:20:55.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:20:55.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:20:55.134 [DEBUG] [Thread-118974] [transport.py] [_log()] userauth is OK
2025-12-03T15:20:55.134 [DEBUG] [Thread-118974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:20:55.134 [DEBUG] [Thread-118974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:20:55.134 [DEBUG] [Thread-118974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:20:55.134 [DEBUG] [Thread-118974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:20:55.153 [INFO] [Thread-118974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:20:55.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:20:55.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:20:55.994 [DEBUG] [Thread-118974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:20:55.994 [DEBUG] [Thread-118974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:20:56.042 [DEBUG] [Thread-118974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:20:56.042 [DEBUG] [Thread-118974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:20:56.051 [DEBUG] [Thread-118974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:20:56.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:20:56.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:20:56.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:20:56.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:20:56.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:20:56.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:20:56.082 [DEBUG] [Thread-118974] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:20:57.124 [DEBUG] [Thread-118976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:12.163 [DEBUG] [Thread-118977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:21:26.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:21:26.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:21:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 21, 9), 26.02, 17.24, 0.0, 5.66, 21.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:21:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:21:09
2025-12-03T15:21:26.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:21:27.058 [DEBUG] [Thread-118978] [transport.py] [_log()] starting thread (client mode): 0xa5198340
2025-12-03T15:21:27.059 [DEBUG] [Thread-118978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:21:27.080 [DEBUG] [Thread-118978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:21:27.081 [INFO] [Thread-118978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:21:27.084 [DEBUG] [Thread-118978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:21:27.084 [DEBUG] [Thread-118978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:21:27.084 [DEBUG] [Thread-118978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:21:27.084 [DEBUG] [Thread-118978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:21:27.084 [DEBUG] [Thread-118978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] client lang: <none>
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] server lang: <none>
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] kex follows: False
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:21:27.085 [DEBUG] [Thread-118978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:21:27.086 [DEBUG] [Thread-118978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:21:27.086 [DEBUG] [Thread-118978] [transport.py] [_log()] Compression: none
2025-12-03T15:21:27.086 [DEBUG] [Thread-118978] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:21:27.105 [DEBUG] [Thread-118978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:21:27.106 [DEBUG] [Thread-118978] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:21:27.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:21:27.107 [DEBUG] [Thread-118978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:21:27.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:21:27.109 [DEBUG] [Thread-118978] [transport.py] [_log()] userauth is OK
2025-12-03T15:21:27.109 [DEBUG] [Thread-118978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:21:27.109 [DEBUG] [Thread-118978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:21:27.109 [DEBUG] [Thread-118978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:21:27.109 [DEBUG] [Thread-118978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:21:27.132 [INFO] [Thread-118978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:21:27.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:21:27.204 [DEBUG] [Thread-118980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:27.731 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:27.733 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:27.880 [DEBUG] [Thread-118978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:21:27.881 [DEBUG] [Thread-118978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:21:27.881 [DEBUG] [Thread-118978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:21:27.921 [DEBUG] [Thread-118978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:21:27.921 [DEBUG] [Thread-118978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:21:27.924 [DEBUG] [Thread-118978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:21:27.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:21:27.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:21:27.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:21:27.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:21:27.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:21:27.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:21:27.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:21:27.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:21:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:21:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.555951 -999.00  +21.10   3.95     23   -0.70 1 1 1 1 1   888    0 23.55 43.00 ----- 4.0 4.0 317.4 8.1 30.0 -31.8 29.7 -31.4 30.2 -29.8 30.8 -31.0
2025-12-03T15:21:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:21:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:21:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.555951
2025-12-03T15:21:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:21:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:21:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:21:27.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:21:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:21:27.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:21:09', tmtdew=26.02, humidity=17.24, cloud=0.0, wind=5.66, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:20:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:21:27.956 [DEBUG] [Thread-118978] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:21:28.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:21:28.052 [DEBUG] [Thread-118982] [transport.py] [_log()] starting thread (client mode): 0xa2750220
2025-12-03T15:21:28.052 [DEBUG] [Thread-118982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:21:28.066 [DEBUG] [Thread-118982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:21:28.067 [INFO] [Thread-118982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:21:28.074 [DEBUG] [Thread-118982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:21:28.074 [DEBUG] [Thread-118982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:21:28.074 [DEBUG] [Thread-118982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:21:28.074 [DEBUG] [Thread-118982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:21:28.074 [DEBUG] [Thread-118982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] client lang: <none>
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] server lang: <none>
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] kex follows: False
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:21:28.075 [DEBUG] [Thread-118982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:21:28.076 [DEBUG] [Thread-118982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:21:28.076 [DEBUG] [Thread-118982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:21:28.076 [DEBUG] [Thread-118982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:21:28.076 [DEBUG] [Thread-118982] [transport.py] [_log()] Compression: none
2025-12-03T15:21:28.076 [DEBUG] [Thread-118982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:21:28.133 [DEBUG] [Thread-118982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:21:28.133 [DEBUG] [Thread-118982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:21:28.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:21:28.135 [DEBUG] [Thread-118982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:21:28.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:21:28.189 [DEBUG] [Thread-118982] [transport.py] [_log()] userauth is OK
2025-12-03T15:21:28.190 [DEBUG] [Thread-118982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:21:28.190 [DEBUG] [Thread-118982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:21:28.190 [DEBUG] [Thread-118982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:21:28.190 [DEBUG] [Thread-118982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:21:28.209 [INFO] [Thread-118982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:21:28.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:21:28.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:21:29.050 [DEBUG] [Thread-118982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:21:29.051 [DEBUG] [Thread-118982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:21:29.099 [DEBUG] [Thread-118982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:21:29.100 [DEBUG] [Thread-118982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:21:29.109 [DEBUG] [Thread-118982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:21:29.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:21:29.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:21:29.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:21:29.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:21:29.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:21:29.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:21:29.145 [DEBUG] [Thread-118982] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:21:42.238 [DEBUG] [Thread-118984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:52.759 [DEBUG] [Thread-118985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:57.289 [DEBUG] [Thread-118986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:21:59.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:21:59.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:21:59.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:21:59.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 21, 41), 25.77, 17.41, 0.0, 2.67, 21.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:21:59.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:21:41
2025-12-03T15:21:59.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:22:00.116 [DEBUG] [Thread-118987] [transport.py] [_log()] starting thread (client mode): 0xa27442e0
2025-12-03T15:22:00.117 [DEBUG] [Thread-118987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:22:00.138 [DEBUG] [Thread-118987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:22:00.138 [INFO] [Thread-118987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] client lang: <none>
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] server lang: <none>
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] kex follows: False
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] Compression: none
2025-12-03T15:22:00.141 [DEBUG] [Thread-118987] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:22:00.159 [DEBUG] [Thread-118987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:22:00.159 [DEBUG] [Thread-118987] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:22:00.160 [DEBUG] [Thread-118987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:22:00.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:22:00.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:22:00.162 [DEBUG] [Thread-118987] [transport.py] [_log()] userauth is OK
2025-12-03T15:22:00.162 [DEBUG] [Thread-118987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:22:00.162 [DEBUG] [Thread-118987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:22:00.163 [DEBUG] [Thread-118987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:22:00.163 [DEBUG] [Thread-118987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:22:00.186 [INFO] [Thread-118987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:22:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:22:00.816 [DEBUG] [Thread-118987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:22:00.816 [DEBUG] [Thread-118987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:22:00.817 [DEBUG] [Thread-118987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:22:00.857 [DEBUG] [Thread-118987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:22:00.857 [DEBUG] [Thread-118987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:22:00.860 [DEBUG] [Thread-118987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:22:00.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:22:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:22:00.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:22:00.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:22:00.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:22:00.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:22:00.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:22:00.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:22:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:22:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.556299 -999.00  +21.20   3.17     23   -0.60 1 1 1 1 1   888    0 23.63 47.10 ----- 3.3 3.2 258.3 5.7 29.9 -31.2 29.6 -30.9 30.2 -29.5 30.7 -29.9
2025-12-03T15:22:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:22:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:22:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.556299
2025-12-03T15:22:00.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:22:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:22:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:22:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:22:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:22:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:21:41', tmtdew=25.77, humidity=17.41, cloud=0.0, wind=2.67, temperature=21.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:21:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:22:00.885 [DEBUG] [Thread-118987] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:22:00.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:22:00.980 [DEBUG] [Thread-118990] [transport.py] [_log()] starting thread (client mode): 0xa5198a90
2025-12-03T15:22:00.980 [DEBUG] [Thread-118990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:22:00.994 [DEBUG] [Thread-118990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:22:00.995 [INFO] [Thread-118990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:22:01.006 [DEBUG] [Thread-118990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:22:01.006 [DEBUG] [Thread-118990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:22:01.006 [DEBUG] [Thread-118990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] client lang: <none>
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] server lang: <none>
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] kex follows: False
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:22:01.007 [DEBUG] [Thread-118990] [transport.py] [_log()] Compression: none
2025-12-03T15:22:01.008 [DEBUG] [Thread-118990] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:22:01.062 [DEBUG] [Thread-118990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:22:01.062 [DEBUG] [Thread-118990] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:22:01.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:22:01.064 [DEBUG] [Thread-118990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:22:01.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:22:01.125 [DEBUG] [Thread-118990] [transport.py] [_log()] userauth is OK
2025-12-03T15:22:01.125 [DEBUG] [Thread-118990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:22:01.125 [DEBUG] [Thread-118990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:22:01.125 [DEBUG] [Thread-118990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:22:01.125 [DEBUG] [Thread-118990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:22:01.142 [INFO] [Thread-118990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:22:01.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:22:01.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:22:02.015 [DEBUG] [Thread-118990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:22:02.016 [DEBUG] [Thread-118990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:22:02.064 [DEBUG] [Thread-118990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:22:02.064 [DEBUG] [Thread-118990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:22:02.073 [DEBUG] [Thread-118990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:22:02.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:22:02.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:22:02.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:22:02.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:22:02.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:22:02.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:22:02.111 [DEBUG] [Thread-118990] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:22:12.321 [DEBUG] [Thread-118992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:27.360 [DEBUG] [Thread-118993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:27.873 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:27.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:22:32.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:22:32.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:22:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 22, 13), 25.66, 17.56, 0.0, 1.57, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:22:32.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:22:13
2025-12-03T15:22:32.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:22:33.086 [DEBUG] [Thread-118994] [transport.py] [_log()] starting thread (client mode): 0xa517e0b0
2025-12-03T15:22:33.086 [DEBUG] [Thread-118994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:22:33.106 [DEBUG] [Thread-118994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:22:33.106 [INFO] [Thread-118994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] client lang: <none>
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] server lang: <none>
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] kex follows: False
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] Compression: none
2025-12-03T15:22:33.109 [DEBUG] [Thread-118994] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:22:33.126 [DEBUG] [Thread-118994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:22:33.126 [DEBUG] [Thread-118994] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:22:33.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:22:33.127 [DEBUG] [Thread-118994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:22:33.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:22:33.128 [DEBUG] [Thread-118994] [transport.py] [_log()] userauth is OK
2025-12-03T15:22:33.129 [DEBUG] [Thread-118994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:22:33.129 [DEBUG] [Thread-118994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:22:33.129 [DEBUG] [Thread-118994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:22:33.129 [DEBUG] [Thread-118994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:22:33.144 [INFO] [Thread-118994] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:22:33.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:22:33.903 [DEBUG] [Thread-118994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:22:33.903 [DEBUG] [Thread-118994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:22:33.903 [DEBUG] [Thread-118994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:22:33.945 [DEBUG] [Thread-118994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:22:33.945 [DEBUG] [Thread-118994] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:22:33.947 [DEBUG] [Thread-118994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:22:33.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:22:33.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:22:33.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:22:33.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:22:33.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:22:33.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:22:33.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:22:33.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.556646 -999.00  +21.50   3.25     22   -0.50 1 1 1 1 1   888    0 22.98 45.07 ----- 4.2 3.2 106.8 6.0 29.8 -31.0 29.6 -30.9 30.0 -30.2 30.5 -29.8
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.556646
2025-12-03T15:22:33.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:22:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:22:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:22:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:22:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:22:33.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:22:13', tmtdew=25.66, humidity=17.56, cloud=0.0, wind=1.57, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:21:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:22:33.965 [DEBUG] [Thread-118994] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:22:34.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:22:34.063 [DEBUG] [Thread-118997] [transport.py] [_log()] starting thread (client mode): 0xa5199ba0
2025-12-03T15:22:34.063 [DEBUG] [Thread-118997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:22:34.078 [DEBUG] [Thread-118997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:22:34.078 [INFO] [Thread-118997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:22:34.085 [DEBUG] [Thread-118997] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:22:34.085 [DEBUG] [Thread-118997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:22:34.085 [DEBUG] [Thread-118997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] client lang: <none>
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] server lang: <none>
2025-12-03T15:22:34.086 [DEBUG] [Thread-118997] [transport.py] [_log()] kex follows: False
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] Compression: none
2025-12-03T15:22:34.087 [DEBUG] [Thread-118997] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:22:34.144 [DEBUG] [Thread-118997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:22:34.145 [DEBUG] [Thread-118997] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:22:34.145 [DEBUG] [Thread-118997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:22:34.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:22:34.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:22:34.200 [DEBUG] [Thread-118997] [transport.py] [_log()] userauth is OK
2025-12-03T15:22:34.201 [DEBUG] [Thread-118997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:22:34.201 [DEBUG] [Thread-118997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:22:34.201 [DEBUG] [Thread-118997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:22:34.201 [DEBUG] [Thread-118997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:22:34.219 [INFO] [Thread-118997] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:22:34.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:22:34.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:22:35.038 [DEBUG] [Thread-118997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:22:35.038 [DEBUG] [Thread-118997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:22:35.086 [DEBUG] [Thread-118997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:22:35.086 [DEBUG] [Thread-118997] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:22:35.095 [DEBUG] [Thread-118997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:22:35.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:22:35.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:22:35.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:22:35.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:22:35.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:22:35.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:22:35.129 [DEBUG] [Thread-118997] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:22:42.396 [DEBUG] [Thread-118999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:52.804 [DEBUG] [Thread-119000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:22:57.448 [DEBUG] [Thread-119001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:05.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:23:05.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:23:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:23:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 22, 45), 25.62, 17.62, 0.0, 8.24, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:23:05.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:22:45
2025-12-03T15:23:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:23:06.086 [DEBUG] [Thread-119002] [transport.py] [_log()] starting thread (client mode): 0xa2750700
2025-12-03T15:23:06.086 [DEBUG] [Thread-119002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:23:06.105 [DEBUG] [Thread-119002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:23:06.105 [INFO] [Thread-119002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:23:06.108 [DEBUG] [Thread-119002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] client lang: <none>
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] server lang: <none>
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] kex follows: False
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] Compression: none
2025-12-03T15:23:06.109 [DEBUG] [Thread-119002] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:23:06.127 [DEBUG] [Thread-119002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:23:06.128 [DEBUG] [Thread-119002] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:23:06.128 [DEBUG] [Thread-119002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:23:06.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:23:06.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:23:06.130 [DEBUG] [Thread-119002] [transport.py] [_log()] userauth is OK
2025-12-03T15:23:06.130 [DEBUG] [Thread-119002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:23:06.130 [DEBUG] [Thread-119002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:23:06.131 [DEBUG] [Thread-119002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:23:06.131 [DEBUG] [Thread-119002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:23:06.167 [INFO] [Thread-119002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:23:06.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:23:06.817 [DEBUG] [Thread-119002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:23:06.817 [DEBUG] [Thread-119002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:23:06.817 [DEBUG] [Thread-119002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:23:06.859 [DEBUG] [Thread-119002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:23:06.859 [DEBUG] [Thread-119002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:23:06.861 [DEBUG] [Thread-119002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:23:06.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:23:06.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:23:06.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:23:06.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:23:06.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:23:06.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:23:06.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.556993 -999.00  +21.60   3.25     22   -0.50 1 1 1 1 1   888    0 23.34 43.92 ----- 2.9 3.2 121.4 5.3 29.9 -29.4 29.6 -30.4 30.0 -28.9 30.6 -29.9
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:23:06.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.556993
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:23:06.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:22:45', tmtdew=25.62, humidity=17.62, cloud=0.0, wind=8.24, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:22:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:23:06.884 [DEBUG] [Thread-119002] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:23:06.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:23:06.978 [DEBUG] [Thread-119005] [transport.py] [_log()] starting thread (client mode): 0xa2745030
2025-12-03T15:23:06.978 [DEBUG] [Thread-119005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:23:06.992 [DEBUG] [Thread-119005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:23:06.993 [INFO] [Thread-119005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:23:07.000 [DEBUG] [Thread-119005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:23:07.000 [DEBUG] [Thread-119005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:23:07.000 [DEBUG] [Thread-119005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] client lang: <none>
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] server lang: <none>
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] kex follows: False
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:23:07.001 [DEBUG] [Thread-119005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:23:07.002 [DEBUG] [Thread-119005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:23:07.002 [DEBUG] [Thread-119005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:23:07.002 [DEBUG] [Thread-119005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:23:07.002 [DEBUG] [Thread-119005] [transport.py] [_log()] Compression: none
2025-12-03T15:23:07.002 [DEBUG] [Thread-119005] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:23:07.059 [DEBUG] [Thread-119005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:23:07.060 [DEBUG] [Thread-119005] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:23:07.060 [DEBUG] [Thread-119005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:23:07.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:23:07.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:23:07.117 [DEBUG] [Thread-119005] [transport.py] [_log()] userauth is OK
2025-12-03T15:23:07.117 [DEBUG] [Thread-119005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:23:07.118 [DEBUG] [Thread-119005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:23:07.118 [DEBUG] [Thread-119005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:23:07.118 [DEBUG] [Thread-119005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:23:07.140 [INFO] [Thread-119005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:23:07.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:23:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:23:07.954 [DEBUG] [Thread-119005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:23:07.955 [DEBUG] [Thread-119005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:23:08.002 [DEBUG] [Thread-119005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:23:08.002 [DEBUG] [Thread-119005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:23:08.011 [DEBUG] [Thread-119005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:23:08.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:23:08.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:23:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:23:08.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:23:08.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:23:08.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:23:08.048 [DEBUG] [Thread-119005] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:23:12.482 [DEBUG] [Thread-119007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:27.536 [DEBUG] [Thread-119008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:28.012 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:28.013 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:38.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:23:38.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:23:38.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:23:38.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 23, 17), 25.55, 17.69, 0.0, 7.43, 21.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:23:38.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:23:17
2025-12-03T15:23:38.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:23:39.007 [DEBUG] [Thread-119009] [transport.py] [_log()] starting thread (client mode): 0xa2747070
2025-12-03T15:23:39.007 [DEBUG] [Thread-119009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:23:39.027 [DEBUG] [Thread-119009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:23:39.027 [INFO] [Thread-119009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] client lang: <none>
2025-12-03T15:23:39.029 [DEBUG] [Thread-119009] [transport.py] [_log()] server lang: <none>
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] kex follows: False
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] Compression: none
2025-12-03T15:23:39.030 [DEBUG] [Thread-119009] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:23:39.040 [DEBUG] [Thread-119009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:23:39.041 [DEBUG] [Thread-119009] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:23:39.041 [DEBUG] [Thread-119009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:23:39.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:23:39.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:23:39.043 [DEBUG] [Thread-119009] [transport.py] [_log()] userauth is OK
2025-12-03T15:23:39.044 [DEBUG] [Thread-119009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:23:39.044 [DEBUG] [Thread-119009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:23:39.044 [DEBUG] [Thread-119009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:23:39.044 [DEBUG] [Thread-119009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:23:39.063 [INFO] [Thread-119009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:23:39.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:23:39.782 [DEBUG] [Thread-119009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:23:39.783 [DEBUG] [Thread-119009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:23:39.783 [DEBUG] [Thread-119009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:23:39.824 [DEBUG] [Thread-119009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:23:39.825 [DEBUG] [Thread-119009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:23:39.828 [DEBUG] [Thread-119009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:23:39.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:23:39.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:23:39.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:23:39.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:23:39.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:23:39.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:23:39.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:23:39.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:23:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:23:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.557688 -999.00  +22.10  10.43     22   -0.20 1 1 1 1 1   888    0 23.43 39.13 ----- 10.4 10.4 197.8 14.5 30.0 -28.4 29.8 -32.0 30.4 -26.4 30.9 -27.8
2025-12-03T15:23:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:23:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:23:39.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.557688
2025-12-03T15:23:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:23:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:23:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:23:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:23:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:23:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:23:17', tmtdew=25.55, humidity=17.69, cloud=0.0, wind=7.43, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:23:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:23:39.855 [DEBUG] [Thread-119009] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:23:39.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:23:39.952 [DEBUG] [Thread-119012] [transport.py] [_log()] starting thread (client mode): 0xa5199ba0
2025-12-03T15:23:39.953 [DEBUG] [Thread-119012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:23:39.967 [DEBUG] [Thread-119012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:23:39.967 [INFO] [Thread-119012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] client lang: <none>
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] server lang: <none>
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] kex follows: False
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:23:39.975 [DEBUG] [Thread-119012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:23:39.976 [DEBUG] [Thread-119012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:23:39.976 [DEBUG] [Thread-119012] [transport.py] [_log()] Compression: none
2025-12-03T15:23:39.976 [DEBUG] [Thread-119012] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:23:40.033 [DEBUG] [Thread-119012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:23:40.033 [DEBUG] [Thread-119012] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:23:40.034 [DEBUG] [Thread-119012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:23:40.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:23:40.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:23:40.089 [DEBUG] [Thread-119012] [transport.py] [_log()] userauth is OK
2025-12-03T15:23:40.089 [DEBUG] [Thread-119012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:23:40.089 [DEBUG] [Thread-119012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:23:40.090 [DEBUG] [Thread-119012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:23:40.090 [DEBUG] [Thread-119012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:23:40.108 [INFO] [Thread-119012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:23:40.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:23:40.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:23:40.930 [DEBUG] [Thread-119012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:23:40.930 [DEBUG] [Thread-119012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:23:40.978 [DEBUG] [Thread-119012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:23:40.978 [DEBUG] [Thread-119012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:23:40.987 [DEBUG] [Thread-119012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:23:40.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:23:40.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:23:41.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:23:41.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:23:41.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:23:41.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:23:41.024 [DEBUG] [Thread-119012] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:23:42.570 [DEBUG] [Thread-119014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:52.844 [DEBUG] [Thread-119015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:23:57.619 [DEBUG] [Thread-119016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:11.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:24:11.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:24:11.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:24:11.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 23, 49), 25.2, 17.89, 0.0, 7.64, 21.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:24:11.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:23:49
2025-12-03T15:24:11.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:24:11.985 [DEBUG] [Thread-119017] [transport.py] [_log()] starting thread (client mode): 0xa5199600
2025-12-03T15:24:11.985 [DEBUG] [Thread-119017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:24:12.004 [DEBUG] [Thread-119017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:24:12.004 [INFO] [Thread-119017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:24:12.007 [DEBUG] [Thread-119017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:24:12.007 [DEBUG] [Thread-119017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:24:12.007 [DEBUG] [Thread-119017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] client lang: <none>
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] server lang: <none>
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] kex follows: False
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] Compression: none
2025-12-03T15:24:12.008 [DEBUG] [Thread-119017] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:24:12.025 [DEBUG] [Thread-119017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:24:12.025 [DEBUG] [Thread-119017] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:24:12.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:24:12.026 [DEBUG] [Thread-119017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:24:12.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:24:12.028 [DEBUG] [Thread-119017] [transport.py] [_log()] userauth is OK
2025-12-03T15:24:12.028 [DEBUG] [Thread-119017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:24:12.028 [DEBUG] [Thread-119017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:24:12.028 [DEBUG] [Thread-119017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:24:12.029 [DEBUG] [Thread-119017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:24:12.052 [INFO] [Thread-119017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:24:12.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:24:12.654 [DEBUG] [Thread-119019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:12.709 [DEBUG] [Thread-119017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:24:12.710 [DEBUG] [Thread-119017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:24:12.710 [DEBUG] [Thread-119017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:24:12.750 [DEBUG] [Thread-119017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:24:12.751 [DEBUG] [Thread-119017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:24:12.754 [DEBUG] [Thread-119017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:24:12.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:24:12.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:24:12.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:24:12.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:24:12.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:24:12.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:24:12.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:24:12.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:24:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:24:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.558035 -999.00  +22.00   3.26     22   -0.10 1 1 1 1 1   888    0 23.31 37.87 ----- 3.3 3.3 168.0 9.2 30.2 -28.4 29.6 -30.7 30.5 -25.9 31.0 -25.7
2025-12-03T15:24:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:24:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:24:12.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.558035
2025-12-03T15:24:12.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:24:12.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:24:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:24:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:24:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:24:12.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:23:49', tmtdew=25.2, humidity=17.89, cloud=0.0, wind=7.64, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:23:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:24:12.779 [DEBUG] [Thread-119017] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:24:12.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:24:12.875 [DEBUG] [Thread-119021] [transport.py] [_log()] starting thread (client mode): 0xa2744fa0
2025-12-03T15:24:12.875 [DEBUG] [Thread-119021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:24:12.890 [DEBUG] [Thread-119021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:24:12.891 [INFO] [Thread-119021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:24:12.898 [DEBUG] [Thread-119021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] client lang: <none>
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] server lang: <none>
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] kex follows: False
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] Compression: none
2025-12-03T15:24:12.899 [DEBUG] [Thread-119021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:24:12.957 [DEBUG] [Thread-119021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:24:12.957 [DEBUG] [Thread-119021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:24:12.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:24:12.958 [DEBUG] [Thread-119021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:24:12.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:24:13.017 [DEBUG] [Thread-119021] [transport.py] [_log()] userauth is OK
2025-12-03T15:24:13.017 [DEBUG] [Thread-119021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:24:13.017 [DEBUG] [Thread-119021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:24:13.018 [DEBUG] [Thread-119021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:24:13.018 [DEBUG] [Thread-119021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:24:13.037 [INFO] [Thread-119021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:24:13.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:24:13.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:24:13.850 [DEBUG] [Thread-119021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:24:13.850 [DEBUG] [Thread-119021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:24:13.898 [DEBUG] [Thread-119021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:24:13.898 [DEBUG] [Thread-119021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:24:13.907 [DEBUG] [Thread-119021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:24:13.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:24:13.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:24:13.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:24:13.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:24:13.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:24:13.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:24:13.944 [DEBUG] [Thread-119021] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:24:27.690 [DEBUG] [Thread-119023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:28.152 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:28.153 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:42.748 [DEBUG] [Thread-119024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:24:43.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:24:43.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:24:44.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 24, 21), 25.27, 17.84, 0.0, 12.69, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:24:44.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:24:21
2025-12-03T15:24:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:24:44.922 [DEBUG] [Thread-119025] [transport.py] [_log()] starting thread (client mode): 0xa2747ca0
2025-12-03T15:24:44.922 [DEBUG] [Thread-119025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:24:44.942 [DEBUG] [Thread-119025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:24:44.942 [INFO] [Thread-119025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:44.945 [DEBUG] [Thread-119025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] client lang: <none>
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] server lang: <none>
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] kex follows: False
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] Compression: none
2025-12-03T15:24:44.946 [DEBUG] [Thread-119025] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:24:44.963 [DEBUG] [Thread-119025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:24:44.963 [DEBUG] [Thread-119025] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:24:44.963 [DEBUG] [Thread-119025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:24:44.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:24:44.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:24:44.964 [DEBUG] [Thread-119025] [transport.py] [_log()] userauth is OK
2025-12-03T15:24:44.964 [DEBUG] [Thread-119025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:24:44.965 [DEBUG] [Thread-119025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:24:44.965 [DEBUG] [Thread-119025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:24:44.965 [DEBUG] [Thread-119025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:24:44.993 [INFO] [Thread-119025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:24:44.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:24:45.779 [DEBUG] [Thread-119025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:24:45.779 [DEBUG] [Thread-119025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:24:45.779 [DEBUG] [Thread-119025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:24:45.820 [DEBUG] [Thread-119025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:24:45.820 [DEBUG] [Thread-119025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:24:45.822 [DEBUG] [Thread-119025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:24:45.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:24:45.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:24:45.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:24:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:24:45.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:24:45.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:24:45.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.558382 -999.00  +22.20   8.42     22   +0.00 1 1 1 1 1   888    0 23.54 34.71 ----- 8.4 8.4 192.8 12.9 30.2 -28.2 29.8 -29.0 30.8 -25.7 31.3 -26.2
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.558382
2025-12-03T15:24:45.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:24:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:24:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:24:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:24:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:24:45.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:24:21', tmtdew=25.27, humidity=17.84, cloud=0.0, wind=12.69, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:24:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:24:45.840 [DEBUG] [Thread-119025] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:24:45.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:24:45.926 [DEBUG] [Thread-119028] [transport.py] [_log()] starting thread (client mode): 0xa517cf10
2025-12-03T15:24:45.926 [DEBUG] [Thread-119028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:24:45.944 [DEBUG] [Thread-119028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:24:45.944 [INFO] [Thread-119028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] client lang: <none>
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] server lang: <none>
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] kex follows: False
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] Compression: none
2025-12-03T15:24:45.952 [DEBUG] [Thread-119028] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:24:46.007 [DEBUG] [Thread-119028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:24:46.007 [DEBUG] [Thread-119028] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:24:46.007 [DEBUG] [Thread-119028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:24:46.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:24:46.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:24:46.065 [DEBUG] [Thread-119028] [transport.py] [_log()] userauth is OK
2025-12-03T15:24:46.065 [DEBUG] [Thread-119028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:24:46.065 [DEBUG] [Thread-119028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:24:46.065 [DEBUG] [Thread-119028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:24:46.065 [DEBUG] [Thread-119028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:24:46.079 [INFO] [Thread-119028] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:24:46.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:24:46.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:24:46.928 [DEBUG] [Thread-119028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:24:46.928 [DEBUG] [Thread-119028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:24:46.976 [DEBUG] [Thread-119028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:24:46.976 [DEBUG] [Thread-119028] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:24:46.984 [DEBUG] [Thread-119028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:24:46.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:24:46.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:24:46.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:24:47.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:24:47.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:24:47.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:24:47.019 [DEBUG] [Thread-119028] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:24:52.889 [DEBUG] [Thread-119030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:24:57.775 [DEBUG] [Thread-119031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:12.827 [DEBUG] [Thread-119032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:17.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:25:17.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:25:17.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:25:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 24, 53), 25.37, 18.04, 0.0, 14.03, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:25:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:24:53
2025-12-03T15:25:17.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:25:17.962 [DEBUG] [Thread-119033] [transport.py] [_log()] starting thread (client mode): 0xa27c82b0
2025-12-03T15:25:17.962 [DEBUG] [Thread-119033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:25:17.984 [DEBUG] [Thread-119033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:25:17.984 [INFO] [Thread-119033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:25:17.987 [DEBUG] [Thread-119033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:25:17.987 [DEBUG] [Thread-119033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:25:17.987 [DEBUG] [Thread-119033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] client lang: <none>
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] server lang: <none>
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] kex follows: False
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] Compression: none
2025-12-03T15:25:17.988 [DEBUG] [Thread-119033] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:25:18.004 [DEBUG] [Thread-119033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:25:18.004 [DEBUG] [Thread-119033] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:25:18.005 [DEBUG] [Thread-119033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:25:18.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:25:18.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:25:18.007 [DEBUG] [Thread-119033] [transport.py] [_log()] userauth is OK
2025-12-03T15:25:18.007 [DEBUG] [Thread-119033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:25:18.007 [DEBUG] [Thread-119033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:25:18.007 [DEBUG] [Thread-119033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:25:18.008 [DEBUG] [Thread-119033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:25:18.023 [INFO] [Thread-119033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:25:18.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:25:18.678 [DEBUG] [Thread-119033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:25:18.679 [DEBUG] [Thread-119033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:25:18.679 [DEBUG] [Thread-119033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:25:18.720 [DEBUG] [Thread-119033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:25:18.720 [DEBUG] [Thread-119033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:25:18.723 [DEBUG] [Thread-119033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:25:18.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:25:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:25:18.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:25:18.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:25:18.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:25:18.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:25:18.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:25:18.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:25:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:25:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.558729 -999.00  +22.40   7.02     22   +0.00 1 1 1 1 1   888    0 23.37 33.04 ----- 7.0 7.0 196.7 13.8 30.2 -29.6 29.7 -28.8 30.9 -26.5 31.4 -27.8
2025-12-03T15:25:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:25:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:25:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.558729
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:25:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:24:53', tmtdew=25.37, humidity=18.04, cloud=0.0, wind=14.03, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:24:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:25:18.748 [DEBUG] [Thread-119033] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:25:18.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:25:18.844 [DEBUG] [Thread-119036] [transport.py] [_log()] starting thread (client mode): 0xa27c8070
2025-12-03T15:25:18.844 [DEBUG] [Thread-119036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:25:18.860 [DEBUG] [Thread-119036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:25:18.860 [INFO] [Thread-119036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] client lang: <none>
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] server lang: <none>
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] kex follows: False
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] Compression: none
2025-12-03T15:25:18.868 [DEBUG] [Thread-119036] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:25:18.924 [DEBUG] [Thread-119036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:25:18.925 [DEBUG] [Thread-119036] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:25:18.925 [DEBUG] [Thread-119036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:25:18.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:25:18.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:25:18.981 [DEBUG] [Thread-119036] [transport.py] [_log()] userauth is OK
2025-12-03T15:25:18.981 [DEBUG] [Thread-119036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:25:18.981 [DEBUG] [Thread-119036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:25:18.982 [DEBUG] [Thread-119036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:25:18.982 [DEBUG] [Thread-119036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:25:19.000 [INFO] [Thread-119036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:25:19.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:25:19.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:25:19.899 [DEBUG] [Thread-119036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:25:19.899 [DEBUG] [Thread-119036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:25:19.947 [DEBUG] [Thread-119036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:25:19.948 [DEBUG] [Thread-119036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:25:19.956 [DEBUG] [Thread-119036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:25:19.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:25:19.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:25:19.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:25:19.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:25:19.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:25:19.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:25:19.989 [DEBUG] [Thread-119036] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:25:27.861 [DEBUG] [Thread-119038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:28.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:28.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:42.904 [DEBUG] [Thread-119039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:25:50.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:25:50.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:25:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 25, 25), 25.64, 17.76, 0.0, 10.73, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:25:50.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:25:25
2025-12-03T15:25:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:25:50.950 [DEBUG] [Thread-119040] [transport.py] [_log()] starting thread (client mode): 0xa517c2e0
2025-12-03T15:25:50.950 [DEBUG] [Thread-119040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:25:50.970 [DEBUG] [Thread-119040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:25:50.971 [INFO] [Thread-119040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:25:50.973 [DEBUG] [Thread-119040] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] client lang: <none>
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] server lang: <none>
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] kex follows: False
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] Compression: none
2025-12-03T15:25:50.974 [DEBUG] [Thread-119040] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:25:50.991 [DEBUG] [Thread-119040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:25:50.991 [DEBUG] [Thread-119040] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:25:50.992 [DEBUG] [Thread-119040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:25:50.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:25:50.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:25:50.994 [DEBUG] [Thread-119040] [transport.py] [_log()] userauth is OK
2025-12-03T15:25:50.994 [DEBUG] [Thread-119040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:25:50.994 [DEBUG] [Thread-119040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:25:50.994 [DEBUG] [Thread-119040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:25:50.994 [DEBUG] [Thread-119040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:25:51.026 [INFO] [Thread-119040] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:25:51.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:25:51.821 [DEBUG] [Thread-119040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:25:51.822 [DEBUG] [Thread-119040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:25:51.822 [DEBUG] [Thread-119040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:25:51.862 [DEBUG] [Thread-119040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:25:51.862 [DEBUG] [Thread-119040] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:25:51.866 [DEBUG] [Thread-119040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:25:51.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:25:51.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:25:51.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:25:51.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:25:51.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:25:51.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:25:51.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:25:51.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:25:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:25:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.559076 -999.00  +22.50   3.40     22   +0.00 1 1 1 1 1   888    0 23.13 31.01 ----- 3.4 3.4 238.8 10.2 30.2 -29.0 29.8 -28.7 30.9 -25.9 31.5 -27.5
2025-12-03T15:25:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:25:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:25:51.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.559076
2025-12-03T15:25:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:25:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:25:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:25:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:25:51.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:25:51.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:25:25', tmtdew=25.64, humidity=17.76, cloud=0.0, wind=10.73, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:25:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:25:51.895 [DEBUG] [Thread-119040] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:25:51.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:25:51.990 [DEBUG] [Thread-119043] [transport.py] [_log()] starting thread (client mode): 0xa517c100
2025-12-03T15:25:51.990 [DEBUG] [Thread-119043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:25:52.005 [DEBUG] [Thread-119043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:25:52.005 [INFO] [Thread-119043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] client lang: <none>
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] server lang: <none>
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] kex follows: False
2025-12-03T15:25:52.013 [DEBUG] [Thread-119043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] Compression: none
2025-12-03T15:25:52.014 [DEBUG] [Thread-119043] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:25:52.071 [DEBUG] [Thread-119043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:25:52.072 [DEBUG] [Thread-119043] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:25:52.073 [DEBUG] [Thread-119043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:25:52.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:25:52.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:25:52.128 [DEBUG] [Thread-119043] [transport.py] [_log()] userauth is OK
2025-12-03T15:25:52.128 [DEBUG] [Thread-119043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:25:52.129 [DEBUG] [Thread-119043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:25:52.129 [DEBUG] [Thread-119043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:25:52.129 [DEBUG] [Thread-119043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:25:52.148 [INFO] [Thread-119043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:25:52.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:25:52.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:25:52.936 [DEBUG] [Thread-119045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:25:53.007 [DEBUG] [Thread-119043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:25:53.008 [DEBUG] [Thread-119043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:25:53.055 [DEBUG] [Thread-119043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:25:53.055 [DEBUG] [Thread-119043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:25:53.064 [DEBUG] [Thread-119043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:25:53.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:25:53.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:25:53.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:25:53.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:25:53.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:25:53.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:25:53.099 [DEBUG] [Thread-119043] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:25:57.940 [DEBUG] [Thread-119046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:12.978 [DEBUG] [Thread-119047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:23.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:26:23.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:26:23.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:26:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 25, 57), 25.72, 17.69, 0.0, 6.9, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:26:23.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:25:57
2025-12-03T15:26:23.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:26:24.063 [DEBUG] [Thread-119048] [transport.py] [_log()] starting thread (client mode): 0xa27443a0
2025-12-03T15:26:24.063 [DEBUG] [Thread-119048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:26:24.083 [DEBUG] [Thread-119048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:26:24.083 [INFO] [Thread-119048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] client lang: <none>
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] server lang: <none>
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] kex follows: False
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:26:24.085 [DEBUG] [Thread-119048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:26:24.086 [DEBUG] [Thread-119048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:26:24.086 [DEBUG] [Thread-119048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:26:24.086 [DEBUG] [Thread-119048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:26:24.086 [DEBUG] [Thread-119048] [transport.py] [_log()] Compression: none
2025-12-03T15:26:24.086 [DEBUG] [Thread-119048] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:26:24.101 [DEBUG] [Thread-119048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:26:24.101 [DEBUG] [Thread-119048] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:26:24.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:26:24.102 [DEBUG] [Thread-119048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:26:24.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:26:24.104 [DEBUG] [Thread-119048] [transport.py] [_log()] userauth is OK
2025-12-03T15:26:24.105 [DEBUG] [Thread-119048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:26:24.105 [DEBUG] [Thread-119048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:26:24.105 [DEBUG] [Thread-119048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:26:24.105 [DEBUG] [Thread-119048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:26:24.130 [INFO] [Thread-119048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:26:24.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:26:24.764 [DEBUG] [Thread-119048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:26:24.764 [DEBUG] [Thread-119048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:26:24.764 [DEBUG] [Thread-119048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:26:24.805 [DEBUG] [Thread-119048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:26:24.805 [DEBUG] [Thread-119048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:26:24.808 [DEBUG] [Thread-119048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:26:24.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:26:24.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:26:24.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:26:24.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:26:24.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:26:24.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:26:24.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:26:24.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:26:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:26:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.559424 -999.00  +22.60  13.49     22   -0.10 1 1 1 1 1   888    0 23.43 31.57 ----- 13.5 13.5 127.2 17.2 30.3 -28.4 29.8 -29.0 31.0 -26.4 31.7 -27.3
2025-12-03T15:26:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:26:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:26:24.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.559424
2025-12-03T15:26:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:26:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:26:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:26:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:26:24.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:26:24.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:25:57', tmtdew=25.72, humidity=17.69, cloud=0.0, wind=6.9, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:25:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:26:24.834 [DEBUG] [Thread-119048] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:26:24.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:26:24.928 [DEBUG] [Thread-119051] [transport.py] [_log()] starting thread (client mode): 0xa27471f0
2025-12-03T15:26:24.928 [DEBUG] [Thread-119051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:26:24.945 [DEBUG] [Thread-119051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:26:24.945 [INFO] [Thread-119051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:26:24.953 [DEBUG] [Thread-119051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:26:24.953 [DEBUG] [Thread-119051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:26:24.953 [DEBUG] [Thread-119051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:26:24.953 [DEBUG] [Thread-119051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:24.953 [DEBUG] [Thread-119051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] client lang: <none>
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] server lang: <none>
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] kex follows: False
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:26:24.954 [DEBUG] [Thread-119051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:26:24.955 [DEBUG] [Thread-119051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:26:24.955 [DEBUG] [Thread-119051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:26:24.955 [DEBUG] [Thread-119051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:26:24.955 [DEBUG] [Thread-119051] [transport.py] [_log()] Compression: none
2025-12-03T15:26:24.955 [DEBUG] [Thread-119051] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:26:25.011 [DEBUG] [Thread-119051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:26:25.011 [DEBUG] [Thread-119051] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:26:25.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:26:25.013 [DEBUG] [Thread-119051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:26:25.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:26:25.070 [DEBUG] [Thread-119051] [transport.py] [_log()] userauth is OK
2025-12-03T15:26:25.070 [DEBUG] [Thread-119051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:26:25.070 [DEBUG] [Thread-119051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:26:25.070 [DEBUG] [Thread-119051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:26:25.071 [DEBUG] [Thread-119051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:26:25.090 [INFO] [Thread-119051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:26:25.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:26:25.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:26:25.963 [DEBUG] [Thread-119051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:26:25.963 [DEBUG] [Thread-119051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:26:26.011 [DEBUG] [Thread-119051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:26:26.012 [DEBUG] [Thread-119051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:26:26.021 [DEBUG] [Thread-119051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:26:26.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:26:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:26:26.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:26:26.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:26:26.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:26:26.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:26:26.058 [DEBUG] [Thread-119051] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:26:28.022 [DEBUG] [Thread-119053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:28.434 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:28.436 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:43.069 [DEBUG] [Thread-119054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:52.970 [DEBUG] [Thread-119055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:26:56.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:26:56.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:26:56.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 26, 29), 25.87, 17.53, 0.0, 7.31, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:26:56.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:26:29
2025-12-03T15:26:56.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:26:57.043 [DEBUG] [Thread-119056] [transport.py] [_log()] starting thread (client mode): 0xa517d3c0
2025-12-03T15:26:57.043 [DEBUG] [Thread-119056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:26:57.064 [DEBUG] [Thread-119056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:26:57.064 [INFO] [Thread-119056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] client lang: <none>
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] server lang: <none>
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] kex follows: False
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] Compression: none
2025-12-03T15:26:57.067 [DEBUG] [Thread-119056] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:26:57.086 [DEBUG] [Thread-119056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:26:57.086 [DEBUG] [Thread-119056] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:26:57.087 [DEBUG] [Thread-119056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:26:57.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:26:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:26:57.129 [DEBUG] [Thread-119056] [transport.py] [_log()] userauth is OK
2025-12-03T15:26:57.129 [DEBUG] [Thread-119056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:26:57.129 [DEBUG] [Thread-119056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:26:57.129 [DEBUG] [Thread-119056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:26:57.130 [DEBUG] [Thread-119056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:26:57.162 [INFO] [Thread-119056] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:26:57.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:26:57.978 [DEBUG] [Thread-119056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:26:57.978 [DEBUG] [Thread-119056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:26:57.978 [DEBUG] [Thread-119056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:26:58.019 [DEBUG] [Thread-119056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:26:58.019 [DEBUG] [Thread-119056] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:26:58.023 [DEBUG] [Thread-119056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:26:58.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:26:58.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:26:58.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:26:58.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:26:58.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:26:58.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:26:58.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:26:58.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.559771 -999.00  +22.60   6.26     21   -0.10 1 1 1 1 1   888    0 23.24 28.05 ----- 6.3 6.3 164.4 10.0 30.4 -28.3 29.9 -28.5 31.1 -27.1 31.8 -26.8
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.559771
2025-12-03T15:26:58.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:26:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:26:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:26:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:26:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:26:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:26:29', tmtdew=25.87, humidity=17.53, cloud=0.0, wind=7.31, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:26:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:26:58.050 [DEBUG] [Thread-119056] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:26:58.100 [DEBUG] [Thread-119059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:26:58.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:26:58.145 [DEBUG] [Thread-119060] [transport.py] [_log()] starting thread (client mode): 0xa5198a90
2025-12-03T15:26:58.145 [DEBUG] [Thread-119060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:26:58.160 [DEBUG] [Thread-119060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:26:58.160 [INFO] [Thread-119060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:26:58.168 [DEBUG] [Thread-119060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] client lang: <none>
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] server lang: <none>
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] kex follows: False
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] Compression: none
2025-12-03T15:26:58.169 [DEBUG] [Thread-119060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:26:58.227 [DEBUG] [Thread-119060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:26:58.228 [DEBUG] [Thread-119060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:26:58.228 [DEBUG] [Thread-119060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:26:58.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:26:58.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:26:58.283 [DEBUG] [Thread-119060] [transport.py] [_log()] userauth is OK
2025-12-03T15:26:58.284 [DEBUG] [Thread-119060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:26:58.284 [DEBUG] [Thread-119060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:26:58.284 [DEBUG] [Thread-119060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:26:58.284 [DEBUG] [Thread-119060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:26:58.303 [INFO] [Thread-119060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:26:58.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:26:58.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:26:59.196 [DEBUG] [Thread-119060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:26:59.196 [DEBUG] [Thread-119060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:26:59.243 [DEBUG] [Thread-119060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:26:59.244 [DEBUG] [Thread-119060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:26:59.252 [DEBUG] [Thread-119060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:26:59.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:26:59.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:26:59.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:26:59.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:26:59.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:26:59.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:26:59.286 [DEBUG] [Thread-119060] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:27:13.141 [DEBUG] [Thread-119062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:28.175 [DEBUG] [Thread-119063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:28.583 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:28.585 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:29.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:27:29.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:27:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:27:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 27, 1), 25.88, 17.09, 0.0, 9.93, 21.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:27:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:27:01
2025-12-03T15:27:30.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:27:30.257 [DEBUG] [Thread-119064] [transport.py] [_log()] starting thread (client mode): 0xa277ae90
2025-12-03T15:27:30.257 [DEBUG] [Thread-119064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:27:30.277 [DEBUG] [Thread-119064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:27:30.277 [INFO] [Thread-119064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] client lang: <none>
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] server lang: <none>
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] kex follows: False
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:27:30.278 [DEBUG] [Thread-119064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:27:30.279 [DEBUG] [Thread-119064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:27:30.279 [DEBUG] [Thread-119064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:27:30.279 [DEBUG] [Thread-119064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:27:30.279 [DEBUG] [Thread-119064] [transport.py] [_log()] Compression: none
2025-12-03T15:27:30.279 [DEBUG] [Thread-119064] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:27:30.296 [DEBUG] [Thread-119064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:27:30.296 [DEBUG] [Thread-119064] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:27:30.296 [DEBUG] [Thread-119064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:27:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:27:30.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:27:30.298 [DEBUG] [Thread-119064] [transport.py] [_log()] userauth is OK
2025-12-03T15:27:30.298 [DEBUG] [Thread-119064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:27:30.298 [DEBUG] [Thread-119064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:27:30.298 [DEBUG] [Thread-119064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:27:30.299 [DEBUG] [Thread-119064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:27:30.332 [INFO] [Thread-119064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:27:30.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:27:30.987 [DEBUG] [Thread-119064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:27:30.987 [DEBUG] [Thread-119064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:27:30.988 [DEBUG] [Thread-119064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:27:31.028 [DEBUG] [Thread-119064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:27:31.028 [DEBUG] [Thread-119064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:27:31.031 [DEBUG] [Thread-119064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:27:31.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:27:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:27:31.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:27:31.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:27:31.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:27:31.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:27:31.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:27:31.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:27:31.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:27:31.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.560118 -999.00  +22.70  10.79     21   -0.20 1 1 1 1 1   888    0 23.04 28.18 ----- 10.8 10.8 159.2 12.9 30.5 -28.9 29.9 -30.1 31.3 -26.9 32.0 -28.2
2025-12-03T15:27:31.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:27:31.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:27:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.560118
2025-12-03T15:27:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:27:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:27:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:27:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:27:31.056 [DEBUG] [Thread-119064] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:27:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:27:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:27:01', tmtdew=25.88, humidity=17.09, cloud=0.0, wind=9.93, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:26:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:27:31.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:27:31.163 [DEBUG] [Thread-119067] [transport.py] [_log()] starting thread (client mode): 0xa27450f0
2025-12-03T15:27:31.163 [DEBUG] [Thread-119067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:27:31.177 [DEBUG] [Thread-119067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:27:31.177 [INFO] [Thread-119067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:27:31.185 [DEBUG] [Thread-119067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:27:31.185 [DEBUG] [Thread-119067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:27:31.185 [DEBUG] [Thread-119067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:27:31.185 [DEBUG] [Thread-119067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] client lang: <none>
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] server lang: <none>
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] kex follows: False
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] Compression: none
2025-12-03T15:27:31.186 [DEBUG] [Thread-119067] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:27:31.245 [DEBUG] [Thread-119067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:27:31.246 [DEBUG] [Thread-119067] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:27:31.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:27:31.247 [DEBUG] [Thread-119067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:27:31.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:27:31.301 [DEBUG] [Thread-119067] [transport.py] [_log()] userauth is OK
2025-12-03T15:27:31.301 [DEBUG] [Thread-119067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:27:31.302 [DEBUG] [Thread-119067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:27:31.302 [DEBUG] [Thread-119067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:27:31.302 [DEBUG] [Thread-119067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:27:31.326 [INFO] [Thread-119067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:27:31.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:27:31.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:27:32.179 [DEBUG] [Thread-119067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:27:32.179 [DEBUG] [Thread-119067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:27:32.227 [DEBUG] [Thread-119067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:27:32.227 [DEBUG] [Thread-119067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:27:32.236 [DEBUG] [Thread-119067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:27:32.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:27:32.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:27:32.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:27:32.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:27:32.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:27:32.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:27:32.270 [DEBUG] [Thread-119067] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:27:43.210 [DEBUG] [Thread-119069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:53.016 [DEBUG] [Thread-119070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:27:58.256 [DEBUG] [Thread-119071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:28:02.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:28:02.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:28:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 27, 33), 25.85, 17.11, 0.0, 11.73, 21.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:28:02.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:27:33
2025-12-03T15:28:03.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:28:03.224 [DEBUG] [Thread-119072] [transport.py] [_log()] starting thread (client mode): 0xa27442b0
2025-12-03T15:28:03.224 [DEBUG] [Thread-119072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:28:03.244 [DEBUG] [Thread-119072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:28:03.244 [INFO] [Thread-119072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] client lang: <none>
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] server lang: <none>
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] kex follows: False
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] Compression: none
2025-12-03T15:28:03.248 [DEBUG] [Thread-119072] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:28:03.267 [DEBUG] [Thread-119072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:28:03.267 [DEBUG] [Thread-119072] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:28:03.268 [DEBUG] [Thread-119072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:28:03.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:28:03.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:28:03.269 [DEBUG] [Thread-119072] [transport.py] [_log()] userauth is OK
2025-12-03T15:28:03.269 [DEBUG] [Thread-119072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:28:03.269 [DEBUG] [Thread-119072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:28:03.270 [DEBUG] [Thread-119072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:28:03.270 [DEBUG] [Thread-119072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:28:03.291 [INFO] [Thread-119072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:28:03.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:28:04.066 [DEBUG] [Thread-119072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:28:04.067 [DEBUG] [Thread-119072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:28:04.067 [DEBUG] [Thread-119072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:28:04.108 [DEBUG] [Thread-119072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:28:04.108 [DEBUG] [Thread-119072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:28:04.112 [DEBUG] [Thread-119072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:28:04.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:28:04.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:28:04.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:28:04.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:28:04.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:28:04.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:28:04.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:28:04.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:28:04.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:28:04.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.560465 -999.00  +22.60   8.25     22   -0.10 1 1 1 1 1   888    0 23.36 29.65 ----- 8.2 8.2 133.6 12.5 30.5 -28.9 30.0 -28.7 31.4 -26.9 32.0 -28.7
2025-12-03T15:28:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:28:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:28:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.560465
2025-12-03T15:28:04.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:28:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:28:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:28:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:28:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:28:04.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:27:33', tmtdew=25.85, humidity=17.11, cloud=0.0, wind=11.73, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:27:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:28:04.135 [DEBUG] [Thread-119072] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:28:04.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:28:04.231 [DEBUG] [Thread-119075] [transport.py] [_log()] starting thread (client mode): 0xa2747850
2025-12-03T15:28:04.231 [DEBUG] [Thread-119075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:28:04.246 [DEBUG] [Thread-119075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:28:04.246 [INFO] [Thread-119075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:28:04.253 [DEBUG] [Thread-119075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] client lang: <none>
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] server lang: <none>
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] kex follows: False
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] Compression: none
2025-12-03T15:28:04.254 [DEBUG] [Thread-119075] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:28:04.312 [DEBUG] [Thread-119075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:28:04.313 [DEBUG] [Thread-119075] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:28:04.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:28:04.314 [DEBUG] [Thread-119075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:28:04.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:28:04.371 [DEBUG] [Thread-119075] [transport.py] [_log()] userauth is OK
2025-12-03T15:28:04.372 [DEBUG] [Thread-119075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:28:04.372 [DEBUG] [Thread-119075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:28:04.372 [DEBUG] [Thread-119075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:28:04.372 [DEBUG] [Thread-119075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:28:04.391 [INFO] [Thread-119075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:28:04.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:28:04.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:28:05.245 [DEBUG] [Thread-119075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:28:05.245 [DEBUG] [Thread-119075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:28:05.294 [DEBUG] [Thread-119075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:28:05.294 [DEBUG] [Thread-119075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:28:05.303 [DEBUG] [Thread-119075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:28:05.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:28:05.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:28:05.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:28:05.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:28:05.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:28:05.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:28:05.348 [DEBUG] [Thread-119075] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:28:13.289 [DEBUG] [Thread-119077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:28.342 [DEBUG] [Thread-119078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:28.724 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:28.725 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:35.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:28:35.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:28:35.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:28:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 28, 5), 25.87, 17.04, 0.0, 8.56, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:28:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:28:05
2025-12-03T15:28:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:28:36.309 [DEBUG] [Thread-119079] [transport.py] [_log()] starting thread (client mode): 0xa27c9840
2025-12-03T15:28:36.309 [DEBUG] [Thread-119079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:28:36.330 [DEBUG] [Thread-119079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:28:36.330 [INFO] [Thread-119079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:28:36.333 [DEBUG] [Thread-119079] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:28:36.333 [DEBUG] [Thread-119079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:28:36.333 [DEBUG] [Thread-119079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:28:36.333 [DEBUG] [Thread-119079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:36.333 [DEBUG] [Thread-119079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] client lang: <none>
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] server lang: <none>
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] kex follows: False
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] Compression: none
2025-12-03T15:28:36.334 [DEBUG] [Thread-119079] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:28:36.349 [DEBUG] [Thread-119079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:28:36.349 [DEBUG] [Thread-119079] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:28:36.349 [DEBUG] [Thread-119079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:28:36.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:28:36.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:28:36.350 [DEBUG] [Thread-119079] [transport.py] [_log()] userauth is OK
2025-12-03T15:28:36.350 [DEBUG] [Thread-119079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:28:36.350 [DEBUG] [Thread-119079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:28:36.350 [DEBUG] [Thread-119079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:28:36.351 [DEBUG] [Thread-119079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:28:36.380 [INFO] [Thread-119079] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:28:36.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:28:36.995 [DEBUG] [Thread-119079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:28:36.995 [DEBUG] [Thread-119079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:28:36.995 [DEBUG] [Thread-119079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:28:37.037 [DEBUG] [Thread-119079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:28:37.037 [DEBUG] [Thread-119079] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:28:37.039 [DEBUG] [Thread-119079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:28:37.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:28:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:28:37.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:28:37.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:28:37.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:28:37.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:28:37.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.560812 -999.00  +22.70   6.06     22   +0.00 1 1 1 1 1   888    0 23.35 29.43 ----- 6.1 6.1 148.0 11.2 30.6 -29.1 30.1 -28.6 31.6 -26.8 32.2 -27.3
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.560812
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:28:37.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:28:05', tmtdew=25.87, humidity=17.04, cloud=0.0, wind=8.56, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:27:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:28:37.061 [DEBUG] [Thread-119079] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:28:37.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:28:37.147 [DEBUG] [Thread-119082] [transport.py] [_log()] starting thread (client mode): 0xa2779210
2025-12-03T15:28:37.148 [DEBUG] [Thread-119082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:28:37.162 [DEBUG] [Thread-119082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:28:37.162 [INFO] [Thread-119082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] client lang: <none>
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] server lang: <none>
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] kex follows: False
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] Compression: none
2025-12-03T15:28:37.170 [DEBUG] [Thread-119082] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:28:37.227 [DEBUG] [Thread-119082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:28:37.227 [DEBUG] [Thread-119082] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:28:37.227 [DEBUG] [Thread-119082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:28:37.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:28:37.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:28:37.284 [DEBUG] [Thread-119082] [transport.py] [_log()] userauth is OK
2025-12-03T15:28:37.284 [DEBUG] [Thread-119082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:28:37.284 [DEBUG] [Thread-119082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:28:37.284 [DEBUG] [Thread-119082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:28:37.284 [DEBUG] [Thread-119082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:28:37.298 [INFO] [Thread-119082] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:28:37.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:28:37.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:28:38.139 [DEBUG] [Thread-119082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:28:38.139 [DEBUG] [Thread-119082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:28:38.187 [DEBUG] [Thread-119082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:28:38.187 [DEBUG] [Thread-119082] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:28:38.195 [DEBUG] [Thread-119082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:28:38.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:28:38.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:28:38.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:28:38.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:28:38.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:28:38.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:28:38.227 [DEBUG] [Thread-119082] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:28:43.377 [DEBUG] [Thread-119084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:53.054 [DEBUG] [Thread-119085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:28:58.435 [DEBUG] [Thread-119086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:29:08.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:29:08.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:29:08.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 28, 37), 25.97, 17.13, 0.0, 13.32, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:29:08.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:28:37
2025-12-03T15:29:09.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:29:09.187 [DEBUG] [Thread-119087] [transport.py] [_log()] starting thread (client mode): 0xa2747520
2025-12-03T15:29:09.187 [DEBUG] [Thread-119087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:29:09.208 [DEBUG] [Thread-119087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:29:09.208 [INFO] [Thread-119087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] client lang: <none>
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] server lang: <none>
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] kex follows: False
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:29:09.211 [DEBUG] [Thread-119087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:29:09.212 [DEBUG] [Thread-119087] [transport.py] [_log()] Compression: none
2025-12-03T15:29:09.212 [DEBUG] [Thread-119087] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:29:09.227 [DEBUG] [Thread-119087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:29:09.228 [DEBUG] [Thread-119087] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:29:09.228 [DEBUG] [Thread-119087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:29:09.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:29:09.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:29:09.230 [DEBUG] [Thread-119087] [transport.py] [_log()] userauth is OK
2025-12-03T15:29:09.230 [DEBUG] [Thread-119087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:29:09.230 [DEBUG] [Thread-119087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:29:09.230 [DEBUG] [Thread-119087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:29:09.231 [DEBUG] [Thread-119087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:29:09.266 [INFO] [Thread-119087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:29:09.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:29:10.071 [DEBUG] [Thread-119087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:29:10.071 [DEBUG] [Thread-119087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:29:10.071 [DEBUG] [Thread-119087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:29:10.112 [DEBUG] [Thread-119087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:29:10.113 [DEBUG] [Thread-119087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:29:10.115 [DEBUG] [Thread-119087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:29:10.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:29:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:29:10.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:29:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:29:10.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:29:10.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:29:10.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:29:10.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:29:10.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.561507 -999.00  +23.00  13.67     21   +0.00 1 1 1 1 1   888    0 23.28 26.29 ----- 13.7 13.7 180.0 17.7 30.5 -29.4 30.0 -32.9 31.6 -27.7 32.4 -30.0
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.561507
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:29:10.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:28:37', tmtdew=25.97, humidity=17.13, cloud=0.0, wind=13.32, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:28:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:29:10.133 [DEBUG] [Thread-119087] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:29:10.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:29:10.219 [DEBUG] [Thread-119090] [transport.py] [_log()] starting thread (client mode): 0xa27ca620
2025-12-03T15:29:10.219 [DEBUG] [Thread-119090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:29:10.235 [DEBUG] [Thread-119090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:29:10.235 [INFO] [Thread-119090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:10.242 [DEBUG] [Thread-119090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] client lang: <none>
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] server lang: <none>
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] kex follows: False
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] Compression: none
2025-12-03T15:29:10.243 [DEBUG] [Thread-119090] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:29:10.301 [DEBUG] [Thread-119090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:29:10.301 [DEBUG] [Thread-119090] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:29:10.301 [DEBUG] [Thread-119090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:29:10.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:29:10.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:29:10.358 [DEBUG] [Thread-119090] [transport.py] [_log()] userauth is OK
2025-12-03T15:29:10.358 [DEBUG] [Thread-119090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:29:10.358 [DEBUG] [Thread-119090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:29:10.358 [DEBUG] [Thread-119090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:29:10.358 [DEBUG] [Thread-119090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:29:10.371 [INFO] [Thread-119090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:29:10.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:29:10.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:29:11.257 [DEBUG] [Thread-119090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:29:11.257 [DEBUG] [Thread-119090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:29:11.304 [DEBUG] [Thread-119090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:29:11.304 [DEBUG] [Thread-119090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:29:11.313 [DEBUG] [Thread-119090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:29:11.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:29:11.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:29:11.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:29:11.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:29:11.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:29:11.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:29:11.344 [DEBUG] [Thread-119090] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:29:13.470 [DEBUG] [Thread-119092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:28.519 [DEBUG] [Thread-119093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:28.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:28.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:29:41.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:29:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:29:42.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 29, 9), 25.57, 17.61, 0.0, 15.83, 21.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:29:42.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:29:09
2025-12-03T15:29:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:29:42.306 [DEBUG] [Thread-119094] [transport.py] [_log()] starting thread (client mode): 0xa2779930
2025-12-03T15:29:42.306 [DEBUG] [Thread-119094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:29:42.326 [DEBUG] [Thread-119094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:29:42.326 [INFO] [Thread-119094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:29:42.329 [DEBUG] [Thread-119094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] client lang: <none>
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] server lang: <none>
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] kex follows: False
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] Compression: none
2025-12-03T15:29:42.330 [DEBUG] [Thread-119094] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:29:42.344 [DEBUG] [Thread-119094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:29:42.344 [DEBUG] [Thread-119094] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:29:42.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:29:42.344 [DEBUG] [Thread-119094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:29:42.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:29:42.345 [DEBUG] [Thread-119094] [transport.py] [_log()] userauth is OK
2025-12-03T15:29:42.345 [DEBUG] [Thread-119094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:29:42.345 [DEBUG] [Thread-119094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:29:42.345 [DEBUG] [Thread-119094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:29:42.345 [DEBUG] [Thread-119094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:29:42.372 [INFO] [Thread-119094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:29:42.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:29:43.034 [DEBUG] [Thread-119094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:29:43.034 [DEBUG] [Thread-119094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:29:43.034 [DEBUG] [Thread-119094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:29:43.075 [DEBUG] [Thread-119094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:29:43.075 [DEBUG] [Thread-119094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:29:43.078 [DEBUG] [Thread-119094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:29:43.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:29:43.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:29:43.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:29:43.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:29:43.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:29:43.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:29:43.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:29:43.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:29:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:29:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.561854 -999.00  +23.00  16.04     21   -0.10 1 1 1 1 1   888    0 22.77 26.44 ----- 16.0 16.0 163.8 21.2 30.4 -29.7 29.8 -33.2 31.5 -28.6 32.3 -30.8
2025-12-03T15:29:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.561854
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:29:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:29:09', tmtdew=25.57, humidity=17.61, cloud=0.0, wind=15.83, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:29:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:29:43.094 [DEBUG] [Thread-119094] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:29:43.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:29:43.179 [DEBUG] [Thread-119097] [transport.py] [_log()] starting thread (client mode): 0xa277a4d0
2025-12-03T15:29:43.179 [DEBUG] [Thread-119097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:29:43.194 [DEBUG] [Thread-119097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:29:43.194 [INFO] [Thread-119097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] client lang: <none>
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] server lang: <none>
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] kex follows: False
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:29:43.201 [DEBUG] [Thread-119097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:29:43.202 [DEBUG] [Thread-119097] [transport.py] [_log()] Compression: none
2025-12-03T15:29:43.202 [DEBUG] [Thread-119097] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:29:43.258 [DEBUG] [Thread-119097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:29:43.258 [DEBUG] [Thread-119097] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:29:43.258 [DEBUG] [Thread-119097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:29:43.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:29:43.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:29:43.315 [DEBUG] [Thread-119097] [transport.py] [_log()] userauth is OK
2025-12-03T15:29:43.315 [DEBUG] [Thread-119097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:29:43.315 [DEBUG] [Thread-119097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:29:43.315 [DEBUG] [Thread-119097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:29:43.316 [DEBUG] [Thread-119097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:29:43.333 [INFO] [Thread-119097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:29:43.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:29:43.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:29:43.556 [DEBUG] [Thread-119099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:44.169 [DEBUG] [Thread-119097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:29:44.169 [DEBUG] [Thread-119097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:29:44.217 [DEBUG] [Thread-119097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:29:44.218 [DEBUG] [Thread-119097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:29:44.227 [DEBUG] [Thread-119097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:29:44.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:29:44.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:29:44.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:29:44.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:29:44.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:29:44.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:29:44.270 [DEBUG] [Thread-119097] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:29:53.082 [DEBUG] [Thread-119100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:29:58.603 [DEBUG] [Thread-119101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:13.643 [DEBUG] [Thread-119102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:14.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:30:14.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:30:14.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:30:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 29, 41), 26.03, 17.37, 0.0, 14.57, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:30:15.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:29:41
2025-12-03T15:30:15.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:30:15.313 [DEBUG] [Thread-119103] [transport.py] [_log()] starting thread (client mode): 0xa277a1d0
2025-12-03T15:30:15.313 [DEBUG] [Thread-119103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:30:15.332 [DEBUG] [Thread-119103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:30:15.332 [INFO] [Thread-119103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] client lang: <none>
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] server lang: <none>
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] kex follows: False
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] Compression: none
2025-12-03T15:30:15.336 [DEBUG] [Thread-119103] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:30:15.351 [DEBUG] [Thread-119103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:30:15.351 [DEBUG] [Thread-119103] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:30:15.351 [DEBUG] [Thread-119103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:30:15.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:30:15.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:30:15.352 [DEBUG] [Thread-119103] [transport.py] [_log()] userauth is OK
2025-12-03T15:30:15.352 [DEBUG] [Thread-119103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:30:15.352 [DEBUG] [Thread-119103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:30:15.352 [DEBUG] [Thread-119103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:30:15.352 [DEBUG] [Thread-119103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:30:15.361 [INFO] [Thread-119103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:30:15.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:30:16.436 [DEBUG] [Thread-119103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:30:16.436 [DEBUG] [Thread-119103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:30:16.436 [DEBUG] [Thread-119103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:30:16.478 [DEBUG] [Thread-119103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:30:16.478 [DEBUG] [Thread-119103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:30:16.481 [DEBUG] [Thread-119103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:30:16.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:30:16.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:30:16.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:30:16.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:30:16.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:30:16.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:30:16.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:30:16.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:30:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:30:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.562201 -999.00  +23.00  12.72     21   +0.00 1 1 1 1 1   888    0 23.00 25.66 ----- 12.7 12.7 167.5 19.6 30.4 -30.9 29.7 -32.4 31.5 -27.9 32.2 -29.4
2025-12-03T15:30:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:30:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:30:16.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.562201
2025-12-03T15:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:30:16.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:30:16.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:29:41', tmtdew=26.03, humidity=17.37, cloud=0.0, wind=14.57, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:29:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:30:16.509 [DEBUG] [Thread-119103] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:30:16.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:30:16.604 [DEBUG] [Thread-119106] [transport.py] [_log()] starting thread (client mode): 0xa2761540
2025-12-03T15:30:16.604 [DEBUG] [Thread-119106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:30:16.618 [DEBUG] [Thread-119106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:30:16.618 [INFO] [Thread-119106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:30:16.625 [DEBUG] [Thread-119106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:30:16.625 [DEBUG] [Thread-119106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] client lang: <none>
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] server lang: <none>
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] kex follows: False
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] Compression: none
2025-12-03T15:30:16.626 [DEBUG] [Thread-119106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:30:16.685 [DEBUG] [Thread-119106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:30:16.686 [DEBUG] [Thread-119106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:30:16.687 [DEBUG] [Thread-119106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:30:16.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:30:16.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:30:16.744 [DEBUG] [Thread-119106] [transport.py] [_log()] userauth is OK
2025-12-03T15:30:16.744 [DEBUG] [Thread-119106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:30:16.744 [DEBUG] [Thread-119106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:30:16.745 [DEBUG] [Thread-119106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:30:16.745 [DEBUG] [Thread-119106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:30:16.763 [INFO] [Thread-119106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:30:16.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:30:16.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:30:17.581 [DEBUG] [Thread-119106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:30:17.582 [DEBUG] [Thread-119106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:30:17.630 [DEBUG] [Thread-119106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:30:17.630 [DEBUG] [Thread-119106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:30:17.640 [DEBUG] [Thread-119106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:30:17.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:30:17.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:30:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:30:17.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:30:17.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:30:17.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:30:17.677 [DEBUG] [Thread-119106] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:30:28.680 [DEBUG] [Thread-119108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:29.010 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:29.011 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:43.734 [DEBUG] [Thread-119109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:47.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:30:47.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:30:47.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:30:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 30, 13), 26.14, 17.23, 0.0, 11.88, 21.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:30:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:30:13
2025-12-03T15:30:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:30:48.665 [DEBUG] [Thread-119110] [transport.py] [_log()] starting thread (client mode): 0xa2762770
2025-12-03T15:30:48.665 [DEBUG] [Thread-119110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:30:48.685 [DEBUG] [Thread-119110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:30:48.686 [INFO] [Thread-119110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] client lang: <none>
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] server lang: <none>
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] kex follows: False
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:30:48.687 [DEBUG] [Thread-119110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:30:48.688 [DEBUG] [Thread-119110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:30:48.688 [DEBUG] [Thread-119110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:30:48.688 [DEBUG] [Thread-119110] [transport.py] [_log()] Compression: none
2025-12-03T15:30:48.688 [DEBUG] [Thread-119110] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:30:48.695 [DEBUG] [Thread-119110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:30:48.696 [DEBUG] [Thread-119110] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:30:48.696 [DEBUG] [Thread-119110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:30:48.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:30:48.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:30:48.698 [DEBUG] [Thread-119110] [transport.py] [_log()] userauth is OK
2025-12-03T15:30:48.698 [DEBUG] [Thread-119110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:30:48.698 [DEBUG] [Thread-119110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:30:48.698 [DEBUG] [Thread-119110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:30:48.698 [DEBUG] [Thread-119110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:30:48.733 [INFO] [Thread-119110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:30:48.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:30:49.341 [DEBUG] [Thread-119110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:30:49.341 [DEBUG] [Thread-119110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:30:49.342 [DEBUG] [Thread-119110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:30:49.382 [DEBUG] [Thread-119110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:30:49.382 [DEBUG] [Thread-119110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:30:49.386 [DEBUG] [Thread-119110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:30:49.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:30:49.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:30:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:30:49.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:30:49.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:30:49.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:30:49.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:30:49.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:30:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:30:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.562548 -999.00  +22.90  21.23     21   -0.00 1 1 1 1 1   888    0 23.17 26.07 ----- 21.2 21.2 192.0 23.2 30.0 -31.4 29.6 -30.1 31.4 -29.9 32.1 -30.6
2025-12-03T15:30:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:30:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:30:49.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.562548
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:30:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:30:13', tmtdew=26.14, humidity=17.23, cloud=0.0, wind=11.88, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:30:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:30:49.416 [DEBUG] [Thread-119110] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:30:49.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:30:49.514 [DEBUG] [Thread-119113] [transport.py] [_log()] starting thread (client mode): 0xa2753ca0
2025-12-03T15:30:49.514 [DEBUG] [Thread-119113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:30:49.528 [DEBUG] [Thread-119113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:30:49.529 [INFO] [Thread-119113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:49.536 [DEBUG] [Thread-119113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] client lang: <none>
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] server lang: <none>
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] kex follows: False
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] Compression: none
2025-12-03T15:30:49.537 [DEBUG] [Thread-119113] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:30:49.594 [DEBUG] [Thread-119113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:30:49.595 [DEBUG] [Thread-119113] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:30:49.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:30:49.596 [DEBUG] [Thread-119113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:30:49.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:30:49.650 [DEBUG] [Thread-119113] [transport.py] [_log()] userauth is OK
2025-12-03T15:30:49.651 [DEBUG] [Thread-119113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:30:49.651 [DEBUG] [Thread-119113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:30:49.651 [DEBUG] [Thread-119113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:30:49.651 [DEBUG] [Thread-119113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:30:49.669 [INFO] [Thread-119113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:30:49.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:30:49.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:30:50.525 [DEBUG] [Thread-119113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:30:50.525 [DEBUG] [Thread-119113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:30:50.573 [DEBUG] [Thread-119113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:30:50.574 [DEBUG] [Thread-119113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:30:50.583 [DEBUG] [Thread-119113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:30:50.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:30:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:30:50.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:30:50.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:30:50.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:30:50.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:30:50.617 [DEBUG] [Thread-119113] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:30:53.137 [DEBUG] [Thread-119115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:30:58.771 [DEBUG] [Thread-119116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:13.815 [DEBUG] [Thread-119117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:31:20.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:31:20.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:31:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 31, 17), 26.0, 17.27, 0.0, 11.61, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:31:21.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:31:17
2025-12-03T15:31:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:31:21.583 [DEBUG] [Thread-119118] [transport.py] [_log()] starting thread (client mode): 0xa27cbaf0
2025-12-03T15:31:21.583 [DEBUG] [Thread-119118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:31:21.603 [DEBUG] [Thread-119118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:31:21.603 [INFO] [Thread-119118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] client lang: <none>
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] server lang: <none>
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] kex follows: False
2025-12-03T15:31:21.606 [DEBUG] [Thread-119118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] Compression: none
2025-12-03T15:31:21.607 [DEBUG] [Thread-119118] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:31:21.624 [DEBUG] [Thread-119118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:31:21.625 [DEBUG] [Thread-119118] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:31:21.626 [DEBUG] [Thread-119118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:31:21.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:31:21.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:31:21.627 [DEBUG] [Thread-119118] [transport.py] [_log()] userauth is OK
2025-12-03T15:31:21.628 [DEBUG] [Thread-119118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:31:21.628 [DEBUG] [Thread-119118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:31:21.628 [DEBUG] [Thread-119118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:31:21.628 [DEBUG] [Thread-119118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:31:21.645 [INFO] [Thread-119118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:31:21.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:31:22.426 [DEBUG] [Thread-119118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:31:22.426 [DEBUG] [Thread-119118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:31:22.426 [DEBUG] [Thread-119118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:31:22.467 [DEBUG] [Thread-119118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:31:22.467 [DEBUG] [Thread-119118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:31:22.470 [DEBUG] [Thread-119118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:31:22.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:31:22.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:31:22.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:31:22.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:31:22.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:31:22.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:31:22.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:31:22.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:31:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:31:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.562896 -999.00  +22.60  10.50     21   -0.20 1 1 1 1 1   888    0 23.00 24.16 ----- 10.5 10.5 181.5 20.3 30.1 -29.5 29.2 -33.5 31.2 -29.0 31.9 -29.8
2025-12-03T15:31:22.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:31:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:31:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.562896
2025-12-03T15:31:22.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:31:22.494 [DEBUG] [Thread-119118] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:31:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:31:22.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:31:22.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:31:22.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:31:22.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:31:17', tmtdew=26.0, humidity=17.27, cloud=0.0, wind=11.61, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:30:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:31:22.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:31:22.590 [DEBUG] [Thread-119121] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T15:31:22.590 [DEBUG] [Thread-119121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:31:22.605 [DEBUG] [Thread-119121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:31:22.605 [INFO] [Thread-119121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] client lang: <none>
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] server lang: <none>
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] kex follows: False
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:31:22.613 [DEBUG] [Thread-119121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:31:22.614 [DEBUG] [Thread-119121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:31:22.614 [DEBUG] [Thread-119121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:31:22.614 [DEBUG] [Thread-119121] [transport.py] [_log()] Compression: none
2025-12-03T15:31:22.614 [DEBUG] [Thread-119121] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:31:22.671 [DEBUG] [Thread-119121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:31:22.672 [DEBUG] [Thread-119121] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:31:22.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:31:22.673 [DEBUG] [Thread-119121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:31:22.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:31:22.727 [DEBUG] [Thread-119121] [transport.py] [_log()] userauth is OK
2025-12-03T15:31:22.728 [DEBUG] [Thread-119121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:31:22.728 [DEBUG] [Thread-119121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:31:22.728 [DEBUG] [Thread-119121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:31:22.728 [DEBUG] [Thread-119121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:31:22.746 [INFO] [Thread-119121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:31:22.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:31:22.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:31:23.585 [DEBUG] [Thread-119121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:31:23.585 [DEBUG] [Thread-119121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:31:23.633 [DEBUG] [Thread-119121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:31:23.633 [DEBUG] [Thread-119121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:31:23.642 [DEBUG] [Thread-119121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:31:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:31:23.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:31:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:31:23.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:31:23.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:31:23.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:31:23.679 [DEBUG] [Thread-119121] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:31:28.845 [DEBUG] [Thread-119123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:29.149 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:29.151 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:43.899 [DEBUG] [Thread-119124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:53.166 [DEBUG] [Thread-119125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:31:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:31:53.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:31:53.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:31:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 31, 49), 25.59, 17.56, 0.0, 16.48, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:31:54.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:31:49
2025-12-03T15:31:54.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:31:54.656 [DEBUG] [Thread-119126] [transport.py] [_log()] starting thread (client mode): 0xa517e0e0
2025-12-03T15:31:54.656 [DEBUG] [Thread-119126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:31:54.676 [DEBUG] [Thread-119126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:31:54.676 [INFO] [Thread-119126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] client lang: <none>
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] server lang: <none>
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] kex follows: False
2025-12-03T15:31:54.679 [DEBUG] [Thread-119126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] Compression: none
2025-12-03T15:31:54.680 [DEBUG] [Thread-119126] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:31:54.697 [DEBUG] [Thread-119126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:31:54.697 [DEBUG] [Thread-119126] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:31:54.697 [DEBUG] [Thread-119126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:31:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:31:54.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:31:54.698 [DEBUG] [Thread-119126] [transport.py] [_log()] userauth is OK
2025-12-03T15:31:54.698 [DEBUG] [Thread-119126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:31:54.698 [DEBUG] [Thread-119126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:31:54.698 [DEBUG] [Thread-119126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:31:54.698 [DEBUG] [Thread-119126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:31:54.707 [INFO] [Thread-119126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:31:54.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:31:55.337 [DEBUG] [Thread-119126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:31:55.337 [DEBUG] [Thread-119126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:31:55.337 [DEBUG] [Thread-119126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:31:55.378 [DEBUG] [Thread-119126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:31:55.378 [DEBUG] [Thread-119126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:31:55.381 [DEBUG] [Thread-119126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:31:55.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:31:55.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:31:55.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:31:55.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:31:55.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:31:55.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:31:55.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.563243 -999.00  +22.50  12.55     22   -0.10 1 1 1 1 1   888    0 23.05 21.02 ----- 12.6 12.6 184.2 20.8 29.9 -30.5 29.2 -35.5 31.2 -28.9 32.0 -30.1
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.563243
2025-12-03T15:31:55.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:31:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:31:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:31:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:31:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:31:55.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:31:49', tmtdew=25.59, humidity=17.56, cloud=0.0, wind=16.48, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:31:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:31:55.400 [DEBUG] [Thread-119126] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:31:55.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:31:55.487 [DEBUG] [Thread-119129] [transport.py] [_log()] starting thread (client mode): 0xa277a740
2025-12-03T15:31:55.487 [DEBUG] [Thread-119129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:31:55.502 [DEBUG] [Thread-119129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:31:55.502 [INFO] [Thread-119129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] client lang: <none>
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] server lang: <none>
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] kex follows: False
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] Compression: none
2025-12-03T15:31:55.509 [DEBUG] [Thread-119129] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:31:55.569 [DEBUG] [Thread-119129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:31:55.569 [DEBUG] [Thread-119129] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:31:55.570 [DEBUG] [Thread-119129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:31:55.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:31:55.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:31:55.625 [DEBUG] [Thread-119129] [transport.py] [_log()] userauth is OK
2025-12-03T15:31:55.625 [DEBUG] [Thread-119129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:31:55.625 [DEBUG] [Thread-119129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:31:55.625 [DEBUG] [Thread-119129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:31:55.626 [DEBUG] [Thread-119129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:31:55.645 [INFO] [Thread-119129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:31:55.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:31:55.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:31:56.469 [DEBUG] [Thread-119129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:31:56.469 [DEBUG] [Thread-119129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:31:56.517 [DEBUG] [Thread-119129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:31:56.518 [DEBUG] [Thread-119129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:31:56.527 [DEBUG] [Thread-119129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:31:56.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:31:56.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:31:56.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:31:56.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:31:56.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:31:56.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:31:56.564 [DEBUG] [Thread-119129] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:31:58.936 [DEBUG] [Thread-119131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:13.989 [DEBUG] [Thread-119132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:32:26.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:32:26.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:32:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 32, 21), 25.74, 17.42, 0.0, 17.47, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:32:27.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:32:21
2025-12-03T15:32:27.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:32:27.562 [DEBUG] [Thread-119133] [transport.py] [_log()] starting thread (client mode): 0xa2753040
2025-12-03T15:32:27.562 [DEBUG] [Thread-119133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:32:27.582 [DEBUG] [Thread-119133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:32:27.582 [INFO] [Thread-119133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:32:27.585 [DEBUG] [Thread-119133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] client lang: <none>
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] server lang: <none>
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] kex follows: False
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] Compression: none
2025-12-03T15:32:27.586 [DEBUG] [Thread-119133] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:32:27.601 [DEBUG] [Thread-119133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:32:27.601 [DEBUG] [Thread-119133] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:32:27.601 [DEBUG] [Thread-119133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:32:27.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:32:27.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:32:27.602 [DEBUG] [Thread-119133] [transport.py] [_log()] userauth is OK
2025-12-03T15:32:27.602 [DEBUG] [Thread-119133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:32:27.602 [DEBUG] [Thread-119133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:32:27.602 [DEBUG] [Thread-119133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:32:27.602 [DEBUG] [Thread-119133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:32:27.611 [INFO] [Thread-119133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:32:27.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:32:28.414 [DEBUG] [Thread-119133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:32:28.414 [DEBUG] [Thread-119133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:32:28.414 [DEBUG] [Thread-119133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:32:28.455 [DEBUG] [Thread-119133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:32:28.455 [DEBUG] [Thread-119133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:32:28.458 [DEBUG] [Thread-119133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:32:28.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:32:28.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:32:28.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:32:28.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:32:28.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:32:28.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:32:28.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.563590 -999.00  +22.50  15.96     22   +0.00 1 1 1 1 1   888    0 22.68 17.94 ----- 16.0 16.0 174.2 18.6 29.8 -31.0 29.1 -31.7 31.1 -28.2 31.7 -30.2
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.563590
2025-12-03T15:32:28.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:32:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:32:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:32:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:32:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:32:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:32:21', tmtdew=25.74, humidity=17.42, cloud=0.0, wind=17.47, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:31:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:32:28.477 [DEBUG] [Thread-119133] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:32:28.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:32:28.563 [DEBUG] [Thread-119136] [transport.py] [_log()] starting thread (client mode): 0xa517ff10
2025-12-03T15:32:28.563 [DEBUG] [Thread-119136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:32:28.579 [DEBUG] [Thread-119136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:32:28.579 [INFO] [Thread-119136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] client lang: <none>
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] server lang: <none>
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] kex follows: False
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:32:28.586 [DEBUG] [Thread-119136] [transport.py] [_log()] Compression: none
2025-12-03T15:32:28.587 [DEBUG] [Thread-119136] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:32:28.645 [DEBUG] [Thread-119136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:32:28.645 [DEBUG] [Thread-119136] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:32:28.646 [DEBUG] [Thread-119136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:32:28.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:32:28.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:32:28.701 [DEBUG] [Thread-119136] [transport.py] [_log()] userauth is OK
2025-12-03T15:32:28.701 [DEBUG] [Thread-119136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:32:28.701 [DEBUG] [Thread-119136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:32:28.701 [DEBUG] [Thread-119136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:32:28.701 [DEBUG] [Thread-119136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:32:28.719 [INFO] [Thread-119136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:32:28.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:32:28.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:32:29.021 [DEBUG] [Thread-119138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:29.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:29.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:29.602 [DEBUG] [Thread-119136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:32:29.603 [DEBUG] [Thread-119136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:32:29.650 [DEBUG] [Thread-119136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:32:29.650 [DEBUG] [Thread-119136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:32:29.658 [DEBUG] [Thread-119136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:32:29.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:32:29.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:32:29.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:32:29.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:32:29.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:32:29.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:32:29.690 [DEBUG] [Thread-119136] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:32:44.059 [DEBUG] [Thread-119139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:53.212 [DEBUG] [Thread-119140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:59.095 [DEBUG] [Thread-119141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:32:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:32:59.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:32:59.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:33:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 32, 53), 25.9, 17.53, 0.0, 11.72, 21.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:33:00.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:32:53
2025-12-03T15:33:00.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:33:00.665 [DEBUG] [Thread-119142] [transport.py] [_log()] starting thread (client mode): 0xa27507c0
2025-12-03T15:33:00.665 [DEBUG] [Thread-119142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:33:00.686 [DEBUG] [Thread-119142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:33:00.686 [INFO] [Thread-119142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] client lang: <none>
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] server lang: <none>
2025-12-03T15:33:00.690 [DEBUG] [Thread-119142] [transport.py] [_log()] kex follows: False
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] Compression: none
2025-12-03T15:33:00.691 [DEBUG] [Thread-119142] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:33:00.710 [DEBUG] [Thread-119142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:33:00.711 [DEBUG] [Thread-119142] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:33:00.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:33:00.712 [DEBUG] [Thread-119142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:33:00.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:33:00.715 [DEBUG] [Thread-119142] [transport.py] [_log()] userauth is OK
2025-12-03T15:33:00.715 [DEBUG] [Thread-119142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:33:00.715 [DEBUG] [Thread-119142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:33:00.715 [DEBUG] [Thread-119142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:33:00.715 [DEBUG] [Thread-119142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:33:00.739 [INFO] [Thread-119142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:33:00.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:33:01.406 [DEBUG] [Thread-119142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:33:01.406 [DEBUG] [Thread-119142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:33:01.407 [DEBUG] [Thread-119142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:33:01.447 [DEBUG] [Thread-119142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:33:01.447 [DEBUG] [Thread-119142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:33:01.451 [DEBUG] [Thread-119142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:33:01.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:33:01.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:33:01.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:33:01.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:33:01.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:33:01.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:33:01.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:33:01.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:33:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:33:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.563937 -999.00  +22.50  12.16     22   +0.00 1 1 1 1 1   888    0 22.71 13.86 ----- 12.2 12.2 187.7 18.7 29.8 -29.8 29.0 -35.4 31.1 -28.7 31.7 -29.4
2025-12-03T15:33:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:33:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:33:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.563937
2025-12-03T15:33:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:33:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:33:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:33:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:33:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:33:01.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:32:53', tmtdew=25.9, humidity=17.53, cloud=0.0, wind=11.72, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:32:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:33:01.477 [DEBUG] [Thread-119142] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:33:01.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:33:01.572 [DEBUG] [Thread-119145] [transport.py] [_log()] starting thread (client mode): 0xa2761de0
2025-12-03T15:33:01.572 [DEBUG] [Thread-119145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:33:01.587 [DEBUG] [Thread-119145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:33:01.587 [INFO] [Thread-119145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:33:01.594 [DEBUG] [Thread-119145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:33:01.595 [DEBUG] [Thread-119145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] client lang: <none>
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] server lang: <none>
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] kex follows: False
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:33:01.596 [DEBUG] [Thread-119145] [transport.py] [_log()] Compression: none
2025-12-03T15:33:01.597 [DEBUG] [Thread-119145] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:33:01.655 [DEBUG] [Thread-119145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:33:01.656 [DEBUG] [Thread-119145] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:33:01.657 [DEBUG] [Thread-119145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:33:01.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:33:01.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:33:01.711 [DEBUG] [Thread-119145] [transport.py] [_log()] userauth is OK
2025-12-03T15:33:01.712 [DEBUG] [Thread-119145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:33:01.712 [DEBUG] [Thread-119145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:33:01.713 [DEBUG] [Thread-119145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:33:01.713 [DEBUG] [Thread-119145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:33:01.731 [INFO] [Thread-119145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:33:01.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:33:01.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:33:02.579 [DEBUG] [Thread-119145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:33:02.579 [DEBUG] [Thread-119145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:33:02.627 [DEBUG] [Thread-119145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:33:02.627 [DEBUG] [Thread-119145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:33:02.637 [DEBUG] [Thread-119145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:33:02.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:33:02.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:33:02.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:33:02.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:33:02.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:33:02.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:33:02.674 [DEBUG] [Thread-119145] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:33:14.127 [DEBUG] [Thread-119147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:29.181 [DEBUG] [Thread-119148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:29.432 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:29.434 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:32.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:33:32.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:33:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:33:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 33, 25), 26.1, 17.33, 0.0, 14.06, 22.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:33:33.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:33:25
2025-12-03T15:33:33.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:33:33.648 [DEBUG] [Thread-119149] [transport.py] [_log()] starting thread (client mode): 0xa517ce20
2025-12-03T15:33:33.648 [DEBUG] [Thread-119149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:33:33.668 [DEBUG] [Thread-119149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:33:33.668 [INFO] [Thread-119149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] client lang: <none>
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] server lang: <none>
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] kex follows: False
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:33:33.669 [DEBUG] [Thread-119149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:33:33.670 [DEBUG] [Thread-119149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:33:33.670 [DEBUG] [Thread-119149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:33:33.670 [DEBUG] [Thread-119149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:33:33.670 [DEBUG] [Thread-119149] [transport.py] [_log()] Compression: none
2025-12-03T15:33:33.670 [DEBUG] [Thread-119149] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:33:33.677 [DEBUG] [Thread-119149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:33:33.678 [DEBUG] [Thread-119149] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:33:33.678 [DEBUG] [Thread-119149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:33:33.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:33:33.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:33:33.679 [DEBUG] [Thread-119149] [transport.py] [_log()] userauth is OK
2025-12-03T15:33:33.679 [DEBUG] [Thread-119149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:33:33.679 [DEBUG] [Thread-119149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:33:33.679 [DEBUG] [Thread-119149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:33:33.679 [DEBUG] [Thread-119149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:33:33.692 [INFO] [Thread-119149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:33:33.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:33:34.453 [DEBUG] [Thread-119149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:33:34.453 [DEBUG] [Thread-119149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:33:34.454 [DEBUG] [Thread-119149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:33:34.494 [DEBUG] [Thread-119149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:33:34.494 [DEBUG] [Thread-119149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:33:34.498 [DEBUG] [Thread-119149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:33:34.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:33:34.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:33:34.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:33:34.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:33:34.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:33:34.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:33:34.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:33:34.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:33:34.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:33:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.564285 -999.00  +22.50   8.26     22   -0.20 1 1 1 1 1   888    0 22.67 13.28 ----- 8.3 8.3 229.3 14.6 29.8 -29.8 29.1 -32.1 31.1 -27.4 31.7 -29.4
2025-12-03T15:33:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:33:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:33:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.564285
2025-12-03T15:33:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:33:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:33:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:33:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:33:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:33:34.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:33:25', tmtdew=26.1, humidity=17.33, cloud=0.0, wind=14.06, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:32:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:33:34.525 [DEBUG] [Thread-119149] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:33:34.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:33:34.621 [DEBUG] [Thread-119152] [transport.py] [_log()] starting thread (client mode): 0xa2762020
2025-12-03T15:33:34.621 [DEBUG] [Thread-119152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:33:34.637 [DEBUG] [Thread-119152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:33:34.637 [INFO] [Thread-119152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:33:34.644 [DEBUG] [Thread-119152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:33:34.644 [DEBUG] [Thread-119152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:33:34.644 [DEBUG] [Thread-119152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] client lang: <none>
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] server lang: <none>
2025-12-03T15:33:34.645 [DEBUG] [Thread-119152] [transport.py] [_log()] kex follows: False
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] Compression: none
2025-12-03T15:33:34.646 [DEBUG] [Thread-119152] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:33:34.705 [DEBUG] [Thread-119152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:33:34.705 [DEBUG] [Thread-119152] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:33:34.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:33:34.707 [DEBUG] [Thread-119152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:33:34.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:33:34.764 [DEBUG] [Thread-119152] [transport.py] [_log()] userauth is OK
2025-12-03T15:33:34.765 [DEBUG] [Thread-119152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:33:34.765 [DEBUG] [Thread-119152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:33:34.765 [DEBUG] [Thread-119152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:33:34.765 [DEBUG] [Thread-119152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:33:34.783 [INFO] [Thread-119152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:33:34.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:33:34.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:33:35.582 [DEBUG] [Thread-119152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:33:35.582 [DEBUG] [Thread-119152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:33:35.630 [DEBUG] [Thread-119152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:33:35.630 [DEBUG] [Thread-119152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:33:35.639 [DEBUG] [Thread-119152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:33:35.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:33:35.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:33:35.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:33:35.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:33:35.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:33:35.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:33:35.675 [DEBUG] [Thread-119152] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:33:44.216 [DEBUG] [Thread-119154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:53.260 [DEBUG] [Thread-119155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:33:59.260 [DEBUG] [Thread-119156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:34:05.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:34:05.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:34:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 33, 57), 26.56, 16.6, 0.0, 18.44, 22.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:34:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:33:57
2025-12-03T15:34:06.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:34:06.630 [DEBUG] [Thread-119157] [transport.py] [_log()] starting thread (client mode): 0xa517ebc0
2025-12-03T15:34:06.630 [DEBUG] [Thread-119157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:34:06.651 [DEBUG] [Thread-119157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:34:06.651 [INFO] [Thread-119157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:06.654 [DEBUG] [Thread-119157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] client lang: <none>
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] server lang: <none>
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] kex follows: False
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] Compression: none
2025-12-03T15:34:06.655 [DEBUG] [Thread-119157] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:34:06.675 [DEBUG] [Thread-119157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:34:06.675 [DEBUG] [Thread-119157] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:34:06.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:34:06.676 [DEBUG] [Thread-119157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:34:06.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:34:06.678 [DEBUG] [Thread-119157] [transport.py] [_log()] userauth is OK
2025-12-03T15:34:06.678 [DEBUG] [Thread-119157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:34:06.678 [DEBUG] [Thread-119157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:34:06.678 [DEBUG] [Thread-119157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:34:06.679 [DEBUG] [Thread-119157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:34:06.702 [INFO] [Thread-119157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:34:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:34:07.341 [DEBUG] [Thread-119157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:34:07.341 [DEBUG] [Thread-119157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:34:07.341 [DEBUG] [Thread-119157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:34:07.382 [DEBUG] [Thread-119157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:34:07.382 [DEBUG] [Thread-119157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:34:07.385 [DEBUG] [Thread-119157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:34:07.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:34:07.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:34:07.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:34:07.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:34:07.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:34:07.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:34:07.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.564632 -999.00  +22.80  15.49     22   +0.00 1 1 1 1 1   888    0 22.76 12.90 ----- 15.5 15.5 162.8 22.8 29.9 -29.5 29.3 -29.6 31.1 -27.1 31.8 -29.5
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:34:07.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.564632
2025-12-03T15:34:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:34:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:34:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:34:07.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:34:07.410 [DEBUG] [Thread-119157] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:34:07.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:34:07.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:33:57', tmtdew=26.56, humidity=16.6, cloud=0.0, wind=18.44, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:33:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:34:07.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:34:07.504 [DEBUG] [Thread-119160] [transport.py] [_log()] starting thread (client mode): 0xa2744be0
2025-12-03T15:34:07.505 [DEBUG] [Thread-119160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:34:07.519 [DEBUG] [Thread-119160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:34:07.520 [INFO] [Thread-119160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] client lang: <none>
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] server lang: <none>
2025-12-03T15:34:07.531 [DEBUG] [Thread-119160] [transport.py] [_log()] kex follows: False
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] Compression: none
2025-12-03T15:34:07.532 [DEBUG] [Thread-119160] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:34:07.584 [DEBUG] [Thread-119160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:34:07.585 [DEBUG] [Thread-119160] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:34:07.585 [DEBUG] [Thread-119160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:34:07.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:34:07.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:34:07.651 [DEBUG] [Thread-119160] [transport.py] [_log()] userauth is OK
2025-12-03T15:34:07.652 [DEBUG] [Thread-119160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:34:07.652 [DEBUG] [Thread-119160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:34:07.652 [DEBUG] [Thread-119160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:34:07.652 [DEBUG] [Thread-119160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:34:07.672 [INFO] [Thread-119160] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:34:07.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:34:07.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:34:08.499 [DEBUG] [Thread-119160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:34:08.500 [DEBUG] [Thread-119160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:34:08.547 [DEBUG] [Thread-119160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:34:08.547 [DEBUG] [Thread-119160] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:34:08.557 [DEBUG] [Thread-119160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:34:08.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:34:08.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:34:08.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:34:08.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:34:08.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:34:08.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:34:08.592 [DEBUG] [Thread-119160] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:34:14.291 [DEBUG] [Thread-119162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:29.341 [DEBUG] [Thread-119163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:29.579 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:29.580 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:38.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:34:38.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:34:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:34:39.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 34, 29), 26.13, 17.03, 0.0, 15.85, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:34:39.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:34:29
2025-12-03T15:34:39.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:34:39.567 [DEBUG] [Thread-119164] [transport.py] [_log()] starting thread (client mode): 0xa2729420
2025-12-03T15:34:39.567 [DEBUG] [Thread-119164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:34:39.588 [DEBUG] [Thread-119164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:34:39.588 [INFO] [Thread-119164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] client lang: <none>
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] server lang: <none>
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] kex follows: False
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:34:39.589 [DEBUG] [Thread-119164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:34:39.590 [DEBUG] [Thread-119164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:34:39.590 [DEBUG] [Thread-119164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:34:39.590 [DEBUG] [Thread-119164] [transport.py] [_log()] Compression: none
2025-12-03T15:34:39.590 [DEBUG] [Thread-119164] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:34:39.609 [DEBUG] [Thread-119164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:34:39.609 [DEBUG] [Thread-119164] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:34:39.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:34:39.610 [DEBUG] [Thread-119164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:34:39.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:34:39.612 [DEBUG] [Thread-119164] [transport.py] [_log()] userauth is OK
2025-12-03T15:34:39.612 [DEBUG] [Thread-119164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:34:39.612 [DEBUG] [Thread-119164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:34:39.612 [DEBUG] [Thread-119164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:34:39.613 [DEBUG] [Thread-119164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:34:39.649 [INFO] [Thread-119164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:34:39.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:34:40.410 [DEBUG] [Thread-119164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:34:40.411 [DEBUG] [Thread-119164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:34:40.411 [DEBUG] [Thread-119164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:34:40.452 [DEBUG] [Thread-119164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:34:40.452 [DEBUG] [Thread-119164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:34:40.455 [DEBUG] [Thread-119164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:34:40.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:34:40.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:34:40.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:34:40.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:34:40.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:34:40.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:34:40.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:34:40.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.565326 -999.00  +22.50   6.98     22   -0.10 1 1 1 1 1   888    0 22.67 14.34 ----- 7.0 7.0 174.8 19.1 29.8 -28.9 29.1 -31.1 30.8 -28.0 31.6 -30.2
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.565326
2025-12-03T15:34:40.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:34:29', tmtdew=26.13, humidity=17.03, cloud=0.0, wind=15.85, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:34:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:34:40.474 [DEBUG] [Thread-119164] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:34:40.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:34:40.570 [DEBUG] [Thread-119167] [transport.py] [_log()] starting thread (client mode): 0xa2729570
2025-12-03T15:34:40.570 [DEBUG] [Thread-119167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:34:40.585 [DEBUG] [Thread-119167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:34:40.585 [INFO] [Thread-119167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:34:40.592 [DEBUG] [Thread-119167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:34:40.592 [DEBUG] [Thread-119167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:34:40.593 [DEBUG] [Thread-119167] [transport.py] [_log()] client lang: <none>
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] server lang: <none>
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] kex follows: False
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] Compression: none
2025-12-03T15:34:40.594 [DEBUG] [Thread-119167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:34:40.650 [DEBUG] [Thread-119167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:34:40.650 [DEBUG] [Thread-119167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:34:40.651 [DEBUG] [Thread-119167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:34:40.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:34:40.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:34:40.706 [DEBUG] [Thread-119167] [transport.py] [_log()] userauth is OK
2025-12-03T15:34:40.706 [DEBUG] [Thread-119167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:34:40.706 [DEBUG] [Thread-119167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:34:40.706 [DEBUG] [Thread-119167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:34:40.707 [DEBUG] [Thread-119167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:34:40.725 [INFO] [Thread-119167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:34:40.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:34:40.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:34:41.547 [DEBUG] [Thread-119167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:34:41.548 [DEBUG] [Thread-119167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:34:41.596 [DEBUG] [Thread-119167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:34:41.597 [DEBUG] [Thread-119167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:34:41.606 [DEBUG] [Thread-119167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:34:41.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:34:41.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:34:41.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:34:41.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:34:41.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:34:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:34:41.643 [DEBUG] [Thread-119167] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:34:44.380 [DEBUG] [Thread-119169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:53.306 [DEBUG] [Thread-119170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:34:59.441 [DEBUG] [Thread-119171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:11.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:35:11.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:35:11.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:35:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 35, 1), 26.12, 17.04, 0.0, 18.3, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:35:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:35:01
2025-12-03T15:35:12.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:35:12.613 [DEBUG] [Thread-119172] [transport.py] [_log()] starting thread (client mode): 0xa27298a0
2025-12-03T15:35:12.614 [DEBUG] [Thread-119172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:35:12.633 [DEBUG] [Thread-119172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:35:12.634 [INFO] [Thread-119172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] client lang: <none>
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] server lang: <none>
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] kex follows: False
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] Compression: none
2025-12-03T15:35:12.637 [DEBUG] [Thread-119172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:35:12.653 [DEBUG] [Thread-119172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:35:12.654 [DEBUG] [Thread-119172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:35:12.654 [DEBUG] [Thread-119172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:35:12.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:35:12.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:35:12.656 [DEBUG] [Thread-119172] [transport.py] [_log()] userauth is OK
2025-12-03T15:35:12.656 [DEBUG] [Thread-119172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:35:12.656 [DEBUG] [Thread-119172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:35:12.656 [DEBUG] [Thread-119172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:35:12.656 [DEBUG] [Thread-119172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:35:12.674 [INFO] [Thread-119172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:35:12.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:35:13.350 [DEBUG] [Thread-119172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:35:13.351 [DEBUG] [Thread-119172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:35:13.351 [DEBUG] [Thread-119172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:35:13.391 [DEBUG] [Thread-119172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:35:13.392 [DEBUG] [Thread-119172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:35:13.394 [DEBUG] [Thread-119172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:35:13.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:35:13.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:35:13.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:35:13.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:35:13.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:35:13.417 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:35:13.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:35:13.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:35:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:35:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.565674 -999.00  +22.60   7.33     22   -0.10 1 1 1 1 1   888    0 23.00 13.18 ----- 7.3 7.3 153.9 14.2 29.9 -30.0 29.4 -29.1 31.0 -27.2 31.8 -29.6
2025-12-03T15:35:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:35:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:35:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.565674
2025-12-03T15:35:13.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:35:13.419 [DEBUG] [Thread-119172] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:35:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:35:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:35:13.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:35:13.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:35:13.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:35:01', tmtdew=26.12, humidity=17.04, cloud=0.0, wind=18.3, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:34:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:35:13.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:35:13.519 [DEBUG] [Thread-119175] [transport.py] [_log()] starting thread (client mode): 0xa272ba00
2025-12-03T15:35:13.519 [DEBUG] [Thread-119175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:35:13.534 [DEBUG] [Thread-119175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:35:13.534 [INFO] [Thread-119175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:35:13.541 [DEBUG] [Thread-119175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:35:13.542 [DEBUG] [Thread-119175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] client lang: <none>
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] server lang: <none>
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] kex follows: False
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] Compression: none
2025-12-03T15:35:13.543 [DEBUG] [Thread-119175] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:35:13.598 [DEBUG] [Thread-119175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:35:13.598 [DEBUG] [Thread-119175] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:35:13.599 [DEBUG] [Thread-119175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:35:13.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:35:13.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:35:13.654 [DEBUG] [Thread-119175] [transport.py] [_log()] userauth is OK
2025-12-03T15:35:13.654 [DEBUG] [Thread-119175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:35:13.654 [DEBUG] [Thread-119175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:35:13.655 [DEBUG] [Thread-119175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:35:13.655 [DEBUG] [Thread-119175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:35:13.676 [INFO] [Thread-119175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:35:13.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:35:13.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:35:14.477 [DEBUG] [Thread-119177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:14.487 [DEBUG] [Thread-119175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:35:14.487 [DEBUG] [Thread-119175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:35:14.535 [DEBUG] [Thread-119175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:35:14.536 [DEBUG] [Thread-119175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:35:14.545 [DEBUG] [Thread-119175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:35:14.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:35:14.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:35:14.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:35:14.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:35:14.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:35:14.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:35:14.578 [DEBUG] [Thread-119175] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:35:29.530 [DEBUG] [Thread-119178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:29.721 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:29.722 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:44.559 [DEBUG] [Thread-119179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:35:44.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:35:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:35:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 35, 33), 27.21, 15.99, 0.0, 14.22, 23.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:35:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:35:33
2025-12-03T15:35:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:35:45.586 [DEBUG] [Thread-119180] [transport.py] [_log()] starting thread (client mode): 0xa2729cf0
2025-12-03T15:35:45.587 [DEBUG] [Thread-119180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:35:45.608 [DEBUG] [Thread-119180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:35:45.608 [INFO] [Thread-119180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] client lang: <none>
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] server lang: <none>
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] kex follows: False
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] Compression: none
2025-12-03T15:35:45.612 [DEBUG] [Thread-119180] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:35:45.627 [DEBUG] [Thread-119180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:35:45.627 [DEBUG] [Thread-119180] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:35:45.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:35:45.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] userauth is OK
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:35:45.628 [DEBUG] [Thread-119180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:35:45.641 [INFO] [Thread-119180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:35:45.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:35:46.309 [DEBUG] [Thread-119180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:35:46.309 [DEBUG] [Thread-119180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:35:46.309 [DEBUG] [Thread-119180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:35:46.350 [DEBUG] [Thread-119180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:35:46.350 [DEBUG] [Thread-119180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:35:46.353 [DEBUG] [Thread-119180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:35:46.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:35:46.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:35:46.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:35:46.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:35:46.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:35:46.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:35:46.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.566020 -999.00  +22.70  18.60     21   -0.10 1 1 1 1 1   888    0 23.23 13.22 ----- 18.6 18.6 153.4 22.0 29.8 -31.8 29.2 -31.4 31.1 -28.7 31.8 -31.0
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:35:46.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.566020
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:35:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:35:33', tmtdew=27.21, humidity=15.99, cloud=0.0, wind=14.22, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:35:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:35:46.374 [DEBUG] [Thread-119180] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:35:46.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:35:46.457 [DEBUG] [Thread-119183] [transport.py] [_log()] starting thread (client mode): 0xa272b100
2025-12-03T15:35:46.457 [DEBUG] [Thread-119183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:35:46.471 [DEBUG] [Thread-119183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:35:46.471 [INFO] [Thread-119183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] client lang: <none>
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] server lang: <none>
2025-12-03T15:35:46.479 [DEBUG] [Thread-119183] [transport.py] [_log()] kex follows: False
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] Compression: none
2025-12-03T15:35:46.480 [DEBUG] [Thread-119183] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:35:46.540 [DEBUG] [Thread-119183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:35:46.540 [DEBUG] [Thread-119183] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:35:46.541 [DEBUG] [Thread-119183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:35:46.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:35:46.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:35:46.596 [DEBUG] [Thread-119183] [transport.py] [_log()] userauth is OK
2025-12-03T15:35:46.596 [DEBUG] [Thread-119183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:35:46.596 [DEBUG] [Thread-119183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:35:46.596 [DEBUG] [Thread-119183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:35:46.596 [DEBUG] [Thread-119183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:35:46.615 [INFO] [Thread-119183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:35:46.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:35:46.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:35:47.442 [DEBUG] [Thread-119183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:35:47.442 [DEBUG] [Thread-119183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:35:47.490 [DEBUG] [Thread-119183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:35:47.490 [DEBUG] [Thread-119183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:35:47.500 [DEBUG] [Thread-119183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:35:47.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:35:47.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:35:47.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:35:47.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:35:47.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:35:47.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:35:47.536 [DEBUG] [Thread-119183] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:35:53.348 [DEBUG] [Thread-119185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:35:59.594 [DEBUG] [Thread-119186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:14.648 [DEBUG] [Thread-119187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:17.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:36:17.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:36:17.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:36:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 36, 6), 26.08, 16.98, 0.0, 18.23, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:36:18.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:36:06
2025-12-03T15:36:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:36:18.509 [DEBUG] [Thread-119188] [transport.py] [_log()] starting thread (client mode): 0xa2728d30
2025-12-03T15:36:18.509 [DEBUG] [Thread-119188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:36:18.530 [DEBUG] [Thread-119188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:36:18.530 [INFO] [Thread-119188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:36:18.534 [DEBUG] [Thread-119188] [transport.py] [_log()] client lang: <none>
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] server lang: <none>
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] kex follows: False
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] Compression: none
2025-12-03T15:36:18.535 [DEBUG] [Thread-119188] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:36:18.553 [DEBUG] [Thread-119188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:36:18.554 [DEBUG] [Thread-119188] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:36:18.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:36:18.556 [DEBUG] [Thread-119188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:36:18.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:36:18.558 [DEBUG] [Thread-119188] [transport.py] [_log()] userauth is OK
2025-12-03T15:36:18.559 [DEBUG] [Thread-119188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:36:18.559 [DEBUG] [Thread-119188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:36:18.559 [DEBUG] [Thread-119188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:36:18.559 [DEBUG] [Thread-119188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:36:18.577 [INFO] [Thread-119188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:36:18.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:36:19.188 [DEBUG] [Thread-119188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:36:19.188 [DEBUG] [Thread-119188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:36:19.188 [DEBUG] [Thread-119188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:36:19.229 [DEBUG] [Thread-119188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:36:19.230 [DEBUG] [Thread-119188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:36:19.233 [DEBUG] [Thread-119188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:36:19.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:36:19.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:36:19.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:36:19.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:36:19.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:36:19.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:36:19.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:36:19.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.566368 -999.00  +22.50  15.38     22   -0.20 1 1 1 1 1   888    0 22.84 10.18 ----- 15.4 15.4 165.4 19.9 29.9 -31.1 29.4 -29.7 30.9 -28.5 31.8 -30.1
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.566368
2025-12-03T15:36:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:36:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:36:19.259 [DEBUG] [Thread-119188] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:36:19.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:36:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:36:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:36:19.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:36:06', tmtdew=26.08, humidity=16.98, cloud=0.0, wind=18.23, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:35:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:36:19.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:36:19.358 [DEBUG] [Thread-119191] [transport.py] [_log()] starting thread (client mode): 0xa27521a0
2025-12-03T15:36:19.358 [DEBUG] [Thread-119191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:36:19.372 [DEBUG] [Thread-119191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:36:19.372 [INFO] [Thread-119191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] client lang: <none>
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] server lang: <none>
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] kex follows: False
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] Compression: none
2025-12-03T15:36:19.380 [DEBUG] [Thread-119191] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:36:19.435 [DEBUG] [Thread-119191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:36:19.435 [DEBUG] [Thread-119191] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:36:19.435 [DEBUG] [Thread-119191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:36:19.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:36:19.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:36:19.492 [DEBUG] [Thread-119191] [transport.py] [_log()] userauth is OK
2025-12-03T15:36:19.492 [DEBUG] [Thread-119191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:36:19.492 [DEBUG] [Thread-119191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:36:19.492 [DEBUG] [Thread-119191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:36:19.492 [DEBUG] [Thread-119191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:36:19.508 [INFO] [Thread-119191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:36:19.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:36:19.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:36:20.353 [DEBUG] [Thread-119191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:36:20.353 [DEBUG] [Thread-119191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:36:20.401 [DEBUG] [Thread-119191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:36:20.401 [DEBUG] [Thread-119191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:36:20.409 [DEBUG] [Thread-119191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:36:20.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:36:20.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:36:20.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:36:20.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:36:20.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:36:20.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:36:20.445 [DEBUG] [Thread-119191] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:36:29.681 [DEBUG] [Thread-119193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:29.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:29.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:44.741 [DEBUG] [Thread-119194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:36:50.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:36:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:36:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 36, 37), 25.91, 17.11, 0.0, 17.73, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:36:51.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:36:37
2025-12-03T15:36:51.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:36:51.398 [DEBUG] [Thread-119195] [transport.py] [_log()] starting thread (client mode): 0xa2729270
2025-12-03T15:36:51.398 [DEBUG] [Thread-119195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:36:51.418 [DEBUG] [Thread-119195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:36:51.418 [INFO] [Thread-119195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] client lang: <none>
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] server lang: <none>
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] kex follows: False
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:36:51.422 [DEBUG] [Thread-119195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:36:51.423 [DEBUG] [Thread-119195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:36:51.423 [DEBUG] [Thread-119195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:36:51.423 [DEBUG] [Thread-119195] [transport.py] [_log()] Compression: none
2025-12-03T15:36:51.423 [DEBUG] [Thread-119195] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:36:51.439 [DEBUG] [Thread-119195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:36:51.440 [DEBUG] [Thread-119195] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:36:51.441 [DEBUG] [Thread-119195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:36:51.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:36:51.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:36:51.443 [DEBUG] [Thread-119195] [transport.py] [_log()] userauth is OK
2025-12-03T15:36:51.443 [DEBUG] [Thread-119195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:36:51.443 [DEBUG] [Thread-119195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:36:51.443 [DEBUG] [Thread-119195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:36:51.443 [DEBUG] [Thread-119195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:36:51.461 [INFO] [Thread-119195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:36:51.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:36:52.078 [DEBUG] [Thread-119195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:36:52.079 [DEBUG] [Thread-119195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:36:52.079 [DEBUG] [Thread-119195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:36:52.120 [DEBUG] [Thread-119195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:36:52.120 [DEBUG] [Thread-119195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:36:52.123 [DEBUG] [Thread-119195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:36:52.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:36:52.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:36:52.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:36:52.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:36:52.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:36:52.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.566715 -999.00  +22.40   9.99     22   -0.20 1 1 1 1 1   888    0 23.02 7.27 ----- 10.0 10.0 157.6 19.1 29.8 -30.7 29.3 -32.6 30.9 -28.1 31.8 -30.0
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:36:52.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.566715
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:36:52.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:36:37', tmtdew=25.91, humidity=17.11, cloud=0.0, wind=17.73, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:36:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:36:52.146 [DEBUG] [Thread-119195] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:36:52.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:36:52.252 [DEBUG] [Thread-119198] [transport.py] [_log()] starting thread (client mode): 0xa2728820
2025-12-03T15:36:52.253 [DEBUG] [Thread-119198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:36:52.267 [DEBUG] [Thread-119198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:36:52.268 [INFO] [Thread-119198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:36:52.275 [DEBUG] [Thread-119198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] client lang: <none>
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] server lang: <none>
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] kex follows: False
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] Compression: none
2025-12-03T15:36:52.276 [DEBUG] [Thread-119198] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:36:52.334 [DEBUG] [Thread-119198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:36:52.334 [DEBUG] [Thread-119198] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:36:52.335 [DEBUG] [Thread-119198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:36:52.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:36:52.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:36:52.393 [DEBUG] [Thread-119198] [transport.py] [_log()] userauth is OK
2025-12-03T15:36:52.394 [DEBUG] [Thread-119198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:36:52.394 [DEBUG] [Thread-119198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:36:52.394 [DEBUG] [Thread-119198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:36:52.394 [DEBUG] [Thread-119198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:36:52.417 [INFO] [Thread-119198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:36:52.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:36:52.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:36:53.268 [DEBUG] [Thread-119198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:36:53.268 [DEBUG] [Thread-119198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:36:53.317 [DEBUG] [Thread-119198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:36:53.317 [DEBUG] [Thread-119198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:36:53.328 [DEBUG] [Thread-119198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:36:53.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:36:53.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:36:53.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:36:53.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:36:53.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:36:53.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:36:53.363 [DEBUG] [Thread-119198] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:36:53.396 [DEBUG] [Thread-119200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:36:59.774 [DEBUG] [Thread-119201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:14.809 [DEBUG] [Thread-119202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:23.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:37:23.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:37:23.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:37:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 37, 9), 26.05, 16.93, 0.0, 15.25, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:37:24.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:37:09
2025-12-03T15:37:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:37:24.312 [DEBUG] [Thread-119203] [transport.py] [_log()] starting thread (client mode): 0xa2728e50
2025-12-03T15:37:24.312 [DEBUG] [Thread-119203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:37:24.332 [DEBUG] [Thread-119203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:37:24.333 [INFO] [Thread-119203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:37:24.336 [DEBUG] [Thread-119203] [transport.py] [_log()] client lang: <none>
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] server lang: <none>
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] kex follows: False
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] Compression: none
2025-12-03T15:37:24.337 [DEBUG] [Thread-119203] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:37:24.355 [DEBUG] [Thread-119203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:37:24.356 [DEBUG] [Thread-119203] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:37:24.356 [DEBUG] [Thread-119203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:37:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:37:24.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:37:24.358 [DEBUG] [Thread-119203] [transport.py] [_log()] userauth is OK
2025-12-03T15:37:24.358 [DEBUG] [Thread-119203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:37:24.358 [DEBUG] [Thread-119203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:37:24.358 [DEBUG] [Thread-119203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:37:24.358 [DEBUG] [Thread-119203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:37:24.383 [INFO] [Thread-119203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:37:24.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:37:25.007 [DEBUG] [Thread-119203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:37:25.008 [DEBUG] [Thread-119203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:37:25.008 [DEBUG] [Thread-119203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:37:25.049 [DEBUG] [Thread-119203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:37:25.049 [DEBUG] [Thread-119203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:37:25.051 [DEBUG] [Thread-119203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:37:25.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:37:25.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:37:25.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:37:25.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:37:25.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:37:25.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:37:25.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.567062 -999.00  +22.50  10.50     22   +0.00 1 1 1 1 1   888    0 22.62 3.84 ----- 10.5 10.5 174.6 15.2 29.9 -29.8 29.1 -31.1 30.9 -27.1 31.8 -30.2
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:37:25.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.567062
2025-12-03T15:37:25.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:37:25.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:37:25.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:37:25.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:37:25.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:37:25.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:37:09', tmtdew=26.05, humidity=16.93, cloud=0.0, wind=15.25, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:36:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:37:25.075 [DEBUG] [Thread-119203] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:37:25.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:37:25.169 [DEBUG] [Thread-119206] [transport.py] [_log()] starting thread (client mode): 0xa272aa70
2025-12-03T15:37:25.169 [DEBUG] [Thread-119206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:37:25.183 [DEBUG] [Thread-119206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:37:25.183 [INFO] [Thread-119206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:37:25.190 [DEBUG] [Thread-119206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:37:25.190 [DEBUG] [Thread-119206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] client lang: <none>
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] server lang: <none>
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] kex follows: False
2025-12-03T15:37:25.191 [DEBUG] [Thread-119206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] Compression: none
2025-12-03T15:37:25.192 [DEBUG] [Thread-119206] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:37:25.254 [DEBUG] [Thread-119206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:37:25.254 [DEBUG] [Thread-119206] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:37:25.255 [DEBUG] [Thread-119206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:37:25.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:37:25.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:37:25.313 [DEBUG] [Thread-119206] [transport.py] [_log()] userauth is OK
2025-12-03T15:37:25.314 [DEBUG] [Thread-119206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:37:25.314 [DEBUG] [Thread-119206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:37:25.314 [DEBUG] [Thread-119206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:37:25.314 [DEBUG] [Thread-119206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:37:25.334 [INFO] [Thread-119206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:37:25.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:37:25.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:37:26.189 [DEBUG] [Thread-119206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:37:26.190 [DEBUG] [Thread-119206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:37:26.238 [DEBUG] [Thread-119206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:37:26.238 [DEBUG] [Thread-119206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:37:26.248 [DEBUG] [Thread-119206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:37:26.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:37:26.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:37:26.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:37:26.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:37:26.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:37:26.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:37:26.285 [DEBUG] [Thread-119206] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:37:29.842 [DEBUG] [Thread-119208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:30.007 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:30.008 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:44.891 [DEBUG] [Thread-119209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:53.451 [DEBUG] [Thread-119210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:37:56.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:37:56.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:37:56.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:37:56.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 37, 42), 25.52, 17.64, 0.0, 6.78, 21.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:37:56.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:37:42
2025-12-03T15:37:57.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:37:57.256 [DEBUG] [Thread-119211] [transport.py] [_log()] starting thread (client mode): 0xa27284c0
2025-12-03T15:37:57.256 [DEBUG] [Thread-119211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:37:57.277 [DEBUG] [Thread-119211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:37:57.277 [INFO] [Thread-119211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:37:57.280 [DEBUG] [Thread-119211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] client lang: <none>
2025-12-03T15:37:57.281 [DEBUG] [Thread-119211] [transport.py] [_log()] server lang: <none>
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] kex follows: False
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] Compression: none
2025-12-03T15:37:57.282 [DEBUG] [Thread-119211] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:37:57.299 [DEBUG] [Thread-119211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:37:57.300 [DEBUG] [Thread-119211] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:37:57.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:37:57.301 [DEBUG] [Thread-119211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:37:57.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:37:57.302 [DEBUG] [Thread-119211] [transport.py] [_log()] userauth is OK
2025-12-03T15:37:57.303 [DEBUG] [Thread-119211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:37:57.303 [DEBUG] [Thread-119211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:37:57.303 [DEBUG] [Thread-119211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:37:57.303 [DEBUG] [Thread-119211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:37:57.328 [INFO] [Thread-119211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:37:57.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:37:57.946 [DEBUG] [Thread-119211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:37:57.947 [DEBUG] [Thread-119211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:37:57.947 [DEBUG] [Thread-119211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:37:57.988 [DEBUG] [Thread-119211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:37:57.988 [DEBUG] [Thread-119211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:37:57.991 [DEBUG] [Thread-119211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:37:58.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:37:58.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:37:58.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:37:58.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:37:58.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:37:58.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:37:58.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:37:58.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:37:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:37:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.567410 -999.00  +22.60   7.42     22   +0.00 1 1 1 1 1   888    0 22.80 1.56 ----- 7.4 7.4 137.7 11.8 30.0 -33.0 29.4 -29.0 31.1 -27.1 31.9 -28.9
2025-12-03T15:37:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:37:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:37:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.567410
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:37:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:37:42', tmtdew=25.52, humidity=17.64, cloud=0.0, wind=6.78, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:37:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:37:58.018 [DEBUG] [Thread-119211] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:37:58.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:37:58.124 [DEBUG] [Thread-119214] [transport.py] [_log()] starting thread (client mode): 0xa2760b80
2025-12-03T15:37:58.124 [DEBUG] [Thread-119214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:37:58.138 [DEBUG] [Thread-119214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:37:58.139 [INFO] [Thread-119214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:37:58.146 [DEBUG] [Thread-119214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:37:58.147 [DEBUG] [Thread-119214] [transport.py] [_log()] client lang: <none>
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] server lang: <none>
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] kex follows: False
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:37:58.148 [DEBUG] [Thread-119214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:37:58.149 [DEBUG] [Thread-119214] [transport.py] [_log()] Compression: none
2025-12-03T15:37:58.149 [DEBUG] [Thread-119214] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:37:58.208 [DEBUG] [Thread-119214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:37:58.208 [DEBUG] [Thread-119214] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:37:58.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:37:58.210 [DEBUG] [Thread-119214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:37:58.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:37:58.266 [DEBUG] [Thread-119214] [transport.py] [_log()] userauth is OK
2025-12-03T15:37:58.267 [DEBUG] [Thread-119214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:37:58.267 [DEBUG] [Thread-119214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:37:58.267 [DEBUG] [Thread-119214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:37:58.267 [DEBUG] [Thread-119214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:37:58.286 [INFO] [Thread-119214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:37:58.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:37:58.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:37:59.115 [DEBUG] [Thread-119214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:37:59.115 [DEBUG] [Thread-119214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:37:59.163 [DEBUG] [Thread-119214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:37:59.163 [DEBUG] [Thread-119214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:37:59.173 [DEBUG] [Thread-119214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:37:59.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:37:59.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:37:59.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:37:59.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:37:59.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:37:59.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:37:59.209 [DEBUG] [Thread-119214] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:37:59.923 [DEBUG] [Thread-119216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:14.974 [DEBUG] [Thread-119217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:29.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:38:29.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:38:29.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:38:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 38, 14), 25.31, 17.89, 0.0, 6.88, 21.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:38:29.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:38:14
2025-12-03T15:38:30.002 [DEBUG] [Thread-119218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:30.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:38:30.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:30.149 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:30.158 [DEBUG] [Thread-119219] [transport.py] [_log()] starting thread (client mode): 0xa27617e0
2025-12-03T15:38:30.158 [DEBUG] [Thread-119219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:38:30.178 [DEBUG] [Thread-119219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:38:30.178 [INFO] [Thread-119219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:38:30.181 [DEBUG] [Thread-119219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:38:30.181 [DEBUG] [Thread-119219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] client lang: <none>
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] server lang: <none>
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] kex follows: False
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:38:30.182 [DEBUG] [Thread-119219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:38:30.183 [DEBUG] [Thread-119219] [transport.py] [_log()] Compression: none
2025-12-03T15:38:30.183 [DEBUG] [Thread-119219] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:38:30.200 [DEBUG] [Thread-119219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:38:30.200 [DEBUG] [Thread-119219] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:38:30.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:38:30.201 [DEBUG] [Thread-119219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:38:30.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:38:30.203 [DEBUG] [Thread-119219] [transport.py] [_log()] userauth is OK
2025-12-03T15:38:30.203 [DEBUG] [Thread-119219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:38:30.203 [DEBUG] [Thread-119219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:38:30.203 [DEBUG] [Thread-119219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:38:30.203 [DEBUG] [Thread-119219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:38:30.238 [INFO] [Thread-119219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:38:30.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:38:30.883 [DEBUG] [Thread-119219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:38:30.883 [DEBUG] [Thread-119219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:38:30.884 [DEBUG] [Thread-119219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:38:30.924 [DEBUG] [Thread-119219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:38:30.925 [DEBUG] [Thread-119219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:38:30.928 [DEBUG] [Thread-119219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:38:30.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:38:30.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:38:30.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:38:30.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:38:30.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:38:30.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:38:30.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:38:30.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:38:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:38:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.567757 -999.00  +22.40   7.39     22   -0.30 1 1 1 1 1   888    0 22.24 1.09 ----- 7.4 7.4 135.9 11.4 29.9 -29.8 29.6 -29.7 31.2 -27.8 32.0 -29.5
2025-12-03T15:38:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:38:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:38:30.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.567757
2025-12-03T15:38:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:38:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:38:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:38:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:38:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:38:30.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:38:14', tmtdew=25.31, humidity=17.89, cloud=0.0, wind=6.88, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:37:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:38:30.956 [DEBUG] [Thread-119219] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:38:31.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:38:31.049 [DEBUG] [Thread-119222] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T15:38:31.050 [DEBUG] [Thread-119222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:38:31.065 [DEBUG] [Thread-119222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:38:31.065 [INFO] [Thread-119222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:38:31.073 [DEBUG] [Thread-119222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:38:31.073 [DEBUG] [Thread-119222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:38:31.073 [DEBUG] [Thread-119222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] client lang: <none>
2025-12-03T15:38:31.074 [DEBUG] [Thread-119222] [transport.py] [_log()] server lang: <none>
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] kex follows: False
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] Compression: none
2025-12-03T15:38:31.075 [DEBUG] [Thread-119222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:38:31.137 [DEBUG] [Thread-119222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:38:31.137 [DEBUG] [Thread-119222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:38:31.138 [DEBUG] [Thread-119222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:38:31.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:38:31.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:38:31.195 [DEBUG] [Thread-119222] [transport.py] [_log()] userauth is OK
2025-12-03T15:38:31.196 [DEBUG] [Thread-119222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:38:31.196 [DEBUG] [Thread-119222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:38:31.197 [DEBUG] [Thread-119222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:38:31.197 [DEBUG] [Thread-119222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:38:31.215 [INFO] [Thread-119222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:38:31.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:38:31.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:38:32.066 [DEBUG] [Thread-119222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:38:32.066 [DEBUG] [Thread-119222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:38:32.114 [DEBUG] [Thread-119222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:38:32.114 [DEBUG] [Thread-119222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:38:32.123 [DEBUG] [Thread-119222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:38:32.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:38:32.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:38:32.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:38:32.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:38:32.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:38:32.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:38:32.160 [DEBUG] [Thread-119222] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:38:45.038 [DEBUG] [Thread-119224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:38:53.497 [DEBUG] [Thread-119225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:00.084 [DEBUG] [Thread-119226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:02.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:39:02.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:39:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:39:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 38, 46), 25.21, 18.01, 0.0, 13.57, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:39:02.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:38:46
2025-12-03T15:39:02.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:39:03.127 [DEBUG] [Thread-119227] [transport.py] [_log()] starting thread (client mode): 0xa2747a00
2025-12-03T15:39:03.127 [DEBUG] [Thread-119227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:39:03.148 [DEBUG] [Thread-119227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:39:03.148 [INFO] [Thread-119227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] client lang: <none>
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] server lang: <none>
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] kex follows: False
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:39:03.152 [DEBUG] [Thread-119227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:39:03.153 [DEBUG] [Thread-119227] [transport.py] [_log()] Compression: none
2025-12-03T15:39:03.153 [DEBUG] [Thread-119227] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:39:03.169 [DEBUG] [Thread-119227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:39:03.169 [DEBUG] [Thread-119227] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:39:03.170 [DEBUG] [Thread-119227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:39:03.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:39:03.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:39:03.172 [DEBUG] [Thread-119227] [transport.py] [_log()] userauth is OK
2025-12-03T15:39:03.172 [DEBUG] [Thread-119227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:39:03.172 [DEBUG] [Thread-119227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:39:03.172 [DEBUG] [Thread-119227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:39:03.172 [DEBUG] [Thread-119227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:39:03.196 [INFO] [Thread-119227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:39:03.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:39:03.865 [DEBUG] [Thread-119227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:39:03.865 [DEBUG] [Thread-119227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:39:03.866 [DEBUG] [Thread-119227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:39:03.906 [DEBUG] [Thread-119227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:39:03.906 [DEBUG] [Thread-119227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:39:03.910 [DEBUG] [Thread-119227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:39:03.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:39:03.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:39:03.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:39:03.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:39:03.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:39:03.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:39:03.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:39:03.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:39:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:39:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.568104 -999.00  +22.20   9.40     22   -0.20 1 1 1 1 1   888    0 22.62 0.10 ----- 9.4 9.4 155.7 11.7 30.0 -30.3 29.8 -29.5 31.3 -27.8 32.0 -30.9
2025-12-03T15:39:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:39:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:39:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.568104
2025-12-03T15:39:03.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:39:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:39:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:39:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:39:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:39:03.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:38:46', tmtdew=25.21, humidity=18.01, cloud=0.0, wind=13.57, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:38:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:39:03.945 [DEBUG] [Thread-119227] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:39:04.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:39:04.039 [DEBUG] [Thread-119230] [transport.py] [_log()] starting thread (client mode): 0xa2745240
2025-12-03T15:39:04.039 [DEBUG] [Thread-119230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:39:04.053 [DEBUG] [Thread-119230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:39:04.054 [INFO] [Thread-119230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:39:04.061 [DEBUG] [Thread-119230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:39:04.061 [DEBUG] [Thread-119230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] client lang: <none>
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] server lang: <none>
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] kex follows: False
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] Compression: none
2025-12-03T15:39:04.062 [DEBUG] [Thread-119230] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:39:04.120 [DEBUG] [Thread-119230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:39:04.120 [DEBUG] [Thread-119230] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:39:04.121 [DEBUG] [Thread-119230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:39:04.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:39:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:39:04.176 [DEBUG] [Thread-119230] [transport.py] [_log()] userauth is OK
2025-12-03T15:39:04.176 [DEBUG] [Thread-119230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:39:04.176 [DEBUG] [Thread-119230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:39:04.176 [DEBUG] [Thread-119230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:39:04.176 [DEBUG] [Thread-119230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:39:04.195 [INFO] [Thread-119230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:39:04.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:39:04.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:39:05.030 [DEBUG] [Thread-119230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:39:05.031 [DEBUG] [Thread-119230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:39:05.079 [DEBUG] [Thread-119230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:39:05.079 [DEBUG] [Thread-119230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:39:05.088 [DEBUG] [Thread-119230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:39:05.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:39:05.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:39:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:39:05.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:39:05.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:39:05.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:39:05.125 [DEBUG] [Thread-119230] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:39:15.119 [DEBUG] [Thread-119232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:30.169 [DEBUG] [Thread-119233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:30.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:30.294 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:39:35.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:39:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:39:35.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 39, 18), 24.92, 18.39, 0.0, 17.33, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:39:35.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:39:18
2025-12-03T15:39:35.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:39:36.133 [DEBUG] [Thread-119234] [transport.py] [_log()] starting thread (client mode): 0xa272aad0
2025-12-03T15:39:36.133 [DEBUG] [Thread-119234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:39:36.154 [DEBUG] [Thread-119234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:39:36.154 [INFO] [Thread-119234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:36.157 [DEBUG] [Thread-119234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] client lang: <none>
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] server lang: <none>
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] kex follows: False
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] Compression: none
2025-12-03T15:39:36.158 [DEBUG] [Thread-119234] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:39:36.173 [DEBUG] [Thread-119234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:39:36.173 [DEBUG] [Thread-119234] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:39:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:39:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] userauth is OK
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:39:36.174 [DEBUG] [Thread-119234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:39:36.185 [INFO] [Thread-119234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:39:36.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:39:36.854 [DEBUG] [Thread-119234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:39:36.854 [DEBUG] [Thread-119234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:39:36.854 [DEBUG] [Thread-119234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:39:36.895 [DEBUG] [Thread-119234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:39:36.895 [DEBUG] [Thread-119234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:39:36.897 [DEBUG] [Thread-119234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:39:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:39:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:39:36.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:39:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:39:36.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:39:36.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:39:36.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.568799 -999.00  +22.40  11.10     24   +0.90 1 1 1 1 1   888    0 22.09 -9.76 ----- 11.1 11.1 170.2 18.5 29.9 -31.2 29.3 -30.5 31.2 -29.3 31.8 -31.0
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.568799
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:39:36.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:39:18', tmtdew=24.92, humidity=18.39, cloud=0.0, wind=17.33, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:39:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:39:36.915 [DEBUG] [Thread-119234] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:39:36.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:39:37.001 [DEBUG] [Thread-119237] [transport.py] [_log()] starting thread (client mode): 0xa272b910
2025-12-03T15:39:37.001 [DEBUG] [Thread-119237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:39:37.016 [DEBUG] [Thread-119237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:39:37.016 [INFO] [Thread-119237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] client lang: <none>
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] server lang: <none>
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] kex follows: False
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] Compression: none
2025-12-03T15:39:37.024 [DEBUG] [Thread-119237] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:39:37.078 [DEBUG] [Thread-119237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:39:37.078 [DEBUG] [Thread-119237] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:39:37.078 [DEBUG] [Thread-119237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:39:37.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:39:37.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:39:37.136 [DEBUG] [Thread-119237] [transport.py] [_log()] userauth is OK
2025-12-03T15:39:37.136 [DEBUG] [Thread-119237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:39:37.136 [DEBUG] [Thread-119237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:39:37.136 [DEBUG] [Thread-119237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:39:37.136 [DEBUG] [Thread-119237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:39:37.150 [INFO] [Thread-119237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:39:37.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:39:37.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:39:37.980 [DEBUG] [Thread-119237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:39:37.980 [DEBUG] [Thread-119237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:39:38.027 [DEBUG] [Thread-119237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:39:38.027 [DEBUG] [Thread-119237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:39:38.035 [DEBUG] [Thread-119237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:39:38.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:39:38.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:39:38.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:39:38.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:39:38.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:39:38.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:39:38.067 [DEBUG] [Thread-119237] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:39:45.198 [DEBUG] [Thread-119239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:39:53.568 [DEBUG] [Thread-119240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:00.254 [DEBUG] [Thread-119241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:08.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:40:08.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:40:08.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:40:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 39, 50), 24.46, 19.14, 0.0, 20.08, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:40:08.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:39:50
2025-12-03T15:40:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:40:09.036 [DEBUG] [Thread-119242] [transport.py] [_log()] starting thread (client mode): 0xa27539d0
2025-12-03T15:40:09.036 [DEBUG] [Thread-119242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:40:09.056 [DEBUG] [Thread-119242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:40:09.056 [INFO] [Thread-119242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] client lang: <none>
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] server lang: <none>
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] kex follows: False
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] Compression: none
2025-12-03T15:40:09.058 [DEBUG] [Thread-119242] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:40:09.072 [DEBUG] [Thread-119242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:40:09.072 [DEBUG] [Thread-119242] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:40:09.073 [DEBUG] [Thread-119242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:40:09.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:40:09.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:40:09.075 [DEBUG] [Thread-119242] [transport.py] [_log()] userauth is OK
2025-12-03T15:40:09.075 [DEBUG] [Thread-119242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:40:09.075 [DEBUG] [Thread-119242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:40:09.075 [DEBUG] [Thread-119242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:40:09.075 [DEBUG] [Thread-119242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:40:09.099 [INFO] [Thread-119242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:40:09.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:40:10.066 [DEBUG] [Thread-119242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:40:10.066 [DEBUG] [Thread-119242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:40:10.066 [DEBUG] [Thread-119242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:40:10.108 [DEBUG] [Thread-119242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:40:10.108 [DEBUG] [Thread-119242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:40:10.111 [DEBUG] [Thread-119242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:40:10.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:40:10.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:40:10.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:40:10.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:40:10.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:40:10.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:40:10.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.569146 -999.00  +22.50  17.29     24   +1.10 1 1 1 1 1   888    0 21.88 -14.98 ----- 17.3 17.3 164.0 23.6 29.9 -30.8 29.5 -29.4 31.2 -28.3 31.9 -30.8
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.569146
2025-12-03T15:40:10.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:40:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:40:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:40:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:40:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:40:10.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:39:50', tmtdew=24.46, humidity=19.14, cloud=0.0, wind=20.08, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:39:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:40:10.145 [DEBUG] [Thread-119242] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:40:10.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:40:10.227 [DEBUG] [Thread-119245] [transport.py] [_log()] starting thread (client mode): 0xa519ab30
2025-12-03T15:40:10.227 [DEBUG] [Thread-119245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:40:10.243 [DEBUG] [Thread-119245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:40:10.244 [INFO] [Thread-119245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:10.254 [DEBUG] [Thread-119245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] client lang: <none>
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] server lang: <none>
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] kex follows: False
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] Compression: none
2025-12-03T15:40:10.255 [DEBUG] [Thread-119245] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:40:10.310 [DEBUG] [Thread-119245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:40:10.310 [DEBUG] [Thread-119245] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:40:10.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:40:10.311 [DEBUG] [Thread-119245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:40:10.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:40:10.365 [DEBUG] [Thread-119245] [transport.py] [_log()] userauth is OK
2025-12-03T15:40:10.366 [DEBUG] [Thread-119245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:40:10.366 [DEBUG] [Thread-119245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:40:10.366 [DEBUG] [Thread-119245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:40:10.366 [DEBUG] [Thread-119245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:40:10.385 [INFO] [Thread-119245] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:40:10.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:40:10.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:40:11.226 [DEBUG] [Thread-119245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:40:11.226 [DEBUG] [Thread-119245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:40:11.273 [DEBUG] [Thread-119245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:40:11.273 [DEBUG] [Thread-119245] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:40:11.282 [DEBUG] [Thread-119245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:40:11.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:40:11.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:40:11.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:40:11.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:40:11.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:40:11.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:40:11.314 [DEBUG] [Thread-119245] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:40:15.288 [DEBUG] [Thread-119247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:30.330 [DEBUG] [Thread-119248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:30.436 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:30.437 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:40:41.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:40:41.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:40:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 40, 22), 24.55, 19.05, 0.0, 20.57, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:40:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:40:22
2025-12-03T15:40:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:40:42.265 [DEBUG] [Thread-119249] [transport.py] [_log()] starting thread (client mode): 0xa27458d0
2025-12-03T15:40:42.265 [DEBUG] [Thread-119249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:40:42.286 [DEBUG] [Thread-119249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:40:42.286 [INFO] [Thread-119249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] client lang: <none>
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] server lang: <none>
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] kex follows: False
2025-12-03T15:40:42.289 [DEBUG] [Thread-119249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] Compression: none
2025-12-03T15:40:42.290 [DEBUG] [Thread-119249] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:40:42.307 [DEBUG] [Thread-119249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:40:42.308 [DEBUG] [Thread-119249] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:40:42.308 [DEBUG] [Thread-119249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:40:42.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:40:42.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:40:42.311 [DEBUG] [Thread-119249] [transport.py] [_log()] userauth is OK
2025-12-03T15:40:42.311 [DEBUG] [Thread-119249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:40:42.311 [DEBUG] [Thread-119249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:40:42.311 [DEBUG] [Thread-119249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:40:42.311 [DEBUG] [Thread-119249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:40:42.335 [INFO] [Thread-119249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:40:42.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:40:42.987 [DEBUG] [Thread-119249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:40:42.988 [DEBUG] [Thread-119249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:40:42.988 [DEBUG] [Thread-119249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:40:43.029 [DEBUG] [Thread-119249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:40:43.029 [DEBUG] [Thread-119249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:40:43.033 [DEBUG] [Thread-119249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:40:43.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:40:43.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:40:43.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:40:43.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:40:43.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:40:43.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:40:43.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:40:43.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:40:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:40:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.569493 -999.00  +22.30  10.40     23   +0.60 1 1 1 1 1   888    0 21.85 -19.86 ----- 10.4 10.4 138.3 20.1 29.9 -30.3 29.5 -30.1 31.1 -29.9 31.8 -30.0
2025-12-03T15:40:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:40:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:40:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.569493
2025-12-03T15:40:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:40:43.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:40:43.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:40:43.059 [DEBUG] [Thread-119249] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:40:43.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:40:43.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:40:43.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:40:22', tmtdew=24.55, humidity=19.05, cloud=0.0, wind=20.57, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:40:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:40:43.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:40:43.166 [DEBUG] [Thread-119252] [transport.py] [_log()] starting thread (client mode): 0xa2747130
2025-12-03T15:40:43.166 [DEBUG] [Thread-119252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:40:43.181 [DEBUG] [Thread-119252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:40:43.181 [INFO] [Thread-119252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:40:43.189 [DEBUG] [Thread-119252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] client lang: <none>
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] server lang: <none>
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] kex follows: False
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:40:43.190 [DEBUG] [Thread-119252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:40:43.191 [DEBUG] [Thread-119252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:40:43.191 [DEBUG] [Thread-119252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:40:43.191 [DEBUG] [Thread-119252] [transport.py] [_log()] Compression: none
2025-12-03T15:40:43.191 [DEBUG] [Thread-119252] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:40:43.250 [DEBUG] [Thread-119252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:40:43.251 [DEBUG] [Thread-119252] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:40:43.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:40:43.252 [DEBUG] [Thread-119252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:40:43.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:40:43.305 [DEBUG] [Thread-119252] [transport.py] [_log()] userauth is OK
2025-12-03T15:40:43.306 [DEBUG] [Thread-119252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:40:43.306 [DEBUG] [Thread-119252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:40:43.306 [DEBUG] [Thread-119252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:40:43.306 [DEBUG] [Thread-119252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:40:43.328 [INFO] [Thread-119252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:40:43.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:40:43.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:40:44.147 [DEBUG] [Thread-119252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:40:44.147 [DEBUG] [Thread-119252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:40:44.195 [DEBUG] [Thread-119252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:40:44.195 [DEBUG] [Thread-119252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:40:44.204 [DEBUG] [Thread-119252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:40:44.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:40:44.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:40:44.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:40:44.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:40:44.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:40:44.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:40:44.240 [DEBUG] [Thread-119252] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:40:45.369 [DEBUG] [Thread-119254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:40:53.597 [DEBUG] [Thread-119255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:00.421 [DEBUG] [Thread-119256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:41:14.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:41:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:41:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 40, 54), 24.48, 19.44, 0.0, 15.07, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:41:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:40:54
2025-12-03T15:41:15.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:41:15.197 [DEBUG] [Thread-119257] [transport.py] [_log()] starting thread (client mode): 0xa27505e0
2025-12-03T15:41:15.197 [DEBUG] [Thread-119257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:41:15.217 [DEBUG] [Thread-119257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:41:15.217 [INFO] [Thread-119257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] client lang: <none>
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] server lang: <none>
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] kex follows: False
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] Compression: none
2025-12-03T15:41:15.220 [DEBUG] [Thread-119257] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:41:15.237 [DEBUG] [Thread-119257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:41:15.238 [DEBUG] [Thread-119257] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:41:15.238 [DEBUG] [Thread-119257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:41:15.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:41:15.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:41:15.240 [DEBUG] [Thread-119257] [transport.py] [_log()] userauth is OK
2025-12-03T15:41:15.240 [DEBUG] [Thread-119257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:41:15.241 [DEBUG] [Thread-119257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:41:15.241 [DEBUG] [Thread-119257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:41:15.241 [DEBUG] [Thread-119257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:41:15.259 [INFO] [Thread-119257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:41:15.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:41:15.460 [DEBUG] [Thread-119259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:15.902 [DEBUG] [Thread-119257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:41:15.902 [DEBUG] [Thread-119257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:41:15.903 [DEBUG] [Thread-119257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:41:15.943 [DEBUG] [Thread-119257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:41:15.943 [DEBUG] [Thread-119257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:41:15.947 [DEBUG] [Thread-119257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:41:15.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:41:15.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:41:15.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:41:15.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:41:15.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:41:15.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:41:15.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:41:15.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:41:15.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:41:15.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.569840 -999.00  +22.10   8.11     24   +0.70 1 1 1 1 1   888    0 22.33 -22.46 ----- 8.1 8.1 167.4 10.2 29.8 -29.9 29.6 -29.7 31.3 -28.3 32.0 -29.8
2025-12-03T15:41:15.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:41:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:41:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.569840
2025-12-03T15:41:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:41:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:41:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:41:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:41:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:41:15.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:40:54', tmtdew=24.48, humidity=19.44, cloud=0.0, wind=15.07, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:40:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:41:15.973 [DEBUG] [Thread-119257] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:41:16.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:41:16.074 [DEBUG] [Thread-119261] [transport.py] [_log()] starting thread (client mode): 0xa272b550
2025-12-03T15:41:16.074 [DEBUG] [Thread-119261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:41:16.089 [DEBUG] [Thread-119261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:41:16.090 [INFO] [Thread-119261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:16.098 [DEBUG] [Thread-119261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] client lang: <none>
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] server lang: <none>
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] kex follows: False
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:41:16.099 [DEBUG] [Thread-119261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:41:16.100 [DEBUG] [Thread-119261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:41:16.100 [DEBUG] [Thread-119261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:41:16.100 [DEBUG] [Thread-119261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:41:16.100 [DEBUG] [Thread-119261] [transport.py] [_log()] Compression: none
2025-12-03T15:41:16.100 [DEBUG] [Thread-119261] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:41:16.160 [DEBUG] [Thread-119261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:41:16.161 [DEBUG] [Thread-119261] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:41:16.161 [DEBUG] [Thread-119261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:41:16.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:41:16.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:41:16.219 [DEBUG] [Thread-119261] [transport.py] [_log()] userauth is OK
2025-12-03T15:41:16.219 [DEBUG] [Thread-119261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:41:16.219 [DEBUG] [Thread-119261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:41:16.220 [DEBUG] [Thread-119261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:41:16.220 [DEBUG] [Thread-119261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:41:16.239 [INFO] [Thread-119261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:41:16.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:41:16.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:41:17.090 [DEBUG] [Thread-119261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:41:17.091 [DEBUG] [Thread-119261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:41:17.138 [DEBUG] [Thread-119261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:41:17.138 [DEBUG] [Thread-119261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:41:17.147 [DEBUG] [Thread-119261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:41:17.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:41:17.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:41:17.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:41:17.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:41:17.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:41:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:41:17.183 [DEBUG] [Thread-119261] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:41:30.495 [DEBUG] [Thread-119263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:30.585 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:30.586 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:45.545 [DEBUG] [Thread-119264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:41:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:41:47.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:41:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:41:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 41, 26), 24.45, 19.45, 0.0, 12.48, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:41:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:41:26
2025-12-03T15:41:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:41:48.123 [DEBUG] [Thread-119265] [transport.py] [_log()] starting thread (client mode): 0xa2729570
2025-12-03T15:41:48.123 [DEBUG] [Thread-119265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:41:48.139 [DEBUG] [Thread-119265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:41:48.139 [INFO] [Thread-119265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] client lang: <none>
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] server lang: <none>
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] kex follows: False
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] Compression: none
2025-12-03T15:41:48.142 [DEBUG] [Thread-119265] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:41:48.158 [DEBUG] [Thread-119265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:41:48.159 [DEBUG] [Thread-119265] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:41:48.159 [DEBUG] [Thread-119265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:41:48.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:41:48.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:41:48.161 [DEBUG] [Thread-119265] [transport.py] [_log()] userauth is OK
2025-12-03T15:41:48.161 [DEBUG] [Thread-119265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:41:48.162 [DEBUG] [Thread-119265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:41:48.162 [DEBUG] [Thread-119265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:41:48.162 [DEBUG] [Thread-119265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:41:48.186 [INFO] [Thread-119265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:41:48.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:41:48.823 [DEBUG] [Thread-119265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:41:48.823 [DEBUG] [Thread-119265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:41:48.824 [DEBUG] [Thread-119265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:41:48.864 [DEBUG] [Thread-119265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:41:48.865 [DEBUG] [Thread-119265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:41:48.869 [DEBUG] [Thread-119265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:41:48.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:41:48.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:41:48.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:41:48.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:41:48.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:41:48.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:41:48.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.570187 -999.00  +22.30  15.42     24   +0.80 1 1 1 1 1   888    0 21.34 -24.32 ----- 15.4 15.4 157.0 22.2 29.8 -29.9 29.5 -31.2 31.3 -28.6 32.0 -30.0
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:41:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.570187
2025-12-03T15:41:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:41:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:41:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:41:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:41:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:41:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:41:26', tmtdew=24.45, humidity=19.45, cloud=0.0, wind=12.48, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:41:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:41:48.894 [DEBUG] [Thread-119265] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:41:48.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:41:48.989 [DEBUG] [Thread-119268] [transport.py] [_log()] starting thread (client mode): 0xa27505e0
2025-12-03T15:41:48.989 [DEBUG] [Thread-119268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:41:49.004 [DEBUG] [Thread-119268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:41:49.005 [INFO] [Thread-119268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:41:49.013 [DEBUG] [Thread-119268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:41:49.013 [DEBUG] [Thread-119268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:41:49.013 [DEBUG] [Thread-119268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] client lang: <none>
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] server lang: <none>
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] kex follows: False
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] Compression: none
2025-12-03T15:41:49.014 [DEBUG] [Thread-119268] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:41:49.077 [DEBUG] [Thread-119268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:41:49.077 [DEBUG] [Thread-119268] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:41:49.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:41:49.078 [DEBUG] [Thread-119268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:41:49.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:41:49.134 [DEBUG] [Thread-119268] [transport.py] [_log()] userauth is OK
2025-12-03T15:41:49.135 [DEBUG] [Thread-119268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:41:49.135 [DEBUG] [Thread-119268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:41:49.135 [DEBUG] [Thread-119268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:41:49.135 [DEBUG] [Thread-119268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:41:49.155 [INFO] [Thread-119268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:41:49.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:41:49.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:41:50.019 [DEBUG] [Thread-119268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:41:50.020 [DEBUG] [Thread-119268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:41:50.067 [DEBUG] [Thread-119268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:41:50.067 [DEBUG] [Thread-119268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:41:50.076 [DEBUG] [Thread-119268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:41:50.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:41:50.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:41:50.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:41:50.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:41:50.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:41:50.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:41:50.113 [DEBUG] [Thread-119268] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:41:53.661 [DEBUG] [Thread-119270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:00.576 [DEBUG] [Thread-119271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:15.621 [DEBUG] [Thread-119272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:20.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:42:20.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:42:20.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:42:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 41, 58), 24.43, 19.12, 0.0, 12.04, 21.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:42:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:41:58
2025-12-03T15:42:20.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:42:21.140 [DEBUG] [Thread-119273] [transport.py] [_log()] starting thread (client mode): 0xa2778d60
2025-12-03T15:42:21.140 [DEBUG] [Thread-119273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:42:21.161 [DEBUG] [Thread-119273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:42:21.161 [INFO] [Thread-119273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] client lang: <none>
2025-12-03T15:42:21.164 [DEBUG] [Thread-119273] [transport.py] [_log()] server lang: <none>
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] kex follows: False
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] Compression: none
2025-12-03T15:42:21.165 [DEBUG] [Thread-119273] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:42:21.180 [DEBUG] [Thread-119273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:42:21.181 [DEBUG] [Thread-119273] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:42:21.181 [DEBUG] [Thread-119273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:42:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:42:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:42:21.182 [DEBUG] [Thread-119273] [transport.py] [_log()] userauth is OK
2025-12-03T15:42:21.182 [DEBUG] [Thread-119273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:42:21.182 [DEBUG] [Thread-119273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:42:21.182 [DEBUG] [Thread-119273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:42:21.182 [DEBUG] [Thread-119273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:42:21.194 [INFO] [Thread-119273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:42:21.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:42:21.840 [DEBUG] [Thread-119273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:42:21.840 [DEBUG] [Thread-119273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:42:21.840 [DEBUG] [Thread-119273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:42:21.881 [DEBUG] [Thread-119273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:42:21.881 [DEBUG] [Thread-119273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:42:21.884 [DEBUG] [Thread-119273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:42:21.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:42:21.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:42:21.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:42:21.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:42:21.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:42:21.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:42:21.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:42:21.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:42:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:42:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.570535 -999.00  +22.50  13.63     24   +1.10 1 1 1 1 1   888    0 21.61 -28.53 ----- 13.6 13.6 191.8 16.7 29.9 -30.0 29.4 -32.0 31.3 -28.2 31.9 -30.0
2025-12-03T15:42:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:42:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:42:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.570535
2025-12-03T15:42:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:42:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:42:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:42:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:42:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:42:21.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:41:58', tmtdew=24.43, humidity=19.12, cloud=0.0, wind=12.04, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:41:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:42:21.910 [DEBUG] [Thread-119273] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:42:22.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:42:22.021 [DEBUG] [Thread-119276] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T15:42:22.021 [DEBUG] [Thread-119276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:42:22.038 [DEBUG] [Thread-119276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:42:22.038 [INFO] [Thread-119276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:42:22.048 [DEBUG] [Thread-119276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:22.049 [DEBUG] [Thread-119276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] client lang: <none>
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] server lang: <none>
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] kex follows: False
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] Compression: none
2025-12-03T15:42:22.050 [DEBUG] [Thread-119276] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:42:22.110 [DEBUG] [Thread-119276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:42:22.110 [DEBUG] [Thread-119276] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:42:22.111 [DEBUG] [Thread-119276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:42:22.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:42:22.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:42:22.167 [DEBUG] [Thread-119276] [transport.py] [_log()] userauth is OK
2025-12-03T15:42:22.167 [DEBUG] [Thread-119276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:42:22.167 [DEBUG] [Thread-119276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:42:22.167 [DEBUG] [Thread-119276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:42:22.168 [DEBUG] [Thread-119276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:42:22.189 [INFO] [Thread-119276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:42:22.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:42:22.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:42:22.986 [DEBUG] [Thread-119276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:42:22.986 [DEBUG] [Thread-119276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:42:23.034 [DEBUG] [Thread-119276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:42:23.034 [DEBUG] [Thread-119276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:42:23.043 [DEBUG] [Thread-119276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:42:23.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:42:23.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:42:23.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:42:23.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:42:23.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:42:23.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:42:23.080 [DEBUG] [Thread-119276] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:42:30.656 [DEBUG] [Thread-119278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:30.725 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:30.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:45.705 [DEBUG] [Thread-119279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:53.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:42:53.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:42:53.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:42:53.692 [DEBUG] [Thread-119280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:42:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 42, 30), 24.28, 19.33, 0.0, 17.45, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:42:53.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:42:30
2025-12-03T15:42:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:42:54.031 [DEBUG] [Thread-119281] [transport.py] [_log()] starting thread (client mode): 0xa2751f60
2025-12-03T15:42:54.031 [DEBUG] [Thread-119281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:42:54.051 [DEBUG] [Thread-119281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:42:54.051 [INFO] [Thread-119281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] client lang: <none>
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] server lang: <none>
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] kex follows: False
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] Compression: none
2025-12-03T15:42:54.054 [DEBUG] [Thread-119281] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:42:54.070 [DEBUG] [Thread-119281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:42:54.071 [DEBUG] [Thread-119281] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:42:54.071 [DEBUG] [Thread-119281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:42:54.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:42:54.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:42:54.074 [DEBUG] [Thread-119281] [transport.py] [_log()] userauth is OK
2025-12-03T15:42:54.074 [DEBUG] [Thread-119281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:42:54.074 [DEBUG] [Thread-119281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:42:54.074 [DEBUG] [Thread-119281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:42:54.074 [DEBUG] [Thread-119281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:42:54.095 [INFO] [Thread-119281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:42:54.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:42:54.711 [DEBUG] [Thread-119281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:42:54.711 [DEBUG] [Thread-119281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:42:54.711 [DEBUG] [Thread-119281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:42:54.752 [DEBUG] [Thread-119281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:42:54.752 [DEBUG] [Thread-119281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:42:54.754 [DEBUG] [Thread-119281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:42:54.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:42:54.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:42:54.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:42:54.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:42:54.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:42:54.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:42:54.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:42:54.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.570882 -999.00  +22.70  21.59     23   +0.90 1 1 1 1 1   888    0 21.51 -28.15 ----- 21.6 21.6 197.6 27.4 29.8 -31.6 29.2 -31.0 31.1 -29.5 31.8 -30.2
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.570882
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:42:54.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:42:30', tmtdew=24.28, humidity=19.33, cloud=0.0, wind=17.45, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:42:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:42:54.772 [DEBUG] [Thread-119281] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:42:54.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:42:54.854 [DEBUG] [Thread-119284] [transport.py] [_log()] starting thread (client mode): 0xa272b580
2025-12-03T15:42:54.854 [DEBUG] [Thread-119284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:42:54.868 [DEBUG] [Thread-119284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:42:54.868 [INFO] [Thread-119284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] client lang: <none>
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] server lang: <none>
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] kex follows: False
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:42:54.876 [DEBUG] [Thread-119284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:42:54.877 [DEBUG] [Thread-119284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:42:54.877 [DEBUG] [Thread-119284] [transport.py] [_log()] Compression: none
2025-12-03T15:42:54.877 [DEBUG] [Thread-119284] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:42:54.935 [DEBUG] [Thread-119284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:42:54.936 [DEBUG] [Thread-119284] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:42:54.936 [DEBUG] [Thread-119284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:42:54.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:42:54.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:42:54.991 [DEBUG] [Thread-119284] [transport.py] [_log()] userauth is OK
2025-12-03T15:42:54.991 [DEBUG] [Thread-119284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:42:54.992 [DEBUG] [Thread-119284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:42:54.992 [DEBUG] [Thread-119284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:42:54.992 [DEBUG] [Thread-119284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:42:55.012 [INFO] [Thread-119284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:42:55.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:42:55.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:42:55.846 [DEBUG] [Thread-119284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:42:55.846 [DEBUG] [Thread-119284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:42:55.893 [DEBUG] [Thread-119284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:42:55.894 [DEBUG] [Thread-119284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:42:55.902 [DEBUG] [Thread-119284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:42:55.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:42:55.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:42:55.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:42:55.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:42:55.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:42:55.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:42:55.936 [DEBUG] [Thread-119284] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:43:00.737 [DEBUG] [Thread-119286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:15.786 [DEBUG] [Thread-119287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:25.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:43:25.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:43:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:43:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 43, 2), 24.78, 18.77, 0.0, 21.49, 22.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:43:26.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:43:02
2025-12-03T15:43:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:43:26.922 [DEBUG] [Thread-119288] [transport.py] [_log()] starting thread (client mode): 0xa27c9270
2025-12-03T15:43:26.923 [DEBUG] [Thread-119288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:43:26.942 [DEBUG] [Thread-119288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:43:26.942 [INFO] [Thread-119288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:43:26.945 [DEBUG] [Thread-119288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:43:26.945 [DEBUG] [Thread-119288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:43:26.945 [DEBUG] [Thread-119288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:43:26.945 [DEBUG] [Thread-119288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:26.945 [DEBUG] [Thread-119288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] client lang: <none>
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] server lang: <none>
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] kex follows: False
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] Compression: none
2025-12-03T15:43:26.946 [DEBUG] [Thread-119288] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:43:26.961 [DEBUG] [Thread-119288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:43:26.961 [DEBUG] [Thread-119288] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:43:26.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:43:26.961 [DEBUG] [Thread-119288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:43:26.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:43:26.962 [DEBUG] [Thread-119288] [transport.py] [_log()] userauth is OK
2025-12-03T15:43:26.962 [DEBUG] [Thread-119288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:43:26.962 [DEBUG] [Thread-119288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:43:26.962 [DEBUG] [Thread-119288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:43:26.962 [DEBUG] [Thread-119288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:43:26.979 [INFO] [Thread-119288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:43:26.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:43:27.620 [DEBUG] [Thread-119288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:43:27.620 [DEBUG] [Thread-119288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:43:27.620 [DEBUG] [Thread-119288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:43:27.661 [DEBUG] [Thread-119288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:43:27.661 [DEBUG] [Thread-119288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:43:27.663 [DEBUG] [Thread-119288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:43:27.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:43:27.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:43:27.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:43:27.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:43:27.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:43:27.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:43:27.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.571229 -999.00  +22.60  27.28     23   +0.90 1 1 1 1 1   888    0 21.58 -28.56 ----- 27.3 27.3 203.0 32.5 29.6 -31.6 29.0 -32.4 30.9 -30.1 31.6 -33.6
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:43:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.571229
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:43:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:43:02', tmtdew=24.78, humidity=18.77, cloud=0.0, wind=21.49, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:42:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:43:27.683 [DEBUG] [Thread-119288] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:43:27.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:43:27.770 [DEBUG] [Thread-119291] [transport.py] [_log()] starting thread (client mode): 0xa27479a0
2025-12-03T15:43:27.770 [DEBUG] [Thread-119291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:43:27.786 [DEBUG] [Thread-119291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:43:27.786 [INFO] [Thread-119291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:27.793 [DEBUG] [Thread-119291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] client lang: <none>
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] server lang: <none>
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] kex follows: False
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] Compression: none
2025-12-03T15:43:27.794 [DEBUG] [Thread-119291] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:43:27.850 [DEBUG] [Thread-119291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:43:27.851 [DEBUG] [Thread-119291] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:43:27.851 [DEBUG] [Thread-119291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:43:27.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:43:27.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:43:27.908 [DEBUG] [Thread-119291] [transport.py] [_log()] userauth is OK
2025-12-03T15:43:27.908 [DEBUG] [Thread-119291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:43:27.908 [DEBUG] [Thread-119291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:43:27.908 [DEBUG] [Thread-119291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:43:27.908 [DEBUG] [Thread-119291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:43:27.929 [INFO] [Thread-119291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:43:27.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:43:27.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:43:28.803 [DEBUG] [Thread-119291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:43:28.803 [DEBUG] [Thread-119291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:43:28.850 [DEBUG] [Thread-119291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:43:28.851 [DEBUG] [Thread-119291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:43:28.859 [DEBUG] [Thread-119291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:43:28.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:43:28.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:43:28.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:43:28.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:43:28.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:43:28.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:43:28.891 [DEBUG] [Thread-119291] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:43:30.819 [DEBUG] [Thread-119293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:30.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:30.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:45.870 [DEBUG] [Thread-119294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:53.735 [DEBUG] [Thread-119295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:43:58.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:43:58.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:43:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:43:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 43, 34), 24.7, 19.12, 0.0, 20.34, 22.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:43:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:43:34
2025-12-03T15:43:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:43:59.843 [DEBUG] [Thread-119296] [transport.py] [_log()] starting thread (client mode): 0xa272abc0
2025-12-03T15:43:59.843 [DEBUG] [Thread-119296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:43:59.863 [DEBUG] [Thread-119296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:43:59.864 [INFO] [Thread-119296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:43:59.867 [DEBUG] [Thread-119296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] client lang: <none>
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] server lang: <none>
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] kex follows: False
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] Compression: none
2025-12-03T15:43:59.868 [DEBUG] [Thread-119296] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:43:59.886 [DEBUG] [Thread-119296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:43:59.886 [DEBUG] [Thread-119296] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:43:59.887 [DEBUG] [Thread-119296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:43:59.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:43:59.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:43:59.889 [DEBUG] [Thread-119296] [transport.py] [_log()] userauth is OK
2025-12-03T15:43:59.889 [DEBUG] [Thread-119296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:43:59.889 [DEBUG] [Thread-119296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:43:59.889 [DEBUG] [Thread-119296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:43:59.889 [DEBUG] [Thread-119296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:43:59.914 [INFO] [Thread-119296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:43:59.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:44:00.533 [DEBUG] [Thread-119296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:44:00.533 [DEBUG] [Thread-119296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:44:00.534 [DEBUG] [Thread-119296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:44:00.574 [DEBUG] [Thread-119296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:44:00.574 [DEBUG] [Thread-119296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:44:00.577 [DEBUG] [Thread-119296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:44:00.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:44:00.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:44:00.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:44:00.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:44:00.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:44:00.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:44:00.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:44:00.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.571576 -999.00  +22.60  14.51     23   +0.90 1 1 1 1 1   888    0 20.87 -27.14 ----- 14.5 14.5 179.6 19.9 29.4 -31.8 28.9 -31.6 30.9 -29.3 31.4 -29.5
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.571576
2025-12-03T15:44:00.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:44:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:44:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:44:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:44:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:44:00.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:43:34', tmtdew=24.7, humidity=19.12, cloud=0.0, wind=20.34, temperature=22.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:43:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:44:00.602 [DEBUG] [Thread-119296] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:44:00.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:44:00.697 [DEBUG] [Thread-119299] [transport.py] [_log()] starting thread (client mode): 0xa27cafb0
2025-12-03T15:44:00.697 [DEBUG] [Thread-119299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:44:00.712 [DEBUG] [Thread-119299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:44:00.712 [INFO] [Thread-119299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:44:00.720 [DEBUG] [Thread-119299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:44:00.720 [DEBUG] [Thread-119299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:44:00.720 [DEBUG] [Thread-119299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:44:00.720 [DEBUG] [Thread-119299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] client lang: <none>
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] server lang: <none>
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] kex follows: False
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] Compression: none
2025-12-03T15:44:00.721 [DEBUG] [Thread-119299] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:44:00.780 [DEBUG] [Thread-119299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:44:00.781 [DEBUG] [Thread-119299] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:44:00.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:44:00.782 [DEBUG] [Thread-119299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:44:00.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:44:00.837 [DEBUG] [Thread-119299] [transport.py] [_log()] userauth is OK
2025-12-03T15:44:00.837 [DEBUG] [Thread-119299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:44:00.837 [DEBUG] [Thread-119299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:44:00.837 [DEBUG] [Thread-119299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:44:00.838 [DEBUG] [Thread-119299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:44:00.857 [INFO] [Thread-119299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:44:00.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:44:00.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:44:00.908 [DEBUG] [Thread-119301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:01.700 [DEBUG] [Thread-119299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:44:01.700 [DEBUG] [Thread-119299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:44:01.748 [DEBUG] [Thread-119299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:44:01.748 [DEBUG] [Thread-119299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:44:01.758 [DEBUG] [Thread-119299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:44:01.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:44:01.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:44:01.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:44:01.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:44:01.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:44:01.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:44:01.792 [DEBUG] [Thread-119299] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:44:15.957 [DEBUG] [Thread-119302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:30.994 [DEBUG] [Thread-119303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:31.008 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:31.009 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:31.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:44:31.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:44:31.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:44:32.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 44, 6), 24.59, 19.24, 0.0, 18.88, 22.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:44:32.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:44:06
2025-12-03T15:44:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:44:32.744 [DEBUG] [Thread-119304] [transport.py] [_log()] starting thread (client mode): 0xa27502b0
2025-12-03T15:44:32.744 [DEBUG] [Thread-119304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:44:32.764 [DEBUG] [Thread-119304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:44:32.764 [INFO] [Thread-119304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] client lang: <none>
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] server lang: <none>
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] kex follows: False
2025-12-03T15:44:32.767 [DEBUG] [Thread-119304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] Compression: none
2025-12-03T15:44:32.768 [DEBUG] [Thread-119304] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:44:32.784 [DEBUG] [Thread-119304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:44:32.785 [DEBUG] [Thread-119304] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:44:32.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:44:32.786 [DEBUG] [Thread-119304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:44:32.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:44:32.788 [DEBUG] [Thread-119304] [transport.py] [_log()] userauth is OK
2025-12-03T15:44:32.788 [DEBUG] [Thread-119304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:44:32.788 [DEBUG] [Thread-119304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:44:32.789 [DEBUG] [Thread-119304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:44:32.789 [DEBUG] [Thread-119304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:44:32.802 [INFO] [Thread-119304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:44:32.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:44:33.422 [DEBUG] [Thread-119304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:44:33.423 [DEBUG] [Thread-119304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:44:33.423 [DEBUG] [Thread-119304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:44:33.463 [DEBUG] [Thread-119304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:44:33.463 [DEBUG] [Thread-119304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:44:33.467 [DEBUG] [Thread-119304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:44:33.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:44:33.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:44:33.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:44:33.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:44:33.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:44:33.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:44:33.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:44:33.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.571923 -999.00  +22.10  19.81     24   +0.60 1 1 1 1 1   888    0 21.45 -26.10 ----- 19.8 19.8 183.8 28.2 29.3 -32.1 28.4 -33.1 30.5 -29.6 31.2 -31.5
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.571923
2025-12-03T15:44:33.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:44:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:44:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:44:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:44:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:44:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:44:06', tmtdew=24.59, humidity=19.24, cloud=0.0, wind=18.88, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:43:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:44:33.494 [DEBUG] [Thread-119304] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:44:33.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:44:33.590 [DEBUG] [Thread-119307] [transport.py] [_log()] starting thread (client mode): 0xa517e740
2025-12-03T15:44:33.590 [DEBUG] [Thread-119307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:44:33.605 [DEBUG] [Thread-119307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:44:33.606 [INFO] [Thread-119307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:44:33.613 [DEBUG] [Thread-119307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:44:33.613 [DEBUG] [Thread-119307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] client lang: <none>
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] server lang: <none>
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] kex follows: False
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:44:33.614 [DEBUG] [Thread-119307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:44:33.615 [DEBUG] [Thread-119307] [transport.py] [_log()] Compression: none
2025-12-03T15:44:33.615 [DEBUG] [Thread-119307] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:44:33.673 [DEBUG] [Thread-119307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:44:33.674 [DEBUG] [Thread-119307] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:44:33.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:44:33.675 [DEBUG] [Thread-119307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:44:33.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:44:33.729 [DEBUG] [Thread-119307] [transport.py] [_log()] userauth is OK
2025-12-03T15:44:33.729 [DEBUG] [Thread-119307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:44:33.729 [DEBUG] [Thread-119307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:44:33.729 [DEBUG] [Thread-119307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:44:33.729 [DEBUG] [Thread-119307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:44:33.748 [INFO] [Thread-119307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:44:33.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:44:33.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:44:34.580 [DEBUG] [Thread-119307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:44:34.580 [DEBUG] [Thread-119307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:44:34.628 [DEBUG] [Thread-119307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:44:34.628 [DEBUG] [Thread-119307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:44:34.637 [DEBUG] [Thread-119307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:44:34.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:44:34.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:44:34.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:44:34.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:44:34.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:44:34.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:44:34.675 [DEBUG] [Thread-119307] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:44:46.024 [DEBUG] [Thread-119309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:44:53.770 [DEBUG] [Thread-119310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:01.065 [DEBUG] [Thread-119311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:04.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:45:04.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:45:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:45:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 44, 38), 24.92, 18.74, 0.0, 15.63, 22.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:45:05.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:44:38
2025-12-03T15:45:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:45:05.614 [DEBUG] [Thread-119312] [transport.py] [_log()] starting thread (client mode): 0xa272b520
2025-12-03T15:45:05.614 [DEBUG] [Thread-119312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:45:05.636 [DEBUG] [Thread-119312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:45:05.636 [INFO] [Thread-119312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:05.639 [DEBUG] [Thread-119312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] client lang: <none>
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] server lang: <none>
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] kex follows: False
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] Compression: none
2025-12-03T15:45:05.640 [DEBUG] [Thread-119312] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:45:05.657 [DEBUG] [Thread-119312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:45:05.658 [DEBUG] [Thread-119312] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:45:05.658 [DEBUG] [Thread-119312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:45:05.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:45:05.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:45:05.660 [DEBUG] [Thread-119312] [transport.py] [_log()] userauth is OK
2025-12-03T15:45:05.660 [DEBUG] [Thread-119312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:45:05.660 [DEBUG] [Thread-119312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:45:05.660 [DEBUG] [Thread-119312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:45:05.661 [DEBUG] [Thread-119312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:45:05.679 [INFO] [Thread-119312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:45:05.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:45:06.422 [DEBUG] [Thread-119312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:45:06.422 [DEBUG] [Thread-119312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:45:06.423 [DEBUG] [Thread-119312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:45:06.463 [DEBUG] [Thread-119312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:45:06.463 [DEBUG] [Thread-119312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:45:06.466 [DEBUG] [Thread-119312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:45:06.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:45:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:45:06.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:45:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:45:06.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:45:06.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:45:06.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:45:06.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.572618 -999.00  +21.80   8.10     24   +0.70 1 1 1 1 1   888    0 21.12 -32.51 ----- 8.1 8.1 203.4 19.2 28.9 -31.2 28.3 -32.4 30.4 -28.4 30.9 -30.7
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.572618
2025-12-03T15:45:06.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:45:06.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:44:38', tmtdew=24.92, humidity=18.74, cloud=0.0, wind=15.63, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:44:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:45:06.488 [DEBUG] [Thread-119312] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:45:06.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:45:06.583 [DEBUG] [Thread-119315] [transport.py] [_log()] starting thread (client mode): 0xa277b4c0
2025-12-03T15:45:06.583 [DEBUG] [Thread-119315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:45:06.597 [DEBUG] [Thread-119315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:45:06.598 [INFO] [Thread-119315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:45:06.605 [DEBUG] [Thread-119315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:45:06.606 [DEBUG] [Thread-119315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] client lang: <none>
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] server lang: <none>
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] kex follows: False
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:45:06.607 [DEBUG] [Thread-119315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:45:06.608 [DEBUG] [Thread-119315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:45:06.608 [DEBUG] [Thread-119315] [transport.py] [_log()] Compression: none
2025-12-03T15:45:06.608 [DEBUG] [Thread-119315] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:45:06.664 [DEBUG] [Thread-119315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:45:06.665 [DEBUG] [Thread-119315] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:45:06.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:45:06.666 [DEBUG] [Thread-119315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:45:06.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:45:06.721 [DEBUG] [Thread-119315] [transport.py] [_log()] userauth is OK
2025-12-03T15:45:06.722 [DEBUG] [Thread-119315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:45:06.722 [DEBUG] [Thread-119315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:45:06.722 [DEBUG] [Thread-119315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:45:06.722 [DEBUG] [Thread-119315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:45:06.741 [INFO] [Thread-119315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:45:06.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:45:06.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:45:07.638 [DEBUG] [Thread-119315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:45:07.638 [DEBUG] [Thread-119315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:45:07.686 [DEBUG] [Thread-119315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:45:07.686 [DEBUG] [Thread-119315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:45:07.695 [DEBUG] [Thread-119315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:45:07.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:45:07.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:45:07.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:45:07.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:45:07.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:45:07.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:45:07.732 [DEBUG] [Thread-119315] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:45:16.099 [DEBUG] [Thread-119317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:31.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:31.150 [DEBUG] [Thread-119318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:31.150 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:37.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:45:37.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:45:37.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:45:38.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 45, 10), 24.65, 19.04, 0.0, 14.38, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:45:38.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:45:10
2025-12-03T15:45:38.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:45:38.673 [DEBUG] [Thread-119319] [transport.py] [_log()] starting thread (client mode): 0xa517e530
2025-12-03T15:45:38.673 [DEBUG] [Thread-119319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:45:38.694 [DEBUG] [Thread-119319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:45:38.695 [INFO] [Thread-119319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:45:38.698 [DEBUG] [Thread-119319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] client lang: <none>
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] server lang: <none>
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] kex follows: False
2025-12-03T15:45:38.699 [DEBUG] [Thread-119319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] Compression: none
2025-12-03T15:45:38.700 [DEBUG] [Thread-119319] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:45:38.719 [DEBUG] [Thread-119319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:45:38.720 [DEBUG] [Thread-119319] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:45:38.721 [DEBUG] [Thread-119319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:45:38.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:45:38.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:45:38.723 [DEBUG] [Thread-119319] [transport.py] [_log()] userauth is OK
2025-12-03T15:45:38.724 [DEBUG] [Thread-119319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:45:38.724 [DEBUG] [Thread-119319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:45:38.724 [DEBUG] [Thread-119319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:45:38.724 [DEBUG] [Thread-119319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:45:38.747 [INFO] [Thread-119319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:45:38.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:45:39.420 [DEBUG] [Thread-119319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:45:39.420 [DEBUG] [Thread-119319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:45:39.421 [DEBUG] [Thread-119319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:45:39.461 [DEBUG] [Thread-119319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:45:39.461 [DEBUG] [Thread-119319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:45:39.465 [DEBUG] [Thread-119319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:45:39.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:45:39.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:45:39.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:45:39.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:45:39.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:45:39.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:45:39.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:45:39.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.572965 -999.00  +22.10  19.48     24   +0.80 1 1 1 1 1   888    0 20.96 -36.05 ----- 19.5 19.5 175.2 24.0 29.0 -30.6 28.5 -29.0 30.4 -27.2 31.0 -28.4
2025-12-03T15:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:45:39.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.572965
2025-12-03T15:45:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:45:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:45:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:45:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:45:39.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:45:39.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:45:10', tmtdew=24.65, humidity=19.04, cloud=0.0, wind=14.38, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:45:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:45:39.492 [DEBUG] [Thread-119319] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:45:39.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:45:39.587 [DEBUG] [Thread-119322] [transport.py] [_log()] starting thread (client mode): 0xa517f190
2025-12-03T15:45:39.587 [DEBUG] [Thread-119322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:45:39.602 [DEBUG] [Thread-119322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:45:39.602 [INFO] [Thread-119322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] client lang: <none>
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] server lang: <none>
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] kex follows: False
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:45:39.610 [DEBUG] [Thread-119322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:45:39.611 [DEBUG] [Thread-119322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:45:39.611 [DEBUG] [Thread-119322] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:45:39.611 [DEBUG] [Thread-119322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:45:39.611 [DEBUG] [Thread-119322] [transport.py] [_log()] Compression: none
2025-12-03T15:45:39.611 [DEBUG] [Thread-119322] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:45:39.670 [DEBUG] [Thread-119322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:45:39.670 [DEBUG] [Thread-119322] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:45:39.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:45:39.671 [DEBUG] [Thread-119322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:45:39.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:45:39.728 [DEBUG] [Thread-119322] [transport.py] [_log()] userauth is OK
2025-12-03T15:45:39.729 [DEBUG] [Thread-119322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:45:39.729 [DEBUG] [Thread-119322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:45:39.729 [DEBUG] [Thread-119322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:45:39.729 [DEBUG] [Thread-119322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:45:39.749 [INFO] [Thread-119322] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:45:39.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:45:39.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:45:40.578 [DEBUG] [Thread-119322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:45:40.578 [DEBUG] [Thread-119322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:45:40.626 [DEBUG] [Thread-119322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:45:40.626 [DEBUG] [Thread-119322] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:45:40.636 [DEBUG] [Thread-119322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:45:40.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:45:40.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:45:40.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:45:40.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:45:40.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:45:40.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:45:40.674 [DEBUG] [Thread-119322] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:45:46.183 [DEBUG] [Thread-119324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:45:53.809 [DEBUG] [Thread-119325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:01.235 [DEBUG] [Thread-119326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:10.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:46:10.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:46:10.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:46:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 45, 42), 24.61, 19.04, 0.0, 23.49, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:46:11.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:45:42
2025-12-03T15:46:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:46:11.601 [DEBUG] [Thread-119327] [transport.py] [_log()] starting thread (client mode): 0xa517f010
2025-12-03T15:46:11.601 [DEBUG] [Thread-119327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:46:11.621 [DEBUG] [Thread-119327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:46:11.621 [INFO] [Thread-119327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:46:11.624 [DEBUG] [Thread-119327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:46:11.624 [DEBUG] [Thread-119327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:46:11.624 [DEBUG] [Thread-119327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:46:11.624 [DEBUG] [Thread-119327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:11.624 [DEBUG] [Thread-119327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] client lang: <none>
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] server lang: <none>
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] kex follows: False
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] Compression: none
2025-12-03T15:46:11.625 [DEBUG] [Thread-119327] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:46:11.643 [DEBUG] [Thread-119327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:46:11.644 [DEBUG] [Thread-119327] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:46:11.644 [DEBUG] [Thread-119327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:46:11.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:46:11.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:46:11.646 [DEBUG] [Thread-119327] [transport.py] [_log()] userauth is OK
2025-12-03T15:46:11.646 [DEBUG] [Thread-119327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:46:11.646 [DEBUG] [Thread-119327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:46:11.646 [DEBUG] [Thread-119327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:46:11.646 [DEBUG] [Thread-119327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:46:11.667 [INFO] [Thread-119327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:46:11.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:46:12.270 [DEBUG] [Thread-119327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:46:12.271 [DEBUG] [Thread-119327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:46:12.271 [DEBUG] [Thread-119327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:46:12.312 [DEBUG] [Thread-119327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:46:12.312 [DEBUG] [Thread-119327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:46:12.314 [DEBUG] [Thread-119327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:46:12.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:46:12.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:46:12.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:46:12.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:46:12.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:46:12.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:46:12.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:46:12.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:46:12.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:46:12.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.573312 -999.00  +22.20  24.12     24   +0.70 1 1 1 1 1   888    0 21.00 -35.15 ----- 24.1 24.1 191.2 27.5 29.0 -29.8 28.3 -31.5 30.4 -28.5 31.0 -29.9
2025-12-03T15:46:12.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:46:12.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:46:12.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.573312
2025-12-03T15:46:12.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:46:12.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:46:12.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:46:12.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:46:12.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:46:12.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:45:42', tmtdew=24.61, humidity=19.04, cloud=0.0, wind=23.49, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:45:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:46:12.338 [DEBUG] [Thread-119327] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:46:12.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:46:12.434 [DEBUG] [Thread-119330] [transport.py] [_log()] starting thread (client mode): 0xa27c9810
2025-12-03T15:46:12.434 [DEBUG] [Thread-119330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:46:12.449 [DEBUG] [Thread-119330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:46:12.449 [INFO] [Thread-119330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] client lang: <none>
2025-12-03T15:46:12.457 [DEBUG] [Thread-119330] [transport.py] [_log()] server lang: <none>
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] kex follows: False
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] Compression: none
2025-12-03T15:46:12.458 [DEBUG] [Thread-119330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:46:12.515 [DEBUG] [Thread-119330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:46:12.515 [DEBUG] [Thread-119330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:46:12.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:46:12.516 [DEBUG] [Thread-119330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:46:12.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:46:12.570 [DEBUG] [Thread-119330] [transport.py] [_log()] userauth is OK
2025-12-03T15:46:12.570 [DEBUG] [Thread-119330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:46:12.571 [DEBUG] [Thread-119330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:46:12.571 [DEBUG] [Thread-119330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:46:12.571 [DEBUG] [Thread-119330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:46:12.596 [INFO] [Thread-119330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:46:12.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:46:12.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:46:13.423 [DEBUG] [Thread-119330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:46:13.423 [DEBUG] [Thread-119330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:46:13.471 [DEBUG] [Thread-119330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:46:13.471 [DEBUG] [Thread-119330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:46:13.480 [DEBUG] [Thread-119330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:46:13.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:46:13.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:46:13.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:46:13.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:46:13.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:46:13.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:46:13.517 [DEBUG] [Thread-119330] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:46:16.267 [DEBUG] [Thread-119332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:31.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:31.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:31.307 [DEBUG] [Thread-119333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:43.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:46:43.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:46:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:46:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 46, 14), 24.61, 19.05, 0.0, 22.66, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:46:44.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:46:14
2025-12-03T15:46:44.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:46:44.478 [DEBUG] [Thread-119334] [transport.py] [_log()] starting thread (client mode): 0xa27cbb20
2025-12-03T15:46:44.478 [DEBUG] [Thread-119334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:46:44.499 [DEBUG] [Thread-119334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:46:44.499 [INFO] [Thread-119334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:46:44.502 [DEBUG] [Thread-119334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:46:44.502 [DEBUG] [Thread-119334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:46:44.502 [DEBUG] [Thread-119334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] client lang: <none>
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] server lang: <none>
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] kex follows: False
2025-12-03T15:46:44.503 [DEBUG] [Thread-119334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] Compression: none
2025-12-03T15:46:44.504 [DEBUG] [Thread-119334] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:46:44.524 [DEBUG] [Thread-119334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:46:44.524 [DEBUG] [Thread-119334] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:46:44.525 [DEBUG] [Thread-119334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:46:44.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:46:44.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:46:44.527 [DEBUG] [Thread-119334] [transport.py] [_log()] userauth is OK
2025-12-03T15:46:44.528 [DEBUG] [Thread-119334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:46:44.528 [DEBUG] [Thread-119334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:46:44.528 [DEBUG] [Thread-119334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:46:44.528 [DEBUG] [Thread-119334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:46:44.564 [INFO] [Thread-119334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:46:44.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:46:45.192 [DEBUG] [Thread-119334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:46:45.193 [DEBUG] [Thread-119334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:46:45.193 [DEBUG] [Thread-119334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:46:45.234 [DEBUG] [Thread-119334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:46:45.234 [DEBUG] [Thread-119334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:46:45.238 [DEBUG] [Thread-119334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:46:45.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:46:45.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:46:45.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:46:45.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:46:45.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:46:45.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:46:45.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:46:45.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:46:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:46:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.573660 -999.00  +22.20  20.74     24   +0.70 1 1 1 1 1   888    0 21.05 -34.69 ----- 20.7 20.7 191.4 26.5 28.8 -30.5 28.3 -32.5 30.2 -28.3 30.8 -30.0
2025-12-03T15:46:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:46:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:46:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.573660
2025-12-03T15:46:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:46:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:46:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:46:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:46:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:46:45.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:46:14', tmtdew=24.61, humidity=19.05, cloud=0.0, wind=22.66, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:46:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:46:45.263 [DEBUG] [Thread-119334] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:46:45.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:46:45.353 [DEBUG] [Thread-119337] [transport.py] [_log()] starting thread (client mode): 0xa517cf40
2025-12-03T15:46:45.353 [DEBUG] [Thread-119337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:46:45.368 [DEBUG] [Thread-119337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:46:45.368 [INFO] [Thread-119337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] client lang: <none>
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] server lang: <none>
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] kex follows: False
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:46:45.376 [DEBUG] [Thread-119337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:46:45.377 [DEBUG] [Thread-119337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:46:45.377 [DEBUG] [Thread-119337] [transport.py] [_log()] Compression: none
2025-12-03T15:46:45.377 [DEBUG] [Thread-119337] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:46:45.435 [DEBUG] [Thread-119337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:46:45.436 [DEBUG] [Thread-119337] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:46:45.437 [DEBUG] [Thread-119337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:46:45.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:46:45.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:46:45.494 [DEBUG] [Thread-119337] [transport.py] [_log()] userauth is OK
2025-12-03T15:46:45.495 [DEBUG] [Thread-119337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:46:45.495 [DEBUG] [Thread-119337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:46:45.495 [DEBUG] [Thread-119337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:46:45.495 [DEBUG] [Thread-119337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:46:45.519 [INFO] [Thread-119337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:46:45.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:46:45.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:46:46.339 [DEBUG] [Thread-119339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:46:46.372 [DEBUG] [Thread-119337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:46:46.372 [DEBUG] [Thread-119337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:46:46.420 [DEBUG] [Thread-119337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:46:46.420 [DEBUG] [Thread-119337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:46:46.428 [DEBUG] [Thread-119337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:46:46.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:46:46.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:46:46.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:46:46.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:46:46.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:46:46.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:46:46.461 [DEBUG] [Thread-119337] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:46:53.863 [DEBUG] [Thread-119340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:01.389 [DEBUG] [Thread-119341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:16.426 [DEBUG] [Thread-119342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:47:16.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:47:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:47:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 46, 46), 24.46, 19.0, 0.0, 21.05, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:47:17.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:46:46
2025-12-03T15:47:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:47:17.478 [DEBUG] [Thread-119343] [transport.py] [_log()] starting thread (client mode): 0xa277a020
2025-12-03T15:47:17.479 [DEBUG] [Thread-119343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:47:17.498 [DEBUG] [Thread-119343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:47:17.499 [INFO] [Thread-119343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] client lang: <none>
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] server lang: <none>
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] kex follows: False
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] Compression: none
2025-12-03T15:47:17.502 [DEBUG] [Thread-119343] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:47:17.517 [DEBUG] [Thread-119343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:47:17.518 [DEBUG] [Thread-119343] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:47:17.518 [DEBUG] [Thread-119343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:47:17.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:47:17.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:47:17.519 [DEBUG] [Thread-119343] [transport.py] [_log()] userauth is OK
2025-12-03T15:47:17.519 [DEBUG] [Thread-119343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:47:17.519 [DEBUG] [Thread-119343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:47:17.519 [DEBUG] [Thread-119343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:47:17.519 [DEBUG] [Thread-119343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:47:17.538 [INFO] [Thread-119343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:47:17.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:47:18.172 [DEBUG] [Thread-119343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:47:18.172 [DEBUG] [Thread-119343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:47:18.172 [DEBUG] [Thread-119343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:47:18.212 [DEBUG] [Thread-119343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:47:18.213 [DEBUG] [Thread-119343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:47:18.215 [DEBUG] [Thread-119343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:47:18.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:47:18.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:47:18.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:47:18.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:47:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:47:18.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:47:18.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.574007 -999.00  +22.30  20.37     23   +0.70 1 1 1 1 1   888    0 21.48 -36.05 ----- 20.4 20.4 186.2 23.3 28.8 -30.8 28.1 -31.2 30.2 -28.1 30.6 -30.8
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.574007
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:47:18.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:46:46', tmtdew=24.46, humidity=19.0, cloud=0.0, wind=21.05, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:46:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:47:18.233 [DEBUG] [Thread-119343] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:47:18.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:47:18.318 [DEBUG] [Thread-119346] [transport.py] [_log()] starting thread (client mode): 0xa519bd60
2025-12-03T15:47:18.318 [DEBUG] [Thread-119346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:47:18.333 [DEBUG] [Thread-119346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:47:18.333 [INFO] [Thread-119346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] client lang: <none>
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] server lang: <none>
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] kex follows: False
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:47:18.340 [DEBUG] [Thread-119346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:47:18.341 [DEBUG] [Thread-119346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:47:18.341 [DEBUG] [Thread-119346] [transport.py] [_log()] Compression: none
2025-12-03T15:47:18.341 [DEBUG] [Thread-119346] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:47:18.397 [DEBUG] [Thread-119346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:47:18.397 [DEBUG] [Thread-119346] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:47:18.397 [DEBUG] [Thread-119346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:47:18.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:47:18.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:47:18.454 [DEBUG] [Thread-119346] [transport.py] [_log()] userauth is OK
2025-12-03T15:47:18.454 [DEBUG] [Thread-119346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:47:18.455 [DEBUG] [Thread-119346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:47:18.455 [DEBUG] [Thread-119346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:47:18.455 [DEBUG] [Thread-119346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:47:18.469 [INFO] [Thread-119346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:47:18.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:47:18.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:47:19.352 [DEBUG] [Thread-119346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:47:19.352 [DEBUG] [Thread-119346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:47:19.399 [DEBUG] [Thread-119346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:47:19.399 [DEBUG] [Thread-119346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:47:19.408 [DEBUG] [Thread-119346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:47:19.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:47:19.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:47:19.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:47:19.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:47:19.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:47:19.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:47:19.441 [DEBUG] [Thread-119346] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:47:31.438 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:31.439 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:31.458 [DEBUG] [Thread-119348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:46.510 [DEBUG] [Thread-119349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:47:49.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:47:49.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:47:49.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:47:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 47, 18), 24.61, 18.84, 0.0, 21.14, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:47:50.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:47:18
2025-12-03T15:47:50.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:47:50.421 [DEBUG] [Thread-119350] [transport.py] [_log()] starting thread (client mode): 0xa51982e0
2025-12-03T15:47:50.421 [DEBUG] [Thread-119350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:47:50.442 [DEBUG] [Thread-119350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:47:50.443 [INFO] [Thread-119350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] client lang: <none>
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] server lang: <none>
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] kex follows: False
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] Compression: none
2025-12-03T15:47:50.446 [DEBUG] [Thread-119350] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:47:50.462 [DEBUG] [Thread-119350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:47:50.463 [DEBUG] [Thread-119350] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:47:50.463 [DEBUG] [Thread-119350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:47:50.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:47:50.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:47:50.466 [DEBUG] [Thread-119350] [transport.py] [_log()] userauth is OK
2025-12-03T15:47:50.466 [DEBUG] [Thread-119350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:47:50.466 [DEBUG] [Thread-119350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:47:50.466 [DEBUG] [Thread-119350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:47:50.466 [DEBUG] [Thread-119350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:47:50.487 [INFO] [Thread-119350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:47:50.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:47:51.139 [DEBUG] [Thread-119350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:47:51.139 [DEBUG] [Thread-119350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:47:51.140 [DEBUG] [Thread-119350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:47:51.180 [DEBUG] [Thread-119350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:47:51.180 [DEBUG] [Thread-119350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:47:51.182 [DEBUG] [Thread-119350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:47:51.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:47:51.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:47:51.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:47:51.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:47:51.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:47:51.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:47:51.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.574354 -999.00  +22.20  16.24     23   +0.60 1 1 1 1 1   888    0 20.77 -37.83 ----- 16.2 16.2 206.8 33.2 28.6 -31.6 28.1 -31.7 30.0 -29.1 30.6 -30.8
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.574354
2025-12-03T15:47:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:47:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:47:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:47:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:47:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:47:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:47:18', tmtdew=24.61, humidity=18.84, cloud=0.0, wind=21.14, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:47:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:47:51.200 [DEBUG] [Thread-119350] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:47:51.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:47:51.286 [DEBUG] [Thread-119353] [transport.py] [_log()] starting thread (client mode): 0xa517e470
2025-12-03T15:47:51.286 [DEBUG] [Thread-119353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:47:51.300 [DEBUG] [Thread-119353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:47:51.300 [INFO] [Thread-119353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] client lang: <none>
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] server lang: <none>
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] kex follows: False
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] Compression: none
2025-12-03T15:47:51.308 [DEBUG] [Thread-119353] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:47:51.365 [DEBUG] [Thread-119353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:47:51.366 [DEBUG] [Thread-119353] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:47:51.366 [DEBUG] [Thread-119353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:47:51.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:47:51.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:47:51.423 [DEBUG] [Thread-119353] [transport.py] [_log()] userauth is OK
2025-12-03T15:47:51.423 [DEBUG] [Thread-119353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:47:51.423 [DEBUG] [Thread-119353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:47:51.423 [DEBUG] [Thread-119353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:47:51.423 [DEBUG] [Thread-119353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:47:51.437 [INFO] [Thread-119353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:47:51.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:47:51.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:47:52.252 [DEBUG] [Thread-119353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:47:52.252 [DEBUG] [Thread-119353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:47:52.299 [DEBUG] [Thread-119353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:47:52.299 [DEBUG] [Thread-119353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:47:52.307 [DEBUG] [Thread-119353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:47:52.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:47:52.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:47:52.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:47:52.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:47:52.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:47:52.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:47:52.339 [DEBUG] [Thread-119353] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:47:53.904 [DEBUG] [Thread-119355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:01.545 [DEBUG] [Thread-119356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:16.596 [DEBUG] [Thread-119357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:22.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:48:22.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:48:22.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:48:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 47, 50), 24.91, 18.59, 0.0, 22.92, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:48:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:47:50
2025-12-03T15:48:23.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:48:23.330 [DEBUG] [Thread-119358] [transport.py] [_log()] starting thread (client mode): 0xa27c9ed0
2025-12-03T15:48:23.330 [DEBUG] [Thread-119358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:48:23.350 [DEBUG] [Thread-119358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:48:23.350 [INFO] [Thread-119358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] client lang: <none>
2025-12-03T15:48:23.353 [DEBUG] [Thread-119358] [transport.py] [_log()] server lang: <none>
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] kex follows: False
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] Compression: none
2025-12-03T15:48:23.354 [DEBUG] [Thread-119358] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:48:23.371 [DEBUG] [Thread-119358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:48:23.371 [DEBUG] [Thread-119358] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:48:23.371 [DEBUG] [Thread-119358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:48:23.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:48:23.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:48:23.372 [DEBUG] [Thread-119358] [transport.py] [_log()] userauth is OK
2025-12-03T15:48:23.372 [DEBUG] [Thread-119358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:48:23.372 [DEBUG] [Thread-119358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:48:23.372 [DEBUG] [Thread-119358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:48:23.372 [DEBUG] [Thread-119358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:48:23.381 [INFO] [Thread-119358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:48:23.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:48:24.032 [DEBUG] [Thread-119358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:48:24.032 [DEBUG] [Thread-119358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:48:24.032 [DEBUG] [Thread-119358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:48:24.074 [DEBUG] [Thread-119358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:48:24.074 [DEBUG] [Thread-119358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:48:24.076 [DEBUG] [Thread-119358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:48:24.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:48:24.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:48:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:48:24.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:48:24.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:48:24.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:48:24.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.574701 -999.00  +22.40  15.92     23   +0.60 1 1 1 1 1   888    0 21.33 -35.95 ----- 15.9 15.9 187.7 24.1 28.6 -29.6 28.2 -29.8 30.0 -29.1 30.6 -31.1
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.574701
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:48:24.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:47:50', tmtdew=24.91, humidity=18.59, cloud=0.0, wind=22.92, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:47:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:48:24.095 [DEBUG] [Thread-119358] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:48:24.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:48:24.180 [DEBUG] [Thread-119361] [transport.py] [_log()] starting thread (client mode): 0xa2778910
2025-12-03T15:48:24.180 [DEBUG] [Thread-119361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:48:24.195 [DEBUG] [Thread-119361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:48:24.195 [INFO] [Thread-119361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] client lang: <none>
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] server lang: <none>
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] kex follows: False
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] Compression: none
2025-12-03T15:48:24.203 [DEBUG] [Thread-119361] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:48:24.258 [DEBUG] [Thread-119361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:48:24.258 [DEBUG] [Thread-119361] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:48:24.258 [DEBUG] [Thread-119361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:48:24.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:48:24.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:48:24.315 [DEBUG] [Thread-119361] [transport.py] [_log()] userauth is OK
2025-12-03T15:48:24.315 [DEBUG] [Thread-119361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:48:24.315 [DEBUG] [Thread-119361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:48:24.315 [DEBUG] [Thread-119361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:48:24.315 [DEBUG] [Thread-119361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:48:24.330 [INFO] [Thread-119361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:48:24.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:48:24.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:48:25.193 [DEBUG] [Thread-119361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:48:25.194 [DEBUG] [Thread-119361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:48:25.244 [DEBUG] [Thread-119361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:48:25.244 [DEBUG] [Thread-119361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:48:25.253 [DEBUG] [Thread-119361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:48:25.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:48:25.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:48:25.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:48:25.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:48:25.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:48:25.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:48:25.288 [DEBUG] [Thread-119361] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:48:31.579 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:31.580 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:31.636 [DEBUG] [Thread-119363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:46.683 [DEBUG] [Thread-119364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:53.939 [DEBUG] [Thread-119365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:48:55.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:48:55.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:48:55.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:48:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 48, 22), 25.08, 18.37, 0.0, 22.23, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:48:56.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:48:22
2025-12-03T15:48:56.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:48:56.331 [DEBUG] [Thread-119366] [transport.py] [_log()] starting thread (client mode): 0xa2747550
2025-12-03T15:48:56.331 [DEBUG] [Thread-119366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:48:56.352 [DEBUG] [Thread-119366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:48:56.352 [INFO] [Thread-119366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] client lang: <none>
2025-12-03T15:48:56.355 [DEBUG] [Thread-119366] [transport.py] [_log()] server lang: <none>
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] kex follows: False
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] Compression: none
2025-12-03T15:48:56.356 [DEBUG] [Thread-119366] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:48:56.371 [DEBUG] [Thread-119366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:48:56.371 [DEBUG] [Thread-119366] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:48:56.371 [DEBUG] [Thread-119366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:48:56.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:48:56.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:48:56.373 [DEBUG] [Thread-119366] [transport.py] [_log()] userauth is OK
2025-12-03T15:48:56.373 [DEBUG] [Thread-119366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:48:56.373 [DEBUG] [Thread-119366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:48:56.373 [DEBUG] [Thread-119366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:48:56.373 [DEBUG] [Thread-119366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:48:56.388 [INFO] [Thread-119366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:48:56.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:48:57.006 [DEBUG] [Thread-119366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:48:57.007 [DEBUG] [Thread-119366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:48:57.007 [DEBUG] [Thread-119366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:48:57.048 [DEBUG] [Thread-119366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:48:57.048 [DEBUG] [Thread-119366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:48:57.050 [DEBUG] [Thread-119366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:48:57.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:48:57.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:48:57.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:48:57.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:48:57.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:48:57.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:48:57.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.575048 -999.00  +22.30  15.14     24   +0.70 1 1 1 1 1   888    0 20.94 -38.28 ----- 15.1 15.1 187.6 21.9 28.5 -30.5 28.0 -28.6 29.9 -27.2 30.5 -29.1
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.575048
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:48:57.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:48:22', tmtdew=25.08, humidity=18.37, cloud=0.0, wind=22.23, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:48:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:48:57.069 [DEBUG] [Thread-119366] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:48:57.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:48:57.153 [DEBUG] [Thread-119369] [transport.py] [_log()] starting thread (client mode): 0xa27442e0
2025-12-03T15:48:57.153 [DEBUG] [Thread-119369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:48:57.168 [DEBUG] [Thread-119369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:48:57.168 [INFO] [Thread-119369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:57.176 [DEBUG] [Thread-119369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] client lang: <none>
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] server lang: <none>
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] kex follows: False
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:48:57.177 [DEBUG] [Thread-119369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:48:57.178 [DEBUG] [Thread-119369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:48:57.178 [DEBUG] [Thread-119369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:48:57.178 [DEBUG] [Thread-119369] [transport.py] [_log()] Compression: none
2025-12-03T15:48:57.178 [DEBUG] [Thread-119369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:48:57.237 [DEBUG] [Thread-119369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:48:57.237 [DEBUG] [Thread-119369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:48:57.238 [DEBUG] [Thread-119369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:48:57.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:48:57.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:48:57.296 [DEBUG] [Thread-119369] [transport.py] [_log()] userauth is OK
2025-12-03T15:48:57.296 [DEBUG] [Thread-119369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:48:57.296 [DEBUG] [Thread-119369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:48:57.297 [DEBUG] [Thread-119369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:48:57.297 [DEBUG] [Thread-119369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:48:57.316 [INFO] [Thread-119369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:48:57.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:48:57.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:48:58.206 [DEBUG] [Thread-119369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:48:58.206 [DEBUG] [Thread-119369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:48:58.254 [DEBUG] [Thread-119369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:48:58.254 [DEBUG] [Thread-119369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:48:58.264 [DEBUG] [Thread-119369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:48:58.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:48:58.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:48:58.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:48:58.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:48:58.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:48:58.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:48:58.300 [DEBUG] [Thread-119369] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:49:01.715 [DEBUG] [Thread-119371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:16.762 [DEBUG] [Thread-119372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:49:28.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:49:28.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:49:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 48, 54), 24.86, 19.01, 0.0, 14.93, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:49:29.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:48:54
2025-12-03T15:49:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:49:29.321 [DEBUG] [Thread-119373] [transport.py] [_log()] starting thread (client mode): 0xa2779c90
2025-12-03T15:49:29.321 [DEBUG] [Thread-119373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:49:29.342 [DEBUG] [Thread-119373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:49:29.343 [INFO] [Thread-119373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] client lang: <none>
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] server lang: <none>
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] kex follows: False
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] Compression: none
2025-12-03T15:49:29.345 [DEBUG] [Thread-119373] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:49:29.357 [DEBUG] [Thread-119373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:49:29.358 [DEBUG] [Thread-119373] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:49:29.358 [DEBUG] [Thread-119373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:49:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:49:29.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:49:29.360 [DEBUG] [Thread-119373] [transport.py] [_log()] userauth is OK
2025-12-03T15:49:29.360 [DEBUG] [Thread-119373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:49:29.360 [DEBUG] [Thread-119373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:49:29.360 [DEBUG] [Thread-119373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:49:29.361 [DEBUG] [Thread-119373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:49:29.395 [INFO] [Thread-119373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:49:29.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:49:30.042 [DEBUG] [Thread-119373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:49:30.043 [DEBUG] [Thread-119373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:49:30.043 [DEBUG] [Thread-119373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:49:30.084 [DEBUG] [Thread-119373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:49:30.085 [DEBUG] [Thread-119373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:49:30.088 [DEBUG] [Thread-119373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:49:30.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:49:30.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:49:30.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:49:30.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:49:30.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:49:30.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:49:30.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:49:30.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.575396 -999.00  +22.20  13.69     24   +0.90 1 1 1 1 1   888    0 20.40 -44.26 ----- 13.7 13.7 154.9 18.8 28.5 -30.1 27.9 -30.7 29.9 -27.8 30.4 -30.2
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.575396
2025-12-03T15:49:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:49:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:49:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:49:30.116 [DEBUG] [Thread-119373] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:49:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:49:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:49:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:48:54', tmtdew=24.86, humidity=19.01, cloud=0.0, wind=14.93, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:48:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:49:30.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:49:30.215 [DEBUG] [Thread-119376] [transport.py] [_log()] starting thread (client mode): 0xa2745810
2025-12-03T15:49:30.215 [DEBUG] [Thread-119376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:49:30.230 [DEBUG] [Thread-119376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:49:30.230 [INFO] [Thread-119376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:49:30.238 [DEBUG] [Thread-119376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] client lang: <none>
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] server lang: <none>
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] kex follows: False
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] Compression: none
2025-12-03T15:49:30.239 [DEBUG] [Thread-119376] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:49:30.299 [DEBUG] [Thread-119376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:49:30.300 [DEBUG] [Thread-119376] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:49:30.300 [DEBUG] [Thread-119376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:49:30.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:49:30.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:49:30.356 [DEBUG] [Thread-119376] [transport.py] [_log()] userauth is OK
2025-12-03T15:49:30.356 [DEBUG] [Thread-119376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:49:30.356 [DEBUG] [Thread-119376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:49:30.356 [DEBUG] [Thread-119376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:49:30.356 [DEBUG] [Thread-119376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:49:30.375 [INFO] [Thread-119376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:49:30.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:49:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:49:31.227 [DEBUG] [Thread-119376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:49:31.228 [DEBUG] [Thread-119376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:49:31.275 [DEBUG] [Thread-119376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:49:31.275 [DEBUG] [Thread-119376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:49:31.284 [DEBUG] [Thread-119376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:49:31.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:49:31.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:49:31.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:49:31.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:49:31.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:49:31.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:49:31.321 [DEBUG] [Thread-119376] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:49:31.720 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:31.721 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:31.792 [DEBUG] [Thread-119378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:46.844 [DEBUG] [Thread-119379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:49:53.986 [DEBUG] [Thread-119380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:50:01.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:50:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:50:01.875 [DEBUG] [Thread-119381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 49, 59), 24.48, 19.07, 0.0, 24.44, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:50:02.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:49:59
2025-12-03T15:50:02.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:50:02.334 [DEBUG] [Thread-119382] [transport.py] [_log()] starting thread (client mode): 0xa27c9b70
2025-12-03T15:50:02.334 [DEBUG] [Thread-119382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:50:02.353 [DEBUG] [Thread-119382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:50:02.353 [INFO] [Thread-119382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:50:02.357 [DEBUG] [Thread-119382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] client lang: <none>
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] server lang: <none>
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] kex follows: False
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] Compression: none
2025-12-03T15:50:02.358 [DEBUG] [Thread-119382] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:50:02.375 [DEBUG] [Thread-119382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:50:02.376 [DEBUG] [Thread-119382] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:50:02.376 [DEBUG] [Thread-119382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:50:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:50:02.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:50:02.379 [DEBUG] [Thread-119382] [transport.py] [_log()] userauth is OK
2025-12-03T15:50:02.379 [DEBUG] [Thread-119382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:50:02.379 [DEBUG] [Thread-119382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:50:02.379 [DEBUG] [Thread-119382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:50:02.379 [DEBUG] [Thread-119382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:50:02.403 [INFO] [Thread-119382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:50:02.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:50:03.087 [DEBUG] [Thread-119382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:50:03.087 [DEBUG] [Thread-119382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:50:03.088 [DEBUG] [Thread-119382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:50:03.128 [DEBUG] [Thread-119382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:50:03.129 [DEBUG] [Thread-119382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:50:03.133 [DEBUG] [Thread-119382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:50:03.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:50:03.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:50:03.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:50:03.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:50:03.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:50:03.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:50:03.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:50:03.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:50:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:50:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.576090 -999.00  +22.30  14.54     24   +0.80 1 1 1 1 1   888    0 20.84 -46.24 ----- 14.5 14.5 155.6 25.6 28.7 -29.9 28.2 -28.7 30.0 -28.0 30.6 -29.1
2025-12-03T15:50:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:50:03.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:50:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.576090
2025-12-03T15:50:03.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:50:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:50:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:50:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:50:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:50:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:49:59', tmtdew=24.48, humidity=19.07, cloud=0.0, wind=24.44, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:49:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:50:03.191 [DEBUG] [Thread-119382] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:50:03.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:50:03.288 [DEBUG] [Thread-119385] [transport.py] [_log()] starting thread (client mode): 0xa2729db0
2025-12-03T15:50:03.288 [DEBUG] [Thread-119385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:50:03.302 [DEBUG] [Thread-119385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:50:03.303 [INFO] [Thread-119385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:50:03.310 [DEBUG] [Thread-119385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:50:03.310 [DEBUG] [Thread-119385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] client lang: <none>
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] server lang: <none>
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] kex follows: False
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] Compression: none
2025-12-03T15:50:03.311 [DEBUG] [Thread-119385] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:50:03.368 [DEBUG] [Thread-119385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:50:03.369 [DEBUG] [Thread-119385] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:50:03.370 [DEBUG] [Thread-119385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:50:03.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:50:03.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:50:03.424 [DEBUG] [Thread-119385] [transport.py] [_log()] userauth is OK
2025-12-03T15:50:03.424 [DEBUG] [Thread-119385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:50:03.424 [DEBUG] [Thread-119385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:50:03.425 [DEBUG] [Thread-119385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:50:03.425 [DEBUG] [Thread-119385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:50:03.442 [INFO] [Thread-119385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:50:03.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:50:03.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:50:04.303 [DEBUG] [Thread-119385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:50:04.303 [DEBUG] [Thread-119385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:50:04.351 [DEBUG] [Thread-119385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:50:04.351 [DEBUG] [Thread-119385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:50:04.360 [DEBUG] [Thread-119385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:50:04.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:50:04.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:50:04.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:50:04.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:50:04.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:50:04.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:50:04.397 [DEBUG] [Thread-119385] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:50:16.905 [DEBUG] [Thread-119387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:31.862 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:31.863 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:31.955 [DEBUG] [Thread-119388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:34.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:50:34.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:50:34.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:50:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 50, 31), 24.69, 18.82, 0.0, 23.94, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:50:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:50:31
2025-12-03T15:50:35.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:50:35.418 [DEBUG] [Thread-119389] [transport.py] [_log()] starting thread (client mode): 0xa272a890
2025-12-03T15:50:35.418 [DEBUG] [Thread-119389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:50:35.438 [DEBUG] [Thread-119389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:50:35.438 [INFO] [Thread-119389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] client lang: <none>
2025-12-03T15:50:35.440 [DEBUG] [Thread-119389] [transport.py] [_log()] server lang: <none>
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] kex follows: False
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] Compression: none
2025-12-03T15:50:35.441 [DEBUG] [Thread-119389] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:50:35.455 [DEBUG] [Thread-119389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:50:35.455 [DEBUG] [Thread-119389] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:50:35.455 [DEBUG] [Thread-119389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:50:35.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:50:35.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:50:35.456 [DEBUG] [Thread-119389] [transport.py] [_log()] userauth is OK
2025-12-03T15:50:35.456 [DEBUG] [Thread-119389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:50:35.456 [DEBUG] [Thread-119389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:50:35.456 [DEBUG] [Thread-119389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:50:35.456 [DEBUG] [Thread-119389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:50:35.464 [INFO] [Thread-119389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:50:35.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:50:36.102 [DEBUG] [Thread-119389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:50:36.102 [DEBUG] [Thread-119389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:50:36.102 [DEBUG] [Thread-119389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:50:36.143 [DEBUG] [Thread-119389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:50:36.144 [DEBUG] [Thread-119389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:50:36.146 [DEBUG] [Thread-119389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:50:36.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:50:36.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:50:36.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:50:36.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:50:36.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:50:36.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:50:36.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.576437 -999.00  +22.60  15.90     24   +1.10 1 1 1 1 1   888    0 20.26 -53.57 ----- 15.9 15.9 149.7 20.6 28.7 -29.9 28.4 -28.7 30.1 -27.8 30.7 -28.7
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.576437
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:50:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:50:31', tmtdew=24.69, humidity=18.82, cloud=0.0, wind=23.94, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:50:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:50:36.166 [DEBUG] [Thread-119389] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:50:36.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:50:36.253 [DEBUG] [Thread-119392] [transport.py] [_log()] starting thread (client mode): 0xa517c160
2025-12-03T15:50:36.253 [DEBUG] [Thread-119392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:50:36.267 [DEBUG] [Thread-119392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:50:36.267 [INFO] [Thread-119392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] client lang: <none>
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] server lang: <none>
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] kex follows: False
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] Compression: none
2025-12-03T15:50:36.275 [DEBUG] [Thread-119392] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:50:36.333 [DEBUG] [Thread-119392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:50:36.334 [DEBUG] [Thread-119392] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:50:36.334 [DEBUG] [Thread-119392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:50:36.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:50:36.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:50:36.388 [DEBUG] [Thread-119392] [transport.py] [_log()] userauth is OK
2025-12-03T15:50:36.388 [DEBUG] [Thread-119392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:50:36.388 [DEBUG] [Thread-119392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:50:36.388 [DEBUG] [Thread-119392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:50:36.388 [DEBUG] [Thread-119392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:50:36.402 [INFO] [Thread-119392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:50:36.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:50:36.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:50:37.228 [DEBUG] [Thread-119392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:50:37.229 [DEBUG] [Thread-119392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:50:37.276 [DEBUG] [Thread-119392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:50:37.276 [DEBUG] [Thread-119392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:50:37.285 [DEBUG] [Thread-119392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:50:37.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:50:37.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:50:37.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:50:37.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:50:37.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:50:37.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:50:37.322 [DEBUG] [Thread-119392] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:50:46.983 [DEBUG] [Thread-119394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:50:54.019 [DEBUG] [Thread-119395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:02.043 [DEBUG] [Thread-119396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:51:07.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:51:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:51:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 51, 3), 24.55, 18.94, 0.0, 20.63, 21.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:51:08.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:51:03
2025-12-03T15:51:08.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:51:08.305 [DEBUG] [Thread-119397] [transport.py] [_log()] starting thread (client mode): 0xa5198d60
2025-12-03T15:51:08.305 [DEBUG] [Thread-119397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:51:08.321 [DEBUG] [Thread-119397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:51:08.321 [INFO] [Thread-119397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] client lang: <none>
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] server lang: <none>
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] kex follows: False
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] Compression: none
2025-12-03T15:51:08.324 [DEBUG] [Thread-119397] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:51:08.343 [DEBUG] [Thread-119397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:51:08.344 [DEBUG] [Thread-119397] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:51:08.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:51:08.345 [DEBUG] [Thread-119397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:51:08.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:51:08.349 [DEBUG] [Thread-119397] [transport.py] [_log()] userauth is OK
2025-12-03T15:51:08.349 [DEBUG] [Thread-119397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:51:08.350 [DEBUG] [Thread-119397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:51:08.350 [DEBUG] [Thread-119397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:51:08.350 [DEBUG] [Thread-119397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:51:08.371 [INFO] [Thread-119397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:51:08.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:51:08.942 [DEBUG] [Thread-119397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:51:08.942 [DEBUG] [Thread-119397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:51:08.942 [DEBUG] [Thread-119397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:51:08.983 [DEBUG] [Thread-119397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:51:08.983 [DEBUG] [Thread-119397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:51:08.987 [DEBUG] [Thread-119397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:51:09.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:51:09.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:51:09.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:51:09.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:51:09.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:51:09.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:51:09.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:51:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:51:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:51:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.576785 -999.00  +22.90  13.11     23   +1.10 1 1 1 1 1   888    0 20.00 -58.07 ----- 13.1 13.1 149.8 21.6 28.8 -29.0 28.6 -28.3 30.1 -27.0 30.8 -29.0
2025-12-03T15:51:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:51:09.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:51:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.576785
2025-12-03T15:51:09.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:51:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:51:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:51:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:51:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:51:09.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:51:03', tmtdew=24.55, humidity=18.94, cloud=0.0, wind=20.63, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:50:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:51:09.017 [DEBUG] [Thread-119397] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:51:09.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:51:09.123 [DEBUG] [Thread-119400] [transport.py] [_log()] starting thread (client mode): 0xa2745e40
2025-12-03T15:51:09.123 [DEBUG] [Thread-119400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:51:09.140 [DEBUG] [Thread-119400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:51:09.141 [INFO] [Thread-119400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:51:09.149 [DEBUG] [Thread-119400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:51:09.150 [DEBUG] [Thread-119400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:51:09.150 [DEBUG] [Thread-119400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:51:09.150 [DEBUG] [Thread-119400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:09.150 [DEBUG] [Thread-119400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] client lang: <none>
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] server lang: <none>
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] kex follows: False
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] Compression: none
2025-12-03T15:51:09.151 [DEBUG] [Thread-119400] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:51:09.208 [DEBUG] [Thread-119400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:51:09.209 [DEBUG] [Thread-119400] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:51:09.209 [DEBUG] [Thread-119400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:51:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:51:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:51:09.270 [DEBUG] [Thread-119400] [transport.py] [_log()] userauth is OK
2025-12-03T15:51:09.270 [DEBUG] [Thread-119400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:51:09.270 [DEBUG] [Thread-119400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:51:09.271 [DEBUG] [Thread-119400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:51:09.271 [DEBUG] [Thread-119400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:51:09.290 [INFO] [Thread-119400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:51:09.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:51:09.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:51:10.123 [DEBUG] [Thread-119400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:51:10.123 [DEBUG] [Thread-119400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:51:10.171 [DEBUG] [Thread-119400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:51:10.171 [DEBUG] [Thread-119400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:51:10.180 [DEBUG] [Thread-119400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:51:10.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:51:10.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:51:10.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:51:10.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:51:10.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:51:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:51:10.212 [DEBUG] [Thread-119400] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:51:17.073 [DEBUG] [Thread-119402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:32.003 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:32.004 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:32.134 [DEBUG] [Thread-119403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:40.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:51:40.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:51:40.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:51:40.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 51, 35), 24.27, 19.68, 0.0, 17.64, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:51:40.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:51:35
2025-12-03T15:51:41.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:51:41.168 [DEBUG] [Thread-119404] [transport.py] [_log()] starting thread (client mode): 0xa2746050
2025-12-03T15:51:41.168 [DEBUG] [Thread-119404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:51:41.189 [DEBUG] [Thread-119404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:51:41.190 [INFO] [Thread-119404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:51:41.192 [DEBUG] [Thread-119404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] client lang: <none>
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] server lang: <none>
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] kex follows: False
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] Compression: none
2025-12-03T15:51:41.193 [DEBUG] [Thread-119404] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:51:41.210 [DEBUG] [Thread-119404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:51:41.211 [DEBUG] [Thread-119404] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:51:41.211 [DEBUG] [Thread-119404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:51:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:51:41.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:51:41.213 [DEBUG] [Thread-119404] [transport.py] [_log()] userauth is OK
2025-12-03T15:51:41.213 [DEBUG] [Thread-119404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:51:41.213 [DEBUG] [Thread-119404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:51:41.214 [DEBUG] [Thread-119404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:51:41.214 [DEBUG] [Thread-119404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:51:41.232 [INFO] [Thread-119404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:51:41.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:51:41.849 [DEBUG] [Thread-119404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:51:41.850 [DEBUG] [Thread-119404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:51:41.850 [DEBUG] [Thread-119404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:51:41.891 [DEBUG] [Thread-119404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:51:41.892 [DEBUG] [Thread-119404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:51:41.895 [DEBUG] [Thread-119404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:51:41.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:51:41.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:51:41.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:51:41.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:51:41.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:51:41.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:51:41.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:51:41.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:51:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:51:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.577132 -999.00  +22.60  16.33     23   +0.90 1 1 1 1 1   888    0 20.01 -64.93 ----- 16.3 16.3 133.2 21.5 28.8 -30.3 28.4 -29.5 30.1 -27.5 30.8 -29.8
2025-12-03T15:51:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:51:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:51:41.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.577132
2025-12-03T15:51:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:51:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:51:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:51:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:51:41.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:51:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:51:35', tmtdew=24.27, humidity=19.68, cloud=0.0, wind=17.64, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:51:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:51:41.922 [DEBUG] [Thread-119404] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:51:42.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:51:42.017 [DEBUG] [Thread-119407] [transport.py] [_log()] starting thread (client mode): 0xa2762830
2025-12-03T15:51:42.018 [DEBUG] [Thread-119407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:51:42.032 [DEBUG] [Thread-119407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:51:42.033 [INFO] [Thread-119407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:51:42.040 [DEBUG] [Thread-119407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:51:42.041 [DEBUG] [Thread-119407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:51:42.041 [DEBUG] [Thread-119407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:51:42.041 [DEBUG] [Thread-119407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:42.041 [DEBUG] [Thread-119407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:51:42.041 [DEBUG] [Thread-119407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] client lang: <none>
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] server lang: <none>
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] kex follows: False
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] Compression: none
2025-12-03T15:51:42.042 [DEBUG] [Thread-119407] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:51:42.097 [DEBUG] [Thread-119407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:51:42.098 [DEBUG] [Thread-119407] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:51:42.099 [DEBUG] [Thread-119407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:51:42.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:51:42.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:51:42.153 [DEBUG] [Thread-119407] [transport.py] [_log()] userauth is OK
2025-12-03T15:51:42.154 [DEBUG] [Thread-119407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:51:42.154 [DEBUG] [Thread-119407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:51:42.154 [DEBUG] [Thread-119407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:51:42.154 [DEBUG] [Thread-119407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:51:42.173 [INFO] [Thread-119407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:51:42.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:51:42.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:51:43.014 [DEBUG] [Thread-119407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:51:43.014 [DEBUG] [Thread-119407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:51:43.062 [DEBUG] [Thread-119407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:51:43.063 [DEBUG] [Thread-119407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:51:43.072 [DEBUG] [Thread-119407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:51:43.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:51:43.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:51:43.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:51:43.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:51:43.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:51:43.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:51:43.109 [DEBUG] [Thread-119407] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:51:47.169 [DEBUG] [Thread-119409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:51:54.064 [DEBUG] [Thread-119410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:02.214 [DEBUG] [Thread-119411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:13.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:52:13.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:52:13.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:52:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 52, 7), 24.24, 19.73, 0.0, 17.15, 21.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:52:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:52:07
2025-12-03T15:52:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:52:14.098 [DEBUG] [Thread-119412] [transport.py] [_log()] starting thread (client mode): 0xa517d4b0
2025-12-03T15:52:14.098 [DEBUG] [Thread-119412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:52:14.122 [DEBUG] [Thread-119412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:52:14.122 [INFO] [Thread-119412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:52:14.126 [DEBUG] [Thread-119412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:52:14.126 [DEBUG] [Thread-119412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] client lang: <none>
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] server lang: <none>
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] kex follows: False
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:52:14.127 [DEBUG] [Thread-119412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:52:14.128 [DEBUG] [Thread-119412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:52:14.128 [DEBUG] [Thread-119412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:52:14.128 [DEBUG] [Thread-119412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:52:14.128 [DEBUG] [Thread-119412] [transport.py] [_log()] Compression: none
2025-12-03T15:52:14.128 [DEBUG] [Thread-119412] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:52:14.141 [DEBUG] [Thread-119412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:52:14.141 [DEBUG] [Thread-119412] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:52:14.142 [DEBUG] [Thread-119412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:52:14.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:52:14.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:52:14.144 [DEBUG] [Thread-119412] [transport.py] [_log()] userauth is OK
2025-12-03T15:52:14.144 [DEBUG] [Thread-119412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:52:14.144 [DEBUG] [Thread-119412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:52:14.144 [DEBUG] [Thread-119412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:52:14.144 [DEBUG] [Thread-119412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:52:14.165 [INFO] [Thread-119412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:52:14.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:52:14.810 [DEBUG] [Thread-119412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:52:14.810 [DEBUG] [Thread-119412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:52:14.810 [DEBUG] [Thread-119412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:52:14.851 [DEBUG] [Thread-119412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:52:14.851 [DEBUG] [Thread-119412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:52:14.853 [DEBUG] [Thread-119412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:52:14.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:52:14.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:52:14.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:52:14.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:52:14.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:52:14.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:52:14.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.577479 -999.00  +22.40  18.01     24   +0.90 1 1 1 1 1   888    0 20.18 -62.11 ----- 18.0 18.0 139.0 23.8 28.8 -30.3 28.5 -29.3 30.0 -28.4 30.6 -30.6
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:52:14.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.577479
2025-12-03T15:52:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:52:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:52:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:52:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:52:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:52:14.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:52:07', tmtdew=24.24, humidity=19.73, cloud=0.0, wind=17.15, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:51:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:52:14.877 [DEBUG] [Thread-119412] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:52:14.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:52:14.971 [DEBUG] [Thread-119415] [transport.py] [_log()] starting thread (client mode): 0xa5199390
2025-12-03T15:52:14.971 [DEBUG] [Thread-119415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:52:14.986 [DEBUG] [Thread-119415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:52:14.986 [INFO] [Thread-119415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:14.994 [DEBUG] [Thread-119415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] client lang: <none>
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] server lang: <none>
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] kex follows: False
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:52:14.995 [DEBUG] [Thread-119415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:52:14.996 [DEBUG] [Thread-119415] [transport.py] [_log()] Compression: none
2025-12-03T15:52:14.996 [DEBUG] [Thread-119415] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:52:15.053 [DEBUG] [Thread-119415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:52:15.054 [DEBUG] [Thread-119415] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:52:15.054 [DEBUG] [Thread-119415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:52:15.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:52:15.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:52:15.109 [DEBUG] [Thread-119415] [transport.py] [_log()] userauth is OK
2025-12-03T15:52:15.109 [DEBUG] [Thread-119415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:52:15.109 [DEBUG] [Thread-119415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:52:15.109 [DEBUG] [Thread-119415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:52:15.110 [DEBUG] [Thread-119415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:52:15.128 [INFO] [Thread-119415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:52:15.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:52:15.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:52:15.989 [DEBUG] [Thread-119415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:52:15.989 [DEBUG] [Thread-119415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:52:16.036 [DEBUG] [Thread-119415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:52:16.037 [DEBUG] [Thread-119415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:52:16.045 [DEBUG] [Thread-119415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:52:16.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:52:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:52:16.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:52:16.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:52:16.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:52:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:52:16.078 [DEBUG] [Thread-119415] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:52:17.246 [DEBUG] [Thread-119417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:32.144 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:32.145 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:32.290 [DEBUG] [Thread-119418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:46.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:52:46.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:52:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:52:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 52, 39), 24.55, 19.0, 0.0, 14.82, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:52:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:52:39
2025-12-03T15:52:46.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:52:47.045 [DEBUG] [Thread-119419] [transport.py] [_log()] starting thread (client mode): 0xa5198490
2025-12-03T15:52:47.045 [DEBUG] [Thread-119419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:52:47.066 [DEBUG] [Thread-119419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:52:47.066 [INFO] [Thread-119419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] client lang: <none>
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] server lang: <none>
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] kex follows: False
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] Compression: none
2025-12-03T15:52:47.069 [DEBUG] [Thread-119419] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:52:47.091 [DEBUG] [Thread-119419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:52:47.092 [DEBUG] [Thread-119419] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:52:47.093 [DEBUG] [Thread-119419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:52:47.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:52:47.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:52:47.094 [DEBUG] [Thread-119419] [transport.py] [_log()] userauth is OK
2025-12-03T15:52:47.095 [DEBUG] [Thread-119419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:52:47.095 [DEBUG] [Thread-119419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:52:47.095 [DEBUG] [Thread-119419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:52:47.095 [DEBUG] [Thread-119419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:52:47.120 [INFO] [Thread-119419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:52:47.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:52:47.322 [DEBUG] [Thread-119421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:52:47.714 [DEBUG] [Thread-119419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:52:47.714 [DEBUG] [Thread-119419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:52:47.715 [DEBUG] [Thread-119419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:52:47.755 [DEBUG] [Thread-119419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:52:47.756 [DEBUG] [Thread-119419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:52:47.759 [DEBUG] [Thread-119419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:52:47.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:52:47.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:52:47.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:52:47.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:52:47.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:52:47.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:52:47.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:52:47.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:52:47.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:52:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.577826 -999.00  +22.50  17.43     24   +1.00 1 1 1 1 1   888    0 19.93 -67.33 ----- 17.4 17.4 162.6 19.9 28.7 -29.9 28.6 -28.8 30.1 -27.5 30.7 -29.2
2025-12-03T15:52:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:52:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:52:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.577826
2025-12-03T15:52:47.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:52:47.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:52:39', tmtdew=24.55, humidity=19.0, cloud=0.0, wind=14.82, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:52:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:52:47.785 [DEBUG] [Thread-119419] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:52:47.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:52:47.877 [DEBUG] [Thread-119423] [transport.py] [_log()] starting thread (client mode): 0xa517f9a0
2025-12-03T15:52:47.877 [DEBUG] [Thread-119423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:52:47.891 [DEBUG] [Thread-119423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:52:47.891 [INFO] [Thread-119423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:52:47.899 [DEBUG] [Thread-119423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] client lang: <none>
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] server lang: <none>
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] kex follows: False
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] Compression: none
2025-12-03T15:52:47.900 [DEBUG] [Thread-119423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:52:47.958 [DEBUG] [Thread-119423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:52:47.959 [DEBUG] [Thread-119423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:52:47.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:52:47.960 [DEBUG] [Thread-119423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:52:47.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:52:48.014 [DEBUG] [Thread-119423] [transport.py] [_log()] userauth is OK
2025-12-03T15:52:48.015 [DEBUG] [Thread-119423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:52:48.015 [DEBUG] [Thread-119423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:52:48.015 [DEBUG] [Thread-119423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:52:48.015 [DEBUG] [Thread-119423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:52:48.038 [INFO] [Thread-119423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:52:48.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:52:48.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:52:48.905 [DEBUG] [Thread-119423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:52:48.906 [DEBUG] [Thread-119423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:52:48.954 [DEBUG] [Thread-119423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:52:48.954 [DEBUG] [Thread-119423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:52:48.964 [DEBUG] [Thread-119423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:52:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:52:48.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:52:48.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:52:48.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:52:48.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:52:48.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:52:49.000 [DEBUG] [Thread-119423] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:52:54.113 [DEBUG] [Thread-119425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:02.356 [DEBUG] [Thread-119426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:17.400 [DEBUG] [Thread-119427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:19.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:53:19.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:53:19.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:53:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 53, 11), 24.51, 19.0, 0.0, 11.73, 21.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:53:19.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:53:11
2025-12-03T15:53:19.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:53:19.967 [DEBUG] [Thread-119428] [transport.py] [_log()] starting thread (client mode): 0xa2745480
2025-12-03T15:53:19.967 [DEBUG] [Thread-119428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:53:19.989 [DEBUG] [Thread-119428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:53:19.989 [INFO] [Thread-119428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:19.992 [DEBUG] [Thread-119428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] client lang: <none>
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] server lang: <none>
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] kex follows: False
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] Compression: none
2025-12-03T15:53:19.993 [DEBUG] [Thread-119428] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:53:20.011 [DEBUG] [Thread-119428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:53:20.012 [DEBUG] [Thread-119428] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:53:20.013 [DEBUG] [Thread-119428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:53:20.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:53:20.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:53:20.015 [DEBUG] [Thread-119428] [transport.py] [_log()] userauth is OK
2025-12-03T15:53:20.015 [DEBUG] [Thread-119428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:53:20.015 [DEBUG] [Thread-119428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:53:20.015 [DEBUG] [Thread-119428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:53:20.015 [DEBUG] [Thread-119428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:53:20.041 [INFO] [Thread-119428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:53:20.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:53:20.636 [DEBUG] [Thread-119428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:53:20.637 [DEBUG] [Thread-119428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:53:20.637 [DEBUG] [Thread-119428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:53:20.678 [DEBUG] [Thread-119428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:53:20.678 [DEBUG] [Thread-119428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:53:20.682 [DEBUG] [Thread-119428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:53:20.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:53:20.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:53:20.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:53:20.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:53:20.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:53:20.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:53:20.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:53:20.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:53:20.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:53:20.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.578173 -999.00  +22.30  13.18     24   +0.90 1 1 1 1 1   888    0 19.41 -70.81 ----- 13.2 13.2 179.8 17.4 28.6 -30.2 28.4 -29.9 30.1 -27.5 30.7 -29.7
2025-12-03T15:53:20.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:53:20.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:53:20.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.578173
2025-12-03T15:53:20.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:53:20.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:53:20.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:53:20.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:53:20.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:53:20.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:53:11', tmtdew=24.51, humidity=19.0, cloud=0.0, wind=11.73, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:52:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:53:20.709 [DEBUG] [Thread-119428] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:53:20.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:53:20.800 [DEBUG] [Thread-119431] [transport.py] [_log()] starting thread (client mode): 0xa2729390
2025-12-03T15:53:20.800 [DEBUG] [Thread-119431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:53:20.816 [DEBUG] [Thread-119431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:53:20.816 [INFO] [Thread-119431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:20.824 [DEBUG] [Thread-119431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] client lang: <none>
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] server lang: <none>
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] kex follows: False
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] Compression: none
2025-12-03T15:53:20.825 [DEBUG] [Thread-119431] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:53:20.882 [DEBUG] [Thread-119431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:53:20.883 [DEBUG] [Thread-119431] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:53:20.883 [DEBUG] [Thread-119431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:53:20.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:53:20.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:53:20.939 [DEBUG] [Thread-119431] [transport.py] [_log()] userauth is OK
2025-12-03T15:53:20.939 [DEBUG] [Thread-119431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:53:20.939 [DEBUG] [Thread-119431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:53:20.939 [DEBUG] [Thread-119431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:53:20.939 [DEBUG] [Thread-119431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:53:20.958 [INFO] [Thread-119431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:53:20.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:53:20.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:53:21.811 [DEBUG] [Thread-119431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:53:21.811 [DEBUG] [Thread-119431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:53:21.860 [DEBUG] [Thread-119431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:53:21.860 [DEBUG] [Thread-119431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:53:21.868 [DEBUG] [Thread-119431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:53:21.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:53:21.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:53:21.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:53:21.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:53:21.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:53:21.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:53:21.903 [DEBUG] [Thread-119431] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:53:32.285 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:32.286 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:32.436 [DEBUG] [Thread-119433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:47.483 [DEBUG] [Thread-119434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:51.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:53:51.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:53:51.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:53:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 53, 43), 24.22, 19.28, 0.0, 13.8, 21.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:53:52.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:53:43
2025-12-03T15:53:52.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:53:52.871 [DEBUG] [Thread-119435] [transport.py] [_log()] starting thread (client mode): 0xa2728d30
2025-12-03T15:53:52.871 [DEBUG] [Thread-119435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:53:52.891 [DEBUG] [Thread-119435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:53:52.891 [INFO] [Thread-119435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:53:52.894 [DEBUG] [Thread-119435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] client lang: <none>
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] server lang: <none>
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] kex follows: False
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:53:52.895 [DEBUG] [Thread-119435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:53:52.896 [DEBUG] [Thread-119435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:53:52.896 [DEBUG] [Thread-119435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:53:52.896 [DEBUG] [Thread-119435] [transport.py] [_log()] Compression: none
2025-12-03T15:53:52.896 [DEBUG] [Thread-119435] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:53:52.913 [DEBUG] [Thread-119435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:53:52.914 [DEBUG] [Thread-119435] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:53:52.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:53:52.915 [DEBUG] [Thread-119435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:53:52.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:53:52.917 [DEBUG] [Thread-119435] [transport.py] [_log()] userauth is OK
2025-12-03T15:53:52.917 [DEBUG] [Thread-119435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:53:52.917 [DEBUG] [Thread-119435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:53:52.917 [DEBUG] [Thread-119435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:53:52.917 [DEBUG] [Thread-119435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:53:52.941 [INFO] [Thread-119435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:53:52.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:53:53.532 [DEBUG] [Thread-119435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:53:53.532 [DEBUG] [Thread-119435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:53:53.533 [DEBUG] [Thread-119435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:53:53.573 [DEBUG] [Thread-119435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:53:53.573 [DEBUG] [Thread-119435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:53:53.576 [DEBUG] [Thread-119435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:53:53.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:53:53.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:53:53.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:53:53.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:53:53.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:53:53.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:53:53.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:53:53.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:53:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:53:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.578521 -999.00  +22.20  14.11     24   +0.70 1 1 1 1 1   888    0 19.40 -78.54 ----- 14.1 14.1 152.6 16.9 28.7 -30.1 28.4 -29.1 30.1 -27.9 30.8 -29.2
2025-12-03T15:53:53.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:53:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:53:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.578521
2025-12-03T15:53:53.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:53:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:53:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:53:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:53:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:53:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:53:43', tmtdew=24.22, humidity=19.28, cloud=0.0, wind=13.8, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:53:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:53:53.599 [DEBUG] [Thread-119435] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:53:53.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:53:53.692 [DEBUG] [Thread-119438] [transport.py] [_log()] starting thread (client mode): 0xa517f9a0
2025-12-03T15:53:53.692 [DEBUG] [Thread-119438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:53:53.707 [DEBUG] [Thread-119438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:53:53.707 [INFO] [Thread-119438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:53:53.715 [DEBUG] [Thread-119438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] client lang: <none>
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] server lang: <none>
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] kex follows: False
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] Compression: none
2025-12-03T15:53:53.716 [DEBUG] [Thread-119438] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:53:53.775 [DEBUG] [Thread-119438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:53:53.775 [DEBUG] [Thread-119438] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:53:53.776 [DEBUG] [Thread-119438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:53:53.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:53:53.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:53:53.831 [DEBUG] [Thread-119438] [transport.py] [_log()] userauth is OK
2025-12-03T15:53:53.831 [DEBUG] [Thread-119438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:53:53.831 [DEBUG] [Thread-119438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:53:53.831 [DEBUG] [Thread-119438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:53:53.831 [DEBUG] [Thread-119438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:53:53.850 [INFO] [Thread-119438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:53:53.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:53:53.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:53:54.147 [DEBUG] [Thread-119440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:53:54.661 [DEBUG] [Thread-119438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:53:54.661 [DEBUG] [Thread-119438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:53:54.708 [DEBUG] [Thread-119438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:53:54.708 [DEBUG] [Thread-119438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:53:54.717 [DEBUG] [Thread-119438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:53:54.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:53:54.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:53:54.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:53:54.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:53:54.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:53:54.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:53:54.748 [DEBUG] [Thread-119438] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:54:02.510 [DEBUG] [Thread-119441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:17.554 [DEBUG] [Thread-119442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:24.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:54:24.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:54:24.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:54:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 54, 15), 24.16, 19.38, 0.0, 10.82, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:54:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:54:15
2025-12-03T15:54:25.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:54:25.772 [DEBUG] [Thread-119443] [transport.py] [_log()] starting thread (client mode): 0xa517fe20
2025-12-03T15:54:25.772 [DEBUG] [Thread-119443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:54:25.793 [DEBUG] [Thread-119443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:54:25.793 [INFO] [Thread-119443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:54:25.796 [DEBUG] [Thread-119443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:54:25.796 [DEBUG] [Thread-119443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:54:25.796 [DEBUG] [Thread-119443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:54:25.796 [DEBUG] [Thread-119443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] client lang: <none>
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] server lang: <none>
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] kex follows: False
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] Compression: none
2025-12-03T15:54:25.797 [DEBUG] [Thread-119443] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:54:25.813 [DEBUG] [Thread-119443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:54:25.813 [DEBUG] [Thread-119443] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:54:25.813 [DEBUG] [Thread-119443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:54:25.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:54:25.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:54:25.814 [DEBUG] [Thread-119443] [transport.py] [_log()] userauth is OK
2025-12-03T15:54:25.814 [DEBUG] [Thread-119443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:54:25.814 [DEBUG] [Thread-119443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:54:25.814 [DEBUG] [Thread-119443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:54:25.814 [DEBUG] [Thread-119443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:54:25.824 [INFO] [Thread-119443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:54:25.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:54:26.423 [DEBUG] [Thread-119443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:54:26.423 [DEBUG] [Thread-119443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:54:26.423 [DEBUG] [Thread-119443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:54:26.463 [DEBUG] [Thread-119443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:54:26.463 [DEBUG] [Thread-119443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:54:26.466 [DEBUG] [Thread-119443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:54:26.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:54:26.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:54:26.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:54:26.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:54:26.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:54:26.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:54:26.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:54:26.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.578868 -999.00  +22.10   9.41     24   +0.80 1 1 1 1 1   888    0 19.95 -81.32 ----- 9.4 9.4 150.0 18.5 28.7 -29.9 28.4 -28.9 30.1 -27.5 30.8 -28.6
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.578868
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:54:26.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:54:15', tmtdew=24.16, humidity=19.38, cloud=0.0, wind=10.82, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:53:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:54:26.484 [DEBUG] [Thread-119443] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:54:26.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:54:26.574 [DEBUG] [Thread-119446] [transport.py] [_log()] starting thread (client mode): 0xa27cb280
2025-12-03T15:54:26.574 [DEBUG] [Thread-119446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:54:26.590 [DEBUG] [Thread-119446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:54:26.590 [INFO] [Thread-119446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] client lang: <none>
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] server lang: <none>
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] kex follows: False
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] Compression: none
2025-12-03T15:54:26.598 [DEBUG] [Thread-119446] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:54:26.653 [DEBUG] [Thread-119446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:54:26.653 [DEBUG] [Thread-119446] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:54:26.653 [DEBUG] [Thread-119446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:54:26.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:54:26.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:54:26.710 [DEBUG] [Thread-119446] [transport.py] [_log()] userauth is OK
2025-12-03T15:54:26.710 [DEBUG] [Thread-119446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:54:26.710 [DEBUG] [Thread-119446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:54:26.710 [DEBUG] [Thread-119446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:54:26.710 [DEBUG] [Thread-119446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:54:26.724 [INFO] [Thread-119446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:54:26.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:54:26.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:54:27.568 [DEBUG] [Thread-119446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:54:27.568 [DEBUG] [Thread-119446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:54:27.616 [DEBUG] [Thread-119446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:54:27.616 [DEBUG] [Thread-119446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:54:27.624 [DEBUG] [Thread-119446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:54:27.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:54:27.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:54:27.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:54:27.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:54:27.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:54:27.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:54:27.655 [DEBUG] [Thread-119446] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:54:32.426 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:32.427 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:32.587 [DEBUG] [Thread-119448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:47.640 [DEBUG] [Thread-119449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:54.179 [DEBUG] [Thread-119450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:54:57.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:54:57.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:54:57.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:54:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 54, 47), 24.32, 19.32, 0.0, 18.1, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:54:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:54:47
2025-12-03T15:54:58.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:54:58.622 [DEBUG] [Thread-119451] [transport.py] [_log()] starting thread (client mode): 0xa27298a0
2025-12-03T15:54:58.622 [DEBUG] [Thread-119451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:54:58.641 [DEBUG] [Thread-119451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:54:58.641 [INFO] [Thread-119451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] client lang: <none>
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] server lang: <none>
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] kex follows: False
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:54:58.642 [DEBUG] [Thread-119451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:54:58.643 [DEBUG] [Thread-119451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:54:58.643 [DEBUG] [Thread-119451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:54:58.643 [DEBUG] [Thread-119451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:54:58.643 [DEBUG] [Thread-119451] [transport.py] [_log()] Compression: none
2025-12-03T15:54:58.643 [DEBUG] [Thread-119451] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:54:58.654 [DEBUG] [Thread-119451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:54:58.654 [DEBUG] [Thread-119451] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:54:58.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:54:58.655 [DEBUG] [Thread-119451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:54:58.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:54:58.656 [DEBUG] [Thread-119451] [transport.py] [_log()] userauth is OK
2025-12-03T15:54:58.656 [DEBUG] [Thread-119451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:54:58.656 [DEBUG] [Thread-119451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:54:58.656 [DEBUG] [Thread-119451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:54:58.656 [DEBUG] [Thread-119451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:54:58.669 [INFO] [Thread-119451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:54:58.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:54:59.238 [DEBUG] [Thread-119451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:54:59.238 [DEBUG] [Thread-119451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:54:59.239 [DEBUG] [Thread-119451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:54:59.279 [DEBUG] [Thread-119451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:54:59.279 [DEBUG] [Thread-119451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:54:59.283 [DEBUG] [Thread-119451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:54:59.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:54:59.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:54:59.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:54:59.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:54:59.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:54:59.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:54:59.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:54:59.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:54:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:54:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.579215 -999.00  +21.90  10.59     24   +0.70 1 1 1 1 1   888    0 19.50 -79.96 ----- 10.6 10.6 148.0 19.8 28.8 -30.3 28.4 -29.3 30.1 -28.6 30.8 -31.2
2025-12-03T15:54:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:54:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:54:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.579215
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:54:59.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:54:47', tmtdew=24.32, humidity=19.32, cloud=0.0, wind=18.1, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:54:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:54:59.309 [DEBUG] [Thread-119451] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:54:59.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:54:59.400 [DEBUG] [Thread-119454] [transport.py] [_log()] starting thread (client mode): 0xa27510f0
2025-12-03T15:54:59.400 [DEBUG] [Thread-119454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:54:59.414 [DEBUG] [Thread-119454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:54:59.414 [INFO] [Thread-119454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:54:59.422 [DEBUG] [Thread-119454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:54:59.422 [DEBUG] [Thread-119454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:54:59.422 [DEBUG] [Thread-119454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:54:59.422 [DEBUG] [Thread-119454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:59.422 [DEBUG] [Thread-119454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] client lang: <none>
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] server lang: <none>
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] kex follows: False
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:54:59.423 [DEBUG] [Thread-119454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:54:59.424 [DEBUG] [Thread-119454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:54:59.424 [DEBUG] [Thread-119454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:54:59.424 [DEBUG] [Thread-119454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:54:59.424 [DEBUG] [Thread-119454] [transport.py] [_log()] Compression: none
2025-12-03T15:54:59.424 [DEBUG] [Thread-119454] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:54:59.480 [DEBUG] [Thread-119454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:54:59.480 [DEBUG] [Thread-119454] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:54:59.481 [DEBUG] [Thread-119454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:54:59.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:54:59.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:54:59.535 [DEBUG] [Thread-119454] [transport.py] [_log()] userauth is OK
2025-12-03T15:54:59.536 [DEBUG] [Thread-119454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:54:59.536 [DEBUG] [Thread-119454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:54:59.536 [DEBUG] [Thread-119454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:54:59.536 [DEBUG] [Thread-119454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:54:59.555 [INFO] [Thread-119454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:54:59.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:54:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:55:00.382 [DEBUG] [Thread-119454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:55:00.382 [DEBUG] [Thread-119454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:55:00.430 [DEBUG] [Thread-119454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:55:00.430 [DEBUG] [Thread-119454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:55:00.438 [DEBUG] [Thread-119454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:55:00.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:55:00.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:55:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:55:00.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:55:00.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:55:00.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:55:00.473 [DEBUG] [Thread-119454] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:55:02.670 [DEBUG] [Thread-119456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:17.709 [DEBUG] [Thread-119457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:55:30.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:55:30.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:55:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 55, 19), 24.41, 19.2, 0.0, 18.23, 21.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:55:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:55:19
2025-12-03T15:55:31.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:55:31.451 [DEBUG] [Thread-119458] [transport.py] [_log()] starting thread (client mode): 0xa2751ae0
2025-12-03T15:55:31.451 [DEBUG] [Thread-119458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:55:31.472 [DEBUG] [Thread-119458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:55:31.472 [INFO] [Thread-119458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:55:31.475 [DEBUG] [Thread-119458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:55:31.475 [DEBUG] [Thread-119458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] client lang: <none>
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] server lang: <none>
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] kex follows: False
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] Compression: none
2025-12-03T15:55:31.476 [DEBUG] [Thread-119458] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:55:31.493 [DEBUG] [Thread-119458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:55:31.494 [DEBUG] [Thread-119458] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:55:31.494 [DEBUG] [Thread-119458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:55:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:55:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:55:31.496 [DEBUG] [Thread-119458] [transport.py] [_log()] userauth is OK
2025-12-03T15:55:31.496 [DEBUG] [Thread-119458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:55:31.497 [DEBUG] [Thread-119458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:55:31.497 [DEBUG] [Thread-119458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:55:31.497 [DEBUG] [Thread-119458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:55:31.512 [INFO] [Thread-119458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:55:31.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:55:32.143 [DEBUG] [Thread-119458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:55:32.143 [DEBUG] [Thread-119458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:55:32.143 [DEBUG] [Thread-119458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:55:32.184 [DEBUG] [Thread-119458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:55:32.184 [DEBUG] [Thread-119458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:55:32.187 [DEBUG] [Thread-119458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:55:32.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:55:32.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:55:32.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:55:32.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:55:32.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:55:32.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:55:32.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:55:32.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:55:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:55:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.579909 -999.00  +22.10   6.88     24   +1.10 1 1 1 1 1   888    0 19.33 -86.55 ----- 6.9 6.9 192.6 12.3 28.7 -29.8 28.3 -29.3 30.2 -27.0 30.9 -28.3
2025-12-03T15:55:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:55:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:55:32.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.579909
2025-12-03T15:55:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:55:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:55:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:55:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:55:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:55:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:55:19', tmtdew=24.41, humidity=19.2, cloud=0.0, wind=18.23, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:55:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:55:32.214 [DEBUG] [Thread-119458] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:55:32.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:55:32.568 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:32.569 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:32.747 [DEBUG] [Thread-119461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:47.796 [DEBUG] [Thread-119462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:55:54.222 [DEBUG] [Thread-119463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:02.831 [DEBUG] [Thread-119464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:17.871 [DEBUG] [Thread-119465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:32.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:32.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:32.901 [DEBUG] [Thread-119466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:47.939 [DEBUG] [Thread-119467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:56:54.258 [DEBUG] [Thread-119468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:02.971 [DEBUG] [Thread-119469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:18.004 [DEBUG] [Thread-119470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:32.848 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:32.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:33.037 [DEBUG] [Thread-119471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:44.726 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T15:57:48.069 [DEBUG] [Thread-119472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:57:54.313 [DEBUG] [Thread-119473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:03.105 [DEBUG] [Thread-119474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:14.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:58:14.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:58:14.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:58:15.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 57, 59), 24.62, 19.3, 0.0, 17.59, 21.89, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:58:15.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:57:59
2025-12-03T15:58:15.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:58:15.747 [DEBUG] [Thread-119475] [transport.py] [_log()] starting thread (client mode): 0xa2751750
2025-12-03T15:58:15.747 [DEBUG] [Thread-119475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:58:15.767 [DEBUG] [Thread-119475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:58:15.767 [INFO] [Thread-119475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] client lang: <none>
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] server lang: <none>
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] kex follows: False
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:58:15.770 [DEBUG] [Thread-119475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:58:15.771 [DEBUG] [Thread-119475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:58:15.771 [DEBUG] [Thread-119475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:58:15.771 [DEBUG] [Thread-119475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:58:15.771 [DEBUG] [Thread-119475] [transport.py] [_log()] Compression: none
2025-12-03T15:58:15.771 [DEBUG] [Thread-119475] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:58:15.782 [DEBUG] [Thread-119475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:58:15.783 [DEBUG] [Thread-119475] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:58:15.783 [DEBUG] [Thread-119475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:58:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:58:15.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:58:15.784 [DEBUG] [Thread-119475] [transport.py] [_log()] userauth is OK
2025-12-03T15:58:15.784 [DEBUG] [Thread-119475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:58:15.784 [DEBUG] [Thread-119475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:58:15.784 [DEBUG] [Thread-119475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:58:15.784 [DEBUG] [Thread-119475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:58:15.812 [INFO] [Thread-119475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:58:15.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:58:16.603 [DEBUG] [Thread-119475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:58:16.603 [DEBUG] [Thread-119475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:58:16.603 [DEBUG] [Thread-119475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:58:16.644 [DEBUG] [Thread-119475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:58:16.644 [DEBUG] [Thread-119475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:58:16.646 [DEBUG] [Thread-119475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:58:16.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:58:16.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:58:16.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:58:16.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:58:16.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:58:16.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:58:16.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:58:16.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.581646 -999.00  +22.30  16.51     24   +1.00 1 1 1 1 1   888    0 19.03 -96.44 ----- 16.5 16.5 207.0 22.0 28.4 -29.9 28.1 -29.2 29.9 -27.5 30.5 -29.2
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.581646
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:58:16.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:57:59', tmtdew=24.62, humidity=19.3, cloud=0.0, wind=17.59, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:57:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:58:16.664 [DEBUG] [Thread-119475] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:58:16.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:58:16.750 [DEBUG] [Thread-119478] [transport.py] [_log()] starting thread (client mode): 0xa2753ac0
2025-12-03T15:58:16.750 [DEBUG] [Thread-119478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:58:16.766 [DEBUG] [Thread-119478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:58:16.766 [INFO] [Thread-119478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] client lang: <none>
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] server lang: <none>
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] kex follows: False
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:58:16.773 [DEBUG] [Thread-119478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:58:16.774 [DEBUG] [Thread-119478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:58:16.774 [DEBUG] [Thread-119478] [transport.py] [_log()] Compression: none
2025-12-03T15:58:16.774 [DEBUG] [Thread-119478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:58:16.835 [DEBUG] [Thread-119478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:58:16.835 [DEBUG] [Thread-119478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:58:16.835 [DEBUG] [Thread-119478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:58:16.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:58:16.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:58:16.892 [DEBUG] [Thread-119478] [transport.py] [_log()] userauth is OK
2025-12-03T15:58:16.892 [DEBUG] [Thread-119478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:58:16.892 [DEBUG] [Thread-119478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:58:16.892 [DEBUG] [Thread-119478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:58:16.892 [DEBUG] [Thread-119478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:58:16.906 [INFO] [Thread-119478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:58:16.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:58:16.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:58:17.733 [DEBUG] [Thread-119478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:58:17.733 [DEBUG] [Thread-119478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:58:17.784 [DEBUG] [Thread-119478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:58:17.784 [DEBUG] [Thread-119478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:58:17.792 [DEBUG] [Thread-119478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:58:17.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:58:17.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:58:17.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:58:17.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:58:17.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:58:17.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:58:17.824 [DEBUG] [Thread-119478] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:58:18.136 [DEBUG] [Thread-119480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:32.988 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:32.989 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:33.172 [DEBUG] [Thread-119481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:47.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:58:47.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:58:47.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:58:48.199 [DEBUG] [Thread-119482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:58:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 58, 31), 24.57, 19.39, 0.0, 15.85, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:58:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:58:31
2025-12-03T15:58:48.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:58:48.818 [DEBUG] [Thread-119483] [transport.py] [_log()] starting thread (client mode): 0xa2779b70
2025-12-03T15:58:48.819 [DEBUG] [Thread-119483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:58:48.838 [DEBUG] [Thread-119483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:58:48.839 [INFO] [Thread-119483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] client lang: <none>
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] server lang: <none>
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] kex follows: False
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] Compression: none
2025-12-03T15:58:48.842 [DEBUG] [Thread-119483] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:58:48.859 [DEBUG] [Thread-119483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:58:48.860 [DEBUG] [Thread-119483] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:58:48.861 [DEBUG] [Thread-119483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:58:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:58:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:58:48.863 [DEBUG] [Thread-119483] [transport.py] [_log()] userauth is OK
2025-12-03T15:58:48.863 [DEBUG] [Thread-119483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:58:48.863 [DEBUG] [Thread-119483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:58:48.863 [DEBUG] [Thread-119483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:58:48.863 [DEBUG] [Thread-119483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:58:48.890 [INFO] [Thread-119483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:58:48.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:58:49.544 [DEBUG] [Thread-119483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:58:49.544 [DEBUG] [Thread-119483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:58:49.545 [DEBUG] [Thread-119483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:58:49.585 [DEBUG] [Thread-119483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:58:49.585 [DEBUG] [Thread-119483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:58:49.589 [DEBUG] [Thread-119483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:58:49.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:58:49.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:58:49.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:58:49.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:58:49.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:58:49.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:58:49.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:58:49.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.581993 -999.00  +22.40   8.71     24   +0.90 1 1 1 1 1   888    0 19.12 -89.55 ----- 8.7 8.7 244.5 19.8 28.4 -30.4 28.1 -28.9 29.9 -27.8 30.6 -28.4
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.581993
2025-12-03T15:58:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:58:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:58:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:58:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:58:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:58:49.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:58:31', tmtdew=24.57, humidity=19.39, cloud=0.0, wind=15.85, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:58:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:58:49.617 [DEBUG] [Thread-119483] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:58:49.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:58:49.713 [DEBUG] [Thread-119486] [transport.py] [_log()] starting thread (client mode): 0xa27522c0
2025-12-03T15:58:49.713 [DEBUG] [Thread-119486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:58:49.733 [DEBUG] [Thread-119486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:58:49.733 [INFO] [Thread-119486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:58:49.740 [DEBUG] [Thread-119486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:58:49.740 [DEBUG] [Thread-119486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] client lang: <none>
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] server lang: <none>
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] kex follows: False
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:58:49.741 [DEBUG] [Thread-119486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:58:49.742 [DEBUG] [Thread-119486] [transport.py] [_log()] Compression: none
2025-12-03T15:58:49.742 [DEBUG] [Thread-119486] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:58:49.801 [DEBUG] [Thread-119486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:58:49.802 [DEBUG] [Thread-119486] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:58:49.802 [DEBUG] [Thread-119486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:58:49.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:58:49.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:58:49.857 [DEBUG] [Thread-119486] [transport.py] [_log()] userauth is OK
2025-12-03T15:58:49.858 [DEBUG] [Thread-119486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:58:49.858 [DEBUG] [Thread-119486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:58:49.858 [DEBUG] [Thread-119486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:58:49.858 [DEBUG] [Thread-119486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:58:49.878 [INFO] [Thread-119486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:58:49.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:58:49.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:58:50.731 [DEBUG] [Thread-119486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:58:50.731 [DEBUG] [Thread-119486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:58:50.779 [DEBUG] [Thread-119486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:58:50.779 [DEBUG] [Thread-119486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:58:50.789 [DEBUG] [Thread-119486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:58:50.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:58:50.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:58:50.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:58:50.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:58:50.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:58:50.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:58:50.826 [DEBUG] [Thread-119486] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:58:54.340 [DEBUG] [Thread-119488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:03.227 [DEBUG] [Thread-119489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:18.282 [DEBUG] [Thread-119490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:59:20.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:59:20.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:59:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 59, 3), 24.69, 19.25, 0.0, 17.87, 22.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:59:21.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:59:03
2025-12-03T15:59:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:59:21.806 [DEBUG] [Thread-119491] [transport.py] [_log()] starting thread (client mode): 0xa2752d40
2025-12-03T15:59:21.806 [DEBUG] [Thread-119491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:59:21.827 [DEBUG] [Thread-119491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:59:21.827 [INFO] [Thread-119491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] client lang: <none>
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] server lang: <none>
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] kex follows: False
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] Compression: none
2025-12-03T15:59:21.830 [DEBUG] [Thread-119491] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:59:21.844 [DEBUG] [Thread-119491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:59:21.844 [DEBUG] [Thread-119491] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:59:21.844 [DEBUG] [Thread-119491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:59:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:59:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:59:21.845 [DEBUG] [Thread-119491] [transport.py] [_log()] userauth is OK
2025-12-03T15:59:21.845 [DEBUG] [Thread-119491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:59:21.845 [DEBUG] [Thread-119491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:59:21.845 [DEBUG] [Thread-119491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:59:21.845 [DEBUG] [Thread-119491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:59:21.856 [INFO] [Thread-119491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:59:21.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:59:22.645 [DEBUG] [Thread-119491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:59:22.645 [DEBUG] [Thread-119491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:59:22.645 [DEBUG] [Thread-119491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:59:22.686 [DEBUG] [Thread-119491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:59:22.686 [DEBUG] [Thread-119491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:59:22.690 [DEBUG] [Thread-119491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:59:22.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:59:22.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:59:22.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:59:22.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:59:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:59:22.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:59:22.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:59:22.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:59:22.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:59:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.582340 -999.00  +22.40  12.68     24   +0.90 1 1 1 1 1   888    0 19.43 -85.16 ----- 12.7 12.7 220.5 20.7 28.4 -30.4 28.1 -30.6 29.8 -28.6 30.5 -30.6
2025-12-03T15:59:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:59:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:59:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.582340
2025-12-03T15:59:22.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:59:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:59:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:59:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:59:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:59:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:59:03', tmtdew=24.69, humidity=19.25, cloud=0.0, wind=17.87, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:58:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:59:22.718 [DEBUG] [Thread-119491] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:59:22.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:59:22.813 [DEBUG] [Thread-119494] [transport.py] [_log()] starting thread (client mode): 0xa27523e0
2025-12-03T15:59:22.813 [DEBUG] [Thread-119494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:59:22.828 [DEBUG] [Thread-119494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:59:22.829 [INFO] [Thread-119494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:59:22.837 [DEBUG] [Thread-119494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:59:22.837 [DEBUG] [Thread-119494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:59:22.837 [DEBUG] [Thread-119494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] client lang: <none>
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] server lang: <none>
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] kex follows: False
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] Compression: none
2025-12-03T15:59:22.838 [DEBUG] [Thread-119494] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:59:22.897 [DEBUG] [Thread-119494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:59:22.897 [DEBUG] [Thread-119494] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:59:22.898 [DEBUG] [Thread-119494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:59:22.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:59:22.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:59:22.953 [DEBUG] [Thread-119494] [transport.py] [_log()] userauth is OK
2025-12-03T15:59:22.953 [DEBUG] [Thread-119494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:59:22.954 [DEBUG] [Thread-119494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:59:22.954 [DEBUG] [Thread-119494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:59:22.954 [DEBUG] [Thread-119494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:59:22.972 [INFO] [Thread-119494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:59:22.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:59:22.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:59:23.795 [DEBUG] [Thread-119494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:59:23.796 [DEBUG] [Thread-119494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:59:23.844 [DEBUG] [Thread-119494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:59:23.845 [DEBUG] [Thread-119494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:59:23.854 [DEBUG] [Thread-119494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:59:23.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:59:23.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:59:23.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:59:23.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:59:23.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:59:23.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:59:23.891 [DEBUG] [Thread-119494] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:59:33.128 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:33.129 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:33.313 [DEBUG] [Thread-119496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:48.362 [DEBUG] [Thread-119497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T15:59:53.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T15:59:53.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T15:59:54.372 [DEBUG] [Thread-119498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T15:59:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 15, 59, 35), 24.75, 18.84, 0.0, 18.4, 21.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T15:59:54.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 15:59:35
2025-12-03T15:59:54.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T15:59:54.834 [DEBUG] [Thread-119499] [transport.py] [_log()] starting thread (client mode): 0xa2752a10
2025-12-03T15:59:54.834 [DEBUG] [Thread-119499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:59:54.854 [DEBUG] [Thread-119499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T15:59:54.854 [INFO] [Thread-119499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T15:59:54.857 [DEBUG] [Thread-119499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:59:54.857 [DEBUG] [Thread-119499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] client lang: <none>
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] server lang: <none>
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] kex follows: False
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] Compression: none
2025-12-03T15:59:54.858 [DEBUG] [Thread-119499] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:59:54.876 [DEBUG] [Thread-119499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:59:54.876 [DEBUG] [Thread-119499] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:59:54.877 [DEBUG] [Thread-119499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T15:59:54.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T15:59:54.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:59:54.879 [DEBUG] [Thread-119499] [transport.py] [_log()] userauth is OK
2025-12-03T15:59:54.879 [DEBUG] [Thread-119499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:59:54.879 [DEBUG] [Thread-119499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:59:54.879 [DEBUG] [Thread-119499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T15:59:54.879 [DEBUG] [Thread-119499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:59:54.912 [INFO] [Thread-119499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:59:54.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:59:55.534 [DEBUG] [Thread-119499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:59:55.534 [DEBUG] [Thread-119499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:59:55.534 [DEBUG] [Thread-119499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T15:59:55.575 [DEBUG] [Thread-119499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:59:55.575 [DEBUG] [Thread-119499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:59:55.579 [DEBUG] [Thread-119499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:59:55.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:59:55.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T15:59:55.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T15:59:55.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T15:59:55.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:59:55.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T15:59:55.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:59:55.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:59:55.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T15:59:55.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.582687 -999.00  +22.50  23.57     24   +0.90 1 1 1 1 1   888    0 19.69 -81.51 ----- 23.6 23.6 195.6 27.8 28.5 -30.1 28.1 -29.4 29.9 -27.7 30.4 -30.0
2025-12-03T15:59:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T15:59:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T15:59:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.582687
2025-12-03T15:59:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T15:59:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T15:59:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T15:59:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T15:59:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T15:59:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T15:59:35', tmtdew=24.75, humidity=18.84, cloud=0.0, wind=18.4, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T13:59:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T15:59:55.604 [DEBUG] [Thread-119499] [transport.py] [_log()] EOF in transport thread
2025-12-03T15:59:55.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T15:59:55.700 [DEBUG] [Thread-119502] [transport.py] [_log()] starting thread (client mode): 0xa27c8760
2025-12-03T15:59:55.700 [DEBUG] [Thread-119502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T15:59:55.715 [DEBUG] [Thread-119502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T15:59:55.715 [INFO] [Thread-119502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T15:59:55.723 [DEBUG] [Thread-119502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] client lang: <none>
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] server lang: <none>
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] kex follows: False
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] Compression: none
2025-12-03T15:59:55.724 [DEBUG] [Thread-119502] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T15:59:55.785 [DEBUG] [Thread-119502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T15:59:55.786 [DEBUG] [Thread-119502] [transport.py] [_log()] Switch to new keys ...
2025-12-03T15:59:55.786 [DEBUG] [Thread-119502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T15:59:55.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T15:59:55.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T15:59:55.842 [DEBUG] [Thread-119502] [transport.py] [_log()] userauth is OK
2025-12-03T15:59:55.843 [DEBUG] [Thread-119502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T15:59:55.843 [DEBUG] [Thread-119502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T15:59:55.843 [DEBUG] [Thread-119502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T15:59:55.843 [DEBUG] [Thread-119502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T15:59:55.862 [INFO] [Thread-119502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T15:59:55.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T15:59:55.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T15:59:56.688 [DEBUG] [Thread-119502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T15:59:56.688 [DEBUG] [Thread-119502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T15:59:56.736 [DEBUG] [Thread-119502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T15:59:56.736 [DEBUG] [Thread-119502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T15:59:56.745 [DEBUG] [Thread-119502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T15:59:56.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T15:59:56.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T15:59:56.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T15:59:56.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T15:59:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T15:59:56.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T15:59:56.788 [DEBUG] [Thread-119502] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:00:03.398 [DEBUG] [Thread-119504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:18.443 [DEBUG] [Thread-119505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:26.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:00:26.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:00:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:00:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 0, 7), 24.68, 18.9, 0.0, 19.89, 21.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:00:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:00:07
2025-12-03T16:00:27.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:00:27.777 [DEBUG] [Thread-119506] [transport.py] [_log()] starting thread (client mode): 0xa2752e60
2025-12-03T16:00:27.777 [DEBUG] [Thread-119506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:00:27.798 [DEBUG] [Thread-119506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:00:27.799 [INFO] [Thread-119506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:00:27.802 [DEBUG] [Thread-119506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] client lang: <none>
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] server lang: <none>
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] kex follows: False
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] Compression: none
2025-12-03T16:00:27.803 [DEBUG] [Thread-119506] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:00:27.821 [DEBUG] [Thread-119506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:00:27.822 [DEBUG] [Thread-119506] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:00:27.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:00:27.823 [DEBUG] [Thread-119506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:00:27.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:00:27.825 [DEBUG] [Thread-119506] [transport.py] [_log()] userauth is OK
2025-12-03T16:00:27.825 [DEBUG] [Thread-119506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:00:27.825 [DEBUG] [Thread-119506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:00:27.825 [DEBUG] [Thread-119506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:00:27.825 [DEBUG] [Thread-119506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:00:27.843 [INFO] [Thread-119506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:00:27.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:00:29.494 [DEBUG] [Thread-119506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:00:29.494 [DEBUG] [Thread-119506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:00:29.495 [DEBUG] [Thread-119506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:00:29.535 [DEBUG] [Thread-119506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:00:29.535 [DEBUG] [Thread-119506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:00:29.539 [DEBUG] [Thread-119506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:00:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:00:29.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:00:29.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:00:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:00:29.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:00:29.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:00:29.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:00:29.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:00:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:00:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.583381 -999.00  +22.20  12.91     24   +0.70 1 1 1 1 1   888    0 19.23 -73.50 ----- 12.9 12.9 203.6 16.8 28.3 -30.4 27.9 -29.4 29.8 -27.9 30.3 -30.4
2025-12-03T16:00:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:00:29.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:00:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.583381
2025-12-03T16:00:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:00:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:00:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:00:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:00:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:00:29.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:00:07', tmtdew=24.68, humidity=18.9, cloud=0.0, wind=19.89, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:00:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:00:29.563 [DEBUG] [Thread-119506] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:00:29.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:00:29.661 [DEBUG] [Thread-119509] [transport.py] [_log()] starting thread (client mode): 0xa2752c20
2025-12-03T16:00:29.661 [DEBUG] [Thread-119509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:00:29.680 [DEBUG] [Thread-119509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:00:29.680 [INFO] [Thread-119509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:00:29.691 [DEBUG] [Thread-119509] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:00:29.691 [DEBUG] [Thread-119509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:00:29.691 [DEBUG] [Thread-119509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:00:29.691 [DEBUG] [Thread-119509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:00:29.691 [DEBUG] [Thread-119509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] client lang: <none>
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] server lang: <none>
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] kex follows: False
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] Compression: none
2025-12-03T16:00:29.692 [DEBUG] [Thread-119509] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:00:29.747 [DEBUG] [Thread-119509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:00:29.748 [DEBUG] [Thread-119509] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:00:29.748 [DEBUG] [Thread-119509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:00:29.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:00:29.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:00:29.808 [DEBUG] [Thread-119509] [transport.py] [_log()] userauth is OK
2025-12-03T16:00:29.808 [DEBUG] [Thread-119509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:00:29.808 [DEBUG] [Thread-119509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:00:29.808 [DEBUG] [Thread-119509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:00:29.808 [DEBUG] [Thread-119509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:00:29.827 [INFO] [Thread-119509] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:00:29.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:00:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:00:30.741 [DEBUG] [Thread-119509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:00:30.741 [DEBUG] [Thread-119509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:00:30.789 [DEBUG] [Thread-119509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:00:30.789 [DEBUG] [Thread-119509] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:00:30.799 [DEBUG] [Thread-119509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:00:30.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:00:30.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:00:30.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:00:30.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:00:30.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:00:30.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:00:30.835 [DEBUG] [Thread-119509] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:00:33.280 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:33.281 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:33.478 [DEBUG] [Thread-119511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:48.531 [DEBUG] [Thread-119512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:00:54.401 [DEBUG] [Thread-119513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:00.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:01:00.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:01:00.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:01:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 0, 39), 24.42, 19.42, 0.0, 22.16, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:01:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:00:39
2025-12-03T16:01:01.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:01:01.821 [DEBUG] [Thread-119514] [transport.py] [_log()] starting thread (client mode): 0xa27510f0
2025-12-03T16:01:01.821 [DEBUG] [Thread-119514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:01:01.842 [DEBUG] [Thread-119514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:01:01.842 [INFO] [Thread-119514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:01:01.845 [DEBUG] [Thread-119514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:01:01.845 [DEBUG] [Thread-119514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:01:01.845 [DEBUG] [Thread-119514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:01:01.845 [DEBUG] [Thread-119514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] client lang: <none>
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] server lang: <none>
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] kex follows: False
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] Compression: none
2025-12-03T16:01:01.846 [DEBUG] [Thread-119514] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:01:01.864 [DEBUG] [Thread-119514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:01:01.864 [DEBUG] [Thread-119514] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:01:01.865 [DEBUG] [Thread-119514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:01:01.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:01:01.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:01:01.866 [DEBUG] [Thread-119514] [transport.py] [_log()] userauth is OK
2025-12-03T16:01:01.867 [DEBUG] [Thread-119514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:01:01.867 [DEBUG] [Thread-119514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:01:01.867 [DEBUG] [Thread-119514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:01:01.867 [DEBUG] [Thread-119514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:01:01.891 [INFO] [Thread-119514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:01:01.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:01:02.552 [DEBUG] [Thread-119514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:01:02.552 [DEBUG] [Thread-119514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:01:02.552 [DEBUG] [Thread-119514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:01:02.593 [DEBUG] [Thread-119514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:01:02.593 [DEBUG] [Thread-119514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:01:02.597 [DEBUG] [Thread-119514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:01:02.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:01:02.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:01:02.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:01:02.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:01:02.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:01:02.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:01:02.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:01:02.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.583729 -999.00  +22.10  16.05     24   +0.90 1 1 1 1 1   888    0 19.79 -73.33 ----- 16.1 16.1 197.4 22.1 28.2 -31.1 27.9 -29.3 29.6 -28.2 30.2 -30.0
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.583729
2025-12-03T16:01:02.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:01:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:01:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:01:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:01:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:01:02.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:00:39', tmtdew=24.42, humidity=19.42, cloud=0.0, wind=22.16, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:00:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:01:02.626 [DEBUG] [Thread-119514] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:01:02.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:01:02.731 [DEBUG] [Thread-119517] [transport.py] [_log()] starting thread (client mode): 0xa2752290
2025-12-03T16:01:02.731 [DEBUG] [Thread-119517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:01:02.745 [DEBUG] [Thread-119517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:01:02.745 [INFO] [Thread-119517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:01:02.752 [DEBUG] [Thread-119517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] client lang: <none>
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] server lang: <none>
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] kex follows: False
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:01:02.753 [DEBUG] [Thread-119517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:01:02.754 [DEBUG] [Thread-119517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:01:02.754 [DEBUG] [Thread-119517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:01:02.754 [DEBUG] [Thread-119517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:01:02.754 [DEBUG] [Thread-119517] [transport.py] [_log()] Compression: none
2025-12-03T16:01:02.754 [DEBUG] [Thread-119517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:01:02.814 [DEBUG] [Thread-119517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:01:02.814 [DEBUG] [Thread-119517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:01:02.815 [DEBUG] [Thread-119517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:01:02.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:01:02.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:01:02.874 [DEBUG] [Thread-119517] [transport.py] [_log()] userauth is OK
2025-12-03T16:01:02.874 [DEBUG] [Thread-119517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:01:02.874 [DEBUG] [Thread-119517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:01:02.874 [DEBUG] [Thread-119517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:01:02.874 [DEBUG] [Thread-119517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:01:02.893 [INFO] [Thread-119517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:01:02.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:01:02.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:01:03.561 [DEBUG] [Thread-119519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:03.750 [DEBUG] [Thread-119517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:01:03.751 [DEBUG] [Thread-119517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:01:03.799 [DEBUG] [Thread-119517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:01:03.799 [DEBUG] [Thread-119517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:01:03.808 [DEBUG] [Thread-119517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:01:03.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:01:03.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:01:03.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:01:03.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:01:03.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:01:03.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:01:03.846 [DEBUG] [Thread-119517] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:01:18.621 [DEBUG] [Thread-119520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:33.422 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:33.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:33.654 [DEBUG] [Thread-119521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:33.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:01:33.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:01:33.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:01:34.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 1, 11), 24.45, 19.39, 0.0, 21.51, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:01:34.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:01:11
2025-12-03T16:01:34.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:01:34.854 [DEBUG] [Thread-119522] [transport.py] [_log()] starting thread (client mode): 0xa2761b70
2025-12-03T16:01:34.854 [DEBUG] [Thread-119522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:01:34.876 [DEBUG] [Thread-119522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:01:34.876 [INFO] [Thread-119522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] client lang: <none>
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] server lang: <none>
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] kex follows: False
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] Compression: none
2025-12-03T16:01:34.880 [DEBUG] [Thread-119522] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:01:34.896 [DEBUG] [Thread-119522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:01:34.897 [DEBUG] [Thread-119522] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:01:34.897 [DEBUG] [Thread-119522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:01:34.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:01:34.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:01:34.898 [DEBUG] [Thread-119522] [transport.py] [_log()] userauth is OK
2025-12-03T16:01:34.898 [DEBUG] [Thread-119522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:01:34.898 [DEBUG] [Thread-119522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:01:34.898 [DEBUG] [Thread-119522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:01:34.898 [DEBUG] [Thread-119522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:01:34.914 [INFO] [Thread-119522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:01:34.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:01:35.705 [DEBUG] [Thread-119522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:01:35.705 [DEBUG] [Thread-119522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:01:35.706 [DEBUG] [Thread-119522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:01:35.746 [DEBUG] [Thread-119522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:01:35.746 [DEBUG] [Thread-119522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:01:35.750 [DEBUG] [Thread-119522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:01:35.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:01:35.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:01:35.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:01:35.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:01:35.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:01:35.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:01:35.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:01:35.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:01:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:01:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.584076 -999.00  +22.10   7.74     24   +0.80 1 1 1 1 1   888    0 19.77 -72.47 ----- 7.7 7.7 215.9 26.5 28.2 -30.7 27.9 -32.5 29.6 -29.7 30.2 -30.7
2025-12-03T16:01:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:01:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:01:35.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.584076
2025-12-03T16:01:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:01:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:01:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:01:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:01:35.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:01:35.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:01:11', tmtdew=24.45, humidity=19.39, cloud=0.0, wind=21.51, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:01:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:01:35.779 [DEBUG] [Thread-119522] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:01:35.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:01:35.875 [DEBUG] [Thread-119525] [transport.py] [_log()] starting thread (client mode): 0xa2761510
2025-12-03T16:01:35.875 [DEBUG] [Thread-119525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:01:35.889 [DEBUG] [Thread-119525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:01:35.889 [INFO] [Thread-119525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] client lang: <none>
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] server lang: <none>
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] kex follows: False
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:01:35.897 [DEBUG] [Thread-119525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:01:35.898 [DEBUG] [Thread-119525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:01:35.898 [DEBUG] [Thread-119525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:01:35.898 [DEBUG] [Thread-119525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:01:35.898 [DEBUG] [Thread-119525] [transport.py] [_log()] Compression: none
2025-12-03T16:01:35.898 [DEBUG] [Thread-119525] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:01:35.955 [DEBUG] [Thread-119525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:01:35.956 [DEBUG] [Thread-119525] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:01:35.965 [DEBUG] [Thread-119525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:01:35.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:01:35.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:01:36.011 [DEBUG] [Thread-119525] [transport.py] [_log()] userauth is OK
2025-12-03T16:01:36.011 [DEBUG] [Thread-119525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:01:36.011 [DEBUG] [Thread-119525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:01:36.011 [DEBUG] [Thread-119525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:01:36.011 [DEBUG] [Thread-119525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:01:36.032 [INFO] [Thread-119525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:01:36.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:01:36.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:01:36.896 [DEBUG] [Thread-119525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:01:36.896 [DEBUG] [Thread-119525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:01:36.944 [DEBUG] [Thread-119525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:01:36.944 [DEBUG] [Thread-119525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:01:36.953 [DEBUG] [Thread-119525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:01:36.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:01:36.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:01:36.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:01:36.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:01:36.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:01:36.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:01:36.985 [DEBUG] [Thread-119525] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:01:48.686 [DEBUG] [Thread-119527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:01:54.468 [DEBUG] [Thread-119528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:03.737 [DEBUG] [Thread-119529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:07.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:02:07.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:02:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:02:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 1, 43), 24.17, 19.84, 0.0, 19.41, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:02:07.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:01:43
2025-12-03T16:02:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:02:07.984 [DEBUG] [Thread-119530] [transport.py] [_log()] starting thread (client mode): 0xa27cbfd0
2025-12-03T16:02:07.984 [DEBUG] [Thread-119530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:02:08.004 [DEBUG] [Thread-119530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:02:08.004 [INFO] [Thread-119530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:02:08.007 [DEBUG] [Thread-119530] [transport.py] [_log()] client lang: <none>
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] server lang: <none>
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] kex follows: False
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] Compression: none
2025-12-03T16:02:08.008 [DEBUG] [Thread-119530] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:02:08.025 [DEBUG] [Thread-119530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:02:08.025 [DEBUG] [Thread-119530] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:02:08.025 [DEBUG] [Thread-119530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:02:08.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:02:08.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:02:08.026 [DEBUG] [Thread-119530] [transport.py] [_log()] userauth is OK
2025-12-03T16:02:08.026 [DEBUG] [Thread-119530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:02:08.026 [DEBUG] [Thread-119530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:02:08.026 [DEBUG] [Thread-119530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:02:08.026 [DEBUG] [Thread-119530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:02:08.038 [INFO] [Thread-119530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:02:08.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:02:08.697 [DEBUG] [Thread-119530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:02:08.697 [DEBUG] [Thread-119530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:02:08.698 [DEBUG] [Thread-119530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:02:08.739 [DEBUG] [Thread-119530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:02:08.739 [DEBUG] [Thread-119530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:02:08.741 [DEBUG] [Thread-119530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:02:08.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:02:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:02:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:02:08.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:02:08.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:02:08.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:02:08.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.584423 -999.00  +22.00  17.42     24   +0.80 1 1 1 1 1   888    0 19.65 -70.02 ----- 17.4 17.4 190.0 19.0 28.1 -31.8 27.7 -32.5 29.5 -27.4 30.1 -30.6
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.584423
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:02:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:01:43', tmtdew=24.17, humidity=19.84, cloud=0.0, wind=19.41, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:01:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:02:08.758 [DEBUG] [Thread-119530] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:02:08.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:02:08.844 [DEBUG] [Thread-119533] [transport.py] [_log()] starting thread (client mode): 0xa2762560
2025-12-03T16:02:08.844 [DEBUG] [Thread-119533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:02:08.859 [DEBUG] [Thread-119533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:02:08.859 [INFO] [Thread-119533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] client lang: <none>
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] server lang: <none>
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] kex follows: False
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] Compression: none
2025-12-03T16:02:08.867 [DEBUG] [Thread-119533] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:02:08.924 [DEBUG] [Thread-119533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:02:08.924 [DEBUG] [Thread-119533] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:02:08.924 [DEBUG] [Thread-119533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:02:08.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:02:08.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:02:08.980 [DEBUG] [Thread-119533] [transport.py] [_log()] userauth is OK
2025-12-03T16:02:08.980 [DEBUG] [Thread-119533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:02:08.980 [DEBUG] [Thread-119533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:02:08.980 [DEBUG] [Thread-119533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:02:08.980 [DEBUG] [Thread-119533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:02:08.994 [INFO] [Thread-119533] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:02:08.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:02:08.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:02:09.886 [DEBUG] [Thread-119533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:02:09.886 [DEBUG] [Thread-119533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:02:09.933 [DEBUG] [Thread-119533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:02:09.933 [DEBUG] [Thread-119533] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:02:09.941 [DEBUG] [Thread-119533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:02:09.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:02:09.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:02:09.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:02:09.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:02:09.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:02:09.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:02:09.973 [DEBUG] [Thread-119533] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:02:18.768 [DEBUG] [Thread-119535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:33.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:33.564 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:33.818 [DEBUG] [Thread-119536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:39.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:02:39.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:02:39.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:02:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 2, 15), 24.19, 19.8, 0.0, 17.13, 21.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:02:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:02:15
2025-12-03T16:02:40.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:02:40.928 [DEBUG] [Thread-119537] [transport.py] [_log()] starting thread (client mode): 0xa2728280
2025-12-03T16:02:40.928 [DEBUG] [Thread-119537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:02:40.948 [DEBUG] [Thread-119537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:02:40.949 [INFO] [Thread-119537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] client lang: <none>
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] server lang: <none>
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] kex follows: False
2025-12-03T16:02:40.952 [DEBUG] [Thread-119537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] Compression: none
2025-12-03T16:02:40.953 [DEBUG] [Thread-119537] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:02:40.970 [DEBUG] [Thread-119537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:02:40.970 [DEBUG] [Thread-119537] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:02:40.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:02:40.972 [DEBUG] [Thread-119537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:02:40.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:02:40.973 [DEBUG] [Thread-119537] [transport.py] [_log()] userauth is OK
2025-12-03T16:02:40.974 [DEBUG] [Thread-119537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:02:40.974 [DEBUG] [Thread-119537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:02:40.974 [DEBUG] [Thread-119537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:02:40.974 [DEBUG] [Thread-119537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:02:40.997 [INFO] [Thread-119537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:02:40.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:02:41.774 [DEBUG] [Thread-119537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:02:41.775 [DEBUG] [Thread-119537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:02:41.775 [DEBUG] [Thread-119537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:02:41.816 [DEBUG] [Thread-119537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:02:41.816 [DEBUG] [Thread-119537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:02:41.819 [DEBUG] [Thread-119537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:02:41.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:02:41.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:02:41.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:02:41.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:02:41.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:02:41.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:02:41.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:02:41.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.584771 -999.00  +22.10  12.16     24   +0.80 1 1 1 1 1   888    0 19.34 -67.36 ----- 12.2 12.2 199.4 16.2 28.1 -30.9 27.7 -29.1 29.5 -27.4 30.1 -29.1
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.584771
2025-12-03T16:02:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:02:41.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:02:41.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:02:41.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:02:41.841 [DEBUG] [Thread-119537] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:02:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:02:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:02:15', tmtdew=24.19, humidity=19.8, cloud=0.0, wind=17.13, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:02:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:02:41.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:02:41.939 [DEBUG] [Thread-119540] [transport.py] [_log()] starting thread (client mode): 0xa2729480
2025-12-03T16:02:41.939 [DEBUG] [Thread-119540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:02:41.954 [DEBUG] [Thread-119540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:02:41.954 [INFO] [Thread-119540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:02:41.962 [DEBUG] [Thread-119540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] client lang: <none>
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] server lang: <none>
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] kex follows: False
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] Compression: none
2025-12-03T16:02:41.963 [DEBUG] [Thread-119540] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:02:42.023 [DEBUG] [Thread-119540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:02:42.023 [DEBUG] [Thread-119540] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:02:42.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:02:42.025 [DEBUG] [Thread-119540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:02:42.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:02:42.079 [DEBUG] [Thread-119540] [transport.py] [_log()] userauth is OK
2025-12-03T16:02:42.079 [DEBUG] [Thread-119540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:02:42.079 [DEBUG] [Thread-119540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:02:42.079 [DEBUG] [Thread-119540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:02:42.079 [DEBUG] [Thread-119540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:02:42.103 [INFO] [Thread-119540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:02:42.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:02:42.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:02:42.928 [DEBUG] [Thread-119540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:02:42.928 [DEBUG] [Thread-119540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:02:42.976 [DEBUG] [Thread-119540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:02:42.976 [DEBUG] [Thread-119540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:02:42.985 [DEBUG] [Thread-119540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:02:42.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:02:42.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:02:43.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:02:43.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:02:43.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:02:43.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:02:43.022 [DEBUG] [Thread-119540] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:02:48.852 [DEBUG] [Thread-119542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:02:54.504 [DEBUG] [Thread-119543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:03.897 [DEBUG] [Thread-119544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:13.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:03:13.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:03:13.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:03:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 2, 47), 24.15, 19.73, 0.0, 20.56, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:03:13.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:02:47
2025-12-03T16:03:13.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:03:14.000 [DEBUG] [Thread-119545] [transport.py] [_log()] starting thread (client mode): 0xa2750d60
2025-12-03T16:03:14.000 [DEBUG] [Thread-119545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:03:14.021 [DEBUG] [Thread-119545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:03:14.021 [INFO] [Thread-119545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:14.024 [DEBUG] [Thread-119545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] client lang: <none>
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] server lang: <none>
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] kex follows: False
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:03:14.025 [DEBUG] [Thread-119545] [transport.py] [_log()] Compression: none
2025-12-03T16:03:14.026 [DEBUG] [Thread-119545] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:03:14.045 [DEBUG] [Thread-119545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:03:14.045 [DEBUG] [Thread-119545] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:03:14.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:03:14.047 [DEBUG] [Thread-119545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:03:14.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:03:14.049 [DEBUG] [Thread-119545] [transport.py] [_log()] userauth is OK
2025-12-03T16:03:14.049 [DEBUG] [Thread-119545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:03:14.049 [DEBUG] [Thread-119545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:03:14.049 [DEBUG] [Thread-119545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:03:14.049 [DEBUG] [Thread-119545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:03:14.085 [INFO] [Thread-119545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:03:14.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:03:14.727 [DEBUG] [Thread-119545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:03:14.727 [DEBUG] [Thread-119545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:03:14.727 [DEBUG] [Thread-119545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:03:14.768 [DEBUG] [Thread-119545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:03:14.768 [DEBUG] [Thread-119545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:03:14.772 [DEBUG] [Thread-119545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:03:14.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:03:14.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:03:14.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:03:14.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:03:14.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:03:14.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:03:14.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:03:14.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.585118 -999.00  +22.30  13.84     23   +0.70 1 1 1 1 1   888    0 20.02 -62.95 ----- 13.8 13.8 202.6 22.8 28.2 -29.6 27.9 -31.4 29.6 -28.3 30.2 -30.8
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.585118
2025-12-03T16:03:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:03:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:03:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:03:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:03:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:03:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:02:47', tmtdew=24.15, humidity=19.73, cloud=0.0, wind=20.56, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:02:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:03:14.801 [DEBUG] [Thread-119545] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:03:14.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:03:14.896 [DEBUG] [Thread-119548] [transport.py] [_log()] starting thread (client mode): 0xa2760c10
2025-12-03T16:03:14.896 [DEBUG] [Thread-119548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:03:14.915 [DEBUG] [Thread-119548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:03:14.915 [INFO] [Thread-119548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:14.922 [DEBUG] [Thread-119548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] client lang: <none>
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] server lang: <none>
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] kex follows: False
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] Compression: none
2025-12-03T16:03:14.923 [DEBUG] [Thread-119548] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:03:14.981 [DEBUG] [Thread-119548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:03:14.982 [DEBUG] [Thread-119548] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:03:14.982 [DEBUG] [Thread-119548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:03:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:03:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:03:15.038 [DEBUG] [Thread-119548] [transport.py] [_log()] userauth is OK
2025-12-03T16:03:15.039 [DEBUG] [Thread-119548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:03:15.039 [DEBUG] [Thread-119548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:03:15.039 [DEBUG] [Thread-119548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:03:15.039 [DEBUG] [Thread-119548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:03:15.057 [INFO] [Thread-119548] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:03:15.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:03:15.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:03:15.908 [DEBUG] [Thread-119548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:03:15.909 [DEBUG] [Thread-119548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:03:15.956 [DEBUG] [Thread-119548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:03:15.956 [DEBUG] [Thread-119548] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:03:15.965 [DEBUG] [Thread-119548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:03:15.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:03:15.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:03:15.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:03:15.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:03:15.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:03:15.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:03:16.002 [DEBUG] [Thread-119548] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:03:18.933 [DEBUG] [Thread-119550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:33.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:33.710 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:33.985 [DEBUG] [Thread-119551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:46.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:03:46.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:03:46.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:03:46.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 3, 19), 24.43, 19.39, 0.0, 21.74, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:03:46.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:03:19
2025-12-03T16:03:46.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:03:46.964 [DEBUG] [Thread-119552] [transport.py] [_log()] starting thread (client mode): 0xa27635e0
2025-12-03T16:03:46.964 [DEBUG] [Thread-119552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:03:46.979 [DEBUG] [Thread-119552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:03:46.979 [INFO] [Thread-119552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:03:46.982 [DEBUG] [Thread-119552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] client lang: <none>
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] server lang: <none>
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] kex follows: False
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] Compression: none
2025-12-03T16:03:46.983 [DEBUG] [Thread-119552] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:03:47.004 [DEBUG] [Thread-119552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:03:47.004 [DEBUG] [Thread-119552] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:03:47.005 [DEBUG] [Thread-119552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:03:47.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:03:47.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:03:47.007 [DEBUG] [Thread-119552] [transport.py] [_log()] userauth is OK
2025-12-03T16:03:47.007 [DEBUG] [Thread-119552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:03:47.007 [DEBUG] [Thread-119552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:03:47.007 [DEBUG] [Thread-119552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:03:47.007 [DEBUG] [Thread-119552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:03:47.032 [INFO] [Thread-119552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:03:47.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:03:47.745 [DEBUG] [Thread-119552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:03:47.746 [DEBUG] [Thread-119552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:03:47.746 [DEBUG] [Thread-119552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:03:47.787 [DEBUG] [Thread-119552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:03:47.787 [DEBUG] [Thread-119552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:03:47.791 [DEBUG] [Thread-119552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:03:47.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:03:47.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:03:47.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:03:47.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:03:47.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:03:47.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:03:47.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:03:47.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:03:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:03:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.585465 -999.00  +22.20  17.07     24   +0.70 1 1 1 1 1   888    0 19.96 -59.33 ----- 17.1 17.1 175.1 22.0 28.1 -29.9 27.7 -35.4 29.5 -29.8 30.1 -30.1
2025-12-03T16:03:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:03:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:03:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.585465
2025-12-03T16:03:47.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:03:47.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:03:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:03:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:03:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:03:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:03:19', tmtdew=24.43, humidity=19.39, cloud=0.0, wind=21.74, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:03:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:03:47.817 [DEBUG] [Thread-119552] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:03:47.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:03:47.913 [DEBUG] [Thread-119555] [transport.py] [_log()] starting thread (client mode): 0xa2762e30
2025-12-03T16:03:47.913 [DEBUG] [Thread-119555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:03:47.928 [DEBUG] [Thread-119555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:03:47.928 [INFO] [Thread-119555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:03:47.936 [DEBUG] [Thread-119555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:03:47.936 [DEBUG] [Thread-119555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:03:47.936 [DEBUG] [Thread-119555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:03:47.936 [DEBUG] [Thread-119555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:47.936 [DEBUG] [Thread-119555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] client lang: <none>
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] server lang: <none>
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] kex follows: False
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] Compression: none
2025-12-03T16:03:47.937 [DEBUG] [Thread-119555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:03:47.995 [DEBUG] [Thread-119555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:03:47.996 [DEBUG] [Thread-119555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:03:47.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:03:47.997 [DEBUG] [Thread-119555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:03:47.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:03:48.051 [DEBUG] [Thread-119555] [transport.py] [_log()] userauth is OK
2025-12-03T16:03:48.052 [DEBUG] [Thread-119555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:03:48.052 [DEBUG] [Thread-119555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:03:48.052 [DEBUG] [Thread-119555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:03:48.052 [DEBUG] [Thread-119555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:03:48.071 [INFO] [Thread-119555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:03:48.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:03:48.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:03:48.948 [DEBUG] [Thread-119555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:03:48.949 [DEBUG] [Thread-119555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:03:49.000 [DEBUG] [Thread-119555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:03:49.000 [DEBUG] [Thread-119555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:03:49.012 [DEBUG] [Thread-119555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:03:49.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:03:49.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:03:49.025 [DEBUG] [Thread-119557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:03:49.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:03:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:03:49.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:03:49.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:03:49.048 [DEBUG] [Thread-119555] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:03:54.548 [DEBUG] [Thread-119558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:04.081 [DEBUG] [Thread-119559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:19.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:04:19.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:04:19.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:04:19.108 [DEBUG] [Thread-119560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:19.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 3, 51), 24.61, 19.35, 0.0, 16.62, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:04:19.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:03:51
2025-12-03T16:04:19.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:04:20.028 [DEBUG] [Thread-119561] [transport.py] [_log()] starting thread (client mode): 0xa27ca5c0
2025-12-03T16:04:20.029 [DEBUG] [Thread-119561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:04:20.049 [DEBUG] [Thread-119561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:04:20.049 [INFO] [Thread-119561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] client lang: <none>
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] server lang: <none>
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] kex follows: False
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] Compression: none
2025-12-03T16:04:20.052 [DEBUG] [Thread-119561] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:04:20.061 [DEBUG] [Thread-119561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:04:20.061 [DEBUG] [Thread-119561] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:04:20.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:04:20.062 [DEBUG] [Thread-119561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:04:20.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:04:20.064 [DEBUG] [Thread-119561] [transport.py] [_log()] userauth is OK
2025-12-03T16:04:20.064 [DEBUG] [Thread-119561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:04:20.064 [DEBUG] [Thread-119561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:04:20.064 [DEBUG] [Thread-119561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:04:20.064 [DEBUG] [Thread-119561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:04:20.082 [INFO] [Thread-119561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:04:20.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:04:20.731 [DEBUG] [Thread-119561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:04:20.731 [DEBUG] [Thread-119561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:04:20.731 [DEBUG] [Thread-119561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:04:20.772 [DEBUG] [Thread-119561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:04:20.772 [DEBUG] [Thread-119561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:04:20.776 [DEBUG] [Thread-119561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:04:20.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:04:20.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:04:20.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:04:20.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:04:20.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:04:20.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:04:20.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:04:20.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:04:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:04:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.585812 -999.00  +21.90  16.59     24   +0.50 1 1 1 1 1   888    0 19.53 -56.60 ----- 16.6 16.6 171.2 21.6 28.1 -30.8 27.8 -29.3 29.4 -28.5 30.1 -30.3
2025-12-03T16:04:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:04:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:04:20.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.585812
2025-12-03T16:04:20.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:04:20.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:04:20.803 [DEBUG] [Thread-119561] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:04:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:04:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:04:20.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:04:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:03:51', tmtdew=24.61, humidity=19.35, cloud=0.0, wind=16.62, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:03:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:04:20.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:04:20.898 [DEBUG] [Thread-119564] [transport.py] [_log()] starting thread (client mode): 0xa517c7c0
2025-12-03T16:04:20.898 [DEBUG] [Thread-119564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:04:20.914 [DEBUG] [Thread-119564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:04:20.914 [INFO] [Thread-119564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:04:20.922 [DEBUG] [Thread-119564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] client lang: <none>
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] server lang: <none>
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] kex follows: False
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:04:20.923 [DEBUG] [Thread-119564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:04:20.924 [DEBUG] [Thread-119564] [transport.py] [_log()] Compression: none
2025-12-03T16:04:20.924 [DEBUG] [Thread-119564] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:04:20.982 [DEBUG] [Thread-119564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:04:20.983 [DEBUG] [Thread-119564] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:04:20.983 [DEBUG] [Thread-119564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:04:20.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:04:20.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:04:21.042 [DEBUG] [Thread-119564] [transport.py] [_log()] userauth is OK
2025-12-03T16:04:21.042 [DEBUG] [Thread-119564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:04:21.042 [DEBUG] [Thread-119564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:04:21.042 [DEBUG] [Thread-119564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:04:21.042 [DEBUG] [Thread-119564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:04:21.058 [INFO] [Thread-119564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:04:21.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:04:21.979 [DEBUG] [Thread-119564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:04:21.983 [DEBUG] [Thread-119564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:04:22.028 [DEBUG] [Thread-119564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:04:22.028 [DEBUG] [Thread-119564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:04:22.037 [DEBUG] [Thread-119564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:04:22.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:04:22.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:04:22.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:04:22.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:04:22.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:04:22.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:04:22.074 [DEBUG] [Thread-119564] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:04:33.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:33.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:34.141 [DEBUG] [Thread-119566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:49.200 [DEBUG] [Thread-119567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:52.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:04:52.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:04:52.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:04:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 4, 23), 24.4, 19.55, 0.0, 15.33, 21.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:04:52.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:04:23
2025-12-03T16:04:52.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:04:53.037 [DEBUG] [Thread-119568] [transport.py] [_log()] starting thread (client mode): 0xa517ea10
2025-12-03T16:04:53.037 [DEBUG] [Thread-119568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:04:53.058 [DEBUG] [Thread-119568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:04:53.058 [INFO] [Thread-119568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:04:53.060 [DEBUG] [Thread-119568] [transport.py] [_log()] client lang: <none>
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] server lang: <none>
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] kex follows: False
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] Compression: none
2025-12-03T16:04:53.061 [DEBUG] [Thread-119568] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:04:53.075 [DEBUG] [Thread-119568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:04:53.076 [DEBUG] [Thread-119568] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:04:53.076 [DEBUG] [Thread-119568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:04:53.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:04:53.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:04:53.078 [DEBUG] [Thread-119568] [transport.py] [_log()] userauth is OK
2025-12-03T16:04:53.079 [DEBUG] [Thread-119568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:04:53.079 [DEBUG] [Thread-119568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:04:53.079 [DEBUG] [Thread-119568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:04:53.079 [DEBUG] [Thread-119568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:04:53.107 [INFO] [Thread-119568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:04:53.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:04:53.797 [DEBUG] [Thread-119568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:04:53.797 [DEBUG] [Thread-119568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:04:53.797 [DEBUG] [Thread-119568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:04:53.838 [DEBUG] [Thread-119568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:04:53.838 [DEBUG] [Thread-119568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:04:53.841 [DEBUG] [Thread-119568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:04:53.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:04:53.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:04:53.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:04:53.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:04:53.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:04:53.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:04:53.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:04:53.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:04:53.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:04:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.586507 -999.00  +21.70  14.95     24   +0.70 1 1 1 1 1   888    0 19.68 -51.17 ----- 14.9 14.9 186.2 22.1 28.0 -30.9 27.6 -32.4 29.3 -27.1 30.0 -29.8
2025-12-03T16:04:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:04:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:04:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.586507
2025-12-03T16:04:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:04:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:04:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:04:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:04:53.865 [DEBUG] [Thread-119568] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:04:53.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:04:53.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:04:23', tmtdew=24.4, humidity=19.55, cloud=0.0, wind=15.33, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:04:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:04:53.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:04:53.963 [DEBUG] [Thread-119571] [transport.py] [_log()] starting thread (client mode): 0xa2762500
2025-12-03T16:04:53.963 [DEBUG] [Thread-119571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:04:53.978 [DEBUG] [Thread-119571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:04:53.978 [INFO] [Thread-119571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:53.986 [DEBUG] [Thread-119571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] client lang: <none>
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] server lang: <none>
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] kex follows: False
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:04:53.987 [DEBUG] [Thread-119571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:04:53.988 [DEBUG] [Thread-119571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:04:53.988 [DEBUG] [Thread-119571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:04:53.988 [DEBUG] [Thread-119571] [transport.py] [_log()] Compression: none
2025-12-03T16:04:53.988 [DEBUG] [Thread-119571] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:04:54.043 [DEBUG] [Thread-119571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:04:54.044 [DEBUG] [Thread-119571] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:04:54.044 [DEBUG] [Thread-119571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:04:54.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:04:54.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:04:54.100 [DEBUG] [Thread-119571] [transport.py] [_log()] userauth is OK
2025-12-03T16:04:54.100 [DEBUG] [Thread-119571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:04:54.100 [DEBUG] [Thread-119571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:04:54.100 [DEBUG] [Thread-119571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:04:54.100 [DEBUG] [Thread-119571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:04:54.123 [INFO] [Thread-119571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:04:54.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:04:54.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:04:54.611 [DEBUG] [Thread-119573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:04:54.984 [DEBUG] [Thread-119571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:04:54.984 [DEBUG] [Thread-119571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:04:55.032 [DEBUG] [Thread-119571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:04:55.032 [DEBUG] [Thread-119571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:04:55.041 [DEBUG] [Thread-119571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:04:55.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:04:55.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:04:55.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:04:55.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:04:55.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:04:55.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:04:55.075 [DEBUG] [Thread-119571] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:05:04.233 [DEBUG] [Thread-119574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:19.282 [DEBUG] [Thread-119575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:05:25.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:05:25.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:05:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 4, 55), 24.4, 19.18, 0.0, 16.6, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:05:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:04:55
2025-12-03T16:05:25.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:05:26.090 [DEBUG] [Thread-119576] [transport.py] [_log()] starting thread (client mode): 0xa517f8e0
2025-12-03T16:05:26.090 [DEBUG] [Thread-119576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:05:26.110 [DEBUG] [Thread-119576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:05:26.110 [INFO] [Thread-119576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:05:26.113 [DEBUG] [Thread-119576] [transport.py] [_log()] client lang: <none>
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] server lang: <none>
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] kex follows: False
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] Compression: none
2025-12-03T16:05:26.114 [DEBUG] [Thread-119576] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:05:26.129 [DEBUG] [Thread-119576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:05:26.129 [DEBUG] [Thread-119576] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:05:26.129 [DEBUG] [Thread-119576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:05:26.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:05:26.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:05:26.130 [DEBUG] [Thread-119576] [transport.py] [_log()] userauth is OK
2025-12-03T16:05:26.130 [DEBUG] [Thread-119576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:05:26.130 [DEBUG] [Thread-119576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:05:26.130 [DEBUG] [Thread-119576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:05:26.130 [DEBUG] [Thread-119576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:05:26.142 [INFO] [Thread-119576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:05:26.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:05:26.754 [DEBUG] [Thread-119576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:05:26.754 [DEBUG] [Thread-119576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:05:26.754 [DEBUG] [Thread-119576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:05:26.795 [DEBUG] [Thread-119576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:05:26.795 [DEBUG] [Thread-119576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:05:26.797 [DEBUG] [Thread-119576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:05:26.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:05:26.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:05:26.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:05:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:05:26.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:05:26.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:05:26.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.586854 -999.00  +21.80   8.42     24   +0.70 1 1 1 1 1   888    0 20.00 -47.27 ----- 8.4 8.4 146.8 15.8 28.0 -29.7 27.6 -28.4 29.4 -27.2 30.1 -28.4
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.586854
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:05:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:04:55', tmtdew=24.4, humidity=19.18, cloud=0.0, wind=16.6, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:05:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:05:26.814 [DEBUG] [Thread-119576] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:05:26.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:05:26.901 [DEBUG] [Thread-119579] [transport.py] [_log()] starting thread (client mode): 0xa519afe0
2025-12-03T16:05:26.901 [DEBUG] [Thread-119579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:05:26.916 [DEBUG] [Thread-119579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:05:26.916 [INFO] [Thread-119579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:05:26.923 [DEBUG] [Thread-119579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] client lang: <none>
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] server lang: <none>
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] kex follows: False
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] Compression: none
2025-12-03T16:05:26.924 [DEBUG] [Thread-119579] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:05:26.982 [DEBUG] [Thread-119579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:05:26.982 [DEBUG] [Thread-119579] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:05:26.982 [DEBUG] [Thread-119579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:05:26.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:05:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:05:27.038 [DEBUG] [Thread-119579] [transport.py] [_log()] userauth is OK
2025-12-03T16:05:27.038 [DEBUG] [Thread-119579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:05:27.038 [DEBUG] [Thread-119579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:05:27.038 [DEBUG] [Thread-119579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:05:27.038 [DEBUG] [Thread-119579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:05:27.056 [INFO] [Thread-119579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:05:27.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:05:27.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:05:27.939 [DEBUG] [Thread-119579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:05:27.939 [DEBUG] [Thread-119579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:05:27.987 [DEBUG] [Thread-119579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:05:27.987 [DEBUG] [Thread-119579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:05:27.995 [DEBUG] [Thread-119579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:05:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:05:28.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:05:28.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:05:28.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:05:28.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:05:28.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:05:28.028 [DEBUG] [Thread-119579] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:05:33.997 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:33.998 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:34.314 [DEBUG] [Thread-119581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:49.383 [DEBUG] [Thread-119582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:54.667 [DEBUG] [Thread-119583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:05:58.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:05:58.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:05:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:05:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 5, 27), 24.24, 19.37, 0.0, 15.74, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:05:58.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:05:27
2025-12-03T16:05:58.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:05:59.002 [DEBUG] [Thread-119584] [transport.py] [_log()] starting thread (client mode): 0xa5198430
2025-12-03T16:05:59.002 [DEBUG] [Thread-119584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:05:59.022 [DEBUG] [Thread-119584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:05:59.022 [INFO] [Thread-119584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] client lang: <none>
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] server lang: <none>
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] kex follows: False
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:05:59.026 [DEBUG] [Thread-119584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:05:59.027 [DEBUG] [Thread-119584] [transport.py] [_log()] Compression: none
2025-12-03T16:05:59.027 [DEBUG] [Thread-119584] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:05:59.046 [DEBUG] [Thread-119584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:05:59.046 [DEBUG] [Thread-119584] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:05:59.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:05:59.047 [DEBUG] [Thread-119584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:05:59.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:05:59.049 [DEBUG] [Thread-119584] [transport.py] [_log()] userauth is OK
2025-12-03T16:05:59.049 [DEBUG] [Thread-119584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:05:59.049 [DEBUG] [Thread-119584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:05:59.049 [DEBUG] [Thread-119584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:05:59.050 [DEBUG] [Thread-119584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:05:59.070 [INFO] [Thread-119584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:05:59.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:05:59.718 [DEBUG] [Thread-119584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:05:59.718 [DEBUG] [Thread-119584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:05:59.718 [DEBUG] [Thread-119584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:05:59.758 [DEBUG] [Thread-119584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:05:59.758 [DEBUG] [Thread-119584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:05:59.761 [DEBUG] [Thread-119584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:05:59.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:05:59.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:05:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:05:59.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:05:59.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:05:59.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:05:59.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.587201 -999.00  +22.00  14.58     24   +0.80 1 1 1 1 1   888    0 19.99 -47.59 ----- 14.6 14.6 191.0 17.5 28.1 -29.3 27.7 -32.6 29.6 -27.1 30.2 -30.2
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.587201
2025-12-03T16:05:59.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:05:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:05:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:05:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:05:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:05:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:05:27', tmtdew=24.24, humidity=19.37, cloud=0.0, wind=15.74, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:05:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:05:59.778 [DEBUG] [Thread-119584] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:05:59.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:05:59.864 [DEBUG] [Thread-119587] [transport.py] [_log()] starting thread (client mode): 0xa2751fc0
2025-12-03T16:05:59.864 [DEBUG] [Thread-119587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:05:59.878 [DEBUG] [Thread-119587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:05:59.878 [INFO] [Thread-119587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] client lang: <none>
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] server lang: <none>
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] kex follows: False
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] Compression: none
2025-12-03T16:05:59.886 [DEBUG] [Thread-119587] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:05:59.943 [DEBUG] [Thread-119587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:05:59.944 [DEBUG] [Thread-119587] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:05:59.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:05:59.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:05:59.944 [DEBUG] [Thread-119587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:06:00.001 [DEBUG] [Thread-119587] [transport.py] [_log()] userauth is OK
2025-12-03T16:06:00.001 [DEBUG] [Thread-119587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:06:00.001 [DEBUG] [Thread-119587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:06:00.001 [DEBUG] [Thread-119587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:06:00.001 [DEBUG] [Thread-119587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:06:00.018 [INFO] [Thread-119587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:06:00.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:06:00.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:06:00.932 [DEBUG] [Thread-119587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:06:00.932 [DEBUG] [Thread-119587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:06:00.981 [DEBUG] [Thread-119587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:06:00.981 [DEBUG] [Thread-119587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:06:00.990 [DEBUG] [Thread-119587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:06:00.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:06:00.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:06:01.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:06:01.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:06:01.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:06:01.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:06:01.022 [DEBUG] [Thread-119587] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:06:04.417 [DEBUG] [Thread-119589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:19.460 [DEBUG] [Thread-119590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:06:31.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:06:31.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:06:31.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 5, 59), 24.32, 19.3, 0.0, 13.61, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:06:31.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:05:59
2025-12-03T16:06:31.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:06:32.003 [DEBUG] [Thread-119591] [transport.py] [_log()] starting thread (client mode): 0xa2751b70
2025-12-03T16:06:32.003 [DEBUG] [Thread-119591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:06:32.027 [DEBUG] [Thread-119591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:06:32.027 [INFO] [Thread-119591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:06:32.030 [DEBUG] [Thread-119591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] client lang: <none>
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] server lang: <none>
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] kex follows: False
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] Compression: none
2025-12-03T16:06:32.031 [DEBUG] [Thread-119591] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:06:32.045 [DEBUG] [Thread-119591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:06:32.045 [DEBUG] [Thread-119591] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:06:32.045 [DEBUG] [Thread-119591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:06:32.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:06:32.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:06:32.046 [DEBUG] [Thread-119591] [transport.py] [_log()] userauth is OK
2025-12-03T16:06:32.046 [DEBUG] [Thread-119591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:06:32.046 [DEBUG] [Thread-119591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:06:32.046 [DEBUG] [Thread-119591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:06:32.046 [DEBUG] [Thread-119591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:06:32.062 [INFO] [Thread-119591] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:06:32.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:06:32.701 [DEBUG] [Thread-119591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:06:32.701 [DEBUG] [Thread-119591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:06:32.701 [DEBUG] [Thread-119591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:06:32.742 [DEBUG] [Thread-119591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:06:32.742 [DEBUG] [Thread-119591] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:06:32.744 [DEBUG] [Thread-119591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:06:32.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:06:32.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:06:32.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:06:32.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:06:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:06:32.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:06:32.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.587548 -999.00  +22.10  14.90     24   +0.70 1 1 1 1 1   888    0 20.40 -39.44 ----- 14.9 14.9 171.0 19.3 28.0 -30.2 27.5 -30.6 29.4 -27.0 30.1 -29.3
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:06:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.587548
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:06:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:05:59', tmtdew=24.32, humidity=19.3, cloud=0.0, wind=13.61, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:06:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:06:32.761 [DEBUG] [Thread-119591] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:06:32.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:06:32.852 [DEBUG] [Thread-119594] [transport.py] [_log()] starting thread (client mode): 0xa2751000
2025-12-03T16:06:32.852 [DEBUG] [Thread-119594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:06:32.866 [DEBUG] [Thread-119594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:06:32.866 [INFO] [Thread-119594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] client lang: <none>
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] server lang: <none>
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] kex follows: False
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] Compression: none
2025-12-03T16:06:32.874 [DEBUG] [Thread-119594] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:06:32.934 [DEBUG] [Thread-119594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:06:32.934 [DEBUG] [Thread-119594] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:06:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:06:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:06:32.935 [DEBUG] [Thread-119594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:06:32.995 [DEBUG] [Thread-119594] [transport.py] [_log()] userauth is OK
2025-12-03T16:06:32.996 [DEBUG] [Thread-119594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:06:32.996 [DEBUG] [Thread-119594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:06:32.996 [DEBUG] [Thread-119594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:06:32.996 [DEBUG] [Thread-119594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:06:33.009 [INFO] [Thread-119594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:06:33.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:06:33.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:06:33.828 [DEBUG] [Thread-119594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:06:33.828 [DEBUG] [Thread-119594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:06:33.876 [DEBUG] [Thread-119594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:06:33.876 [DEBUG] [Thread-119594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:06:33.885 [DEBUG] [Thread-119594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:06:33.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:06:33.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:06:33.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:06:33.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:06:33.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:06:33.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:06:33.917 [DEBUG] [Thread-119594] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:06:34.142 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:34.145 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:34.497 [DEBUG] [Thread-119596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:49.544 [DEBUG] [Thread-119597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:06:54.705 [DEBUG] [Thread-119598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:07:03.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:07:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:07:04.578 [DEBUG] [Thread-119599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 6, 31), 24.47, 19.1, 0.0, 14.12, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:07:04.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:06:31
2025-12-03T16:07:04.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:07:04.939 [DEBUG] [Thread-119600] [transport.py] [_log()] starting thread (client mode): 0xa27cacb0
2025-12-03T16:07:04.939 [DEBUG] [Thread-119600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:07:04.960 [DEBUG] [Thread-119600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:07:04.960 [INFO] [Thread-119600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] client lang: <none>
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] server lang: <none>
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] kex follows: False
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] Compression: none
2025-12-03T16:07:04.963 [DEBUG] [Thread-119600] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:07:04.980 [DEBUG] [Thread-119600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:07:04.980 [DEBUG] [Thread-119600] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:07:04.980 [DEBUG] [Thread-119600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:07:04.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:07:04.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:07:04.981 [DEBUG] [Thread-119600] [transport.py] [_log()] userauth is OK
2025-12-03T16:07:04.981 [DEBUG] [Thread-119600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:07:04.981 [DEBUG] [Thread-119600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:07:04.981 [DEBUG] [Thread-119600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:07:04.981 [DEBUG] [Thread-119600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:07:04.991 [INFO] [Thread-119600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:07:04.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:07:05.633 [DEBUG] [Thread-119600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:07:05.633 [DEBUG] [Thread-119600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:07:05.633 [DEBUG] [Thread-119600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:07:05.675 [DEBUG] [Thread-119600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:07:05.675 [DEBUG] [Thread-119600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:07:05.677 [DEBUG] [Thread-119600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:07:05.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:07:05.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:07:05.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:07:05.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:07:05.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:07:05.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:07:05.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.587896 -999.00  +22.10  17.76     24   +0.60 1 1 1 1 1   888    0 20.42 -34.24 ----- 17.8 17.8 159.0 21.6 28.1 -30.9 27.7 -28.8 29.5 -28.1 30.2 -29.0
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.587896
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:07:05.691 [DEBUG] [Thread-119600] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:07:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:06:31', tmtdew=24.47, humidity=19.1, cloud=0.0, wind=14.12, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:06:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:07:05.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:07:05.779 [DEBUG] [Thread-119603] [transport.py] [_log()] starting thread (client mode): 0xa277a7a0
2025-12-03T16:07:05.779 [DEBUG] [Thread-119603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:07:05.794 [DEBUG] [Thread-119603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:07:05.794 [INFO] [Thread-119603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:07:05.802 [DEBUG] [Thread-119603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] client lang: <none>
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] server lang: <none>
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] kex follows: False
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] Compression: none
2025-12-03T16:07:05.803 [DEBUG] [Thread-119603] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:07:05.862 [DEBUG] [Thread-119603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:07:05.862 [DEBUG] [Thread-119603] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:07:05.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:07:05.863 [DEBUG] [Thread-119603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:07:05.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:07:05.918 [DEBUG] [Thread-119603] [transport.py] [_log()] userauth is OK
2025-12-03T16:07:05.918 [DEBUG] [Thread-119603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:07:05.918 [DEBUG] [Thread-119603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:07:05.919 [DEBUG] [Thread-119603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:07:05.919 [DEBUG] [Thread-119603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:07:05.938 [INFO] [Thread-119603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:07:05.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:07:05.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:07:06.785 [DEBUG] [Thread-119603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:07:06.785 [DEBUG] [Thread-119603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:07:06.832 [DEBUG] [Thread-119603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:07:06.833 [DEBUG] [Thread-119603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:07:06.841 [DEBUG] [Thread-119603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:07:06.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:07:06.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:07:06.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:07:06.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:07:06.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:07:06.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:07:06.876 [DEBUG] [Thread-119603] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:07:19.606 [DEBUG] [Thread-119605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:34.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:34.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:34.648 [DEBUG] [Thread-119606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:36.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:07:36.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:07:36.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:07:37.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 7, 3), 24.39, 19.18, 0.0, 12.93, 21.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:07:37.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:07:03
2025-12-03T16:07:37.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:07:37.889 [DEBUG] [Thread-119607] [transport.py] [_log()] starting thread (client mode): 0xa2751e10
2025-12-03T16:07:37.889 [DEBUG] [Thread-119607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:07:37.910 [DEBUG] [Thread-119607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:07:37.910 [INFO] [Thread-119607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] client lang: <none>
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] server lang: <none>
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] kex follows: False
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] Compression: none
2025-12-03T16:07:37.914 [DEBUG] [Thread-119607] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:07:37.931 [DEBUG] [Thread-119607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:07:37.932 [DEBUG] [Thread-119607] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:07:37.933 [DEBUG] [Thread-119607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:07:37.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:07:37.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:07:37.935 [DEBUG] [Thread-119607] [transport.py] [_log()] userauth is OK
2025-12-03T16:07:37.935 [DEBUG] [Thread-119607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:07:37.935 [DEBUG] [Thread-119607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:07:37.935 [DEBUG] [Thread-119607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:07:37.935 [DEBUG] [Thread-119607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:07:37.958 [INFO] [Thread-119607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:07:37.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:07:38.608 [DEBUG] [Thread-119607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:07:38.608 [DEBUG] [Thread-119607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:07:38.609 [DEBUG] [Thread-119607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:07:38.649 [DEBUG] [Thread-119607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:07:38.649 [DEBUG] [Thread-119607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:07:38.653 [DEBUG] [Thread-119607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:07:38.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:07:38.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:07:38.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:07:38.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:07:38.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:07:38.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:07:38.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:07:38.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:07:38.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:07:38.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.588243 -999.00  +22.10  13.02     24   +0.80 1 1 1 1 1   888    0 20.64 -29.79 ----- 13.0 13.0 187.4 18.3 28.1 -29.1 27.8 -28.6 29.6 -26.6 30.2 -28.9
2025-12-03T16:07:38.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:07:38.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:07:38.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.588243
2025-12-03T16:07:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:07:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:07:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:07:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:07:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:07:38.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:07:03', tmtdew=24.39, humidity=19.18, cloud=0.0, wind=12.93, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:07:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:07:38.679 [DEBUG] [Thread-119607] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:07:38.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:07:38.776 [DEBUG] [Thread-119610] [transport.py] [_log()] starting thread (client mode): 0xa27796f0
2025-12-03T16:07:38.776 [DEBUG] [Thread-119610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:07:38.791 [DEBUG] [Thread-119610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:07:38.791 [INFO] [Thread-119610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:07:38.799 [DEBUG] [Thread-119610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] client lang: <none>
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] server lang: <none>
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] kex follows: False
2025-12-03T16:07:38.800 [DEBUG] [Thread-119610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] Compression: none
2025-12-03T16:07:38.801 [DEBUG] [Thread-119610] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:07:38.857 [DEBUG] [Thread-119610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:07:38.858 [DEBUG] [Thread-119610] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:07:38.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:07:38.859 [DEBUG] [Thread-119610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:07:38.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:07:38.913 [DEBUG] [Thread-119610] [transport.py] [_log()] userauth is OK
2025-12-03T16:07:38.914 [DEBUG] [Thread-119610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:07:38.914 [DEBUG] [Thread-119610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:07:38.914 [DEBUG] [Thread-119610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:07:38.914 [DEBUG] [Thread-119610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:07:38.933 [INFO] [Thread-119610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:07:38.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:07:38.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:07:39.764 [DEBUG] [Thread-119610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:07:39.764 [DEBUG] [Thread-119610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:07:39.813 [DEBUG] [Thread-119610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:07:39.813 [DEBUG] [Thread-119610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:07:39.823 [DEBUG] [Thread-119610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:07:39.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:07:39.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:07:39.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:07:39.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:07:39.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:07:39.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:07:39.860 [DEBUG] [Thread-119610] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:07:49.689 [DEBUG] [Thread-119612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:07:54.734 [DEBUG] [Thread-119613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:04.739 [DEBUG] [Thread-119614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:08:09.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:08:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:08:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 8, 7), 24.59, 19.25, 0.0, 21.7, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:08:10.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:08:07
2025-12-03T16:08:10.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:08:10.837 [DEBUG] [Thread-119615] [transport.py] [_log()] starting thread (client mode): 0xa27cb160
2025-12-03T16:08:10.837 [DEBUG] [Thread-119615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:08:10.858 [DEBUG] [Thread-119615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:08:10.858 [INFO] [Thread-119615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:08:10.861 [DEBUG] [Thread-119615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:08:10.861 [DEBUG] [Thread-119615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] client lang: <none>
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] server lang: <none>
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] kex follows: False
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] Compression: none
2025-12-03T16:08:10.862 [DEBUG] [Thread-119615] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:08:10.870 [DEBUG] [Thread-119615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:08:10.871 [DEBUG] [Thread-119615] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:08:10.871 [DEBUG] [Thread-119615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:08:10.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:08:10.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:08:10.873 [DEBUG] [Thread-119615] [transport.py] [_log()] userauth is OK
2025-12-03T16:08:10.873 [DEBUG] [Thread-119615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:08:10.873 [DEBUG] [Thread-119615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:08:10.873 [DEBUG] [Thread-119615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:08:10.873 [DEBUG] [Thread-119615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:08:10.897 [INFO] [Thread-119615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:08:10.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:08:11.523 [DEBUG] [Thread-119615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:08:11.523 [DEBUG] [Thread-119615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:08:11.524 [DEBUG] [Thread-119615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:08:11.564 [DEBUG] [Thread-119615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:08:11.564 [DEBUG] [Thread-119615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:08:11.568 [DEBUG] [Thread-119615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:08:11.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:08:11.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:08:11.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:08:11.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:08:11.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:08:11.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:08:11.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.588590 -999.00  +22.40  17.77     24   +0.80 1 1 1 1 1   888    0 20.65 -21.44 ----- 17.8 17.8 154.0 25.2 28.1 -29.6 27.7 -29.1 29.6 -26.9 30.2 -28.7
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:08:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.588590
2025-12-03T16:08:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:08:11.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:08:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:08:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:08:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:08:11.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:08:07', tmtdew=24.59, humidity=19.25, cloud=0.0, wind=21.7, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:07:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:08:11.594 [DEBUG] [Thread-119615] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:08:11.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:08:11.689 [DEBUG] [Thread-119618] [transport.py] [_log()] starting thread (client mode): 0xa27508e0
2025-12-03T16:08:11.689 [DEBUG] [Thread-119618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:08:11.704 [DEBUG] [Thread-119618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:08:11.704 [INFO] [Thread-119618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] client lang: <none>
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] server lang: <none>
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] kex follows: False
2025-12-03T16:08:11.712 [DEBUG] [Thread-119618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] Compression: none
2025-12-03T16:08:11.713 [DEBUG] [Thread-119618] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:08:11.772 [DEBUG] [Thread-119618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:08:11.773 [DEBUG] [Thread-119618] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:08:11.773 [DEBUG] [Thread-119618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:08:11.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:08:11.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:08:11.828 [DEBUG] [Thread-119618] [transport.py] [_log()] userauth is OK
2025-12-03T16:08:11.829 [DEBUG] [Thread-119618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:08:11.829 [DEBUG] [Thread-119618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:08:11.829 [DEBUG] [Thread-119618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:08:11.829 [DEBUG] [Thread-119618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:08:11.848 [INFO] [Thread-119618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:08:11.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:08:11.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:08:12.728 [DEBUG] [Thread-119618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:08:12.729 [DEBUG] [Thread-119618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:08:12.776 [DEBUG] [Thread-119618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:08:12.777 [DEBUG] [Thread-119618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:08:12.786 [DEBUG] [Thread-119618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:08:12.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:08:12.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:08:12.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:08:12.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:08:12.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:08:12.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:08:12.823 [DEBUG] [Thread-119618] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:08:19.774 [DEBUG] [Thread-119620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:34.436 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:34.437 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:34.826 [DEBUG] [Thread-119621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:42.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:08:42.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:08:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:08:43.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 8, 39), 24.91, 18.63, 0.0, 19.59, 22.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:08:43.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:08:39
2025-12-03T16:08:43.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:08:43.794 [DEBUG] [Thread-119622] [transport.py] [_log()] starting thread (client mode): 0xa2747010
2025-12-03T16:08:43.795 [DEBUG] [Thread-119622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:08:43.821 [DEBUG] [Thread-119622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:08:43.821 [INFO] [Thread-119622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] client lang: <none>
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] server lang: <none>
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] kex follows: False
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:08:43.824 [DEBUG] [Thread-119622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:08:43.825 [DEBUG] [Thread-119622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:08:43.825 [DEBUG] [Thread-119622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:08:43.825 [DEBUG] [Thread-119622] [transport.py] [_log()] Compression: none
2025-12-03T16:08:43.825 [DEBUG] [Thread-119622] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:08:43.842 [DEBUG] [Thread-119622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:08:43.843 [DEBUG] [Thread-119622] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:08:43.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:08:43.844 [DEBUG] [Thread-119622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:08:43.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:08:43.846 [DEBUG] [Thread-119622] [transport.py] [_log()] userauth is OK
2025-12-03T16:08:43.846 [DEBUG] [Thread-119622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:08:43.846 [DEBUG] [Thread-119622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:08:43.846 [DEBUG] [Thread-119622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:08:43.846 [DEBUG] [Thread-119622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:08:43.883 [INFO] [Thread-119622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:08:43.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:08:44.524 [DEBUG] [Thread-119622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:08:44.524 [DEBUG] [Thread-119622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:08:44.524 [DEBUG] [Thread-119622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:08:44.565 [DEBUG] [Thread-119622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:08:44.566 [DEBUG] [Thread-119622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:08:44.569 [DEBUG] [Thread-119622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:08:44.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:08:44.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:08:44.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:08:44.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:08:44.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:08:44.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:08:44.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:08:44.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.588937 -999.00  +22.30  19.43     23   +0.50 1 1 1 1 1   888    0 20.74 -15.52 ----- 19.4 19.4 160.3 24.9 28.1 -29.5 27.9 -29.7 29.6 -27.7 30.2 -28.8
2025-12-03T16:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:08:44.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.588937
2025-12-03T16:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:08:44.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:08:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:08:39', tmtdew=24.91, humidity=18.63, cloud=0.0, wind=19.59, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:08:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:08:44.596 [DEBUG] [Thread-119622] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:08:44.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:08:44.692 [DEBUG] [Thread-119625] [transport.py] [_log()] starting thread (client mode): 0xa519b730
2025-12-03T16:08:44.692 [DEBUG] [Thread-119625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:08:44.706 [DEBUG] [Thread-119625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:08:44.707 [INFO] [Thread-119625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:08:44.714 [DEBUG] [Thread-119625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:08:44.714 [DEBUG] [Thread-119625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] client lang: <none>
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] server lang: <none>
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] kex follows: False
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] Compression: none
2025-12-03T16:08:44.715 [DEBUG] [Thread-119625] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:08:44.771 [DEBUG] [Thread-119625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:08:44.772 [DEBUG] [Thread-119625] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:08:44.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:08:44.773 [DEBUG] [Thread-119625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:08:44.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:08:44.827 [DEBUG] [Thread-119625] [transport.py] [_log()] userauth is OK
2025-12-03T16:08:44.828 [DEBUG] [Thread-119625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:08:44.828 [DEBUG] [Thread-119625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:08:44.828 [DEBUG] [Thread-119625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:08:44.828 [DEBUG] [Thread-119625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:08:44.847 [INFO] [Thread-119625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:08:44.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:08:44.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:08:45.656 [DEBUG] [Thread-119625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:08:45.656 [DEBUG] [Thread-119625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:08:45.704 [DEBUG] [Thread-119625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:08:45.704 [DEBUG] [Thread-119625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:08:45.713 [DEBUG] [Thread-119625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:08:45.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:08:45.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:08:45.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:08:45.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:08:45.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:08:45.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:08:45.750 [DEBUG] [Thread-119625] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:08:49.856 [DEBUG] [Thread-119627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:08:54.762 [DEBUG] [Thread-119628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:04.906 [DEBUG] [Thread-119629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:09:15.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:09:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:09:16.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 9, 11), 25.05, 18.44, 0.0, 19.83, 22.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:09:16.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:09:11
2025-12-03T16:09:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:09:16.765 [DEBUG] [Thread-119630] [transport.py] [_log()] starting thread (client mode): 0xa2779e70
2025-12-03T16:09:16.765 [DEBUG] [Thread-119630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:09:16.785 [DEBUG] [Thread-119630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:09:16.785 [INFO] [Thread-119630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] client lang: <none>
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] server lang: <none>
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] kex follows: False
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] Compression: none
2025-12-03T16:09:16.789 [DEBUG] [Thread-119630] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:09:16.805 [DEBUG] [Thread-119630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:09:16.805 [DEBUG] [Thread-119630] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:09:16.805 [DEBUG] [Thread-119630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:09:16.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:09:16.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:09:16.806 [DEBUG] [Thread-119630] [transport.py] [_log()] userauth is OK
2025-12-03T16:09:16.806 [DEBUG] [Thread-119630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:09:16.806 [DEBUG] [Thread-119630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:09:16.806 [DEBUG] [Thread-119630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:09:16.806 [DEBUG] [Thread-119630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:09:16.834 [INFO] [Thread-119630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:09:16.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:09:17.499 [DEBUG] [Thread-119630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:09:17.499 [DEBUG] [Thread-119630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:09:17.499 [DEBUG] [Thread-119630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:09:17.540 [DEBUG] [Thread-119630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:09:17.540 [DEBUG] [Thread-119630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:09:17.542 [DEBUG] [Thread-119630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:09:17.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:09:17.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:09:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:09:17.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:09:17.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:09:17.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:09:17.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:09:17.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:09:17.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.589284 -999.00  +22.00  14.85     23   +0.50 1 1 1 1 1   888    0 21.21 -9.74 ----- 14.8 14.8 158.2 26.3 28.1 -32.4 27.8 -29.1 29.4 -27.8 30.1 -29.4
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.589284
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:09:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:09:11', tmtdew=25.05, humidity=18.44, cloud=0.0, wind=19.83, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:08:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:09:17.561 [DEBUG] [Thread-119630] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:09:17.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:09:17.647 [DEBUG] [Thread-119633] [transport.py] [_log()] starting thread (client mode): 0xa2779540
2025-12-03T16:09:17.647 [DEBUG] [Thread-119633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:09:17.663 [DEBUG] [Thread-119633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:09:17.663 [INFO] [Thread-119633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] client lang: <none>
2025-12-03T16:09:17.670 [DEBUG] [Thread-119633] [transport.py] [_log()] server lang: <none>
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] kex follows: False
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] Compression: none
2025-12-03T16:09:17.671 [DEBUG] [Thread-119633] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:09:17.732 [DEBUG] [Thread-119633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:09:17.732 [DEBUG] [Thread-119633] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:09:17.733 [DEBUG] [Thread-119633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:09:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:09:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:09:17.793 [DEBUG] [Thread-119633] [transport.py] [_log()] userauth is OK
2025-12-03T16:09:17.793 [DEBUG] [Thread-119633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:09:17.793 [DEBUG] [Thread-119633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:09:17.793 [DEBUG] [Thread-119633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:09:17.794 [DEBUG] [Thread-119633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:09:17.807 [INFO] [Thread-119633] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:09:17.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:09:17.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:09:18.659 [DEBUG] [Thread-119633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:09:18.660 [DEBUG] [Thread-119633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:09:18.707 [DEBUG] [Thread-119633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:09:18.707 [DEBUG] [Thread-119633] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:09:18.715 [DEBUG] [Thread-119633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:09:18.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:09:18.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:09:18.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:09:18.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:09:18.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:09:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:09:18.746 [DEBUG] [Thread-119633] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:09:19.937 [DEBUG] [Thread-119635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:34.578 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:34.579 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:34.987 [DEBUG] [Thread-119636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:48.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:09:48.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:09:48.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:09:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 9, 43), 24.63, 18.92, 0.0, 24.69, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:09:49.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:09:43
2025-12-03T16:09:49.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:09:49.704 [DEBUG] [Thread-119637] [transport.py] [_log()] starting thread (client mode): 0xa519bbb0
2025-12-03T16:09:49.704 [DEBUG] [Thread-119637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:09:49.724 [DEBUG] [Thread-119637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:09:49.724 [INFO] [Thread-119637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:09:49.727 [DEBUG] [Thread-119637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] client lang: <none>
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] server lang: <none>
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] kex follows: False
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:09:49.728 [DEBUG] [Thread-119637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:09:49.729 [DEBUG] [Thread-119637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:09:49.729 [DEBUG] [Thread-119637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:09:49.729 [DEBUG] [Thread-119637] [transport.py] [_log()] Compression: none
2025-12-03T16:09:49.729 [DEBUG] [Thread-119637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:09:49.748 [DEBUG] [Thread-119637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:09:49.749 [DEBUG] [Thread-119637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:09:49.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:09:49.750 [DEBUG] [Thread-119637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:09:49.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:09:49.752 [DEBUG] [Thread-119637] [transport.py] [_log()] userauth is OK
2025-12-03T16:09:49.752 [DEBUG] [Thread-119637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:09:49.753 [DEBUG] [Thread-119637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:09:49.753 [DEBUG] [Thread-119637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:09:49.753 [DEBUG] [Thread-119637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:09:49.775 [INFO] [Thread-119637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:09:49.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:09:50.026 [DEBUG] [Thread-119639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:09:50.397 [DEBUG] [Thread-119637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:09:50.397 [DEBUG] [Thread-119637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:09:50.397 [DEBUG] [Thread-119637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:09:50.438 [DEBUG] [Thread-119637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:09:50.438 [DEBUG] [Thread-119637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:09:50.441 [DEBUG] [Thread-119637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:09:50.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:09:50.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:09:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:09:50.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:09:50.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:09:50.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:09:50.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:09:50.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:09:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:09:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.589632 -999.00  +21.90  14.06     24   +0.70 1 1 1 1 1   888    0 21.15 -8.44 ----- 14.1 14.1 152.8 25.3 28.0 -30.1 27.7 -29.1 29.3 -27.9 30.0 -30.1
2025-12-03T16:09:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:09:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:09:50.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.589632
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:09:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:09:43', tmtdew=24.63, humidity=18.92, cloud=0.0, wind=24.69, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:09:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:09:50.467 [DEBUG] [Thread-119637] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:09:50.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:09:50.563 [DEBUG] [Thread-119641] [transport.py] [_log()] starting thread (client mode): 0xa519ac20
2025-12-03T16:09:50.563 [DEBUG] [Thread-119641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:09:50.581 [DEBUG] [Thread-119641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:09:50.581 [INFO] [Thread-119641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:09:50.589 [DEBUG] [Thread-119641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] client lang: <none>
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] server lang: <none>
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] kex follows: False
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] Compression: none
2025-12-03T16:09:50.590 [DEBUG] [Thread-119641] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:09:50.649 [DEBUG] [Thread-119641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:09:50.649 [DEBUG] [Thread-119641] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:09:50.650 [DEBUG] [Thread-119641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:09:50.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:09:50.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:09:50.705 [DEBUG] [Thread-119641] [transport.py] [_log()] userauth is OK
2025-12-03T16:09:50.705 [DEBUG] [Thread-119641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:09:50.705 [DEBUG] [Thread-119641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:09:50.705 [DEBUG] [Thread-119641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:09:50.705 [DEBUG] [Thread-119641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:09:50.719 [INFO] [Thread-119641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:09:50.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:09:50.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:09:51.597 [DEBUG] [Thread-119641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:09:51.598 [DEBUG] [Thread-119641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:09:51.645 [DEBUG] [Thread-119641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:09:51.645 [DEBUG] [Thread-119641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:09:51.654 [DEBUG] [Thread-119641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:09:51.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:09:51.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:09:51.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:09:51.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:09:51.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:09:51.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:09:51.690 [DEBUG] [Thread-119641] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:09:54.807 [DEBUG] [Thread-119643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:05.054 [DEBUG] [Thread-119644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:20.103 [DEBUG] [Thread-119645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:21.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:10:21.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:10:21.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:10:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 10, 15), 24.58, 18.95, 0.0, 23.89, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:10:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:10:15
2025-12-03T16:10:22.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:10:22.658 [DEBUG] [Thread-119646] [transport.py] [_log()] starting thread (client mode): 0xa5199930
2025-12-03T16:10:22.658 [DEBUG] [Thread-119646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:10:22.678 [DEBUG] [Thread-119646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:10:22.678 [INFO] [Thread-119646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:10:22.682 [DEBUG] [Thread-119646] [transport.py] [_log()] client lang: <none>
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] server lang: <none>
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] kex follows: False
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] Compression: none
2025-12-03T16:10:22.683 [DEBUG] [Thread-119646] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:10:22.702 [DEBUG] [Thread-119646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:10:22.703 [DEBUG] [Thread-119646] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:10:22.704 [DEBUG] [Thread-119646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:10:22.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:10:22.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:10:22.706 [DEBUG] [Thread-119646] [transport.py] [_log()] userauth is OK
2025-12-03T16:10:22.706 [DEBUG] [Thread-119646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:10:22.706 [DEBUG] [Thread-119646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:10:22.706 [DEBUG] [Thread-119646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:10:22.706 [DEBUG] [Thread-119646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:10:22.730 [INFO] [Thread-119646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:10:22.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:10:23.327 [DEBUG] [Thread-119646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:10:23.327 [DEBUG] [Thread-119646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:10:23.327 [DEBUG] [Thread-119646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:10:23.368 [DEBUG] [Thread-119646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:10:23.368 [DEBUG] [Thread-119646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:10:23.372 [DEBUG] [Thread-119646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:10:23.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:10:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:10:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:10:23.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:10:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:10:23.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:10:23.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:10:23.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.590326 -999.00  +21.80  18.73     24   +0.50 1 1 1 1 1   888    0 20.81 -8.06 ----- 18.7 18.7 138.4 25.6 27.9 -30.6 27.5 -29.9 29.1 -28.8 29.8 -30.9
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.590326
2025-12-03T16:10:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:10:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:10:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:10:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:10:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:10:23.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:10:15', tmtdew=24.58, humidity=18.95, cloud=0.0, wind=23.89, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:10:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:10:23.398 [DEBUG] [Thread-119646] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:10:23.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:10:23.492 [DEBUG] [Thread-119649] [transport.py] [_log()] starting thread (client mode): 0xa51d2350
2025-12-03T16:10:23.492 [DEBUG] [Thread-119649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:10:23.507 [DEBUG] [Thread-119649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:10:23.507 [INFO] [Thread-119649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:23.515 [DEBUG] [Thread-119649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] client lang: <none>
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] server lang: <none>
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] kex follows: False
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] Compression: none
2025-12-03T16:10:23.516 [DEBUG] [Thread-119649] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:10:23.572 [DEBUG] [Thread-119649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:10:23.573 [DEBUG] [Thread-119649] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:10:23.573 [DEBUG] [Thread-119649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:10:23.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:10:23.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:10:23.629 [DEBUG] [Thread-119649] [transport.py] [_log()] userauth is OK
2025-12-03T16:10:23.629 [DEBUG] [Thread-119649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:10:23.629 [DEBUG] [Thread-119649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:10:23.629 [DEBUG] [Thread-119649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:10:23.629 [DEBUG] [Thread-119649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:10:23.648 [INFO] [Thread-119649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:10:23.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:10:23.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:10:24.465 [DEBUG] [Thread-119649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:10:24.465 [DEBUG] [Thread-119649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:10:24.513 [DEBUG] [Thread-119649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:10:24.513 [DEBUG] [Thread-119649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:10:24.522 [DEBUG] [Thread-119649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:10:24.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:10:24.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:10:24.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:10:24.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:10:24.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:10:24.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:10:24.557 [DEBUG] [Thread-119649] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:10:34.719 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:34.720 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:35.135 [DEBUG] [Thread-119651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:50.177 [DEBUG] [Thread-119652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:54.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:10:54.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:10:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:10:54.837 [DEBUG] [Thread-119653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:10:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 10, 47), 24.16, 19.37, 0.0, 18.62, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:10:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:10:47
2025-12-03T16:10:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:10:55.547 [DEBUG] [Thread-119654] [transport.py] [_log()] starting thread (client mode): 0xa519a950
2025-12-03T16:10:55.547 [DEBUG] [Thread-119654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:10:55.567 [DEBUG] [Thread-119654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:10:55.567 [INFO] [Thread-119654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:55.570 [DEBUG] [Thread-119654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] client lang: <none>
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] server lang: <none>
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] kex follows: False
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] Compression: none
2025-12-03T16:10:55.571 [DEBUG] [Thread-119654] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:10:55.590 [DEBUG] [Thread-119654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:10:55.591 [DEBUG] [Thread-119654] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:10:55.591 [DEBUG] [Thread-119654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:10:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:10:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:10:55.633 [DEBUG] [Thread-119654] [transport.py] [_log()] userauth is OK
2025-12-03T16:10:55.633 [DEBUG] [Thread-119654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:10:55.633 [DEBUG] [Thread-119654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:10:55.633 [DEBUG] [Thread-119654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:10:55.633 [DEBUG] [Thread-119654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:10:55.653 [INFO] [Thread-119654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:10:55.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:10:56.337 [DEBUG] [Thread-119654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:10:56.337 [DEBUG] [Thread-119654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:10:56.337 [DEBUG] [Thread-119654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:10:56.378 [DEBUG] [Thread-119654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:10:56.379 [DEBUG] [Thread-119654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:10:56.382 [DEBUG] [Thread-119654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:10:56.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:10:56.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:10:56.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:10:56.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:10:56.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:10:56.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:10:56.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:10:56.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.590673 -999.00  +21.70  12.41     24   +0.50 1 1 1 1 1   888    0 21.45 -8.70 ----- 12.4 12.4 115.6 22.1 27.8 -30.0 27.6 -29.8 29.2 -28.2 29.8 -30.1
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.590673
2025-12-03T16:10:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:10:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:10:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:10:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:10:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:10:56.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:10:47', tmtdew=24.16, humidity=19.37, cloud=0.0, wind=18.62, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:10:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:10:56.410 [DEBUG] [Thread-119654] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:10:56.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:10:56.505 [DEBUG] [Thread-119657] [transport.py] [_log()] starting thread (client mode): 0xa51d2e90
2025-12-03T16:10:56.505 [DEBUG] [Thread-119657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:10:56.521 [DEBUG] [Thread-119657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:10:56.521 [INFO] [Thread-119657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] client lang: <none>
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] server lang: <none>
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] kex follows: False
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:10:56.529 [DEBUG] [Thread-119657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:10:56.530 [DEBUG] [Thread-119657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:10:56.530 [DEBUG] [Thread-119657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:10:56.530 [DEBUG] [Thread-119657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:10:56.530 [DEBUG] [Thread-119657] [transport.py] [_log()] Compression: none
2025-12-03T16:10:56.530 [DEBUG] [Thread-119657] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:10:56.588 [DEBUG] [Thread-119657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:10:56.588 [DEBUG] [Thread-119657] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:10:56.589 [DEBUG] [Thread-119657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:10:56.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:10:56.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:10:56.644 [DEBUG] [Thread-119657] [transport.py] [_log()] userauth is OK
2025-12-03T16:10:56.644 [DEBUG] [Thread-119657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:10:56.644 [DEBUG] [Thread-119657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:10:56.644 [DEBUG] [Thread-119657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:10:56.644 [DEBUG] [Thread-119657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:10:56.663 [INFO] [Thread-119657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:10:56.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:10:56.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:10:57.508 [DEBUG] [Thread-119657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:10:57.508 [DEBUG] [Thread-119657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:10:57.556 [DEBUG] [Thread-119657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:10:57.556 [DEBUG] [Thread-119657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:10:57.565 [DEBUG] [Thread-119657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:10:57.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:10:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:10:57.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:10:57.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:10:57.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:10:57.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:10:57.600 [DEBUG] [Thread-119657] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:11:05.217 [DEBUG] [Thread-119659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:20.266 [DEBUG] [Thread-119660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:27.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:11:27.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:11:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:11:28.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 11, 19), 24.25, 19.28, 0.0, 20.41, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:11:28.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:11:19
2025-12-03T16:11:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:11:28.558 [DEBUG] [Thread-119661] [transport.py] [_log()] starting thread (client mode): 0xa519ada0
2025-12-03T16:11:28.558 [DEBUG] [Thread-119661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:11:28.578 [DEBUG] [Thread-119661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:11:28.579 [INFO] [Thread-119661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:11:28.582 [DEBUG] [Thread-119661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] client lang: <none>
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] server lang: <none>
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] kex follows: False
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] Compression: none
2025-12-03T16:11:28.583 [DEBUG] [Thread-119661] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:11:28.603 [DEBUG] [Thread-119661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:11:28.603 [DEBUG] [Thread-119661] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:11:28.604 [DEBUG] [Thread-119661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:11:28.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:11:28.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:11:28.606 [DEBUG] [Thread-119661] [transport.py] [_log()] userauth is OK
2025-12-03T16:11:28.606 [DEBUG] [Thread-119661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:11:28.606 [DEBUG] [Thread-119661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:11:28.606 [DEBUG] [Thread-119661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:11:28.606 [DEBUG] [Thread-119661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:11:28.628 [INFO] [Thread-119661] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:11:28.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:11:29.297 [DEBUG] [Thread-119661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:11:29.298 [DEBUG] [Thread-119661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:11:29.298 [DEBUG] [Thread-119661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:11:29.339 [DEBUG] [Thread-119661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:11:29.339 [DEBUG] [Thread-119661] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:11:29.342 [DEBUG] [Thread-119661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:11:29.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:11:29.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:11:29.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:11:29.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:11:29.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:11:29.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:11:29.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:11:29.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:11:29.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:11:29.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.591021 -999.00  +22.10  13.14     24   +0.80 1 1 1 1 1   888    0 21.25 -9.80 ----- 13.1 13.1 143.3 18.9 27.8 -29.5 27.8 -28.5 29.4 -26.6 29.9 -28.3
2025-12-03T16:11:29.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:11:29.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:11:29.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.591021
2025-12-03T16:11:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:11:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:11:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:11:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:11:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:11:29.367 [DEBUG] [Thread-119661] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:11:29.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:11:19', tmtdew=24.25, humidity=19.28, cloud=0.0, wind=20.41, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:11:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:11:29.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:11:29.474 [DEBUG] [Thread-119664] [transport.py] [_log()] starting thread (client mode): 0xa5199930
2025-12-03T16:11:29.475 [DEBUG] [Thread-119664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:11:29.489 [DEBUG] [Thread-119664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:11:29.489 [INFO] [Thread-119664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:11:29.497 [DEBUG] [Thread-119664] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:11:29.498 [DEBUG] [Thread-119664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:11:29.498 [DEBUG] [Thread-119664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:11:29.498 [DEBUG] [Thread-119664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:11:29.498 [DEBUG] [Thread-119664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:11:29.498 [DEBUG] [Thread-119664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] client lang: <none>
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] server lang: <none>
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] kex follows: False
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] Compression: none
2025-12-03T16:11:29.499 [DEBUG] [Thread-119664] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:11:29.555 [DEBUG] [Thread-119664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:11:29.555 [DEBUG] [Thread-119664] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:11:29.556 [DEBUG] [Thread-119664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:11:29.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:11:29.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:11:29.615 [DEBUG] [Thread-119664] [transport.py] [_log()] userauth is OK
2025-12-03T16:11:29.615 [DEBUG] [Thread-119664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:11:29.615 [DEBUG] [Thread-119664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:11:29.615 [DEBUG] [Thread-119664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:11:29.615 [DEBUG] [Thread-119664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:11:29.640 [INFO] [Thread-119664] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:11:29.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:11:29.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:11:30.525 [DEBUG] [Thread-119664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:11:30.525 [DEBUG] [Thread-119664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:11:30.572 [DEBUG] [Thread-119664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:11:30.573 [DEBUG] [Thread-119664] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:11:30.581 [DEBUG] [Thread-119664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:11:30.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:11:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:11:30.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:11:30.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:11:30.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:11:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:11:30.616 [DEBUG] [Thread-119664] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:11:34.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:34.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:35.295 [DEBUG] [Thread-119666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:50.343 [DEBUG] [Thread-119667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:11:54.876 [DEBUG] [Thread-119668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:00.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:12:00.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:12:00.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:12:01.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 11, 51), 24.37, 19.59, 0.0, 20.86, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:12:01.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:11:51
2025-12-03T16:12:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:12:01.579 [DEBUG] [Thread-119669] [transport.py] [_log()] starting thread (client mode): 0xa51d1120
2025-12-03T16:12:01.579 [DEBUG] [Thread-119669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:12:01.599 [DEBUG] [Thread-119669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:12:01.599 [INFO] [Thread-119669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:01.602 [DEBUG] [Thread-119669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] client lang: <none>
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] server lang: <none>
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] kex follows: False
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] Compression: none
2025-12-03T16:12:01.603 [DEBUG] [Thread-119669] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:12:01.621 [DEBUG] [Thread-119669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:12:01.622 [DEBUG] [Thread-119669] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:12:01.623 [DEBUG] [Thread-119669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:12:01.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:12:01.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:12:01.665 [DEBUG] [Thread-119669] [transport.py] [_log()] userauth is OK
2025-12-03T16:12:01.665 [DEBUG] [Thread-119669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:12:01.666 [DEBUG] [Thread-119669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:12:01.666 [DEBUG] [Thread-119669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:12:01.666 [DEBUG] [Thread-119669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:12:01.704 [INFO] [Thread-119669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:12:01.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:12:02.344 [DEBUG] [Thread-119669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:12:02.344 [DEBUG] [Thread-119669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:12:02.345 [DEBUG] [Thread-119669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:12:02.385 [DEBUG] [Thread-119669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:12:02.386 [DEBUG] [Thread-119669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:12:02.389 [DEBUG] [Thread-119669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:12:02.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:12:02.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:12:02.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:12:02.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:12:02.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:12:02.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:12:02.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:12:02.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:12:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:12:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.591368 -999.00  +22.30  17.96     24   +0.80 1 1 1 1 1   888    0 20.96 -8.97 ----- 18.0 18.0 132.8 22.2 27.9 -29.7 27.8 -29.2 29.4 -27.0 30.0 -29.1
2025-12-03T16:12:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:12:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:12:02.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.591368
2025-12-03T16:12:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:12:02.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:12:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:12:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:12:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:12:02.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:11:51', tmtdew=24.37, humidity=19.59, cloud=0.0, wind=20.86, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:11:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:12:02.415 [DEBUG] [Thread-119669] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:12:02.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:12:02.509 [DEBUG] [Thread-119672] [transport.py] [_log()] starting thread (client mode): 0xa51d2710
2025-12-03T16:12:02.510 [DEBUG] [Thread-119672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:12:02.525 [DEBUG] [Thread-119672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:12:02.526 [INFO] [Thread-119672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:12:02.533 [DEBUG] [Thread-119672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:12:02.534 [DEBUG] [Thread-119672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] client lang: <none>
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] server lang: <none>
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] kex follows: False
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:12:02.535 [DEBUG] [Thread-119672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:12:02.536 [DEBUG] [Thread-119672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:12:02.536 [DEBUG] [Thread-119672] [transport.py] [_log()] Compression: none
2025-12-03T16:12:02.536 [DEBUG] [Thread-119672] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:12:02.591 [DEBUG] [Thread-119672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:12:02.592 [DEBUG] [Thread-119672] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:12:02.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:12:02.594 [DEBUG] [Thread-119672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:12:02.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:12:02.650 [DEBUG] [Thread-119672] [transport.py] [_log()] userauth is OK
2025-12-03T16:12:02.651 [DEBUG] [Thread-119672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:12:02.651 [DEBUG] [Thread-119672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:12:02.651 [DEBUG] [Thread-119672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:12:02.651 [DEBUG] [Thread-119672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:12:02.673 [INFO] [Thread-119672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:12:02.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:12:02.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:12:03.527 [DEBUG] [Thread-119672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:12:03.527 [DEBUG] [Thread-119672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:12:03.575 [DEBUG] [Thread-119672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:12:03.575 [DEBUG] [Thread-119672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:12:03.584 [DEBUG] [Thread-119672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:12:03.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:12:03.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:12:03.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:12:03.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:12:03.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:12:03.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:12:03.621 [DEBUG] [Thread-119672] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:12:05.374 [DEBUG] [Thread-119674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:20.433 [DEBUG] [Thread-119675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:33.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:12:33.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:12:33.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:12:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 12, 23), 24.71, 19.17, 0.0, 24.1, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:12:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:12:23
2025-12-03T16:12:34.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:12:34.564 [DEBUG] [Thread-119676] [transport.py] [_log()] starting thread (client mode): 0xa277a1d0
2025-12-03T16:12:34.564 [DEBUG] [Thread-119676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:12:34.584 [DEBUG] [Thread-119676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:12:34.585 [INFO] [Thread-119676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:12:34.588 [DEBUG] [Thread-119676] [transport.py] [_log()] client lang: <none>
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] server lang: <none>
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] kex follows: False
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] Compression: none
2025-12-03T16:12:34.589 [DEBUG] [Thread-119676] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:12:34.606 [DEBUG] [Thread-119676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:12:34.607 [DEBUG] [Thread-119676] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:12:34.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:12:34.608 [DEBUG] [Thread-119676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:12:34.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:12:34.610 [DEBUG] [Thread-119676] [transport.py] [_log()] userauth is OK
2025-12-03T16:12:34.610 [DEBUG] [Thread-119676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:12:34.610 [DEBUG] [Thread-119676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:12:34.610 [DEBUG] [Thread-119676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:12:34.610 [DEBUG] [Thread-119676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:12:34.644 [INFO] [Thread-119676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:12:34.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:12:35.015 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:35.016 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:35.272 [DEBUG] [Thread-119676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:12:35.272 [DEBUG] [Thread-119676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:12:35.273 [DEBUG] [Thread-119676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:12:35.313 [DEBUG] [Thread-119676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:12:35.313 [DEBUG] [Thread-119676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:12:35.316 [DEBUG] [Thread-119676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:12:35.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:12:35.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:12:35.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:12:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:12:35.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:12:35.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:12:35.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:12:35.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.591715 -999.00  +22.30  15.41     24   +0.90 1 1 1 1 1   888    0 21.44 -7.57 ----- 15.4 15.4 146.4 22.5 27.9 -29.9 27.9 -28.9 29.4 -27.7 29.9 -28.5
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.591715
2025-12-03T16:12:35.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:12:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:12:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:12:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:12:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:12:35.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:12:23', tmtdew=24.71, humidity=19.17, cloud=0.0, wind=24.1, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:12:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:12:35.341 [DEBUG] [Thread-119676] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:12:35.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:12:35.441 [DEBUG] [Thread-119679] [transport.py] [_log()] starting thread (client mode): 0xa2745870
2025-12-03T16:12:35.441 [DEBUG] [Thread-119679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:12:35.455 [DEBUG] [Thread-119679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:12:35.455 [INFO] [Thread-119679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:12:35.462 [DEBUG] [Thread-119679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:12:35.462 [DEBUG] [Thread-119679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] client lang: <none>
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] server lang: <none>
2025-12-03T16:12:35.463 [DEBUG] [Thread-119679] [transport.py] [_log()] kex follows: False
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] Compression: none
2025-12-03T16:12:35.464 [DEBUG] [Thread-119679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:12:35.467 [DEBUG] [Thread-119681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:35.520 [DEBUG] [Thread-119679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:12:35.521 [DEBUG] [Thread-119679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:12:35.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:12:35.522 [DEBUG] [Thread-119679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:12:35.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:12:35.577 [DEBUG] [Thread-119679] [transport.py] [_log()] userauth is OK
2025-12-03T16:12:35.577 [DEBUG] [Thread-119679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:12:35.577 [DEBUG] [Thread-119679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:12:35.578 [DEBUG] [Thread-119679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:12:35.578 [DEBUG] [Thread-119679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:12:35.597 [INFO] [Thread-119679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:12:35.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:12:35.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:12:36.426 [DEBUG] [Thread-119679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:12:36.427 [DEBUG] [Thread-119679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:12:36.475 [DEBUG] [Thread-119679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:12:36.475 [DEBUG] [Thread-119679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:12:36.484 [DEBUG] [Thread-119679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:12:36.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:12:36.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:12:36.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:12:36.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:12:36.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:12:36.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:12:36.521 [DEBUG] [Thread-119679] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:12:50.517 [DEBUG] [Thread-119682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:12:54.915 [DEBUG] [Thread-119683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:05.549 [DEBUG] [Thread-119684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:06.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:13:06.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:13:06.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:13:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 12, 56), 25.12, 18.32, 0.0, 24.08, 22.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:13:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:12:56
2025-12-03T16:13:07.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:13:07.525 [DEBUG] [Thread-119685] [transport.py] [_log()] starting thread (client mode): 0xa2779930
2025-12-03T16:13:07.525 [DEBUG] [Thread-119685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:13:07.545 [DEBUG] [Thread-119685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:13:07.545 [INFO] [Thread-119685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] client lang: <none>
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] server lang: <none>
2025-12-03T16:13:07.548 [DEBUG] [Thread-119685] [transport.py] [_log()] kex follows: False
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] Compression: none
2025-12-03T16:13:07.549 [DEBUG] [Thread-119685] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:13:07.569 [DEBUG] [Thread-119685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:13:07.569 [DEBUG] [Thread-119685] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:13:07.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:13:07.570 [DEBUG] [Thread-119685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:13:07.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:13:07.571 [DEBUG] [Thread-119685] [transport.py] [_log()] userauth is OK
2025-12-03T16:13:07.571 [DEBUG] [Thread-119685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:13:07.571 [DEBUG] [Thread-119685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:13:07.571 [DEBUG] [Thread-119685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:13:07.571 [DEBUG] [Thread-119685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:13:07.589 [INFO] [Thread-119685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:13:07.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:13:08.244 [DEBUG] [Thread-119685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:13:08.244 [DEBUG] [Thread-119685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:13:08.244 [DEBUG] [Thread-119685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:13:08.285 [DEBUG] [Thread-119685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:13:08.286 [DEBUG] [Thread-119685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:13:08.288 [DEBUG] [Thread-119685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:13:08.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:13:08.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:13:08.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:13:08.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:13:08.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:13:08.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:13:08.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:13:08.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:13:08.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.592062 -999.00  +22.50  18.53     23   +0.70 1 1 1 1 1   888    0 21.41 -5.12 ----- 18.5 18.5 158.2 24.7 27.8 -31.1 27.8 -29.8 29.4 -28.0 29.9 -29.7
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.592062
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:13:08.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:12:56', tmtdew=25.12, humidity=18.32, cloud=0.0, wind=24.08, temperature=22.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:12:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:13:08.307 [DEBUG] [Thread-119685] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:13:08.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:13:08.401 [DEBUG] [Thread-119688] [transport.py] [_log()] starting thread (client mode): 0xa2778670
2025-12-03T16:13:08.401 [DEBUG] [Thread-119688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:13:08.415 [DEBUG] [Thread-119688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:13:08.415 [INFO] [Thread-119688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] client lang: <none>
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] server lang: <none>
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] kex follows: False
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] Compression: none
2025-12-03T16:13:08.423 [DEBUG] [Thread-119688] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:13:08.479 [DEBUG] [Thread-119688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:13:08.480 [DEBUG] [Thread-119688] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:13:08.480 [DEBUG] [Thread-119688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:13:08.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:13:08.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:13:08.540 [DEBUG] [Thread-119688] [transport.py] [_log()] userauth is OK
2025-12-03T16:13:08.540 [DEBUG] [Thread-119688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:13:08.540 [DEBUG] [Thread-119688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:13:08.540 [DEBUG] [Thread-119688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:13:08.540 [DEBUG] [Thread-119688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:13:08.554 [INFO] [Thread-119688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:13:08.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:13:08.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:13:09.403 [DEBUG] [Thread-119688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:13:09.403 [DEBUG] [Thread-119688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:13:09.451 [DEBUG] [Thread-119688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:13:09.452 [DEBUG] [Thread-119688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:13:09.459 [DEBUG] [Thread-119688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:13:09.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:13:09.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:13:09.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:13:09.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:13:09.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:13:09.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:13:09.492 [DEBUG] [Thread-119688] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:13:20.583 [DEBUG] [Thread-119690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:35.160 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:35.161 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:35.631 [DEBUG] [Thread-119691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:39.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:13:39.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:13:39.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:13:40.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 13, 28), 24.78, 18.75, 0.0, 19.11, 22.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:13:40.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:13:28
2025-12-03T16:13:40.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:13:40.444 [DEBUG] [Thread-119692] [transport.py] [_log()] starting thread (client mode): 0xa2779c00
2025-12-03T16:13:40.444 [DEBUG] [Thread-119692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:13:40.466 [DEBUG] [Thread-119692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:13:40.466 [INFO] [Thread-119692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] client lang: <none>
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] server lang: <none>
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] kex follows: False
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:13:40.469 [DEBUG] [Thread-119692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:13:40.470 [DEBUG] [Thread-119692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:13:40.470 [DEBUG] [Thread-119692] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:13:40.470 [DEBUG] [Thread-119692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:13:40.470 [DEBUG] [Thread-119692] [transport.py] [_log()] Compression: none
2025-12-03T16:13:40.470 [DEBUG] [Thread-119692] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:13:40.486 [DEBUG] [Thread-119692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:13:40.487 [DEBUG] [Thread-119692] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:13:40.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:13:40.488 [DEBUG] [Thread-119692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:13:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:13:40.489 [DEBUG] [Thread-119692] [transport.py] [_log()] userauth is OK
2025-12-03T16:13:40.490 [DEBUG] [Thread-119692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:13:40.490 [DEBUG] [Thread-119692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:13:40.490 [DEBUG] [Thread-119692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:13:40.490 [DEBUG] [Thread-119692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:13:40.510 [INFO] [Thread-119692] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:13:40.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:13:41.162 [DEBUG] [Thread-119692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:13:41.163 [DEBUG] [Thread-119692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:13:41.163 [DEBUG] [Thread-119692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:13:41.204 [DEBUG] [Thread-119692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:13:41.204 [DEBUG] [Thread-119692] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:13:41.207 [DEBUG] [Thread-119692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:13:41.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:13:41.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:13:41.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:13:41.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:13:41.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:13:41.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:13:41.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.592409 -999.00  +22.40  15.58     23   +0.70 1 1 1 1 1   888    0 21.03 -3.03 ----- 15.6 15.6 162.9 26.9 27.9 -30.5 27.7 -29.3 29.4 -28.1 29.9 -29.9
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:13:41.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.592409
2025-12-03T16:13:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:13:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:13:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:13:41.232 [DEBUG] [Thread-119692] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:13:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:13:41.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:13:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:13:28', tmtdew=24.78, humidity=18.75, cloud=0.0, wind=19.11, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:13:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:13:41.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:13:41.328 [DEBUG] [Thread-119695] [transport.py] [_log()] starting thread (client mode): 0xa51d1f30
2025-12-03T16:13:41.328 [DEBUG] [Thread-119695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:13:41.342 [DEBUG] [Thread-119695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:13:41.343 [INFO] [Thread-119695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:13:41.350 [DEBUG] [Thread-119695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:13:41.350 [DEBUG] [Thread-119695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] client lang: <none>
2025-12-03T16:13:41.351 [DEBUG] [Thread-119695] [transport.py] [_log()] server lang: <none>
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] kex follows: False
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:13:41.352 [DEBUG] [Thread-119695] [transport.py] [_log()] Compression: none
2025-12-03T16:13:41.353 [DEBUG] [Thread-119695] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:13:41.406 [DEBUG] [Thread-119695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:13:41.407 [DEBUG] [Thread-119695] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:13:41.407 [DEBUG] [Thread-119695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:13:41.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:13:41.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:13:41.468 [DEBUG] [Thread-119695] [transport.py] [_log()] userauth is OK
2025-12-03T16:13:41.468 [DEBUG] [Thread-119695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:13:41.468 [DEBUG] [Thread-119695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:13:41.469 [DEBUG] [Thread-119695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:13:41.469 [DEBUG] [Thread-119695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:13:41.488 [INFO] [Thread-119695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:13:41.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:13:41.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:13:42.311 [DEBUG] [Thread-119695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:13:42.311 [DEBUG] [Thread-119695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:13:42.359 [DEBUG] [Thread-119695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:13:42.359 [DEBUG] [Thread-119695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:13:42.369 [DEBUG] [Thread-119695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:13:42.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:13:42.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:13:42.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:13:42.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:13:42.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:13:42.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:13:42.406 [DEBUG] [Thread-119695] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:13:50.664 [DEBUG] [Thread-119697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:13:54.952 [DEBUG] [Thread-119698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:05.714 [DEBUG] [Thread-119699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:12.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:14:12.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:14:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:14:13.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 14), 25.1, 18.47, 0.0, 17.38, 22.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:14:13.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:14:00
2025-12-03T16:14:13.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:14:13.370 [DEBUG] [Thread-119700] [transport.py] [_log()] starting thread (client mode): 0xa2779090
2025-12-03T16:14:13.370 [DEBUG] [Thread-119700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:14:13.389 [DEBUG] [Thread-119700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:14:13.389 [INFO] [Thread-119700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] client lang: <none>
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] server lang: <none>
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] kex follows: False
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:14:13.392 [DEBUG] [Thread-119700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:14:13.393 [DEBUG] [Thread-119700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:14:13.393 [DEBUG] [Thread-119700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:14:13.393 [DEBUG] [Thread-119700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:14:13.393 [DEBUG] [Thread-119700] [transport.py] [_log()] Compression: none
2025-12-03T16:14:13.393 [DEBUG] [Thread-119700] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:14:13.409 [DEBUG] [Thread-119700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:14:13.409 [DEBUG] [Thread-119700] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:14:13.410 [DEBUG] [Thread-119700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:14:13.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:14:13.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:14:13.412 [DEBUG] [Thread-119700] [transport.py] [_log()] userauth is OK
2025-12-03T16:14:13.412 [DEBUG] [Thread-119700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:14:13.412 [DEBUG] [Thread-119700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:14:13.412 [DEBUG] [Thread-119700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:14:13.412 [DEBUG] [Thread-119700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:14:13.438 [INFO] [Thread-119700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:14:13.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:14:14.100 [DEBUG] [Thread-119700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:14:14.100 [DEBUG] [Thread-119700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:14:14.101 [DEBUG] [Thread-119700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:14:14.141 [DEBUG] [Thread-119700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:14:14.141 [DEBUG] [Thread-119700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:14:14.144 [DEBUG] [Thread-119700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:14:14.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:14:14.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:14:14.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:14:14.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:14:14.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:14:14.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:14:14.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:14:14.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:14:14.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:14:14.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.592757 -999.00  +22.40  15.26     24   +0.80 1 1 1 1 1   888    0 21.50 -1.08 ----- 15.3 15.3 166.6 22.3 27.8 -29.5 27.7 -29.2 29.4 -27.6 30.0 -29.1
2025-12-03T16:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.592757
2025-12-03T16:14:14.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:14:14.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:14:00', tmtdew=25.1, humidity=18.47, cloud=0.0, wind=17.38, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:13:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:14:14.170 [DEBUG] [Thread-119700] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:14:14.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:14:14.268 [DEBUG] [Thread-119703] [transport.py] [_log()] starting thread (client mode): 0xa2746170
2025-12-03T16:14:14.268 [DEBUG] [Thread-119703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:14:14.283 [DEBUG] [Thread-119703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:14:14.283 [INFO] [Thread-119703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:14:14.290 [DEBUG] [Thread-119703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:14:14.290 [DEBUG] [Thread-119703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:14:14.290 [DEBUG] [Thread-119703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] client lang: <none>
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] server lang: <none>
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] kex follows: False
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] Compression: none
2025-12-03T16:14:14.291 [DEBUG] [Thread-119703] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:14:14.352 [DEBUG] [Thread-119703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:14:14.352 [DEBUG] [Thread-119703] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:14:14.353 [DEBUG] [Thread-119703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:14:14.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:14:14.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:14:14.408 [DEBUG] [Thread-119703] [transport.py] [_log()] userauth is OK
2025-12-03T16:14:14.408 [DEBUG] [Thread-119703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:14:14.408 [DEBUG] [Thread-119703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:14:14.408 [DEBUG] [Thread-119703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:14:14.408 [DEBUG] [Thread-119703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:14:14.432 [INFO] [Thread-119703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:14:14.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:14:14.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:14:15.246 [DEBUG] [Thread-119703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:14:15.247 [DEBUG] [Thread-119703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:14:15.294 [DEBUG] [Thread-119703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:14:15.294 [DEBUG] [Thread-119703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:14:15.303 [DEBUG] [Thread-119703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:14:15.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:14:15.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:14:15.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:14:15.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:14:15.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:14:15.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:14:15.340 [DEBUG] [Thread-119703] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:14:20.749 [DEBUG] [Thread-119705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:35.304 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:35.305 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:35.798 [DEBUG] [Thread-119706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:14:45.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:14:45.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:14:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 14, 32), 25.01, 18.59, 0.0, 21.69, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:14:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:14:32
2025-12-03T16:14:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:14:46.309 [DEBUG] [Thread-119707] [transport.py] [_log()] starting thread (client mode): 0xa517eec0
2025-12-03T16:14:46.310 [DEBUG] [Thread-119707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:14:46.331 [DEBUG] [Thread-119707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:14:46.331 [INFO] [Thread-119707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:14:46.334 [DEBUG] [Thread-119707] [transport.py] [_log()] client lang: <none>
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] server lang: <none>
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] kex follows: False
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] Compression: none
2025-12-03T16:14:46.335 [DEBUG] [Thread-119707] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:14:46.352 [DEBUG] [Thread-119707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:14:46.352 [DEBUG] [Thread-119707] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:14:46.353 [DEBUG] [Thread-119707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:14:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:14:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:14:46.355 [DEBUG] [Thread-119707] [transport.py] [_log()] userauth is OK
2025-12-03T16:14:46.355 [DEBUG] [Thread-119707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:14:46.355 [DEBUG] [Thread-119707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:14:46.355 [DEBUG] [Thread-119707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:14:46.355 [DEBUG] [Thread-119707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:14:46.380 [INFO] [Thread-119707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:14:46.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:14:47.022 [DEBUG] [Thread-119707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:14:47.022 [DEBUG] [Thread-119707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:14:47.023 [DEBUG] [Thread-119707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:14:47.063 [DEBUG] [Thread-119707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:14:47.063 [DEBUG] [Thread-119707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:14:47.067 [DEBUG] [Thread-119707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:14:47.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:14:47.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:14:47.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:14:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:14:47.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:14:47.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:14:47.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:14:47.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.593104 -999.00  +22.30  23.35     23   +0.70 1 1 1 1 1   888    0 21.71 -0.58 ----- 23.4 23.4 161.2 36.9 27.9 -30.3 27.7 -29.0 29.4 -28.8 29.9 -30.8
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.593104
2025-12-03T16:14:47.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:14:47.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:14:47.095 [DEBUG] [Thread-119707] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:14:47.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:14:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:14:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:14:47.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:14:32', tmtdew=25.01, humidity=18.59, cloud=0.0, wind=21.69, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:14:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:14:47.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:14:47.186 [DEBUG] [Thread-119710] [transport.py] [_log()] starting thread (client mode): 0xa2747010
2025-12-03T16:14:47.186 [DEBUG] [Thread-119710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:14:47.204 [DEBUG] [Thread-119710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:14:47.204 [INFO] [Thread-119710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] client lang: <none>
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] server lang: <none>
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] kex follows: False
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:14:47.212 [DEBUG] [Thread-119710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:14:47.213 [DEBUG] [Thread-119710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:14:47.213 [DEBUG] [Thread-119710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:14:47.213 [DEBUG] [Thread-119710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:14:47.213 [DEBUG] [Thread-119710] [transport.py] [_log()] Compression: none
2025-12-03T16:14:47.213 [DEBUG] [Thread-119710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:14:47.272 [DEBUG] [Thread-119710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:14:47.272 [DEBUG] [Thread-119710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:14:47.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:14:47.274 [DEBUG] [Thread-119710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:14:47.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:14:47.331 [DEBUG] [Thread-119710] [transport.py] [_log()] userauth is OK
2025-12-03T16:14:47.331 [DEBUG] [Thread-119710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:14:47.332 [DEBUG] [Thread-119710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:14:47.332 [DEBUG] [Thread-119710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:14:47.332 [DEBUG] [Thread-119710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:14:47.351 [INFO] [Thread-119710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:14:47.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:14:47.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:14:48.276 [DEBUG] [Thread-119710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:14:48.277 [DEBUG] [Thread-119710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:14:48.324 [DEBUG] [Thread-119710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:14:48.324 [DEBUG] [Thread-119710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:14:48.334 [DEBUG] [Thread-119710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:14:48.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:14:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:14:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:14:48.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:14:48.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:14:48.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:14:48.373 [DEBUG] [Thread-119710] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:14:50.840 [DEBUG] [Thread-119712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:14:55.007 [DEBUG] [Thread-119713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:05.887 [DEBUG] [Thread-119714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:18.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:15:18.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:15:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:15:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 15, 4), 25.11, 18.5, 0.0, 20.8, 22.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:15:19.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:15:04
2025-12-03T16:15:19.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:15:19.317 [DEBUG] [Thread-119715] [transport.py] [_log()] starting thread (client mode): 0xa51d2bf0
2025-12-03T16:15:19.317 [DEBUG] [Thread-119715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:15:19.337 [DEBUG] [Thread-119715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:15:19.337 [INFO] [Thread-119715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] client lang: <none>
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] server lang: <none>
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] kex follows: False
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:15:19.347 [DEBUG] [Thread-119715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:15:19.348 [DEBUG] [Thread-119715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:15:19.348 [DEBUG] [Thread-119715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:15:19.348 [DEBUG] [Thread-119715] [transport.py] [_log()] Compression: none
2025-12-03T16:15:19.348 [DEBUG] [Thread-119715] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:15:19.364 [DEBUG] [Thread-119715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:15:19.365 [DEBUG] [Thread-119715] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:15:19.365 [DEBUG] [Thread-119715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:15:19.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:15:19.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:15:19.367 [DEBUG] [Thread-119715] [transport.py] [_log()] userauth is OK
2025-12-03T16:15:19.367 [DEBUG] [Thread-119715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:15:19.367 [DEBUG] [Thread-119715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:15:19.368 [DEBUG] [Thread-119715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:15:19.368 [DEBUG] [Thread-119715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:15:19.391 [INFO] [Thread-119715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:15:19.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:15:20.035 [DEBUG] [Thread-119715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:15:20.035 [DEBUG] [Thread-119715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:15:20.035 [DEBUG] [Thread-119715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:15:20.082 [DEBUG] [Thread-119715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:15:20.083 [DEBUG] [Thread-119715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:15:20.085 [DEBUG] [Thread-119715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:15:20.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:15:20.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:15:20.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:15:20.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:15:20.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:15:20.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:15:20.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:15:20.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:15:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:15:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.593798 -999.00  +22.00  19.58     24   +0.60 1 1 1 1 1   888    0 21.71 -3.18 ----- 19.6 19.6 158.8 22.0 27.7 -31.2 27.4 -29.2 29.1 -28.4 29.7 -29.6
2025-12-03T16:15:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:15:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:15:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.593798
2025-12-03T16:15:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:15:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:15:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:15:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:15:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:15:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:15:04', tmtdew=25.11, humidity=18.5, cloud=0.0, wind=20.8, temperature=22.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:15:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:15:20.112 [DEBUG] [Thread-119715] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:15:20.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:15:20.207 [DEBUG] [Thread-119718] [transport.py] [_log()] starting thread (client mode): 0xa272a6e0
2025-12-03T16:15:20.207 [DEBUG] [Thread-119718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:15:20.222 [DEBUG] [Thread-119718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:15:20.222 [INFO] [Thread-119718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] client lang: <none>
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] server lang: <none>
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] kex follows: False
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:15:20.230 [DEBUG] [Thread-119718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:15:20.231 [DEBUG] [Thread-119718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:15:20.231 [DEBUG] [Thread-119718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:15:20.231 [DEBUG] [Thread-119718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:15:20.231 [DEBUG] [Thread-119718] [transport.py] [_log()] Compression: none
2025-12-03T16:15:20.231 [DEBUG] [Thread-119718] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:15:20.290 [DEBUG] [Thread-119718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:15:20.291 [DEBUG] [Thread-119718] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:15:20.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:15:20.292 [DEBUG] [Thread-119718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:15:20.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:15:20.347 [DEBUG] [Thread-119718] [transport.py] [_log()] userauth is OK
2025-12-03T16:15:20.347 [DEBUG] [Thread-119718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:15:20.347 [DEBUG] [Thread-119718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:15:20.347 [DEBUG] [Thread-119718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:15:20.347 [DEBUG] [Thread-119718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:15:20.369 [INFO] [Thread-119718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:15:20.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:15:20.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:15:20.918 [DEBUG] [Thread-119720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:21.173 [DEBUG] [Thread-119718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:15:21.173 [DEBUG] [Thread-119718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:15:21.221 [DEBUG] [Thread-119718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:15:21.222 [DEBUG] [Thread-119718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:15:21.231 [DEBUG] [Thread-119718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:15:21.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:15:21.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:15:21.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:15:21.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:15:21.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:15:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:15:21.267 [DEBUG] [Thread-119718] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:15:35.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:35.448 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:35.965 [DEBUG] [Thread-119721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:51.000 [DEBUG] [Thread-119722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:15:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:15:51.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:15:51.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:15:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 15, 36), 24.58, 18.89, 0.0, 19.5, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:15:51.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:15:36
2025-12-03T16:15:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:15:52.207 [DEBUG] [Thread-119723] [transport.py] [_log()] starting thread (client mode): 0xa517c640
2025-12-03T16:15:52.207 [DEBUG] [Thread-119723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:15:52.227 [DEBUG] [Thread-119723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:15:52.227 [INFO] [Thread-119723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:52.230 [DEBUG] [Thread-119723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] client lang: <none>
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] server lang: <none>
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] kex follows: False
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] Compression: none
2025-12-03T16:15:52.231 [DEBUG] [Thread-119723] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:15:52.253 [DEBUG] [Thread-119723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:15:52.253 [DEBUG] [Thread-119723] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:15:52.254 [DEBUG] [Thread-119723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:15:52.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:15:52.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:15:52.296 [DEBUG] [Thread-119723] [transport.py] [_log()] userauth is OK
2025-12-03T16:15:52.297 [DEBUG] [Thread-119723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:15:52.297 [DEBUG] [Thread-119723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:15:52.297 [DEBUG] [Thread-119723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:15:52.297 [DEBUG] [Thread-119723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:15:52.336 [INFO] [Thread-119723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:15:52.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:15:52.973 [DEBUG] [Thread-119723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:15:52.973 [DEBUG] [Thread-119723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:15:52.973 [DEBUG] [Thread-119723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:15:53.014 [DEBUG] [Thread-119723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:15:53.014 [DEBUG] [Thread-119723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:15:53.018 [DEBUG] [Thread-119723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:15:53.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:15:53.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:15:53.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:15:53.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:15:53.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:15:53.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:15:53.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:15:53.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.594146 -999.00  +21.80  10.98     24   +0.50 1 1 1 1 1   888    0 21.50 -3.74 ----- 11.0 11.0 162.4 18.1 27.6 -30.2 27.4 -29.2 29.1 -27.8 29.8 -28.8
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.594146
2025-12-03T16:15:53.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:15:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:15:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:15:53.043 [DEBUG] [Thread-119723] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:15:53.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:15:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:15:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:15:36', tmtdew=24.58, humidity=18.89, cloud=0.0, wind=19.5, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:15:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:15:53.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:15:53.139 [DEBUG] [Thread-119726] [transport.py] [_log()] starting thread (client mode): 0xa517d1b0
2025-12-03T16:15:53.140 [DEBUG] [Thread-119726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:15:53.155 [DEBUG] [Thread-119726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:15:53.155 [INFO] [Thread-119726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:15:53.162 [DEBUG] [Thread-119726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:15:53.162 [DEBUG] [Thread-119726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] client lang: <none>
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] server lang: <none>
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] kex follows: False
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] Compression: none
2025-12-03T16:15:53.163 [DEBUG] [Thread-119726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:15:53.222 [DEBUG] [Thread-119726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:15:53.222 [DEBUG] [Thread-119726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:15:53.223 [DEBUG] [Thread-119726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:15:53.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:15:53.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:15:53.278 [DEBUG] [Thread-119726] [transport.py] [_log()] userauth is OK
2025-12-03T16:15:53.278 [DEBUG] [Thread-119726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:15:53.278 [DEBUG] [Thread-119726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:15:53.278 [DEBUG] [Thread-119726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:15:53.278 [DEBUG] [Thread-119726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:15:53.297 [INFO] [Thread-119726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:15:53.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:15:53.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:15:54.097 [DEBUG] [Thread-119726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:15:54.098 [DEBUG] [Thread-119726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:15:54.146 [DEBUG] [Thread-119726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:15:54.146 [DEBUG] [Thread-119726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:15:54.155 [DEBUG] [Thread-119726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:15:54.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:15:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:15:54.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:15:54.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:15:54.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:15:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:15:54.199 [DEBUG] [Thread-119726] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:15:55.049 [DEBUG] [Thread-119728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:06.038 [DEBUG] [Thread-119729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:21.094 [DEBUG] [Thread-119730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:24.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:16:24.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:16:24.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:16:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 16, 8), 24.91, 18.51, 0.0, 18.67, 22.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:16:24.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:16:08
2025-12-03T16:16:25.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:16:25.164 [DEBUG] [Thread-119731] [transport.py] [_log()] starting thread (client mode): 0xa517e650
2025-12-03T16:16:25.164 [DEBUG] [Thread-119731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:16:25.184 [DEBUG] [Thread-119731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:16:25.184 [INFO] [Thread-119731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:16:25.187 [DEBUG] [Thread-119731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] client lang: <none>
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] server lang: <none>
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] kex follows: False
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] Compression: none
2025-12-03T16:16:25.188 [DEBUG] [Thread-119731] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:16:25.205 [DEBUG] [Thread-119731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:16:25.205 [DEBUG] [Thread-119731] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:16:25.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:16:25.206 [DEBUG] [Thread-119731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:16:25.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:16:25.208 [DEBUG] [Thread-119731] [transport.py] [_log()] userauth is OK
2025-12-03T16:16:25.209 [DEBUG] [Thread-119731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:16:25.209 [DEBUG] [Thread-119731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:16:25.209 [DEBUG] [Thread-119731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:16:25.209 [DEBUG] [Thread-119731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:16:25.233 [INFO] [Thread-119731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:16:25.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:16:25.878 [DEBUG] [Thread-119731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:16:25.878 [DEBUG] [Thread-119731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:16:25.879 [DEBUG] [Thread-119731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:16:25.919 [DEBUG] [Thread-119731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:16:25.919 [DEBUG] [Thread-119731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:16:25.922 [DEBUG] [Thread-119731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:16:25.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:16:25.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:16:25.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:16:25.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:16:25.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:16:25.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:16:25.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:16:25.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:16:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:16:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.594493 -999.00  +21.80  11.64     24   +0.40 1 1 1 1 1   888    0 21.57 -3.96 ----- 11.6 11.6 182.6 17.9 27.7 -30.6 27.4 -32.9 29.1 -28.1 29.8 -30.1
2025-12-03T16:16:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:16:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:16:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.594493
2025-12-03T16:16:25.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:16:25.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:16:25.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:16:25.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:16:25.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:16:25.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:16:08', tmtdew=24.91, humidity=18.51, cloud=0.0, wind=18.67, temperature=22.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:16:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:16:25.951 [DEBUG] [Thread-119731] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:16:26.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:16:26.047 [DEBUG] [Thread-119734] [transport.py] [_log()] starting thread (client mode): 0xa27798a0
2025-12-03T16:16:26.047 [DEBUG] [Thread-119734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:16:26.062 [DEBUG] [Thread-119734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:16:26.062 [INFO] [Thread-119734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] client lang: <none>
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] server lang: <none>
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] kex follows: False
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:16:26.070 [DEBUG] [Thread-119734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:16:26.071 [DEBUG] [Thread-119734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:16:26.071 [DEBUG] [Thread-119734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:16:26.071 [DEBUG] [Thread-119734] [transport.py] [_log()] Compression: none
2025-12-03T16:16:26.071 [DEBUG] [Thread-119734] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:16:26.128 [DEBUG] [Thread-119734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:16:26.129 [DEBUG] [Thread-119734] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:16:26.129 [DEBUG] [Thread-119734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:16:26.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:16:26.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:16:26.186 [DEBUG] [Thread-119734] [transport.py] [_log()] userauth is OK
2025-12-03T16:16:26.186 [DEBUG] [Thread-119734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:16:26.186 [DEBUG] [Thread-119734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:16:26.186 [DEBUG] [Thread-119734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:16:26.186 [DEBUG] [Thread-119734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:16:26.205 [INFO] [Thread-119734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:16:26.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:16:26.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:16:27.124 [DEBUG] [Thread-119734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:16:27.124 [DEBUG] [Thread-119734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:16:27.172 [DEBUG] [Thread-119734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:16:27.172 [DEBUG] [Thread-119734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:16:27.181 [DEBUG] [Thread-119734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:16:27.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:16:27.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:16:27.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:16:27.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:16:27.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:16:27.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:16:27.218 [DEBUG] [Thread-119734] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:16:35.585 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:35.586 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:36.124 [DEBUG] [Thread-119736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:51.176 [DEBUG] [Thread-119737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:55.090 [DEBUG] [Thread-119738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:16:57.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:16:57.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:16:57.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:16:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 16, 40), 25.07, 18.59, 0.0, 15.62, 22.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:16:57.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:16:40
2025-12-03T16:16:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:16:58.230 [DEBUG] [Thread-119739] [transport.py] [_log()] starting thread (client mode): 0xa517d8a0
2025-12-03T16:16:58.231 [DEBUG] [Thread-119739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:16:58.253 [DEBUG] [Thread-119739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:16:58.253 [INFO] [Thread-119739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] client lang: <none>
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] server lang: <none>
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] kex follows: False
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] Compression: none
2025-12-03T16:16:58.256 [DEBUG] [Thread-119739] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:16:58.272 [DEBUG] [Thread-119739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:16:58.272 [DEBUG] [Thread-119739] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:16:58.272 [DEBUG] [Thread-119739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:16:58.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:16:58.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:16:58.273 [DEBUG] [Thread-119739] [transport.py] [_log()] userauth is OK
2025-12-03T16:16:58.273 [DEBUG] [Thread-119739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:16:58.273 [DEBUG] [Thread-119739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:16:58.273 [DEBUG] [Thread-119739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:16:58.273 [DEBUG] [Thread-119739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:16:58.283 [INFO] [Thread-119739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:16:58.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:16:58.921 [DEBUG] [Thread-119739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:16:58.921 [DEBUG] [Thread-119739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:16:58.921 [DEBUG] [Thread-119739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:16:58.963 [DEBUG] [Thread-119739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:16:58.963 [DEBUG] [Thread-119739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:16:58.965 [DEBUG] [Thread-119739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:16:58.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:16:58.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:16:58.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:16:58.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:16:58.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:16:58.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:16:58.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.594840 -999.00  +21.70  18.77     24   +0.60 1 1 1 1 1   888    0 21.16 -4.24 ----- 18.8 18.8 154.8 24.5 27.7 -29.9 27.5 -28.9 29.2 -27.9 29.8 -29.6
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.594840
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:16:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:16:40', tmtdew=25.07, humidity=18.59, cloud=0.0, wind=15.62, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:16:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:16:58.985 [DEBUG] [Thread-119739] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:16:59.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:16:59.070 [DEBUG] [Thread-119742] [transport.py] [_log()] starting thread (client mode): 0xa2728280
2025-12-03T16:16:59.070 [DEBUG] [Thread-119742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:16:59.085 [DEBUG] [Thread-119742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:16:59.085 [INFO] [Thread-119742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:16:59.092 [DEBUG] [Thread-119742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] client lang: <none>
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] server lang: <none>
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] kex follows: False
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] Compression: none
2025-12-03T16:16:59.093 [DEBUG] [Thread-119742] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:16:59.151 [DEBUG] [Thread-119742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:16:59.151 [DEBUG] [Thread-119742] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:16:59.151 [DEBUG] [Thread-119742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:16:59.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:16:59.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:16:59.208 [DEBUG] [Thread-119742] [transport.py] [_log()] userauth is OK
2025-12-03T16:16:59.208 [DEBUG] [Thread-119742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:16:59.208 [DEBUG] [Thread-119742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:16:59.208 [DEBUG] [Thread-119742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:16:59.208 [DEBUG] [Thread-119742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:16:59.222 [INFO] [Thread-119742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:16:59.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:16:59.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:17:00.030 [DEBUG] [Thread-119742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:17:00.031 [DEBUG] [Thread-119742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:17:00.078 [DEBUG] [Thread-119742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:17:00.078 [DEBUG] [Thread-119742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:17:00.086 [DEBUG] [Thread-119742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:17:00.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:17:00.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:17:00.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:17:00.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:17:00.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:17:00.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:17:00.118 [DEBUG] [Thread-119742] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:17:06.207 [DEBUG] [Thread-119744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:21.266 [DEBUG] [Thread-119745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:17:30.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:17:30.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:17:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 17, 12), 24.87, 18.8, 0.0, 16.9, 22.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:17:30.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:17:12
2025-12-03T16:17:30.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:17:31.064 [DEBUG] [Thread-119746] [transport.py] [_log()] starting thread (client mode): 0xa272bfd0
2025-12-03T16:17:31.064 [DEBUG] [Thread-119746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:17:31.085 [DEBUG] [Thread-119746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:17:31.085 [INFO] [Thread-119746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:17:31.088 [DEBUG] [Thread-119746] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:17:31.088 [DEBUG] [Thread-119746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] client lang: <none>
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] server lang: <none>
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] kex follows: False
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] Compression: none
2025-12-03T16:17:31.089 [DEBUG] [Thread-119746] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:17:31.107 [DEBUG] [Thread-119746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:17:31.108 [DEBUG] [Thread-119746] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:17:31.108 [DEBUG] [Thread-119746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:17:31.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:17:31.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:17:31.110 [DEBUG] [Thread-119746] [transport.py] [_log()] userauth is OK
2025-12-03T16:17:31.111 [DEBUG] [Thread-119746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:17:31.111 [DEBUG] [Thread-119746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:17:31.111 [DEBUG] [Thread-119746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:17:31.111 [DEBUG] [Thread-119746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:17:31.132 [INFO] [Thread-119746] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:17:31.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:17:31.766 [DEBUG] [Thread-119746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:17:31.767 [DEBUG] [Thread-119746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:17:31.767 [DEBUG] [Thread-119746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:17:31.807 [DEBUG] [Thread-119746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:17:31.807 [DEBUG] [Thread-119746] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:17:31.811 [DEBUG] [Thread-119746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:17:31.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:17:31.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:17:31.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:17:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:17:31.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:17:31.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:17:31.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:17:31.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:17:31.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:17:31.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.595187 -999.00  +21.70  21.48     24   +0.60 1 1 1 1 1   888    0 20.89 -4.61 ----- 21.5 21.5 203.4 26.4 27.7 -29.9 27.3 -29.8 29.3 -27.2 29.9 -28.2
2025-12-03T16:17:31.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:17:31.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:17:31.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.595187
2025-12-03T16:17:31.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:17:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:17:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:17:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:17:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:17:31.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:17:12', tmtdew=24.87, humidity=18.8, cloud=0.0, wind=16.9, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:17:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:17:31.837 [DEBUG] [Thread-119746] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:17:31.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:17:31.948 [DEBUG] [Thread-119749] [transport.py] [_log()] starting thread (client mode): 0xa517d390
2025-12-03T16:17:31.948 [DEBUG] [Thread-119749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:17:31.964 [DEBUG] [Thread-119749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:17:31.964 [INFO] [Thread-119749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:17:31.971 [DEBUG] [Thread-119749] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:17:31.971 [DEBUG] [Thread-119749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] client lang: <none>
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] server lang: <none>
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] kex follows: False
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] Compression: none
2025-12-03T16:17:31.972 [DEBUG] [Thread-119749] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:17:32.032 [DEBUG] [Thread-119749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:17:32.033 [DEBUG] [Thread-119749] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:17:32.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:17:32.034 [DEBUG] [Thread-119749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:17:32.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:17:32.089 [DEBUG] [Thread-119749] [transport.py] [_log()] userauth is OK
2025-12-03T16:17:32.089 [DEBUG] [Thread-119749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:17:32.089 [DEBUG] [Thread-119749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:17:32.090 [DEBUG] [Thread-119749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:17:32.090 [DEBUG] [Thread-119749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:17:32.108 [INFO] [Thread-119749] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:17:32.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:17:32.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:17:32.958 [DEBUG] [Thread-119749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:17:32.959 [DEBUG] [Thread-119749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:17:33.006 [DEBUG] [Thread-119749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:17:33.006 [DEBUG] [Thread-119749] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:17:33.015 [DEBUG] [Thread-119749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:17:33.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:17:33.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:17:33.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:17:33.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:17:33.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:17:33.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:17:33.052 [DEBUG] [Thread-119749] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:17:35.725 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:35.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:36.299 [DEBUG] [Thread-119751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:51.343 [DEBUG] [Thread-119752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:17:55.123 [DEBUG] [Thread-119753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:03.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:18:03.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:18:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:18:03.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 17, 46), 24.75, 18.9, 0.0, 20.5, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:18:03.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:17:46
2025-12-03T16:18:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:18:04.020 [DEBUG] [Thread-119754] [transport.py] [_log()] starting thread (client mode): 0xa51d0160
2025-12-03T16:18:04.020 [DEBUG] [Thread-119754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:18:04.041 [DEBUG] [Thread-119754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:18:04.041 [INFO] [Thread-119754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:18:04.044 [DEBUG] [Thread-119754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] client lang: <none>
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] server lang: <none>
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] kex follows: False
2025-12-03T16:18:04.045 [DEBUG] [Thread-119754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] Compression: none
2025-12-03T16:18:04.046 [DEBUG] [Thread-119754] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:18:04.064 [DEBUG] [Thread-119754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:18:04.065 [DEBUG] [Thread-119754] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:18:04.066 [DEBUG] [Thread-119754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:18:04.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:18:04.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:18:04.068 [DEBUG] [Thread-119754] [transport.py] [_log()] userauth is OK
2025-12-03T16:18:04.068 [DEBUG] [Thread-119754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:18:04.068 [DEBUG] [Thread-119754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:18:04.068 [DEBUG] [Thread-119754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:18:04.068 [DEBUG] [Thread-119754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:18:04.092 [INFO] [Thread-119754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:18:04.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:18:04.708 [DEBUG] [Thread-119754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:18:04.709 [DEBUG] [Thread-119754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:18:04.709 [DEBUG] [Thread-119754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:18:04.750 [DEBUG] [Thread-119754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:18:04.750 [DEBUG] [Thread-119754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:18:04.754 [DEBUG] [Thread-119754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:18:04.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:18:04.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:18:04.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:18:04.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:18:04.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:18:04.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:18:04.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:18:04.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.595534 -999.00  +21.80  16.68     24   +0.60 1 1 1 1 1   888    0 20.75 -4.42 ----- 16.7 16.7 195.4 23.5 27.7 -30.4 27.2 -33.4 29.1 -28.4 29.7 -31.1
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.595534
2025-12-03T16:18:04.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:18:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:18:04.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:18:04.779 [DEBUG] [Thread-119754] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:18:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:18:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:18:04.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:17:46', tmtdew=24.75, humidity=18.9, cloud=0.0, wind=20.5, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:17:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:18:04.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:18:04.875 [DEBUG] [Thread-119757] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T16:18:04.875 [DEBUG] [Thread-119757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:18:04.889 [DEBUG] [Thread-119757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:18:04.889 [INFO] [Thread-119757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:18:04.896 [DEBUG] [Thread-119757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:18:04.896 [DEBUG] [Thread-119757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:18:04.896 [DEBUG] [Thread-119757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:18:04.896 [DEBUG] [Thread-119757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] client lang: <none>
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] server lang: <none>
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] kex follows: False
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] Compression: none
2025-12-03T16:18:04.897 [DEBUG] [Thread-119757] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:18:04.956 [DEBUG] [Thread-119757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:18:04.956 [DEBUG] [Thread-119757] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:18:04.957 [DEBUG] [Thread-119757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:18:04.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:18:04.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:18:05.013 [DEBUG] [Thread-119757] [transport.py] [_log()] userauth is OK
2025-12-03T16:18:05.014 [DEBUG] [Thread-119757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:18:05.014 [DEBUG] [Thread-119757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:18:05.014 [DEBUG] [Thread-119757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:18:05.014 [DEBUG] [Thread-119757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:18:05.033 [INFO] [Thread-119757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:18:05.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:18:05.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:18:05.891 [DEBUG] [Thread-119757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:18:05.892 [DEBUG] [Thread-119757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:18:05.939 [DEBUG] [Thread-119757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:18:05.939 [DEBUG] [Thread-119757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:18:05.949 [DEBUG] [Thread-119757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:18:05.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:18:05.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:18:05.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:18:05.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:18:05.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:18:05.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:18:05.994 [DEBUG] [Thread-119757] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:18:06.379 [DEBUG] [Thread-119759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:21.426 [DEBUG] [Thread-119760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:35.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:35.868 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:35.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:18:35.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:18:35.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:18:36.461 [DEBUG] [Thread-119761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 18, 18), 24.62, 19.05, 0.0, 18.72, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:18:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:18:18
2025-12-03T16:18:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:18:36.944 [DEBUG] [Thread-119762] [transport.py] [_log()] starting thread (client mode): 0xa27c9120
2025-12-03T16:18:36.944 [DEBUG] [Thread-119762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:18:36.965 [DEBUG] [Thread-119762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:18:36.965 [INFO] [Thread-119762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:18:36.968 [DEBUG] [Thread-119762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:18:36.968 [DEBUG] [Thread-119762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] client lang: <none>
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] server lang: <none>
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] kex follows: False
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] Compression: none
2025-12-03T16:18:36.969 [DEBUG] [Thread-119762] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:18:36.989 [DEBUG] [Thread-119762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:18:36.989 [DEBUG] [Thread-119762] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:18:36.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:18:36.990 [DEBUG] [Thread-119762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:18:36.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:18:36.993 [DEBUG] [Thread-119762] [transport.py] [_log()] userauth is OK
2025-12-03T16:18:36.993 [DEBUG] [Thread-119762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:18:36.993 [DEBUG] [Thread-119762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:18:36.993 [DEBUG] [Thread-119762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:18:36.993 [DEBUG] [Thread-119762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:18:37.014 [INFO] [Thread-119762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:18:37.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:18:37.687 [DEBUG] [Thread-119762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:18:37.688 [DEBUG] [Thread-119762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:18:37.688 [DEBUG] [Thread-119762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:18:37.728 [DEBUG] [Thread-119762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:18:37.729 [DEBUG] [Thread-119762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:18:37.732 [DEBUG] [Thread-119762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:18:37.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:18:37.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:18:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:18:37.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:18:37.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:18:37.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:18:37.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:18:37.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:18:37.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:18:37.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.595882 -999.00  +21.70  15.32     24   +0.50 1 1 1 1 1   888    0 21.43 -4.14 ----- 15.3 15.3 180.0 24.7 27.6 -29.7 27.1 -35.5 29.0 -28.5 29.6 -31.3
2025-12-03T16:18:37.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:18:37.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:18:37.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.595882
2025-12-03T16:18:37.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:18:37.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:18:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:18:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:18:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:18:37.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:18:18', tmtdew=24.62, humidity=19.05, cloud=0.0, wind=18.72, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:18:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:18:37.759 [DEBUG] [Thread-119762] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:18:37.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:18:37.855 [DEBUG] [Thread-119765] [transport.py] [_log()] starting thread (client mode): 0xa2779c90
2025-12-03T16:18:37.855 [DEBUG] [Thread-119765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:18:37.870 [DEBUG] [Thread-119765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:18:37.870 [INFO] [Thread-119765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:18:37.877 [DEBUG] [Thread-119765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:18:37.877 [DEBUG] [Thread-119765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:18:37.877 [DEBUG] [Thread-119765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:18:37.877 [DEBUG] [Thread-119765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:37.877 [DEBUG] [Thread-119765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] client lang: <none>
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] server lang: <none>
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] kex follows: False
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] Compression: none
2025-12-03T16:18:37.878 [DEBUG] [Thread-119765] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:18:37.935 [DEBUG] [Thread-119765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:18:37.936 [DEBUG] [Thread-119765] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:18:37.937 [DEBUG] [Thread-119765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:18:37.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:18:37.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:18:37.991 [DEBUG] [Thread-119765] [transport.py] [_log()] userauth is OK
2025-12-03T16:18:37.992 [DEBUG] [Thread-119765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:18:37.992 [DEBUG] [Thread-119765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:18:37.992 [DEBUG] [Thread-119765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:18:37.992 [DEBUG] [Thread-119765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:18:38.011 [INFO] [Thread-119765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:18:38.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:18:38.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:18:38.856 [DEBUG] [Thread-119765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:18:38.857 [DEBUG] [Thread-119765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:18:38.905 [DEBUG] [Thread-119765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:18:38.905 [DEBUG] [Thread-119765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:18:38.914 [DEBUG] [Thread-119765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:18:38.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:18:38.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:18:38.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:18:38.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:18:38.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:18:38.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:18:38.949 [DEBUG] [Thread-119765] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:18:51.489 [DEBUG] [Thread-119767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:18:55.157 [DEBUG] [Thread-119768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:06.528 [DEBUG] [Thread-119769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:19:08.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:19:08.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:19:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 18, 50), 24.53, 19.05, 0.0, 22.23, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:19:09.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:18:50
2025-12-03T16:19:09.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:19:09.914 [DEBUG] [Thread-119770] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T16:19:09.914 [DEBUG] [Thread-119770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:19:09.936 [DEBUG] [Thread-119770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:19:09.936 [INFO] [Thread-119770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] client lang: <none>
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] server lang: <none>
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] kex follows: False
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] Compression: none
2025-12-03T16:19:09.939 [DEBUG] [Thread-119770] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:19:09.957 [DEBUG] [Thread-119770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:19:09.957 [DEBUG] [Thread-119770] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:19:09.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:19:09.958 [DEBUG] [Thread-119770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:19:09.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:19:09.960 [DEBUG] [Thread-119770] [transport.py] [_log()] userauth is OK
2025-12-03T16:19:09.960 [DEBUG] [Thread-119770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:19:09.961 [DEBUG] [Thread-119770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:19:09.961 [DEBUG] [Thread-119770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:19:09.961 [DEBUG] [Thread-119770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:19:09.985 [INFO] [Thread-119770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:19:09.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:19:10.593 [DEBUG] [Thread-119770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:19:10.594 [DEBUG] [Thread-119770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:19:10.594 [DEBUG] [Thread-119770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:19:10.635 [DEBUG] [Thread-119770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:19:10.635 [DEBUG] [Thread-119770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:19:10.638 [DEBUG] [Thread-119770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:19:10.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:19:10.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:19:10.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:19:10.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:19:10.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:19:10.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:19:10.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:19:10.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:19:10.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:19:10.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.596229 -999.00  +21.80  16.93     24   +0.50 1 1 1 1 1   888    0 21.52 -5.50 ----- 16.9 16.9 190.0 23.3 27.5 -30.1 27.0 -32.9 28.9 -29.6 29.4 -32.8
2025-12-03T16:19:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:19:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:19:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.596229
2025-12-03T16:19:10.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:19:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:19:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:19:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:19:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:19:10.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:18:50', tmtdew=24.53, humidity=19.05, cloud=0.0, wind=22.23, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:18:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:19:10.662 [DEBUG] [Thread-119770] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:19:10.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:19:10.754 [DEBUG] [Thread-119773] [transport.py] [_log()] starting thread (client mode): 0xa51d2500
2025-12-03T16:19:10.754 [DEBUG] [Thread-119773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:19:10.770 [DEBUG] [Thread-119773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:19:10.770 [INFO] [Thread-119773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:19:10.780 [DEBUG] [Thread-119773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:19:10.781 [DEBUG] [Thread-119773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:19:10.781 [DEBUG] [Thread-119773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:19:10.781 [DEBUG] [Thread-119773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:10.781 [DEBUG] [Thread-119773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:10.781 [DEBUG] [Thread-119773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] client lang: <none>
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] server lang: <none>
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] kex follows: False
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] Compression: none
2025-12-03T16:19:10.782 [DEBUG] [Thread-119773] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:19:10.840 [DEBUG] [Thread-119773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:19:10.841 [DEBUG] [Thread-119773] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:19:10.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:19:10.842 [DEBUG] [Thread-119773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:19:10.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:19:10.906 [DEBUG] [Thread-119773] [transport.py] [_log()] userauth is OK
2025-12-03T16:19:10.907 [DEBUG] [Thread-119773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:19:10.907 [DEBUG] [Thread-119773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:19:10.907 [DEBUG] [Thread-119773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:19:10.907 [DEBUG] [Thread-119773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:19:10.930 [INFO] [Thread-119773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:19:10.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:19:10.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:19:11.725 [DEBUG] [Thread-119773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:19:11.725 [DEBUG] [Thread-119773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:19:11.773 [DEBUG] [Thread-119773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:19:11.773 [DEBUG] [Thread-119773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:19:11.783 [DEBUG] [Thread-119773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:19:11.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:19:11.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:19:11.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:19:11.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:19:11.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:19:11.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:19:11.819 [DEBUG] [Thread-119773] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:19:21.564 [DEBUG] [Thread-119775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:36.006 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:36.007 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:36.621 [DEBUG] [Thread-119776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:41.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:19:41.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:19:41.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:19:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 19, 22), 24.54, 19.04, 0.0, 22.73, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:19:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:19:22
2025-12-03T16:19:42.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:19:42.775 [DEBUG] [Thread-119777] [transport.py] [_log()] starting thread (client mode): 0xa2753580
2025-12-03T16:19:42.775 [DEBUG] [Thread-119777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:19:42.795 [DEBUG] [Thread-119777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:19:42.796 [INFO] [Thread-119777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:19:42.799 [DEBUG] [Thread-119777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] client lang: <none>
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] server lang: <none>
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] kex follows: False
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] Compression: none
2025-12-03T16:19:42.800 [DEBUG] [Thread-119777] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:19:42.818 [DEBUG] [Thread-119777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:19:42.818 [DEBUG] [Thread-119777] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:19:42.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:19:42.819 [DEBUG] [Thread-119777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:19:42.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:19:42.822 [DEBUG] [Thread-119777] [transport.py] [_log()] userauth is OK
2025-12-03T16:19:42.822 [DEBUG] [Thread-119777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:19:42.822 [DEBUG] [Thread-119777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:19:42.822 [DEBUG] [Thread-119777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:19:42.822 [DEBUG] [Thread-119777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:19:42.845 [INFO] [Thread-119777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:19:42.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:19:43.487 [DEBUG] [Thread-119777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:19:43.487 [DEBUG] [Thread-119777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:19:43.487 [DEBUG] [Thread-119777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:19:43.528 [DEBUG] [Thread-119777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:19:43.528 [DEBUG] [Thread-119777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:19:43.532 [DEBUG] [Thread-119777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:19:43.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:19:43.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:19:43.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:19:43.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:19:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:19:43.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:19:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:19:43.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:19:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:19:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.596576 -999.00  +21.50  13.66     24   +0.40 1 1 1 1 1   888    0 21.39 -6.66 ----- 13.7 13.7 191.6 18.6 27.4 -30.4 27.1 -28.9 29.1 -26.8 29.6 -28.3
2025-12-03T16:19:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:19:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:19:43.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.596576
2025-12-03T16:19:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:19:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:19:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:19:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:19:43.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:19:43.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:19:22', tmtdew=24.54, humidity=19.04, cloud=0.0, wind=22.73, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:19:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:19:43.559 [DEBUG] [Thread-119777] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:19:43.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:19:43.653 [DEBUG] [Thread-119780] [transport.py] [_log()] starting thread (client mode): 0xa517eef0
2025-12-03T16:19:43.654 [DEBUG] [Thread-119780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:19:43.668 [DEBUG] [Thread-119780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:19:43.668 [INFO] [Thread-119780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:19:43.675 [DEBUG] [Thread-119780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:19:43.675 [DEBUG] [Thread-119780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:19:43.675 [DEBUG] [Thread-119780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] client lang: <none>
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] server lang: <none>
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] kex follows: False
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] Compression: none
2025-12-03T16:19:43.676 [DEBUG] [Thread-119780] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:19:43.735 [DEBUG] [Thread-119780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:19:43.736 [DEBUG] [Thread-119780] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:19:43.736 [DEBUG] [Thread-119780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:19:43.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:19:43.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:19:43.791 [DEBUG] [Thread-119780] [transport.py] [_log()] userauth is OK
2025-12-03T16:19:43.791 [DEBUG] [Thread-119780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:19:43.792 [DEBUG] [Thread-119780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:19:43.792 [DEBUG] [Thread-119780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:19:43.792 [DEBUG] [Thread-119780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:19:43.810 [INFO] [Thread-119780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:19:43.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:19:43.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:19:44.620 [DEBUG] [Thread-119780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:19:44.620 [DEBUG] [Thread-119780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:19:44.668 [DEBUG] [Thread-119780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:19:44.668 [DEBUG] [Thread-119780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:19:44.677 [DEBUG] [Thread-119780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:19:44.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:19:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:19:44.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:19:44.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:19:44.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:19:44.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:19:44.714 [DEBUG] [Thread-119780] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:19:51.650 [DEBUG] [Thread-119782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:19:55.191 [DEBUG] [Thread-119783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:06.700 [DEBUG] [Thread-119784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:20:14.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:20:14.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:20:15.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 19, 55), 24.54, 18.89, 0.0, 19.43, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:20:15.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:19:55
2025-12-03T16:20:15.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:20:15.740 [DEBUG] [Thread-119785] [transport.py] [_log()] starting thread (client mode): 0xa2779870
2025-12-03T16:20:15.740 [DEBUG] [Thread-119785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:20:15.761 [DEBUG] [Thread-119785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:20:15.761 [INFO] [Thread-119785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] client lang: <none>
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] server lang: <none>
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] kex follows: False
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] Compression: none
2025-12-03T16:20:15.765 [DEBUG] [Thread-119785] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:20:15.781 [DEBUG] [Thread-119785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:20:15.781 [DEBUG] [Thread-119785] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:20:15.781 [DEBUG] [Thread-119785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:20:15.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:20:15.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:20:15.782 [DEBUG] [Thread-119785] [transport.py] [_log()] userauth is OK
2025-12-03T16:20:15.782 [DEBUG] [Thread-119785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:20:15.783 [DEBUG] [Thread-119785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:20:15.783 [DEBUG] [Thread-119785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:20:15.783 [DEBUG] [Thread-119785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:20:15.795 [INFO] [Thread-119785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:20:15.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:20:16.418 [DEBUG] [Thread-119785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:20:16.418 [DEBUG] [Thread-119785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:20:16.418 [DEBUG] [Thread-119785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:20:16.459 [DEBUG] [Thread-119785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:20:16.460 [DEBUG] [Thread-119785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:20:16.462 [DEBUG] [Thread-119785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:20:16.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:20:16.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:20:16.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:20:16.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:20:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:20:16.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:20:16.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:20:16.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:20:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:20:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.597270 -999.00  +22.00  14.36     24   +0.70 1 1 1 1 1   888    0 21.20 -9.02 ----- 14.4 14.4 165.4 18.3 27.7 -29.6 27.4 -28.9 29.3 -27.5 29.8 -29.6
2025-12-03T16:20:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:20:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:20:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.597270
2025-12-03T16:20:16.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:20:16.483 [DEBUG] [Thread-119785] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:20:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:20:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:20:16.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:20:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:20:16.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:19:55', tmtdew=24.54, humidity=18.89, cloud=0.0, wind=19.43, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:20:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:20:16.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:20:16.585 [DEBUG] [Thread-119788] [transport.py] [_log()] starting thread (client mode): 0xa27472e0
2025-12-03T16:20:16.585 [DEBUG] [Thread-119788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:20:16.600 [DEBUG] [Thread-119788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:20:16.600 [INFO] [Thread-119788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:20:16.609 [DEBUG] [Thread-119788] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:20:16.610 [DEBUG] [Thread-119788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] client lang: <none>
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] server lang: <none>
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] kex follows: False
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:20:16.611 [DEBUG] [Thread-119788] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:20:16.612 [DEBUG] [Thread-119788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:20:16.612 [DEBUG] [Thread-119788] [transport.py] [_log()] Compression: none
2025-12-03T16:20:16.612 [DEBUG] [Thread-119788] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:20:16.667 [DEBUG] [Thread-119788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:20:16.667 [DEBUG] [Thread-119788] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:20:16.668 [DEBUG] [Thread-119788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:20:16.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:20:16.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:20:16.722 [DEBUG] [Thread-119788] [transport.py] [_log()] userauth is OK
2025-12-03T16:20:16.723 [DEBUG] [Thread-119788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:20:16.723 [DEBUG] [Thread-119788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:20:16.723 [DEBUG] [Thread-119788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:20:16.723 [DEBUG] [Thread-119788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:20:16.741 [INFO] [Thread-119788] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:20:16.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:20:16.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:20:17.644 [DEBUG] [Thread-119788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:20:17.645 [DEBUG] [Thread-119788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:20:17.697 [DEBUG] [Thread-119788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:20:17.697 [DEBUG] [Thread-119788] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:20:17.706 [DEBUG] [Thread-119788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:20:17.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:20:17.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:20:17.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:20:17.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:20:17.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:20:17.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:20:17.748 [DEBUG] [Thread-119788] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:20:21.733 [DEBUG] [Thread-119790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:36.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:36.150 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:36.780 [DEBUG] [Thread-119791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:47.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:20:47.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:20:47.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:20:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 20, 27), 24.36, 19.09, 0.0, 17.93, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:20:48.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:20:27
2025-12-03T16:20:48.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:20:48.728 [DEBUG] [Thread-119792] [transport.py] [_log()] starting thread (client mode): 0xa2751210
2025-12-03T16:20:48.728 [DEBUG] [Thread-119792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:20:48.747 [DEBUG] [Thread-119792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:20:48.747 [INFO] [Thread-119792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:20:48.759 [DEBUG] [Thread-119792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:48.760 [DEBUG] [Thread-119792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] client lang: <none>
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] server lang: <none>
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] kex follows: False
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:20:48.761 [DEBUG] [Thread-119792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:20:48.762 [DEBUG] [Thread-119792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:20:48.762 [DEBUG] [Thread-119792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:20:48.762 [DEBUG] [Thread-119792] [transport.py] [_log()] Compression: none
2025-12-03T16:20:48.762 [DEBUG] [Thread-119792] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:20:48.776 [DEBUG] [Thread-119792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:20:48.776 [DEBUG] [Thread-119792] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:20:48.777 [DEBUG] [Thread-119792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:20:48.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:20:48.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:20:48.779 [DEBUG] [Thread-119792] [transport.py] [_log()] userauth is OK
2025-12-03T16:20:48.779 [DEBUG] [Thread-119792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:20:48.779 [DEBUG] [Thread-119792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:20:48.779 [DEBUG] [Thread-119792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:20:48.779 [DEBUG] [Thread-119792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:20:48.809 [INFO] [Thread-119792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:20:48.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:20:49.451 [DEBUG] [Thread-119792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:20:49.451 [DEBUG] [Thread-119792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:20:49.451 [DEBUG] [Thread-119792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:20:49.492 [DEBUG] [Thread-119792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:20:49.492 [DEBUG] [Thread-119792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:20:49.494 [DEBUG] [Thread-119792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:20:49.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:20:49.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:20:49.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:20:49.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:20:49.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:20:49.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:20:49.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:20:49.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.597618 -999.00  +21.90  15.10     24   +0.50 1 1 1 1 1   888    0 21.37 -7.26 ----- 15.1 15.1 148.4 21.5 27.7 -30.5 27.5 -29.3 29.3 -28.1 29.8 -29.8
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.597618
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:20:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:20:27', tmtdew=24.36, humidity=19.09, cloud=0.0, wind=17.93, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:20:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:20:49.512 [DEBUG] [Thread-119792] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:20:49.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:20:49.597 [DEBUG] [Thread-119795] [transport.py] [_log()] starting thread (client mode): 0xa2760be0
2025-12-03T16:20:49.597 [DEBUG] [Thread-119795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:20:49.612 [DEBUG] [Thread-119795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:20:49.612 [INFO] [Thread-119795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] client lang: <none>
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] server lang: <none>
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] kex follows: False
2025-12-03T16:20:49.619 [DEBUG] [Thread-119795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] Compression: none
2025-12-03T16:20:49.620 [DEBUG] [Thread-119795] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:20:49.677 [DEBUG] [Thread-119795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:20:49.677 [DEBUG] [Thread-119795] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:20:49.677 [DEBUG] [Thread-119795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:20:49.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:20:49.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:20:49.733 [DEBUG] [Thread-119795] [transport.py] [_log()] userauth is OK
2025-12-03T16:20:49.733 [DEBUG] [Thread-119795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:20:49.734 [DEBUG] [Thread-119795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:20:49.734 [DEBUG] [Thread-119795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:20:49.734 [DEBUG] [Thread-119795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:20:49.747 [INFO] [Thread-119795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:20:49.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:20:49.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:20:50.669 [DEBUG] [Thread-119795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:20:50.669 [DEBUG] [Thread-119795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:20:50.717 [DEBUG] [Thread-119795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:20:50.717 [DEBUG] [Thread-119795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:20:50.726 [DEBUG] [Thread-119795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:20:50.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:20:50.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:20:50.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:20:50.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:20:50.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:20:50.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:20:50.758 [DEBUG] [Thread-119795] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:20:51.816 [DEBUG] [Thread-119797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:20:55.231 [DEBUG] [Thread-119798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:06.857 [DEBUG] [Thread-119799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:21:20.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:21:20.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:21:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 20, 59), 24.44, 19.28, 0.0, 20.03, 21.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:21:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:20:59
2025-12-03T16:21:21.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:21:21.742 [DEBUG] [Thread-119800] [transport.py] [_log()] starting thread (client mode): 0xa2760970
2025-12-03T16:21:21.742 [DEBUG] [Thread-119800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:21:21.762 [DEBUG] [Thread-119800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:21:21.762 [INFO] [Thread-119800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:21:21.765 [DEBUG] [Thread-119800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:21:21.765 [DEBUG] [Thread-119800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] client lang: <none>
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] server lang: <none>
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] kex follows: False
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] Compression: none
2025-12-03T16:21:21.766 [DEBUG] [Thread-119800] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:21:21.783 [DEBUG] [Thread-119800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:21:21.784 [DEBUG] [Thread-119800] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:21:21.784 [DEBUG] [Thread-119800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:21:21.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:21:21.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:21:21.785 [DEBUG] [Thread-119800] [transport.py] [_log()] userauth is OK
2025-12-03T16:21:21.785 [DEBUG] [Thread-119800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:21:21.785 [DEBUG] [Thread-119800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:21:21.785 [DEBUG] [Thread-119800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:21:21.785 [DEBUG] [Thread-119800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:21:21.802 [INFO] [Thread-119800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:21:21.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:21:21.894 [DEBUG] [Thread-119802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:22.447 [DEBUG] [Thread-119800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:21:22.447 [DEBUG] [Thread-119800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:21:22.448 [DEBUG] [Thread-119800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:21:22.488 [DEBUG] [Thread-119800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:21:22.488 [DEBUG] [Thread-119800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:21:22.492 [DEBUG] [Thread-119800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:21:22.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:21:22.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:21:22.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:21:22.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:21:22.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:21:22.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:21:22.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:21:22.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:21:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:21:22.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.597965 -999.00  +21.80  21.37     24   +0.50 1 1 1 1 1   888    0 21.09 -5.21 ----- 21.4 21.4 145.6 25.9 27.7 -29.8 27.6 -29.8 29.3 -28.4 29.8 -30.5
2025-12-03T16:21:22.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:21:22.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:21:22.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.597965
2025-12-03T16:21:22.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:20:59', tmtdew=24.44, humidity=19.28, cloud=0.0, wind=20.03, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:21:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:21:22.518 [DEBUG] [Thread-119800] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:21:22.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:21:22.613 [DEBUG] [Thread-119804] [transport.py] [_log()] starting thread (client mode): 0xa27ca380
2025-12-03T16:21:22.613 [DEBUG] [Thread-119804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:21:22.628 [DEBUG] [Thread-119804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:21:22.628 [INFO] [Thread-119804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:22.636 [DEBUG] [Thread-119804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] client lang: <none>
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] server lang: <none>
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] kex follows: False
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] Compression: none
2025-12-03T16:21:22.637 [DEBUG] [Thread-119804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:21:22.694 [DEBUG] [Thread-119804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:21:22.694 [DEBUG] [Thread-119804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:21:22.695 [DEBUG] [Thread-119804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:21:22.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:21:22.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:21:22.749 [DEBUG] [Thread-119804] [transport.py] [_log()] userauth is OK
2025-12-03T16:21:22.750 [DEBUG] [Thread-119804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:21:22.750 [DEBUG] [Thread-119804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:21:22.750 [DEBUG] [Thread-119804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:21:22.750 [DEBUG] [Thread-119804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:21:22.774 [INFO] [Thread-119804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:21:22.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:21:22.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:21:23.611 [DEBUG] [Thread-119804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:21:23.611 [DEBUG] [Thread-119804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:21:23.659 [DEBUG] [Thread-119804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:21:23.659 [DEBUG] [Thread-119804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:21:23.668 [DEBUG] [Thread-119804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:21:23.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:21:23.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:21:23.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:21:23.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:21:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:21:23.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:21:23.705 [DEBUG] [Thread-119804] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:21:36.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:36.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:36.922 [DEBUG] [Thread-119806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:51.974 [DEBUG] [Thread-119807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:53.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:21:53.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:21:53.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:21:54.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 21, 31), 24.37, 19.4, 0.0, 20.91, 21.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:21:54.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:21:31
2025-12-03T16:21:54.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:21:54.671 [DEBUG] [Thread-119808] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T16:21:54.671 [DEBUG] [Thread-119808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:21:54.691 [DEBUG] [Thread-119808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:21:54.691 [INFO] [Thread-119808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:54.694 [DEBUG] [Thread-119808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] client lang: <none>
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] server lang: <none>
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] kex follows: False
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] Compression: none
2025-12-03T16:21:54.695 [DEBUG] [Thread-119808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:21:54.706 [DEBUG] [Thread-119808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:21:54.706 [DEBUG] [Thread-119808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:21:54.706 [DEBUG] [Thread-119808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:21:54.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:21:54.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:21:54.748 [DEBUG] [Thread-119808] [transport.py] [_log()] userauth is OK
2025-12-03T16:21:54.748 [DEBUG] [Thread-119808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:21:54.748 [DEBUG] [Thread-119808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:21:54.748 [DEBUG] [Thread-119808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:21:54.748 [DEBUG] [Thread-119808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:21:54.757 [INFO] [Thread-119808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:21:54.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:21:55.268 [DEBUG] [Thread-119810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:21:55.397 [DEBUG] [Thread-119808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:21:55.397 [DEBUG] [Thread-119808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:21:55.398 [DEBUG] [Thread-119808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:21:55.438 [DEBUG] [Thread-119808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:21:55.438 [DEBUG] [Thread-119808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:21:55.441 [DEBUG] [Thread-119808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:21:55.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:21:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:21:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:21:55.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:21:55.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:21:55.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:21:55.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.598312 -999.00  +21.70  10.25     24   +0.50 1 1 1 1 1   888    0 21.49 -4.09 ----- 10.2 10.2 154.6 20.7 27.6 -29.8 27.6 -29.7 29.2 -27.7 29.7 -29.5
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:21:55.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.598312
2025-12-03T16:21:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:21:55.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:21:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:21:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:21:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:21:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:21:31', tmtdew=24.37, humidity=19.4, cloud=0.0, wind=20.91, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:21:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:21:55.467 [DEBUG] [Thread-119808] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:21:55.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:21:55.568 [DEBUG] [Thread-119812] [transport.py] [_log()] starting thread (client mode): 0xa27c9c30
2025-12-03T16:21:55.568 [DEBUG] [Thread-119812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:21:55.583 [DEBUG] [Thread-119812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:21:55.583 [INFO] [Thread-119812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:21:55.591 [DEBUG] [Thread-119812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:21:55.591 [DEBUG] [Thread-119812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:21:55.591 [DEBUG] [Thread-119812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:21:55.592 [DEBUG] [Thread-119812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] client lang: <none>
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] server lang: <none>
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] kex follows: False
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] Compression: none
2025-12-03T16:21:55.593 [DEBUG] [Thread-119812] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:21:55.649 [DEBUG] [Thread-119812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:21:55.650 [DEBUG] [Thread-119812] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:21:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:21:55.651 [DEBUG] [Thread-119812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:21:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:21:55.706 [DEBUG] [Thread-119812] [transport.py] [_log()] userauth is OK
2025-12-03T16:21:55.706 [DEBUG] [Thread-119812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:21:55.706 [DEBUG] [Thread-119812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:21:55.706 [DEBUG] [Thread-119812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:21:55.706 [DEBUG] [Thread-119812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:21:55.731 [INFO] [Thread-119812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:21:55.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:21:55.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:21:56.559 [DEBUG] [Thread-119812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:21:56.559 [DEBUG] [Thread-119812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:21:56.607 [DEBUG] [Thread-119812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:21:56.607 [DEBUG] [Thread-119812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:21:56.617 [DEBUG] [Thread-119812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:21:56.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:21:56.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:21:56.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:21:56.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:21:56.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:21:56.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:21:56.653 [DEBUG] [Thread-119812] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:22:07.002 [DEBUG] [Thread-119814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:22.045 [DEBUG] [Thread-119815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:26.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:22:26.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:22:26.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:22:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 22, 3), 24.43, 19.33, 0.0, 18.56, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:22:27.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:22:03
2025-12-03T16:22:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:22:27.602 [DEBUG] [Thread-119816] [transport.py] [_log()] starting thread (client mode): 0xa2761ae0
2025-12-03T16:22:27.602 [DEBUG] [Thread-119816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:22:27.625 [DEBUG] [Thread-119816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:22:27.625 [INFO] [Thread-119816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] client lang: <none>
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] server lang: <none>
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] kex follows: False
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] Compression: none
2025-12-03T16:22:27.629 [DEBUG] [Thread-119816] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:22:27.647 [DEBUG] [Thread-119816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:22:27.647 [DEBUG] [Thread-119816] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:22:27.648 [DEBUG] [Thread-119816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:22:27.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:22:27.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:22:27.650 [DEBUG] [Thread-119816] [transport.py] [_log()] userauth is OK
2025-12-03T16:22:27.650 [DEBUG] [Thread-119816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:22:27.651 [DEBUG] [Thread-119816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:22:27.651 [DEBUG] [Thread-119816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:22:27.651 [DEBUG] [Thread-119816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:22:27.668 [INFO] [Thread-119816] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:22:27.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:22:28.274 [DEBUG] [Thread-119816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:22:28.274 [DEBUG] [Thread-119816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:22:28.274 [DEBUG] [Thread-119816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:22:28.315 [DEBUG] [Thread-119816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:22:28.316 [DEBUG] [Thread-119816] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:22:28.319 [DEBUG] [Thread-119816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:22:28.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:22:28.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:22:28.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:22:28.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:22:28.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:22:28.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:22:28.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:22:28.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:22:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:22:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.598659 -999.00  +21.60  19.94     24   +0.50 1 1 1 1 1   888    0 21.60 -4.81 ----- 19.9 19.9 171.0 23.2 27.6 -30.9 27.5 -31.6 29.2 -28.1 29.8 -30.0
2025-12-03T16:22:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:22:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:22:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.598659
2025-12-03T16:22:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:22:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:22:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:22:28.348 [DEBUG] [Thread-119816] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:22:28.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:22:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:22:28.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:22:03', tmtdew=24.43, humidity=19.33, cloud=0.0, wind=18.56, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:22:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:22:28.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:22:28.444 [DEBUG] [Thread-119819] [transport.py] [_log()] starting thread (client mode): 0xa2762260
2025-12-03T16:22:28.444 [DEBUG] [Thread-119819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:22:28.459 [DEBUG] [Thread-119819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:22:28.459 [INFO] [Thread-119819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:22:28.467 [DEBUG] [Thread-119819] [transport.py] [_log()] client lang: <none>
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] server lang: <none>
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] kex follows: False
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] Compression: none
2025-12-03T16:22:28.468 [DEBUG] [Thread-119819] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:22:28.525 [DEBUG] [Thread-119819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:22:28.525 [DEBUG] [Thread-119819] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:22:28.526 [DEBUG] [Thread-119819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:22:28.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:22:28.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:22:28.584 [DEBUG] [Thread-119819] [transport.py] [_log()] userauth is OK
2025-12-03T16:22:28.585 [DEBUG] [Thread-119819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:22:28.585 [DEBUG] [Thread-119819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:22:28.585 [DEBUG] [Thread-119819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:22:28.585 [DEBUG] [Thread-119819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:22:28.607 [INFO] [Thread-119819] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:22:28.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:22:28.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:22:29.456 [DEBUG] [Thread-119819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:22:29.457 [DEBUG] [Thread-119819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:22:29.504 [DEBUG] [Thread-119819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:22:29.504 [DEBUG] [Thread-119819] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:22:29.513 [DEBUG] [Thread-119819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:22:29.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:22:29.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:22:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:22:29.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:22:29.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:22:29.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:22:29.550 [DEBUG] [Thread-119819] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:22:36.440 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:36.441 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:37.079 [DEBUG] [Thread-119821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:52.115 [DEBUG] [Thread-119822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:55.303 [DEBUG] [Thread-119823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:22:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:22:59.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:22:59.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:23:00.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 22, 35), 24.27, 19.22, 0.0, 17.29, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:23:00.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:22:35
2025-12-03T16:23:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:23:00.533 [DEBUG] [Thread-119824] [transport.py] [_log()] starting thread (client mode): 0xa2763e80
2025-12-03T16:23:00.533 [DEBUG] [Thread-119824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:23:00.553 [DEBUG] [Thread-119824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:23:00.553 [INFO] [Thread-119824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] client lang: <none>
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] server lang: <none>
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] kex follows: False
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] Compression: none
2025-12-03T16:23:00.556 [DEBUG] [Thread-119824] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:23:00.574 [DEBUG] [Thread-119824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:23:00.575 [DEBUG] [Thread-119824] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:23:00.575 [DEBUG] [Thread-119824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:23:00.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:23:00.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:23:00.577 [DEBUG] [Thread-119824] [transport.py] [_log()] userauth is OK
2025-12-03T16:23:00.577 [DEBUG] [Thread-119824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:23:00.577 [DEBUG] [Thread-119824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:23:00.577 [DEBUG] [Thread-119824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:23:00.577 [DEBUG] [Thread-119824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:23:00.601 [INFO] [Thread-119824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:23:00.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:23:01.214 [DEBUG] [Thread-119824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:23:01.214 [DEBUG] [Thread-119824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:23:01.214 [DEBUG] [Thread-119824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:23:01.254 [DEBUG] [Thread-119824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:23:01.254 [DEBUG] [Thread-119824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:23:01.257 [DEBUG] [Thread-119824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:23:01.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:23:01.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:23:01.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:23:01.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:23:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:23:01.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:23:01.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.599007 -999.00  +21.40  12.28     24   +0.40 1 1 1 1 1   888    0 21.10 -5.29 ----- 12.3 12.3 163.6 17.2 27.6 -30.3 27.4 -28.9 29.2 -27.9 29.7 -29.5
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.599007
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:23:01.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:23:01.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:23:01.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:22:35', tmtdew=24.27, humidity=19.22, cloud=0.0, wind=17.29, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:22:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:23:01.275 [DEBUG] [Thread-119824] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:23:01.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:23:01.368 [DEBUG] [Thread-119827] [transport.py] [_log()] starting thread (client mode): 0xa2760400
2025-12-03T16:23:01.368 [DEBUG] [Thread-119827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:23:01.383 [DEBUG] [Thread-119827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:23:01.383 [INFO] [Thread-119827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:23:01.390 [DEBUG] [Thread-119827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] client lang: <none>
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] server lang: <none>
2025-12-03T16:23:01.391 [DEBUG] [Thread-119827] [transport.py] [_log()] kex follows: False
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] Compression: none
2025-12-03T16:23:01.392 [DEBUG] [Thread-119827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:23:01.449 [DEBUG] [Thread-119827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:23:01.449 [DEBUG] [Thread-119827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:23:01.450 [DEBUG] [Thread-119827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:23:01.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:23:01.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:23:01.505 [DEBUG] [Thread-119827] [transport.py] [_log()] userauth is OK
2025-12-03T16:23:01.505 [DEBUG] [Thread-119827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:23:01.505 [DEBUG] [Thread-119827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:23:01.505 [DEBUG] [Thread-119827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:23:01.505 [DEBUG] [Thread-119827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:23:01.524 [INFO] [Thread-119827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:23:01.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:23:01.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:23:02.369 [DEBUG] [Thread-119827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:23:02.369 [DEBUG] [Thread-119827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:23:02.417 [DEBUG] [Thread-119827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:23:02.418 [DEBUG] [Thread-119827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:23:02.427 [DEBUG] [Thread-119827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:23:02.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:23:02.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:23:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:23:02.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:23:02.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:23:02.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:23:02.465 [DEBUG] [Thread-119827] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:23:07.149 [DEBUG] [Thread-119829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:22.198 [DEBUG] [Thread-119830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:32.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:23:32.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:23:32.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:23:33.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 23, 7), 24.5, 18.99, 0.0, 17.52, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:23:33.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:23:07
2025-12-03T16:23:33.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:23:33.421 [DEBUG] [Thread-119831] [transport.py] [_log()] starting thread (client mode): 0xa27c9ed0
2025-12-03T16:23:33.421 [DEBUG] [Thread-119831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:23:33.442 [DEBUG] [Thread-119831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:23:33.442 [INFO] [Thread-119831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:23:33.445 [DEBUG] [Thread-119831] [transport.py] [_log()] client lang: <none>
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] server lang: <none>
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] kex follows: False
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] Compression: none
2025-12-03T16:23:33.446 [DEBUG] [Thread-119831] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:23:33.464 [DEBUG] [Thread-119831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:23:33.465 [DEBUG] [Thread-119831] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:23:33.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:23:33.466 [DEBUG] [Thread-119831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:23:33.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:23:33.468 [DEBUG] [Thread-119831] [transport.py] [_log()] userauth is OK
2025-12-03T16:23:33.468 [DEBUG] [Thread-119831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:23:33.468 [DEBUG] [Thread-119831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:23:33.468 [DEBUG] [Thread-119831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:23:33.468 [DEBUG] [Thread-119831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:23:33.503 [INFO] [Thread-119831] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:23:33.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:23:34.149 [DEBUG] [Thread-119831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:23:34.150 [DEBUG] [Thread-119831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:23:34.150 [DEBUG] [Thread-119831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:23:34.190 [DEBUG] [Thread-119831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:23:34.190 [DEBUG] [Thread-119831] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:23:34.193 [DEBUG] [Thread-119831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:23:34.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:23:34.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:23:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:23:34.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:23:34.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:23:34.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:23:34.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.599354 -999.00  +21.50   8.55     24   +0.60 1 1 1 1 1   888    0 21.30 -6.53 ----- 8.6 8.6 140.4 14.9 27.7 -30.5 27.6 -28.2 29.3 -28.0 29.9 -29.2
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:23:34.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.599354
2025-12-03T16:23:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:23:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:23:34.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:23:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:23:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:23:34.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:23:07', tmtdew=24.5, humidity=18.99, cloud=0.0, wind=17.52, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:23:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:23:34.220 [DEBUG] [Thread-119831] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:23:34.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:23:34.328 [DEBUG] [Thread-119834] [transport.py] [_log()] starting thread (client mode): 0xa27505e0
2025-12-03T16:23:34.328 [DEBUG] [Thread-119834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:23:34.344 [DEBUG] [Thread-119834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:23:34.344 [INFO] [Thread-119834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:23:34.351 [DEBUG] [Thread-119834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:23:34.352 [DEBUG] [Thread-119834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] client lang: <none>
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] server lang: <none>
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] kex follows: False
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:23:34.353 [DEBUG] [Thread-119834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:23:34.354 [DEBUG] [Thread-119834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:23:34.354 [DEBUG] [Thread-119834] [transport.py] [_log()] Compression: none
2025-12-03T16:23:34.354 [DEBUG] [Thread-119834] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:23:34.408 [DEBUG] [Thread-119834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:23:34.409 [DEBUG] [Thread-119834] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:23:34.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:23:34.410 [DEBUG] [Thread-119834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:23:34.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:23:34.465 [DEBUG] [Thread-119834] [transport.py] [_log()] userauth is OK
2025-12-03T16:23:34.465 [DEBUG] [Thread-119834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:23:34.466 [DEBUG] [Thread-119834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:23:34.466 [DEBUG] [Thread-119834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:23:34.466 [DEBUG] [Thread-119834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:23:34.486 [INFO] [Thread-119834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:23:34.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:23:34.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:23:35.312 [DEBUG] [Thread-119834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:23:35.312 [DEBUG] [Thread-119834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:23:35.360 [DEBUG] [Thread-119834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:23:35.361 [DEBUG] [Thread-119834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:23:35.370 [DEBUG] [Thread-119834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:23:35.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:23:35.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:23:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:23:35.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:23:35.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:23:35.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:23:35.407 [DEBUG] [Thread-119834] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:23:36.580 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:36.582 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:37.231 [DEBUG] [Thread-119836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:52.283 [DEBUG] [Thread-119837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:23:55.350 [DEBUG] [Thread-119838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:24:05.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:24:05.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:24:06.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 23, 39), 24.62, 18.89, 0.0, 25.43, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:24:06.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:23:39
2025-12-03T16:24:06.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:24:06.418 [DEBUG] [Thread-119839] [transport.py] [_log()] starting thread (client mode): 0xa27c8e80
2025-12-03T16:24:06.418 [DEBUG] [Thread-119839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:24:06.436 [DEBUG] [Thread-119839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:24:06.436 [INFO] [Thread-119839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] client lang: <none>
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] server lang: <none>
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] kex follows: False
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] Compression: none
2025-12-03T16:24:06.439 [DEBUG] [Thread-119839] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:24:06.455 [DEBUG] [Thread-119839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:24:06.455 [DEBUG] [Thread-119839] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:24:06.455 [DEBUG] [Thread-119839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:24:06.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:24:06.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:24:06.456 [DEBUG] [Thread-119839] [transport.py] [_log()] userauth is OK
2025-12-03T16:24:06.456 [DEBUG] [Thread-119839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:24:06.456 [DEBUG] [Thread-119839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:24:06.456 [DEBUG] [Thread-119839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:24:06.456 [DEBUG] [Thread-119839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:24:06.471 [INFO] [Thread-119839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:24:06.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:24:07.119 [DEBUG] [Thread-119839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:24:07.119 [DEBUG] [Thread-119839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:24:07.119 [DEBUG] [Thread-119839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:24:07.160 [DEBUG] [Thread-119839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:24:07.160 [DEBUG] [Thread-119839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:24:07.163 [DEBUG] [Thread-119839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:24:07.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:24:07.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:24:07.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:24:07.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:24:07.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:24:07.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:24:07.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.599701 -999.00  +21.80  16.37     24   +0.60 1 1 1 1 1   888    0 21.34 -7.04 ----- 16.4 16.4 130.1 25.1 27.7 -30.0 27.6 -29.4 29.3 -28.1 29.8 -30.1
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:24:07.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.599701
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:24:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:23:39', tmtdew=24.62, humidity=18.89, cloud=0.0, wind=25.43, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:23:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:24:07.181 [DEBUG] [Thread-119839] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:24:07.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:24:07.269 [DEBUG] [Thread-119842] [transport.py] [_log()] starting thread (client mode): 0xa2763520
2025-12-03T16:24:07.269 [DEBUG] [Thread-119842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:24:07.283 [DEBUG] [Thread-119842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:24:07.284 [INFO] [Thread-119842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:07.291 [DEBUG] [Thread-119842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] client lang: <none>
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] server lang: <none>
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] kex follows: False
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] Compression: none
2025-12-03T16:24:07.292 [DEBUG] [Thread-119842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:24:07.319 [DEBUG] [Thread-119844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:07.348 [DEBUG] [Thread-119842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:24:07.349 [DEBUG] [Thread-119842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:24:07.349 [DEBUG] [Thread-119842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:24:07.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:24:07.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:24:07.404 [DEBUG] [Thread-119842] [transport.py] [_log()] userauth is OK
2025-12-03T16:24:07.404 [DEBUG] [Thread-119842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:24:07.404 [DEBUG] [Thread-119842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:24:07.405 [DEBUG] [Thread-119842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:24:07.405 [DEBUG] [Thread-119842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:24:07.426 [INFO] [Thread-119842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:24:07.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:24:07.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:24:08.293 [DEBUG] [Thread-119842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:24:08.293 [DEBUG] [Thread-119842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:24:08.340 [DEBUG] [Thread-119842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:24:08.341 [DEBUG] [Thread-119842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:24:08.349 [DEBUG] [Thread-119842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:24:08.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:24:08.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:24:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:24:08.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:24:08.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:24:08.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:24:08.383 [DEBUG] [Thread-119842] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:24:22.374 [DEBUG] [Thread-119845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:36.734 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:36.735 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:37.411 [DEBUG] [Thread-119846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:38.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:24:38.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:24:38.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:24:39.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 24, 11), 24.69, 18.8, 0.0, 28.81, 21.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:24:39.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:24:11
2025-12-03T16:24:39.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:24:39.347 [DEBUG] [Thread-119847] [transport.py] [_log()] starting thread (client mode): 0xa2728ee0
2025-12-03T16:24:39.347 [DEBUG] [Thread-119847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:24:39.366 [DEBUG] [Thread-119847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:24:39.366 [INFO] [Thread-119847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:24:39.369 [DEBUG] [Thread-119847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] client lang: <none>
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] server lang: <none>
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] kex follows: False
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] Compression: none
2025-12-03T16:24:39.370 [DEBUG] [Thread-119847] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:24:39.386 [DEBUG] [Thread-119847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:24:39.387 [DEBUG] [Thread-119847] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:24:39.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:24:39.388 [DEBUG] [Thread-119847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:24:39.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:24:39.390 [DEBUG] [Thread-119847] [transport.py] [_log()] userauth is OK
2025-12-03T16:24:39.390 [DEBUG] [Thread-119847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:24:39.390 [DEBUG] [Thread-119847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:24:39.390 [DEBUG] [Thread-119847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:24:39.390 [DEBUG] [Thread-119847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:24:39.426 [INFO] [Thread-119847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:24:39.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:24:40.057 [DEBUG] [Thread-119847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:24:40.057 [DEBUG] [Thread-119847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:24:40.057 [DEBUG] [Thread-119847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:24:40.098 [DEBUG] [Thread-119847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:24:40.098 [DEBUG] [Thread-119847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:24:40.100 [DEBUG] [Thread-119847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:24:40.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:24:40.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:24:40.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:24:40.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:24:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:24:40.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:24:40.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.600048 -999.00  +21.90  19.76     24   +0.70 1 1 1 1 1   888    0 21.14 -7.59 ----- 19.8 19.8 137.6 26.2 27.7 -29.6 27.7 -29.9 29.2 -28.0 29.8 -29.8
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.600048
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:24:40.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:24:11', tmtdew=24.69, humidity=18.8, cloud=0.0, wind=28.81, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:24:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:24:40.119 [DEBUG] [Thread-119847] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:24:40.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:24:40.203 [DEBUG] [Thread-119850] [transport.py] [_log()] starting thread (client mode): 0xa27296f0
2025-12-03T16:24:40.203 [DEBUG] [Thread-119850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:24:40.219 [DEBUG] [Thread-119850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:24:40.219 [INFO] [Thread-119850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:24:40.226 [DEBUG] [Thread-119850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:24:40.226 [DEBUG] [Thread-119850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:24:40.226 [DEBUG] [Thread-119850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:24:40.226 [DEBUG] [Thread-119850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:40.226 [DEBUG] [Thread-119850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] client lang: <none>
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] server lang: <none>
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] kex follows: False
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] Compression: none
2025-12-03T16:24:40.227 [DEBUG] [Thread-119850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:24:40.284 [DEBUG] [Thread-119850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:24:40.284 [DEBUG] [Thread-119850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:24:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:24:40.284 [DEBUG] [Thread-119850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:24:40.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:24:40.341 [DEBUG] [Thread-119850] [transport.py] [_log()] userauth is OK
2025-12-03T16:24:40.341 [DEBUG] [Thread-119850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:24:40.341 [DEBUG] [Thread-119850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:24:40.341 [DEBUG] [Thread-119850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:24:40.341 [DEBUG] [Thread-119850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:24:40.359 [INFO] [Thread-119850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:24:40.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:24:40.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:24:41.190 [DEBUG] [Thread-119850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:24:41.190 [DEBUG] [Thread-119850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:24:41.237 [DEBUG] [Thread-119850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:24:41.238 [DEBUG] [Thread-119850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:24:41.246 [DEBUG] [Thread-119850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:24:41.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:24:41.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:24:41.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:24:41.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:24:41.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:24:41.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:24:41.278 [DEBUG] [Thread-119850] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:24:52.443 [DEBUG] [Thread-119852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:24:55.395 [DEBUG] [Thread-119853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:07.497 [DEBUG] [Thread-119854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:25:11.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:25:11.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:25:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 24, 43), 24.79, 18.95, 0.0, 21.81, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:25:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:24:43
2025-12-03T16:25:12.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:25:12.236 [DEBUG] [Thread-119855] [transport.py] [_log()] starting thread (client mode): 0xa2762470
2025-12-03T16:25:12.236 [DEBUG] [Thread-119855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:25:12.256 [DEBUG] [Thread-119855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:25:12.257 [INFO] [Thread-119855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] client lang: <none>
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] server lang: <none>
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] kex follows: False
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:25:12.260 [DEBUG] [Thread-119855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:25:12.261 [DEBUG] [Thread-119855] [transport.py] [_log()] Compression: none
2025-12-03T16:25:12.261 [DEBUG] [Thread-119855] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:25:12.278 [DEBUG] [Thread-119855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:25:12.279 [DEBUG] [Thread-119855] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:25:12.279 [DEBUG] [Thread-119855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:25:12.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:25:12.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:25:12.281 [DEBUG] [Thread-119855] [transport.py] [_log()] userauth is OK
2025-12-03T16:25:12.282 [DEBUG] [Thread-119855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:25:12.282 [DEBUG] [Thread-119855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:25:12.282 [DEBUG] [Thread-119855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:25:12.282 [DEBUG] [Thread-119855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:25:12.305 [INFO] [Thread-119855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:25:12.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:25:12.886 [DEBUG] [Thread-119855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:25:12.886 [DEBUG] [Thread-119855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:25:12.886 [DEBUG] [Thread-119855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:25:12.927 [DEBUG] [Thread-119855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:25:12.927 [DEBUG] [Thread-119855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:25:12.930 [DEBUG] [Thread-119855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:25:12.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:25:12.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:25:12.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:25:12.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:25:12.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:25:12.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:25:12.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:25:12.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:25:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:25:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.600395 -999.00  +21.70  20.12     24   +0.50 1 1 1 1 1   888    0 21.19 -8.15 ----- 20.1 20.1 126.4 26.8 27.5 -30.2 27.6 -29.8 29.2 -28.6 29.6 -30.3
2025-12-03T16:25:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:25:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:25:12.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.600395
2025-12-03T16:25:12.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:25:12.958 [DEBUG] [Thread-119855] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:25:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:25:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:25:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:25:12.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:25:12.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:24:43', tmtdew=24.79, humidity=18.95, cloud=0.0, wind=21.81, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:24:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:25:13.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:25:13.052 [DEBUG] [Thread-119858] [transport.py] [_log()] starting thread (client mode): 0xa27506d0
2025-12-03T16:25:13.052 [DEBUG] [Thread-119858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:25:13.067 [DEBUG] [Thread-119858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:25:13.067 [INFO] [Thread-119858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] client lang: <none>
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] server lang: <none>
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] kex follows: False
2025-12-03T16:25:13.074 [DEBUG] [Thread-119858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] Compression: none
2025-12-03T16:25:13.075 [DEBUG] [Thread-119858] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:25:13.132 [DEBUG] [Thread-119858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:25:13.132 [DEBUG] [Thread-119858] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:25:13.133 [DEBUG] [Thread-119858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:25:13.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:25:13.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:25:13.188 [DEBUG] [Thread-119858] [transport.py] [_log()] userauth is OK
2025-12-03T16:25:13.188 [DEBUG] [Thread-119858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:25:13.188 [DEBUG] [Thread-119858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:25:13.188 [DEBUG] [Thread-119858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:25:13.188 [DEBUG] [Thread-119858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:25:13.207 [INFO] [Thread-119858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:25:13.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:25:13.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:25:14.059 [DEBUG] [Thread-119858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:25:14.060 [DEBUG] [Thread-119858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:25:14.111 [DEBUG] [Thread-119858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:25:14.111 [DEBUG] [Thread-119858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:25:14.120 [DEBUG] [Thread-119858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:25:14.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:25:14.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:25:14.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:25:14.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:25:14.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:25:14.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:25:14.157 [DEBUG] [Thread-119858] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:25:22.526 [DEBUG] [Thread-119860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:36.875 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:36.877 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:37.569 [DEBUG] [Thread-119861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:44.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:25:44.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:25:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:25:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 25, 15), 24.69, 19.07, 0.0, 22.16, 21.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:25:44.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:25:15
2025-12-03T16:25:44.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:25:45.113 [DEBUG] [Thread-119862] [transport.py] [_log()] starting thread (client mode): 0xa2751990
2025-12-03T16:25:45.113 [DEBUG] [Thread-119862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:25:45.136 [DEBUG] [Thread-119862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:25:45.136 [INFO] [Thread-119862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] client lang: <none>
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] server lang: <none>
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] kex follows: False
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] Compression: none
2025-12-03T16:25:45.140 [DEBUG] [Thread-119862] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:25:45.156 [DEBUG] [Thread-119862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:25:45.156 [DEBUG] [Thread-119862] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:25:45.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:25:45.157 [DEBUG] [Thread-119862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:25:45.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:25:45.160 [DEBUG] [Thread-119862] [transport.py] [_log()] userauth is OK
2025-12-03T16:25:45.160 [DEBUG] [Thread-119862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:25:45.160 [DEBUG] [Thread-119862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:25:45.160 [DEBUG] [Thread-119862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:25:45.160 [DEBUG] [Thread-119862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:25:45.196 [INFO] [Thread-119862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:25:45.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:25:45.823 [DEBUG] [Thread-119862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:25:45.824 [DEBUG] [Thread-119862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:25:45.824 [DEBUG] [Thread-119862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:25:45.865 [DEBUG] [Thread-119862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:25:45.865 [DEBUG] [Thread-119862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:25:45.868 [DEBUG] [Thread-119862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:25:45.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:25:45.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:25:45.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:25:45.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:25:45.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:25:45.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:25:45.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:25:45.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.601090 -999.00  +21.60  18.72     24   +0.50 1 1 1 1 1   888    0 20.31 -11.38 ----- 18.7 18.7 133.8 29.3 27.4 -30.1 27.6 -29.9 29.1 -28.3 29.6 -29.9
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.601090
2025-12-03T16:25:45.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:25:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:25:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:25:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:25:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:25:45.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:25:15', tmtdew=24.69, humidity=19.07, cloud=0.0, wind=22.16, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:25:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:25:45.895 [DEBUG] [Thread-119862] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:25:45.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:25:45.992 [DEBUG] [Thread-119865] [transport.py] [_log()] starting thread (client mode): 0xa27508e0
2025-12-03T16:25:45.993 [DEBUG] [Thread-119865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:25:46.011 [DEBUG] [Thread-119865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:25:46.011 [INFO] [Thread-119865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:25:46.018 [DEBUG] [Thread-119865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] client lang: <none>
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] server lang: <none>
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] kex follows: False
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:25:46.019 [DEBUG] [Thread-119865] [transport.py] [_log()] Compression: none
2025-12-03T16:25:46.020 [DEBUG] [Thread-119865] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:25:46.074 [DEBUG] [Thread-119865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:25:46.075 [DEBUG] [Thread-119865] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:25:46.075 [DEBUG] [Thread-119865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:25:46.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:25:46.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:25:46.132 [DEBUG] [Thread-119865] [transport.py] [_log()] userauth is OK
2025-12-03T16:25:46.132 [DEBUG] [Thread-119865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:25:46.132 [DEBUG] [Thread-119865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:25:46.132 [DEBUG] [Thread-119865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:25:46.132 [DEBUG] [Thread-119865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:25:46.152 [INFO] [Thread-119865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:25:46.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:25:46.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:25:47.000 [DEBUG] [Thread-119865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:25:47.000 [DEBUG] [Thread-119865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:25:47.048 [DEBUG] [Thread-119865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:25:47.048 [DEBUG] [Thread-119865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:25:47.056 [DEBUG] [Thread-119865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:25:47.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:25:47.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:25:47.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:25:47.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:25:47.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:25:47.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:25:47.091 [DEBUG] [Thread-119865] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:25:52.605 [DEBUG] [Thread-119867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:25:55.433 [DEBUG] [Thread-119868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:07.660 [DEBUG] [Thread-119869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:17.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:26:17.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:26:17.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:26:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 25, 47), 24.78, 18.97, 0.0, 27.95, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:26:17.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:25:47
2025-12-03T16:26:17.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:26:18.061 [DEBUG] [Thread-119870] [transport.py] [_log()] starting thread (client mode): 0xa2751db0
2025-12-03T16:26:18.061 [DEBUG] [Thread-119870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:26:18.080 [DEBUG] [Thread-119870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:26:18.080 [INFO] [Thread-119870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] client lang: <none>
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] server lang: <none>
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] kex follows: False
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] Compression: none
2025-12-03T16:26:18.083 [DEBUG] [Thread-119870] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:26:18.098 [DEBUG] [Thread-119870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:26:18.099 [DEBUG] [Thread-119870] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:26:18.099 [DEBUG] [Thread-119870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:26:18.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:26:18.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:26:18.100 [DEBUG] [Thread-119870] [transport.py] [_log()] userauth is OK
2025-12-03T16:26:18.100 [DEBUG] [Thread-119870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:26:18.100 [DEBUG] [Thread-119870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:26:18.100 [DEBUG] [Thread-119870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:26:18.100 [DEBUG] [Thread-119870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:26:18.113 [INFO] [Thread-119870] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:26:18.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:26:18.687 [DEBUG] [Thread-119870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:26:18.687 [DEBUG] [Thread-119870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:26:18.687 [DEBUG] [Thread-119870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:26:18.728 [DEBUG] [Thread-119870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:26:18.728 [DEBUG] [Thread-119870] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:26:18.730 [DEBUG] [Thread-119870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:26:18.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:26:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:26:18.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:26:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:26:18.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:26:18.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:26:18.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:26:18.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:26:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:26:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.601437 -999.00  +21.60  15.65     24   +0.50 1 1 1 1 1   888    0 21.04 -11.65 ----- 15.7 15.7 153.5 27.6 27.4 -30.0 27.5 -29.7 29.1 -28.4 29.5 -30.3
2025-12-03T16:26:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:26:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:26:18.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.601437
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:26:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:25:47', tmtdew=24.78, humidity=18.97, cloud=0.0, wind=27.95, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:26:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:26:18.745 [DEBUG] [Thread-119870] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:26:18.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:26:18.842 [DEBUG] [Thread-119873] [transport.py] [_log()] starting thread (client mode): 0xa517cf40
2025-12-03T16:26:18.843 [DEBUG] [Thread-119873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:26:18.857 [DEBUG] [Thread-119873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:26:18.857 [INFO] [Thread-119873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:26:18.865 [DEBUG] [Thread-119873] [transport.py] [_log()] client lang: <none>
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] server lang: <none>
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] kex follows: False
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] Compression: none
2025-12-03T16:26:18.866 [DEBUG] [Thread-119873] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:26:18.922 [DEBUG] [Thread-119873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:26:18.923 [DEBUG] [Thread-119873] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:26:18.923 [DEBUG] [Thread-119873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:26:18.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:26:18.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:26:18.979 [DEBUG] [Thread-119873] [transport.py] [_log()] userauth is OK
2025-12-03T16:26:18.979 [DEBUG] [Thread-119873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:26:18.979 [DEBUG] [Thread-119873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:26:18.979 [DEBUG] [Thread-119873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:26:18.979 [DEBUG] [Thread-119873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:26:18.992 [INFO] [Thread-119873] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:26:18.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:26:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:26:19.833 [DEBUG] [Thread-119873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:26:19.834 [DEBUG] [Thread-119873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:26:19.882 [DEBUG] [Thread-119873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:26:19.882 [DEBUG] [Thread-119873] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:26:19.891 [DEBUG] [Thread-119873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:26:19.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:26:19.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:26:19.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:26:19.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:26:19.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:26:19.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:26:19.923 [DEBUG] [Thread-119873] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:26:22.694 [DEBUG] [Thread-119875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:37.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:37.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:37.743 [DEBUG] [Thread-119876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:49.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:26:49.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:26:49.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:26:50.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 26, 19), 24.85, 18.89, 0.0, 28.23, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:26:50.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:26:19
2025-12-03T16:26:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:26:50.886 [DEBUG] [Thread-119877] [transport.py] [_log()] starting thread (client mode): 0xa517f040
2025-12-03T16:26:50.886 [DEBUG] [Thread-119877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:26:50.905 [DEBUG] [Thread-119877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:26:50.905 [INFO] [Thread-119877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] client lang: <none>
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] server lang: <none>
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] kex follows: False
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] Compression: none
2025-12-03T16:26:50.907 [DEBUG] [Thread-119877] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:26:50.915 [DEBUG] [Thread-119877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:26:50.915 [DEBUG] [Thread-119877] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:26:50.916 [DEBUG] [Thread-119877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:26:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:26:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:26:50.917 [DEBUG] [Thread-119877] [transport.py] [_log()] userauth is OK
2025-12-03T16:26:50.917 [DEBUG] [Thread-119877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:26:50.917 [DEBUG] [Thread-119877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:26:50.918 [DEBUG] [Thread-119877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:26:50.918 [DEBUG] [Thread-119877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:26:50.932 [INFO] [Thread-119877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:26:50.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:26:51.566 [DEBUG] [Thread-119877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:26:51.567 [DEBUG] [Thread-119877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:26:51.567 [DEBUG] [Thread-119877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:26:51.608 [DEBUG] [Thread-119877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:26:51.608 [DEBUG] [Thread-119877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:26:51.611 [DEBUG] [Thread-119877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:26:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:26:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:26:51.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:26:51.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:26:51.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:26:51.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:26:51.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.601784 -999.00  +21.70  15.97     24   +0.50 1 1 1 1 1   888    0 20.47 -11.78 ----- 16.0 16.0 142.5 21.7 27.4 -30.2 27.5 -29.7 29.1 -28.2 29.5 -30.1
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:26:51.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.601784
2025-12-03T16:26:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:26:51.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:26:51.635 [DEBUG] [Thread-119877] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:26:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:26:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:26:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:26:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:26:19', tmtdew=24.85, humidity=18.89, cloud=0.0, wind=28.23, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:26:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:26:51.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:26:51.729 [DEBUG] [Thread-119880] [transport.py] [_log()] starting thread (client mode): 0xa2752680
2025-12-03T16:26:51.729 [DEBUG] [Thread-119880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:26:51.744 [DEBUG] [Thread-119880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:26:51.744 [INFO] [Thread-119880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:26:51.752 [DEBUG] [Thread-119880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] client lang: <none>
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] server lang: <none>
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] kex follows: False
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] Compression: none
2025-12-03T16:26:51.753 [DEBUG] [Thread-119880] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:26:51.811 [DEBUG] [Thread-119880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:26:51.812 [DEBUG] [Thread-119880] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:26:51.812 [DEBUG] [Thread-119880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:26:51.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:26:51.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:26:51.867 [DEBUG] [Thread-119880] [transport.py] [_log()] userauth is OK
2025-12-03T16:26:51.868 [DEBUG] [Thread-119880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:26:51.868 [DEBUG] [Thread-119880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:26:51.868 [DEBUG] [Thread-119880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:26:51.868 [DEBUG] [Thread-119880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:26:51.889 [INFO] [Thread-119880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:26:51.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:26:51.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:26:52.677 [DEBUG] [Thread-119880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:26:52.677 [DEBUG] [Thread-119880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:26:52.725 [DEBUG] [Thread-119880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:26:52.725 [DEBUG] [Thread-119880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:26:52.733 [DEBUG] [Thread-119880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:26:52.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:26:52.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:26:52.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:26:52.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:26:52.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:26:52.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:26:52.765 [DEBUG] [Thread-119880] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:26:52.772 [DEBUG] [Thread-119882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:26:55.467 [DEBUG] [Thread-119883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:07.811 [DEBUG] [Thread-119884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:27:22.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:27:22.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:27:22.842 [DEBUG] [Thread-119885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 26, 51), 24.47, 19.04, 0.0, 20.4, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:27:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:26:51
2025-12-03T16:27:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:27:23.729 [DEBUG] [Thread-119886] [transport.py] [_log()] starting thread (client mode): 0xa27531f0
2025-12-03T16:27:23.729 [DEBUG] [Thread-119886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:27:23.750 [DEBUG] [Thread-119886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:27:23.750 [INFO] [Thread-119886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:27:23.753 [DEBUG] [Thread-119886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] client lang: <none>
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] server lang: <none>
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] kex follows: False
2025-12-03T16:27:23.754 [DEBUG] [Thread-119886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] Compression: none
2025-12-03T16:27:23.755 [DEBUG] [Thread-119886] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:27:23.772 [DEBUG] [Thread-119886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:27:23.772 [DEBUG] [Thread-119886] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:27:23.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:27:23.773 [DEBUG] [Thread-119886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:27:23.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:27:23.775 [DEBUG] [Thread-119886] [transport.py] [_log()] userauth is OK
2025-12-03T16:27:23.775 [DEBUG] [Thread-119886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:27:23.776 [DEBUG] [Thread-119886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:27:23.776 [DEBUG] [Thread-119886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:27:23.776 [DEBUG] [Thread-119886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:27:23.800 [INFO] [Thread-119886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:27:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:27:24.420 [DEBUG] [Thread-119886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:27:24.420 [DEBUG] [Thread-119886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:27:24.421 [DEBUG] [Thread-119886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:27:24.461 [DEBUG] [Thread-119886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:27:24.462 [DEBUG] [Thread-119886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:27:24.463 [DEBUG] [Thread-119886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:27:24.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:27:24.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:27:24.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:27:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:27:24.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:27:24.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:27:24.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.602132 -999.00  +21.60  13.10     24   +0.50 1 1 1 1 1   888    0 20.27 -14.22 ----- 13.1 13.1 143.6 18.0 27.4 -30.0 27.5 -28.9 29.2 -27.6 29.6 -28.7
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:27:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.602132
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:27:24.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:26:51', tmtdew=24.47, humidity=19.04, cloud=0.0, wind=20.4, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:27:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:27:24.477 [DEBUG] [Thread-119886] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:27:24.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:27:24.562 [DEBUG] [Thread-119889] [transport.py] [_log()] starting thread (client mode): 0xa5198f10
2025-12-03T16:27:24.562 [DEBUG] [Thread-119889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:27:24.576 [DEBUG] [Thread-119889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:27:24.576 [INFO] [Thread-119889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] client lang: <none>
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] server lang: <none>
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] kex follows: False
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] Compression: none
2025-12-03T16:27:24.584 [DEBUG] [Thread-119889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:27:24.641 [DEBUG] [Thread-119889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:27:24.642 [DEBUG] [Thread-119889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:27:24.642 [DEBUG] [Thread-119889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:27:24.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:27:24.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:27:24.698 [DEBUG] [Thread-119889] [transport.py] [_log()] userauth is OK
2025-12-03T16:27:24.698 [DEBUG] [Thread-119889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:27:24.698 [DEBUG] [Thread-119889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:27:24.698 [DEBUG] [Thread-119889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:27:24.698 [DEBUG] [Thread-119889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:27:24.716 [INFO] [Thread-119889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:27:24.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:27:24.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:27:25.567 [DEBUG] [Thread-119889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:27:25.567 [DEBUG] [Thread-119889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:27:25.614 [DEBUG] [Thread-119889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:27:25.614 [DEBUG] [Thread-119889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:27:25.622 [DEBUG] [Thread-119889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:27:25.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:27:25.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:27:25.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:27:25.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:27:25.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:27:25.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:27:25.653 [DEBUG] [Thread-119889] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:27:37.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:37.166 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:37.877 [DEBUG] [Thread-119891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:52.923 [DEBUG] [Thread-119892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:55.496 [DEBUG] [Thread-119893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:27:55.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:27:55.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:27:55.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:27:56.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 27, 23), 24.45, 19.07, 0.0, 19.59, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:27:56.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:27:23
2025-12-03T16:27:56.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:27:56.704 [DEBUG] [Thread-119894] [transport.py] [_log()] starting thread (client mode): 0xa27632e0
2025-12-03T16:27:56.705 [DEBUG] [Thread-119894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:27:56.719 [DEBUG] [Thread-119894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:27:56.719 [INFO] [Thread-119894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] client lang: <none>
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] server lang: <none>
2025-12-03T16:27:56.722 [DEBUG] [Thread-119894] [transport.py] [_log()] kex follows: False
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] Compression: none
2025-12-03T16:27:56.723 [DEBUG] [Thread-119894] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:27:56.738 [DEBUG] [Thread-119894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:27:56.738 [DEBUG] [Thread-119894] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:27:56.738 [DEBUG] [Thread-119894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:27:56.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:27:56.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:27:56.739 [DEBUG] [Thread-119894] [transport.py] [_log()] userauth is OK
2025-12-03T16:27:56.740 [DEBUG] [Thread-119894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:27:56.740 [DEBUG] [Thread-119894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:27:56.740 [DEBUG] [Thread-119894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:27:56.740 [DEBUG] [Thread-119894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:27:56.758 [INFO] [Thread-119894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:27:56.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:27:57.394 [DEBUG] [Thread-119894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:27:57.394 [DEBUG] [Thread-119894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:27:57.394 [DEBUG] [Thread-119894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:27:57.435 [DEBUG] [Thread-119894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:27:57.435 [DEBUG] [Thread-119894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:27:57.437 [DEBUG] [Thread-119894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:27:57.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:27:57.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:27:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:27:57.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:27:57.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:27:57.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:27:57.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.602479 -999.00  +21.80  12.57     24   +0.70 1 1 1 1 1   888    0 20.61 -16.79 ----- 12.6 12.6 159.9 19.4 27.4 -29.9 27.5 -29.3 29.2 -28.1 29.6 -30.5
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.602479
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:27:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:27:57.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:27:23', tmtdew=24.45, humidity=19.07, cloud=0.0, wind=19.59, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:27:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:27:57.457 [DEBUG] [Thread-119894] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:27:57.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:27:57.543 [DEBUG] [Thread-119897] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T16:27:57.543 [DEBUG] [Thread-119897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:27:57.558 [DEBUG] [Thread-119897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:27:57.558 [INFO] [Thread-119897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:57.565 [DEBUG] [Thread-119897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] client lang: <none>
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] server lang: <none>
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] kex follows: False
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] Compression: none
2025-12-03T16:27:57.566 [DEBUG] [Thread-119897] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:27:57.625 [DEBUG] [Thread-119897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:27:57.625 [DEBUG] [Thread-119897] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:27:57.625 [DEBUG] [Thread-119897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:27:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:27:57.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:27:57.682 [DEBUG] [Thread-119897] [transport.py] [_log()] userauth is OK
2025-12-03T16:27:57.682 [DEBUG] [Thread-119897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:27:57.682 [DEBUG] [Thread-119897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:27:57.682 [DEBUG] [Thread-119897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:27:57.682 [DEBUG] [Thread-119897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:27:57.699 [INFO] [Thread-119897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:27:57.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:27:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:27:58.548 [DEBUG] [Thread-119897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:27:58.549 [DEBUG] [Thread-119897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:27:58.596 [DEBUG] [Thread-119897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:27:58.596 [DEBUG] [Thread-119897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:27:58.605 [DEBUG] [Thread-119897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:27:58.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:27:58.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:27:58.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:27:58.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:27:58.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:27:58.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:27:58.643 [DEBUG] [Thread-119897] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:28:07.954 [DEBUG] [Thread-119899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:23.001 [DEBUG] [Thread-119900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:28.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:28:28.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:28:28.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:28:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 27, 55), 24.41, 19.47, 0.0, 17.65, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:28:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:27:55
2025-12-03T16:28:29.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:28:29.662 [DEBUG] [Thread-119901] [transport.py] [_log()] starting thread (client mode): 0xa27ca050
2025-12-03T16:28:29.662 [DEBUG] [Thread-119901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:28:29.683 [DEBUG] [Thread-119901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:28:29.683 [INFO] [Thread-119901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:28:29.686 [DEBUG] [Thread-119901] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:28:29.686 [DEBUG] [Thread-119901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] client lang: <none>
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] server lang: <none>
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] kex follows: False
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] Compression: none
2025-12-03T16:28:29.687 [DEBUG] [Thread-119901] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:28:29.702 [DEBUG] [Thread-119901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:28:29.702 [DEBUG] [Thread-119901] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:28:29.702 [DEBUG] [Thread-119901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:28:29.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:28:29.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:28:29.703 [DEBUG] [Thread-119901] [transport.py] [_log()] userauth is OK
2025-12-03T16:28:29.703 [DEBUG] [Thread-119901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:28:29.703 [DEBUG] [Thread-119901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:28:29.703 [DEBUG] [Thread-119901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:28:29.703 [DEBUG] [Thread-119901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:28:29.713 [INFO] [Thread-119901] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:28:29.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:28:30.369 [DEBUG] [Thread-119901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:28:30.369 [DEBUG] [Thread-119901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:28:30.370 [DEBUG] [Thread-119901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:28:30.410 [DEBUG] [Thread-119901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:28:30.410 [DEBUG] [Thread-119901] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:28:30.412 [DEBUG] [Thread-119901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:28:30.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:28:30.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:28:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:28:30.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:28:30.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:28:30.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:28:30.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.602826 -999.00  +21.80  25.02     24   +0.60 1 1 1 1 1   888    0 20.78 -16.64 ----- 25.0 25.0 136.0 29.3 27.4 -29.6 27.5 -29.8 29.1 -29.3 29.5 -30.2
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.602826
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:28:30.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:27:55', tmtdew=24.41, humidity=19.47, cloud=0.0, wind=17.65, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:28:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:28:30.430 [DEBUG] [Thread-119901] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:28:30.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:28:30.513 [DEBUG] [Thread-119904] [transport.py] [_log()] starting thread (client mode): 0xa27505e0
2025-12-03T16:28:30.514 [DEBUG] [Thread-119904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:28:30.528 [DEBUG] [Thread-119904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:28:30.529 [INFO] [Thread-119904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] client lang: <none>
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] server lang: <none>
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] kex follows: False
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:28:30.536 [DEBUG] [Thread-119904] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:28:30.537 [DEBUG] [Thread-119904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:28:30.537 [DEBUG] [Thread-119904] [transport.py] [_log()] Compression: none
2025-12-03T16:28:30.537 [DEBUG] [Thread-119904] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:28:30.592 [DEBUG] [Thread-119904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:28:30.593 [DEBUG] [Thread-119904] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:28:30.593 [DEBUG] [Thread-119904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:28:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:28:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:28:30.650 [DEBUG] [Thread-119904] [transport.py] [_log()] userauth is OK
2025-12-03T16:28:30.650 [DEBUG] [Thread-119904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:28:30.650 [DEBUG] [Thread-119904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:28:30.651 [DEBUG] [Thread-119904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:28:30.651 [DEBUG] [Thread-119904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:28:30.666 [INFO] [Thread-119904] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:28:30.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:28:30.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:28:31.492 [DEBUG] [Thread-119904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:28:31.492 [DEBUG] [Thread-119904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:28:31.540 [DEBUG] [Thread-119904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:28:31.540 [DEBUG] [Thread-119904] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:28:31.549 [DEBUG] [Thread-119904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:28:31.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:28:31.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:28:31.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:28:31.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:28:31.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:28:31.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:28:31.580 [DEBUG] [Thread-119904] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:28:37.311 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:37.312 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:38.031 [DEBUG] [Thread-119906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:53.095 [DEBUG] [Thread-119907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:28:55.562 [DEBUG] [Thread-119908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:29:01.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:29:01.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:29:02.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 28, 27), 24.57, 19.27, 0.0, 17.4, 21.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:29:02.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:28:27
2025-12-03T16:29:02.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:29:02.576 [DEBUG] [Thread-119909] [transport.py] [_log()] starting thread (client mode): 0xa5199930
2025-12-03T16:29:02.576 [DEBUG] [Thread-119909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:29:02.596 [DEBUG] [Thread-119909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:29:02.596 [INFO] [Thread-119909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:29:02.599 [DEBUG] [Thread-119909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:29:02.599 [DEBUG] [Thread-119909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:29:02.599 [DEBUG] [Thread-119909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:29:02.599 [DEBUG] [Thread-119909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] client lang: <none>
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] server lang: <none>
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] kex follows: False
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] Compression: none
2025-12-03T16:29:02.600 [DEBUG] [Thread-119909] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:29:02.619 [DEBUG] [Thread-119909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:29:02.619 [DEBUG] [Thread-119909] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:29:02.620 [DEBUG] [Thread-119909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:29:02.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:29:02.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:29:02.622 [DEBUG] [Thread-119909] [transport.py] [_log()] userauth is OK
2025-12-03T16:29:02.622 [DEBUG] [Thread-119909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:29:02.622 [DEBUG] [Thread-119909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:29:02.622 [DEBUG] [Thread-119909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:29:02.623 [DEBUG] [Thread-119909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:29:02.658 [INFO] [Thread-119909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:29:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:29:03.317 [DEBUG] [Thread-119909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:29:03.317 [DEBUG] [Thread-119909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:29:03.318 [DEBUG] [Thread-119909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:29:03.358 [DEBUG] [Thread-119909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:29:03.358 [DEBUG] [Thread-119909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:29:03.362 [DEBUG] [Thread-119909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:29:03.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:29:03.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:29:03.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:29:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:29:03.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:29:03.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:29:03.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.603173 -999.00  +21.40  15.91     24   +0.20 1 1 1 1 1   888    0 20.95 -17.10 ----- 15.9 15.9 149.2 24.0 27.3 -30.3 27.4 -29.7 29.1 -28.9 29.4 -30.6
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:29:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.603173
2025-12-03T16:29:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:29:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:29:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:29:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:29:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:29:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:28:27', tmtdew=24.57, humidity=19.27, cloud=0.0, wind=17.4, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:28:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:29:03.383 [DEBUG] [Thread-119909] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:29:03.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:29:03.481 [DEBUG] [Thread-119912] [transport.py] [_log()] starting thread (client mode): 0xa51d2d40
2025-12-03T16:29:03.481 [DEBUG] [Thread-119912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:29:03.495 [DEBUG] [Thread-119912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:29:03.496 [INFO] [Thread-119912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:29:03.503 [DEBUG] [Thread-119912] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:29:03.503 [DEBUG] [Thread-119912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] client lang: <none>
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] server lang: <none>
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] kex follows: False
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] Compression: none
2025-12-03T16:29:03.504 [DEBUG] [Thread-119912] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:29:03.567 [DEBUG] [Thread-119912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:29:03.567 [DEBUG] [Thread-119912] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:29:03.568 [DEBUG] [Thread-119912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:29:03.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:29:03.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:29:03.622 [DEBUG] [Thread-119912] [transport.py] [_log()] userauth is OK
2025-12-03T16:29:03.623 [DEBUG] [Thread-119912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:29:03.623 [DEBUG] [Thread-119912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:29:03.623 [DEBUG] [Thread-119912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:29:03.623 [DEBUG] [Thread-119912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:29:03.645 [INFO] [Thread-119912] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:29:03.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:29:03.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:29:04.505 [DEBUG] [Thread-119912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:29:04.505 [DEBUG] [Thread-119912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:29:04.553 [DEBUG] [Thread-119912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:29:04.553 [DEBUG] [Thread-119912] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:29:04.562 [DEBUG] [Thread-119912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:29:04.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:29:04.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:29:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:29:04.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:29:04.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:29:04.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:29:04.601 [DEBUG] [Thread-119912] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:29:08.128 [DEBUG] [Thread-119914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:23.186 [DEBUG] [Thread-119915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:34.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:29:34.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:29:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:29:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 29, 31), 24.81, 18.89, 0.0, 17.89, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:29:35.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:29:31
2025-12-03T16:29:35.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:29:35.571 [DEBUG] [Thread-119916] [transport.py] [_log()] starting thread (client mode): 0xa2760070
2025-12-03T16:29:35.571 [DEBUG] [Thread-119916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:29:35.592 [DEBUG] [Thread-119916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:29:35.592 [INFO] [Thread-119916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:35.593 [DEBUG] [Thread-119916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] client lang: <none>
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] server lang: <none>
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] kex follows: False
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] Compression: none
2025-12-03T16:29:35.594 [DEBUG] [Thread-119916] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:29:35.614 [DEBUG] [Thread-119916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:29:35.615 [DEBUG] [Thread-119916] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:29:35.615 [DEBUG] [Thread-119916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:29:35.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:29:35.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:29:35.617 [DEBUG] [Thread-119916] [transport.py] [_log()] userauth is OK
2025-12-03T16:29:35.617 [DEBUG] [Thread-119916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:29:35.617 [DEBUG] [Thread-119916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:29:35.617 [DEBUG] [Thread-119916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:29:35.617 [DEBUG] [Thread-119916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:29:35.631 [INFO] [Thread-119916] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:29:35.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:29:36.274 [DEBUG] [Thread-119916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:29:36.274 [DEBUG] [Thread-119916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:29:36.275 [DEBUG] [Thread-119916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:29:36.315 [DEBUG] [Thread-119916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:29:36.315 [DEBUG] [Thread-119916] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:29:36.319 [DEBUG] [Thread-119916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:29:36.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:29:36.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:29:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:29:36.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:29:36.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:29:36.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:29:36.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:29:36.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.603520 -999.00  +21.30   7.33     24   +0.30 1 1 1 1 1   888    0 21.16 -17.23 ----- 7.3 7.3 144.2 14.6 27.3 -29.2 27.6 -28.8 29.3 -26.8 29.6 -28.8
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.603520
2025-12-03T16:29:36.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:29:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:29:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:29:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:29:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:29:36.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:29:31', tmtdew=24.81, humidity=18.89, cloud=0.0, wind=17.89, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:29:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:29:36.345 [DEBUG] [Thread-119916] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:29:36.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:29:36.440 [DEBUG] [Thread-119919] [transport.py] [_log()] starting thread (client mode): 0xa2763df0
2025-12-03T16:29:36.440 [DEBUG] [Thread-119919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:29:36.455 [DEBUG] [Thread-119919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:29:36.455 [INFO] [Thread-119919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:29:36.463 [DEBUG] [Thread-119919] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:29:36.463 [DEBUG] [Thread-119919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:29:36.463 [DEBUG] [Thread-119919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] client lang: <none>
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] server lang: <none>
2025-12-03T16:29:36.464 [DEBUG] [Thread-119919] [transport.py] [_log()] kex follows: False
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] Compression: none
2025-12-03T16:29:36.465 [DEBUG] [Thread-119919] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:29:36.523 [DEBUG] [Thread-119919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:29:36.523 [DEBUG] [Thread-119919] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:29:36.524 [DEBUG] [Thread-119919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:29:36.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:29:36.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:29:36.582 [DEBUG] [Thread-119919] [transport.py] [_log()] userauth is OK
2025-12-03T16:29:36.582 [DEBUG] [Thread-119919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:29:36.583 [DEBUG] [Thread-119919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:29:36.583 [DEBUG] [Thread-119919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:29:36.583 [DEBUG] [Thread-119919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:29:36.602 [INFO] [Thread-119919] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:29:36.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:29:36.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:29:37.431 [DEBUG] [Thread-119919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:29:37.432 [DEBUG] [Thread-119919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:29:37.450 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:37.452 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:37.480 [DEBUG] [Thread-119919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:29:37.480 [DEBUG] [Thread-119919] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:29:37.490 [DEBUG] [Thread-119919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:29:37.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:29:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:29:37.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:29:37.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:29:37.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:29:37.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:29:37.528 [DEBUG] [Thread-119919] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:29:38.226 [DEBUG] [Thread-119921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:53.263 [DEBUG] [Thread-119922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:29:55.603 [DEBUG] [Thread-119923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:07.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:30:07.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:30:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:30:08.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 30, 3), 24.8, 18.85, 0.0, 12.58, 21.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:30:08.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:30:03
2025-12-03T16:30:08.291 [DEBUG] [Thread-119924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:08.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:30:08.507 [DEBUG] [Thread-119925] [transport.py] [_log()] starting thread (client mode): 0xa51d1390
2025-12-03T16:30:08.507 [DEBUG] [Thread-119925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:30:08.526 [DEBUG] [Thread-119925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:30:08.526 [INFO] [Thread-119925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] client lang: <none>
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] server lang: <none>
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] kex follows: False
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] Compression: none
2025-12-03T16:30:08.528 [DEBUG] [Thread-119925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:30:08.537 [DEBUG] [Thread-119925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:30:08.537 [DEBUG] [Thread-119925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:30:08.537 [DEBUG] [Thread-119925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:30:08.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:30:08.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:30:08.539 [DEBUG] [Thread-119925] [transport.py] [_log()] userauth is OK
2025-12-03T16:30:08.539 [DEBUG] [Thread-119925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:30:08.539 [DEBUG] [Thread-119925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:30:08.539 [DEBUG] [Thread-119925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:30:08.539 [DEBUG] [Thread-119925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:30:08.555 [INFO] [Thread-119925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:30:08.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:30:09.157 [DEBUG] [Thread-119925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:30:09.157 [DEBUG] [Thread-119925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:30:09.158 [DEBUG] [Thread-119925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:30:09.198 [DEBUG] [Thread-119925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:30:09.198 [DEBUG] [Thread-119925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:30:09.201 [DEBUG] [Thread-119925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:30:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:30:09.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:30:09.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:30:09.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:30:09.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:30:09.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:30:09.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:30:09.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:30:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:30:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.603868 -999.00  +21.50  19.35     24   +0.50 1 1 1 1 1   888    0 20.18 -17.54 ----- 19.4 19.4 165.2 22.0 27.4 -29.3 27.6 -29.5 29.3 -29.1 29.6 -30.4
2025-12-03T16:30:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:30:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:30:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.603868
2025-12-03T16:30:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:30:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:30:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:30:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:30:09.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:30:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:30:03', tmtdew=24.8, humidity=18.85, cloud=0.0, wind=12.58, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:29:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:30:09.229 [DEBUG] [Thread-119925] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:30:09.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:30:23.325 [DEBUG] [Thread-119928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:37.593 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:37.594 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:38.378 [DEBUG] [Thread-119929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:53.416 [DEBUG] [Thread-119930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:30:55.654 [DEBUG] [Thread-119931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:08.445 [DEBUG] [Thread-119932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:23.478 [DEBUG] [Thread-119933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:37.734 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:37.735 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:38.515 [DEBUG] [Thread-119934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:53.546 [DEBUG] [Thread-119935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:31:55.688 [DEBUG] [Thread-119936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:08.582 [DEBUG] [Thread-119937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:21.398 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T16:32:23.615 [DEBUG] [Thread-119938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:37.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:37.885 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:38.647 [DEBUG] [Thread-119939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:51.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:32:51.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:32:51.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:32:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 32, 44), 24.46, 19.09, 0.0, 14.35, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:32:52.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:32:44
2025-12-03T16:32:52.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:32:52.378 [DEBUG] [Thread-119940] [transport.py] [_log()] starting thread (client mode): 0xa517fa00
2025-12-03T16:32:52.378 [DEBUG] [Thread-119940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:32:52.398 [DEBUG] [Thread-119940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:32:52.398 [INFO] [Thread-119940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] client lang: <none>
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] server lang: <none>
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] kex follows: False
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] Compression: none
2025-12-03T16:32:52.401 [DEBUG] [Thread-119940] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:32:52.419 [DEBUG] [Thread-119940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:32:52.420 [DEBUG] [Thread-119940] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:32:52.420 [DEBUG] [Thread-119940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:32:52.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:32:52.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:32:52.422 [DEBUG] [Thread-119940] [transport.py] [_log()] userauth is OK
2025-12-03T16:32:52.422 [DEBUG] [Thread-119940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:32:52.422 [DEBUG] [Thread-119940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:32:52.422 [DEBUG] [Thread-119940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:32:52.422 [DEBUG] [Thread-119940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:32:52.437 [INFO] [Thread-119940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:32:52.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:32:53.018 [DEBUG] [Thread-119940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:32:53.019 [DEBUG] [Thread-119940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:32:53.019 [DEBUG] [Thread-119940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:32:53.060 [DEBUG] [Thread-119940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:32:53.060 [DEBUG] [Thread-119940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:32:53.062 [DEBUG] [Thread-119940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:32:53.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:32:53.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:32:53.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:32:53.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:32:53.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:32:53.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:32:53.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.605951 -999.00  +21.60   9.52     24   +0.60 1 1 1 1 1   888    0 20.72 -20.70 ----- 9.5 9.5 186.0 13.4 27.8 -30.4 27.6 -30.0 29.7 -27.9 30.0 -30.0
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.605951
2025-12-03T16:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:32:53.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:32:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:32:44', tmtdew=24.46, humidity=19.09, cloud=0.0, wind=14.35, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:32:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:32:53.088 [DEBUG] [Thread-119940] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:32:53.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:32:53.184 [DEBUG] [Thread-119943] [transport.py] [_log()] starting thread (client mode): 0xa517fb50
2025-12-03T16:32:53.184 [DEBUG] [Thread-119943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:32:53.198 [DEBUG] [Thread-119943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:32:53.198 [INFO] [Thread-119943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:32:53.206 [DEBUG] [Thread-119943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] client lang: <none>
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] server lang: <none>
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] kex follows: False
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] Compression: none
2025-12-03T16:32:53.207 [DEBUG] [Thread-119943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:32:53.265 [DEBUG] [Thread-119943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:32:53.265 [DEBUG] [Thread-119943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:32:53.266 [DEBUG] [Thread-119943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:32:53.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:32:53.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:32:53.322 [DEBUG] [Thread-119943] [transport.py] [_log()] userauth is OK
2025-12-03T16:32:53.322 [DEBUG] [Thread-119943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:32:53.322 [DEBUG] [Thread-119943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:32:53.322 [DEBUG] [Thread-119943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:32:53.322 [DEBUG] [Thread-119943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:32:53.340 [INFO] [Thread-119943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:32:53.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:32:53.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:32:53.684 [DEBUG] [Thread-119945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:32:54.149 [DEBUG] [Thread-119943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:32:54.149 [DEBUG] [Thread-119943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:32:54.198 [DEBUG] [Thread-119943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:32:54.198 [DEBUG] [Thread-119943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:32:54.207 [DEBUG] [Thread-119943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:32:54.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:32:54.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:32:54.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:32:54.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:32:54.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:32:54.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:32:54.242 [DEBUG] [Thread-119943] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:32:55.736 [DEBUG] [Thread-119946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:08.733 [DEBUG] [Thread-119947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:23.767 [DEBUG] [Thread-119948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:24.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:33:24.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:33:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:33:24.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 33, 16), 24.54, 18.97, 0.0, 13.75, 21.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:33:24.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:33:16
2025-12-03T16:33:25.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:33:25.203 [DEBUG] [Thread-119949] [transport.py] [_log()] starting thread (client mode): 0xa2761870
2025-12-03T16:33:25.203 [DEBUG] [Thread-119949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:33:25.216 [DEBUG] [Thread-119949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:33:25.216 [INFO] [Thread-119949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] client lang: <none>
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] server lang: <none>
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] kex follows: False
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] Compression: none
2025-12-03T16:33:25.219 [DEBUG] [Thread-119949] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:33:25.233 [DEBUG] [Thread-119949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:33:25.233 [DEBUG] [Thread-119949] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:33:25.234 [DEBUG] [Thread-119949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:33:25.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:33:25.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:33:25.236 [DEBUG] [Thread-119949] [transport.py] [_log()] userauth is OK
2025-12-03T16:33:25.237 [DEBUG] [Thread-119949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:33:25.237 [DEBUG] [Thread-119949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:33:25.237 [DEBUG] [Thread-119949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:33:25.237 [DEBUG] [Thread-119949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:33:25.260 [INFO] [Thread-119949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:33:25.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:33:25.862 [DEBUG] [Thread-119949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:33:25.862 [DEBUG] [Thread-119949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:33:25.863 [DEBUG] [Thread-119949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:33:25.903 [DEBUG] [Thread-119949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:33:25.904 [DEBUG] [Thread-119949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:33:25.906 [DEBUG] [Thread-119949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:33:25.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:33:25.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:33:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:33:25.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:33:25.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:33:25.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:33:25.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:33:25.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:33:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:33:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.606298 -999.00  +21.60  12.72     24   +0.60 1 1 1 1 1   888    0 20.26 -21.02 ----- 12.7 12.7 194.4 18.6 27.7 -30.8 27.6 -32.7 29.5 -28.7 29.9 -30.6
2025-12-03T16:33:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:33:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:33:25.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.606298
2025-12-03T16:33:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:33:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:33:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:33:25.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:33:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:33:25.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:33:16', tmtdew=24.54, humidity=18.97, cloud=0.0, wind=13.75, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:33:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:33:25.927 [DEBUG] [Thread-119949] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:33:26.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:33:26.022 [DEBUG] [Thread-119952] [transport.py] [_log()] starting thread (client mode): 0xa27cb820
2025-12-03T16:33:26.023 [DEBUG] [Thread-119952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:33:26.038 [DEBUG] [Thread-119952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:33:26.038 [INFO] [Thread-119952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] client lang: <none>
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] server lang: <none>
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] kex follows: False
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:33:26.046 [DEBUG] [Thread-119952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:33:26.047 [DEBUG] [Thread-119952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:33:26.047 [DEBUG] [Thread-119952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:33:26.047 [DEBUG] [Thread-119952] [transport.py] [_log()] Compression: none
2025-12-03T16:33:26.047 [DEBUG] [Thread-119952] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:33:26.106 [DEBUG] [Thread-119952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:33:26.106 [DEBUG] [Thread-119952] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:33:26.107 [DEBUG] [Thread-119952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:33:26.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:33:26.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:33:26.165 [DEBUG] [Thread-119952] [transport.py] [_log()] userauth is OK
2025-12-03T16:33:26.165 [DEBUG] [Thread-119952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:33:26.166 [DEBUG] [Thread-119952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:33:26.166 [DEBUG] [Thread-119952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:33:26.166 [DEBUG] [Thread-119952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:33:26.185 [INFO] [Thread-119952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:33:26.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:33:26.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:33:27.047 [DEBUG] [Thread-119952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:33:27.048 [DEBUG] [Thread-119952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:33:27.096 [DEBUG] [Thread-119952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:33:27.097 [DEBUG] [Thread-119952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:33:27.108 [DEBUG] [Thread-119952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:33:27.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:33:27.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:33:27.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:33:27.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:33:27.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:33:27.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:33:27.145 [DEBUG] [Thread-119952] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:33:38.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:38.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:38.803 [DEBUG] [Thread-119954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:53.842 [DEBUG] [Thread-119955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:55.770 [DEBUG] [Thread-119956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:33:57.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:33:57.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:33:57.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:33:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 33, 48), 24.36, 19.22, 0.0, 11.72, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:33:57.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:33:48
2025-12-03T16:33:57.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:33:58.118 [DEBUG] [Thread-119957] [transport.py] [_log()] starting thread (client mode): 0xa51d0880
2025-12-03T16:33:58.118 [DEBUG] [Thread-119957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:33:58.136 [DEBUG] [Thread-119957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:33:58.136 [INFO] [Thread-119957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] client lang: <none>
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] server lang: <none>
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] kex follows: False
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:33:58.138 [DEBUG] [Thread-119957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:33:58.139 [DEBUG] [Thread-119957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:33:58.139 [DEBUG] [Thread-119957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:33:58.139 [DEBUG] [Thread-119957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:33:58.139 [DEBUG] [Thread-119957] [transport.py] [_log()] Compression: none
2025-12-03T16:33:58.139 [DEBUG] [Thread-119957] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:33:58.149 [DEBUG] [Thread-119957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:33:58.150 [DEBUG] [Thread-119957] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:33:58.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:33:58.152 [DEBUG] [Thread-119957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:33:58.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:33:58.154 [DEBUG] [Thread-119957] [transport.py] [_log()] userauth is OK
2025-12-03T16:33:58.154 [DEBUG] [Thread-119957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:33:58.154 [DEBUG] [Thread-119957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:33:58.154 [DEBUG] [Thread-119957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:33:58.154 [DEBUG] [Thread-119957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:33:58.176 [INFO] [Thread-119957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:33:58.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:33:58.773 [DEBUG] [Thread-119957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:33:58.773 [DEBUG] [Thread-119957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:33:58.774 [DEBUG] [Thread-119957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:33:58.814 [DEBUG] [Thread-119957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:33:58.814 [DEBUG] [Thread-119957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:33:58.818 [DEBUG] [Thread-119957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:33:58.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:33:58.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:33:58.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:33:58.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:33:58.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:33:58.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:33:58.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:33:58.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.606645 -999.00  +21.60  11.74     24   +0.50 1 1 1 1 1   888    0 20.58 -20.07 ----- 11.7 11.7 203.1 15.8 27.7 -30.7 27.5 -29.6 29.6 -27.9 29.9 -29.6
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.606645
2025-12-03T16:33:58.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:33:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:33:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:33:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:33:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:33:58.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:33:48', tmtdew=24.36, humidity=19.22, cloud=0.0, wind=11.72, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:33:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:33:58.840 [DEBUG] [Thread-119957] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:33:58.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:33:58.935 [DEBUG] [Thread-119960] [transport.py] [_log()] starting thread (client mode): 0xa51d07c0
2025-12-03T16:33:58.935 [DEBUG] [Thread-119960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:33:58.949 [DEBUG] [Thread-119960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:33:58.950 [INFO] [Thread-119960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:33:58.957 [DEBUG] [Thread-119960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:58.958 [DEBUG] [Thread-119960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] client lang: <none>
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] server lang: <none>
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] kex follows: False
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] Compression: none
2025-12-03T16:33:58.959 [DEBUG] [Thread-119960] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:33:59.017 [DEBUG] [Thread-119960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:33:59.018 [DEBUG] [Thread-119960] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:33:59.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:33:59.019 [DEBUG] [Thread-119960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:33:59.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:33:59.073 [DEBUG] [Thread-119960] [transport.py] [_log()] userauth is OK
2025-12-03T16:33:59.074 [DEBUG] [Thread-119960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:33:59.074 [DEBUG] [Thread-119960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:33:59.074 [DEBUG] [Thread-119960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:33:59.074 [DEBUG] [Thread-119960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:33:59.098 [INFO] [Thread-119960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:33:59.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:33:59.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:33:59.927 [DEBUG] [Thread-119960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:33:59.928 [DEBUG] [Thread-119960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:33:59.975 [DEBUG] [Thread-119960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:33:59.975 [DEBUG] [Thread-119960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:33:59.985 [DEBUG] [Thread-119960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:33:59.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:33:59.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:34:00.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:34:00.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:34:00.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:34:00.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:34:00.022 [DEBUG] [Thread-119960] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:34:08.878 [DEBUG] [Thread-119962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:23.928 [DEBUG] [Thread-119963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:34:30.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:34:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:34:30.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 34, 20), 24.63, 18.9, 0.0, 14.75, 21.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:34:30.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:34:20
2025-12-03T16:34:30.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:34:30.958 [DEBUG] [Thread-119964] [transport.py] [_log()] starting thread (client mode): 0xa51d2950
2025-12-03T16:34:30.959 [DEBUG] [Thread-119964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:34:30.975 [DEBUG] [Thread-119964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:34:30.975 [INFO] [Thread-119964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:34:30.976 [DEBUG] [Thread-119964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] client lang: <none>
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] server lang: <none>
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] kex follows: False
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:34:30.977 [DEBUG] [Thread-119964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:34:30.978 [DEBUG] [Thread-119964] [transport.py] [_log()] Compression: none
2025-12-03T16:34:30.978 [DEBUG] [Thread-119964] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:34:30.992 [DEBUG] [Thread-119964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:34:30.992 [DEBUG] [Thread-119964] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:34:30.992 [DEBUG] [Thread-119964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:34:30.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:34:30.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:34:30.994 [DEBUG] [Thread-119964] [transport.py] [_log()] userauth is OK
2025-12-03T16:34:30.995 [DEBUG] [Thread-119964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:34:30.995 [DEBUG] [Thread-119964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:34:30.995 [DEBUG] [Thread-119964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:34:30.995 [DEBUG] [Thread-119964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:34:31.020 [INFO] [Thread-119964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:34:31.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:34:31.601 [DEBUG] [Thread-119964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:34:31.601 [DEBUG] [Thread-119964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:34:31.601 [DEBUG] [Thread-119964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:34:31.642 [DEBUG] [Thread-119964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:34:31.642 [DEBUG] [Thread-119964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:34:31.645 [DEBUG] [Thread-119964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:34:31.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:34:31.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:34:31.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:34:31.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:34:31.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:34:31.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:34:31.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:34:31.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:34:31.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:34:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.606993 -999.00  +21.50   5.36     24   +0.40 1 1 1 1 1   888    0 20.24 -20.92 ----- 5.4 5.4 260.1 17.7 27.6 -32.0 27.6 -29.3 29.6 -27.4 29.9 -29.5
2025-12-03T16:34:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:34:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:34:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.606993
2025-12-03T16:34:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:34:20', tmtdew=24.63, humidity=18.9, cloud=0.0, wind=14.75, temperature=21.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:34:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:34:31.662 [DEBUG] [Thread-119964] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:34:31.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:34:31.758 [DEBUG] [Thread-119967] [transport.py] [_log()] starting thread (client mode): 0xa519b760
2025-12-03T16:34:31.758 [DEBUG] [Thread-119967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:34:31.774 [DEBUG] [Thread-119967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:34:31.774 [INFO] [Thread-119967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:34:31.781 [DEBUG] [Thread-119967] [transport.py] [_log()] client lang: <none>
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] server lang: <none>
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] kex follows: False
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] Compression: none
2025-12-03T16:34:31.782 [DEBUG] [Thread-119967] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:34:31.842 [DEBUG] [Thread-119967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:34:31.843 [DEBUG] [Thread-119967] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:34:31.843 [DEBUG] [Thread-119967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:34:31.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:34:31.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:34:31.902 [DEBUG] [Thread-119967] [transport.py] [_log()] userauth is OK
2025-12-03T16:34:31.902 [DEBUG] [Thread-119967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:34:31.903 [DEBUG] [Thread-119967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:34:31.903 [DEBUG] [Thread-119967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:34:31.903 [DEBUG] [Thread-119967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:34:31.921 [INFO] [Thread-119967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:34:31.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:34:31.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:34:32.764 [DEBUG] [Thread-119967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:34:32.764 [DEBUG] [Thread-119967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:34:32.812 [DEBUG] [Thread-119967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:34:32.812 [DEBUG] [Thread-119967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:34:32.821 [DEBUG] [Thread-119967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:34:32.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:34:32.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:34:32.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:34:32.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:34:32.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:34:32.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:34:32.858 [DEBUG] [Thread-119967] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:34:38.165 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:38.166 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:38.966 [DEBUG] [Thread-119969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:54.014 [DEBUG] [Thread-119970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:34:55.823 [DEBUG] [Thread-119971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:35:02.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:35:02.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:35:03.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 34, 52), 24.46, 19.47, 0.0, 12.3, 21.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:35:03.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:34:52
2025-12-03T16:35:03.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:35:03.817 [DEBUG] [Thread-119972] [transport.py] [_log()] starting thread (client mode): 0xa2778880
2025-12-03T16:35:03.817 [DEBUG] [Thread-119972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:35:03.837 [DEBUG] [Thread-119972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:35:03.837 [INFO] [Thread-119972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:35:03.840 [DEBUG] [Thread-119972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:35:03.840 [DEBUG] [Thread-119972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] client lang: <none>
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] server lang: <none>
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] kex follows: False
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:35:03.841 [DEBUG] [Thread-119972] [transport.py] [_log()] Compression: none
2025-12-03T16:35:03.842 [DEBUG] [Thread-119972] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:35:03.860 [DEBUG] [Thread-119972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:35:03.860 [DEBUG] [Thread-119972] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:35:03.861 [DEBUG] [Thread-119972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:35:03.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:35:03.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:35:03.862 [DEBUG] [Thread-119972] [transport.py] [_log()] userauth is OK
2025-12-03T16:35:03.863 [DEBUG] [Thread-119972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:35:03.863 [DEBUG] [Thread-119972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:35:03.863 [DEBUG] [Thread-119972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:35:03.863 [DEBUG] [Thread-119972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:35:03.888 [INFO] [Thread-119972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:35:03.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:35:04.522 [DEBUG] [Thread-119972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:35:04.522 [DEBUG] [Thread-119972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:35:04.523 [DEBUG] [Thread-119972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:35:04.563 [DEBUG] [Thread-119972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:35:04.563 [DEBUG] [Thread-119972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:35:04.567 [DEBUG] [Thread-119972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:35:04.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:35:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:35:04.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:35:04.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:35:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:35:04.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:35:04.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:35:04.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:35:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:35:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.607340 -999.00  +21.60   5.45     24   +0.60 1 1 1 1 1   888    0 20.55 -22.12 ----- 5.5 5.5 166.2 9.2 27.7 -30.4 27.7 -29.5 29.5 -28.5 30.0 -30.3
2025-12-03T16:35:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:35:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:35:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.607340
2025-12-03T16:35:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:35:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:35:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:35:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:35:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:35:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:34:52', tmtdew=24.46, humidity=19.47, cloud=0.0, wind=12.3, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:34:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:35:04.595 [DEBUG] [Thread-119972] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:35:04.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:35:04.690 [DEBUG] [Thread-119975] [transport.py] [_log()] starting thread (client mode): 0xa2778220
2025-12-03T16:35:04.690 [DEBUG] [Thread-119975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:35:04.705 [DEBUG] [Thread-119975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:35:04.705 [INFO] [Thread-119975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:35:04.714 [DEBUG] [Thread-119975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:35:04.714 [DEBUG] [Thread-119975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:35:04.714 [DEBUG] [Thread-119975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:35:04.714 [DEBUG] [Thread-119975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] client lang: <none>
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] server lang: <none>
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] kex follows: False
2025-12-03T16:35:04.715 [DEBUG] [Thread-119975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] Compression: none
2025-12-03T16:35:04.716 [DEBUG] [Thread-119975] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:35:04.775 [DEBUG] [Thread-119975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:35:04.775 [DEBUG] [Thread-119975] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:35:04.776 [DEBUG] [Thread-119975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:35:04.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:35:04.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:35:04.834 [DEBUG] [Thread-119975] [transport.py] [_log()] userauth is OK
2025-12-03T16:35:04.834 [DEBUG] [Thread-119975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:35:04.834 [DEBUG] [Thread-119975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:35:04.834 [DEBUG] [Thread-119975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:35:04.834 [DEBUG] [Thread-119975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:35:04.853 [INFO] [Thread-119975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:35:04.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:35:04.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:35:05.680 [DEBUG] [Thread-119975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:35:05.680 [DEBUG] [Thread-119975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:35:05.728 [DEBUG] [Thread-119975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:35:05.728 [DEBUG] [Thread-119975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:35:05.737 [DEBUG] [Thread-119975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:35:05.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:35:05.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:35:05.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:35:05.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:35:05.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:35:05.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:35:05.775 [DEBUG] [Thread-119975] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:35:09.044 [DEBUG] [Thread-119977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:24.106 [DEBUG] [Thread-119978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:35:35.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:35:35.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:35:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 35, 24), 24.7, 19.19, 0.0, 14.4, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:35:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:35:24
2025-12-03T16:35:36.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:35:36.750 [DEBUG] [Thread-119979] [transport.py] [_log()] starting thread (client mode): 0xa277b550
2025-12-03T16:35:36.750 [DEBUG] [Thread-119979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:35:36.771 [DEBUG] [Thread-119979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:35:36.771 [INFO] [Thread-119979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] client lang: <none>
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] server lang: <none>
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] kex follows: False
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] Compression: none
2025-12-03T16:35:36.774 [DEBUG] [Thread-119979] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:35:36.790 [DEBUG] [Thread-119979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:35:36.790 [DEBUG] [Thread-119979] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:35:36.790 [DEBUG] [Thread-119979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:35:36.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:35:36.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:35:36.791 [DEBUG] [Thread-119979] [transport.py] [_log()] userauth is OK
2025-12-03T16:35:36.791 [DEBUG] [Thread-119979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:35:36.791 [DEBUG] [Thread-119979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:35:36.791 [DEBUG] [Thread-119979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:35:36.791 [DEBUG] [Thread-119979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:35:36.803 [INFO] [Thread-119979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:35:36.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:35:37.419 [DEBUG] [Thread-119979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:35:37.419 [DEBUG] [Thread-119979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:35:37.419 [DEBUG] [Thread-119979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:35:37.460 [DEBUG] [Thread-119979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:35:37.460 [DEBUG] [Thread-119979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:35:37.462 [DEBUG] [Thread-119979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:35:37.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:35:37.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:35:37.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:35:37.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:35:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:35:37.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:35:37.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:35:37.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.607340 -999.00  +21.60   5.45     24   +0.60 1 1 1 1 1   888    0 20.55 -22.12 ----- 5.5 5.5 166.2 9.2 27.7 -30.4 27.7 -29.5 29.5 -28.5 30.0 -30.3
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.607340
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:35:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:35:24', tmtdew=24.7, humidity=19.19, cloud=0.0, wind=14.4, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:34:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:35:37.479 [DEBUG] [Thread-119979] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:35:37.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:35:37.566 [DEBUG] [Thread-119982] [transport.py] [_log()] starting thread (client mode): 0xa277b8e0
2025-12-03T16:35:37.566 [DEBUG] [Thread-119982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:35:37.580 [DEBUG] [Thread-119982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:35:37.580 [INFO] [Thread-119982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] client lang: <none>
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] server lang: <none>
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] kex follows: False
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] Compression: none
2025-12-03T16:35:37.588 [DEBUG] [Thread-119982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:35:37.644 [DEBUG] [Thread-119982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:35:37.644 [DEBUG] [Thread-119982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:35:37.644 [DEBUG] [Thread-119982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:35:37.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:35:37.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:35:37.702 [DEBUG] [Thread-119982] [transport.py] [_log()] userauth is OK
2025-12-03T16:35:37.702 [DEBUG] [Thread-119982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:35:37.702 [DEBUG] [Thread-119982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:35:37.702 [DEBUG] [Thread-119982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:35:37.702 [DEBUG] [Thread-119982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:35:37.715 [INFO] [Thread-119982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:35:37.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:35:37.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:35:38.305 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:38.306 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:38.535 [DEBUG] [Thread-119982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:35:38.535 [DEBUG] [Thread-119982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:35:38.583 [DEBUG] [Thread-119982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:35:38.583 [DEBUG] [Thread-119982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:35:38.592 [DEBUG] [Thread-119982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:35:38.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:35:38.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:35:38.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:35:38.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:35:38.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:35:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:35:38.630 [DEBUG] [Thread-119982] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:35:39.137 [DEBUG] [Thread-119984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:54.179 [DEBUG] [Thread-119985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:35:55.883 [DEBUG] [Thread-119986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:08.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:36:08.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:36:08.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:36:09.212 [DEBUG] [Thread-119987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:09.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 35, 56), 24.79, 18.75, 0.0, 25.6, 22.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:36:09.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:35:56
2025-12-03T16:36:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:36:09.588 [DEBUG] [Thread-119988] [transport.py] [_log()] starting thread (client mode): 0xa519b100
2025-12-03T16:36:09.588 [DEBUG] [Thread-119988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:36:09.609 [DEBUG] [Thread-119988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:36:09.609 [INFO] [Thread-119988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] client lang: <none>
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] server lang: <none>
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] kex follows: False
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] Compression: none
2025-12-03T16:36:09.612 [DEBUG] [Thread-119988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:36:09.629 [DEBUG] [Thread-119988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:36:09.629 [DEBUG] [Thread-119988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:36:09.630 [DEBUG] [Thread-119988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:36:09.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:36:09.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:36:09.631 [DEBUG] [Thread-119988] [transport.py] [_log()] userauth is OK
2025-12-03T16:36:09.632 [DEBUG] [Thread-119988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:36:09.632 [DEBUG] [Thread-119988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:36:09.632 [DEBUG] [Thread-119988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:36:09.632 [DEBUG] [Thread-119988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:36:09.650 [INFO] [Thread-119988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:36:09.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:36:10.221 [DEBUG] [Thread-119988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:36:10.221 [DEBUG] [Thread-119988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:36:10.221 [DEBUG] [Thread-119988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:36:10.262 [DEBUG] [Thread-119988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:36:10.263 [DEBUG] [Thread-119988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:36:10.265 [DEBUG] [Thread-119988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:36:10.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:36:10.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:36:10.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:36:10.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:36:10.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:36:10.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:36:10.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:36:10.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:36:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:36:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.607687 -999.00  +21.70  13.69     24   +0.60 1 1 1 1 1   888    0 20.44 -22.59 ----- 13.7 13.7 146.6 18.9 27.8 -30.6 27.8 -30.2 29.6 -27.6 29.9 -30.0
2025-12-03T16:36:10.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:36:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:36:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.607687
2025-12-03T16:36:10.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:36:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:36:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:36:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:36:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:36:10.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:35:56', tmtdew=24.79, humidity=18.75, cloud=0.0, wind=25.6, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:35:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:36:10.291 [DEBUG] [Thread-119988] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:36:10.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:36:10.386 [DEBUG] [Thread-119991] [transport.py] [_log()] starting thread (client mode): 0xa27458d0
2025-12-03T16:36:10.386 [DEBUG] [Thread-119991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:36:10.402 [DEBUG] [Thread-119991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:36:10.403 [INFO] [Thread-119991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:36:10.411 [DEBUG] [Thread-119991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:36:10.411 [DEBUG] [Thread-119991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:36:10.411 [DEBUG] [Thread-119991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:36:10.411 [DEBUG] [Thread-119991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] client lang: <none>
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] server lang: <none>
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] kex follows: False
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] Compression: none
2025-12-03T16:36:10.412 [DEBUG] [Thread-119991] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:36:10.470 [DEBUG] [Thread-119991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:36:10.471 [DEBUG] [Thread-119991] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:36:10.471 [DEBUG] [Thread-119991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:36:10.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:36:10.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:36:10.526 [DEBUG] [Thread-119991] [transport.py] [_log()] userauth is OK
2025-12-03T16:36:10.526 [DEBUG] [Thread-119991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:36:10.527 [DEBUG] [Thread-119991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:36:10.527 [DEBUG] [Thread-119991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:36:10.527 [DEBUG] [Thread-119991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:36:10.547 [INFO] [Thread-119991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:36:10.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:36:10.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:36:11.380 [DEBUG] [Thread-119991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:36:11.380 [DEBUG] [Thread-119991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:36:11.428 [DEBUG] [Thread-119991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:36:11.428 [DEBUG] [Thread-119991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:36:11.437 [DEBUG] [Thread-119991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:36:11.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:36:11.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:36:11.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:36:11.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:36:11.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:36:11.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:36:11.474 [DEBUG] [Thread-119991] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:36:24.243 [DEBUG] [Thread-119993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:38.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:38.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:39.294 [DEBUG] [Thread-119994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:41.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:36:41.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:36:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:36:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 36, 28), 24.58, 18.99, 0.0, 23.01, 21.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:36:42.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:36:28
2025-12-03T16:36:42.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:36:42.441 [DEBUG] [Thread-119995] [transport.py] [_log()] starting thread (client mode): 0xa51d2560
2025-12-03T16:36:42.441 [DEBUG] [Thread-119995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:36:42.468 [DEBUG] [Thread-119995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:36:42.469 [INFO] [Thread-119995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:42.471 [DEBUG] [Thread-119995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] client lang: <none>
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] server lang: <none>
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] kex follows: False
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:36:42.472 [DEBUG] [Thread-119995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:36:42.473 [DEBUG] [Thread-119995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:36:42.473 [DEBUG] [Thread-119995] [transport.py] [_log()] Compression: none
2025-12-03T16:36:42.473 [DEBUG] [Thread-119995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:36:42.485 [DEBUG] [Thread-119995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:36:42.485 [DEBUG] [Thread-119995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:36:42.486 [DEBUG] [Thread-119995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:36:42.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:36:42.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:36:42.488 [DEBUG] [Thread-119995] [transport.py] [_log()] userauth is OK
2025-12-03T16:36:42.488 [DEBUG] [Thread-119995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:36:42.488 [DEBUG] [Thread-119995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:36:42.488 [DEBUG] [Thread-119995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:36:42.488 [DEBUG] [Thread-119995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:36:42.513 [INFO] [Thread-119995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:36:42.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:36:43.159 [DEBUG] [Thread-119995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:36:43.160 [DEBUG] [Thread-119995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:36:43.160 [DEBUG] [Thread-119995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:36:43.201 [DEBUG] [Thread-119995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:36:43.201 [DEBUG] [Thread-119995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:36:43.204 [DEBUG] [Thread-119995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:36:43.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:36:43.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:36:43.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:36:43.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:36:43.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:36:43.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:36:43.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:36:43.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.608381 -999.00  +21.70  17.08     24   +0.50 1 1 1 1 1   888    0 20.70 -20.13 ----- 17.1 17.1 160.7 20.3 27.7 -31.5 27.7 -29.9 29.4 -29.1 29.8 -31.0
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.608381
2025-12-03T16:36:43.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:36:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:36:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:36:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:36:43.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:36:43.228 [DEBUG] [Thread-119995] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:36:43.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:36:28', tmtdew=24.58, humidity=18.99, cloud=0.0, wind=23.01, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:36:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:36:43.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:36:43.324 [DEBUG] [Thread-119998] [transport.py] [_log()] starting thread (client mode): 0xa51d2fb0
2025-12-03T16:36:43.324 [DEBUG] [Thread-119998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:36:43.338 [DEBUG] [Thread-119998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:36:43.338 [INFO] [Thread-119998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:36:43.346 [DEBUG] [Thread-119998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] client lang: <none>
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] server lang: <none>
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] kex follows: False
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] Compression: none
2025-12-03T16:36:43.347 [DEBUG] [Thread-119998] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:36:43.402 [DEBUG] [Thread-119998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:36:43.403 [DEBUG] [Thread-119998] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:36:43.403 [DEBUG] [Thread-119998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:36:43.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:36:43.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:36:43.458 [DEBUG] [Thread-119998] [transport.py] [_log()] userauth is OK
2025-12-03T16:36:43.459 [DEBUG] [Thread-119998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:36:43.459 [DEBUG] [Thread-119998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:36:43.459 [DEBUG] [Thread-119998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:36:43.459 [DEBUG] [Thread-119998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:36:43.478 [INFO] [Thread-119998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:36:43.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:36:43.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:36:44.298 [DEBUG] [Thread-119998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:36:44.299 [DEBUG] [Thread-119998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:36:44.346 [DEBUG] [Thread-119998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:36:44.346 [DEBUG] [Thread-119998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:36:44.355 [DEBUG] [Thread-119998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:36:44.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:36:44.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:36:44.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:36:44.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:36:44.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:36:44.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:36:44.391 [DEBUG] [Thread-119998] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:36:54.326 [DEBUG] [Thread-120000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:36:55.913 [DEBUG] [Thread-120001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:09.366 [DEBUG] [Thread-120002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:14.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:37:14.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:37:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:37:15.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 37), 24.71, 19.02, 0.0, 18.61, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:37:15.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:37:00
2025-12-03T16:37:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:37:15.354 [DEBUG] [Thread-120003] [transport.py] [_log()] starting thread (client mode): 0xa51d0e50
2025-12-03T16:37:15.354 [DEBUG] [Thread-120003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:37:15.373 [DEBUG] [Thread-120003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:37:15.373 [INFO] [Thread-120003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:15.376 [DEBUG] [Thread-120003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] client lang: <none>
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] server lang: <none>
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] kex follows: False
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] Compression: none
2025-12-03T16:37:15.377 [DEBUG] [Thread-120003] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:37:15.393 [DEBUG] [Thread-120003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:37:15.394 [DEBUG] [Thread-120003] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:37:15.394 [DEBUG] [Thread-120003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:37:15.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:37:15.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:37:15.396 [DEBUG] [Thread-120003] [transport.py] [_log()] userauth is OK
2025-12-03T16:37:15.396 [DEBUG] [Thread-120003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:37:15.397 [DEBUG] [Thread-120003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:37:15.397 [DEBUG] [Thread-120003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:37:15.397 [DEBUG] [Thread-120003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:37:15.423 [INFO] [Thread-120003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:37:15.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:37:16.050 [DEBUG] [Thread-120003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:37:16.050 [DEBUG] [Thread-120003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:37:16.050 [DEBUG] [Thread-120003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:37:16.091 [DEBUG] [Thread-120003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:37:16.091 [DEBUG] [Thread-120003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:37:16.094 [DEBUG] [Thread-120003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:37:16.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:37:16.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:37:16.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:37:16.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:37:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:37:16.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:37:16.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:37:16.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:37:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:37:16.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.608729 -999.00  +21.60   9.19     24   +0.40 1 1 1 1 1   888    0 20.39 -19.21 ----- 9.2 9.2 156.8 15.7 27.7 -30.4 27.6 -29.5 29.4 -27.9 29.9 -29.3
2025-12-03T16:37:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:37:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:37:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.608729
2025-12-03T16:37:16.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:37:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:37:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:37:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:37:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:37:16.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:37:00', tmtdew=24.71, humidity=19.02, cloud=0.0, wind=18.61, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:36:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:37:16.122 [DEBUG] [Thread-120003] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:37:16.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:37:16.228 [DEBUG] [Thread-120006] [transport.py] [_log()] starting thread (client mode): 0xa2779210
2025-12-03T16:37:16.229 [DEBUG] [Thread-120006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:37:16.246 [DEBUG] [Thread-120006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:37:16.246 [INFO] [Thread-120006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:37:16.253 [DEBUG] [Thread-120006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] client lang: <none>
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] server lang: <none>
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] kex follows: False
2025-12-03T16:37:16.254 [DEBUG] [Thread-120006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] Compression: none
2025-12-03T16:37:16.255 [DEBUG] [Thread-120006] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:37:16.311 [DEBUG] [Thread-120006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:37:16.311 [DEBUG] [Thread-120006] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:37:16.312 [DEBUG] [Thread-120006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:37:16.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:37:16.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:37:16.367 [DEBUG] [Thread-120006] [transport.py] [_log()] userauth is OK
2025-12-03T16:37:16.367 [DEBUG] [Thread-120006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:37:16.367 [DEBUG] [Thread-120006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:37:16.367 [DEBUG] [Thread-120006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:37:16.367 [DEBUG] [Thread-120006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:37:16.386 [INFO] [Thread-120006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:37:16.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:37:16.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:37:17.252 [DEBUG] [Thread-120006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:37:17.252 [DEBUG] [Thread-120006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:37:17.300 [DEBUG] [Thread-120006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:37:17.300 [DEBUG] [Thread-120006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:37:17.310 [DEBUG] [Thread-120006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:37:17.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:37:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:37:17.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:37:17.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:37:17.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:37:17.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:37:17.346 [DEBUG] [Thread-120006] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:37:24.403 [DEBUG] [Thread-120008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:38.587 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:38.588 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:39.460 [DEBUG] [Thread-120009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:47.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:37:47.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:37:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:37:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 37, 32), 24.61, 19.13, 0.0, 18.32, 21.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:37:48.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:37:32
2025-12-03T16:37:48.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:37:48.301 [DEBUG] [Thread-120010] [transport.py] [_log()] starting thread (client mode): 0xa51d0790
2025-12-03T16:37:48.301 [DEBUG] [Thread-120010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:37:48.321 [DEBUG] [Thread-120010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:37:48.321 [INFO] [Thread-120010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] client lang: <none>
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] server lang: <none>
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] kex follows: False
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] Compression: none
2025-12-03T16:37:48.325 [DEBUG] [Thread-120010] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:37:48.341 [DEBUG] [Thread-120010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:37:48.342 [DEBUG] [Thread-120010] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:37:48.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:37:48.342 [DEBUG] [Thread-120010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:37:48.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:37:48.344 [DEBUG] [Thread-120010] [transport.py] [_log()] userauth is OK
2025-12-03T16:37:48.344 [DEBUG] [Thread-120010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:37:48.344 [DEBUG] [Thread-120010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:37:48.344 [DEBUG] [Thread-120010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:37:48.344 [DEBUG] [Thread-120010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:37:48.368 [INFO] [Thread-120010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:37:48.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:37:48.981 [DEBUG] [Thread-120010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:37:48.982 [DEBUG] [Thread-120010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:37:48.982 [DEBUG] [Thread-120010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:37:49.022 [DEBUG] [Thread-120010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:37:49.023 [DEBUG] [Thread-120010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:37:49.027 [DEBUG] [Thread-120010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:37:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:37:49.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:37:49.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:37:49.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:37:49.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:37:49.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:37:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:37:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:37:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:37:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.609076 -999.00  +21.50  13.39     24   +0.60 1 1 1 1 1   888    0 20.42 -19.12 ----- 13.4 13.4 155.9 15.3 27.8 -31.0 27.7 -30.2 29.4 -29.2 29.9 -30.9
2025-12-03T16:37:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:37:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:37:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.609076
2025-12-03T16:37:49.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:37:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:37:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:37:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:37:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:37:49.055 [DEBUG] [Thread-120010] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:37:49.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:37:32', tmtdew=24.61, humidity=19.13, cloud=0.0, wind=18.32, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:37:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:37:49.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:37:49.152 [DEBUG] [Thread-120013] [transport.py] [_log()] starting thread (client mode): 0xa2747100
2025-12-03T16:37:49.152 [DEBUG] [Thread-120013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:37:49.166 [DEBUG] [Thread-120013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:37:49.166 [INFO] [Thread-120013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] client lang: <none>
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] server lang: <none>
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] kex follows: False
2025-12-03T16:37:49.174 [DEBUG] [Thread-120013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] Compression: none
2025-12-03T16:37:49.175 [DEBUG] [Thread-120013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:37:49.231 [DEBUG] [Thread-120013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:37:49.232 [DEBUG] [Thread-120013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:37:49.232 [DEBUG] [Thread-120013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:37:49.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:37:49.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:37:49.287 [DEBUG] [Thread-120013] [transport.py] [_log()] userauth is OK
2025-12-03T16:37:49.288 [DEBUG] [Thread-120013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:37:49.288 [DEBUG] [Thread-120013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:37:49.288 [DEBUG] [Thread-120013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:37:49.288 [DEBUG] [Thread-120013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:37:49.309 [INFO] [Thread-120013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:37:49.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:37:49.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:37:50.147 [DEBUG] [Thread-120013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:37:50.147 [DEBUG] [Thread-120013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:37:50.195 [DEBUG] [Thread-120013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:37:50.195 [DEBUG] [Thread-120013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:37:50.204 [DEBUG] [Thread-120013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:37:50.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:37:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:37:50.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:37:50.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:37:50.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:37:50.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:37:50.239 [DEBUG] [Thread-120013] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:37:54.494 [DEBUG] [Thread-120015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:37:55.960 [DEBUG] [Thread-120016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:09.540 [DEBUG] [Thread-120017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:20.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:38:20.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:38:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:38:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 38, 5), 24.7, 19.04, 0.0, 24.52, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:38:20.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:38:05
2025-12-03T16:38:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:38:21.202 [DEBUG] [Thread-120018] [transport.py] [_log()] starting thread (client mode): 0xa27479a0
2025-12-03T16:38:21.202 [DEBUG] [Thread-120018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:38:21.221 [DEBUG] [Thread-120018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:38:21.221 [INFO] [Thread-120018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] client lang: <none>
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] server lang: <none>
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] kex follows: False
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] Compression: none
2025-12-03T16:38:21.225 [DEBUG] [Thread-120018] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:38:21.243 [DEBUG] [Thread-120018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:38:21.243 [DEBUG] [Thread-120018] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:38:21.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:38:21.244 [DEBUG] [Thread-120018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:38:21.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:38:21.246 [DEBUG] [Thread-120018] [transport.py] [_log()] userauth is OK
2025-12-03T16:38:21.246 [DEBUG] [Thread-120018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:38:21.246 [DEBUG] [Thread-120018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:38:21.246 [DEBUG] [Thread-120018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:38:21.247 [DEBUG] [Thread-120018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:38:21.282 [INFO] [Thread-120018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:38:21.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:38:21.910 [DEBUG] [Thread-120018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:38:21.910 [DEBUG] [Thread-120018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:38:21.910 [DEBUG] [Thread-120018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:38:21.952 [DEBUG] [Thread-120018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:38:21.952 [DEBUG] [Thread-120018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:38:21.954 [DEBUG] [Thread-120018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:38:21.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:38:21.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:38:21.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:38:21.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:38:21.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:38:21.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:38:21.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:38:21.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:38:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:38:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.609423 -999.00  +21.70  16.91     24   +0.70 1 1 1 1 1   888    0 20.33 -19.99 ----- 16.9 16.9 146.2 20.7 27.8 -30.3 27.8 -29.5 29.5 -27.5 30.0 -29.2
2025-12-03T16:38:21.975 [DEBUG] [Thread-120018] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:38:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:38:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:38:21.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.609423
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:38:21.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:38:05', tmtdew=24.7, humidity=19.04, cloud=0.0, wind=24.52, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:37:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:38:22.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:38:22.076 [DEBUG] [Thread-120021] [transport.py] [_log()] starting thread (client mode): 0xa2745e40
2025-12-03T16:38:22.076 [DEBUG] [Thread-120021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:38:22.094 [DEBUG] [Thread-120021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:38:22.094 [INFO] [Thread-120021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:38:22.105 [DEBUG] [Thread-120021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] client lang: <none>
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] server lang: <none>
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] kex follows: False
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] Compression: none
2025-12-03T16:38:22.106 [DEBUG] [Thread-120021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:38:22.165 [DEBUG] [Thread-120021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:38:22.166 [DEBUG] [Thread-120021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:38:22.166 [DEBUG] [Thread-120021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:38:22.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:38:22.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:38:22.231 [DEBUG] [Thread-120021] [transport.py] [_log()] userauth is OK
2025-12-03T16:38:22.231 [DEBUG] [Thread-120021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:38:22.231 [DEBUG] [Thread-120021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:38:22.231 [DEBUG] [Thread-120021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:38:22.231 [DEBUG] [Thread-120021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:38:22.252 [INFO] [Thread-120021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:38:22.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:38:22.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:38:23.149 [DEBUG] [Thread-120021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:38:23.149 [DEBUG] [Thread-120021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:38:23.197 [DEBUG] [Thread-120021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:38:23.197 [DEBUG] [Thread-120021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:38:23.206 [DEBUG] [Thread-120021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:38:23.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:38:23.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:38:23.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:38:23.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:38:23.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:38:23.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:38:23.243 [DEBUG] [Thread-120021] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:38:24.569 [DEBUG] [Thread-120023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:38.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:38.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:39.627 [DEBUG] [Thread-120024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:53.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:38:53.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:38:53.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:38:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 38, 37), 24.77, 19.02, 0.0, 27.56, 22.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:38:53.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:38:37
2025-12-03T16:38:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:38:54.222 [DEBUG] [Thread-120025] [transport.py] [_log()] starting thread (client mode): 0xa517d900
2025-12-03T16:38:54.222 [DEBUG] [Thread-120025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:38:54.250 [DEBUG] [Thread-120025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:38:54.250 [INFO] [Thread-120025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:38:54.251 [DEBUG] [Thread-120025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:38:54.251 [DEBUG] [Thread-120025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:38:54.251 [DEBUG] [Thread-120025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] client lang: <none>
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] server lang: <none>
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] kex follows: False
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:38:54.252 [DEBUG] [Thread-120025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:38:54.253 [DEBUG] [Thread-120025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:38:54.253 [DEBUG] [Thread-120025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:38:54.253 [DEBUG] [Thread-120025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:38:54.253 [DEBUG] [Thread-120025] [transport.py] [_log()] Compression: none
2025-12-03T16:38:54.253 [DEBUG] [Thread-120025] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:38:54.266 [DEBUG] [Thread-120025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:38:54.267 [DEBUG] [Thread-120025] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:38:54.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:38:54.268 [DEBUG] [Thread-120025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:38:54.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:38:54.269 [DEBUG] [Thread-120025] [transport.py] [_log()] userauth is OK
2025-12-03T16:38:54.269 [DEBUG] [Thread-120025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:38:54.270 [DEBUG] [Thread-120025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:38:54.270 [DEBUG] [Thread-120025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:38:54.270 [DEBUG] [Thread-120025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:38:54.290 [INFO] [Thread-120025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:38:54.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:38:54.657 [DEBUG] [Thread-120027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:54.947 [DEBUG] [Thread-120025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:38:54.948 [DEBUG] [Thread-120025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:38:54.948 [DEBUG] [Thread-120025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:38:54.989 [DEBUG] [Thread-120025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:38:54.989 [DEBUG] [Thread-120025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:38:54.991 [DEBUG] [Thread-120025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:38:55.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:38:55.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:38:55.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:38:55.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:38:55.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:38:55.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:38:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:38:55.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.609770 -999.00  +21.80  20.53     24   +0.80 1 1 1 1 1   888    0 20.78 -19.09 ----- 20.5 20.5 146.2 24.2 27.7 -30.7 27.8 -29.6 29.5 -28.8 29.9 -30.3
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.609770
2025-12-03T16:38:55.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:38:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:38:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:38:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:38:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:38:55.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:38:37', tmtdew=24.77, humidity=19.02, cloud=0.0, wind=27.56, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:38:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:38:55.015 [DEBUG] [Thread-120025] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:38:55.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:38:55.109 [DEBUG] [Thread-120029] [transport.py] [_log()] starting thread (client mode): 0xa27447f0
2025-12-03T16:38:55.109 [DEBUG] [Thread-120029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:38:55.124 [DEBUG] [Thread-120029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:38:55.124 [INFO] [Thread-120029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:38:55.131 [DEBUG] [Thread-120029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] client lang: <none>
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] server lang: <none>
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] kex follows: False
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] Compression: none
2025-12-03T16:38:55.132 [DEBUG] [Thread-120029] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:38:55.192 [DEBUG] [Thread-120029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:38:55.192 [DEBUG] [Thread-120029] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:38:55.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:38:55.193 [DEBUG] [Thread-120029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:38:55.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:38:55.247 [DEBUG] [Thread-120029] [transport.py] [_log()] userauth is OK
2025-12-03T16:38:55.248 [DEBUG] [Thread-120029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:38:55.248 [DEBUG] [Thread-120029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:38:55.248 [DEBUG] [Thread-120029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:38:55.248 [DEBUG] [Thread-120029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:38:55.267 [INFO] [Thread-120029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:38:55.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:38:55.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:38:56.008 [DEBUG] [Thread-120031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:38:56.150 [DEBUG] [Thread-120029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:38:56.150 [DEBUG] [Thread-120029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:38:56.198 [DEBUG] [Thread-120029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:38:56.198 [DEBUG] [Thread-120029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:38:56.207 [DEBUG] [Thread-120029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:38:56.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:38:56.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:38:56.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:38:56.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:38:56.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:38:56.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:38:56.242 [DEBUG] [Thread-120029] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:39:09.687 [DEBUG] [Thread-120032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:24.740 [DEBUG] [Thread-120033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:26.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:39:26.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:39:26.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:39:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 39, 9), 24.7, 19.1, 0.0, 25.71, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:39:26.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:39:09
2025-12-03T16:39:27.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:39:27.274 [DEBUG] [Thread-120034] [transport.py] [_log()] starting thread (client mode): 0xa51d1ae0
2025-12-03T16:39:27.274 [DEBUG] [Thread-120034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:39:27.293 [DEBUG] [Thread-120034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:39:27.293 [INFO] [Thread-120034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] client lang: <none>
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] server lang: <none>
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] kex follows: False
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] Compression: none
2025-12-03T16:39:27.297 [DEBUG] [Thread-120034] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:39:27.311 [DEBUG] [Thread-120034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:39:27.311 [DEBUG] [Thread-120034] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:39:27.311 [DEBUG] [Thread-120034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:39:27.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:39:27.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:39:27.313 [DEBUG] [Thread-120034] [transport.py] [_log()] userauth is OK
2025-12-03T16:39:27.313 [DEBUG] [Thread-120034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:39:27.313 [DEBUG] [Thread-120034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:39:27.313 [DEBUG] [Thread-120034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:39:27.313 [DEBUG] [Thread-120034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:39:27.341 [INFO] [Thread-120034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:39:27.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:39:28.004 [DEBUG] [Thread-120034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:39:28.004 [DEBUG] [Thread-120034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:39:28.004 [DEBUG] [Thread-120034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:39:28.046 [DEBUG] [Thread-120034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:39:28.046 [DEBUG] [Thread-120034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:39:28.048 [DEBUG] [Thread-120034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:39:28.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:39:28.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:39:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:39:28.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:39:28.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:39:28.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:39:28.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.610118 -999.00  +22.20  16.80     24   +0.90 1 1 1 1 1   888    0 20.63 -17.68 ----- 16.8 16.8 140.4 25.2 27.7 -30.4 27.8 -30.2 29.4 -28.4 29.9 -29.8
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.610118
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:39:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:39:09', tmtdew=24.7, humidity=19.1, cloud=0.0, wind=25.71, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:38:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:39:28.066 [DEBUG] [Thread-120034] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:39:28.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:39:28.154 [DEBUG] [Thread-120037] [transport.py] [_log()] starting thread (client mode): 0xa2746830
2025-12-03T16:39:28.154 [DEBUG] [Thread-120037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:39:28.168 [DEBUG] [Thread-120037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:39:28.169 [INFO] [Thread-120037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] client lang: <none>
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] server lang: <none>
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] kex follows: False
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:39:28.176 [DEBUG] [Thread-120037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:39:28.177 [DEBUG] [Thread-120037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:39:28.177 [DEBUG] [Thread-120037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:39:28.177 [DEBUG] [Thread-120037] [transport.py] [_log()] Compression: none
2025-12-03T16:39:28.177 [DEBUG] [Thread-120037] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:39:28.234 [DEBUG] [Thread-120037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:39:28.234 [DEBUG] [Thread-120037] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:39:28.234 [DEBUG] [Thread-120037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:39:28.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:39:28.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:39:28.291 [DEBUG] [Thread-120037] [transport.py] [_log()] userauth is OK
2025-12-03T16:39:28.291 [DEBUG] [Thread-120037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:39:28.291 [DEBUG] [Thread-120037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:39:28.291 [DEBUG] [Thread-120037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:39:28.291 [DEBUG] [Thread-120037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:39:28.306 [INFO] [Thread-120037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:39:28.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:39:28.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:39:29.150 [DEBUG] [Thread-120037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:39:29.150 [DEBUG] [Thread-120037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:39:29.198 [DEBUG] [Thread-120037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:39:29.198 [DEBUG] [Thread-120037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:39:29.210 [DEBUG] [Thread-120037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:39:29.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:39:29.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:39:29.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:39:29.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:39:29.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:39:29.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:39:29.241 [DEBUG] [Thread-120037] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:39:38.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:38.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:39.776 [DEBUG] [Thread-120039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:54.823 [DEBUG] [Thread-120040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:56.039 [DEBUG] [Thread-120041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:39:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:39:59.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:39:59.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:39:59.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 39, 41), 24.57, 19.13, 0.0, 25.3, 21.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:39:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:39:41
2025-12-03T16:40:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:40:00.220 [DEBUG] [Thread-120042] [transport.py] [_log()] starting thread (client mode): 0xa2728e20
2025-12-03T16:40:00.220 [DEBUG] [Thread-120042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:40:00.239 [DEBUG] [Thread-120042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:40:00.239 [INFO] [Thread-120042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] client lang: <none>
2025-12-03T16:40:00.242 [DEBUG] [Thread-120042] [transport.py] [_log()] server lang: <none>
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] kex follows: False
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] Compression: none
2025-12-03T16:40:00.243 [DEBUG] [Thread-120042] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:40:00.259 [DEBUG] [Thread-120042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:40:00.259 [DEBUG] [Thread-120042] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:40:00.259 [DEBUG] [Thread-120042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:40:00.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:40:00.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:40:00.261 [DEBUG] [Thread-120042] [transport.py] [_log()] userauth is OK
2025-12-03T16:40:00.262 [DEBUG] [Thread-120042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:40:00.262 [DEBUG] [Thread-120042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:40:00.262 [DEBUG] [Thread-120042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:40:00.262 [DEBUG] [Thread-120042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:40:00.276 [INFO] [Thread-120042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:40:00.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:40:01.044 [DEBUG] [Thread-120042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:40:01.045 [DEBUG] [Thread-120042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:40:01.045 [DEBUG] [Thread-120042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:40:01.085 [DEBUG] [Thread-120042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:40:01.085 [DEBUG] [Thread-120042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:40:01.089 [DEBUG] [Thread-120042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:40:01.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:40:01.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:40:01.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:40:01.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:40:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:40:01.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:40:01.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:40:01.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.610465 -999.00  +22.10  18.91     24   +0.80 1 1 1 1 1   888    0 20.44 -16.15 ----- 18.9 18.9 132.0 26.6 27.6 -30.4 27.7 -30.3 29.3 -28.7 29.8 -30.3
2025-12-03T16:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.610465
2025-12-03T16:40:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:40:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:40:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:40:01.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:40:01.113 [DEBUG] [Thread-120042] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:40:01.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:40:01.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:39:41', tmtdew=24.57, humidity=19.13, cloud=0.0, wind=25.3, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:39:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:40:01.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:40:01.212 [DEBUG] [Thread-120045] [transport.py] [_log()] starting thread (client mode): 0xa517d870
2025-12-03T16:40:01.212 [DEBUG] [Thread-120045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:40:01.230 [DEBUG] [Thread-120045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:40:01.230 [INFO] [Thread-120045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:40:01.238 [DEBUG] [Thread-120045] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] client lang: <none>
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] server lang: <none>
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] kex follows: False
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:40:01.239 [DEBUG] [Thread-120045] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:40:01.240 [DEBUG] [Thread-120045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:40:01.240 [DEBUG] [Thread-120045] [transport.py] [_log()] Compression: none
2025-12-03T16:40:01.240 [DEBUG] [Thread-120045] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:40:01.300 [DEBUG] [Thread-120045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:40:01.301 [DEBUG] [Thread-120045] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:40:01.301 [DEBUG] [Thread-120045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:40:01.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:40:01.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:40:01.360 [DEBUG] [Thread-120045] [transport.py] [_log()] userauth is OK
2025-12-03T16:40:01.360 [DEBUG] [Thread-120045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:40:01.360 [DEBUG] [Thread-120045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:40:01.360 [DEBUG] [Thread-120045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:40:01.360 [DEBUG] [Thread-120045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:40:01.385 [INFO] [Thread-120045] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:40:01.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:40:01.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:40:02.209 [DEBUG] [Thread-120045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:40:02.209 [DEBUG] [Thread-120045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:40:02.258 [DEBUG] [Thread-120045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:40:02.258 [DEBUG] [Thread-120045] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:40:02.267 [DEBUG] [Thread-120045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:40:02.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:40:02.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:40:02.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:40:02.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:40:02.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:40:02.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:40:02.300 [DEBUG] [Thread-120045] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:40:09.851 [DEBUG] [Thread-120047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:24.891 [DEBUG] [Thread-120048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:32.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:40:32.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:40:32.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:40:32.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 40, 13), 24.67, 19.02, 0.0, 25.51, 21.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:40:32.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:40:13
2025-12-03T16:40:33.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:40:33.272 [DEBUG] [Thread-120049] [transport.py] [_log()] starting thread (client mode): 0xa277aad0
2025-12-03T16:40:33.273 [DEBUG] [Thread-120049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:40:33.293 [DEBUG] [Thread-120049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:40:33.293 [INFO] [Thread-120049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:40:33.297 [DEBUG] [Thread-120049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] client lang: <none>
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] server lang: <none>
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] kex follows: False
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] Compression: none
2025-12-03T16:40:33.298 [DEBUG] [Thread-120049] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:40:33.318 [DEBUG] [Thread-120049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:40:33.319 [DEBUG] [Thread-120049] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:40:33.320 [DEBUG] [Thread-120049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:40:33.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:40:33.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:40:33.322 [DEBUG] [Thread-120049] [transport.py] [_log()] userauth is OK
2025-12-03T16:40:33.322 [DEBUG] [Thread-120049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:40:33.322 [DEBUG] [Thread-120049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:40:33.322 [DEBUG] [Thread-120049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:40:33.322 [DEBUG] [Thread-120049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:40:33.336 [INFO] [Thread-120049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:40:33.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:40:33.985 [DEBUG] [Thread-120049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:40:33.985 [DEBUG] [Thread-120049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:40:33.985 [DEBUG] [Thread-120049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:40:34.026 [DEBUG] [Thread-120049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:40:34.027 [DEBUG] [Thread-120049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:40:34.030 [DEBUG] [Thread-120049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:40:34.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:40:34.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:40:34.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:40:34.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:40:34.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:40:34.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:40:34.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:40:34.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:40:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:40:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.610812 -999.00  +22.00  20.95     24   +0.90 1 1 1 1 1   888    0 20.68 -16.08 ----- 20.9 20.9 132.8 29.5 27.5 -30.7 27.7 -30.9 29.3 -28.3 29.6 -30.1
2025-12-03T16:40:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:40:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:40:34.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.610812
2025-12-03T16:40:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:40:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:40:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:40:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:40:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:40:34.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:40:13', tmtdew=24.67, humidity=19.02, cloud=0.0, wind=25.51, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:39:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:40:34.057 [DEBUG] [Thread-120049] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:40:34.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:40:34.152 [DEBUG] [Thread-120052] [transport.py] [_log()] starting thread (client mode): 0xa2729150
2025-12-03T16:40:34.153 [DEBUG] [Thread-120052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:40:34.167 [DEBUG] [Thread-120052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:40:34.168 [INFO] [Thread-120052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] client lang: <none>
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] server lang: <none>
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] kex follows: False
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:40:34.176 [DEBUG] [Thread-120052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:40:34.177 [DEBUG] [Thread-120052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:40:34.177 [DEBUG] [Thread-120052] [transport.py] [_log()] Compression: none
2025-12-03T16:40:34.177 [DEBUG] [Thread-120052] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:40:34.235 [DEBUG] [Thread-120052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:40:34.236 [DEBUG] [Thread-120052] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:40:34.236 [DEBUG] [Thread-120052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:40:34.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:40:34.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:40:34.292 [DEBUG] [Thread-120052] [transport.py] [_log()] userauth is OK
2025-12-03T16:40:34.293 [DEBUG] [Thread-120052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:40:34.293 [DEBUG] [Thread-120052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:40:34.293 [DEBUG] [Thread-120052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:40:34.293 [DEBUG] [Thread-120052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:40:34.312 [INFO] [Thread-120052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:40:34.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:40:34.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:40:35.163 [DEBUG] [Thread-120052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:40:35.164 [DEBUG] [Thread-120052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:40:35.212 [DEBUG] [Thread-120052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:40:35.212 [DEBUG] [Thread-120052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:40:35.221 [DEBUG] [Thread-120052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:40:35.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:40:35.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:40:35.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:40:35.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:40:35.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:40:35.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:40:35.258 [DEBUG] [Thread-120052] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:40:39.006 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:39.007 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:39.923 [DEBUG] [Thread-120054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:54.970 [DEBUG] [Thread-120055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:40:56.089 [DEBUG] [Thread-120056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:41:05.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:41:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:41:05.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 40, 45), 24.57, 19.13, 0.0, 23.08, 21.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:41:05.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:40:45
2025-12-03T16:41:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:41:06.233 [DEBUG] [Thread-120057] [transport.py] [_log()] starting thread (client mode): 0xa2778fd0
2025-12-03T16:41:06.233 [DEBUG] [Thread-120057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:41:06.253 [DEBUG] [Thread-120057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:41:06.253 [INFO] [Thread-120057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:41:06.256 [DEBUG] [Thread-120057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] client lang: <none>
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] server lang: <none>
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] kex follows: False
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] Compression: none
2025-12-03T16:41:06.257 [DEBUG] [Thread-120057] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:41:06.265 [DEBUG] [Thread-120057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:41:06.265 [DEBUG] [Thread-120057] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:41:06.266 [DEBUG] [Thread-120057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:41:06.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:41:06.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:41:06.268 [DEBUG] [Thread-120057] [transport.py] [_log()] userauth is OK
2025-12-03T16:41:06.268 [DEBUG] [Thread-120057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:41:06.268 [DEBUG] [Thread-120057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:41:06.268 [DEBUG] [Thread-120057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:41:06.268 [DEBUG] [Thread-120057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:41:06.300 [INFO] [Thread-120057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:41:06.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:41:07.094 [DEBUG] [Thread-120057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:41:07.094 [DEBUG] [Thread-120057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:41:07.095 [DEBUG] [Thread-120057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:41:07.136 [DEBUG] [Thread-120057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:41:07.136 [DEBUG] [Thread-120057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:41:07.139 [DEBUG] [Thread-120057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:41:07.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:41:07.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:41:07.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:41:07.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:41:07.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:41:07.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:41:07.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:41:07.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.611159 -999.00  +21.90  18.53     24   +0.80 1 1 1 1 1   888    0 20.95 -14.86 ----- 18.5 18.5 120.6 26.8 27.4 -30.2 27.7 -29.8 29.4 -28.4 29.6 -29.6
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.611159
2025-12-03T16:41:07.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:41:07.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:41:07.165 [DEBUG] [Thread-120057] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:41:07.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:41:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:41:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:41:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:40:45', tmtdew=24.57, humidity=19.13, cloud=0.0, wind=23.08, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:40:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:41:07.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:41:07.254 [DEBUG] [Thread-120060] [transport.py] [_log()] starting thread (client mode): 0xa51d3490
2025-12-03T16:41:07.254 [DEBUG] [Thread-120060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:41:07.269 [DEBUG] [Thread-120060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:41:07.269 [INFO] [Thread-120060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:07.277 [DEBUG] [Thread-120060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] client lang: <none>
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] server lang: <none>
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] kex follows: False
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:41:07.278 [DEBUG] [Thread-120060] [transport.py] [_log()] Compression: none
2025-12-03T16:41:07.279 [DEBUG] [Thread-120060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:41:07.335 [DEBUG] [Thread-120060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:41:07.335 [DEBUG] [Thread-120060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:41:07.336 [DEBUG] [Thread-120060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:41:07.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:41:07.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:41:07.392 [DEBUG] [Thread-120060] [transport.py] [_log()] userauth is OK
2025-12-03T16:41:07.392 [DEBUG] [Thread-120060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:41:07.392 [DEBUG] [Thread-120060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:41:07.392 [DEBUG] [Thread-120060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:41:07.392 [DEBUG] [Thread-120060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:41:07.411 [INFO] [Thread-120060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:41:07.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:41:07.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:41:08.299 [DEBUG] [Thread-120060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:41:08.300 [DEBUG] [Thread-120060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:41:08.347 [DEBUG] [Thread-120060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:41:08.347 [DEBUG] [Thread-120060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:41:08.356 [DEBUG] [Thread-120060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:41:08.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:41:08.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:41:08.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:41:08.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:41:08.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:41:08.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:41:08.389 [DEBUG] [Thread-120060] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:41:10.002 [DEBUG] [Thread-120062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:25.047 [DEBUG] [Thread-120063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:38.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:41:38.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:41:38.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:41:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 41, 17), 24.61, 19.05, 0.0, 20.98, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:41:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:41:17
2025-12-03T16:41:39.147 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:39.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:39.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:41:39.377 [DEBUG] [Thread-120064] [transport.py] [_log()] starting thread (client mode): 0xa51d1930
2025-12-03T16:41:39.377 [DEBUG] [Thread-120064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:41:39.398 [DEBUG] [Thread-120064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:41:39.398 [INFO] [Thread-120064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] client lang: <none>
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] server lang: <none>
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] kex follows: False
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:41:39.401 [DEBUG] [Thread-120064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:41:39.402 [DEBUG] [Thread-120064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:41:39.402 [DEBUG] [Thread-120064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:41:39.402 [DEBUG] [Thread-120064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:41:39.402 [DEBUG] [Thread-120064] [transport.py] [_log()] Compression: none
2025-12-03T16:41:39.402 [DEBUG] [Thread-120064] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:41:39.420 [DEBUG] [Thread-120064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:41:39.421 [DEBUG] [Thread-120064] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:41:39.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:41:39.422 [DEBUG] [Thread-120064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:41:39.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:41:39.424 [DEBUG] [Thread-120064] [transport.py] [_log()] userauth is OK
2025-12-03T16:41:39.424 [DEBUG] [Thread-120064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:41:39.424 [DEBUG] [Thread-120064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:41:39.424 [DEBUG] [Thread-120064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:41:39.424 [DEBUG] [Thread-120064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:41:39.450 [INFO] [Thread-120064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:41:39.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:41:40.081 [DEBUG] [Thread-120066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:40.109 [DEBUG] [Thread-120064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:41:40.109 [DEBUG] [Thread-120064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:41:40.110 [DEBUG] [Thread-120064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:41:40.150 [DEBUG] [Thread-120064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:41:40.151 [DEBUG] [Thread-120064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:41:40.154 [DEBUG] [Thread-120064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:41:40.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:41:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:41:40.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:41:40.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:41:40.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:41:40.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:41:40.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:41:40.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.611854 -999.00  +22.10  19.66     24   +0.80 1 1 1 1 1   888    0 20.65 -16.75 ----- 19.7 19.7 161.5 26.0 27.4 -29.9 27.7 -29.8 29.4 -29.3 29.6 -31.1
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.611854
2025-12-03T16:41:40.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:41:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:41:40.180 [DEBUG] [Thread-120064] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:41:40.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:41:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:41:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:41:40.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:41:17', tmtdew=24.61, humidity=19.05, cloud=0.0, wind=20.98, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:41:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:41:40.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:41:40.276 [DEBUG] [Thread-120068] [transport.py] [_log()] starting thread (client mode): 0xa27cb190
2025-12-03T16:41:40.277 [DEBUG] [Thread-120068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:41:40.291 [DEBUG] [Thread-120068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:41:40.291 [INFO] [Thread-120068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:41:40.299 [DEBUG] [Thread-120068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:40.300 [DEBUG] [Thread-120068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] client lang: <none>
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] server lang: <none>
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] kex follows: False
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] Compression: none
2025-12-03T16:41:40.301 [DEBUG] [Thread-120068] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:41:40.356 [DEBUG] [Thread-120068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:41:40.357 [DEBUG] [Thread-120068] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:41:40.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:41:40.358 [DEBUG] [Thread-120068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:41:40.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:41:40.412 [DEBUG] [Thread-120068] [transport.py] [_log()] userauth is OK
2025-12-03T16:41:40.413 [DEBUG] [Thread-120068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:41:40.413 [DEBUG] [Thread-120068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:41:40.413 [DEBUG] [Thread-120068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:41:40.413 [DEBUG] [Thread-120068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:41:40.431 [INFO] [Thread-120068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:41:40.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:41:40.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:41:41.262 [DEBUG] [Thread-120068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:41:41.262 [DEBUG] [Thread-120068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:41:41.310 [DEBUG] [Thread-120068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:41:41.310 [DEBUG] [Thread-120068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:41:41.319 [DEBUG] [Thread-120068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:41:41.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:41:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:41:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:41:41.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:41:41.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:41:41.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:41:41.356 [DEBUG] [Thread-120068] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:41:55.114 [DEBUG] [Thread-120070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:41:56.122 [DEBUG] [Thread-120071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:10.164 [DEBUG] [Thread-120072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:42:11.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:42:11.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:42:12.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 41, 49), 24.45, 19.35, 0.0, 22.69, 21.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:42:12.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:41:49
2025-12-03T16:42:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:42:12.323 [DEBUG] [Thread-120073] [transport.py] [_log()] starting thread (client mode): 0xa27626e0
2025-12-03T16:42:12.323 [DEBUG] [Thread-120073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:42:12.344 [DEBUG] [Thread-120073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:42:12.344 [INFO] [Thread-120073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] client lang: <none>
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] server lang: <none>
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] kex follows: False
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] Compression: none
2025-12-03T16:42:12.348 [DEBUG] [Thread-120073] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:42:12.365 [DEBUG] [Thread-120073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:42:12.365 [DEBUG] [Thread-120073] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:42:12.366 [DEBUG] [Thread-120073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:42:12.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:42:12.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:42:12.368 [DEBUG] [Thread-120073] [transport.py] [_log()] userauth is OK
2025-12-03T16:42:12.369 [DEBUG] [Thread-120073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:42:12.369 [DEBUG] [Thread-120073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:42:12.369 [DEBUG] [Thread-120073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:42:12.369 [DEBUG] [Thread-120073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:42:12.390 [INFO] [Thread-120073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:42:12.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:42:13.195 [DEBUG] [Thread-120073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:42:13.196 [DEBUG] [Thread-120073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:42:13.196 [DEBUG] [Thread-120073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:42:13.237 [DEBUG] [Thread-120073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:42:13.237 [DEBUG] [Thread-120073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:42:13.239 [DEBUG] [Thread-120073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:42:13.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:42:13.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:42:13.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:42:13.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:42:13.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:42:13.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:42:13.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:42:13.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:42:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:42:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.612201 -999.00  +21.80  14.97     24   +0.60 1 1 1 1 1   888    0 20.38 -16.81 ----- 15.0 15.0 159.0 27.7 27.3 -30.6 27.6 -29.7 29.3 -28.3 29.6 -29.7
2025-12-03T16:42:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:42:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:42:13.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.612201
2025-12-03T16:42:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:42:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:42:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:42:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:42:13.256 [DEBUG] [Thread-120073] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:42:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:42:13.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:41:49', tmtdew=24.45, humidity=19.35, cloud=0.0, wind=22.69, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:41:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:42:13.355 [DEBUG] [Thread-120076] [transport.py] [_log()] starting thread (client mode): 0xa27600d0
2025-12-03T16:42:13.355 [DEBUG] [Thread-120076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:42:13.370 [DEBUG] [Thread-120076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:42:13.370 [INFO] [Thread-120076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:42:13.377 [DEBUG] [Thread-120076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:42:13.377 [DEBUG] [Thread-120076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] client lang: <none>
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] server lang: <none>
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] kex follows: False
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] Compression: none
2025-12-03T16:42:13.378 [DEBUG] [Thread-120076] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:42:13.439 [DEBUG] [Thread-120076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:42:13.440 [DEBUG] [Thread-120076] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:42:13.440 [DEBUG] [Thread-120076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:42:13.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:42:13.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:42:13.496 [DEBUG] [Thread-120076] [transport.py] [_log()] userauth is OK
2025-12-03T16:42:13.497 [DEBUG] [Thread-120076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:42:13.497 [DEBUG] [Thread-120076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:42:13.497 [DEBUG] [Thread-120076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:42:13.497 [DEBUG] [Thread-120076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:42:13.516 [INFO] [Thread-120076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:42:13.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:42:13.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:42:14.362 [DEBUG] [Thread-120076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:42:14.363 [DEBUG] [Thread-120076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:42:14.410 [DEBUG] [Thread-120076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:42:14.410 [DEBUG] [Thread-120076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:42:14.419 [DEBUG] [Thread-120076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:42:14.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:42:14.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:42:14.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:42:14.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:42:14.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:42:14.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:42:14.455 [DEBUG] [Thread-120076] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:42:25.199 [DEBUG] [Thread-120078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:39.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:39.288 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:40.249 [DEBUG] [Thread-120079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:44.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:42:44.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:42:44.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:42:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 42, 21), 24.46, 19.38, 0.0, 20.8, 21.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:42:45.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:42:21
2025-12-03T16:42:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:42:45.412 [DEBUG] [Thread-120080] [transport.py] [_log()] starting thread (client mode): 0xa2760a60
2025-12-03T16:42:45.412 [DEBUG] [Thread-120080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:42:45.433 [DEBUG] [Thread-120080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:42:45.433 [INFO] [Thread-120080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] client lang: <none>
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] server lang: <none>
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] kex follows: False
2025-12-03T16:42:45.437 [DEBUG] [Thread-120080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] Compression: none
2025-12-03T16:42:45.438 [DEBUG] [Thread-120080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:42:45.455 [DEBUG] [Thread-120080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:42:45.455 [DEBUG] [Thread-120080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:42:45.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:42:45.456 [DEBUG] [Thread-120080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:42:45.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:42:45.458 [DEBUG] [Thread-120080] [transport.py] [_log()] userauth is OK
2025-12-03T16:42:45.458 [DEBUG] [Thread-120080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:42:45.458 [DEBUG] [Thread-120080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:42:45.458 [DEBUG] [Thread-120080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:42:45.458 [DEBUG] [Thread-120080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:42:45.476 [INFO] [Thread-120080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:42:45.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:42:46.131 [DEBUG] [Thread-120080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:42:46.131 [DEBUG] [Thread-120080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:42:46.132 [DEBUG] [Thread-120080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:42:46.172 [DEBUG] [Thread-120080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:42:46.172 [DEBUG] [Thread-120080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:42:46.175 [DEBUG] [Thread-120080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:42:46.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:42:46.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:42:46.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:42:46.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:42:46.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:42:46.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:42:46.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:42:46.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:42:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:42:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.612548 -999.00  +21.90  16.65     24   +0.80 1 1 1 1 1   888    0 20.71 -15.86 ----- 16.6 16.6 177.0 20.8 27.3 -30.5 27.2 -33.6 29.1 -28.4 29.5 -29.5
2025-12-03T16:42:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:42:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:42:46.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.612548
2025-12-03T16:42:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:42:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:42:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:42:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:42:46.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:42:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:42:21', tmtdew=24.46, humidity=19.38, cloud=0.0, wind=20.8, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:42:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:42:46.202 [DEBUG] [Thread-120080] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:42:46.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:42:46.298 [DEBUG] [Thread-120083] [transport.py] [_log()] starting thread (client mode): 0xa2728730
2025-12-03T16:42:46.298 [DEBUG] [Thread-120083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:42:46.312 [DEBUG] [Thread-120083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:42:46.313 [INFO] [Thread-120083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] client lang: <none>
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] server lang: <none>
2025-12-03T16:42:46.320 [DEBUG] [Thread-120083] [transport.py] [_log()] kex follows: False
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] Compression: none
2025-12-03T16:42:46.321 [DEBUG] [Thread-120083] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:42:46.380 [DEBUG] [Thread-120083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:42:46.381 [DEBUG] [Thread-120083] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:42:46.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:42:46.382 [DEBUG] [Thread-120083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:42:46.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:42:46.436 [DEBUG] [Thread-120083] [transport.py] [_log()] userauth is OK
2025-12-03T16:42:46.436 [DEBUG] [Thread-120083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:42:46.436 [DEBUG] [Thread-120083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:42:46.437 [DEBUG] [Thread-120083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:42:46.437 [DEBUG] [Thread-120083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:42:46.456 [INFO] [Thread-120083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:42:46.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:42:46.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:42:47.371 [DEBUG] [Thread-120083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:42:47.372 [DEBUG] [Thread-120083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:42:47.419 [DEBUG] [Thread-120083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:42:47.419 [DEBUG] [Thread-120083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:42:47.428 [DEBUG] [Thread-120083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:42:47.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:42:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:42:47.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:42:47.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:42:47.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:42:47.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:42:47.465 [DEBUG] [Thread-120083] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:42:55.280 [DEBUG] [Thread-120085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:42:56.158 [DEBUG] [Thread-120086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:10.327 [DEBUG] [Thread-120087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:43:17.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:43:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:43:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 42, 53), 24.4, 19.55, 0.0, 22.87, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:43:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:42:53
2025-12-03T16:43:18.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:43:18.507 [DEBUG] [Thread-120088] [transport.py] [_log()] starting thread (client mode): 0xa2763d60
2025-12-03T16:43:18.507 [DEBUG] [Thread-120088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:43:18.522 [DEBUG] [Thread-120088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:43:18.522 [INFO] [Thread-120088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] client lang: <none>
2025-12-03T16:43:18.525 [DEBUG] [Thread-120088] [transport.py] [_log()] server lang: <none>
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] kex follows: False
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] Compression: none
2025-12-03T16:43:18.526 [DEBUG] [Thread-120088] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:43:18.543 [DEBUG] [Thread-120088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:43:18.543 [DEBUG] [Thread-120088] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:43:18.543 [DEBUG] [Thread-120088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:43:18.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:43:18.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:43:18.544 [DEBUG] [Thread-120088] [transport.py] [_log()] userauth is OK
2025-12-03T16:43:18.544 [DEBUG] [Thread-120088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:43:18.544 [DEBUG] [Thread-120088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:43:18.544 [DEBUG] [Thread-120088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:43:18.544 [DEBUG] [Thread-120088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:43:18.555 [INFO] [Thread-120088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:43:18.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:43:19.269 [DEBUG] [Thread-120088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:43:19.269 [DEBUG] [Thread-120088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:43:19.269 [DEBUG] [Thread-120088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:43:19.310 [DEBUG] [Thread-120088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:43:19.310 [DEBUG] [Thread-120088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:43:19.312 [DEBUG] [Thread-120088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:43:19.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:43:19.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:43:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:43:19.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:43:19.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:43:19.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:43:19.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:43:19.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:43:19.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.612895 -999.00  +22.10  17.85     24   +0.80 1 1 1 1 1   888    0 20.55 -13.43 ----- 17.9 17.9 168.8 27.0 27.4 -29.7 27.4 -29.5 29.3 -28.5 29.6 -30.0
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.612895
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:43:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:42:53', tmtdew=24.4, humidity=19.55, cloud=0.0, wind=22.87, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:42:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:43:19.332 [DEBUG] [Thread-120088] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:43:19.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:43:19.416 [DEBUG] [Thread-120091] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T16:43:19.416 [DEBUG] [Thread-120091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:43:19.431 [DEBUG] [Thread-120091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:43:19.431 [INFO] [Thread-120091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:43:19.438 [DEBUG] [Thread-120091] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] client lang: <none>
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] server lang: <none>
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] kex follows: False
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] Compression: none
2025-12-03T16:43:19.439 [DEBUG] [Thread-120091] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:43:19.496 [DEBUG] [Thread-120091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:43:19.496 [DEBUG] [Thread-120091] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:43:19.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:43:19.496 [DEBUG] [Thread-120091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:43:19.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:43:19.552 [DEBUG] [Thread-120091] [transport.py] [_log()] userauth is OK
2025-12-03T16:43:19.552 [DEBUG] [Thread-120091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:43:19.552 [DEBUG] [Thread-120091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:43:19.552 [DEBUG] [Thread-120091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:43:19.552 [DEBUG] [Thread-120091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:43:19.565 [INFO] [Thread-120091] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:43:19.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:43:19.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:43:20.413 [DEBUG] [Thread-120091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:43:20.413 [DEBUG] [Thread-120091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:43:20.460 [DEBUG] [Thread-120091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:43:20.460 [DEBUG] [Thread-120091] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:43:20.468 [DEBUG] [Thread-120091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:43:20.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:43:20.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:43:20.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:43:20.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:43:20.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:43:20.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:43:20.499 [DEBUG] [Thread-120091] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:43:25.359 [DEBUG] [Thread-120093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:39.428 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:39.429 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:40.410 [DEBUG] [Thread-120094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:50.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:43:50.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:43:50.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:43:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 43, 25), 24.71, 19.19, 0.0, 25.44, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:43:51.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:43:25
2025-12-03T16:43:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:43:51.499 [DEBUG] [Thread-120095] [transport.py] [_log()] starting thread (client mode): 0xa277bf10
2025-12-03T16:43:51.499 [DEBUG] [Thread-120095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:43:51.519 [DEBUG] [Thread-120095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:43:51.519 [INFO] [Thread-120095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:43:51.522 [DEBUG] [Thread-120095] [transport.py] [_log()] client lang: <none>
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] server lang: <none>
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] kex follows: False
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] Compression: none
2025-12-03T16:43:51.523 [DEBUG] [Thread-120095] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:43:51.542 [DEBUG] [Thread-120095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:43:51.543 [DEBUG] [Thread-120095] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:43:51.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:43:51.544 [DEBUG] [Thread-120095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:43:51.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:43:51.546 [DEBUG] [Thread-120095] [transport.py] [_log()] userauth is OK
2025-12-03T16:43:51.546 [DEBUG] [Thread-120095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:43:51.546 [DEBUG] [Thread-120095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:43:51.546 [DEBUG] [Thread-120095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:43:51.546 [DEBUG] [Thread-120095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:43:51.571 [INFO] [Thread-120095] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:43:51.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:43:52.207 [DEBUG] [Thread-120095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:43:52.208 [DEBUG] [Thread-120095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:43:52.208 [DEBUG] [Thread-120095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:43:52.248 [DEBUG] [Thread-120095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:43:52.249 [DEBUG] [Thread-120095] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:43:52.252 [DEBUG] [Thread-120095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:43:52.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:43:52.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:43:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:43:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:43:52.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:43:52.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:43:52.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:43:52.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.613242 -999.00  +22.10  19.53     24   +0.60 1 1 1 1 1   888    0 21.21 -9.22 ----- 19.5 19.5 168.6 26.3 27.3 -30.8 27.2 -32.4 29.1 -28.2 29.5 -30.5
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.613242
2025-12-03T16:43:52.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:43:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:43:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:43:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:43:52.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:43:52.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:43:25', tmtdew=24.71, humidity=19.19, cloud=0.0, wind=25.44, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:43:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:43:52.278 [DEBUG] [Thread-120095] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:43:52.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:43:52.374 [DEBUG] [Thread-120098] [transport.py] [_log()] starting thread (client mode): 0xa2747a90
2025-12-03T16:43:52.374 [DEBUG] [Thread-120098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:43:52.389 [DEBUG] [Thread-120098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:43:52.389 [INFO] [Thread-120098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:43:52.396 [DEBUG] [Thread-120098] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:43:52.396 [DEBUG] [Thread-120098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] client lang: <none>
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] server lang: <none>
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] kex follows: False
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:43:52.397 [DEBUG] [Thread-120098] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:43:52.398 [DEBUG] [Thread-120098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:43:52.398 [DEBUG] [Thread-120098] [transport.py] [_log()] Compression: none
2025-12-03T16:43:52.398 [DEBUG] [Thread-120098] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:43:52.457 [DEBUG] [Thread-120098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:43:52.457 [DEBUG] [Thread-120098] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:43:52.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:43:52.458 [DEBUG] [Thread-120098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:43:52.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:43:52.513 [DEBUG] [Thread-120098] [transport.py] [_log()] userauth is OK
2025-12-03T16:43:52.513 [DEBUG] [Thread-120098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:43:52.513 [DEBUG] [Thread-120098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:43:52.513 [DEBUG] [Thread-120098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:43:52.514 [DEBUG] [Thread-120098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:43:52.532 [INFO] [Thread-120098] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:43:52.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:43:52.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:43:53.491 [DEBUG] [Thread-120098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:43:53.491 [DEBUG] [Thread-120098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:43:53.543 [DEBUG] [Thread-120098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:43:53.543 [DEBUG] [Thread-120098] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:43:53.556 [DEBUG] [Thread-120098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:43:53.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:43:53.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:43:53.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:43:53.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:43:53.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:43:53.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:43:53.592 [DEBUG] [Thread-120098] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:43:55.444 [DEBUG] [Thread-120100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:43:56.187 [DEBUG] [Thread-120101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:10.485 [DEBUG] [Thread-120102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:23.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:44:23.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:44:23.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:44:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 43, 57), 24.87, 18.69, 0.0, 20.75, 22.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:44:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:43:57
2025-12-03T16:44:24.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:44:24.574 [DEBUG] [Thread-120103] [transport.py] [_log()] starting thread (client mode): 0xa2760be0
2025-12-03T16:44:24.574 [DEBUG] [Thread-120103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:44:24.595 [DEBUG] [Thread-120103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:44:24.595 [INFO] [Thread-120103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:44:24.598 [DEBUG] [Thread-120103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:44:24.598 [DEBUG] [Thread-120103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] client lang: <none>
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] server lang: <none>
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] kex follows: False
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] Compression: none
2025-12-03T16:44:24.599 [DEBUG] [Thread-120103] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:44:24.618 [DEBUG] [Thread-120103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:44:24.618 [DEBUG] [Thread-120103] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:44:24.618 [DEBUG] [Thread-120103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:44:24.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:44:24.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:44:24.620 [DEBUG] [Thread-120103] [transport.py] [_log()] userauth is OK
2025-12-03T16:44:24.620 [DEBUG] [Thread-120103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:44:24.620 [DEBUG] [Thread-120103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:44:24.621 [DEBUG] [Thread-120103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:44:24.621 [DEBUG] [Thread-120103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:44:24.636 [INFO] [Thread-120103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:44:24.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:44:25.389 [DEBUG] [Thread-120103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:44:25.389 [DEBUG] [Thread-120103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:44:25.390 [DEBUG] [Thread-120103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:44:25.430 [DEBUG] [Thread-120103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:44:25.430 [DEBUG] [Thread-120103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:44:25.433 [DEBUG] [Thread-120103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:44:25.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:44:25.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:44:25.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:44:25.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:44:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:44:25.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:44:25.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:44:25.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:44:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:44:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.613590 -999.00  +21.90  17.59     24   +0.70 1 1 1 1 1   888    0 21.03 -5.89 ----- 17.6 17.6 144.2 23.3 27.4 -30.2 27.4 -29.4 29.1 -28.0 29.5 -29.6
2025-12-03T16:44:25.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:44:25.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:44:25.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.613590
2025-12-03T16:44:25.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:44:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:44:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:44:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:44:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:44:25.452 [DEBUG] [Thread-120103] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:44:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:43:57', tmtdew=24.87, humidity=18.69, cloud=0.0, wind=20.75, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:43:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:44:25.518 [DEBUG] [Thread-120106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:25.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:44:25.549 [DEBUG] [Thread-120107] [transport.py] [_log()] starting thread (client mode): 0xa272a950
2025-12-03T16:44:25.549 [DEBUG] [Thread-120107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:44:25.565 [DEBUG] [Thread-120107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:44:25.565 [INFO] [Thread-120107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:25.577 [DEBUG] [Thread-120107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] client lang: <none>
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] server lang: <none>
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] kex follows: False
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] Compression: none
2025-12-03T16:44:25.578 [DEBUG] [Thread-120107] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:44:25.640 [DEBUG] [Thread-120107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:44:25.641 [DEBUG] [Thread-120107] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:44:25.641 [DEBUG] [Thread-120107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:44:25.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:44:25.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:44:25.696 [DEBUG] [Thread-120107] [transport.py] [_log()] userauth is OK
2025-12-03T16:44:25.696 [DEBUG] [Thread-120107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:44:25.696 [DEBUG] [Thread-120107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:44:25.696 [DEBUG] [Thread-120107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:44:25.696 [DEBUG] [Thread-120107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:44:25.716 [INFO] [Thread-120107] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:44:25.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:44:25.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:44:26.597 [DEBUG] [Thread-120107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:44:26.597 [DEBUG] [Thread-120107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:44:26.645 [DEBUG] [Thread-120107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:44:26.646 [DEBUG] [Thread-120107] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:44:26.655 [DEBUG] [Thread-120107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:44:26.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:44:26.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:44:26.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:44:26.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:44:26.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:44:26.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:44:26.691 [DEBUG] [Thread-120107] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:44:39.568 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:39.569 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:40.556 [DEBUG] [Thread-120109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:55.593 [DEBUG] [Thread-120110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:56.232 [DEBUG] [Thread-120111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:44:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:44:56.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:44:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:44:57.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 44, 29), 24.81, 18.72, 0.0, 18.91, 21.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:44:57.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:44:29
2025-12-03T16:44:57.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:44:57.660 [DEBUG] [Thread-120112] [transport.py] [_log()] starting thread (client mode): 0xa2750700
2025-12-03T16:44:57.660 [DEBUG] [Thread-120112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:44:57.679 [DEBUG] [Thread-120112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:44:57.679 [INFO] [Thread-120112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] client lang: <none>
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] server lang: <none>
2025-12-03T16:44:57.682 [DEBUG] [Thread-120112] [transport.py] [_log()] kex follows: False
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] Compression: none
2025-12-03T16:44:57.683 [DEBUG] [Thread-120112] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:44:57.700 [DEBUG] [Thread-120112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:44:57.700 [DEBUG] [Thread-120112] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:44:57.701 [DEBUG] [Thread-120112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:44:57.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:44:57.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:44:57.703 [DEBUG] [Thread-120112] [transport.py] [_log()] userauth is OK
2025-12-03T16:44:57.703 [DEBUG] [Thread-120112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:44:57.703 [DEBUG] [Thread-120112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:44:57.703 [DEBUG] [Thread-120112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:44:57.703 [DEBUG] [Thread-120112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:44:57.729 [INFO] [Thread-120112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:44:57.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:44:58.308 [DEBUG] [Thread-120112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:44:58.309 [DEBUG] [Thread-120112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:44:58.309 [DEBUG] [Thread-120112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:44:58.350 [DEBUG] [Thread-120112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:44:58.350 [DEBUG] [Thread-120112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:44:58.354 [DEBUG] [Thread-120112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:44:58.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:44:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:44:58.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:44:58.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:44:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:44:58.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:44:58.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:44:58.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:44:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:44:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.613937 -999.00  +21.80  19.64     24   +0.80 1 1 1 1 1   888    0 21.06 -3.93 ----- 19.6 19.6 109.2 26.5 27.3 -30.3 27.5 -29.9 29.1 -28.1 29.5 -29.6
2025-12-03T16:44:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:44:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:44:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.613937
2025-12-03T16:44:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:44:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:44:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:44:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:44:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:44:58.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:44:29', tmtdew=24.81, humidity=18.72, cloud=0.0, wind=18.91, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:44:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:44:58.383 [DEBUG] [Thread-120112] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:44:58.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:44:58.479 [DEBUG] [Thread-120115] [transport.py] [_log()] starting thread (client mode): 0xa2750610
2025-12-03T16:44:58.479 [DEBUG] [Thread-120115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:44:58.494 [DEBUG] [Thread-120115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:44:58.494 [INFO] [Thread-120115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:44:58.502 [DEBUG] [Thread-120115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:44:58.502 [DEBUG] [Thread-120115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] client lang: <none>
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] server lang: <none>
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] kex follows: False
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] Compression: none
2025-12-03T16:44:58.503 [DEBUG] [Thread-120115] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:44:58.567 [DEBUG] [Thread-120115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:44:58.568 [DEBUG] [Thread-120115] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:44:58.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:44:58.569 [DEBUG] [Thread-120115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:44:58.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:44:58.625 [DEBUG] [Thread-120115] [transport.py] [_log()] userauth is OK
2025-12-03T16:44:58.625 [DEBUG] [Thread-120115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:44:58.625 [DEBUG] [Thread-120115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:44:58.625 [DEBUG] [Thread-120115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:44:58.625 [DEBUG] [Thread-120115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:44:58.645 [INFO] [Thread-120115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:44:58.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:44:58.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:44:59.478 [DEBUG] [Thread-120115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:44:59.478 [DEBUG] [Thread-120115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:44:59.526 [DEBUG] [Thread-120115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:44:59.527 [DEBUG] [Thread-120115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:44:59.536 [DEBUG] [Thread-120115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:44:59.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:44:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:44:59.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:44:59.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:44:59.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:44:59.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:44:59.572 [DEBUG] [Thread-120115] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:45:10.631 [DEBUG] [Thread-120117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:25.679 [DEBUG] [Thread-120118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:29.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:45:29.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:45:29.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:45:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 45, 1), 24.37, 19.52, 0.0, 19.92, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:45:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:45:01
2025-12-03T16:45:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:45:30.554 [DEBUG] [Thread-120119] [transport.py] [_log()] starting thread (client mode): 0xa519bd90
2025-12-03T16:45:30.554 [DEBUG] [Thread-120119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:45:30.572 [DEBUG] [Thread-120119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:45:30.572 [INFO] [Thread-120119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] client lang: <none>
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] server lang: <none>
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] kex follows: False
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] Compression: none
2025-12-03T16:45:30.576 [DEBUG] [Thread-120119] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:45:30.592 [DEBUG] [Thread-120119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:45:30.592 [DEBUG] [Thread-120119] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:45:30.593 [DEBUG] [Thread-120119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:45:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:45:30.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:45:30.595 [DEBUG] [Thread-120119] [transport.py] [_log()] userauth is OK
2025-12-03T16:45:30.595 [DEBUG] [Thread-120119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:45:30.595 [DEBUG] [Thread-120119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:45:30.595 [DEBUG] [Thread-120119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:45:30.595 [DEBUG] [Thread-120119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:45:30.616 [INFO] [Thread-120119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:45:30.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:45:31.403 [DEBUG] [Thread-120119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:45:31.403 [DEBUG] [Thread-120119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:45:31.403 [DEBUG] [Thread-120119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:45:31.444 [DEBUG] [Thread-120119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:45:31.444 [DEBUG] [Thread-120119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:45:31.447 [DEBUG] [Thread-120119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:45:31.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:45:31.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:45:31.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:45:31.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:45:31.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:45:31.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:45:31.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:45:31.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:45:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:45:31.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.614284 -999.00  +21.50  16.97     24   +0.60 1 1 1 1 1   888    0 21.09 -3.23 ----- 17.0 17.0 123.6 23.1 27.2 -32.1 27.5 -30.0 29.1 -29.0 29.4 -30.7
2025-12-03T16:45:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:45:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:45:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.614284
2025-12-03T16:45:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:45:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:45:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:45:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:45:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:45:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:45:01', tmtdew=24.37, humidity=19.52, cloud=0.0, wind=19.92, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:44:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:45:31.474 [DEBUG] [Thread-120119] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:45:31.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:45:31.571 [DEBUG] [Thread-120122] [transport.py] [_log()] starting thread (client mode): 0xa2750280
2025-12-03T16:45:31.571 [DEBUG] [Thread-120122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:45:31.586 [DEBUG] [Thread-120122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:45:31.586 [INFO] [Thread-120122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:45:31.594 [DEBUG] [Thread-120122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] client lang: <none>
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] server lang: <none>
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] kex follows: False
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:45:31.595 [DEBUG] [Thread-120122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:45:31.596 [DEBUG] [Thread-120122] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:45:31.596 [DEBUG] [Thread-120122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:45:31.596 [DEBUG] [Thread-120122] [transport.py] [_log()] Compression: none
2025-12-03T16:45:31.596 [DEBUG] [Thread-120122] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:45:31.653 [DEBUG] [Thread-120122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:45:31.653 [DEBUG] [Thread-120122] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:45:31.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:45:31.654 [DEBUG] [Thread-120122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:45:31.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:45:31.708 [DEBUG] [Thread-120122] [transport.py] [_log()] userauth is OK
2025-12-03T16:45:31.709 [DEBUG] [Thread-120122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:45:31.709 [DEBUG] [Thread-120122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:45:31.709 [DEBUG] [Thread-120122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:45:31.709 [DEBUG] [Thread-120122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:45:31.733 [INFO] [Thread-120122] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:45:31.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:45:31.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:45:32.543 [DEBUG] [Thread-120122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:45:32.543 [DEBUG] [Thread-120122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:45:32.591 [DEBUG] [Thread-120122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:45:32.591 [DEBUG] [Thread-120122] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:45:32.600 [DEBUG] [Thread-120122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:45:32.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:45:32.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:45:32.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:45:32.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:45:32.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:45:32.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:45:32.634 [DEBUG] [Thread-120122] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:45:39.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:39.711 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:40.710 [DEBUG] [Thread-120124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:55.750 [DEBUG] [Thread-120125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:45:56.261 [DEBUG] [Thread-120126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:46:02.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:46:02.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:46:03.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 45, 33), 25.19, 18.3, 0.0, 16.76, 22.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:46:03.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:45:33
2025-12-03T16:46:03.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:46:03.632 [DEBUG] [Thread-120127] [transport.py] [_log()] starting thread (client mode): 0xa27c9c30
2025-12-03T16:46:03.632 [DEBUG] [Thread-120127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:46:03.652 [DEBUG] [Thread-120127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:46:03.652 [INFO] [Thread-120127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] client lang: <none>
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] server lang: <none>
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] kex follows: False
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:46:03.655 [DEBUG] [Thread-120127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:46:03.656 [DEBUG] [Thread-120127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:46:03.656 [DEBUG] [Thread-120127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:46:03.656 [DEBUG] [Thread-120127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:46:03.656 [DEBUG] [Thread-120127] [transport.py] [_log()] Compression: none
2025-12-03T16:46:03.656 [DEBUG] [Thread-120127] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:46:03.675 [DEBUG] [Thread-120127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:46:03.675 [DEBUG] [Thread-120127] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:46:03.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:46:03.676 [DEBUG] [Thread-120127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:46:03.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:46:03.717 [DEBUG] [Thread-120127] [transport.py] [_log()] userauth is OK
2025-12-03T16:46:03.717 [DEBUG] [Thread-120127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:46:03.717 [DEBUG] [Thread-120127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:46:03.718 [DEBUG] [Thread-120127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:46:03.718 [DEBUG] [Thread-120127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:46:03.755 [INFO] [Thread-120127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:46:03.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:46:04.415 [DEBUG] [Thread-120127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:46:04.415 [DEBUG] [Thread-120127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:46:04.415 [DEBUG] [Thread-120127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:46:04.456 [DEBUG] [Thread-120127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:46:04.457 [DEBUG] [Thread-120127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:46:04.460 [DEBUG] [Thread-120127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:46:04.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:46:04.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:46:04.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:46:04.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:46:04.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:46:04.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:46:04.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:46:04.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:46:04.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:46:04.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.614631 -999.00  +21.40  11.42     25   +0.70 1 1 1 1 1   888    0 21.27 -4.26 ----- 11.4 11.4 120.4 20.0 27.2 -29.8 27.6 -29.9 29.2 -28.5 29.5 -29.8
2025-12-03T16:46:04.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:46:04.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:46:04.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.614631
2025-12-03T16:46:04.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:46:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:46:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:46:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:46:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:46:04.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:45:33', tmtdew=25.19, humidity=18.3, cloud=0.0, wind=16.76, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:45:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:46:04.487 [DEBUG] [Thread-120127] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:46:04.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:46:04.581 [DEBUG] [Thread-120130] [transport.py] [_log()] starting thread (client mode): 0xa27c9fc0
2025-12-03T16:46:04.581 [DEBUG] [Thread-120130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:46:04.596 [DEBUG] [Thread-120130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:46:04.596 [INFO] [Thread-120130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:46:04.604 [DEBUG] [Thread-120130] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:46:04.604 [DEBUG] [Thread-120130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:46:04.604 [DEBUG] [Thread-120130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] client lang: <none>
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] server lang: <none>
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] kex follows: False
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:46:04.605 [DEBUG] [Thread-120130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:46:04.606 [DEBUG] [Thread-120130] [transport.py] [_log()] Compression: none
2025-12-03T16:46:04.606 [DEBUG] [Thread-120130] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:46:04.661 [DEBUG] [Thread-120130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:46:04.661 [DEBUG] [Thread-120130] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:46:04.662 [DEBUG] [Thread-120130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:46:04.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:46:04.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:46:04.717 [DEBUG] [Thread-120130] [transport.py] [_log()] userauth is OK
2025-12-03T16:46:04.717 [DEBUG] [Thread-120130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:46:04.717 [DEBUG] [Thread-120130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:46:04.717 [DEBUG] [Thread-120130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:46:04.717 [DEBUG] [Thread-120130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:46:04.737 [INFO] [Thread-120130] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:46:04.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:46:04.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:46:05.623 [DEBUG] [Thread-120130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:46:05.623 [DEBUG] [Thread-120130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:46:05.671 [DEBUG] [Thread-120130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:46:05.671 [DEBUG] [Thread-120130] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:46:05.680 [DEBUG] [Thread-120130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:46:05.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:46:05.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:46:05.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:46:05.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:46:05.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:46:05.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:46:05.716 [DEBUG] [Thread-120130] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:46:10.779 [DEBUG] [Thread-120132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:25.829 [DEBUG] [Thread-120133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:46:35.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:46:35.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:46:36.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 46, 5), 24.07, 19.85, 0.0, 15.77, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:46:36.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:46:05
2025-12-03T16:46:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:46:36.708 [DEBUG] [Thread-120134] [transport.py] [_log()] starting thread (client mode): 0xa519bcd0
2025-12-03T16:46:36.708 [DEBUG] [Thread-120134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:46:36.728 [DEBUG] [Thread-120134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:46:36.729 [INFO] [Thread-120134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:46:36.731 [DEBUG] [Thread-120134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] client lang: <none>
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] server lang: <none>
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] kex follows: False
2025-12-03T16:46:36.732 [DEBUG] [Thread-120134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] Compression: none
2025-12-03T16:46:36.733 [DEBUG] [Thread-120134] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:46:36.750 [DEBUG] [Thread-120134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:46:36.751 [DEBUG] [Thread-120134] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:46:36.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:46:36.752 [DEBUG] [Thread-120134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:46:36.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:46:36.754 [DEBUG] [Thread-120134] [transport.py] [_log()] userauth is OK
2025-12-03T16:46:36.755 [DEBUG] [Thread-120134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:46:36.755 [DEBUG] [Thread-120134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:46:36.755 [DEBUG] [Thread-120134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:46:36.755 [DEBUG] [Thread-120134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:46:36.778 [INFO] [Thread-120134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:46:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:46:37.634 [DEBUG] [Thread-120134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:46:37.634 [DEBUG] [Thread-120134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:46:37.635 [DEBUG] [Thread-120134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:46:37.675 [DEBUG] [Thread-120134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:46:37.675 [DEBUG] [Thread-120134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:46:37.678 [DEBUG] [Thread-120134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:46:37.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:46:37.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:46:37.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:46:37.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:46:37.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:46:37.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:46:37.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:46:37.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:46:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:46:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.614979 -999.00  +21.50  12.69     25   +0.70 1 1 1 1 1   888    0 20.89 -4.72 ----- 12.7 12.7 167.0 14.9 27.2 -30.5 27.6 -29.7 29.2 -28.4 29.5 -30.2
2025-12-03T16:46:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:46:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:46:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.614979
2025-12-03T16:46:37.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:46:37.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:46:37.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:46:37.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:46:37.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:46:37.706 [DEBUG] [Thread-120134] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:46:37.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:46:05', tmtdew=24.07, humidity=19.85, cloud=0.0, wind=15.77, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:45:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:46:37.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:46:37.801 [DEBUG] [Thread-120137] [transport.py] [_log()] starting thread (client mode): 0xa27c8be0
2025-12-03T16:46:37.801 [DEBUG] [Thread-120137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:46:37.816 [DEBUG] [Thread-120137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:46:37.816 [INFO] [Thread-120137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:46:37.824 [DEBUG] [Thread-120137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] client lang: <none>
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] server lang: <none>
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] kex follows: False
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] Compression: none
2025-12-03T16:46:37.825 [DEBUG] [Thread-120137] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:46:37.885 [DEBUG] [Thread-120137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:46:37.885 [DEBUG] [Thread-120137] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:46:37.886 [DEBUG] [Thread-120137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:46:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:46:37.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:46:37.941 [DEBUG] [Thread-120137] [transport.py] [_log()] userauth is OK
2025-12-03T16:46:37.941 [DEBUG] [Thread-120137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:46:37.942 [DEBUG] [Thread-120137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:46:37.942 [DEBUG] [Thread-120137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:46:37.942 [DEBUG] [Thread-120137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:46:37.965 [INFO] [Thread-120137] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:46:37.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:46:37.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:46:38.816 [DEBUG] [Thread-120137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:46:38.816 [DEBUG] [Thread-120137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:46:38.864 [DEBUG] [Thread-120137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:46:38.864 [DEBUG] [Thread-120137] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:46:38.872 [DEBUG] [Thread-120137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:46:38.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:46:38.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:46:38.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:46:38.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:46:38.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:46:38.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:46:38.913 [DEBUG] [Thread-120137] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:46:39.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:39.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:40.862 [DEBUG] [Thread-120139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:55.922 [DEBUG] [Thread-120140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:46:56.308 [DEBUG] [Thread-120141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:08.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:47:08.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:47:08.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:47:09.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 46, 37), 24.31, 19.52, 0.0, 19.09, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:47:09.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:46:37
2025-12-03T16:47:09.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:47:09.948 [DEBUG] [Thread-120142] [transport.py] [_log()] starting thread (client mode): 0xa27509a0
2025-12-03T16:47:09.948 [DEBUG] [Thread-120142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:47:09.969 [DEBUG] [Thread-120142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:47:09.969 [INFO] [Thread-120142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] client lang: <none>
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] server lang: <none>
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] kex follows: False
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] Compression: none
2025-12-03T16:47:09.973 [DEBUG] [Thread-120142] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:47:09.988 [DEBUG] [Thread-120142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:47:09.988 [DEBUG] [Thread-120142] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:47:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:47:09.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] userauth is OK
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:47:09.989 [DEBUG] [Thread-120142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:47:10.000 [INFO] [Thread-120142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:47:10.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:47:10.666 [DEBUG] [Thread-120142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:47:10.666 [DEBUG] [Thread-120142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:47:10.666 [DEBUG] [Thread-120142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:47:10.708 [DEBUG] [Thread-120142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:47:10.708 [DEBUG] [Thread-120142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:47:10.710 [DEBUG] [Thread-120142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:47:10.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:47:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:47:10.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:47:10.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:47:10.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:47:10.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:47:10.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.615673 -999.00  +21.70  16.19     25   +0.80 1 1 1 1 1   888    0 20.81 -6.09 ----- 16.2 16.2 159.6 22.0 27.3 -30.2 27.5 -29.1 29.3 -28.2 29.6 -29.5
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.615673
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:47:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:46:37', tmtdew=24.31, humidity=19.52, cloud=0.0, wind=19.09, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:46:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:47:10.728 [DEBUG] [Thread-120142] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:47:10.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:47:10.816 [DEBUG] [Thread-120145] [transport.py] [_log()] starting thread (client mode): 0xa2763bb0
2025-12-03T16:47:10.816 [DEBUG] [Thread-120145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:47:10.831 [DEBUG] [Thread-120145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:47:10.831 [INFO] [Thread-120145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] client lang: <none>
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] server lang: <none>
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] kex follows: False
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] Compression: none
2025-12-03T16:47:10.839 [DEBUG] [Thread-120145] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:47:10.895 [DEBUG] [Thread-120145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:47:10.895 [DEBUG] [Thread-120145] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:47:10.895 [DEBUG] [Thread-120145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:47:10.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:47:10.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:47:10.951 [DEBUG] [Thread-120147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:10.952 [DEBUG] [Thread-120145] [transport.py] [_log()] userauth is OK
2025-12-03T16:47:10.952 [DEBUG] [Thread-120145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:47:10.952 [DEBUG] [Thread-120145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:47:10.952 [DEBUG] [Thread-120145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:47:10.952 [DEBUG] [Thread-120145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:47:10.966 [INFO] [Thread-120145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:47:10.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:47:10.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:47:11.831 [DEBUG] [Thread-120145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:47:11.831 [DEBUG] [Thread-120145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:47:11.879 [DEBUG] [Thread-120145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:47:11.879 [DEBUG] [Thread-120145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:47:11.888 [DEBUG] [Thread-120145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:47:11.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:47:11.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:47:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:47:11.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:47:11.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:47:11.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:47:11.919 [DEBUG] [Thread-120145] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:47:25.990 [DEBUG] [Thread-120148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:39.991 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:39.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:41.019 [DEBUG] [Thread-120149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:41.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:47:41.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:47:41.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:47:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 47, 9), 24.54, 19.22, 0.0, 18.51, 21.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:47:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:47:09
2025-12-03T16:47:42.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:47:42.974 [DEBUG] [Thread-120150] [transport.py] [_log()] starting thread (client mode): 0xa519bcd0
2025-12-03T16:47:42.974 [DEBUG] [Thread-120150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:47:42.994 [DEBUG] [Thread-120150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:47:42.994 [INFO] [Thread-120150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] client lang: <none>
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] server lang: <none>
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] kex follows: False
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:47:42.997 [DEBUG] [Thread-120150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:47:42.998 [DEBUG] [Thread-120150] [transport.py] [_log()] Compression: none
2025-12-03T16:47:42.998 [DEBUG] [Thread-120150] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:47:43.013 [DEBUG] [Thread-120150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:47:43.013 [DEBUG] [Thread-120150] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:47:43.014 [DEBUG] [Thread-120150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:47:43.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:47:43.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:47:43.014 [DEBUG] [Thread-120150] [transport.py] [_log()] userauth is OK
2025-12-03T16:47:43.015 [DEBUG] [Thread-120150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:47:43.015 [DEBUG] [Thread-120150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:47:43.015 [DEBUG] [Thread-120150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:47:43.015 [DEBUG] [Thread-120150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:47:43.026 [INFO] [Thread-120150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:47:43.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:47:43.801 [DEBUG] [Thread-120150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:47:43.801 [DEBUG] [Thread-120150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:47:43.801 [DEBUG] [Thread-120150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:47:43.843 [DEBUG] [Thread-120150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:47:43.844 [DEBUG] [Thread-120150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:47:43.846 [DEBUG] [Thread-120150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:47:43.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:47:43.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:47:43.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:47:43.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:47:43.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:47:43.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:47:43.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:47:43.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.616020 -999.00  +21.50  19.17     24   +0.40 1 1 1 1 1   888    0 21.29 -6.65 ----- 19.2 19.2 143.4 27.3 27.2 -30.4 27.4 -30.2 29.1 -28.5 29.4 -29.9
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.616020
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:47:43.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:47:09', tmtdew=24.54, humidity=19.22, cloud=0.0, wind=18.51, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:47:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:47:43.863 [DEBUG] [Thread-120150] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:47:43.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:47:43.949 [DEBUG] [Thread-120153] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T16:47:43.949 [DEBUG] [Thread-120153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:47:43.963 [DEBUG] [Thread-120153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:47:43.963 [INFO] [Thread-120153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] client lang: <none>
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] server lang: <none>
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] kex follows: False
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] Compression: none
2025-12-03T16:47:43.971 [DEBUG] [Thread-120153] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:47:44.027 [DEBUG] [Thread-120153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:47:44.028 [DEBUG] [Thread-120153] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:47:44.028 [DEBUG] [Thread-120153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:47:44.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:47:44.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:47:44.084 [DEBUG] [Thread-120153] [transport.py] [_log()] userauth is OK
2025-12-03T16:47:44.085 [DEBUG] [Thread-120153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:47:44.085 [DEBUG] [Thread-120153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:47:44.085 [DEBUG] [Thread-120153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:47:44.085 [DEBUG] [Thread-120153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:47:44.111 [INFO] [Thread-120153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:47:44.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:47:44.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:47:44.927 [DEBUG] [Thread-120153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:47:44.927 [DEBUG] [Thread-120153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:47:44.975 [DEBUG] [Thread-120153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:47:44.975 [DEBUG] [Thread-120153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:47:44.984 [DEBUG] [Thread-120153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:47:44.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:47:44.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:47:45.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:47:45.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:47:45.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:47:45.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:47:45.018 [DEBUG] [Thread-120153] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:47:56.054 [DEBUG] [Thread-120155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:47:56.342 [DEBUG] [Thread-120156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:11.097 [DEBUG] [Thread-120157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:15.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:48:15.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:48:15.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:48:15.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 47, 41), 24.68, 18.95, 0.0, 23.06, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:48:15.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:47:41
2025-12-03T16:48:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:48:16.014 [DEBUG] [Thread-120158] [transport.py] [_log()] starting thread (client mode): 0xa519a410
2025-12-03T16:48:16.014 [DEBUG] [Thread-120158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:48:16.034 [DEBUG] [Thread-120158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:48:16.034 [INFO] [Thread-120158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] client lang: <none>
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] server lang: <none>
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] kex follows: False
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] Compression: none
2025-12-03T16:48:16.038 [DEBUG] [Thread-120158] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:48:16.056 [DEBUG] [Thread-120158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:48:16.056 [DEBUG] [Thread-120158] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:48:16.056 [DEBUG] [Thread-120158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:48:16.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:48:16.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:48:16.057 [DEBUG] [Thread-120158] [transport.py] [_log()] userauth is OK
2025-12-03T16:48:16.057 [DEBUG] [Thread-120158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:48:16.057 [DEBUG] [Thread-120158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:48:16.057 [DEBUG] [Thread-120158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:48:16.057 [DEBUG] [Thread-120158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:48:16.067 [INFO] [Thread-120158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:48:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:48:16.705 [DEBUG] [Thread-120158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:48:16.705 [DEBUG] [Thread-120158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:48:16.705 [DEBUG] [Thread-120158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:48:16.746 [DEBUG] [Thread-120158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:48:16.746 [DEBUG] [Thread-120158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:48:16.749 [DEBUG] [Thread-120158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:48:16.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:48:16.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:48:16.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:48:16.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:48:16.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:48:16.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:48:16.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:48:16.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:48:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:48:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.616367 -999.00  +21.70  16.42     25   +0.80 1 1 1 1 1   888    0 20.69 -7.04 ----- 16.4 16.4 173.2 25.3 27.2 -30.0 27.5 -31.7 29.1 -30.2 29.4 -31.6
2025-12-03T16:48:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:48:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:48:16.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.616367
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:48:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:47:41', tmtdew=24.68, humidity=18.95, cloud=0.0, wind=23.06, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:47:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:48:16.775 [DEBUG] [Thread-120158] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:48:16.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:48:16.871 [DEBUG] [Thread-120161] [transport.py] [_log()] starting thread (client mode): 0xa2753d90
2025-12-03T16:48:16.871 [DEBUG] [Thread-120161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:48:16.886 [DEBUG] [Thread-120161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:48:16.886 [INFO] [Thread-120161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:48:16.893 [DEBUG] [Thread-120161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:48:16.893 [DEBUG] [Thread-120161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:48:16.893 [DEBUG] [Thread-120161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] client lang: <none>
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] server lang: <none>
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] kex follows: False
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:48:16.894 [DEBUG] [Thread-120161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:48:16.895 [DEBUG] [Thread-120161] [transport.py] [_log()] Compression: none
2025-12-03T16:48:16.895 [DEBUG] [Thread-120161] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:48:16.952 [DEBUG] [Thread-120161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:48:16.953 [DEBUG] [Thread-120161] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:48:16.953 [DEBUG] [Thread-120161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:48:16.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:48:16.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:48:17.008 [DEBUG] [Thread-120161] [transport.py] [_log()] userauth is OK
2025-12-03T16:48:17.009 [DEBUG] [Thread-120161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:48:17.009 [DEBUG] [Thread-120161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:48:17.009 [DEBUG] [Thread-120161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:48:17.009 [DEBUG] [Thread-120161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:48:17.031 [INFO] [Thread-120161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:48:17.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:48:17.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:48:17.875 [DEBUG] [Thread-120161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:48:17.875 [DEBUG] [Thread-120161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:48:17.922 [DEBUG] [Thread-120161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:48:17.923 [DEBUG] [Thread-120161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:48:17.931 [DEBUG] [Thread-120161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:48:17.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:48:17.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:48:17.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:48:17.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:48:17.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:48:17.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:48:17.965 [DEBUG] [Thread-120161] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:48:26.128 [DEBUG] [Thread-120163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:40.130 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:40.131 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:41.165 [DEBUG] [Thread-120164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:48:47.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:48:47.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:48:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 48, 13), 24.64, 19.0, 0.0, 22.66, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:48:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:48:13
2025-12-03T16:48:48.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:48:48.951 [DEBUG] [Thread-120165] [transport.py] [_log()] starting thread (client mode): 0xa2753bb0
2025-12-03T16:48:48.951 [DEBUG] [Thread-120165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:48:48.972 [DEBUG] [Thread-120165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:48:48.972 [INFO] [Thread-120165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] client lang: <none>
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] server lang: <none>
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] kex follows: False
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:48:48.975 [DEBUG] [Thread-120165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:48:48.976 [DEBUG] [Thread-120165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:48:48.976 [DEBUG] [Thread-120165] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:48:48.976 [DEBUG] [Thread-120165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:48:48.976 [DEBUG] [Thread-120165] [transport.py] [_log()] Compression: none
2025-12-03T16:48:48.976 [DEBUG] [Thread-120165] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:48:48.992 [DEBUG] [Thread-120165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:48:48.992 [DEBUG] [Thread-120165] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:48:48.993 [DEBUG] [Thread-120165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:48:48.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:48:48.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:48:48.994 [DEBUG] [Thread-120165] [transport.py] [_log()] userauth is OK
2025-12-03T16:48:48.995 [DEBUG] [Thread-120165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:48:48.995 [DEBUG] [Thread-120165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:48:48.995 [DEBUG] [Thread-120165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:48:48.995 [DEBUG] [Thread-120165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:48:49.011 [INFO] [Thread-120165] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:48:49.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:48:49.799 [DEBUG] [Thread-120165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:48:49.799 [DEBUG] [Thread-120165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:48:49.799 [DEBUG] [Thread-120165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:48:49.840 [DEBUG] [Thread-120165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:48:49.840 [DEBUG] [Thread-120165] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:48:49.843 [DEBUG] [Thread-120165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:48:49.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:48:49.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:48:49.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:48:49.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:48:49.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:48:49.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:48:49.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:48:49.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.616715 -999.00  +21.60  23.19     24   +0.60 1 1 1 1 1   888    0 21.27 -6.37 ----- 23.2 23.2 177.4 30.7 27.0 -31.6 26.9 -34.9 28.8 -30.9 29.0 -33.2
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.616715
2025-12-03T16:48:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:48:49.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:48:49.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:48:49.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:48:49.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:48:49.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:48:13', tmtdew=24.64, humidity=19.0, cloud=0.0, wind=22.66, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:48:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:48:49.866 [DEBUG] [Thread-120165] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:48:49.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:48:49.963 [DEBUG] [Thread-120168] [transport.py] [_log()] starting thread (client mode): 0xa2760070
2025-12-03T16:48:49.963 [DEBUG] [Thread-120168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:48:49.978 [DEBUG] [Thread-120168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:48:49.978 [INFO] [Thread-120168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:49.986 [DEBUG] [Thread-120168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] client lang: <none>
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] server lang: <none>
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] kex follows: False
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:48:49.987 [DEBUG] [Thread-120168] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:48:49.988 [DEBUG] [Thread-120168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:48:49.988 [DEBUG] [Thread-120168] [transport.py] [_log()] Compression: none
2025-12-03T16:48:49.988 [DEBUG] [Thread-120168] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:48:50.045 [DEBUG] [Thread-120168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:48:50.045 [DEBUG] [Thread-120168] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:48:50.046 [DEBUG] [Thread-120168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:48:50.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:48:50.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:48:50.101 [DEBUG] [Thread-120168] [transport.py] [_log()] userauth is OK
2025-12-03T16:48:50.101 [DEBUG] [Thread-120168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:48:50.101 [DEBUG] [Thread-120168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:48:50.101 [DEBUG] [Thread-120168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:48:50.101 [DEBUG] [Thread-120168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:48:50.120 [INFO] [Thread-120168] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:48:50.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:48:50.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:48:51.003 [DEBUG] [Thread-120168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:48:51.003 [DEBUG] [Thread-120168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:48:51.052 [DEBUG] [Thread-120168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:48:51.052 [DEBUG] [Thread-120168] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:48:51.061 [DEBUG] [Thread-120168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:48:51.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:48:51.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:48:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:48:51.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:48:51.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:48:51.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:48:51.096 [DEBUG] [Thread-120168] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:48:56.199 [DEBUG] [Thread-120170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:48:56.389 [DEBUG] [Thread-120171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:11.245 [DEBUG] [Thread-120172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:49:21.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:49:21.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:49:21.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 17), 24.35, 19.18, 0.0, 19.21, 21.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:49:21.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:17
2025-12-03T16:49:21.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:49:22.085 [DEBUG] [Thread-120173] [transport.py] [_log()] starting thread (client mode): 0xa2761ba0
2025-12-03T16:49:22.085 [DEBUG] [Thread-120173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:49:22.106 [DEBUG] [Thread-120173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:49:22.106 [INFO] [Thread-120173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] client lang: <none>
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] server lang: <none>
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] kex follows: False
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:49:22.109 [DEBUG] [Thread-120173] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:49:22.110 [DEBUG] [Thread-120173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:49:22.110 [DEBUG] [Thread-120173] [transport.py] [_log()] Compression: none
2025-12-03T16:49:22.110 [DEBUG] [Thread-120173] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:49:22.126 [DEBUG] [Thread-120173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:49:22.127 [DEBUG] [Thread-120173] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:49:22.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:49:22.128 [DEBUG] [Thread-120173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:49:22.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:49:22.129 [DEBUG] [Thread-120173] [transport.py] [_log()] userauth is OK
2025-12-03T16:49:22.130 [DEBUG] [Thread-120173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:49:22.130 [DEBUG] [Thread-120173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:49:22.130 [DEBUG] [Thread-120173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:49:22.130 [DEBUG] [Thread-120173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:49:22.151 [INFO] [Thread-120173] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:49:22.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:49:22.773 [DEBUG] [Thread-120173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:49:22.773 [DEBUG] [Thread-120173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:49:22.774 [DEBUG] [Thread-120173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:49:22.815 [DEBUG] [Thread-120173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:49:22.815 [DEBUG] [Thread-120173] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:49:22.817 [DEBUG] [Thread-120173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:49:22.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:49:22.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:49:22.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:49:22.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:49:22.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:49:22.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:49:22.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:49:22.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:49:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:49:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.617062 -999.00  +21.30  13.26     25   +0.60 1 1 1 1 1   888    0 21.19 -8.06 ----- 13.3 13.3 143.4 30.6 26.9 -30.6 26.7 -29.3 28.8 -28.2 29.1 -31.2
2025-12-03T16:49:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:49:22.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:49:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.617062
2025-12-03T16:49:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:49:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:49:22.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:49:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:49:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:49:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:17', tmtdew=24.35, humidity=19.18, cloud=0.0, wind=19.21, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:48:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:49:22.842 [DEBUG] [Thread-120173] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:49:22.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:49:22.937 [DEBUG] [Thread-120176] [transport.py] [_log()] starting thread (client mode): 0xa2752d40
2025-12-03T16:49:22.937 [DEBUG] [Thread-120176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:49:22.952 [DEBUG] [Thread-120176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:49:22.952 [INFO] [Thread-120176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:49:22.959 [DEBUG] [Thread-120176] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:49:22.959 [DEBUG] [Thread-120176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:49:22.959 [DEBUG] [Thread-120176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:49:22.959 [DEBUG] [Thread-120176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] client lang: <none>
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] server lang: <none>
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] kex follows: False
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] Compression: none
2025-12-03T16:49:22.960 [DEBUG] [Thread-120176] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:49:23.016 [DEBUG] [Thread-120176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:49:23.016 [DEBUG] [Thread-120176] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:49:23.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:49:23.017 [DEBUG] [Thread-120176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:49:23.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:49:23.080 [DEBUG] [Thread-120176] [transport.py] [_log()] userauth is OK
2025-12-03T16:49:23.080 [DEBUG] [Thread-120176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:49:23.081 [DEBUG] [Thread-120176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:49:23.081 [DEBUG] [Thread-120176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:49:23.081 [DEBUG] [Thread-120176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:49:23.101 [INFO] [Thread-120176] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:49:23.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:49:23.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:49:23.913 [DEBUG] [Thread-120176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:49:23.913 [DEBUG] [Thread-120176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:49:23.962 [DEBUG] [Thread-120176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:49:23.962 [DEBUG] [Thread-120176] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:49:23.971 [DEBUG] [Thread-120176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:49:23.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:49:23.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:49:23.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:49:23.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:49:23.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:49:23.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:49:24.006 [DEBUG] [Thread-120176] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:49:26.271 [DEBUG] [Thread-120178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:40.271 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:40.272 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:41.325 [DEBUG] [Thread-120179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:54.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:49:54.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:49:54.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:49:54.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 49), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:49:54.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:49
2025-12-03T16:49:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:49:54.975 [DEBUG] [Thread-120180] [transport.py] [_log()] starting thread (client mode): 0xa2750940
2025-12-03T16:49:54.975 [DEBUG] [Thread-120180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:49:54.996 [DEBUG] [Thread-120180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:49:54.996 [INFO] [Thread-120180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:49:54.999 [DEBUG] [Thread-120180] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] client lang: <none>
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] server lang: <none>
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] kex follows: False
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] Compression: none
2025-12-03T16:49:55.000 [DEBUG] [Thread-120180] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:49:55.017 [DEBUG] [Thread-120180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:49:55.017 [DEBUG] [Thread-120180] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:49:55.018 [DEBUG] [Thread-120180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:49:55.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:49:55.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:49:55.019 [DEBUG] [Thread-120180] [transport.py] [_log()] userauth is OK
2025-12-03T16:49:55.020 [DEBUG] [Thread-120180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:49:55.020 [DEBUG] [Thread-120180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:49:55.020 [DEBUG] [Thread-120180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:49:55.020 [DEBUG] [Thread-120180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:49:55.043 [INFO] [Thread-120180] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:49:55.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:49:55.801 [DEBUG] [Thread-120180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:49:55.801 [DEBUG] [Thread-120180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:49:55.801 [DEBUG] [Thread-120180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:49:55.842 [DEBUG] [Thread-120180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:49:55.842 [DEBUG] [Thread-120180] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:49:55.845 [DEBUG] [Thread-120180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:49:55.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:49:55.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:49:55.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:49:55.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:49:55.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:49:55.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:49:55.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:49:55.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:49:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:49:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.617410 -999.00  +21.20  19.33     25   +0.60 1 1 1 1 1   887    0 20.63 -8.90 ----- 19.3 19.3 139.8 23.3 26.9 -30.0 27.1 -29.3 28.8 -28.8 29.1 -31.4
2025-12-03T16:49:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:49:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:49:55.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.617410
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:49:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:49', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:49:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:49:55.871 [DEBUG] [Thread-120180] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:49:55.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:49:55.965 [DEBUG] [Thread-120183] [transport.py] [_log()] starting thread (client mode): 0xa2762290
2025-12-03T16:49:55.966 [DEBUG] [Thread-120183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:49:55.981 [DEBUG] [Thread-120183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:49:55.981 [INFO] [Thread-120183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:49:55.988 [DEBUG] [Thread-120183] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:49:55.989 [DEBUG] [Thread-120183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:49:55.989 [DEBUG] [Thread-120183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:49:55.989 [DEBUG] [Thread-120183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:55.989 [DEBUG] [Thread-120183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:49:55.989 [DEBUG] [Thread-120183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] client lang: <none>
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] server lang: <none>
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] kex follows: False
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:49:55.990 [DEBUG] [Thread-120183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:49:55.991 [DEBUG] [Thread-120183] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:49:55.991 [DEBUG] [Thread-120183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:49:55.991 [DEBUG] [Thread-120183] [transport.py] [_log()] Compression: none
2025-12-03T16:49:55.991 [DEBUG] [Thread-120183] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:49:56.050 [DEBUG] [Thread-120183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:49:56.050 [DEBUG] [Thread-120183] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:49:56.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:49:56.052 [DEBUG] [Thread-120183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:49:56.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:49:56.113 [DEBUG] [Thread-120183] [transport.py] [_log()] userauth is OK
2025-12-03T16:49:56.113 [DEBUG] [Thread-120183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:49:56.113 [DEBUG] [Thread-120183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:49:56.113 [DEBUG] [Thread-120183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:49:56.114 [DEBUG] [Thread-120183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:49:56.132 [INFO] [Thread-120183] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:49:56.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:49:56.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:49:56.354 [DEBUG] [Thread-120185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:56.438 [DEBUG] [Thread-120186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:49:56.988 [DEBUG] [Thread-120183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:49:56.988 [DEBUG] [Thread-120183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:49:57.037 [DEBUG] [Thread-120183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:49:57.037 [DEBUG] [Thread-120183] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:49:57.046 [DEBUG] [Thread-120183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:49:57.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:49:57.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:49:57.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:49:57.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:49:57.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:49:57.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:49:57.081 [DEBUG] [Thread-120183] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:50:11.401 [DEBUG] [Thread-120187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:26.431 [DEBUG] [Thread-120188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:27.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:50:27.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:50:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:50:27.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 58), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:50:27.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:58
2025-12-03T16:50:27.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:50:28.053 [DEBUG] [Thread-120189] [transport.py] [_log()] starting thread (client mode): 0xa272b2e0
2025-12-03T16:50:28.053 [DEBUG] [Thread-120189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:50:28.073 [DEBUG] [Thread-120189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:50:28.073 [INFO] [Thread-120189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] client lang: <none>
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] server lang: <none>
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] kex follows: False
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:50:28.076 [DEBUG] [Thread-120189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:50:28.077 [DEBUG] [Thread-120189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:50:28.077 [DEBUG] [Thread-120189] [transport.py] [_log()] Compression: none
2025-12-03T16:50:28.077 [DEBUG] [Thread-120189] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:50:28.093 [DEBUG] [Thread-120189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:50:28.093 [DEBUG] [Thread-120189] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:50:28.093 [DEBUG] [Thread-120189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:50:28.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:50:28.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:50:28.095 [DEBUG] [Thread-120189] [transport.py] [_log()] userauth is OK
2025-12-03T16:50:28.095 [DEBUG] [Thread-120189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:50:28.095 [DEBUG] [Thread-120189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:50:28.096 [DEBUG] [Thread-120189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:50:28.096 [DEBUG] [Thread-120189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:50:28.119 [INFO] [Thread-120189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:50:28.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:50:28.749 [DEBUG] [Thread-120189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:50:28.749 [DEBUG] [Thread-120189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:50:28.750 [DEBUG] [Thread-120189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:50:28.790 [DEBUG] [Thread-120189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:50:28.790 [DEBUG] [Thread-120189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:50:28.793 [DEBUG] [Thread-120189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:50:28.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:50:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:50:28.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:50:28.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:50:28.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:50:28.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:50:28.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:50:28.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:50:28.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:50:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.617756 -999.00  +21.20  12.41     25   +0.70 1 1 1 1 1   887    0 20.70 -12.33 ----- 12.4 12.4 136.1 20.7 26.9 -30.0 27.1 -29.4 28.9 -27.8 29.2 -29.6
2025-12-03T16:50:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:50:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:50:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.617756
2025-12-03T16:50:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:50:28.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:58', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:49:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:50:28.817 [DEBUG] [Thread-120189] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:50:28.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:50:28.918 [DEBUG] [Thread-120192] [transport.py] [_log()] starting thread (client mode): 0xa2728b50
2025-12-03T16:50:28.918 [DEBUG] [Thread-120192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:50:28.932 [DEBUG] [Thread-120192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:50:28.932 [INFO] [Thread-120192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:50:28.940 [DEBUG] [Thread-120192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] client lang: <none>
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] server lang: <none>
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] kex follows: False
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:50:28.941 [DEBUG] [Thread-120192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:50:28.942 [DEBUG] [Thread-120192] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:50:28.942 [DEBUG] [Thread-120192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:50:28.942 [DEBUG] [Thread-120192] [transport.py] [_log()] Compression: none
2025-12-03T16:50:28.942 [DEBUG] [Thread-120192] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:50:28.996 [DEBUG] [Thread-120192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:50:28.996 [DEBUG] [Thread-120192] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:50:28.996 [DEBUG] [Thread-120192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:50:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:50:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:50:29.057 [DEBUG] [Thread-120192] [transport.py] [_log()] userauth is OK
2025-12-03T16:50:29.057 [DEBUG] [Thread-120192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:50:29.057 [DEBUG] [Thread-120192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:50:29.057 [DEBUG] [Thread-120192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:50:29.057 [DEBUG] [Thread-120192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:50:29.076 [INFO] [Thread-120192] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:50:29.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:50:29.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:50:29.945 [DEBUG] [Thread-120192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:50:29.945 [DEBUG] [Thread-120192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:50:29.994 [DEBUG] [Thread-120192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:50:29.994 [DEBUG] [Thread-120192] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:50:30.003 [DEBUG] [Thread-120192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:50:30.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:50:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:50:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:50:30.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:50:30.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:50:30.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:50:30.046 [DEBUG] [Thread-120192] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:50:40.413 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:40.414 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:41.459 [DEBUG] [Thread-120194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:56.473 [DEBUG] [Thread-120195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:50:56.509 [DEBUG] [Thread-120196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:00.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:51:00.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:51:00.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:51:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 58), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:51:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:58
2025-12-03T16:51:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:51:01.067 [DEBUG] [Thread-120197] [transport.py] [_log()] starting thread (client mode): 0xa2751cf0
2025-12-03T16:51:01.067 [DEBUG] [Thread-120197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:51:01.087 [DEBUG] [Thread-120197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:51:01.087 [INFO] [Thread-120197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] client lang: <none>
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] server lang: <none>
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] kex follows: False
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:51:01.090 [DEBUG] [Thread-120197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:51:01.091 [DEBUG] [Thread-120197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:51:01.091 [DEBUG] [Thread-120197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:51:01.091 [DEBUG] [Thread-120197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:51:01.091 [DEBUG] [Thread-120197] [transport.py] [_log()] Compression: none
2025-12-03T16:51:01.091 [DEBUG] [Thread-120197] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:51:01.106 [DEBUG] [Thread-120197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:51:01.106 [DEBUG] [Thread-120197] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:51:01.106 [DEBUG] [Thread-120197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:51:01.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:51:01.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:51:01.107 [DEBUG] [Thread-120197] [transport.py] [_log()] userauth is OK
2025-12-03T16:51:01.107 [DEBUG] [Thread-120197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:51:01.107 [DEBUG] [Thread-120197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:51:01.107 [DEBUG] [Thread-120197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:51:01.107 [DEBUG] [Thread-120197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:51:01.116 [INFO] [Thread-120197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:51:01.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:51:01.889 [DEBUG] [Thread-120197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:51:01.889 [DEBUG] [Thread-120197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:51:01.889 [DEBUG] [Thread-120197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:51:01.930 [DEBUG] [Thread-120197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:51:01.930 [DEBUG] [Thread-120197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:51:01.932 [DEBUG] [Thread-120197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:51:01.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:51:01.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:51:01.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:51:01.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:51:01.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:51:01.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:51:01.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.618103 -999.00  +21.20  15.75     25   +0.70 1 1 1 1 1   887    0 20.37 -14.05 ----- 15.8 15.8 116.8 25.4 26.8 -29.9 27.1 -30.1 28.8 -28.8 29.1 -30.5
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:51:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.618103
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:51:01.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:58', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:50:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:51:01.954 [DEBUG] [Thread-120197] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:51:02.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:51:02.038 [DEBUG] [Thread-120200] [transport.py] [_log()] starting thread (client mode): 0xa517caf0
2025-12-03T16:51:02.038 [DEBUG] [Thread-120200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:51:02.052 [DEBUG] [Thread-120200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:51:02.052 [INFO] [Thread-120200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] client lang: <none>
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] server lang: <none>
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] kex follows: False
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] Compression: none
2025-12-03T16:51:02.060 [DEBUG] [Thread-120200] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:51:02.116 [DEBUG] [Thread-120200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:51:02.117 [DEBUG] [Thread-120200] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:51:02.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:51:02.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:51:02.117 [DEBUG] [Thread-120200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:51:02.176 [DEBUG] [Thread-120200] [transport.py] [_log()] userauth is OK
2025-12-03T16:51:02.176 [DEBUG] [Thread-120200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:51:02.176 [DEBUG] [Thread-120200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:51:02.176 [DEBUG] [Thread-120200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:51:02.176 [DEBUG] [Thread-120200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:51:02.194 [INFO] [Thread-120200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:51:02.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:51:02.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:51:03.050 [DEBUG] [Thread-120200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:51:03.051 [DEBUG] [Thread-120200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:51:03.099 [DEBUG] [Thread-120200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:51:03.099 [DEBUG] [Thread-120200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:51:03.108 [DEBUG] [Thread-120200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:51:03.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:51:03.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:51:03.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:51:03.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:51:03.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:51:03.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:51:03.141 [DEBUG] [Thread-120200] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:51:11.537 [DEBUG] [Thread-120202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:26.580 [DEBUG] [Thread-120203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:33.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:51:33.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:51:33.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:51:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 58), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:51:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:58
2025-12-03T16:51:33.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:51:34.099 [DEBUG] [Thread-120204] [transport.py] [_log()] starting thread (client mode): 0xa2750280
2025-12-03T16:51:34.100 [DEBUG] [Thread-120204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:51:34.120 [DEBUG] [Thread-120204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:51:34.120 [INFO] [Thread-120204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] client lang: <none>
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] server lang: <none>
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] kex follows: False
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:51:34.121 [DEBUG] [Thread-120204] [transport.py] [_log()] Compression: none
2025-12-03T16:51:34.122 [DEBUG] [Thread-120204] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:51:34.130 [DEBUG] [Thread-120204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:51:34.130 [DEBUG] [Thread-120204] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:51:34.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:51:34.131 [DEBUG] [Thread-120204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:51:34.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:51:34.132 [DEBUG] [Thread-120204] [transport.py] [_log()] userauth is OK
2025-12-03T16:51:34.132 [DEBUG] [Thread-120204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:51:34.132 [DEBUG] [Thread-120204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:51:34.132 [DEBUG] [Thread-120204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:51:34.132 [DEBUG] [Thread-120204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:51:34.152 [INFO] [Thread-120204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:51:34.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:51:34.783 [DEBUG] [Thread-120204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:51:34.784 [DEBUG] [Thread-120204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:51:34.784 [DEBUG] [Thread-120204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:51:34.825 [DEBUG] [Thread-120204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:51:34.825 [DEBUG] [Thread-120204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:51:34.828 [DEBUG] [Thread-120204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:51:34.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:51:34.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:51:34.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:51:34.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:51:34.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:51:34.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:51:34.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:51:34.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:51:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:51:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.618451 -999.00  +21.20  13.26     25   +0.80 1 1 1 1 1   887    0 20.35 -15.51 ----- 13.3 13.3 150.0 23.9 26.8 -30.2 27.1 -28.9 28.9 -26.7 29.1 -28.9
2025-12-03T16:51:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:51:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:51:34.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.618451
2025-12-03T16:51:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:51:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:51:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:51:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:51:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:51:34.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:58', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:50:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:51:34.853 [DEBUG] [Thread-120204] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:51:34.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:51:34.953 [DEBUG] [Thread-120207] [transport.py] [_log()] starting thread (client mode): 0xa2728b80
2025-12-03T16:51:34.953 [DEBUG] [Thread-120207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:51:34.967 [DEBUG] [Thread-120207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:51:34.967 [INFO] [Thread-120207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:51:34.975 [DEBUG] [Thread-120207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] client lang: <none>
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] server lang: <none>
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] kex follows: False
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:51:34.976 [DEBUG] [Thread-120207] [transport.py] [_log()] Compression: none
2025-12-03T16:51:34.977 [DEBUG] [Thread-120207] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:51:35.035 [DEBUG] [Thread-120207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:51:35.035 [DEBUG] [Thread-120207] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:51:35.035 [DEBUG] [Thread-120207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:51:35.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:51:35.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:51:35.092 [DEBUG] [Thread-120207] [transport.py] [_log()] userauth is OK
2025-12-03T16:51:35.093 [DEBUG] [Thread-120207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:51:35.093 [DEBUG] [Thread-120207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:51:35.093 [DEBUG] [Thread-120207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:51:35.093 [DEBUG] [Thread-120207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:51:35.110 [INFO] [Thread-120207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:51:35.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:51:35.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:51:35.962 [DEBUG] [Thread-120207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:51:35.963 [DEBUG] [Thread-120207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:51:36.011 [DEBUG] [Thread-120207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:51:36.011 [DEBUG] [Thread-120207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:51:36.020 [DEBUG] [Thread-120207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:51:36.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:51:36.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:51:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:51:36.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:51:36.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:51:36.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:51:36.061 [DEBUG] [Thread-120207] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:51:40.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:40.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:41.607 [DEBUG] [Thread-120209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:56.514 [DEBUG] [Thread-120210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:51:56.644 [DEBUG] [Thread-120211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:06.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:52:06.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:52:06.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:52:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 58), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:52:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:58
2025-12-03T16:52:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:52:07.027 [DEBUG] [Thread-120212] [transport.py] [_log()] starting thread (client mode): 0xa2760b80
2025-12-03T16:52:07.027 [DEBUG] [Thread-120212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:52:07.048 [DEBUG] [Thread-120212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:52:07.048 [INFO] [Thread-120212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:52:07.052 [DEBUG] [Thread-120212] [transport.py] [_log()] client lang: <none>
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] server lang: <none>
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] kex follows: False
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] Compression: none
2025-12-03T16:52:07.053 [DEBUG] [Thread-120212] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:52:07.071 [DEBUG] [Thread-120212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:52:07.072 [DEBUG] [Thread-120212] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:52:07.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:52:07.073 [DEBUG] [Thread-120212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:52:07.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:52:07.075 [DEBUG] [Thread-120212] [transport.py] [_log()] userauth is OK
2025-12-03T16:52:07.075 [DEBUG] [Thread-120212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:52:07.075 [DEBUG] [Thread-120212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:52:07.076 [DEBUG] [Thread-120212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:52:07.076 [DEBUG] [Thread-120212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:52:07.098 [INFO] [Thread-120212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:52:07.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:52:07.890 [DEBUG] [Thread-120212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:52:07.891 [DEBUG] [Thread-120212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:52:07.891 [DEBUG] [Thread-120212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:52:07.932 [DEBUG] [Thread-120212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:52:07.932 [DEBUG] [Thread-120212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:52:07.934 [DEBUG] [Thread-120212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:52:07.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:52:07.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:52:07.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:52:07.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:52:07.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:52:07.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:52:07.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:52:07.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:52:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:52:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.618798 -999.00  +21.60  13.21     25   +1.10 1 1 1 1 1   887    0 20.47 -18.49 ----- 13.2 13.2 149.5 19.1 26.9 -29.5 27.1 -30.4 28.9 -26.8 29.2 -28.6
2025-12-03T16:52:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:52:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:52:07.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.618798
2025-12-03T16:52:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:52:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:52:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:52:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:52:07.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:52:07.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:58', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:51:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:52:07.959 [DEBUG] [Thread-120212] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:52:08.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:52:08.057 [DEBUG] [Thread-120215] [transport.py] [_log()] starting thread (client mode): 0xa2728760
2025-12-03T16:52:08.057 [DEBUG] [Thread-120215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:52:08.076 [DEBUG] [Thread-120215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:52:08.076 [INFO] [Thread-120215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:52:08.083 [DEBUG] [Thread-120215] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:52:08.083 [DEBUG] [Thread-120215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:52:08.083 [DEBUG] [Thread-120215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:52:08.083 [DEBUG] [Thread-120215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:08.083 [DEBUG] [Thread-120215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] client lang: <none>
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] server lang: <none>
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] kex follows: False
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] Compression: none
2025-12-03T16:52:08.084 [DEBUG] [Thread-120215] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:52:08.143 [DEBUG] [Thread-120215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:52:08.144 [DEBUG] [Thread-120215] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:52:08.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:52:08.145 [DEBUG] [Thread-120215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:52:08.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:52:08.205 [DEBUG] [Thread-120215] [transport.py] [_log()] userauth is OK
2025-12-03T16:52:08.205 [DEBUG] [Thread-120215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:52:08.205 [DEBUG] [Thread-120215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:52:08.205 [DEBUG] [Thread-120215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:52:08.205 [DEBUG] [Thread-120215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:52:08.224 [INFO] [Thread-120215] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:52:08.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:52:08.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:52:09.081 [DEBUG] [Thread-120215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:52:09.081 [DEBUG] [Thread-120215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:52:09.129 [DEBUG] [Thread-120215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:52:09.129 [DEBUG] [Thread-120215] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:52:09.138 [DEBUG] [Thread-120215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:52:09.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:52:09.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:52:09.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:52:09.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:52:09.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:52:09.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:52:09.175 [DEBUG] [Thread-120215] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:52:11.678 [DEBUG] [Thread-120217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:26.725 [DEBUG] [Thread-120218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:52:39.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:52:39.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:52:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 49, 58), 24.18, 19.7, 0.0, 21.21, 21.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:52:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:49:58
2025-12-03T16:52:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:52:40.131 [DEBUG] [Thread-120219] [transport.py] [_log()] starting thread (client mode): 0xa27477f0
2025-12-03T16:52:40.132 [DEBUG] [Thread-120219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:52:40.151 [DEBUG] [Thread-120219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:52:40.151 [INFO] [Thread-120219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:40.154 [DEBUG] [Thread-120219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] client lang: <none>
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] server lang: <none>
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] kex follows: False
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] Compression: none
2025-12-03T16:52:40.155 [DEBUG] [Thread-120219] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:52:40.173 [DEBUG] [Thread-120219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:52:40.174 [DEBUG] [Thread-120219] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:52:40.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:52:40.175 [DEBUG] [Thread-120219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:52:40.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:52:40.177 [DEBUG] [Thread-120219] [transport.py] [_log()] userauth is OK
2025-12-03T16:52:40.177 [DEBUG] [Thread-120219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:52:40.178 [DEBUG] [Thread-120219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:52:40.178 [DEBUG] [Thread-120219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:52:40.178 [DEBUG] [Thread-120219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:52:40.203 [INFO] [Thread-120219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:52:40.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:52:40.710 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:40.711 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:40.846 [DEBUG] [Thread-120219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:52:40.846 [DEBUG] [Thread-120219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:52:40.847 [DEBUG] [Thread-120219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:52:40.888 [DEBUG] [Thread-120219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:52:40.888 [DEBUG] [Thread-120219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:52:40.891 [DEBUG] [Thread-120219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:52:40.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:52:40.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:52:40.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:52:40.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:52:40.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:52:40.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:52:40.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.619492 -999.00  +22.10  23.44     25   +1.10 1 1 1 1 1   887    0 20.68 -17.94 ----- 23.4 23.4 169.2 26.0 26.9 -30.8 26.9 -30.7 28.8 -30.4 29.0 -31.7
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:52:40.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.619492
2025-12-03T16:52:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:52:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:52:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:52:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:52:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:52:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:49:58', tmtdew=24.18, humidity=19.7, cloud=0.0, wind=21.21, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:52:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:52:40.922 [DEBUG] [Thread-120219] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:52:41.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:52:41.020 [DEBUG] [Thread-120222] [transport.py] [_log()] starting thread (client mode): 0xa2760fa0
2025-12-03T16:52:41.020 [DEBUG] [Thread-120222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:52:41.039 [DEBUG] [Thread-120222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:52:41.039 [INFO] [Thread-120222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:52:41.046 [DEBUG] [Thread-120222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:52:41.047 [DEBUG] [Thread-120222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] client lang: <none>
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] server lang: <none>
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] kex follows: False
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] Compression: none
2025-12-03T16:52:41.048 [DEBUG] [Thread-120222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:52:41.104 [DEBUG] [Thread-120222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:52:41.104 [DEBUG] [Thread-120222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:52:41.105 [DEBUG] [Thread-120222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:52:41.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:52:41.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:52:41.161 [DEBUG] [Thread-120222] [transport.py] [_log()] userauth is OK
2025-12-03T16:52:41.161 [DEBUG] [Thread-120222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:52:41.161 [DEBUG] [Thread-120222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:52:41.161 [DEBUG] [Thread-120222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:52:41.161 [DEBUG] [Thread-120222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:52:41.179 [INFO] [Thread-120222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:52:41.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:52:41.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:52:41.755 [DEBUG] [Thread-120224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:42.021 [DEBUG] [Thread-120222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:52:42.021 [DEBUG] [Thread-120222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:52:42.069 [DEBUG] [Thread-120222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:52:42.070 [DEBUG] [Thread-120222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:52:42.078 [DEBUG] [Thread-120222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:52:42.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:52:42.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:52:42.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:52:42.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:52:42.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:52:42.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:52:42.112 [DEBUG] [Thread-120222] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:52:56.543 [DEBUG] [Thread-120225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:52:56.800 [DEBUG] [Thread-120226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:11.830 [DEBUG] [Thread-120227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:12.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:53:12.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:53:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:53:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 53, 2), 24.38, 19.23, 0.0, 22.32, 21.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:53:12.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:53:02
2025-12-03T16:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:53:13.083 [DEBUG] [Thread-120228] [transport.py] [_log()] starting thread (client mode): 0xa2762a10
2025-12-03T16:53:13.083 [DEBUG] [Thread-120228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:53:13.103 [DEBUG] [Thread-120228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:53:13.103 [INFO] [Thread-120228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:53:13.105 [DEBUG] [Thread-120228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:53:13.105 [DEBUG] [Thread-120228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:53:13.105 [DEBUG] [Thread-120228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:53:13.105 [DEBUG] [Thread-120228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:13.105 [DEBUG] [Thread-120228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] client lang: <none>
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] server lang: <none>
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] kex follows: False
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] Compression: none
2025-12-03T16:53:13.106 [DEBUG] [Thread-120228] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:53:13.125 [DEBUG] [Thread-120228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:53:13.125 [DEBUG] [Thread-120228] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:53:13.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:53:13.126 [DEBUG] [Thread-120228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:53:13.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:53:13.128 [DEBUG] [Thread-120228] [transport.py] [_log()] userauth is OK
2025-12-03T16:53:13.128 [DEBUG] [Thread-120228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:53:13.128 [DEBUG] [Thread-120228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:53:13.128 [DEBUG] [Thread-120228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:53:13.129 [DEBUG] [Thread-120228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:53:13.152 [INFO] [Thread-120228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:53:13.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:53:13.919 [DEBUG] [Thread-120228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:53:13.919 [DEBUG] [Thread-120228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:53:13.919 [DEBUG] [Thread-120228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:53:13.960 [DEBUG] [Thread-120228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:53:13.960 [DEBUG] [Thread-120228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:53:13.963 [DEBUG] [Thread-120228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:53:13.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:53:13.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:53:13.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:53:13.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:53:13.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:53:13.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:53:13.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:53:13.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:53:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:53:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.619840 -999.00  +21.90  17.50     25   +1.10 1 1 1 1 1   887    0 20.62 -16.58 ----- 17.5 17.5 202.0 26.8 26.9 -30.6 26.8 -31.5 28.6 -28.8 28.9 -31.0
2025-12-03T16:53:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:53:13.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:53:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.619840
2025-12-03T16:53:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:53:13.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:53:13.988 [DEBUG] [Thread-120228] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:53:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:53:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:53:13.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:53:13.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:53:02', tmtdew=24.38, humidity=19.23, cloud=0.0, wind=22.32, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:52:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:53:14.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:53:14.083 [DEBUG] [Thread-120231] [transport.py] [_log()] starting thread (client mode): 0xa517d5d0
2025-12-03T16:53:14.084 [DEBUG] [Thread-120231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:53:14.098 [DEBUG] [Thread-120231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:53:14.098 [INFO] [Thread-120231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] client lang: <none>
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] server lang: <none>
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] kex follows: False
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:53:14.106 [DEBUG] [Thread-120231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:53:14.107 [DEBUG] [Thread-120231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:53:14.107 [DEBUG] [Thread-120231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:53:14.107 [DEBUG] [Thread-120231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:53:14.107 [DEBUG] [Thread-120231] [transport.py] [_log()] Compression: none
2025-12-03T16:53:14.107 [DEBUG] [Thread-120231] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:53:14.168 [DEBUG] [Thread-120231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:53:14.168 [DEBUG] [Thread-120231] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:53:14.169 [DEBUG] [Thread-120231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:53:14.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:53:14.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:53:14.224 [DEBUG] [Thread-120231] [transport.py] [_log()] userauth is OK
2025-12-03T16:53:14.225 [DEBUG] [Thread-120231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:53:14.225 [DEBUG] [Thread-120231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:53:14.225 [DEBUG] [Thread-120231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:53:14.225 [DEBUG] [Thread-120231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:53:14.243 [INFO] [Thread-120231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:53:14.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:53:14.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:53:15.092 [DEBUG] [Thread-120231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:53:15.092 [DEBUG] [Thread-120231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:53:15.140 [DEBUG] [Thread-120231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:53:15.140 [DEBUG] [Thread-120231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:53:15.148 [DEBUG] [Thread-120231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:53:15.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:53:15.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:53:15.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:53:15.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:53:15.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:53:15.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:53:15.185 [DEBUG] [Thread-120231] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:53:26.860 [DEBUG] [Thread-120233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:40.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:40.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:41.905 [DEBUG] [Thread-120234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:53:45.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:53:45.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:53:45.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 53, 34), 23.9, 19.77, 0.0, 17.5, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:53:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:53:34
2025-12-03T16:53:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:53:46.154 [DEBUG] [Thread-120235] [transport.py] [_log()] starting thread (client mode): 0xa517d510
2025-12-03T16:53:46.154 [DEBUG] [Thread-120235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:53:46.174 [DEBUG] [Thread-120235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:53:46.174 [INFO] [Thread-120235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:53:46.177 [DEBUG] [Thread-120235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:53:46.177 [DEBUG] [Thread-120235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:53:46.177 [DEBUG] [Thread-120235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] client lang: <none>
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] server lang: <none>
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] kex follows: False
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] Compression: none
2025-12-03T16:53:46.178 [DEBUG] [Thread-120235] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:53:46.197 [DEBUG] [Thread-120235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:53:46.197 [DEBUG] [Thread-120235] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:53:46.197 [DEBUG] [Thread-120235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:53:46.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:53:46.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:53:46.199 [DEBUG] [Thread-120235] [transport.py] [_log()] userauth is OK
2025-12-03T16:53:46.199 [DEBUG] [Thread-120235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:53:46.199 [DEBUG] [Thread-120235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:53:46.200 [DEBUG] [Thread-120235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:53:46.200 [DEBUG] [Thread-120235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:53:46.235 [INFO] [Thread-120235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:53:46.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:53:46.874 [DEBUG] [Thread-120235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:53:46.874 [DEBUG] [Thread-120235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:53:46.874 [DEBUG] [Thread-120235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:53:46.915 [DEBUG] [Thread-120235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:53:46.915 [DEBUG] [Thread-120235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:53:46.918 [DEBUG] [Thread-120235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:53:46.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:53:46.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:53:46.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:53:46.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:53:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:53:46.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:53:46.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.620187 -999.00  +21.80  19.66     24   +0.80 1 1 1 1 1   887    0 20.63 -18.62 ----- 19.7 19.7 173.6 26.2 26.8 -31.3 26.6 -34.3 28.5 -28.6 28.9 -30.2
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:53:46.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.620187
2025-12-03T16:53:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:53:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:53:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:53:46.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:53:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:53:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:53:34', tmtdew=23.9, humidity=19.77, cloud=0.0, wind=17.5, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:53:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:53:46.943 [DEBUG] [Thread-120235] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:53:47.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:53:47.039 [DEBUG] [Thread-120238] [transport.py] [_log()] starting thread (client mode): 0xa51d0760
2025-12-03T16:53:47.040 [DEBUG] [Thread-120238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:53:47.055 [DEBUG] [Thread-120238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:53:47.055 [INFO] [Thread-120238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:53:47.063 [DEBUG] [Thread-120238] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:53:47.063 [DEBUG] [Thread-120238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] client lang: <none>
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] server lang: <none>
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] kex follows: False
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] Compression: none
2025-12-03T16:53:47.064 [DEBUG] [Thread-120238] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:53:47.121 [DEBUG] [Thread-120238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:53:47.121 [DEBUG] [Thread-120238] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:53:47.122 [DEBUG] [Thread-120238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:53:47.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:53:47.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:53:47.178 [DEBUG] [Thread-120238] [transport.py] [_log()] userauth is OK
2025-12-03T16:53:47.178 [DEBUG] [Thread-120238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:53:47.178 [DEBUG] [Thread-120238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:53:47.178 [DEBUG] [Thread-120238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:53:47.178 [DEBUG] [Thread-120238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:53:47.197 [INFO] [Thread-120238] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:53:47.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:53:47.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:53:48.075 [DEBUG] [Thread-120238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:53:48.075 [DEBUG] [Thread-120238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:53:48.126 [DEBUG] [Thread-120238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:53:48.126 [DEBUG] [Thread-120238] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:53:48.138 [DEBUG] [Thread-120238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:53:48.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:53:48.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:53:48.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:53:48.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:53:48.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:53:48.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:53:48.179 [DEBUG] [Thread-120238] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:53:56.583 [DEBUG] [Thread-120240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:53:56.935 [DEBUG] [Thread-120241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:11.988 [DEBUG] [Thread-120242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:54:18.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:54:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:54:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 54, 6), 23.73, 20.02, 0.0, 15.49, 21.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:54:18.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:54:06
2025-12-03T16:54:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:54:19.152 [DEBUG] [Thread-120243] [transport.py] [_log()] starting thread (client mode): 0xa27284f0
2025-12-03T16:54:19.152 [DEBUG] [Thread-120243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:54:19.172 [DEBUG] [Thread-120243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:54:19.172 [INFO] [Thread-120243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:54:19.175 [DEBUG] [Thread-120243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:54:19.175 [DEBUG] [Thread-120243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] client lang: <none>
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] server lang: <none>
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] kex follows: False
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:54:19.176 [DEBUG] [Thread-120243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:54:19.177 [DEBUG] [Thread-120243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:54:19.177 [DEBUG] [Thread-120243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:54:19.177 [DEBUG] [Thread-120243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:54:19.177 [DEBUG] [Thread-120243] [transport.py] [_log()] Compression: none
2025-12-03T16:54:19.177 [DEBUG] [Thread-120243] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:54:19.195 [DEBUG] [Thread-120243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:54:19.196 [DEBUG] [Thread-120243] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:54:19.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:54:19.197 [DEBUG] [Thread-120243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:54:19.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:54:19.199 [DEBUG] [Thread-120243] [transport.py] [_log()] userauth is OK
2025-12-03T16:54:19.199 [DEBUG] [Thread-120243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:54:19.199 [DEBUG] [Thread-120243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:54:19.199 [DEBUG] [Thread-120243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:54:19.200 [DEBUG] [Thread-120243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:54:19.224 [INFO] [Thread-120243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:54:19.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:54:20.014 [DEBUG] [Thread-120243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:54:20.014 [DEBUG] [Thread-120243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:54:20.015 [DEBUG] [Thread-120243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:54:20.055 [DEBUG] [Thread-120243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:54:20.055 [DEBUG] [Thread-120243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:54:20.058 [DEBUG] [Thread-120243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:54:20.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:54:20.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:54:20.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:54:20.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:54:20.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:54:20.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:54:20.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:54:20.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:54:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:54:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.620534 -999.00  +21.60  14.50     25   +1.00 1 1 1 1 1   887    0 20.40 -19.32 ----- 14.5 14.5 189.6 20.6 26.8 -30.6 26.6 -31.3 28.6 -27.8 28.9 -30.1
2025-12-03T16:54:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:54:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:54:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.620534
2025-12-03T16:54:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:54:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:54:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:54:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:54:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:54:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:54:06', tmtdew=23.73, humidity=20.02, cloud=0.0, wind=15.49, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:53:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:54:20.084 [DEBUG] [Thread-120243] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:54:20.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:54:20.181 [DEBUG] [Thread-120246] [transport.py] [_log()] starting thread (client mode): 0xa2729120
2025-12-03T16:54:20.181 [DEBUG] [Thread-120246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:54:20.195 [DEBUG] [Thread-120246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:54:20.195 [INFO] [Thread-120246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:20.203 [DEBUG] [Thread-120246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] client lang: <none>
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] server lang: <none>
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] kex follows: False
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] Compression: none
2025-12-03T16:54:20.204 [DEBUG] [Thread-120246] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:54:20.260 [DEBUG] [Thread-120246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:54:20.260 [DEBUG] [Thread-120246] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:54:20.261 [DEBUG] [Thread-120246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:54:20.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:54:20.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:54:20.316 [DEBUG] [Thread-120246] [transport.py] [_log()] userauth is OK
2025-12-03T16:54:20.317 [DEBUG] [Thread-120246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:54:20.317 [DEBUG] [Thread-120246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:54:20.317 [DEBUG] [Thread-120246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:54:20.317 [DEBUG] [Thread-120246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:54:20.335 [INFO] [Thread-120246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:54:20.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:54:20.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:54:21.186 [DEBUG] [Thread-120246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:54:21.186 [DEBUG] [Thread-120246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:54:21.233 [DEBUG] [Thread-120246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:54:21.234 [DEBUG] [Thread-120246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:54:21.242 [DEBUG] [Thread-120246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:54:21.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:54:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:54:21.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:54:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:54:21.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:54:21.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:54:21.279 [DEBUG] [Thread-120246] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:54:27.019 [DEBUG] [Thread-120248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:40.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:40.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:42.056 [DEBUG] [Thread-120249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:51.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:54:51.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:54:51.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:54:51.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 54, 38), 23.62, 20.55, 0.0, 15.26, 21.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:54:51.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:54:38
2025-12-03T16:54:52.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:54:52.282 [DEBUG] [Thread-120250] [transport.py] [_log()] starting thread (client mode): 0xa517f850
2025-12-03T16:54:52.282 [DEBUG] [Thread-120250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:54:52.302 [DEBUG] [Thread-120250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:54:52.302 [INFO] [Thread-120250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] client lang: <none>
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] server lang: <none>
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] kex follows: False
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] Compression: none
2025-12-03T16:54:52.306 [DEBUG] [Thread-120250] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:54:52.321 [DEBUG] [Thread-120250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:54:52.321 [DEBUG] [Thread-120250] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:54:52.321 [DEBUG] [Thread-120250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:54:52.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:54:52.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:54:52.322 [DEBUG] [Thread-120250] [transport.py] [_log()] userauth is OK
2025-12-03T16:54:52.323 [DEBUG] [Thread-120250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:54:52.323 [DEBUG] [Thread-120250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:54:52.323 [DEBUG] [Thread-120250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:54:52.323 [DEBUG] [Thread-120250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:54:52.335 [INFO] [Thread-120250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:54:52.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:54:52.979 [DEBUG] [Thread-120250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:54:52.979 [DEBUG] [Thread-120250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:54:52.979 [DEBUG] [Thread-120250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:54:53.021 [DEBUG] [Thread-120250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:54:53.021 [DEBUG] [Thread-120250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:54:53.023 [DEBUG] [Thread-120250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:54:53.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:54:53.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:54:53.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:54:53.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:54:53.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:54:53.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:54:53.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.620881 -999.00  +21.50   9.91     25   +1.10 1 1 1 1 1   887    0 20.00 -20.28 ----- 9.9 9.9 204.6 13.6 26.8 -30.1 26.8 -29.3 28.6 -26.9 29.0 -28.8
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.620881
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:54:53.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:54:38', tmtdew=23.62, humidity=20.55, cloud=0.0, wind=15.26, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:54:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:54:53.045 [DEBUG] [Thread-120250] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:54:53.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:54:53.130 [DEBUG] [Thread-120253] [transport.py] [_log()] starting thread (client mode): 0xa2745210
2025-12-03T16:54:53.130 [DEBUG] [Thread-120253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:54:53.146 [DEBUG] [Thread-120253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:54:53.146 [INFO] [Thread-120253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] client lang: <none>
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] server lang: <none>
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] kex follows: False
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] Compression: none
2025-12-03T16:54:53.156 [DEBUG] [Thread-120253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:54:53.211 [DEBUG] [Thread-120253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:54:53.212 [DEBUG] [Thread-120253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:54:53.212 [DEBUG] [Thread-120253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:54:53.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:54:53.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:54:53.268 [DEBUG] [Thread-120253] [transport.py] [_log()] userauth is OK
2025-12-03T16:54:53.268 [DEBUG] [Thread-120253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:54:53.268 [DEBUG] [Thread-120253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:54:53.268 [DEBUG] [Thread-120253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:54:53.268 [DEBUG] [Thread-120253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:54:53.283 [INFO] [Thread-120253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:54:53.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:54:53.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:54:54.118 [DEBUG] [Thread-120253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:54:54.118 [DEBUG] [Thread-120253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:54:54.165 [DEBUG] [Thread-120253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:54:54.165 [DEBUG] [Thread-120253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:54:54.174 [DEBUG] [Thread-120253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:54:54.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:54:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:54:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:54:54.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:54:54.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:54:54.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:54:54.206 [DEBUG] [Thread-120253] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:54:56.615 [DEBUG] [Thread-120255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:54:57.084 [DEBUG] [Thread-120256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:12.122 [DEBUG] [Thread-120257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:24.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:55:24.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:55:24.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:55:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 55, 10), 23.63, 20.55, 0.0, 17.82, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:55:24.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:55:10
2025-12-03T16:55:25.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:55:25.176 [DEBUG] [Thread-120258] [transport.py] [_log()] starting thread (client mode): 0xa2761c60
2025-12-03T16:55:25.176 [DEBUG] [Thread-120258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:55:25.192 [DEBUG] [Thread-120258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:55:25.192 [INFO] [Thread-120258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] client lang: <none>
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] server lang: <none>
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] kex follows: False
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:55:25.194 [DEBUG] [Thread-120258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:55:25.195 [DEBUG] [Thread-120258] [transport.py] [_log()] Compression: none
2025-12-03T16:55:25.195 [DEBUG] [Thread-120258] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:55:25.211 [DEBUG] [Thread-120258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:55:25.211 [DEBUG] [Thread-120258] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:55:25.211 [DEBUG] [Thread-120258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:55:25.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:55:25.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:55:25.213 [DEBUG] [Thread-120258] [transport.py] [_log()] userauth is OK
2025-12-03T16:55:25.213 [DEBUG] [Thread-120258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:55:25.213 [DEBUG] [Thread-120258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:55:25.213 [DEBUG] [Thread-120258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:55:25.213 [DEBUG] [Thread-120258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:55:25.227 [INFO] [Thread-120258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:55:25.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:55:26.030 [DEBUG] [Thread-120258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:55:26.030 [DEBUG] [Thread-120258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:55:26.031 [DEBUG] [Thread-120258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:55:26.071 [DEBUG] [Thread-120258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:55:26.071 [DEBUG] [Thread-120258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:55:26.074 [DEBUG] [Thread-120258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:55:26.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:55:26.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:55:26.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:55:26.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:55:26.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:55:26.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:55:26.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.621229 -999.00  +21.60  11.79     25   +1.20 1 1 1 1 1   887    0 20.15 -23.18 ----- 11.8 11.8 179.4 16.9 26.8 -29.9 26.7 -29.4 28.7 -27.2 29.1 -29.6
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:55:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.621229
2025-12-03T16:55:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:55:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:55:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:55:26.091 [DEBUG] [Thread-120258] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:55:26.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:55:26.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:55:26.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:55:10', tmtdew=23.63, humidity=20.55, cloud=0.0, wind=17.82, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:54:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:55:26.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:55:26.188 [DEBUG] [Thread-120261] [transport.py] [_log()] starting thread (client mode): 0xa27610c0
2025-12-03T16:55:26.188 [DEBUG] [Thread-120261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:55:26.202 [DEBUG] [Thread-120261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:55:26.202 [INFO] [Thread-120261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:55:26.210 [DEBUG] [Thread-120261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] client lang: <none>
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] server lang: <none>
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] kex follows: False
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] Compression: none
2025-12-03T16:55:26.211 [DEBUG] [Thread-120261] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:55:26.268 [DEBUG] [Thread-120261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:55:26.268 [DEBUG] [Thread-120261] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:55:26.269 [DEBUG] [Thread-120261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:55:26.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:55:26.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:55:26.324 [DEBUG] [Thread-120261] [transport.py] [_log()] userauth is OK
2025-12-03T16:55:26.325 [DEBUG] [Thread-120261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:55:26.325 [DEBUG] [Thread-120261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:55:26.325 [DEBUG] [Thread-120261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:55:26.325 [DEBUG] [Thread-120261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:55:26.344 [INFO] [Thread-120261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:55:26.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:55:26.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:55:27.152 [DEBUG] [Thread-120263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:27.160 [DEBUG] [Thread-120261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:55:27.161 [DEBUG] [Thread-120261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:55:27.208 [DEBUG] [Thread-120261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:55:27.208 [DEBUG] [Thread-120261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:55:27.224 [DEBUG] [Thread-120261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:55:27.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:55:27.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:55:27.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:55:27.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:55:27.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:55:27.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:55:27.262 [DEBUG] [Thread-120261] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:55:41.133 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:41.134 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:42.192 [DEBUG] [Thread-120264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:56.658 [DEBUG] [Thread-120265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:57.220 [DEBUG] [Thread-120266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:55:57.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:55:57.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:55:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:55:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 55, 42), 23.63, 20.55, 0.0, 28.21, 21.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:55:57.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:55:42
2025-12-03T16:55:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:55:58.222 [DEBUG] [Thread-120267] [transport.py] [_log()] starting thread (client mode): 0xa517f4c0
2025-12-03T16:55:58.222 [DEBUG] [Thread-120267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:55:58.243 [DEBUG] [Thread-120267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:55:58.243 [INFO] [Thread-120267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] client lang: <none>
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] server lang: <none>
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] kex follows: False
2025-12-03T16:55:58.246 [DEBUG] [Thread-120267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] Compression: none
2025-12-03T16:55:58.247 [DEBUG] [Thread-120267] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:55:58.263 [DEBUG] [Thread-120267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:55:58.263 [DEBUG] [Thread-120267] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:55:58.264 [DEBUG] [Thread-120267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:55:58.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:55:58.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:55:58.265 [DEBUG] [Thread-120267] [transport.py] [_log()] userauth is OK
2025-12-03T16:55:58.266 [DEBUG] [Thread-120267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:55:58.266 [DEBUG] [Thread-120267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:55:58.266 [DEBUG] [Thread-120267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:55:58.266 [DEBUG] [Thread-120267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:55:58.283 [INFO] [Thread-120267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:55:58.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:55:58.915 [DEBUG] [Thread-120267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:55:58.915 [DEBUG] [Thread-120267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:55:58.915 [DEBUG] [Thread-120267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:55:58.956 [DEBUG] [Thread-120267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:55:58.956 [DEBUG] [Thread-120267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:55:58.959 [DEBUG] [Thread-120267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:55:58.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:55:58.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:55:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:55:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:55:58.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:55:58.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:55:58.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:55:58.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:55:58.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:55:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.621575 -999.00  +21.80  16.50     25   +1.40 1 1 1 1 1   887    0 20.52 -24.78 ----- 16.5 16.5 190.8 21.4 26.8 -30.5 26.6 -31.2 28.6 -29.5 28.8 -31.0
2025-12-03T16:55:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:55:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:55:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.621575
2025-12-03T16:55:58.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:55:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:55:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:55:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:55:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:55:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:55:42', tmtdew=23.63, humidity=20.55, cloud=0.0, wind=28.21, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:55:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:55:58.982 [DEBUG] [Thread-120267] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:55:59.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:55:59.078 [DEBUG] [Thread-120270] [transport.py] [_log()] starting thread (client mode): 0xa2728e80
2025-12-03T16:55:59.078 [DEBUG] [Thread-120270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:55:59.093 [DEBUG] [Thread-120270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:55:59.093 [INFO] [Thread-120270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:55:59.101 [DEBUG] [Thread-120270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] client lang: <none>
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] server lang: <none>
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] kex follows: False
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] Compression: none
2025-12-03T16:55:59.102 [DEBUG] [Thread-120270] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:55:59.163 [DEBUG] [Thread-120270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:55:59.164 [DEBUG] [Thread-120270] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:55:59.164 [DEBUG] [Thread-120270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:55:59.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:55:59.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:55:59.220 [DEBUG] [Thread-120270] [transport.py] [_log()] userauth is OK
2025-12-03T16:55:59.220 [DEBUG] [Thread-120270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:55:59.221 [DEBUG] [Thread-120270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:55:59.221 [DEBUG] [Thread-120270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:55:59.221 [DEBUG] [Thread-120270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:55:59.240 [INFO] [Thread-120270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:55:59.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:55:59.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:56:00.085 [DEBUG] [Thread-120270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:56:00.086 [DEBUG] [Thread-120270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:56:00.134 [DEBUG] [Thread-120270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:56:00.134 [DEBUG] [Thread-120270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:56:00.143 [DEBUG] [Thread-120270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:56:00.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:56:00.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:56:00.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:56:00.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:56:00.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:56:00.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:56:00.176 [DEBUG] [Thread-120270] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:56:12.245 [DEBUG] [Thread-120272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:27.281 [DEBUG] [Thread-120273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:30.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:56:30.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:56:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:56:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 56, 14), 23.76, 20.38, 0.0, 26.94, 21.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:56:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:56:14
2025-12-03T16:56:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:56:31.119 [DEBUG] [Thread-120274] [transport.py] [_log()] starting thread (client mode): 0xa2729000
2025-12-03T16:56:31.119 [DEBUG] [Thread-120274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:56:31.138 [DEBUG] [Thread-120274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:56:31.138 [INFO] [Thread-120274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:56:31.141 [DEBUG] [Thread-120274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] client lang: <none>
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] server lang: <none>
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] kex follows: False
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] Compression: none
2025-12-03T16:56:31.142 [DEBUG] [Thread-120274] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:56:31.161 [DEBUG] [Thread-120274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:56:31.161 [DEBUG] [Thread-120274] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:56:31.162 [DEBUG] [Thread-120274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:56:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:56:31.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:56:31.163 [DEBUG] [Thread-120274] [transport.py] [_log()] userauth is OK
2025-12-03T16:56:31.164 [DEBUG] [Thread-120274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:56:31.164 [DEBUG] [Thread-120274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:56:31.164 [DEBUG] [Thread-120274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:56:31.164 [DEBUG] [Thread-120274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:56:31.199 [INFO] [Thread-120274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:56:31.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:56:31.849 [DEBUG] [Thread-120274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:56:31.850 [DEBUG] [Thread-120274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:56:31.850 [DEBUG] [Thread-120274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:56:31.891 [DEBUG] [Thread-120274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:56:31.891 [DEBUG] [Thread-120274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:56:31.894 [DEBUG] [Thread-120274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:56:31.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:56:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:56:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:56:31.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:56:31.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:56:31.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:56:31.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:56:31.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.621923 -999.00  +21.90  21.06     25   +1.50 1 1 1 1 1   887    0 20.69 -25.51 ----- 21.1 21.1 152.6 25.7 26.8 -30.0 26.6 -29.2 28.6 -27.6 28.9 -29.5
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.621923
2025-12-03T16:56:31.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:56:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:56:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:56:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:56:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:56:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:56:14', tmtdew=23.76, humidity=20.38, cloud=0.0, wind=26.94, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:55:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:56:31.919 [DEBUG] [Thread-120274] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:56:32.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:56:32.016 [DEBUG] [Thread-120277] [transport.py] [_log()] starting thread (client mode): 0xa277b280
2025-12-03T16:56:32.016 [DEBUG] [Thread-120277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:56:32.032 [DEBUG] [Thread-120277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:56:32.032 [INFO] [Thread-120277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:56:32.039 [DEBUG] [Thread-120277] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:56:32.039 [DEBUG] [Thread-120277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:56:32.040 [DEBUG] [Thread-120277] [transport.py] [_log()] client lang: <none>
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] server lang: <none>
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] kex follows: False
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] Compression: none
2025-12-03T16:56:32.041 [DEBUG] [Thread-120277] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:56:32.098 [DEBUG] [Thread-120277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:56:32.099 [DEBUG] [Thread-120277] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:56:32.099 [DEBUG] [Thread-120277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:56:32.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:56:32.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:56:32.156 [DEBUG] [Thread-120277] [transport.py] [_log()] userauth is OK
2025-12-03T16:56:32.157 [DEBUG] [Thread-120277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:56:32.157 [DEBUG] [Thread-120277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:56:32.157 [DEBUG] [Thread-120277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:56:32.157 [DEBUG] [Thread-120277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:56:32.177 [INFO] [Thread-120277] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:56:32.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:56:32.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:56:33.050 [DEBUG] [Thread-120277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:56:33.050 [DEBUG] [Thread-120277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:56:33.098 [DEBUG] [Thread-120277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:56:33.098 [DEBUG] [Thread-120277] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:56:33.107 [DEBUG] [Thread-120277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:56:33.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:56:33.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:56:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:56:33.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:56:33.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:56:33.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:56:33.142 [DEBUG] [Thread-120277] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:56:41.272 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:41.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:42.311 [DEBUG] [Thread-120279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:56.729 [DEBUG] [Thread-120280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:56:57.355 [DEBUG] [Thread-120281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:03.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:57:03.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:57:03.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:57:03.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 56, 46), 24.26, 19.43, 0.0, 26.78, 22.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:57:03.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:56:46
2025-12-03T16:57:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:57:04.067 [DEBUG] [Thread-120282] [transport.py] [_log()] starting thread (client mode): 0xa51d3580
2025-12-03T16:57:04.067 [DEBUG] [Thread-120282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:57:04.087 [DEBUG] [Thread-120282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:57:04.087 [INFO] [Thread-120282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:57:04.090 [DEBUG] [Thread-120282] [transport.py] [_log()] client lang: <none>
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] server lang: <none>
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] kex follows: False
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] Compression: none
2025-12-03T16:57:04.091 [DEBUG] [Thread-120282] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:57:04.107 [DEBUG] [Thread-120282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:57:04.108 [DEBUG] [Thread-120282] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:57:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:57:04.108 [DEBUG] [Thread-120282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:57:04.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:57:04.110 [DEBUG] [Thread-120282] [transport.py] [_log()] userauth is OK
2025-12-03T16:57:04.111 [DEBUG] [Thread-120282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:57:04.111 [DEBUG] [Thread-120282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:57:04.111 [DEBUG] [Thread-120282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:57:04.111 [DEBUG] [Thread-120282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:57:04.135 [INFO] [Thread-120282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:57:04.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:57:04.785 [DEBUG] [Thread-120282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:57:04.786 [DEBUG] [Thread-120282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:57:04.786 [DEBUG] [Thread-120282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:57:04.827 [DEBUG] [Thread-120282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:57:04.827 [DEBUG] [Thread-120282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:57:04.830 [DEBUG] [Thread-120282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:57:04.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:57:04.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:57:04.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:57:04.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:57:04.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:57:04.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:57:04.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:57:04.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.622270 -999.00  +22.00  28.78     25   +1.30 1 1 1 1 1   887    0 19.95 -27.52 ----- 28.8 28.8 169.0 30.5 26.8 -30.9 26.8 -33.5 28.4 -29.0 28.9 -29.8
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.622270
2025-12-03T16:57:04.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:57:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:57:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:57:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:57:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:57:04.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:56:46', tmtdew=24.26, humidity=19.43, cloud=0.0, wind=26.78, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:56:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:57:04.853 [DEBUG] [Thread-120282] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:57:04.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:57:04.949 [DEBUG] [Thread-120285] [transport.py] [_log()] starting thread (client mode): 0xa51d0280
2025-12-03T16:57:04.950 [DEBUG] [Thread-120285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:57:04.965 [DEBUG] [Thread-120285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:57:04.965 [INFO] [Thread-120285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] client lang: <none>
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] server lang: <none>
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] kex follows: False
2025-12-03T16:57:04.973 [DEBUG] [Thread-120285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] Compression: none
2025-12-03T16:57:04.974 [DEBUG] [Thread-120285] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:57:05.032 [DEBUG] [Thread-120285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:57:05.032 [DEBUG] [Thread-120285] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:57:05.033 [DEBUG] [Thread-120285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:57:05.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:57:05.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:57:05.094 [DEBUG] [Thread-120285] [transport.py] [_log()] userauth is OK
2025-12-03T16:57:05.094 [DEBUG] [Thread-120285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:57:05.094 [DEBUG] [Thread-120285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:57:05.094 [DEBUG] [Thread-120285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:57:05.094 [DEBUG] [Thread-120285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:57:05.114 [INFO] [Thread-120285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:57:05.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:57:05.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:57:05.931 [DEBUG] [Thread-120285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:57:05.932 [DEBUG] [Thread-120285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:57:05.980 [DEBUG] [Thread-120285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:57:05.980 [DEBUG] [Thread-120285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:57:05.989 [DEBUG] [Thread-120285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:57:05.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:57:05.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:57:06.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:57:06.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:57:06.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:57:06.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:57:06.024 [DEBUG] [Thread-120285] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:57:12.383 [DEBUG] [Thread-120287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:27.435 [DEBUG] [Thread-120288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:57:36.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:57:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:57:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 57, 18), 24.31, 19.38, 0.0, 26.17, 22.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:57:36.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:57:18
2025-12-03T16:57:36.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:57:36.994 [DEBUG] [Thread-120289] [transport.py] [_log()] starting thread (client mode): 0xa51d3460
2025-12-03T16:57:36.994 [DEBUG] [Thread-120289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:57:37.014 [DEBUG] [Thread-120289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:57:37.014 [INFO] [Thread-120289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] client lang: <none>
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] server lang: <none>
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] kex follows: False
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] Compression: none
2025-12-03T16:57:37.018 [DEBUG] [Thread-120289] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:57:37.037 [DEBUG] [Thread-120289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:57:37.037 [DEBUG] [Thread-120289] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:57:37.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:57:37.038 [DEBUG] [Thread-120289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:57:37.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:57:37.040 [DEBUG] [Thread-120289] [transport.py] [_log()] userauth is OK
2025-12-03T16:57:37.040 [DEBUG] [Thread-120289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:57:37.040 [DEBUG] [Thread-120289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:57:37.040 [DEBUG] [Thread-120289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:57:37.040 [DEBUG] [Thread-120289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:57:37.065 [INFO] [Thread-120289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:57:37.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:57:37.722 [DEBUG] [Thread-120289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:57:37.722 [DEBUG] [Thread-120289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:57:37.723 [DEBUG] [Thread-120289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:57:37.763 [DEBUG] [Thread-120289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:57:37.763 [DEBUG] [Thread-120289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:57:37.765 [DEBUG] [Thread-120289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:57:37.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:57:37.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:57:37.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:57:37.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:57:37.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:57:37.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:57:37.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:57:37.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:57:37.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:57:37.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.622965 -999.00  +21.50  18.58     26   +1.20 1 1 1 1 1   887    0 19.46 -26.44 ----- 18.6 18.6 179.2 27.8 26.6 -30.6 26.3 -32.3 28.2 -29.4 28.8 -29.5
2025-12-03T16:57:37.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:57:37.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:57:37.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.622965
2025-12-03T16:57:37.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:57:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:57:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:57:37.789 [DEBUG] [Thread-120289] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:57:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:57:37.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:57:37.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:57:18', tmtdew=24.31, humidity=19.38, cloud=0.0, wind=26.17, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:57:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:57:37.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:57:37.879 [DEBUG] [Thread-120292] [transport.py] [_log()] starting thread (client mode): 0xa51d3f40
2025-12-03T16:57:37.879 [DEBUG] [Thread-120292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:57:37.894 [DEBUG] [Thread-120292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:57:37.894 [INFO] [Thread-120292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:57:37.901 [DEBUG] [Thread-120292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:57:37.901 [DEBUG] [Thread-120292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] client lang: <none>
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] server lang: <none>
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] kex follows: False
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] Compression: none
2025-12-03T16:57:37.902 [DEBUG] [Thread-120292] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:57:37.960 [DEBUG] [Thread-120292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:57:37.960 [DEBUG] [Thread-120292] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:57:37.961 [DEBUG] [Thread-120292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:57:37.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:57:37.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:57:38.016 [DEBUG] [Thread-120292] [transport.py] [_log()] userauth is OK
2025-12-03T16:57:38.016 [DEBUG] [Thread-120292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:57:38.017 [DEBUG] [Thread-120292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:57:38.017 [DEBUG] [Thread-120292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:57:38.017 [DEBUG] [Thread-120292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:57:38.037 [INFO] [Thread-120292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:57:38.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:57:38.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:57:38.853 [DEBUG] [Thread-120292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:57:38.854 [DEBUG] [Thread-120292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:57:38.902 [DEBUG] [Thread-120292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:57:38.902 [DEBUG] [Thread-120292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:57:38.910 [DEBUG] [Thread-120292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:57:38.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:57:38.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:57:38.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:57:38.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:57:38.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:57:38.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:57:38.945 [DEBUG] [Thread-120292] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:57:41.415 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:41.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:42.464 [DEBUG] [Thread-120294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:56.776 [DEBUG] [Thread-120295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:57:57.511 [DEBUG] [Thread-120296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:08.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:58:08.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:58:08.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:58:09.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 57, 50), 23.97, 20.28, 0.0, 24.1, 21.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:58:09.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:57:50
2025-12-03T16:58:09.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:58:09.929 [DEBUG] [Thread-120297] [transport.py] [_log()] starting thread (client mode): 0xa27450f0
2025-12-03T16:58:09.929 [DEBUG] [Thread-120297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:58:09.950 [DEBUG] [Thread-120297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:58:09.950 [INFO] [Thread-120297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] client lang: <none>
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] server lang: <none>
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] kex follows: False
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:58:09.953 [DEBUG] [Thread-120297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:58:09.954 [DEBUG] [Thread-120297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:58:09.954 [DEBUG] [Thread-120297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:58:09.954 [DEBUG] [Thread-120297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:58:09.954 [DEBUG] [Thread-120297] [transport.py] [_log()] Compression: none
2025-12-03T16:58:09.954 [DEBUG] [Thread-120297] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:58:09.970 [DEBUG] [Thread-120297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:58:09.970 [DEBUG] [Thread-120297] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:58:09.970 [DEBUG] [Thread-120297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:58:09.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:58:09.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:58:09.971 [DEBUG] [Thread-120297] [transport.py] [_log()] userauth is OK
2025-12-03T16:58:09.971 [DEBUG] [Thread-120297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:58:09.971 [DEBUG] [Thread-120297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:58:09.971 [DEBUG] [Thread-120297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:58:09.971 [DEBUG] [Thread-120297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:58:09.983 [INFO] [Thread-120297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:58:09.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:58:10.583 [DEBUG] [Thread-120297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:58:10.583 [DEBUG] [Thread-120297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:58:10.583 [DEBUG] [Thread-120297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:58:10.623 [DEBUG] [Thread-120297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:58:10.623 [DEBUG] [Thread-120297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:58:10.625 [DEBUG] [Thread-120297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:58:10.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:58:10.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:58:10.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:58:10.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:58:10.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:58:10.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:58:10.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.623312 -999.00  +21.30  18.33     26   +1.30 1 1 1 1 1   887    0 19.92 -29.49 ----- 18.3 18.3 182.2 23.3 26.6 -30.4 26.4 -33.2 28.3 -29.7 28.6 -30.6
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.623312
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:58:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:58:10.644 [DEBUG] [Thread-120297] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:58:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:58:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:58:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:58:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:57:50', tmtdew=23.97, humidity=20.28, cloud=0.0, wind=24.1, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:57:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:58:10.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:58:10.733 [DEBUG] [Thread-120300] [transport.py] [_log()] starting thread (client mode): 0xa2747f40
2025-12-03T16:58:10.733 [DEBUG] [Thread-120300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:58:10.753 [DEBUG] [Thread-120300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:58:10.753 [INFO] [Thread-120300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] client lang: <none>
2025-12-03T16:58:10.760 [DEBUG] [Thread-120300] [transport.py] [_log()] server lang: <none>
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] kex follows: False
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] Compression: none
2025-12-03T16:58:10.761 [DEBUG] [Thread-120300] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:58:10.822 [DEBUG] [Thread-120300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:58:10.822 [DEBUG] [Thread-120300] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:58:10.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:58:10.823 [DEBUG] [Thread-120300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:58:10.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:58:10.880 [DEBUG] [Thread-120300] [transport.py] [_log()] userauth is OK
2025-12-03T16:58:10.880 [DEBUG] [Thread-120300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:58:10.880 [DEBUG] [Thread-120300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:58:10.881 [DEBUG] [Thread-120300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:58:10.881 [DEBUG] [Thread-120300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:58:10.900 [INFO] [Thread-120300] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:58:10.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:58:10.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:58:11.749 [DEBUG] [Thread-120300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:58:11.749 [DEBUG] [Thread-120300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:58:11.797 [DEBUG] [Thread-120300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:58:11.797 [DEBUG] [Thread-120300] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:58:11.806 [DEBUG] [Thread-120300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:58:11.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:58:11.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:58:11.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:58:11.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:58:11.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:58:11.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:58:11.840 [DEBUG] [Thread-120300] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:58:12.539 [DEBUG] [Thread-120302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:27.587 [DEBUG] [Thread-120303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:41.557 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:41.559 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:58:41.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:58:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:58:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 58, 22), 23.85, 20.43, 0.0, 23.36, 21.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:58:42.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:58:22
2025-12-03T16:58:42.617 [DEBUG] [Thread-120304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:42.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:58:42.810 [DEBUG] [Thread-120305] [transport.py] [_log()] starting thread (client mode): 0xa277b730
2025-12-03T16:58:42.810 [DEBUG] [Thread-120305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:58:42.830 [DEBUG] [Thread-120305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:58:42.831 [INFO] [Thread-120305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] client lang: <none>
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] server lang: <none>
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] kex follows: False
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:58:42.834 [DEBUG] [Thread-120305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:58:42.835 [DEBUG] [Thread-120305] [transport.py] [_log()] Compression: none
2025-12-03T16:58:42.835 [DEBUG] [Thread-120305] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:58:42.852 [DEBUG] [Thread-120305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:58:42.852 [DEBUG] [Thread-120305] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:58:42.853 [DEBUG] [Thread-120305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:58:42.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:58:42.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:58:42.854 [DEBUG] [Thread-120305] [transport.py] [_log()] userauth is OK
2025-12-03T16:58:42.854 [DEBUG] [Thread-120305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:58:42.854 [DEBUG] [Thread-120305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:58:42.855 [DEBUG] [Thread-120305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:58:42.855 [DEBUG] [Thread-120305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:58:42.876 [INFO] [Thread-120305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:58:42.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:58:43.515 [DEBUG] [Thread-120305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:58:43.515 [DEBUG] [Thread-120305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:58:43.515 [DEBUG] [Thread-120305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:58:43.555 [DEBUG] [Thread-120305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:58:43.556 [DEBUG] [Thread-120305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:58:43.558 [DEBUG] [Thread-120305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:58:43.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:58:43.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:58:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:58:43.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:58:43.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:58:43.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:58:43.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.623659 -999.00  +21.30  18.47     26   +1.10 1 1 1 1 1   887    0 19.93 -30.28 ----- 18.5 18.5 189.0 27.9 26.4 -30.9 26.1 -33.7 28.1 -28.0 28.6 -31.4
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.623659
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:58:43.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:58:22', tmtdew=23.85, humidity=20.43, cloud=0.0, wind=23.36, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:58:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:58:43.574 [DEBUG] [Thread-120305] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:58:43.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:58:43.661 [DEBUG] [Thread-120308] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T16:58:43.661 [DEBUG] [Thread-120308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:58:43.675 [DEBUG] [Thread-120308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:58:43.675 [INFO] [Thread-120308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] client lang: <none>
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] server lang: <none>
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] kex follows: False
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] Compression: none
2025-12-03T16:58:43.683 [DEBUG] [Thread-120308] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:58:43.739 [DEBUG] [Thread-120308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:58:43.739 [DEBUG] [Thread-120308] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:58:43.740 [DEBUG] [Thread-120308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:58:43.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:58:43.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:58:43.796 [DEBUG] [Thread-120308] [transport.py] [_log()] userauth is OK
2025-12-03T16:58:43.796 [DEBUG] [Thread-120308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:58:43.796 [DEBUG] [Thread-120308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:58:43.796 [DEBUG] [Thread-120308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:58:43.796 [DEBUG] [Thread-120308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:58:43.813 [INFO] [Thread-120308] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:58:43.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:58:43.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:58:44.635 [DEBUG] [Thread-120308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:58:44.635 [DEBUG] [Thread-120308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:58:44.682 [DEBUG] [Thread-120308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:58:44.682 [DEBUG] [Thread-120308] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:58:44.691 [DEBUG] [Thread-120308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:58:44.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:58:44.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:58:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:58:44.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:58:44.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:58:44.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:58:44.723 [DEBUG] [Thread-120308] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:58:56.821 [DEBUG] [Thread-120310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:58:57.647 [DEBUG] [Thread-120311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:12.696 [DEBUG] [Thread-120312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:14.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:59:14.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:59:14.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:59:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 58, 54), 23.62, 20.52, 0.0, 24.31, 21.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:59:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:58:54
2025-12-03T16:59:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:59:15.660 [DEBUG] [Thread-120313] [transport.py] [_log()] starting thread (client mode): 0xa517c550
2025-12-03T16:59:15.660 [DEBUG] [Thread-120313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:59:15.679 [DEBUG] [Thread-120313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:59:15.679 [INFO] [Thread-120313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] client lang: <none>
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] server lang: <none>
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] kex follows: False
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:59:15.683 [DEBUG] [Thread-120313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:59:15.684 [DEBUG] [Thread-120313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:59:15.684 [DEBUG] [Thread-120313] [transport.py] [_log()] Compression: none
2025-12-03T16:59:15.684 [DEBUG] [Thread-120313] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:59:15.699 [DEBUG] [Thread-120313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:59:15.700 [DEBUG] [Thread-120313] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:59:15.700 [DEBUG] [Thread-120313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:59:15.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:59:15.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:59:15.741 [DEBUG] [Thread-120313] [transport.py] [_log()] userauth is OK
2025-12-03T16:59:15.741 [DEBUG] [Thread-120313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:59:15.741 [DEBUG] [Thread-120313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:59:15.741 [DEBUG] [Thread-120313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:59:15.742 [DEBUG] [Thread-120313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:59:15.773 [INFO] [Thread-120313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:59:15.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:59:16.422 [DEBUG] [Thread-120313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:59:16.422 [DEBUG] [Thread-120313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:59:16.422 [DEBUG] [Thread-120313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:59:16.464 [DEBUG] [Thread-120313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:59:16.464 [DEBUG] [Thread-120313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:59:16.467 [DEBUG] [Thread-120313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:59:16.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:59:16.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:59:16.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:59:16.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:59:16.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:59:16.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:59:16.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.624006 -999.00  +21.20  14.65     26   +1.20 1 1 1 1 1   887    0 19.68 -33.30 ----- 14.7 14.7 179.6 17.5 26.5 -30.0 26.2 -31.2 28.2 -28.2 28.5 -29.8
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:59:16.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.624006
2025-12-03T16:59:16.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:59:16.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:59:16.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:59:16.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:59:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:59:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:58:54', tmtdew=23.62, humidity=20.52, cloud=0.0, wind=24.31, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:58:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:59:16.492 [DEBUG] [Thread-120313] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:59:16.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:59:16.584 [DEBUG] [Thread-120316] [transport.py] [_log()] starting thread (client mode): 0xa5198f10
2025-12-03T16:59:16.585 [DEBUG] [Thread-120316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:59:16.600 [DEBUG] [Thread-120316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:59:16.600 [INFO] [Thread-120316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:59:16.607 [DEBUG] [Thread-120316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:59:16.607 [DEBUG] [Thread-120316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:59:16.607 [DEBUG] [Thread-120316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:59:16.607 [DEBUG] [Thread-120316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] client lang: <none>
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] server lang: <none>
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] kex follows: False
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] Compression: none
2025-12-03T16:59:16.608 [DEBUG] [Thread-120316] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:59:16.664 [DEBUG] [Thread-120316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:59:16.664 [DEBUG] [Thread-120316] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:59:16.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:59:16.665 [DEBUG] [Thread-120316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:59:16.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:59:16.720 [DEBUG] [Thread-120316] [transport.py] [_log()] userauth is OK
2025-12-03T16:59:16.720 [DEBUG] [Thread-120316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:59:16.721 [DEBUG] [Thread-120316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:59:16.721 [DEBUG] [Thread-120316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:59:16.721 [DEBUG] [Thread-120316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:59:16.740 [INFO] [Thread-120316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:59:16.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:59:16.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:59:17.577 [DEBUG] [Thread-120316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:59:17.578 [DEBUG] [Thread-120316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:59:17.626 [DEBUG] [Thread-120316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:59:17.626 [DEBUG] [Thread-120316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:59:17.635 [DEBUG] [Thread-120316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:59:17.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:59:17.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:59:17.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:59:17.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:59:17.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:59:17.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:59:17.669 [DEBUG] [Thread-120316] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:59:27.722 [DEBUG] [Thread-120318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:41.696 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:41.697 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:42.769 [DEBUG] [Thread-120319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:47.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T16:59:47.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T16:59:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T16:59:48.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 59, 26), 23.33, 20.91, 0.0, 20.29, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T16:59:48.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:59:26
2025-12-03T16:59:48.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T16:59:48.611 [DEBUG] [Thread-120320] [transport.py] [_log()] starting thread (client mode): 0xa51d35b0
2025-12-03T16:59:48.611 [DEBUG] [Thread-120320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:59:48.631 [DEBUG] [Thread-120320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T16:59:48.631 [INFO] [Thread-120320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T16:59:48.634 [DEBUG] [Thread-120320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] client lang: <none>
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] server lang: <none>
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] kex follows: False
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] Compression: none
2025-12-03T16:59:48.635 [DEBUG] [Thread-120320] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:59:48.652 [DEBUG] [Thread-120320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:59:48.652 [DEBUG] [Thread-120320] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:59:48.653 [DEBUG] [Thread-120320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T16:59:48.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T16:59:48.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:59:48.655 [DEBUG] [Thread-120320] [transport.py] [_log()] userauth is OK
2025-12-03T16:59:48.655 [DEBUG] [Thread-120320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:59:48.655 [DEBUG] [Thread-120320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:59:48.655 [DEBUG] [Thread-120320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T16:59:48.655 [DEBUG] [Thread-120320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:59:48.673 [INFO] [Thread-120320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:59:48.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:59:49.309 [DEBUG] [Thread-120320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:59:49.310 [DEBUG] [Thread-120320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:59:49.310 [DEBUG] [Thread-120320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T16:59:49.351 [DEBUG] [Thread-120320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:59:49.351 [DEBUG] [Thread-120320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:59:49.354 [DEBUG] [Thread-120320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:59:49.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:59:49.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T16:59:49.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T16:59:49.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T16:59:49.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:59:49.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T16:59:49.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:59:49.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.624354 -999.00  +21.40  13.59     26   +1.50 1 1 1 1 1   887    0 20.14 -38.32 ----- 13.6 13.6 170.4 21.1 26.5 -29.4 26.4 -30.1 28.2 -29.2 28.5 -29.9
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.624354
2025-12-03T16:59:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T16:59:49.377 [DEBUG] [Thread-120320] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:59:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T16:59:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T16:59:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T16:59:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T16:59:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:59:26', tmtdew=23.33, humidity=20.91, cloud=0.0, wind=20.29, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:59:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T16:59:49.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T16:59:49.476 [DEBUG] [Thread-120323] [transport.py] [_log()] starting thread (client mode): 0xa277b880
2025-12-03T16:59:49.476 [DEBUG] [Thread-120323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T16:59:49.491 [DEBUG] [Thread-120323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T16:59:49.491 [INFO] [Thread-120323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T16:59:49.499 [DEBUG] [Thread-120323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T16:59:49.499 [DEBUG] [Thread-120323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T16:59:49.499 [DEBUG] [Thread-120323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] client lang: <none>
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] server lang: <none>
2025-12-03T16:59:49.500 [DEBUG] [Thread-120323] [transport.py] [_log()] kex follows: False
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] Compression: none
2025-12-03T16:59:49.501 [DEBUG] [Thread-120323] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T16:59:49.556 [DEBUG] [Thread-120323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T16:59:49.557 [DEBUG] [Thread-120323] [transport.py] [_log()] Switch to new keys ...
2025-12-03T16:59:49.557 [DEBUG] [Thread-120323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T16:59:49.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T16:59:49.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T16:59:49.618 [DEBUG] [Thread-120323] [transport.py] [_log()] userauth is OK
2025-12-03T16:59:49.618 [DEBUG] [Thread-120323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T16:59:49.619 [DEBUG] [Thread-120323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T16:59:49.619 [DEBUG] [Thread-120323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T16:59:49.619 [DEBUG] [Thread-120323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T16:59:49.638 [INFO] [Thread-120323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T16:59:49.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T16:59:49.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T16:59:50.497 [DEBUG] [Thread-120323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T16:59:50.497 [DEBUG] [Thread-120323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T16:59:50.546 [DEBUG] [Thread-120323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T16:59:50.546 [DEBUG] [Thread-120323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T16:59:50.556 [DEBUG] [Thread-120323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T16:59:50.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T16:59:50.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T16:59:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T16:59:50.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T16:59:50.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T16:59:50.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T16:59:50.592 [DEBUG] [Thread-120323] [transport.py] [_log()] EOF in transport thread
2025-12-03T16:59:56.877 [DEBUG] [Thread-120325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T16:59:57.803 [DEBUG] [Thread-120326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:12.844 [DEBUG] [Thread-120327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:20.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:00:20.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:00:20.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:00:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 16, 59, 58), 23.24, 20.86, 0.0, 23.33, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:00:21.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 16:59:58
2025-12-03T17:00:21.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:00:21.546 [DEBUG] [Thread-120328] [transport.py] [_log()] starting thread (client mode): 0xa27458a0
2025-12-03T17:00:21.546 [DEBUG] [Thread-120328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:00:21.566 [DEBUG] [Thread-120328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:00:21.566 [INFO] [Thread-120328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:21.569 [DEBUG] [Thread-120328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] client lang: <none>
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] server lang: <none>
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] kex follows: False
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] Compression: none
2025-12-03T17:00:21.570 [DEBUG] [Thread-120328] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:00:21.588 [DEBUG] [Thread-120328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:00:21.589 [DEBUG] [Thread-120328] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:00:21.589 [DEBUG] [Thread-120328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:00:21.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:00:21.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:00:21.591 [DEBUG] [Thread-120328] [transport.py] [_log()] userauth is OK
2025-12-03T17:00:21.592 [DEBUG] [Thread-120328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:00:21.592 [DEBUG] [Thread-120328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:00:21.592 [DEBUG] [Thread-120328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:00:21.592 [DEBUG] [Thread-120328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:00:21.616 [INFO] [Thread-120328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:00:21.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:00:22.232 [DEBUG] [Thread-120328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:00:22.232 [DEBUG] [Thread-120328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:00:22.233 [DEBUG] [Thread-120328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:00:22.273 [DEBUG] [Thread-120328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:00:22.273 [DEBUG] [Thread-120328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:00:22.276 [DEBUG] [Thread-120328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:00:22.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:00:22.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:00:22.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:00:22.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:00:22.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:00:22.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:00:22.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.624701 -999.00  +21.60  14.70     26   +1.40 1 1 1 1 1   887    0 19.42 -46.52 ----- 14.7 14.7 169.2 22.2 26.5 -30.1 26.4 -28.8 28.2 -27.7 28.6 -28.9
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:00:22.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.624701
2025-12-03T17:00:22.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:00:22.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:00:22.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:00:22.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:00:22.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:00:22.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T16:59:58', tmtdew=23.24, humidity=20.86, cloud=0.0, wind=23.33, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T14:59:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:00:22.302 [DEBUG] [Thread-120328] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:00:22.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:00:22.397 [DEBUG] [Thread-120331] [transport.py] [_log()] starting thread (client mode): 0xa2779720
2025-12-03T17:00:22.397 [DEBUG] [Thread-120331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:00:22.412 [DEBUG] [Thread-120331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:00:22.413 [INFO] [Thread-120331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:00:22.420 [DEBUG] [Thread-120331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:00:22.420 [DEBUG] [Thread-120331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:00:22.420 [DEBUG] [Thread-120331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] client lang: <none>
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] server lang: <none>
2025-12-03T17:00:22.421 [DEBUG] [Thread-120331] [transport.py] [_log()] kex follows: False
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] Compression: none
2025-12-03T17:00:22.422 [DEBUG] [Thread-120331] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:00:22.480 [DEBUG] [Thread-120331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:00:22.481 [DEBUG] [Thread-120331] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:00:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:00:22.482 [DEBUG] [Thread-120331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:00:22.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:00:22.536 [DEBUG] [Thread-120331] [transport.py] [_log()] userauth is OK
2025-12-03T17:00:22.537 [DEBUG] [Thread-120331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:00:22.537 [DEBUG] [Thread-120331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:00:22.537 [DEBUG] [Thread-120331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:00:22.537 [DEBUG] [Thread-120331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:00:22.557 [INFO] [Thread-120331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:00:22.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:00:22.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:00:23.348 [DEBUG] [Thread-120331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:00:23.348 [DEBUG] [Thread-120331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:00:23.396 [DEBUG] [Thread-120331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:00:23.396 [DEBUG] [Thread-120331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:00:23.411 [DEBUG] [Thread-120331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:00:23.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:00:23.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:00:23.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:00:23.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:00:23.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:00:23.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:00:23.445 [DEBUG] [Thread-120331] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:00:27.879 [DEBUG] [Thread-120333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:41.836 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:41.837 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:42.927 [DEBUG] [Thread-120334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:53.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:00:53.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:00:53.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:00:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 0, 30), 23.37, 20.66, 0.0, 20.35, 21.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:00:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:00:30
2025-12-03T17:00:54.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:00:54.385 [DEBUG] [Thread-120335] [transport.py] [_log()] starting thread (client mode): 0xa2778ac0
2025-12-03T17:00:54.386 [DEBUG] [Thread-120335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:00:54.405 [DEBUG] [Thread-120335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:00:54.405 [INFO] [Thread-120335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:54.409 [DEBUG] [Thread-120335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] client lang: <none>
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] server lang: <none>
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] kex follows: False
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] Compression: none
2025-12-03T17:00:54.410 [DEBUG] [Thread-120335] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:00:54.429 [DEBUG] [Thread-120335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:00:54.429 [DEBUG] [Thread-120335] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:00:54.429 [DEBUG] [Thread-120335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:00:54.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:00:54.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:00:54.430 [DEBUG] [Thread-120335] [transport.py] [_log()] userauth is OK
2025-12-03T17:00:54.430 [DEBUG] [Thread-120335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:00:54.430 [DEBUG] [Thread-120335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:00:54.430 [DEBUG] [Thread-120335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:00:54.430 [DEBUG] [Thread-120335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:00:54.445 [INFO] [Thread-120335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:00:54.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:00:55.083 [DEBUG] [Thread-120335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:00:55.083 [DEBUG] [Thread-120335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:00:55.084 [DEBUG] [Thread-120335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:00:55.124 [DEBUG] [Thread-120335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:00:55.124 [DEBUG] [Thread-120335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:00:55.127 [DEBUG] [Thread-120335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:00:55.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:00:55.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:00:55.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:00:55.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:00:55.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:00:55.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:00:55.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:00:55.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.625048 -999.00  +21.60  12.00     26   +1.40 1 1 1 1 1   887    0 19.52 -46.65 ----- 12.0 12.0 169.8 22.5 26.5 -29.6 26.3 -31.1 28.2 -27.7 28.6 -29.5
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.625048
2025-12-03T17:00:55.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:00:55.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:00:55.151 [DEBUG] [Thread-120335] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:00:55.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:00:55.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:00:55.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:00:55.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:00:30', tmtdew=23.37, humidity=20.66, cloud=0.0, wind=20.35, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:00:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:00:55.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:00:55.247 [DEBUG] [Thread-120338] [transport.py] [_log()] starting thread (client mode): 0xa519b100
2025-12-03T17:00:55.247 [DEBUG] [Thread-120338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:00:55.262 [DEBUG] [Thread-120338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:00:55.263 [INFO] [Thread-120338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:00:55.270 [DEBUG] [Thread-120338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:00:55.270 [DEBUG] [Thread-120338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:00:55.270 [DEBUG] [Thread-120338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] client lang: <none>
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] server lang: <none>
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] kex follows: False
2025-12-03T17:00:55.271 [DEBUG] [Thread-120338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] Compression: none
2025-12-03T17:00:55.272 [DEBUG] [Thread-120338] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:00:55.330 [DEBUG] [Thread-120338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:00:55.331 [DEBUG] [Thread-120338] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:00:55.331 [DEBUG] [Thread-120338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:00:55.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:00:55.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:00:55.389 [DEBUG] [Thread-120338] [transport.py] [_log()] userauth is OK
2025-12-03T17:00:55.389 [DEBUG] [Thread-120338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:00:55.390 [DEBUG] [Thread-120338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:00:55.390 [DEBUG] [Thread-120338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:00:55.390 [DEBUG] [Thread-120338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:00:55.412 [INFO] [Thread-120338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:00:55.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:00:55.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:00:56.295 [DEBUG] [Thread-120338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:00:56.295 [DEBUG] [Thread-120338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:00:56.343 [DEBUG] [Thread-120338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:00:56.343 [DEBUG] [Thread-120338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:00:56.352 [DEBUG] [Thread-120338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:00:56.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:00:56.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:00:56.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:00:56.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:00:56.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:00:56.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:00:56.386 [DEBUG] [Thread-120338] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:00:56.944 [DEBUG] [Thread-120340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:00:57.955 [DEBUG] [Thread-120341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:13.002 [DEBUG] [Thread-120342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:26.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:01:26.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:01:26.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:01:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 1, 2), 23.45, 20.58, 0.0, 25.04, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:01:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:01:02
2025-12-03T17:01:27.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:01:27.352 [DEBUG] [Thread-120343] [transport.py] [_log()] starting thread (client mode): 0xa2750100
2025-12-03T17:01:27.353 [DEBUG] [Thread-120343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:01:27.373 [DEBUG] [Thread-120343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:01:27.373 [INFO] [Thread-120343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] client lang: <none>
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] server lang: <none>
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] kex follows: False
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:01:27.376 [DEBUG] [Thread-120343] [transport.py] [_log()] Compression: none
2025-12-03T17:01:27.377 [DEBUG] [Thread-120343] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:01:27.395 [DEBUG] [Thread-120343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:01:27.395 [DEBUG] [Thread-120343] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:01:27.396 [DEBUG] [Thread-120343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:01:27.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:01:27.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:01:27.398 [DEBUG] [Thread-120343] [transport.py] [_log()] userauth is OK
2025-12-03T17:01:27.398 [DEBUG] [Thread-120343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:01:27.398 [DEBUG] [Thread-120343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:01:27.398 [DEBUG] [Thread-120343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:01:27.398 [DEBUG] [Thread-120343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:01:27.434 [INFO] [Thread-120343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:01:27.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:01:28.026 [DEBUG] [Thread-120345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:28.063 [DEBUG] [Thread-120343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:01:28.063 [DEBUG] [Thread-120343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:01:28.063 [DEBUG] [Thread-120343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:01:28.104 [DEBUG] [Thread-120343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:01:28.104 [DEBUG] [Thread-120343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:01:28.107 [DEBUG] [Thread-120343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:01:28.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:01:28.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:01:28.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:01:28.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:01:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:01:28.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:01:28.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.625395 -999.00  +21.70  20.51     26   +1.40 1 1 1 1 1   887    0 19.14 -45.40 ----- 20.5 20.5 169.0 31.2 26.5 -30.3 26.3 -29.4 28.2 -27.3 28.6 -29.2
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:01:28.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.625395
2025-12-03T17:01:28.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:01:28.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:01:28.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:01:28.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:01:28.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:01:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:01:02', tmtdew=23.45, humidity=20.58, cloud=0.0, wind=25.04, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:00:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:01:28.132 [DEBUG] [Thread-120343] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:01:28.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:01:28.220 [DEBUG] [Thread-120347] [transport.py] [_log()] starting thread (client mode): 0xa27455d0
2025-12-03T17:01:28.220 [DEBUG] [Thread-120347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:01:28.234 [DEBUG] [Thread-120347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:01:28.235 [INFO] [Thread-120347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:01:28.242 [DEBUG] [Thread-120347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:01:28.242 [DEBUG] [Thread-120347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] client lang: <none>
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] server lang: <none>
2025-12-03T17:01:28.243 [DEBUG] [Thread-120347] [transport.py] [_log()] kex follows: False
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] Compression: none
2025-12-03T17:01:28.244 [DEBUG] [Thread-120347] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:01:28.300 [DEBUG] [Thread-120347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:01:28.300 [DEBUG] [Thread-120347] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:01:28.301 [DEBUG] [Thread-120347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:01:28.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:01:28.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:01:28.356 [DEBUG] [Thread-120347] [transport.py] [_log()] userauth is OK
2025-12-03T17:01:28.356 [DEBUG] [Thread-120347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:01:28.356 [DEBUG] [Thread-120347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:01:28.356 [DEBUG] [Thread-120347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:01:28.356 [DEBUG] [Thread-120347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:01:28.376 [INFO] [Thread-120347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:01:28.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:01:28.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:01:29.237 [DEBUG] [Thread-120347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:01:29.237 [DEBUG] [Thread-120347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:01:29.288 [DEBUG] [Thread-120347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:01:29.288 [DEBUG] [Thread-120347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:01:29.301 [DEBUG] [Thread-120347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:01:29.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:01:29.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:01:29.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:01:29.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:01:29.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:01:29.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:01:29.336 [DEBUG] [Thread-120347] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:01:41.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:41.978 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:43.054 [DEBUG] [Thread-120349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:56.978 [DEBUG] [Thread-120350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:58.098 [DEBUG] [Thread-120351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:01:59.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:01:59.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:01:59.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:02:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 1, 34), 23.9, 19.97, 0.0, 22.94, 21.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:02:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:01:34
2025-12-03T17:02:00.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:02:00.358 [DEBUG] [Thread-120352] [transport.py] [_log()] starting thread (client mode): 0xa2729c60
2025-12-03T17:02:00.359 [DEBUG] [Thread-120352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:02:00.379 [DEBUG] [Thread-120352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:02:00.379 [INFO] [Thread-120352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:00.382 [DEBUG] [Thread-120352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] client lang: <none>
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] server lang: <none>
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] kex follows: False
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] Compression: none
2025-12-03T17:02:00.383 [DEBUG] [Thread-120352] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:02:00.401 [DEBUG] [Thread-120352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:02:00.401 [DEBUG] [Thread-120352] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:02:00.401 [DEBUG] [Thread-120352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:02:00.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:02:00.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:02:00.402 [DEBUG] [Thread-120352] [transport.py] [_log()] userauth is OK
2025-12-03T17:02:00.402 [DEBUG] [Thread-120352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:02:00.402 [DEBUG] [Thread-120352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:02:00.402 [DEBUG] [Thread-120352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:02:00.402 [DEBUG] [Thread-120352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:02:00.417 [INFO] [Thread-120352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:02:00.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:02:01.023 [DEBUG] [Thread-120352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:02:01.023 [DEBUG] [Thread-120352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:02:01.023 [DEBUG] [Thread-120352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:02:01.065 [DEBUG] [Thread-120352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:02:01.065 [DEBUG] [Thread-120352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:02:01.067 [DEBUG] [Thread-120352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:02:01.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:02:01.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:02:01.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:02:01.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:02:01.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:02:01.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:02:01.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.625742 -999.00  +21.60  19.95     25   +1.20 1 1 1 1 1   887    0 19.57 -47.33 ----- 19.9 19.9 150.1 27.4 26.4 -30.6 26.3 -29.3 28.2 -28.3 28.5 -30.4
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.625742
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:02:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:01:34', tmtdew=23.9, humidity=19.97, cloud=0.0, wind=22.94, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:01:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:02:01.085 [DEBUG] [Thread-120352] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:02:01.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:02:01.170 [DEBUG] [Thread-120355] [transport.py] [_log()] starting thread (client mode): 0xa51d2320
2025-12-03T17:02:01.170 [DEBUG] [Thread-120355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:02:01.184 [DEBUG] [Thread-120355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:02:01.184 [INFO] [Thread-120355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] client lang: <none>
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] server lang: <none>
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] kex follows: False
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:02:01.192 [DEBUG] [Thread-120355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:02:01.193 [DEBUG] [Thread-120355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:02:01.193 [DEBUG] [Thread-120355] [transport.py] [_log()] Compression: none
2025-12-03T17:02:01.193 [DEBUG] [Thread-120355] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:02:01.251 [DEBUG] [Thread-120355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:02:01.251 [DEBUG] [Thread-120355] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:02:01.251 [DEBUG] [Thread-120355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:02:01.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:02:01.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:02:01.308 [DEBUG] [Thread-120355] [transport.py] [_log()] userauth is OK
2025-12-03T17:02:01.308 [DEBUG] [Thread-120355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:02:01.308 [DEBUG] [Thread-120355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:02:01.308 [DEBUG] [Thread-120355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:02:01.308 [DEBUG] [Thread-120355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:02:01.322 [INFO] [Thread-120355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:02:01.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:02:01.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:02:02.170 [DEBUG] [Thread-120355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:02:02.170 [DEBUG] [Thread-120355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:02:02.219 [DEBUG] [Thread-120355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:02:02.219 [DEBUG] [Thread-120355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:02:02.227 [DEBUG] [Thread-120355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:02:02.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:02:02.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:02:02.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:02:02.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:02:02.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:02:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:02:02.259 [DEBUG] [Thread-120355] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:02:13.125 [DEBUG] [Thread-120357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:28.170 [DEBUG] [Thread-120358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:32.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:02:32.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:02:32.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:02:32.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 2, 6), 23.97, 19.88, 0.0, 23.73, 22.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:02:32.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:02:06
2025-12-03T17:02:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:02:33.237 [DEBUG] [Thread-120359] [transport.py] [_log()] starting thread (client mode): 0xa27459f0
2025-12-03T17:02:33.238 [DEBUG] [Thread-120359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:02:33.257 [DEBUG] [Thread-120359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:02:33.258 [INFO] [Thread-120359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] client lang: <none>
2025-12-03T17:02:33.261 [DEBUG] [Thread-120359] [transport.py] [_log()] server lang: <none>
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] kex follows: False
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] Compression: none
2025-12-03T17:02:33.262 [DEBUG] [Thread-120359] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:02:33.279 [DEBUG] [Thread-120359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:02:33.279 [DEBUG] [Thread-120359] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:02:33.280 [DEBUG] [Thread-120359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:02:33.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:02:33.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:02:33.282 [DEBUG] [Thread-120359] [transport.py] [_log()] userauth is OK
2025-12-03T17:02:33.282 [DEBUG] [Thread-120359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:02:33.283 [DEBUG] [Thread-120359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:02:33.283 [DEBUG] [Thread-120359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:02:33.283 [DEBUG] [Thread-120359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:02:33.306 [INFO] [Thread-120359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:02:33.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:02:33.951 [DEBUG] [Thread-120359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:02:33.951 [DEBUG] [Thread-120359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:02:33.952 [DEBUG] [Thread-120359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:02:33.992 [DEBUG] [Thread-120359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:02:33.992 [DEBUG] [Thread-120359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:02:33.995 [DEBUG] [Thread-120359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:02:34.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:02:34.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:02:34.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:02:34.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:02:34.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:02:34.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:02:34.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:02:34.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:02:34.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.626090 -999.00  +21.40  20.20     26   +1.10 1 1 1 1 1   887    0 19.64 -44.21 ----- 20.2 20.2 144.4 26.7 26.3 -29.8 26.4 -29.0 28.1 -27.7 28.4 -30.1
2025-12-03T17:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.626090
2025-12-03T17:02:34.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:02:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:02:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:02:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:02:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:02:34.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:02:06', tmtdew=23.97, humidity=19.88, cloud=0.0, wind=23.73, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:01:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:02:34.021 [DEBUG] [Thread-120359] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:02:34.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:02:34.121 [DEBUG] [Thread-120362] [transport.py] [_log()] starting thread (client mode): 0xa277a8c0
2025-12-03T17:02:34.121 [DEBUG] [Thread-120362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:02:34.138 [DEBUG] [Thread-120362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:02:34.138 [INFO] [Thread-120362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:02:34.145 [DEBUG] [Thread-120362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:02:34.145 [DEBUG] [Thread-120362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:02:34.145 [DEBUG] [Thread-120362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:02:34.145 [DEBUG] [Thread-120362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:34.145 [DEBUG] [Thread-120362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] client lang: <none>
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] server lang: <none>
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] kex follows: False
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:02:34.146 [DEBUG] [Thread-120362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:02:34.147 [DEBUG] [Thread-120362] [transport.py] [_log()] Compression: none
2025-12-03T17:02:34.147 [DEBUG] [Thread-120362] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:02:34.202 [DEBUG] [Thread-120362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:02:34.203 [DEBUG] [Thread-120362] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:02:34.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:02:34.203 [DEBUG] [Thread-120362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:02:34.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:02:34.261 [DEBUG] [Thread-120362] [transport.py] [_log()] userauth is OK
2025-12-03T17:02:34.261 [DEBUG] [Thread-120362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:02:34.261 [DEBUG] [Thread-120362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:02:34.262 [DEBUG] [Thread-120362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:02:34.262 [DEBUG] [Thread-120362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:02:34.284 [INFO] [Thread-120362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:02:34.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:02:34.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:02:35.096 [DEBUG] [Thread-120362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:02:35.096 [DEBUG] [Thread-120362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:02:35.147 [DEBUG] [Thread-120362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:02:35.147 [DEBUG] [Thread-120362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:02:35.156 [DEBUG] [Thread-120362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:02:35.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:02:35.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:02:35.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:02:35.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:02:35.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:02:35.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:02:35.191 [DEBUG] [Thread-120362] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:02:42.119 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:42.120 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:43.201 [DEBUG] [Thread-120364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:57.028 [DEBUG] [Thread-120365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:02:58.249 [DEBUG] [Thread-120366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:03:05.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:03:05.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:03:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 2, 38), 24.05, 19.83, 0.0, 22.14, 21.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:03:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:02:38
2025-12-03T17:03:06.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:03:06.174 [DEBUG] [Thread-120367] [transport.py] [_log()] starting thread (client mode): 0xa27530d0
2025-12-03T17:03:06.174 [DEBUG] [Thread-120367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:03:06.193 [DEBUG] [Thread-120367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:03:06.194 [INFO] [Thread-120367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] client lang: <none>
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] server lang: <none>
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] kex follows: False
2025-12-03T17:03:06.197 [DEBUG] [Thread-120367] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] Compression: none
2025-12-03T17:03:06.198 [DEBUG] [Thread-120367] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:03:06.216 [DEBUG] [Thread-120367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:03:06.216 [DEBUG] [Thread-120367] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:03:06.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:03:06.218 [DEBUG] [Thread-120367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:03:06.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:03:06.220 [DEBUG] [Thread-120367] [transport.py] [_log()] userauth is OK
2025-12-03T17:03:06.220 [DEBUG] [Thread-120367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:03:06.220 [DEBUG] [Thread-120367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:03:06.220 [DEBUG] [Thread-120367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:03:06.221 [DEBUG] [Thread-120367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:03:06.243 [INFO] [Thread-120367] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:03:06.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:03:06.884 [DEBUG] [Thread-120367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:03:06.884 [DEBUG] [Thread-120367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:03:06.884 [DEBUG] [Thread-120367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:03:06.925 [DEBUG] [Thread-120367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:03:06.925 [DEBUG] [Thread-120367] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:03:06.928 [DEBUG] [Thread-120367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:03:06.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:03:06.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:03:06.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:03:06.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:03:06.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:03:06.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:03:06.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:03:06.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:03:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:03:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.626784 -999.00  +21.40  13.33     26   +1.20 1 1 1 1 1   887    0 19.07 -50.31 ----- 13.3 13.3 129.6 20.4 26.4 -29.9 26.6 -29.0 28.1 -28.5 28.4 -29.9
2025-12-03T17:03:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:03:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:03:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.626784
2025-12-03T17:03:06.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:03:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:03:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:03:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:03:06.952 [DEBUG] [Thread-120367] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:03:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:03:06.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:02:38', tmtdew=24.05, humidity=19.83, cloud=0.0, wind=22.14, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:02:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:03:07.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:03:07.049 [DEBUG] [Thread-120370] [transport.py] [_log()] starting thread (client mode): 0xa519bd90
2025-12-03T17:03:07.049 [DEBUG] [Thread-120370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:03:07.063 [DEBUG] [Thread-120370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:03:07.063 [INFO] [Thread-120370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:03:07.070 [DEBUG] [Thread-120370] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:03:07.070 [DEBUG] [Thread-120370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:03:07.070 [DEBUG] [Thread-120370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] client lang: <none>
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] server lang: <none>
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] kex follows: False
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] Compression: none
2025-12-03T17:03:07.071 [DEBUG] [Thread-120370] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:03:07.127 [DEBUG] [Thread-120370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:03:07.128 [DEBUG] [Thread-120370] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:03:07.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:03:07.128 [DEBUG] [Thread-120370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:03:07.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:03:07.192 [DEBUG] [Thread-120370] [transport.py] [_log()] userauth is OK
2025-12-03T17:03:07.192 [DEBUG] [Thread-120370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:03:07.192 [DEBUG] [Thread-120370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:03:07.192 [DEBUG] [Thread-120370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:03:07.192 [DEBUG] [Thread-120370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:03:07.211 [INFO] [Thread-120370] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:03:07.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:03:07.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:03:08.033 [DEBUG] [Thread-120370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:03:08.033 [DEBUG] [Thread-120370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:03:08.082 [DEBUG] [Thread-120370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:03:08.082 [DEBUG] [Thread-120370] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:03:08.094 [DEBUG] [Thread-120370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:03:08.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:03:08.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:03:08.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:03:08.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:03:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:03:08.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:03:08.128 [DEBUG] [Thread-120370] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:03:13.278 [DEBUG] [Thread-120372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:28.320 [DEBUG] [Thread-120373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:38.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:03:38.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:03:38.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:03:38.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 3, 11), 24.0, 19.9, 0.0, 18.63, 21.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:03:38.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:03:11
2025-12-03T17:03:38.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:03:39.108 [DEBUG] [Thread-120374] [transport.py] [_log()] starting thread (client mode): 0xa2729450
2025-12-03T17:03:39.108 [DEBUG] [Thread-120374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:03:39.129 [DEBUG] [Thread-120374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:03:39.129 [INFO] [Thread-120374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] client lang: <none>
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] server lang: <none>
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] kex follows: False
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] Compression: none
2025-12-03T17:03:39.132 [DEBUG] [Thread-120374] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:03:39.149 [DEBUG] [Thread-120374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:03:39.149 [DEBUG] [Thread-120374] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:03:39.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:03:39.150 [DEBUG] [Thread-120374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:03:39.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:03:39.152 [DEBUG] [Thread-120374] [transport.py] [_log()] userauth is OK
2025-12-03T17:03:39.152 [DEBUG] [Thread-120374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:03:39.152 [DEBUG] [Thread-120374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:03:39.152 [DEBUG] [Thread-120374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:03:39.153 [DEBUG] [Thread-120374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:03:39.176 [INFO] [Thread-120374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:03:39.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:03:39.806 [DEBUG] [Thread-120374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:03:39.806 [DEBUG] [Thread-120374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:03:39.806 [DEBUG] [Thread-120374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:03:39.847 [DEBUG] [Thread-120374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:03:39.847 [DEBUG] [Thread-120374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:03:39.849 [DEBUG] [Thread-120374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:03:39.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:03:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:03:39.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:03:39.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:03:39.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:03:39.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:03:39.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.627131 -999.00  +21.50  21.22     26   +1.20 1 1 1 1 1   887    0 19.34 -53.32 ----- 21.2 21.2 167.2 23.7 26.4 -30.5 26.6 -29.1 28.2 -27.5 28.6 -29.2
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:03:39.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.627131
2025-12-03T17:03:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:03:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:03:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:03:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:03:39.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:03:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:03:11', tmtdew=24.0, humidity=19.9, cloud=0.0, wind=18.63, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:03:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:03:39.873 [DEBUG] [Thread-120374] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:03:39.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:03:39.969 [DEBUG] [Thread-120377] [transport.py] [_log()] starting thread (client mode): 0xa2753400
2025-12-03T17:03:39.969 [DEBUG] [Thread-120377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:03:39.984 [DEBUG] [Thread-120377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:03:39.984 [INFO] [Thread-120377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:39.992 [DEBUG] [Thread-120377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] client lang: <none>
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] server lang: <none>
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] kex follows: False
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:03:39.993 [DEBUG] [Thread-120377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:03:39.994 [DEBUG] [Thread-120377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:03:39.994 [DEBUG] [Thread-120377] [transport.py] [_log()] Compression: none
2025-12-03T17:03:39.994 [DEBUG] [Thread-120377] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:03:40.052 [DEBUG] [Thread-120377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:03:40.053 [DEBUG] [Thread-120377] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:03:40.054 [DEBUG] [Thread-120377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:03:40.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:03:40.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:03:40.113 [DEBUG] [Thread-120377] [transport.py] [_log()] userauth is OK
2025-12-03T17:03:40.113 [DEBUG] [Thread-120377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:03:40.113 [DEBUG] [Thread-120377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:03:40.114 [DEBUG] [Thread-120377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:03:40.114 [DEBUG] [Thread-120377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:03:40.138 [INFO] [Thread-120377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:03:40.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:03:40.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:03:40.993 [DEBUG] [Thread-120377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:03:40.994 [DEBUG] [Thread-120377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:03:41.042 [DEBUG] [Thread-120377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:03:41.042 [DEBUG] [Thread-120377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:03:41.051 [DEBUG] [Thread-120377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:03:41.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:03:41.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:03:41.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:03:41.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:03:41.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:03:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:03:41.093 [DEBUG] [Thread-120377] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:03:42.261 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:42.262 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:43.347 [DEBUG] [Thread-120379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:57.057 [DEBUG] [Thread-120380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:03:58.380 [DEBUG] [Thread-120381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:04:11.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:04:11.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:04:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 3, 43), 24.01, 19.88, 0.0, 21.56, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:04:11.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:03:43
2025-12-03T17:04:11.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:04:12.065 [DEBUG] [Thread-120382] [transport.py] [_log()] starting thread (client mode): 0xa272afe0
2025-12-03T17:04:12.066 [DEBUG] [Thread-120382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:04:12.086 [DEBUG] [Thread-120382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:04:12.086 [INFO] [Thread-120382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] client lang: <none>
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] server lang: <none>
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] kex follows: False
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] Compression: none
2025-12-03T17:04:12.089 [DEBUG] [Thread-120382] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:04:12.106 [DEBUG] [Thread-120382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:04:12.106 [DEBUG] [Thread-120382] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:04:12.107 [DEBUG] [Thread-120382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:04:12.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:04:12.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:04:12.108 [DEBUG] [Thread-120382] [transport.py] [_log()] userauth is OK
2025-12-03T17:04:12.109 [DEBUG] [Thread-120382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:04:12.109 [DEBUG] [Thread-120382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:04:12.109 [DEBUG] [Thread-120382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:04:12.109 [DEBUG] [Thread-120382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:04:12.126 [INFO] [Thread-120382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:04:12.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:04:12.778 [DEBUG] [Thread-120382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:04:12.778 [DEBUG] [Thread-120382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:04:12.778 [DEBUG] [Thread-120382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:04:12.819 [DEBUG] [Thread-120382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:04:12.819 [DEBUG] [Thread-120382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:04:12.822 [DEBUG] [Thread-120382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:04:12.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:04:12.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:04:12.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:04:12.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:04:12.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:04:12.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:04:12.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:04:12.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:04:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:04:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.627479 -999.00  +21.40  22.63     25   +1.00 1 1 1 1 1   887    0 19.09 -53.83 ----- 22.6 22.6 168.4 27.7 26.4 -30.4 26.4 -29.3 28.1 -28.5 28.5 -29.7
2025-12-03T17:04:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:04:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:04:12.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.627479
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:04:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:03:43', tmtdew=24.01, humidity=19.88, cloud=0.0, wind=21.56, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:03:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:04:12.848 [DEBUG] [Thread-120382] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:04:12.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:04:12.943 [DEBUG] [Thread-120385] [transport.py] [_log()] starting thread (client mode): 0xa2729ab0
2025-12-03T17:04:12.944 [DEBUG] [Thread-120385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:04:12.958 [DEBUG] [Thread-120385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:04:12.958 [INFO] [Thread-120385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:12.966 [DEBUG] [Thread-120385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] client lang: <none>
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] server lang: <none>
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] kex follows: False
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] Compression: none
2025-12-03T17:04:12.967 [DEBUG] [Thread-120385] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:04:13.023 [DEBUG] [Thread-120385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:04:13.023 [DEBUG] [Thread-120385] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:04:13.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:04:13.024 [DEBUG] [Thread-120385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:04:13.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:04:13.080 [DEBUG] [Thread-120385] [transport.py] [_log()] userauth is OK
2025-12-03T17:04:13.080 [DEBUG] [Thread-120385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:04:13.080 [DEBUG] [Thread-120385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:04:13.080 [DEBUG] [Thread-120385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:04:13.080 [DEBUG] [Thread-120385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:04:13.099 [INFO] [Thread-120385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:04:13.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:04:13.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:04:13.406 [DEBUG] [Thread-120387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:13.959 [DEBUG] [Thread-120385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:04:13.959 [DEBUG] [Thread-120385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:04:14.007 [DEBUG] [Thread-120385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:04:14.007 [DEBUG] [Thread-120385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:04:14.016 [DEBUG] [Thread-120385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:04:14.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:04:14.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:04:14.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:04:14.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:04:14.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:04:14.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:04:14.050 [DEBUG] [Thread-120385] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:04:28.453 [DEBUG] [Thread-120388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:42.401 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:42.402 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:43.481 [DEBUG] [Thread-120389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:44.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:04:44.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:04:44.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:04:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 4, 15), 23.96, 19.92, 0.0, 20.94, 21.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:04:44.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:04:15
2025-12-03T17:04:44.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:04:45.024 [DEBUG] [Thread-120390] [transport.py] [_log()] starting thread (client mode): 0xa2761a50
2025-12-03T17:04:45.025 [DEBUG] [Thread-120390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:04:45.046 [DEBUG] [Thread-120390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:04:45.046 [INFO] [Thread-120390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] client lang: <none>
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] server lang: <none>
2025-12-03T17:04:45.049 [DEBUG] [Thread-120390] [transport.py] [_log()] kex follows: False
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] Compression: none
2025-12-03T17:04:45.050 [DEBUG] [Thread-120390] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:04:45.067 [DEBUG] [Thread-120390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:04:45.067 [DEBUG] [Thread-120390] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:04:45.068 [DEBUG] [Thread-120390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:04:45.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:04:45.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:04:45.070 [DEBUG] [Thread-120390] [transport.py] [_log()] userauth is OK
2025-12-03T17:04:45.070 [DEBUG] [Thread-120390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:04:45.070 [DEBUG] [Thread-120390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:04:45.070 [DEBUG] [Thread-120390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:04:45.070 [DEBUG] [Thread-120390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:04:45.105 [INFO] [Thread-120390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:04:45.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:04:45.740 [DEBUG] [Thread-120390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:04:45.740 [DEBUG] [Thread-120390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:04:45.740 [DEBUG] [Thread-120390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:04:45.781 [DEBUG] [Thread-120390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:04:45.781 [DEBUG] [Thread-120390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:04:45.784 [DEBUG] [Thread-120390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:04:45.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:04:45.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:04:45.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:04:45.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:04:45.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:04:45.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:04:45.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:04:45.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:04:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:04:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.627826 -999.00  +21.10  15.40     26   +1.00 1 1 1 1 1   887    0 18.91 -53.58 ----- 15.4 15.4 172.2 22.6 26.3 -30.1 26.3 -28.9 28.0 -29.2 28.4 -30.9
2025-12-03T17:04:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:04:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:04:45.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.627826
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:04:45.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:04:15', tmtdew=23.96, humidity=19.92, cloud=0.0, wind=20.94, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:04:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:04:45.809 [DEBUG] [Thread-120390] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:04:45.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:04:45.906 [DEBUG] [Thread-120393] [transport.py] [_log()] starting thread (client mode): 0xa2728640
2025-12-03T17:04:45.906 [DEBUG] [Thread-120393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:04:45.921 [DEBUG] [Thread-120393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:04:45.921 [INFO] [Thread-120393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:04:45.929 [DEBUG] [Thread-120393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] client lang: <none>
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] server lang: <none>
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] kex follows: False
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:04:45.930 [DEBUG] [Thread-120393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:04:45.931 [DEBUG] [Thread-120393] [transport.py] [_log()] Compression: none
2025-12-03T17:04:45.931 [DEBUG] [Thread-120393] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:04:45.988 [DEBUG] [Thread-120393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:04:45.989 [DEBUG] [Thread-120393] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:04:45.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:04:45.990 [DEBUG] [Thread-120393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:04:45.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:04:46.044 [DEBUG] [Thread-120393] [transport.py] [_log()] userauth is OK
2025-12-03T17:04:46.044 [DEBUG] [Thread-120393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:04:46.044 [DEBUG] [Thread-120393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:04:46.044 [DEBUG] [Thread-120393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:04:46.044 [DEBUG] [Thread-120393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:04:46.065 [INFO] [Thread-120393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:04:46.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:04:46.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:04:46.920 [DEBUG] [Thread-120393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:04:46.920 [DEBUG] [Thread-120393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:04:46.968 [DEBUG] [Thread-120393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:04:46.968 [DEBUG] [Thread-120393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:04:46.977 [DEBUG] [Thread-120393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:04:46.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:04:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:04:46.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:04:47.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:04:47.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:04:47.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:04:47.012 [DEBUG] [Thread-120393] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:04:57.108 [DEBUG] [Thread-120395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:04:58.510 [DEBUG] [Thread-120396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:13.559 [DEBUG] [Thread-120397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:17.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:05:17.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:05:17.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:05:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 4, 47), 23.78, 20.43, 0.0, 18.12, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:05:17.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:04:47
2025-12-03T17:05:17.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:05:17.999 [DEBUG] [Thread-120398] [transport.py] [_log()] starting thread (client mode): 0xa2762770
2025-12-03T17:05:17.999 [DEBUG] [Thread-120398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:05:18.021 [DEBUG] [Thread-120398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:05:18.021 [INFO] [Thread-120398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] client lang: <none>
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] server lang: <none>
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] kex follows: False
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] Compression: none
2025-12-03T17:05:18.024 [DEBUG] [Thread-120398] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:05:18.040 [DEBUG] [Thread-120398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:05:18.041 [DEBUG] [Thread-120398] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:05:18.041 [DEBUG] [Thread-120398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:05:18.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:05:18.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:05:18.043 [DEBUG] [Thread-120398] [transport.py] [_log()] userauth is OK
2025-12-03T17:05:18.044 [DEBUG] [Thread-120398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:05:18.044 [DEBUG] [Thread-120398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:05:18.044 [DEBUG] [Thread-120398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:05:18.044 [DEBUG] [Thread-120398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:05:18.069 [INFO] [Thread-120398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:05:18.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:05:18.689 [DEBUG] [Thread-120398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:05:18.690 [DEBUG] [Thread-120398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:05:18.690 [DEBUG] [Thread-120398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:05:18.731 [DEBUG] [Thread-120398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:05:18.731 [DEBUG] [Thread-120398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:05:18.734 [DEBUG] [Thread-120398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:05:18.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:05:18.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:05:18.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:05:18.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:05:18.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:05:18.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:05:18.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:05:18.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:05:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:05:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.628173 -999.00  +21.20  10.09     26   +1.10 1 1 1 1 1   887    0 19.18 -55.08 ----- 10.1 10.1 163.2 13.9 26.4 -29.3 26.4 -29.3 28.1 -27.5 28.4 -29.8
2025-12-03T17:05:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:05:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:05:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.628173
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:05:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:04:47', tmtdew=23.78, humidity=20.43, cloud=0.0, wind=18.12, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:04:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:05:18.761 [DEBUG] [Thread-120398] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:05:18.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:05:18.859 [DEBUG] [Thread-120401] [transport.py] [_log()] starting thread (client mode): 0xa51d3010
2025-12-03T17:05:18.859 [DEBUG] [Thread-120401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:05:18.873 [DEBUG] [Thread-120401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:05:18.873 [INFO] [Thread-120401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:05:18.881 [DEBUG] [Thread-120401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:05:18.881 [DEBUG] [Thread-120401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:05:18.881 [DEBUG] [Thread-120401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:05:18.881 [DEBUG] [Thread-120401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] client lang: <none>
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] server lang: <none>
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] kex follows: False
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:05:18.882 [DEBUG] [Thread-120401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:05:18.883 [DEBUG] [Thread-120401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:05:18.883 [DEBUG] [Thread-120401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:05:18.883 [DEBUG] [Thread-120401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:05:18.883 [DEBUG] [Thread-120401] [transport.py] [_log()] Compression: none
2025-12-03T17:05:18.883 [DEBUG] [Thread-120401] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:05:18.939 [DEBUG] [Thread-120401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:05:18.940 [DEBUG] [Thread-120401] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:05:18.941 [DEBUG] [Thread-120401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:05:18.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:05:18.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:05:18.997 [DEBUG] [Thread-120401] [transport.py] [_log()] userauth is OK
2025-12-03T17:05:18.998 [DEBUG] [Thread-120401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:05:18.998 [DEBUG] [Thread-120401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:05:18.998 [DEBUG] [Thread-120401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:05:18.998 [DEBUG] [Thread-120401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:05:19.018 [INFO] [Thread-120401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:05:19.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:05:19.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:05:19.902 [DEBUG] [Thread-120401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:05:19.903 [DEBUG] [Thread-120401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:05:19.950 [DEBUG] [Thread-120401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:05:19.950 [DEBUG] [Thread-120401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:05:19.958 [DEBUG] [Thread-120401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:05:19.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:05:19.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:05:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:05:19.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:05:19.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:05:19.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:05:19.989 [DEBUG] [Thread-120401] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:05:28.587 [DEBUG] [Thread-120403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:42.549 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:42.550 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:43.631 [DEBUG] [Thread-120404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:05:50.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:05:50.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:05:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 5, 19), 23.68, 20.58, 0.0, 18.16, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:05:50.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:05:19
2025-12-03T17:05:50.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:05:51.021 [DEBUG] [Thread-120405] [transport.py] [_log()] starting thread (client mode): 0xa517d960
2025-12-03T17:05:51.021 [DEBUG] [Thread-120405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:05:51.041 [DEBUG] [Thread-120405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:05:51.041 [INFO] [Thread-120405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] client lang: <none>
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] server lang: <none>
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] kex follows: False
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] Compression: none
2025-12-03T17:05:51.043 [DEBUG] [Thread-120405] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:05:51.051 [DEBUG] [Thread-120405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:05:51.051 [DEBUG] [Thread-120405] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:05:51.051 [DEBUG] [Thread-120405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:05:51.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:05:51.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:05:51.052 [DEBUG] [Thread-120405] [transport.py] [_log()] userauth is OK
2025-12-03T17:05:51.052 [DEBUG] [Thread-120405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:05:51.052 [DEBUG] [Thread-120405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:05:51.052 [DEBUG] [Thread-120405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:05:51.053 [DEBUG] [Thread-120405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:05:51.063 [INFO] [Thread-120405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:05:51.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:05:51.694 [DEBUG] [Thread-120405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:05:51.694 [DEBUG] [Thread-120405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:05:51.695 [DEBUG] [Thread-120405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:05:51.735 [DEBUG] [Thread-120405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:05:51.736 [DEBUG] [Thread-120405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:05:51.738 [DEBUG] [Thread-120405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:05:51.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:05:51.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:05:51.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:05:51.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:05:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:05:51.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:05:51.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.628520 -999.00  +21.50  16.78     26   +1.20 1 1 1 1 1   887    0 18.58 -58.30 ----- 16.8 16.8 186.1 20.4 26.4 -30.1 26.3 -30.2 28.2 -27.3 28.6 -30.3
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:05:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.628520
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:05:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:05:19', tmtdew=23.68, humidity=20.58, cloud=0.0, wind=18.16, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:05:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:05:51.757 [DEBUG] [Thread-120405] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:05:51.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:05:51.842 [DEBUG] [Thread-120408] [transport.py] [_log()] starting thread (client mode): 0xa27cb280
2025-12-03T17:05:51.843 [DEBUG] [Thread-120408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:05:51.857 [DEBUG] [Thread-120408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:05:51.857 [INFO] [Thread-120408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] client lang: <none>
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] server lang: <none>
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] kex follows: False
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] Compression: none
2025-12-03T17:05:51.865 [DEBUG] [Thread-120408] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:05:51.922 [DEBUG] [Thread-120408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:05:51.922 [DEBUG] [Thread-120408] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:05:51.922 [DEBUG] [Thread-120408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:05:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:05:51.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:05:51.980 [DEBUG] [Thread-120408] [transport.py] [_log()] userauth is OK
2025-12-03T17:05:51.980 [DEBUG] [Thread-120408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:05:51.980 [DEBUG] [Thread-120408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:05:51.980 [DEBUG] [Thread-120408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:05:51.980 [DEBUG] [Thread-120408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:05:51.994 [INFO] [Thread-120408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:05:51.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:05:51.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:05:52.836 [DEBUG] [Thread-120408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:05:52.836 [DEBUG] [Thread-120408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:05:52.885 [DEBUG] [Thread-120408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:05:52.885 [DEBUG] [Thread-120408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:05:52.893 [DEBUG] [Thread-120408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:05:52.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:05:52.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:05:52.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:05:52.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:05:52.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:05:52.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:05:52.925 [DEBUG] [Thread-120408] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:05:57.155 [DEBUG] [Thread-120410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:05:58.657 [DEBUG] [Thread-120411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:13.704 [DEBUG] [Thread-120412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:22.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:06:22.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:06:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:06:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 5, 51), 23.92, 19.92, 0.0, 21.19, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:06:23.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:05:51
2025-12-03T17:06:23.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:06:23.945 [DEBUG] [Thread-120413] [transport.py] [_log()] starting thread (client mode): 0xa2729cf0
2025-12-03T17:06:23.945 [DEBUG] [Thread-120413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:06:23.965 [DEBUG] [Thread-120413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:06:23.965 [INFO] [Thread-120413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] client lang: <none>
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] server lang: <none>
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] kex follows: False
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] Compression: none
2025-12-03T17:06:23.968 [DEBUG] [Thread-120413] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:06:23.980 [DEBUG] [Thread-120413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:06:23.980 [DEBUG] [Thread-120413] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:06:23.980 [DEBUG] [Thread-120413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:06:23.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:06:23.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:06:23.981 [DEBUG] [Thread-120413] [transport.py] [_log()] userauth is OK
2025-12-03T17:06:23.981 [DEBUG] [Thread-120413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:06:23.981 [DEBUG] [Thread-120413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:06:23.981 [DEBUG] [Thread-120413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:06:23.981 [DEBUG] [Thread-120413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:06:23.996 [INFO] [Thread-120413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:06:23.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:06:24.630 [DEBUG] [Thread-120413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:06:24.631 [DEBUG] [Thread-120413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:06:24.631 [DEBUG] [Thread-120413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:06:24.671 [DEBUG] [Thread-120413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:06:24.671 [DEBUG] [Thread-120413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:06:24.673 [DEBUG] [Thread-120413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:06:24.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:06:24.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:06:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:06:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:06:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:06:24.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:06:24.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.628867 -999.00  +21.60  12.12     25   +1.20 1 1 1 1 1   887    0 18.95 -55.59 ----- 12.1 12.1 171.4 19.1 26.4 -29.5 26.4 -30.6 28.2 -27.7 28.5 -29.7
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.628867
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:06:24.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:05:51', tmtdew=23.92, humidity=19.92, cloud=0.0, wind=21.19, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:05:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:06:24.691 [DEBUG] [Thread-120413] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:06:24.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:06:24.778 [DEBUG] [Thread-120416] [transport.py] [_log()] starting thread (client mode): 0xa27471f0
2025-12-03T17:06:24.778 [DEBUG] [Thread-120416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:06:24.793 [DEBUG] [Thread-120416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:06:24.793 [INFO] [Thread-120416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] client lang: <none>
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] server lang: <none>
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] kex follows: False
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] Compression: none
2025-12-03T17:06:24.800 [DEBUG] [Thread-120416] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:06:24.858 [DEBUG] [Thread-120416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:06:24.858 [DEBUG] [Thread-120416] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:06:24.858 [DEBUG] [Thread-120416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:06:24.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:06:24.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:06:24.915 [DEBUG] [Thread-120416] [transport.py] [_log()] userauth is OK
2025-12-03T17:06:24.915 [DEBUG] [Thread-120416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:06:24.915 [DEBUG] [Thread-120416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:06:24.915 [DEBUG] [Thread-120416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:06:24.915 [DEBUG] [Thread-120416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:06:24.933 [INFO] [Thread-120416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:06:24.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:06:24.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:06:25.798 [DEBUG] [Thread-120416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:06:25.798 [DEBUG] [Thread-120416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:06:25.846 [DEBUG] [Thread-120416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:06:25.846 [DEBUG] [Thread-120416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:06:25.855 [DEBUG] [Thread-120416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:06:25.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:06:25.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:06:25.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:06:25.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:06:25.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:06:25.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:06:25.889 [DEBUG] [Thread-120416] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:06:28.731 [DEBUG] [Thread-120418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:42.690 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:42.691 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:43.766 [DEBUG] [Thread-120419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:06:55.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:06:55.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:06:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 6, 23), 23.9, 19.92, 0.0, 19.41, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:06:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:06:23
2025-12-03T17:06:56.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:06:56.909 [DEBUG] [Thread-120420] [transport.py] [_log()] starting thread (client mode): 0xa27c8970
2025-12-03T17:06:56.909 [DEBUG] [Thread-120420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:06:56.929 [DEBUG] [Thread-120420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:06:56.929 [INFO] [Thread-120420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:06:56.930 [DEBUG] [Thread-120420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] client lang: <none>
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] server lang: <none>
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] kex follows: False
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] Compression: none
2025-12-03T17:06:56.931 [DEBUG] [Thread-120420] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:06:56.948 [DEBUG] [Thread-120420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:06:56.948 [DEBUG] [Thread-120420] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:06:56.948 [DEBUG] [Thread-120420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:06:56.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:06:56.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:06:56.949 [DEBUG] [Thread-120420] [transport.py] [_log()] userauth is OK
2025-12-03T17:06:56.949 [DEBUG] [Thread-120420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:06:56.949 [DEBUG] [Thread-120420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:06:56.949 [DEBUG] [Thread-120420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:06:56.949 [DEBUG] [Thread-120420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:06:56.968 [INFO] [Thread-120420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:06:56.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:06:57.183 [DEBUG] [Thread-120422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:57.610 [DEBUG] [Thread-120420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:06:57.611 [DEBUG] [Thread-120420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:06:57.611 [DEBUG] [Thread-120420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:06:57.651 [DEBUG] [Thread-120420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:06:57.651 [DEBUG] [Thread-120420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:06:57.654 [DEBUG] [Thread-120420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:06:57.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:06:57.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:06:57.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:06:57.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:06:57.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:06:57.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:06:57.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:06:57.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:06:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:06:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.629215 -999.00  +21.70  13.48     25   +1.10 1 1 1 1 1   887    0 19.31 -54.40 ----- 13.5 13.5 163.7 16.1 26.5 -29.6 26.4 -30.2 28.3 -27.2 28.6 -28.5
2025-12-03T17:06:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:06:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:06:57.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.629215
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:06:57.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:06:23', tmtdew=23.9, humidity=19.92, cloud=0.0, wind=19.41, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:06:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:06:57.679 [DEBUG] [Thread-120420] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:06:57.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:06:57.767 [DEBUG] [Thread-120424] [transport.py] [_log()] starting thread (client mode): 0xa272a7d0
2025-12-03T17:06:57.767 [DEBUG] [Thread-120424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:06:57.781 [DEBUG] [Thread-120424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:06:57.781 [INFO] [Thread-120424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:06:57.789 [DEBUG] [Thread-120424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] client lang: <none>
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] server lang: <none>
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] kex follows: False
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] Compression: none
2025-12-03T17:06:57.790 [DEBUG] [Thread-120424] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:06:57.847 [DEBUG] [Thread-120424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:06:57.847 [DEBUG] [Thread-120424] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:06:57.848 [DEBUG] [Thread-120424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:06:57.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:06:57.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:06:57.903 [DEBUG] [Thread-120424] [transport.py] [_log()] userauth is OK
2025-12-03T17:06:57.904 [DEBUG] [Thread-120424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:06:57.904 [DEBUG] [Thread-120424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:06:57.904 [DEBUG] [Thread-120424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:06:57.904 [DEBUG] [Thread-120424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:06:57.922 [INFO] [Thread-120424] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:06:57.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:06:57.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:06:58.748 [DEBUG] [Thread-120424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:06:58.748 [DEBUG] [Thread-120424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:06:58.796 [DEBUG] [Thread-120424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:06:58.796 [DEBUG] [Thread-120424] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:06:58.797 [DEBUG] [Thread-120426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:06:58.805 [DEBUG] [Thread-120424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:06:58.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:06:58.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:06:58.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:06:58.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:06:58.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:06:58.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:06:58.839 [DEBUG] [Thread-120424] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:07:13.838 [DEBUG] [Thread-120427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:28.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:07:28.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:07:28.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:07:28.866 [DEBUG] [Thread-120428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 6, 55), 23.92, 20.27, 0.0, 16.48, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:07:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:06:55
2025-12-03T17:07:29.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:07:29.837 [DEBUG] [Thread-120429] [transport.py] [_log()] starting thread (client mode): 0xa2761960
2025-12-03T17:07:29.837 [DEBUG] [Thread-120429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:07:29.857 [DEBUG] [Thread-120429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:07:29.857 [INFO] [Thread-120429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] client lang: <none>
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] server lang: <none>
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] kex follows: False
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] Compression: none
2025-12-03T17:07:29.860 [DEBUG] [Thread-120429] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:07:29.881 [DEBUG] [Thread-120429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:07:29.882 [DEBUG] [Thread-120429] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:07:29.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:07:29.883 [DEBUG] [Thread-120429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:07:29.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:07:29.885 [DEBUG] [Thread-120429] [transport.py] [_log()] userauth is OK
2025-12-03T17:07:29.885 [DEBUG] [Thread-120429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:07:29.885 [DEBUG] [Thread-120429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:07:29.885 [DEBUG] [Thread-120429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:07:29.885 [DEBUG] [Thread-120429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:07:29.907 [INFO] [Thread-120429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:07:29.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:07:30.518 [DEBUG] [Thread-120429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:07:30.518 [DEBUG] [Thread-120429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:07:30.519 [DEBUG] [Thread-120429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:07:30.559 [DEBUG] [Thread-120429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:07:30.559 [DEBUG] [Thread-120429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:07:30.562 [DEBUG] [Thread-120429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:07:30.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:07:30.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:07:30.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:07:30.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:07:30.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:07:30.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:07:30.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:07:30.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:07:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:07:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.629562 -999.00  +21.80  13.86     25   +1.30 1 1 1 1 1   887    0 19.22 -48.87 ----- 13.9 13.9 184.3 20.9 26.6 -30.5 26.6 -32.3 28.4 -27.1 28.7 -28.5
2025-12-03T17:07:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:07:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:07:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.629562
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:07:30.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:06:55', tmtdew=23.92, humidity=20.27, cloud=0.0, wind=16.48, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:06:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:07:30.587 [DEBUG] [Thread-120429] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:07:30.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:07:30.675 [DEBUG] [Thread-120432] [transport.py] [_log()] starting thread (client mode): 0xa27442e0
2025-12-03T17:07:30.675 [DEBUG] [Thread-120432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:07:30.690 [DEBUG] [Thread-120432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:07:30.690 [INFO] [Thread-120432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:07:30.697 [DEBUG] [Thread-120432] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:07:30.697 [DEBUG] [Thread-120432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:07:30.697 [DEBUG] [Thread-120432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] client lang: <none>
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] server lang: <none>
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] kex follows: False
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] Compression: none
2025-12-03T17:07:30.698 [DEBUG] [Thread-120432] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:07:30.759 [DEBUG] [Thread-120432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:07:30.760 [DEBUG] [Thread-120432] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:07:30.760 [DEBUG] [Thread-120432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:07:30.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:07:30.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:07:30.815 [DEBUG] [Thread-120432] [transport.py] [_log()] userauth is OK
2025-12-03T17:07:30.816 [DEBUG] [Thread-120432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:07:30.816 [DEBUG] [Thread-120432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:07:30.816 [DEBUG] [Thread-120432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:07:30.816 [DEBUG] [Thread-120432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:07:30.833 [INFO] [Thread-120432] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:07:30.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:07:30.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:07:31.682 [DEBUG] [Thread-120432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:07:31.682 [DEBUG] [Thread-120432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:07:31.729 [DEBUG] [Thread-120432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:07:31.730 [DEBUG] [Thread-120432] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:07:31.738 [DEBUG] [Thread-120432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:07:31.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:07:31.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:07:31.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:07:31.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:07:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:07:31.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:07:31.772 [DEBUG] [Thread-120432] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:07:42.836 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:42.839 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:43.889 [DEBUG] [Thread-120434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:57.240 [DEBUG] [Thread-120435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:07:58.930 [DEBUG] [Thread-120436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:01.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:08:01.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:08:01.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:08:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 7, 59), 23.91, 19.95, 0.0, 21.02, 21.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:08:02.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:07:59
2025-12-03T17:08:02.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:08:02.742 [DEBUG] [Thread-120437] [transport.py] [_log()] starting thread (client mode): 0xa514bbb0
2025-12-03T17:08:02.742 [DEBUG] [Thread-120437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:08:02.761 [DEBUG] [Thread-120437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:08:02.761 [INFO] [Thread-120437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] client lang: <none>
2025-12-03T17:08:02.764 [DEBUG] [Thread-120437] [transport.py] [_log()] server lang: <none>
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] kex follows: False
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] Compression: none
2025-12-03T17:08:02.765 [DEBUG] [Thread-120437] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:08:02.784 [DEBUG] [Thread-120437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:08:02.785 [DEBUG] [Thread-120437] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:08:02.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:08:02.786 [DEBUG] [Thread-120437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:08:02.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:08:02.788 [DEBUG] [Thread-120437] [transport.py] [_log()] userauth is OK
2025-12-03T17:08:02.788 [DEBUG] [Thread-120437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:08:02.788 [DEBUG] [Thread-120437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:08:02.788 [DEBUG] [Thread-120437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:08:02.788 [DEBUG] [Thread-120437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:08:02.806 [INFO] [Thread-120437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:08:02.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:08:03.425 [DEBUG] [Thread-120437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:08:03.425 [DEBUG] [Thread-120437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:08:03.425 [DEBUG] [Thread-120437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:08:03.466 [DEBUG] [Thread-120437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:08:03.466 [DEBUG] [Thread-120437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:08:03.469 [DEBUG] [Thread-120437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:08:03.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:08:03.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:08:03.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:08:03.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:08:03.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:08:03.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:08:03.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:08:03.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.629909 -999.00  +21.60  12.98     25   +1.10 1 1 1 1 1   887    0 18.90 -46.06 ----- 13.0 13.0 142.3 17.8 26.5 -30.0 26.6 -28.8 28.2 -28.8 28.6 -30.4
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.629909
2025-12-03T17:08:03.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:08:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:08:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:08:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:08:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:08:03.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:07:59', tmtdew=23.91, humidity=19.95, cloud=0.0, wind=21.02, temperature=21.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:07:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:08:03.495 [DEBUG] [Thread-120437] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:08:03.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:08:03.592 [DEBUG] [Thread-120440] [transport.py] [_log()] starting thread (client mode): 0xa514bdc0
2025-12-03T17:08:03.592 [DEBUG] [Thread-120440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:08:03.609 [DEBUG] [Thread-120440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:08:03.609 [INFO] [Thread-120440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:08:03.616 [DEBUG] [Thread-120440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] client lang: <none>
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] server lang: <none>
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] kex follows: False
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:08:03.617 [DEBUG] [Thread-120440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:08:03.618 [DEBUG] [Thread-120440] [transport.py] [_log()] Compression: none
2025-12-03T17:08:03.618 [DEBUG] [Thread-120440] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:08:03.677 [DEBUG] [Thread-120440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:08:03.677 [DEBUG] [Thread-120440] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:08:03.677 [DEBUG] [Thread-120440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:08:03.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:08:03.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:08:03.736 [DEBUG] [Thread-120440] [transport.py] [_log()] userauth is OK
2025-12-03T17:08:03.736 [DEBUG] [Thread-120440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:08:03.736 [DEBUG] [Thread-120440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:08:03.736 [DEBUG] [Thread-120440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:08:03.736 [DEBUG] [Thread-120440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:08:03.755 [INFO] [Thread-120440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:08:03.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:08:03.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:08:04.581 [DEBUG] [Thread-120440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:08:04.581 [DEBUG] [Thread-120440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:08:04.630 [DEBUG] [Thread-120440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:08:04.630 [DEBUG] [Thread-120440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:08:04.639 [DEBUG] [Thread-120440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:08:04.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:08:04.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:08:04.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:08:04.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:08:04.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:08:04.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:08:04.673 [DEBUG] [Thread-120440] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:08:13.965 [DEBUG] [Thread-120442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:29.007 [DEBUG] [Thread-120443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:08:34.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:08:34.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:08:35.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 8, 31), 23.8, 20.15, 0.0, 20.24, 21.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:08:35.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:08:31
2025-12-03T17:08:35.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:08:35.625 [DEBUG] [Thread-120444] [transport.py] [_log()] starting thread (client mode): 0xa27c91b0
2025-12-03T17:08:35.625 [DEBUG] [Thread-120444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:08:35.645 [DEBUG] [Thread-120444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:08:35.645 [INFO] [Thread-120444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] client lang: <none>
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] server lang: <none>
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] kex follows: False
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:08:35.649 [DEBUG] [Thread-120444] [transport.py] [_log()] Compression: none
2025-12-03T17:08:35.650 [DEBUG] [Thread-120444] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:08:35.668 [DEBUG] [Thread-120444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:08:35.669 [DEBUG] [Thread-120444] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:08:35.669 [DEBUG] [Thread-120444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:08:35.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:08:35.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:08:35.671 [DEBUG] [Thread-120444] [transport.py] [_log()] userauth is OK
2025-12-03T17:08:35.672 [DEBUG] [Thread-120444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:08:35.672 [DEBUG] [Thread-120444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:08:35.672 [DEBUG] [Thread-120444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:08:35.672 [DEBUG] [Thread-120444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:08:35.710 [INFO] [Thread-120444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:08:35.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:08:36.357 [DEBUG] [Thread-120444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:08:36.357 [DEBUG] [Thread-120444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:08:36.357 [DEBUG] [Thread-120444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:08:36.398 [DEBUG] [Thread-120444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:08:36.398 [DEBUG] [Thread-120444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:08:36.401 [DEBUG] [Thread-120444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:08:36.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:08:36.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:08:36.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:08:36.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:08:36.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:08:36.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:08:36.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.630603 -999.00  +21.60  17.40     25   +1.20 1 1 1 1 1   887    0 19.19 -51.98 ----- 17.4 17.4 166.0 25.7 26.5 -30.0 26.4 -30.5 28.4 -28.7 28.8 -30.9
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:08:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.630603
2025-12-03T17:08:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:08:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:08:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:08:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:08:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:08:36.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:08:31', tmtdew=23.8, humidity=20.15, cloud=0.0, wind=20.24, temperature=21.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:08:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:08:36.427 [DEBUG] [Thread-120444] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:08:36.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:08:36.519 [DEBUG] [Thread-120447] [transport.py] [_log()] starting thread (client mode): 0xa27cb4c0
2025-12-03T17:08:36.519 [DEBUG] [Thread-120447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:08:36.534 [DEBUG] [Thread-120447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:08:36.534 [INFO] [Thread-120447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:08:36.541 [DEBUG] [Thread-120447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:08:36.542 [DEBUG] [Thread-120447] [transport.py] [_log()] client lang: <none>
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] server lang: <none>
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] kex follows: False
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] Compression: none
2025-12-03T17:08:36.543 [DEBUG] [Thread-120447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:08:36.599 [DEBUG] [Thread-120447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:08:36.599 [DEBUG] [Thread-120447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:08:36.600 [DEBUG] [Thread-120447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:08:36.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:08:36.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:08:36.656 [DEBUG] [Thread-120447] [transport.py] [_log()] userauth is OK
2025-12-03T17:08:36.656 [DEBUG] [Thread-120447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:08:36.656 [DEBUG] [Thread-120447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:08:36.656 [DEBUG] [Thread-120447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:08:36.656 [DEBUG] [Thread-120447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:08:36.675 [INFO] [Thread-120447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:08:36.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:08:36.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:08:37.498 [DEBUG] [Thread-120447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:08:37.499 [DEBUG] [Thread-120447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:08:37.547 [DEBUG] [Thread-120447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:08:37.547 [DEBUG] [Thread-120447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:08:37.556 [DEBUG] [Thread-120447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:08:37.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:08:37.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:08:37.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:08:37.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:08:37.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:08:37.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:08:37.590 [DEBUG] [Thread-120447] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:08:42.980 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:42.981 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:44.035 [DEBUG] [Thread-120449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:57.283 [DEBUG] [Thread-120450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:08:59.087 [DEBUG] [Thread-120451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:07.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:09:07.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:09:07.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:09:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 9, 3), 24.25, 19.57, 0.0, 23.11, 21.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:09:08.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:09:03
2025-12-03T17:09:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:09:08.589 [DEBUG] [Thread-120452] [transport.py] [_log()] starting thread (client mode): 0xa5149090
2025-12-03T17:09:08.589 [DEBUG] [Thread-120452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:09:08.609 [DEBUG] [Thread-120452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:09:08.609 [INFO] [Thread-120452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] client lang: <none>
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] server lang: <none>
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] kex follows: False
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] Compression: none
2025-12-03T17:09:08.613 [DEBUG] [Thread-120452] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:09:08.628 [DEBUG] [Thread-120452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:09:08.628 [DEBUG] [Thread-120452] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:09:08.628 [DEBUG] [Thread-120452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:09:08.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:09:08.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:09:08.629 [DEBUG] [Thread-120452] [transport.py] [_log()] userauth is OK
2025-12-03T17:09:08.629 [DEBUG] [Thread-120452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:09:08.629 [DEBUG] [Thread-120452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:09:08.629 [DEBUG] [Thread-120452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:09:08.629 [DEBUG] [Thread-120452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:09:08.638 [INFO] [Thread-120452] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:09:08.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:09:09.267 [DEBUG] [Thread-120452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:09:09.267 [DEBUG] [Thread-120452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:09:09.267 [DEBUG] [Thread-120452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:09:09.308 [DEBUG] [Thread-120452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:09:09.308 [DEBUG] [Thread-120452] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:09:09.311 [DEBUG] [Thread-120452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:09:09.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:09:09.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:09:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:09:09.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:09:09.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:09:09.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:09:09.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:09:09.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:09:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:09:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.630951 -999.00  +21.50  25.47     25   +1.10 1 1 1 1 1   887    0 19.20 -51.39 ----- 25.5 25.5 191.8 28.1 26.4 -31.1 26.2 -33.6 28.3 -28.4 28.6 -30.4
2025-12-03T17:09:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:09:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:09:09.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.630951
2025-12-03T17:09:09.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:09:09.335 [DEBUG] [Thread-120452] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:09:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:09:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:09:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:09:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:09:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:09:03', tmtdew=24.25, humidity=19.57, cloud=0.0, wind=23.11, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:08:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:09:09.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:09:09.440 [DEBUG] [Thread-120455] [transport.py] [_log()] starting thread (client mode): 0xa27458a0
2025-12-03T17:09:09.440 [DEBUG] [Thread-120455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:09:09.455 [DEBUG] [Thread-120455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:09:09.455 [INFO] [Thread-120455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:09:09.463 [DEBUG] [Thread-120455] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:09:09.463 [DEBUG] [Thread-120455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:09:09.463 [DEBUG] [Thread-120455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:09:09.463 [DEBUG] [Thread-120455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] client lang: <none>
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] server lang: <none>
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] kex follows: False
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:09:09.464 [DEBUG] [Thread-120455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:09:09.465 [DEBUG] [Thread-120455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:09:09.465 [DEBUG] [Thread-120455] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:09:09.465 [DEBUG] [Thread-120455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:09:09.465 [DEBUG] [Thread-120455] [transport.py] [_log()] Compression: none
2025-12-03T17:09:09.465 [DEBUG] [Thread-120455] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:09:09.520 [DEBUG] [Thread-120455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:09:09.520 [DEBUG] [Thread-120455] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:09:09.521 [DEBUG] [Thread-120455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:09:09.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:09:09.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:09:09.576 [DEBUG] [Thread-120455] [transport.py] [_log()] userauth is OK
2025-12-03T17:09:09.576 [DEBUG] [Thread-120455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:09:09.576 [DEBUG] [Thread-120455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:09:09.576 [DEBUG] [Thread-120455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:09:09.576 [DEBUG] [Thread-120455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:09:09.597 [INFO] [Thread-120455] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:09:09.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:09:09.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:09:10.441 [DEBUG] [Thread-120455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:09:10.442 [DEBUG] [Thread-120455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:09:10.490 [DEBUG] [Thread-120455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:09:10.490 [DEBUG] [Thread-120455] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:09:10.499 [DEBUG] [Thread-120455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:09:10.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:09:10.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:09:10.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:09:10.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:09:10.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:09:10.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:09:10.534 [DEBUG] [Thread-120455] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:09:14.112 [DEBUG] [Thread-120457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:29.153 [DEBUG] [Thread-120458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:40.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:09:40.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:09:40.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:09:41.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 9, 35), 23.97, 20.04, 0.0, 22.06, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:09:41.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:09:35
2025-12-03T17:09:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:09:41.498 [DEBUG] [Thread-120459] [transport.py] [_log()] starting thread (client mode): 0xa27c8a60
2025-12-03T17:09:41.498 [DEBUG] [Thread-120459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:09:41.518 [DEBUG] [Thread-120459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:09:41.518 [INFO] [Thread-120459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:09:41.521 [DEBUG] [Thread-120459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] client lang: <none>
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] server lang: <none>
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] kex follows: False
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] Compression: none
2025-12-03T17:09:41.522 [DEBUG] [Thread-120459] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:09:41.539 [DEBUG] [Thread-120459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:09:41.540 [DEBUG] [Thread-120459] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:09:41.540 [DEBUG] [Thread-120459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:09:41.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:09:41.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:09:41.542 [DEBUG] [Thread-120459] [transport.py] [_log()] userauth is OK
2025-12-03T17:09:41.542 [DEBUG] [Thread-120459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:09:41.542 [DEBUG] [Thread-120459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:09:41.542 [DEBUG] [Thread-120459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:09:41.542 [DEBUG] [Thread-120459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:09:41.566 [INFO] [Thread-120459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:09:41.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:09:42.213 [DEBUG] [Thread-120459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:09:42.213 [DEBUG] [Thread-120459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:09:42.213 [DEBUG] [Thread-120459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:09:42.255 [DEBUG] [Thread-120459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:09:42.255 [DEBUG] [Thread-120459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:09:42.257 [DEBUG] [Thread-120459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:09:42.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:09:42.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:09:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:09:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:09:42.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:09:42.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:09:42.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.631298 -999.00  +21.50  13.19     26   +1.20 1 1 1 1 1   887    0 18.59 -50.18 ----- 13.2 13.2 186.2 29.6 26.2 -31.0 26.2 -30.2 28.1 -27.6 28.3 -30.2
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.631298
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:09:42.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:09:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:09:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:09:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:09:42.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:09:35', tmtdew=23.97, humidity=20.04, cloud=0.0, wind=22.06, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:09:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:09:42.275 [DEBUG] [Thread-120459] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:09:42.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:09:42.361 [DEBUG] [Thread-120462] [transport.py] [_log()] starting thread (client mode): 0xa27ca6b0
2025-12-03T17:09:42.361 [DEBUG] [Thread-120462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:09:42.376 [DEBUG] [Thread-120462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:09:42.376 [INFO] [Thread-120462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:09:42.383 [DEBUG] [Thread-120462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] client lang: <none>
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] server lang: <none>
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] kex follows: False
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] Compression: none
2025-12-03T17:09:42.384 [DEBUG] [Thread-120462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:09:42.438 [DEBUG] [Thread-120462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:09:42.439 [DEBUG] [Thread-120462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:09:42.439 [DEBUG] [Thread-120462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:09:42.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:09:42.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:09:42.496 [DEBUG] [Thread-120462] [transport.py] [_log()] userauth is OK
2025-12-03T17:09:42.496 [DEBUG] [Thread-120462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:09:42.496 [DEBUG] [Thread-120462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:09:42.496 [DEBUG] [Thread-120462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:09:42.496 [DEBUG] [Thread-120462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:09:42.509 [INFO] [Thread-120462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:09:42.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:09:42.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:09:43.121 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:43.123 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:43.380 [DEBUG] [Thread-120462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:09:43.380 [DEBUG] [Thread-120462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:09:43.427 [DEBUG] [Thread-120462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:09:43.427 [DEBUG] [Thread-120462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:09:43.436 [DEBUG] [Thread-120462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:09:43.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:09:43.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:09:43.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:09:43.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:09:43.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:09:43.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:09:43.467 [DEBUG] [Thread-120462] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:09:44.182 [DEBUG] [Thread-120464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:57.318 [DEBUG] [Thread-120465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:09:59.224 [DEBUG] [Thread-120466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:10:13.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:10:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:10:14.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 10, 7), 23.71, 20.35, 0.0, 23.89, 21.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:10:14.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:10:07
2025-12-03T17:10:14.254 [DEBUG] [Thread-120467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:10:14.428 [DEBUG] [Thread-120468] [transport.py] [_log()] starting thread (client mode): 0xa2760700
2025-12-03T17:10:14.428 [DEBUG] [Thread-120468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:10:14.449 [DEBUG] [Thread-120468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:10:14.449 [INFO] [Thread-120468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:10:14.452 [DEBUG] [Thread-120468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:10:14.452 [DEBUG] [Thread-120468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:10:14.452 [DEBUG] [Thread-120468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:10:14.452 [DEBUG] [Thread-120468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] client lang: <none>
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] server lang: <none>
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] kex follows: False
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] Compression: none
2025-12-03T17:10:14.453 [DEBUG] [Thread-120468] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:10:14.471 [DEBUG] [Thread-120468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:10:14.471 [DEBUG] [Thread-120468] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:10:14.472 [DEBUG] [Thread-120468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:10:14.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:10:14.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:10:14.474 [DEBUG] [Thread-120468] [transport.py] [_log()] userauth is OK
2025-12-03T17:10:14.474 [DEBUG] [Thread-120468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:10:14.474 [DEBUG] [Thread-120468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:10:14.474 [DEBUG] [Thread-120468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:10:14.474 [DEBUG] [Thread-120468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:10:14.496 [INFO] [Thread-120468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:10:14.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:10:15.093 [DEBUG] [Thread-120468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:10:15.093 [DEBUG] [Thread-120468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:10:15.093 [DEBUG] [Thread-120468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:10:15.134 [DEBUG] [Thread-120468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:10:15.134 [DEBUG] [Thread-120468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:10:15.137 [DEBUG] [Thread-120468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:10:15.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:10:15.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:10:15.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:10:15.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:10:15.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:10:15.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:10:15.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:10:15.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.631645 -999.00  +21.60  13.69     25   +1.20 1 1 1 1 1   887    0 18.91 -47.08 ----- 13.7 13.7 152.4 24.1 26.3 -30.1 26.4 -31.0 28.1 -27.5 28.4 -29.8
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.631645
2025-12-03T17:10:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:10:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:10:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:10:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:10:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:10:15.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:10:07', tmtdew=23.71, humidity=20.35, cloud=0.0, wind=23.89, temperature=21.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:09:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:10:15.183 [DEBUG] [Thread-120468] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:10:15.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:10:15.282 [DEBUG] [Thread-120471] [transport.py] [_log()] starting thread (client mode): 0xa27c97e0
2025-12-03T17:10:15.282 [DEBUG] [Thread-120471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:10:15.295 [DEBUG] [Thread-120471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:10:15.295 [INFO] [Thread-120471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:15.303 [DEBUG] [Thread-120471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] client lang: <none>
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] server lang: <none>
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] kex follows: False
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] Compression: none
2025-12-03T17:10:15.304 [DEBUG] [Thread-120471] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:10:15.360 [DEBUG] [Thread-120471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:10:15.361 [DEBUG] [Thread-120471] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:10:15.361 [DEBUG] [Thread-120471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:10:15.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:10:15.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:10:15.416 [DEBUG] [Thread-120471] [transport.py] [_log()] userauth is OK
2025-12-03T17:10:15.417 [DEBUG] [Thread-120471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:10:15.417 [DEBUG] [Thread-120471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:10:15.417 [DEBUG] [Thread-120471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:10:15.417 [DEBUG] [Thread-120471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:10:15.439 [INFO] [Thread-120471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:10:15.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:10:15.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:10:16.325 [DEBUG] [Thread-120471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:10:16.325 [DEBUG] [Thread-120471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:10:16.374 [DEBUG] [Thread-120471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:10:16.374 [DEBUG] [Thread-120471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:10:16.383 [DEBUG] [Thread-120471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:10:16.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:10:16.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:10:16.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:10:16.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:10:16.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:10:16.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:10:16.417 [DEBUG] [Thread-120471] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:10:29.279 [DEBUG] [Thread-120473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:43.266 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:43.267 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:44.320 [DEBUG] [Thread-120474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:46.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:10:46.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:10:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:10:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 10, 39), 23.62, 20.47, 0.0, 22.43, 21.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:10:47.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:10:39
2025-12-03T17:10:47.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:10:47.384 [DEBUG] [Thread-120475] [transport.py] [_log()] starting thread (client mode): 0xa27c9ea0
2025-12-03T17:10:47.385 [DEBUG] [Thread-120475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:10:47.404 [DEBUG] [Thread-120475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:10:47.405 [INFO] [Thread-120475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:10:47.407 [DEBUG] [Thread-120475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:10:47.407 [DEBUG] [Thread-120475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:10:47.407 [DEBUG] [Thread-120475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] client lang: <none>
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] server lang: <none>
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] kex follows: False
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] Compression: none
2025-12-03T17:10:47.408 [DEBUG] [Thread-120475] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:10:47.426 [DEBUG] [Thread-120475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:10:47.426 [DEBUG] [Thread-120475] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:10:47.427 [DEBUG] [Thread-120475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:10:47.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:10:47.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:10:47.428 [DEBUG] [Thread-120475] [transport.py] [_log()] userauth is OK
2025-12-03T17:10:47.429 [DEBUG] [Thread-120475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:10:47.429 [DEBUG] [Thread-120475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:10:47.429 [DEBUG] [Thread-120475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:10:47.429 [DEBUG] [Thread-120475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:10:47.446 [INFO] [Thread-120475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:10:47.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:10:48.038 [DEBUG] [Thread-120475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:10:48.038 [DEBUG] [Thread-120475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:10:48.039 [DEBUG] [Thread-120475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:10:48.079 [DEBUG] [Thread-120475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:10:48.079 [DEBUG] [Thread-120475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:10:48.082 [DEBUG] [Thread-120475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:10:48.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:10:48.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:10:48.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:10:48.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:10:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:10:48.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:10:48.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:10:48.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:10:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:10:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.631992 -999.00  +21.70  20.48     25   +1.30 1 1 1 1 1   887    0 18.93 -44.55 ----- 20.5 20.5 152.8 28.0 26.2 -30.5 26.4 -29.6 28.1 -27.2 28.5 -29.3
2025-12-03T17:10:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:10:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:10:48.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.631992
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:10:48.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:10:39', tmtdew=23.62, humidity=20.47, cloud=0.0, wind=22.43, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:10:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:10:48.109 [DEBUG] [Thread-120475] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:10:48.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:10:48.204 [DEBUG] [Thread-120478] [transport.py] [_log()] starting thread (client mode): 0xa2762c50
2025-12-03T17:10:48.204 [DEBUG] [Thread-120478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:10:48.219 [DEBUG] [Thread-120478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:10:48.219 [INFO] [Thread-120478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:10:48.226 [DEBUG] [Thread-120478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:10:48.226 [DEBUG] [Thread-120478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] client lang: <none>
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] server lang: <none>
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] kex follows: False
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] Compression: none
2025-12-03T17:10:48.227 [DEBUG] [Thread-120478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:10:48.284 [DEBUG] [Thread-120478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:10:48.285 [DEBUG] [Thread-120478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:10:48.285 [DEBUG] [Thread-120478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:10:48.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:10:48.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:10:48.340 [DEBUG] [Thread-120478] [transport.py] [_log()] userauth is OK
2025-12-03T17:10:48.341 [DEBUG] [Thread-120478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:10:48.341 [DEBUG] [Thread-120478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:10:48.341 [DEBUG] [Thread-120478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:10:48.341 [DEBUG] [Thread-120478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:10:48.358 [INFO] [Thread-120478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:10:48.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:10:48.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:10:49.228 [DEBUG] [Thread-120478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:10:49.228 [DEBUG] [Thread-120478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:10:49.276 [DEBUG] [Thread-120478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:10:49.277 [DEBUG] [Thread-120478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:10:49.285 [DEBUG] [Thread-120478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:10:49.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:10:49.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:10:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:10:49.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:10:49.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:10:49.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:10:49.319 [DEBUG] [Thread-120478] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:10:57.363 [DEBUG] [Thread-120480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:10:59.348 [DEBUG] [Thread-120481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:14.381 [DEBUG] [Thread-120482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:11:19.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:11:19.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:11:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 11, 11), 23.63, 20.48, 0.0, 25.92, 21.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:11:20.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:11:11
2025-12-03T17:11:20.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:11:20.298 [DEBUG] [Thread-120483] [transport.py] [_log()] starting thread (client mode): 0xa2746950
2025-12-03T17:11:20.299 [DEBUG] [Thread-120483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:11:20.319 [DEBUG] [Thread-120483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:11:20.319 [INFO] [Thread-120483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] client lang: <none>
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] server lang: <none>
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] kex follows: False
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:11:20.322 [DEBUG] [Thread-120483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:11:20.323 [DEBUG] [Thread-120483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:11:20.323 [DEBUG] [Thread-120483] [transport.py] [_log()] Compression: none
2025-12-03T17:11:20.323 [DEBUG] [Thread-120483] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:11:20.341 [DEBUG] [Thread-120483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:11:20.341 [DEBUG] [Thread-120483] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:11:20.342 [DEBUG] [Thread-120483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:11:20.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:11:20.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:11:20.343 [DEBUG] [Thread-120483] [transport.py] [_log()] userauth is OK
2025-12-03T17:11:20.343 [DEBUG] [Thread-120483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:11:20.344 [DEBUG] [Thread-120483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:11:20.344 [DEBUG] [Thread-120483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:11:20.344 [DEBUG] [Thread-120483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:11:20.367 [INFO] [Thread-120483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:11:20.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:11:21.091 [DEBUG] [Thread-120483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:11:21.091 [DEBUG] [Thread-120483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:11:21.091 [DEBUG] [Thread-120483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:11:21.133 [DEBUG] [Thread-120483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:11:21.133 [DEBUG] [Thread-120483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:11:21.135 [DEBUG] [Thread-120483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:11:21.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:11:21.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:11:21.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:11:21.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:11:21.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:11:21.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:11:21.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.632340 -999.00  +21.60  16.01     26   +1.30 1 1 1 1 1   887    0 18.86 -43.57 ----- 16.0 16.0 145.7 25.7 26.3 -30.4 26.3 -29.1 28.0 -28.5 28.3 -29.8
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.632340
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:11:21.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:11:11', tmtdew=23.63, humidity=20.48, cloud=0.0, wind=25.92, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:10:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:11:21.156 [DEBUG] [Thread-120483] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:11:21.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:11:21.239 [DEBUG] [Thread-120486] [transport.py] [_log()] starting thread (client mode): 0xa51495d0
2025-12-03T17:11:21.239 [DEBUG] [Thread-120486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:11:21.258 [DEBUG] [Thread-120486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:11:21.259 [INFO] [Thread-120486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] client lang: <none>
2025-12-03T17:11:21.266 [DEBUG] [Thread-120486] [transport.py] [_log()] server lang: <none>
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] kex follows: False
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] Compression: none
2025-12-03T17:11:21.267 [DEBUG] [Thread-120486] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:11:21.329 [DEBUG] [Thread-120486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:11:21.329 [DEBUG] [Thread-120486] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:11:21.330 [DEBUG] [Thread-120486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:11:21.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:11:21.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:11:21.390 [DEBUG] [Thread-120486] [transport.py] [_log()] userauth is OK
2025-12-03T17:11:21.390 [DEBUG] [Thread-120486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:11:21.390 [DEBUG] [Thread-120486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:11:21.390 [DEBUG] [Thread-120486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:11:21.390 [DEBUG] [Thread-120486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:11:21.409 [INFO] [Thread-120486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:11:21.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:11:21.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:11:22.257 [DEBUG] [Thread-120486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:11:22.258 [DEBUG] [Thread-120486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:11:22.306 [DEBUG] [Thread-120486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:11:22.306 [DEBUG] [Thread-120486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:11:22.315 [DEBUG] [Thread-120486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:11:22.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:11:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:11:22.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:11:22.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:11:22.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:11:22.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:11:22.349 [DEBUG] [Thread-120486] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:11:29.413 [DEBUG] [Thread-120488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:43.404 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:43.405 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:44.455 [DEBUG] [Thread-120489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:11:52.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:11:52.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:11:53.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 11, 43), 23.76, 20.48, 0.0, 22.37, 21.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:11:53.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:11:43
2025-12-03T17:11:53.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:11:53.293 [DEBUG] [Thread-120490] [transport.py] [_log()] starting thread (client mode): 0xa514ae30
2025-12-03T17:11:53.293 [DEBUG] [Thread-120490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:11:53.312 [DEBUG] [Thread-120490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:11:53.312 [INFO] [Thread-120490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] client lang: <none>
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] server lang: <none>
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] kex follows: False
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:11:53.316 [DEBUG] [Thread-120490] [transport.py] [_log()] Compression: none
2025-12-03T17:11:53.317 [DEBUG] [Thread-120490] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:11:53.333 [DEBUG] [Thread-120490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:11:53.333 [DEBUG] [Thread-120490] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:11:53.334 [DEBUG] [Thread-120490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:11:53.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:11:53.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:11:53.335 [DEBUG] [Thread-120490] [transport.py] [_log()] userauth is OK
2025-12-03T17:11:53.336 [DEBUG] [Thread-120490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:11:53.336 [DEBUG] [Thread-120490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:11:53.336 [DEBUG] [Thread-120490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:11:53.336 [DEBUG] [Thread-120490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:11:53.353 [INFO] [Thread-120490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:11:53.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:11:54.022 [DEBUG] [Thread-120490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:11:54.022 [DEBUG] [Thread-120490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:11:54.023 [DEBUG] [Thread-120490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:11:54.063 [DEBUG] [Thread-120490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:11:54.063 [DEBUG] [Thread-120490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:11:54.066 [DEBUG] [Thread-120490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:11:54.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:11:54.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:11:54.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:11:54.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:11:54.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:11:54.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:11:54.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.632687 -999.00  +21.40  12.65     26   +1.10 1 1 1 1 1   887    0 19.30 -40.37 ----- 12.7 12.7 151.4 28.7 26.2 -30.7 26.3 -29.4 28.0 -28.8 28.4 -31.1
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:11:54.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.632687
2025-12-03T17:11:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:11:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:11:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:11:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:11:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:11:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:11:43', tmtdew=23.76, humidity=20.48, cloud=0.0, wind=22.37, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:11:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:11:54.092 [DEBUG] [Thread-120490] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:11:54.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:11:54.183 [DEBUG] [Thread-120493] [transport.py] [_log()] starting thread (client mode): 0xa2778880
2025-12-03T17:11:54.183 [DEBUG] [Thread-120493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:11:54.200 [DEBUG] [Thread-120493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:11:54.200 [INFO] [Thread-120493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:11:54.207 [DEBUG] [Thread-120493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:11:54.207 [DEBUG] [Thread-120493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:11:54.207 [DEBUG] [Thread-120493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] client lang: <none>
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] server lang: <none>
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] kex follows: False
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] Compression: none
2025-12-03T17:11:54.208 [DEBUG] [Thread-120493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:11:54.264 [DEBUG] [Thread-120493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:11:54.265 [DEBUG] [Thread-120493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:11:54.265 [DEBUG] [Thread-120493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:11:54.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:11:54.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:11:54.321 [DEBUG] [Thread-120493] [transport.py] [_log()] userauth is OK
2025-12-03T17:11:54.321 [DEBUG] [Thread-120493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:11:54.321 [DEBUG] [Thread-120493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:11:54.322 [DEBUG] [Thread-120493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:11:54.322 [DEBUG] [Thread-120493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:11:54.340 [INFO] [Thread-120493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:11:54.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:11:54.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:11:55.160 [DEBUG] [Thread-120493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:11:55.160 [DEBUG] [Thread-120493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:11:55.207 [DEBUG] [Thread-120493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:11:55.208 [DEBUG] [Thread-120493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:11:55.216 [DEBUG] [Thread-120493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:11:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:11:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:11:55.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:11:55.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:11:55.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:11:55.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:11:55.250 [DEBUG] [Thread-120493] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:11:57.398 [DEBUG] [Thread-120495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:11:59.481 [DEBUG] [Thread-120496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:14.529 [DEBUG] [Thread-120497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:25.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:12:25.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:12:25.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:12:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 12, 15), 23.67, 20.6, 0.0, 22.78, 21.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:12:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:12:15
2025-12-03T17:12:26.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:12:26.217 [DEBUG] [Thread-120498] [transport.py] [_log()] starting thread (client mode): 0xa2729c30
2025-12-03T17:12:26.217 [DEBUG] [Thread-120498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:12:26.236 [DEBUG] [Thread-120498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:12:26.236 [INFO] [Thread-120498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:12:26.237 [DEBUG] [Thread-120498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:12:26.237 [DEBUG] [Thread-120498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:12:26.237 [DEBUG] [Thread-120498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] client lang: <none>
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] server lang: <none>
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] kex follows: False
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] Compression: none
2025-12-03T17:12:26.238 [DEBUG] [Thread-120498] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:12:26.251 [DEBUG] [Thread-120498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:12:26.251 [DEBUG] [Thread-120498] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:12:26.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:12:26.252 [DEBUG] [Thread-120498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:12:26.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:12:26.254 [DEBUG] [Thread-120498] [transport.py] [_log()] userauth is OK
2025-12-03T17:12:26.254 [DEBUG] [Thread-120498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:12:26.254 [DEBUG] [Thread-120498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:12:26.254 [DEBUG] [Thread-120498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:12:26.254 [DEBUG] [Thread-120498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:12:26.278 [INFO] [Thread-120498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:12:26.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:12:27.016 [DEBUG] [Thread-120498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:12:27.017 [DEBUG] [Thread-120498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:12:27.017 [DEBUG] [Thread-120498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:12:27.058 [DEBUG] [Thread-120498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:12:27.058 [DEBUG] [Thread-120498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:12:27.060 [DEBUG] [Thread-120498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:12:27.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:12:27.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:12:27.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:12:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:12:27.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:12:27.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:12:27.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:12:27.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:12:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:12:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.633034 -999.00  +21.30  14.45     26   +1.30 1 1 1 1 1   887    0 19.34 -38.20 ----- 14.4 14.4 153.2 22.1 26.2 -30.7 26.2 -29.6 27.9 -27.7 28.4 -30.2
2025-12-03T17:12:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.633034
2025-12-03T17:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:12:27.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:12:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:12:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:12:27.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:12:15', tmtdew=23.67, humidity=20.6, cloud=0.0, wind=22.78, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:11:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:12:27.078 [DEBUG] [Thread-120498] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:12:27.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:12:27.174 [DEBUG] [Thread-120501] [transport.py] [_log()] starting thread (client mode): 0xa272a650
2025-12-03T17:12:27.174 [DEBUG] [Thread-120501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:12:27.189 [DEBUG] [Thread-120501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:12:27.189 [INFO] [Thread-120501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:12:27.196 [DEBUG] [Thread-120501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] client lang: <none>
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] server lang: <none>
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] kex follows: False
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] Compression: none
2025-12-03T17:12:27.197 [DEBUG] [Thread-120501] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:12:27.253 [DEBUG] [Thread-120501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:12:27.253 [DEBUG] [Thread-120501] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:12:27.254 [DEBUG] [Thread-120501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:12:27.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:12:27.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:12:27.309 [DEBUG] [Thread-120501] [transport.py] [_log()] userauth is OK
2025-12-03T17:12:27.309 [DEBUG] [Thread-120501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:12:27.309 [DEBUG] [Thread-120501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:12:27.309 [DEBUG] [Thread-120501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:12:27.309 [DEBUG] [Thread-120501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:12:27.329 [INFO] [Thread-120501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:12:27.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:12:27.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:12:28.199 [DEBUG] [Thread-120501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:12:28.199 [DEBUG] [Thread-120501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:12:28.247 [DEBUG] [Thread-120501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:12:28.248 [DEBUG] [Thread-120501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:12:28.257 [DEBUG] [Thread-120501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:12:28.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:12:28.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:12:28.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:12:28.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:12:28.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:12:28.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:12:28.293 [DEBUG] [Thread-120501] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:12:29.557 [DEBUG] [Thread-120503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:43.546 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:43.547 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:44.597 [DEBUG] [Thread-120504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:57.425 [DEBUG] [Thread-120505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:12:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:12:58.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:12:58.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:12:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 12, 47), 23.4, 20.88, 0.0, 28.28, 21.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:12:59.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:12:47
2025-12-03T17:12:59.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:12:59.294 [DEBUG] [Thread-120506] [transport.py] [_log()] starting thread (client mode): 0xa2729330
2025-12-03T17:12:59.295 [DEBUG] [Thread-120506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:12:59.315 [DEBUG] [Thread-120506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:12:59.315 [INFO] [Thread-120506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] client lang: <none>
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] server lang: <none>
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] kex follows: False
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] Compression: none
2025-12-03T17:12:59.318 [DEBUG] [Thread-120506] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:12:59.334 [DEBUG] [Thread-120506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:12:59.334 [DEBUG] [Thread-120506] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:12:59.334 [DEBUG] [Thread-120506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:12:59.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:12:59.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:12:59.335 [DEBUG] [Thread-120506] [transport.py] [_log()] userauth is OK
2025-12-03T17:12:59.335 [DEBUG] [Thread-120506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:12:59.335 [DEBUG] [Thread-120506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:12:59.335 [DEBUG] [Thread-120506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:12:59.336 [DEBUG] [Thread-120506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:12:59.354 [INFO] [Thread-120506] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:12:59.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:12:59.621 [DEBUG] [Thread-120508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:00.001 [DEBUG] [Thread-120506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:13:00.001 [DEBUG] [Thread-120506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:13:00.001 [DEBUG] [Thread-120506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:13:00.042 [DEBUG] [Thread-120506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:13:00.042 [DEBUG] [Thread-120506] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:13:00.045 [DEBUG] [Thread-120506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:13:00.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:13:00.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:13:00.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:13:00.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:13:00.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:13:00.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:13:00.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.633381 -999.00  +21.50  18.89     26   +1.40 1 1 1 1 1   887    0 19.37 -36.25 ----- 18.9 18.9 181.8 24.4 26.2 -30.3 26.2 -33.2 27.9 -28.0 28.3 -29.3
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.633381
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:13:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:12:47', tmtdew=23.4, humidity=20.88, cloud=0.0, wind=28.28, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:12:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:13:00.065 [DEBUG] [Thread-120506] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:13:00.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:13:00.160 [DEBUG] [Thread-120510] [transport.py] [_log()] starting thread (client mode): 0xa2762050
2025-12-03T17:13:00.160 [DEBUG] [Thread-120510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:13:00.175 [DEBUG] [Thread-120510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:13:00.175 [INFO] [Thread-120510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:13:00.182 [DEBUG] [Thread-120510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:13:00.182 [DEBUG] [Thread-120510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:13:00.182 [DEBUG] [Thread-120510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:13:00.182 [DEBUG] [Thread-120510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:00.182 [DEBUG] [Thread-120510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] client lang: <none>
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] server lang: <none>
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] kex follows: False
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] Compression: none
2025-12-03T17:13:00.183 [DEBUG] [Thread-120510] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:13:00.240 [DEBUG] [Thread-120510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:13:00.240 [DEBUG] [Thread-120510] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:13:00.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:13:00.241 [DEBUG] [Thread-120510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:13:00.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:13:00.297 [DEBUG] [Thread-120510] [transport.py] [_log()] userauth is OK
2025-12-03T17:13:00.297 [DEBUG] [Thread-120510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:13:00.297 [DEBUG] [Thread-120510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:13:00.297 [DEBUG] [Thread-120510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:13:00.297 [DEBUG] [Thread-120510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:13:00.311 [INFO] [Thread-120510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:13:00.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:13:00.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:13:01.155 [DEBUG] [Thread-120510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:13:01.155 [DEBUG] [Thread-120510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:13:01.206 [DEBUG] [Thread-120510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:13:01.206 [DEBUG] [Thread-120510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:13:01.217 [DEBUG] [Thread-120510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:13:01.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:13:01.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:13:01.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:13:01.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:13:01.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:13:01.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:13:01.258 [DEBUG] [Thread-120510] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:13:14.650 [DEBUG] [Thread-120512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:29.690 [DEBUG] [Thread-120513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:13:31.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:13:31.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:13:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 13, 19), 23.35, 20.96, 0.0, 25.22, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:13:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:13:19
2025-12-03T17:13:32.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:13:32.202 [DEBUG] [Thread-120514] [transport.py] [_log()] starting thread (client mode): 0xa2746a10
2025-12-03T17:13:32.202 [DEBUG] [Thread-120514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:13:32.220 [DEBUG] [Thread-120514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:13:32.220 [INFO] [Thread-120514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:13:32.223 [DEBUG] [Thread-120514] [transport.py] [_log()] client lang: <none>
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] server lang: <none>
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] kex follows: False
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] Compression: none
2025-12-03T17:13:32.224 [DEBUG] [Thread-120514] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:13:32.239 [DEBUG] [Thread-120514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:13:32.240 [DEBUG] [Thread-120514] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:13:32.240 [DEBUG] [Thread-120514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:13:32.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:13:32.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:13:32.242 [DEBUG] [Thread-120514] [transport.py] [_log()] userauth is OK
2025-12-03T17:13:32.242 [DEBUG] [Thread-120514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:13:32.242 [DEBUG] [Thread-120514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:13:32.242 [DEBUG] [Thread-120514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:13:32.243 [DEBUG] [Thread-120514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:13:32.266 [INFO] [Thread-120514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:13:32.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:13:32.954 [DEBUG] [Thread-120514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:13:32.954 [DEBUG] [Thread-120514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:13:32.955 [DEBUG] [Thread-120514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:13:32.995 [DEBUG] [Thread-120514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:13:32.995 [DEBUG] [Thread-120514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:13:32.998 [DEBUG] [Thread-120514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:13:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:13:33.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:13:33.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:13:33.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:13:33.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:13:33.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:13:33.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.634076 -999.00  +21.50  17.82     25   +1.10 1 1 1 1 1   887    0 19.20 -33.27 ----- 17.8 17.8 197.8 22.6 26.1 -30.2 25.9 -29.5 27.8 -28.7 28.1 -30.1
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:13:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.634076
2025-12-03T17:13:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:13:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:13:33.021 [DEBUG] [Thread-120514] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:13:33.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:13:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:13:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:13:33.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:13:19', tmtdew=23.35, humidity=20.96, cloud=0.0, wind=25.22, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:13:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:13:33.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:13:33.116 [DEBUG] [Thread-120517] [transport.py] [_log()] starting thread (client mode): 0xa277a110
2025-12-03T17:13:33.116 [DEBUG] [Thread-120517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:13:33.131 [DEBUG] [Thread-120517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:13:33.131 [INFO] [Thread-120517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:13:33.138 [DEBUG] [Thread-120517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:13:33.138 [DEBUG] [Thread-120517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:13:33.138 [DEBUG] [Thread-120517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] client lang: <none>
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] server lang: <none>
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] kex follows: False
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] Compression: none
2025-12-03T17:13:33.139 [DEBUG] [Thread-120517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:13:33.201 [DEBUG] [Thread-120517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:13:33.201 [DEBUG] [Thread-120517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:13:33.202 [DEBUG] [Thread-120517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:13:33.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:13:33.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:13:33.258 [DEBUG] [Thread-120517] [transport.py] [_log()] userauth is OK
2025-12-03T17:13:33.258 [DEBUG] [Thread-120517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:13:33.258 [DEBUG] [Thread-120517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:13:33.258 [DEBUG] [Thread-120517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:13:33.259 [DEBUG] [Thread-120517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:13:33.277 [INFO] [Thread-120517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:13:33.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:13:33.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:13:34.110 [DEBUG] [Thread-120517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:13:34.110 [DEBUG] [Thread-120517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:13:34.159 [DEBUG] [Thread-120517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:13:34.159 [DEBUG] [Thread-120517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:13:34.168 [DEBUG] [Thread-120517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:13:34.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:13:34.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:13:34.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:13:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:13:34.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:13:34.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:13:34.202 [DEBUG] [Thread-120517] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:13:43.687 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:43.688 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:44.719 [DEBUG] [Thread-120519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:57.470 [DEBUG] [Thread-120520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:13:59.766 [DEBUG] [Thread-120521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:14:04.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:14:04.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 13, 51), 23.61, 20.5, 0.0, 28.42, 21.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:14:04.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:13:51
2025-12-03T17:14:05.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:14:05.154 [DEBUG] [Thread-120522] [transport.py] [_log()] starting thread (client mode): 0xa272a8c0
2025-12-03T17:14:05.155 [DEBUG] [Thread-120522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:14:05.175 [DEBUG] [Thread-120522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:14:05.175 [INFO] [Thread-120522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:14:05.178 [DEBUG] [Thread-120522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:14:05.178 [DEBUG] [Thread-120522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:14:05.178 [DEBUG] [Thread-120522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] client lang: <none>
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] server lang: <none>
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] kex follows: False
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:14:05.179 [DEBUG] [Thread-120522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:14:05.180 [DEBUG] [Thread-120522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:14:05.180 [DEBUG] [Thread-120522] [transport.py] [_log()] Compression: none
2025-12-03T17:14:05.180 [DEBUG] [Thread-120522] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:14:05.197 [DEBUG] [Thread-120522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:14:05.198 [DEBUG] [Thread-120522] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:14:05.198 [DEBUG] [Thread-120522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:14:05.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:14:05.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:14:05.200 [DEBUG] [Thread-120522] [transport.py] [_log()] userauth is OK
2025-12-03T17:14:05.200 [DEBUG] [Thread-120522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:14:05.200 [DEBUG] [Thread-120522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:14:05.200 [DEBUG] [Thread-120522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:14:05.200 [DEBUG] [Thread-120522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:14:05.236 [INFO] [Thread-120522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:14:05.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:14:05.877 [DEBUG] [Thread-120522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:14:05.877 [DEBUG] [Thread-120522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:14:05.877 [DEBUG] [Thread-120522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:14:05.918 [DEBUG] [Thread-120522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:14:05.918 [DEBUG] [Thread-120522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:14:05.921 [DEBUG] [Thread-120522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:14:05.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:14:05.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:14:05.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:14:05.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:14:05.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:14:05.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:14:05.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:14:05.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:14:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:14:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.634423 -999.00  +21.50  11.22     26   +1.20 1 1 1 1 1   887    0 19.49 -31.85 ----- 11.2 11.2 163.2 19.3 26.1 -29.3 26.0 -30.5 27.8 -28.1 28.1 -29.7
2025-12-03T17:14:05.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:14:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:14:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.634423
2025-12-03T17:14:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:14:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:14:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:14:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:14:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:14:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:13:51', tmtdew=23.61, humidity=20.5, cloud=0.0, wind=28.42, temperature=21.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:13:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:14:05.944 [DEBUG] [Thread-120522] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:14:06.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:14:06.037 [DEBUG] [Thread-120525] [transport.py] [_log()] starting thread (client mode): 0xa272b220
2025-12-03T17:14:06.037 [DEBUG] [Thread-120525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:14:06.052 [DEBUG] [Thread-120525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:14:06.052 [INFO] [Thread-120525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:14:06.059 [DEBUG] [Thread-120525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:14:06.059 [DEBUG] [Thread-120525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] client lang: <none>
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] server lang: <none>
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] kex follows: False
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] Compression: none
2025-12-03T17:14:06.060 [DEBUG] [Thread-120525] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:14:06.117 [DEBUG] [Thread-120525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:14:06.117 [DEBUG] [Thread-120525] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:14:06.118 [DEBUG] [Thread-120525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:14:06.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:14:06.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:14:06.173 [DEBUG] [Thread-120525] [transport.py] [_log()] userauth is OK
2025-12-03T17:14:06.174 [DEBUG] [Thread-120525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:14:06.174 [DEBUG] [Thread-120525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:14:06.174 [DEBUG] [Thread-120525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:14:06.174 [DEBUG] [Thread-120525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:14:06.192 [INFO] [Thread-120525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:14:06.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:14:06.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:14:07.028 [DEBUG] [Thread-120525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:14:07.029 [DEBUG] [Thread-120525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:14:07.077 [DEBUG] [Thread-120525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:14:07.077 [DEBUG] [Thread-120525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:14:07.085 [DEBUG] [Thread-120525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:14:07.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:14:07.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:14:07.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:14:07.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:14:07.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:14:07.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:14:07.119 [DEBUG] [Thread-120525] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:14:14.796 [DEBUG] [Thread-120527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:29.830 [DEBUG] [Thread-120528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:37.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:14:37.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:14:37.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:14:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 14, 23), 23.46, 20.7, 0.0, 25.27, 21.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:14:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:14:23
2025-12-03T17:14:37.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:14:38.076 [DEBUG] [Thread-120529] [transport.py] [_log()] starting thread (client mode): 0xa2750e80
2025-12-03T17:14:38.076 [DEBUG] [Thread-120529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:14:38.096 [DEBUG] [Thread-120529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:14:38.096 [INFO] [Thread-120529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] client lang: <none>
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] server lang: <none>
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] kex follows: False
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] Compression: none
2025-12-03T17:14:38.100 [DEBUG] [Thread-120529] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:14:38.117 [DEBUG] [Thread-120529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:14:38.117 [DEBUG] [Thread-120529] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:14:38.118 [DEBUG] [Thread-120529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:14:38.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:14:38.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:14:38.161 [DEBUG] [Thread-120529] [transport.py] [_log()] userauth is OK
2025-12-03T17:14:38.162 [DEBUG] [Thread-120529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:14:38.162 [DEBUG] [Thread-120529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:14:38.162 [DEBUG] [Thread-120529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:14:38.162 [DEBUG] [Thread-120529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:14:38.187 [INFO] [Thread-120529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:14:38.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:14:38.910 [DEBUG] [Thread-120529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:14:38.910 [DEBUG] [Thread-120529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:14:38.910 [DEBUG] [Thread-120529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:14:38.951 [DEBUG] [Thread-120529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:14:38.951 [DEBUG] [Thread-120529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:14:38.954 [DEBUG] [Thread-120529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:14:38.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:14:38.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:14:38.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:14:38.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:14:38.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:14:38.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:14:38.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.634770 -999.00  +21.70  24.71     26   +1.40 1 1 1 1 1   887    0 19.73 -27.83 ----- 24.7 24.7 163.9 29.1 26.1 -30.4 26.1 -29.2 27.9 -27.2 28.2 -28.9
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:14:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.634770
2025-12-03T17:14:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:14:38.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:14:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:14:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:14:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:14:38.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:14:23', tmtdew=23.46, humidity=20.7, cloud=0.0, wind=25.27, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:14:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:14:38.984 [DEBUG] [Thread-120529] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:14:39.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:14:39.082 [DEBUG] [Thread-120532] [transport.py] [_log()] starting thread (client mode): 0xa2778ca0
2025-12-03T17:14:39.083 [DEBUG] [Thread-120532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:14:39.097 [DEBUG] [Thread-120532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:14:39.098 [INFO] [Thread-120532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:14:39.105 [DEBUG] [Thread-120532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:14:39.105 [DEBUG] [Thread-120532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:14:39.105 [DEBUG] [Thread-120532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:14:39.105 [DEBUG] [Thread-120532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] client lang: <none>
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] server lang: <none>
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] kex follows: False
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] Compression: none
2025-12-03T17:14:39.106 [DEBUG] [Thread-120532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:14:39.166 [DEBUG] [Thread-120532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:14:39.166 [DEBUG] [Thread-120532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:14:39.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:14:39.167 [DEBUG] [Thread-120532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:14:39.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:14:39.222 [DEBUG] [Thread-120532] [transport.py] [_log()] userauth is OK
2025-12-03T17:14:39.222 [DEBUG] [Thread-120532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:14:39.222 [DEBUG] [Thread-120532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:14:39.222 [DEBUG] [Thread-120532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:14:39.222 [DEBUG] [Thread-120532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:14:39.241 [INFO] [Thread-120532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:14:39.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:14:39.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:14:40.084 [DEBUG] [Thread-120532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:14:40.084 [DEBUG] [Thread-120532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:14:40.132 [DEBUG] [Thread-120532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:14:40.132 [DEBUG] [Thread-120532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:14:40.141 [DEBUG] [Thread-120532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:14:40.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:14:40.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:14:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:14:40.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:14:40.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:14:40.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:14:40.176 [DEBUG] [Thread-120532] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:14:43.830 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:43.831 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:44.861 [DEBUG] [Thread-120534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:57.520 [DEBUG] [Thread-120535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:14:59.905 [DEBUG] [Thread-120536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:10.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:15:10.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:15:10.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:15:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 14, 55), 23.44, 20.7, 0.0, 25.83, 21.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:15:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:14:55
2025-12-03T17:15:10.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:15:11.110 [DEBUG] [Thread-120537] [transport.py] [_log()] starting thread (client mode): 0xa277a170
2025-12-03T17:15:11.110 [DEBUG] [Thread-120537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:15:11.130 [DEBUG] [Thread-120537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:15:11.130 [INFO] [Thread-120537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:15:11.133 [DEBUG] [Thread-120537] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:15:11.133 [DEBUG] [Thread-120537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:15:11.133 [DEBUG] [Thread-120537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:15:11.133 [DEBUG] [Thread-120537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] client lang: <none>
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] server lang: <none>
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] kex follows: False
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] Compression: none
2025-12-03T17:15:11.134 [DEBUG] [Thread-120537] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:15:11.150 [DEBUG] [Thread-120537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:15:11.150 [DEBUG] [Thread-120537] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:15:11.151 [DEBUG] [Thread-120537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:15:11.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:15:11.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:15:11.152 [DEBUG] [Thread-120537] [transport.py] [_log()] userauth is OK
2025-12-03T17:15:11.153 [DEBUG] [Thread-120537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:15:11.153 [DEBUG] [Thread-120537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:15:11.153 [DEBUG] [Thread-120537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:15:11.153 [DEBUG] [Thread-120537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:15:11.176 [INFO] [Thread-120537] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:15:11.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:15:12.031 [DEBUG] [Thread-120537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:15:12.031 [DEBUG] [Thread-120537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:15:12.032 [DEBUG] [Thread-120537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:15:12.072 [DEBUG] [Thread-120537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:15:12.072 [DEBUG] [Thread-120537] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:15:12.074 [DEBUG] [Thread-120537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:15:12.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:15:12.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:15:12.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:15:12.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:15:12.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:15:12.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:15:12.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:15:12.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:15:12.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:15:12.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.635117 -999.00  +21.50  21.89     26   +1.40 1 1 1 1 1   887    0 19.40 -25.94 ----- 21.9 21.9 171.2 28.6 26.1 -30.5 26.1 -29.4 27.8 -28.7 28.1 -30.2
2025-12-03T17:15:12.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:15:12.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:15:12.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.635117
2025-12-03T17:15:12.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:15:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:15:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:15:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:15:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:15:12.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:14:55', tmtdew=23.44, humidity=20.7, cloud=0.0, wind=25.83, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:14:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:15:12.099 [DEBUG] [Thread-120537] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:15:12.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:15:12.194 [DEBUG] [Thread-120540] [transport.py] [_log()] starting thread (client mode): 0xa2752ef0
2025-12-03T17:15:12.194 [DEBUG] [Thread-120540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:15:12.209 [DEBUG] [Thread-120540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:15:12.209 [INFO] [Thread-120540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:15:12.216 [DEBUG] [Thread-120540] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] client lang: <none>
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] server lang: <none>
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] kex follows: False
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] Compression: none
2025-12-03T17:15:12.217 [DEBUG] [Thread-120540] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:15:12.273 [DEBUG] [Thread-120540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:15:12.274 [DEBUG] [Thread-120540] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:15:12.274 [DEBUG] [Thread-120540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:15:12.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:15:12.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:15:12.330 [DEBUG] [Thread-120540] [transport.py] [_log()] userauth is OK
2025-12-03T17:15:12.330 [DEBUG] [Thread-120540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:15:12.330 [DEBUG] [Thread-120540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:15:12.330 [DEBUG] [Thread-120540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:15:12.330 [DEBUG] [Thread-120540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:15:12.353 [INFO] [Thread-120540] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:15:12.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:15:12.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:15:13.223 [DEBUG] [Thread-120540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:15:13.223 [DEBUG] [Thread-120540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:15:13.272 [DEBUG] [Thread-120540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:15:13.272 [DEBUG] [Thread-120540] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:15:13.280 [DEBUG] [Thread-120540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:15:13.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:15:13.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:15:13.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:15:13.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:15:13.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:15:13.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:15:13.315 [DEBUG] [Thread-120540] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:15:14.936 [DEBUG] [Thread-120542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:29.982 [DEBUG] [Thread-120543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:43.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:15:43.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:15:43.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:15:43.976 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:43.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 15, 27), 23.58, 20.58, 0.0, 26.36, 21.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:15:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:15:27
2025-12-03T17:15:44.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:15:44.263 [DEBUG] [Thread-120545] [transport.py] [_log()] starting thread (client mode): 0xa517d810
2025-12-03T17:15:44.264 [DEBUG] [Thread-120545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:15:44.278 [DEBUG] [Thread-120545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:15:44.278 [INFO] [Thread-120545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:15:44.280 [DEBUG] [Thread-120545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] client lang: <none>
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] server lang: <none>
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] kex follows: False
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] Compression: none
2025-12-03T17:15:44.281 [DEBUG] [Thread-120545] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:15:44.289 [DEBUG] [Thread-120545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:15:44.289 [DEBUG] [Thread-120545] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:15:44.290 [DEBUG] [Thread-120545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:15:44.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:15:44.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:15:44.291 [DEBUG] [Thread-120545] [transport.py] [_log()] userauth is OK
2025-12-03T17:15:44.291 [DEBUG] [Thread-120545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:15:44.291 [DEBUG] [Thread-120545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:15:44.291 [DEBUG] [Thread-120545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:15:44.291 [DEBUG] [Thread-120545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:15:44.321 [INFO] [Thread-120545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:15:44.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:15:44.927 [DEBUG] [Thread-120545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:15:44.927 [DEBUG] [Thread-120545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:15:44.928 [DEBUG] [Thread-120545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:15:44.969 [DEBUG] [Thread-120545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:15:44.969 [DEBUG] [Thread-120545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:15:44.972 [DEBUG] [Thread-120545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:15:44.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:15:44.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:15:44.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:15:44.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:15:44.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:15:44.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:15:44.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:15:44.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:15:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:15:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.635465 -999.00  +21.40  16.48     26   +1.30 1 1 1 1 1   887    0 19.03 -26.04 ----- 16.5 16.5 163.6 30.0 26.0 -30.4 26.1 -29.6 27.8 -28.1 28.1 -29.9
2025-12-03T17:15:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:15:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:15:44.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.635465
2025-12-03T17:15:44.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:15:44.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:15:44.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:15:44.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:15:44.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:15:44.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:15:27', tmtdew=23.58, humidity=20.58, cloud=0.0, wind=26.36, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:15:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:15:44.998 [DEBUG] [Thread-120545] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:15:45.012 [DEBUG] [Thread-120548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:15:45.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:15:45.101 [DEBUG] [Thread-120549] [transport.py] [_log()] starting thread (client mode): 0xa517dde0
2025-12-03T17:15:45.101 [DEBUG] [Thread-120549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:15:45.116 [DEBUG] [Thread-120549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:15:45.116 [INFO] [Thread-120549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:15:45.123 [DEBUG] [Thread-120549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] client lang: <none>
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] server lang: <none>
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] kex follows: False
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:15:45.124 [DEBUG] [Thread-120549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:15:45.125 [DEBUG] [Thread-120549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:15:45.125 [DEBUG] [Thread-120549] [transport.py] [_log()] Compression: none
2025-12-03T17:15:45.125 [DEBUG] [Thread-120549] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:15:45.181 [DEBUG] [Thread-120549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:15:45.182 [DEBUG] [Thread-120549] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:15:45.182 [DEBUG] [Thread-120549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:15:45.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:15:45.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:15:45.238 [DEBUG] [Thread-120549] [transport.py] [_log()] userauth is OK
2025-12-03T17:15:45.238 [DEBUG] [Thread-120549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:15:45.238 [DEBUG] [Thread-120549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:15:45.238 [DEBUG] [Thread-120549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:15:45.238 [DEBUG] [Thread-120549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:15:45.252 [INFO] [Thread-120549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:15:45.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:15:45.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:15:46.096 [DEBUG] [Thread-120549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:15:46.096 [DEBUG] [Thread-120549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:15:46.144 [DEBUG] [Thread-120549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:15:46.144 [DEBUG] [Thread-120549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:15:46.152 [DEBUG] [Thread-120549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:15:46.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:15:46.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:15:46.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:15:46.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:15:46.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:15:46.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:15:46.184 [DEBUG] [Thread-120549] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:15:57.564 [DEBUG] [Thread-120551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:00.050 [DEBUG] [Thread-120552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:02.792 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:15.080 [DEBUG] [Thread-120553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:16:16.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:16:16.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:16:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 15, 59), 23.6, 20.42, 0.0, 25.21, 21.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:16:16.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:15:59
2025-12-03T17:16:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:16:17.200 [DEBUG] [Thread-120554] [transport.py] [_log()] starting thread (client mode): 0xa2778e80
2025-12-03T17:16:17.200 [DEBUG] [Thread-120554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:16:17.225 [DEBUG] [Thread-120554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:16:17.225 [INFO] [Thread-120554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] client lang: <none>
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] server lang: <none>
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] kex follows: False
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] Compression: none
2025-12-03T17:16:17.229 [DEBUG] [Thread-120554] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:16:17.247 [DEBUG] [Thread-120554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:16:17.248 [DEBUG] [Thread-120554] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:16:17.248 [DEBUG] [Thread-120554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:16:17.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:16:17.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:16:17.250 [DEBUG] [Thread-120554] [transport.py] [_log()] userauth is OK
2025-12-03T17:16:17.250 [DEBUG] [Thread-120554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:16:17.250 [DEBUG] [Thread-120554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:16:17.250 [DEBUG] [Thread-120554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:16:17.251 [DEBUG] [Thread-120554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:16:17.286 [INFO] [Thread-120554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:16:17.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:16:17.871 [DEBUG] [Thread-120554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:16:17.871 [DEBUG] [Thread-120554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:16:17.872 [DEBUG] [Thread-120554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:16:17.912 [DEBUG] [Thread-120554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:16:17.912 [DEBUG] [Thread-120554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:16:17.915 [DEBUG] [Thread-120554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:16:17.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:16:17.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:16:17.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:16:17.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:16:17.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:16:17.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:16:17.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:16:17.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:16:17.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:16:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.635812 -999.00  +21.40  20.12     26   +1.30 1 1 1 1 1   887    0 19.81 -26.25 ----- 20.1 20.1 169.2 23.0 26.0 -30.2 26.1 -28.9 27.7 -27.6 28.1 -29.8
2025-12-03T17:16:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:16:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:16:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.635812
2025-12-03T17:16:17.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:16:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:16:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:16:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:16:17.939 [DEBUG] [Thread-120554] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:16:17.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:16:17.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:15:59', tmtdew=23.6, humidity=20.42, cloud=0.0, wind=25.21, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:15:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:16:18.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:16:18.037 [DEBUG] [Thread-120557] [transport.py] [_log()] starting thread (client mode): 0xa2752ef0
2025-12-03T17:16:18.037 [DEBUG] [Thread-120557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:16:18.052 [DEBUG] [Thread-120557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:16:18.052 [INFO] [Thread-120557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:16:18.060 [DEBUG] [Thread-120557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:16:18.060 [DEBUG] [Thread-120557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] client lang: <none>
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] server lang: <none>
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] kex follows: False
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] Compression: none
2025-12-03T17:16:18.061 [DEBUG] [Thread-120557] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:16:18.117 [DEBUG] [Thread-120557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:16:18.118 [DEBUG] [Thread-120557] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:16:18.118 [DEBUG] [Thread-120557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:16:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:16:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:16:18.174 [DEBUG] [Thread-120557] [transport.py] [_log()] userauth is OK
2025-12-03T17:16:18.175 [DEBUG] [Thread-120557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:16:18.175 [DEBUG] [Thread-120557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:16:18.175 [DEBUG] [Thread-120557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:16:18.175 [DEBUG] [Thread-120557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:16:18.195 [INFO] [Thread-120557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:16:18.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:16:18.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:16:19.031 [DEBUG] [Thread-120557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:16:19.031 [DEBUG] [Thread-120557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:16:19.079 [DEBUG] [Thread-120557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:16:19.079 [DEBUG] [Thread-120557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:16:19.088 [DEBUG] [Thread-120557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:16:19.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:16:19.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:16:19.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:16:19.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:16:19.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:16:19.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:16:19.122 [DEBUG] [Thread-120557] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:16:30.111 [DEBUG] [Thread-120559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:43.352 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:44.117 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:44.118 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:45.167 [DEBUG] [Thread-120560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:16:49.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:16:49.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:16:49.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:16:49.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 16, 31), 23.63, 20.37, 0.0, 24.67, 21.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:16:49.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:16:31
2025-12-03T17:16:49.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:16:50.120 [DEBUG] [Thread-120561] [transport.py] [_log()] starting thread (client mode): 0xa514a950
2025-12-03T17:16:50.120 [DEBUG] [Thread-120561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:16:50.140 [DEBUG] [Thread-120561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:16:50.140 [INFO] [Thread-120561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:16:50.143 [DEBUG] [Thread-120561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:16:50.143 [DEBUG] [Thread-120561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:16:50.143 [DEBUG] [Thread-120561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] client lang: <none>
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] server lang: <none>
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] kex follows: False
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] Compression: none
2025-12-03T17:16:50.144 [DEBUG] [Thread-120561] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:16:50.161 [DEBUG] [Thread-120561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:16:50.161 [DEBUG] [Thread-120561] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:16:50.161 [DEBUG] [Thread-120561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:16:50.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:16:50.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:16:50.162 [DEBUG] [Thread-120561] [transport.py] [_log()] userauth is OK
2025-12-03T17:16:50.162 [DEBUG] [Thread-120561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:16:50.162 [DEBUG] [Thread-120561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:16:50.162 [DEBUG] [Thread-120561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:16:50.162 [DEBUG] [Thread-120561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:16:50.180 [INFO] [Thread-120561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:16:50.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:16:50.930 [DEBUG] [Thread-120561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:16:50.930 [DEBUG] [Thread-120561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:16:50.930 [DEBUG] [Thread-120561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:16:50.971 [DEBUG] [Thread-120561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:16:50.971 [DEBUG] [Thread-120561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:16:50.974 [DEBUG] [Thread-120561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:16:50.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:16:50.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:16:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:16:50.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:16:50.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:16:50.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:16:50.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:16:50.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:16:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:16:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.636159 -999.00  +21.40  14.75     26   +1.30 1 1 1 1 1   887    0 19.83 -26.73 ----- 14.8 14.8 166.4 19.9 26.0 -29.9 26.0 -30.1 27.6 -28.5 28.0 -31.0
2025-12-03T17:16:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.636159
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:16:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:16:31', tmtdew=23.63, humidity=20.37, cloud=0.0, wind=24.67, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:16:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:16:50.992 [DEBUG] [Thread-120561] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:16:51.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:16:51.078 [DEBUG] [Thread-120564] [transport.py] [_log()] starting thread (client mode): 0xa272b520
2025-12-03T17:16:51.079 [DEBUG] [Thread-120564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:16:51.093 [DEBUG] [Thread-120564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:16:51.094 [INFO] [Thread-120564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] client lang: <none>
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] server lang: <none>
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] kex follows: False
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:16:51.101 [DEBUG] [Thread-120564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:16:51.102 [DEBUG] [Thread-120564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:16:51.102 [DEBUG] [Thread-120564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:16:51.102 [DEBUG] [Thread-120564] [transport.py] [_log()] Compression: none
2025-12-03T17:16:51.102 [DEBUG] [Thread-120564] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:16:51.157 [DEBUG] [Thread-120564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:16:51.157 [DEBUG] [Thread-120564] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:16:51.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:16:51.157 [DEBUG] [Thread-120564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:16:51.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:16:51.214 [DEBUG] [Thread-120564] [transport.py] [_log()] userauth is OK
2025-12-03T17:16:51.214 [DEBUG] [Thread-120564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:16:51.214 [DEBUG] [Thread-120564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:16:51.214 [DEBUG] [Thread-120564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:16:51.214 [DEBUG] [Thread-120564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:16:51.231 [INFO] [Thread-120564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:16:51.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:16:51.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:16:52.077 [DEBUG] [Thread-120564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:16:52.077 [DEBUG] [Thread-120564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:16:52.124 [DEBUG] [Thread-120564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:16:52.124 [DEBUG] [Thread-120564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:16:52.133 [DEBUG] [Thread-120564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:16:52.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:16:52.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:16:52.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:16:52.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:16:52.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:16:52.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:16:52.164 [DEBUG] [Thread-120564] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:16:57.610 [DEBUG] [Thread-120566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:00.195 [DEBUG] [Thread-120567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:15.237 [DEBUG] [Thread-120568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:22.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:17:22.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:17:22.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:17:22.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 17, 3), 23.37, 20.66, 0.0, 22.36, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:17:22.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:17:03
2025-12-03T17:17:22.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:17:23.139 [DEBUG] [Thread-120569] [transport.py] [_log()] starting thread (client mode): 0xa514ae60
2025-12-03T17:17:23.139 [DEBUG] [Thread-120569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:17:23.158 [DEBUG] [Thread-120569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:17:23.158 [INFO] [Thread-120569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] client lang: <none>
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] server lang: <none>
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] kex follows: False
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] Compression: none
2025-12-03T17:17:23.161 [DEBUG] [Thread-120569] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:17:23.177 [DEBUG] [Thread-120569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:17:23.178 [DEBUG] [Thread-120569] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:17:23.178 [DEBUG] [Thread-120569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:17:23.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:17:23.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:17:23.180 [DEBUG] [Thread-120569] [transport.py] [_log()] userauth is OK
2025-12-03T17:17:23.180 [DEBUG] [Thread-120569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:17:23.180 [DEBUG] [Thread-120569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:17:23.180 [DEBUG] [Thread-120569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:17:23.181 [DEBUG] [Thread-120569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:17:23.195 [INFO] [Thread-120569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:17:23.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:17:23.796 [DEBUG] [Thread-120569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:17:23.796 [DEBUG] [Thread-120569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:17:23.796 [DEBUG] [Thread-120569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:17:23.837 [DEBUG] [Thread-120569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:17:23.837 [DEBUG] [Thread-120569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:17:23.840 [DEBUG] [Thread-120569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:17:23.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:17:23.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:17:23.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:17:23.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:17:23.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:17:23.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:17:23.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.636506 -999.00  +21.30  19.68     26   +1.40 1 1 1 1 1   887    0 20.13 -27.14 ----- 19.7 19.7 180.4 22.7 26.0 -30.0 25.9 -29.5 27.8 -27.5 28.1 -29.2
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.636506
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:17:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:17:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:17:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:17:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:17:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:17:03', tmtdew=23.37, humidity=20.66, cloud=0.0, wind=22.36, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:16:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:17:23.858 [DEBUG] [Thread-120569] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:17:23.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:17:23.941 [DEBUG] [Thread-120572] [transport.py] [_log()] starting thread (client mode): 0xa517d510
2025-12-03T17:17:23.941 [DEBUG] [Thread-120572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:17:23.959 [DEBUG] [Thread-120572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:17:23.959 [INFO] [Thread-120572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:17:23.967 [DEBUG] [Thread-120572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] client lang: <none>
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] server lang: <none>
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] kex follows: False
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] Compression: none
2025-12-03T17:17:23.968 [DEBUG] [Thread-120572] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:17:24.026 [DEBUG] [Thread-120572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:17:24.026 [DEBUG] [Thread-120572] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:17:24.027 [DEBUG] [Thread-120572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:17:24.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:17:24.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:17:24.092 [DEBUG] [Thread-120572] [transport.py] [_log()] userauth is OK
2025-12-03T17:17:24.092 [DEBUG] [Thread-120572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:17:24.092 [DEBUG] [Thread-120572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:17:24.092 [DEBUG] [Thread-120572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:17:24.092 [DEBUG] [Thread-120572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:17:24.117 [INFO] [Thread-120572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:17:24.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:17:24.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:17:24.989 [DEBUG] [Thread-120572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:17:24.989 [DEBUG] [Thread-120572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:17:25.038 [DEBUG] [Thread-120572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:17:25.038 [DEBUG] [Thread-120572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:17:25.047 [DEBUG] [Thread-120572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:17:25.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:17:25.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:17:25.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:17:25.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:17:25.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:17:25.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:17:25.082 [DEBUG] [Thread-120572] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:17:30.262 [DEBUG] [Thread-120574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:44.257 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:44.258 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:45.295 [DEBUG] [Thread-120575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:46.312 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:17:55.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:17:55.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:17:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 17, 35), 23.46, 20.8, 0.0, 21.44, 21.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:17:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:17:35
2025-12-03T17:17:55.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:17:56.016 [DEBUG] [Thread-120576] [transport.py] [_log()] starting thread (client mode): 0xa272a3e0
2025-12-03T17:17:56.016 [DEBUG] [Thread-120576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:17:56.037 [DEBUG] [Thread-120576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:17:56.037 [INFO] [Thread-120576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:17:56.040 [DEBUG] [Thread-120576] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:17:56.040 [DEBUG] [Thread-120576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] client lang: <none>
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] server lang: <none>
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] kex follows: False
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:17:56.041 [DEBUG] [Thread-120576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:17:56.042 [DEBUG] [Thread-120576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:17:56.042 [DEBUG] [Thread-120576] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:17:56.042 [DEBUG] [Thread-120576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:17:56.042 [DEBUG] [Thread-120576] [transport.py] [_log()] Compression: none
2025-12-03T17:17:56.042 [DEBUG] [Thread-120576] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:17:56.060 [DEBUG] [Thread-120576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:17:56.061 [DEBUG] [Thread-120576] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:17:56.061 [DEBUG] [Thread-120576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:17:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:17:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:17:56.063 [DEBUG] [Thread-120576] [transport.py] [_log()] userauth is OK
2025-12-03T17:17:56.064 [DEBUG] [Thread-120576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:17:56.064 [DEBUG] [Thread-120576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:17:56.064 [DEBUG] [Thread-120576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:17:56.064 [DEBUG] [Thread-120576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:17:56.088 [INFO] [Thread-120576] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:17:56.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:17:56.847 [DEBUG] [Thread-120576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:17:56.847 [DEBUG] [Thread-120576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:17:56.847 [DEBUG] [Thread-120576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:17:56.887 [DEBUG] [Thread-120576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:17:56.888 [DEBUG] [Thread-120576] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:17:56.890 [DEBUG] [Thread-120576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:17:56.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:17:56.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:17:56.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:17:56.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:17:56.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:17:56.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:17:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:17:56.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:17:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:17:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.636854 -999.00  +21.30  14.71     27   +1.50 1 1 1 1 1   887    0 19.70 -27.39 ----- 14.7 14.7 161.2 33.1 25.9 -30.3 26.0 -28.8 27.8 -27.4 28.1 -29.9
2025-12-03T17:17:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:17:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:17:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.636854
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:17:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:17:35', tmtdew=23.46, humidity=20.8, cloud=0.0, wind=21.44, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:17:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:17:56.909 [DEBUG] [Thread-120576] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:17:56.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:17:57.005 [DEBUG] [Thread-120579] [transport.py] [_log()] starting thread (client mode): 0xa51d3550
2025-12-03T17:17:57.005 [DEBUG] [Thread-120579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:17:57.020 [DEBUG] [Thread-120579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:17:57.021 [INFO] [Thread-120579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:17:57.028 [DEBUG] [Thread-120579] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:17:57.028 [DEBUG] [Thread-120579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:17:57.028 [DEBUG] [Thread-120579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:17:57.028 [DEBUG] [Thread-120579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] client lang: <none>
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] server lang: <none>
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] kex follows: False
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] Compression: none
2025-12-03T17:17:57.029 [DEBUG] [Thread-120579] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:17:57.086 [DEBUG] [Thread-120579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:17:57.087 [DEBUG] [Thread-120579] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:17:57.087 [DEBUG] [Thread-120579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:17:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:17:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:17:57.142 [DEBUG] [Thread-120579] [transport.py] [_log()] userauth is OK
2025-12-03T17:17:57.142 [DEBUG] [Thread-120579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:17:57.143 [DEBUG] [Thread-120579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:17:57.143 [DEBUG] [Thread-120579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:17:57.143 [DEBUG] [Thread-120579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:17:57.165 [INFO] [Thread-120579] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:17:57.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:17:57.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:17:57.657 [DEBUG] [Thread-120581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:17:57.986 [DEBUG] [Thread-120579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:17:57.986 [DEBUG] [Thread-120579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:17:58.034 [DEBUG] [Thread-120579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:17:58.034 [DEBUG] [Thread-120579] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:17:58.042 [DEBUG] [Thread-120579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:17:58.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:17:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:17:58.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:17:58.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:17:58.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:17:58.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:17:58.077 [DEBUG] [Thread-120579] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:18:00.322 [DEBUG] [Thread-120582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:10.889 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:15.363 [DEBUG] [Thread-120583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:28.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:18:28.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:18:28.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:18:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 18, 7), 23.22, 21.09, 0.0, 20.19, 21.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:18:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:18:07
2025-12-03T17:18:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:18:29.048 [DEBUG] [Thread-120584] [transport.py] [_log()] starting thread (client mode): 0xa517fbe0
2025-12-03T17:18:29.048 [DEBUG] [Thread-120584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:18:29.069 [DEBUG] [Thread-120584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:18:29.069 [INFO] [Thread-120584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] client lang: <none>
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] server lang: <none>
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] kex follows: False
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:18:29.073 [DEBUG] [Thread-120584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:18:29.074 [DEBUG] [Thread-120584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:18:29.074 [DEBUG] [Thread-120584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:18:29.074 [DEBUG] [Thread-120584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:18:29.074 [DEBUG] [Thread-120584] [transport.py] [_log()] Compression: none
2025-12-03T17:18:29.074 [DEBUG] [Thread-120584] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:18:29.091 [DEBUG] [Thread-120584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:18:29.091 [DEBUG] [Thread-120584] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:18:29.092 [DEBUG] [Thread-120584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:18:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:18:29.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:18:29.094 [DEBUG] [Thread-120584] [transport.py] [_log()] userauth is OK
2025-12-03T17:18:29.094 [DEBUG] [Thread-120584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:18:29.094 [DEBUG] [Thread-120584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:18:29.094 [DEBUG] [Thread-120584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:18:29.094 [DEBUG] [Thread-120584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:18:29.130 [INFO] [Thread-120584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:18:29.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:18:29.784 [DEBUG] [Thread-120584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:18:29.784 [DEBUG] [Thread-120584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:18:29.785 [DEBUG] [Thread-120584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:18:29.826 [DEBUG] [Thread-120584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:18:29.826 [DEBUG] [Thread-120584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:18:29.829 [DEBUG] [Thread-120584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:18:29.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:18:29.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:18:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:18:29.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:18:29.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:18:29.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:18:29.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:18:29.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:18:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:18:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.637201 -999.00  +21.20  23.35     27   +1.60 1 1 1 1 1   887    0 19.35 -28.05 ----- 23.4 23.4 172.4 28.0 25.8 -30.6 25.9 -31.8 27.6 -27.4 27.9 -29.9
2025-12-03T17:18:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:18:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:18:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.637201
2025-12-03T17:18:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:18:29.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:18:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:18:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:18:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:18:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:18:07', tmtdew=23.22, humidity=21.09, cloud=0.0, wind=20.19, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:17:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:18:29.854 [DEBUG] [Thread-120584] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:18:29.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:18:29.950 [DEBUG] [Thread-120587] [transport.py] [_log()] starting thread (client mode): 0xa51d1cc0
2025-12-03T17:18:29.951 [DEBUG] [Thread-120587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:18:29.969 [DEBUG] [Thread-120587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:18:29.970 [INFO] [Thread-120587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:18:29.977 [DEBUG] [Thread-120587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] client lang: <none>
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] server lang: <none>
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] kex follows: False
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] Compression: none
2025-12-03T17:18:29.978 [DEBUG] [Thread-120587] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:18:30.035 [DEBUG] [Thread-120587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:18:30.035 [DEBUG] [Thread-120587] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:18:30.036 [DEBUG] [Thread-120587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:18:30.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:18:30.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:18:30.093 [DEBUG] [Thread-120587] [transport.py] [_log()] userauth is OK
2025-12-03T17:18:30.093 [DEBUG] [Thread-120587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:18:30.093 [DEBUG] [Thread-120587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:18:30.093 [DEBUG] [Thread-120587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:18:30.093 [DEBUG] [Thread-120587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:18:30.111 [INFO] [Thread-120587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:18:30.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:18:30.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:18:30.393 [DEBUG] [Thread-120589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:30.965 [DEBUG] [Thread-120587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:18:30.965 [DEBUG] [Thread-120587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:18:31.013 [DEBUG] [Thread-120587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:18:31.013 [DEBUG] [Thread-120587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:18:31.022 [DEBUG] [Thread-120587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:18:31.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:18:31.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:18:31.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:18:31.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:18:31.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:18:31.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:18:31.056 [DEBUG] [Thread-120587] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:18:33.372 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:44.413 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:44.414 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:45.440 [DEBUG] [Thread-120590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:55.829 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:18:57.704 [DEBUG] [Thread-120591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:00.469 [DEBUG] [Thread-120592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:01.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:19:01.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:19:01.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:19:01.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 18, 40), 23.1, 21.08, 0.0, 26.38, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:19:01.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:18:40
2025-12-03T17:19:01.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:19:02.005 [DEBUG] [Thread-120593] [transport.py] [_log()] starting thread (client mode): 0xa51d3250
2025-12-03T17:19:02.005 [DEBUG] [Thread-120593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:19:02.024 [DEBUG] [Thread-120593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:19:02.024 [INFO] [Thread-120593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] client lang: <none>
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] server lang: <none>
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] kex follows: False
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] Compression: none
2025-12-03T17:19:02.028 [DEBUG] [Thread-120593] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:19:02.043 [DEBUG] [Thread-120593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:19:02.043 [DEBUG] [Thread-120593] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:19:02.043 [DEBUG] [Thread-120593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:19:02.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:19:02.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:19:02.044 [DEBUG] [Thread-120593] [transport.py] [_log()] userauth is OK
2025-12-03T17:19:02.044 [DEBUG] [Thread-120593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:19:02.044 [DEBUG] [Thread-120593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:19:02.044 [DEBUG] [Thread-120593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:19:02.044 [DEBUG] [Thread-120593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:19:02.054 [INFO] [Thread-120593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:19:02.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:19:02.789 [DEBUG] [Thread-120593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:19:02.789 [DEBUG] [Thread-120593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:19:02.790 [DEBUG] [Thread-120593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:19:02.830 [DEBUG] [Thread-120593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:19:02.830 [DEBUG] [Thread-120593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:19:02.833 [DEBUG] [Thread-120593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:19:02.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:19:02.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:19:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:19:02.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:19:02.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:19:02.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:19:02.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:19:02.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:19:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:19:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.637895 -999.00  +21.10  19.94     27   +1.60 1 1 1 1 1   887    0 19.20 -31.74 ----- 19.9 19.9 175.2 27.8 25.8 -30.6 25.6 -30.7 27.5 -28.0 27.8 -30.5
2025-12-03T17:19:02.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:19:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:19:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.637895
2025-12-03T17:19:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:19:02.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:19:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:19:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:19:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:19:02.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:18:40', tmtdew=23.1, humidity=21.08, cloud=0.0, wind=26.38, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:18:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:19:02.858 [DEBUG] [Thread-120593] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:19:02.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:19:02.954 [DEBUG] [Thread-120596] [transport.py] [_log()] starting thread (client mode): 0xa51d33a0
2025-12-03T17:19:02.954 [DEBUG] [Thread-120596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:19:02.969 [DEBUG] [Thread-120596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:19:02.969 [INFO] [Thread-120596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] client lang: <none>
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] server lang: <none>
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] kex follows: False
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:19:02.977 [DEBUG] [Thread-120596] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:19:02.978 [DEBUG] [Thread-120596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:19:02.978 [DEBUG] [Thread-120596] [transport.py] [_log()] Compression: none
2025-12-03T17:19:02.978 [DEBUG] [Thread-120596] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:19:03.043 [DEBUG] [Thread-120596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:19:03.043 [DEBUG] [Thread-120596] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:19:03.044 [DEBUG] [Thread-120596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:19:03.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:19:03.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:19:03.099 [DEBUG] [Thread-120596] [transport.py] [_log()] userauth is OK
2025-12-03T17:19:03.099 [DEBUG] [Thread-120596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:19:03.099 [DEBUG] [Thread-120596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:19:03.099 [DEBUG] [Thread-120596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:19:03.099 [DEBUG] [Thread-120596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:19:03.118 [INFO] [Thread-120596] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:19:03.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:19:03.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:19:03.996 [DEBUG] [Thread-120596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:19:03.996 [DEBUG] [Thread-120596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:19:04.044 [DEBUG] [Thread-120596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:19:04.044 [DEBUG] [Thread-120596] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:19:04.053 [DEBUG] [Thread-120596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:19:04.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:19:04.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:19:04.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:19:04.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:19:04.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:19:04.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:19:04.087 [DEBUG] [Thread-120596] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:19:15.500 [DEBUG] [Thread-120598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:18.565 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:30.540 [DEBUG] [Thread-120599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:19:34.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:19:34.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:19:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 19, 12), 23.17, 20.98, 0.0, 22.85, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:19:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:19:12
2025-12-03T17:19:34.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:19:35.042 [DEBUG] [Thread-120600] [transport.py] [_log()] starting thread (client mode): 0xa517c070
2025-12-03T17:19:35.042 [DEBUG] [Thread-120600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:19:35.062 [DEBUG] [Thread-120600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:19:35.062 [INFO] [Thread-120600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] client lang: <none>
2025-12-03T17:19:35.065 [DEBUG] [Thread-120600] [transport.py] [_log()] server lang: <none>
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] kex follows: False
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] Compression: none
2025-12-03T17:19:35.066 [DEBUG] [Thread-120600] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:19:35.083 [DEBUG] [Thread-120600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:19:35.083 [DEBUG] [Thread-120600] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:19:35.084 [DEBUG] [Thread-120600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:19:35.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:19:35.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:19:35.086 [DEBUG] [Thread-120600] [transport.py] [_log()] userauth is OK
2025-12-03T17:19:35.086 [DEBUG] [Thread-120600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:19:35.086 [DEBUG] [Thread-120600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:19:35.086 [DEBUG] [Thread-120600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:19:35.087 [DEBUG] [Thread-120600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:19:35.108 [INFO] [Thread-120600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:19:35.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:19:35.763 [DEBUG] [Thread-120600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:19:35.764 [DEBUG] [Thread-120600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:19:35.764 [DEBUG] [Thread-120600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:19:35.805 [DEBUG] [Thread-120600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:19:35.805 [DEBUG] [Thread-120600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:19:35.808 [DEBUG] [Thread-120600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:19:35.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:19:35.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:19:35.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:19:35.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:19:35.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:19:35.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:19:35.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:19:35.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.638242 -999.00  +21.10  15.29     27   +1.70 1 1 1 1 1   887    0 18.88 -36.76 ----- 15.3 15.3 163.8 30.6 25.8 -29.4 25.6 -30.6 27.4 -28.3 27.8 -30.2
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.638242
2025-12-03T17:19:35.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:19:35.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:19:35.830 [DEBUG] [Thread-120600] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:19:35.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:19:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:19:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:19:35.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:19:12', tmtdew=23.17, humidity=20.98, cloud=0.0, wind=22.85, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:19:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:19:35.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:19:35.930 [DEBUG] [Thread-120603] [transport.py] [_log()] starting thread (client mode): 0xa517d6c0
2025-12-03T17:19:35.930 [DEBUG] [Thread-120603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:19:35.945 [DEBUG] [Thread-120603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:19:35.945 [INFO] [Thread-120603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] client lang: <none>
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] server lang: <none>
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] kex follows: False
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:19:35.953 [DEBUG] [Thread-120603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:19:35.954 [DEBUG] [Thread-120603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:19:35.954 [DEBUG] [Thread-120603] [transport.py] [_log()] Compression: none
2025-12-03T17:19:35.954 [DEBUG] [Thread-120603] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:19:36.010 [DEBUG] [Thread-120603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:19:36.011 [DEBUG] [Thread-120603] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:19:36.011 [DEBUG] [Thread-120603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:19:36.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:19:36.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:19:36.067 [DEBUG] [Thread-120603] [transport.py] [_log()] userauth is OK
2025-12-03T17:19:36.067 [DEBUG] [Thread-120603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:19:36.067 [DEBUG] [Thread-120603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:19:36.067 [DEBUG] [Thread-120603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:19:36.067 [DEBUG] [Thread-120603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:19:36.086 [INFO] [Thread-120603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:19:36.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:19:36.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:19:36.892 [DEBUG] [Thread-120603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:19:36.892 [DEBUG] [Thread-120603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:19:36.941 [DEBUG] [Thread-120603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:19:36.941 [DEBUG] [Thread-120603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:19:36.949 [DEBUG] [Thread-120603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:19:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:19:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:19:36.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:19:36.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:19:36.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:19:36.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:19:36.982 [DEBUG] [Thread-120603] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:19:41.069 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:44.554 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:44.555 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:45.566 [DEBUG] [Thread-120605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:19:57.750 [DEBUG] [Thread-120606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:00.611 [DEBUG] [Thread-120607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:03.537 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:20:07.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:20:07.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:20:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 19, 44), 23.04, 21.33, 0.0, 26.7, 21.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:20:07.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:19:44
2025-12-03T17:20:07.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:20:07.957 [DEBUG] [Thread-120608] [transport.py] [_log()] starting thread (client mode): 0xa517df30
2025-12-03T17:20:07.957 [DEBUG] [Thread-120608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:20:07.977 [DEBUG] [Thread-120608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:20:07.977 [INFO] [Thread-120608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:20:07.980 [DEBUG] [Thread-120608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] client lang: <none>
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] server lang: <none>
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] kex follows: False
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] Compression: none
2025-12-03T17:20:07.981 [DEBUG] [Thread-120608] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:20:07.998 [DEBUG] [Thread-120608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:20:07.999 [DEBUG] [Thread-120608] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:20:07.999 [DEBUG] [Thread-120608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:20:07.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:20:08.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:20:08.001 [DEBUG] [Thread-120608] [transport.py] [_log()] userauth is OK
2025-12-03T17:20:08.001 [DEBUG] [Thread-120608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:20:08.001 [DEBUG] [Thread-120608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:20:08.001 [DEBUG] [Thread-120608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:20:08.001 [DEBUG] [Thread-120608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:20:08.022 [INFO] [Thread-120608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:20:08.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:20:09.049 [DEBUG] [Thread-120608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:20:09.049 [DEBUG] [Thread-120608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:20:09.049 [DEBUG] [Thread-120608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:20:09.090 [DEBUG] [Thread-120608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:20:09.090 [DEBUG] [Thread-120608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:20:09.093 [DEBUG] [Thread-120608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:20:09.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:20:09.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:20:09.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:20:09.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:20:09.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:20:09.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:20:09.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:20:09.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.638590 -999.00  +21.20  16.11     27   +1.50 1 1 1 1 1   887    0 18.70 -39.77 ----- 16.1 16.1 160.4 23.6 25.7 -30.1 25.8 -28.9 27.5 -27.3 27.8 -29.1
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.638590
2025-12-03T17:20:09.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:20:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:20:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:20:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:20:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:20:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:19:44', tmtdew=23.04, humidity=21.33, cloud=0.0, wind=26.7, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:19:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:20:09.117 [DEBUG] [Thread-120608] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:20:09.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:20:09.210 [DEBUG] [Thread-120611] [transport.py] [_log()] starting thread (client mode): 0xa517dff0
2025-12-03T17:20:09.210 [DEBUG] [Thread-120611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:20:09.225 [DEBUG] [Thread-120611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:20:09.225 [INFO] [Thread-120611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:09.232 [DEBUG] [Thread-120611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] client lang: <none>
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] server lang: <none>
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] kex follows: False
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] Compression: none
2025-12-03T17:20:09.233 [DEBUG] [Thread-120611] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:20:09.290 [DEBUG] [Thread-120611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:20:09.291 [DEBUG] [Thread-120611] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:20:09.291 [DEBUG] [Thread-120611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:20:09.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:20:09.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:20:09.346 [DEBUG] [Thread-120611] [transport.py] [_log()] userauth is OK
2025-12-03T17:20:09.347 [DEBUG] [Thread-120611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:20:09.347 [DEBUG] [Thread-120611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:20:09.347 [DEBUG] [Thread-120611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:20:09.347 [DEBUG] [Thread-120611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:20:09.368 [INFO] [Thread-120611] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:20:09.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:20:09.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:20:10.192 [DEBUG] [Thread-120611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:20:10.192 [DEBUG] [Thread-120611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:20:10.240 [DEBUG] [Thread-120611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:20:10.240 [DEBUG] [Thread-120611] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:20:10.249 [DEBUG] [Thread-120611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:20:10.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:20:10.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:20:10.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:20:10.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:20:10.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:20:10.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:20:10.283 [DEBUG] [Thread-120611] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:20:15.641 [DEBUG] [Thread-120613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:26.075 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:30.684 [DEBUG] [Thread-120614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:20:40.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:20:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:20:41.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 20, 16), 23.14, 21.21, 0.0, 24.07, 21.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:20:41.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:20:16
2025-12-03T17:20:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:20:41.315 [DEBUG] [Thread-120615] [transport.py] [_log()] starting thread (client mode): 0xa517e890
2025-12-03T17:20:41.315 [DEBUG] [Thread-120615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:20:41.335 [DEBUG] [Thread-120615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:20:41.335 [INFO] [Thread-120615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] client lang: <none>
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] server lang: <none>
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] kex follows: False
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] Compression: none
2025-12-03T17:20:41.338 [DEBUG] [Thread-120615] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:20:41.351 [DEBUG] [Thread-120615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:20:41.351 [DEBUG] [Thread-120615] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:20:41.352 [DEBUG] [Thread-120615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:20:41.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:20:41.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:20:41.352 [DEBUG] [Thread-120615] [transport.py] [_log()] userauth is OK
2025-12-03T17:20:41.352 [DEBUG] [Thread-120615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:20:41.353 [DEBUG] [Thread-120615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:20:41.353 [DEBUG] [Thread-120615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:20:41.353 [DEBUG] [Thread-120615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:20:41.370 [INFO] [Thread-120615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:20:41.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:20:42.007 [DEBUG] [Thread-120615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:20:42.007 [DEBUG] [Thread-120615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:20:42.007 [DEBUG] [Thread-120615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:20:42.048 [DEBUG] [Thread-120615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:20:42.048 [DEBUG] [Thread-120615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:20:42.050 [DEBUG] [Thread-120615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:20:42.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:20:42.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:20:42.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:20:42.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:20:42.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:20:42.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:20:42.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.638936 -999.00  +21.10  24.85     27   +1.40 1 1 1 1 1   887    0 19.52 -46.81 ----- 24.9 24.9 169.0 27.5 25.6 -29.8 25.7 -30.5 27.4 -28.1 27.7 -30.0
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.638936
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:20:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:20:16', tmtdew=23.14, humidity=21.21, cloud=0.0, wind=24.07, temperature=21.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:20:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:20:42.069 [DEBUG] [Thread-120615] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:20:42.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:20:42.155 [DEBUG] [Thread-120618] [transport.py] [_log()] starting thread (client mode): 0xa51d0ee0
2025-12-03T17:20:42.155 [DEBUG] [Thread-120618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:20:42.170 [DEBUG] [Thread-120618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:20:42.170 [INFO] [Thread-120618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:20:42.177 [DEBUG] [Thread-120618] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:20:42.177 [DEBUG] [Thread-120618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:20:42.177 [DEBUG] [Thread-120618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] client lang: <none>
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] server lang: <none>
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] kex follows: False
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] Compression: none
2025-12-03T17:20:42.178 [DEBUG] [Thread-120618] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:20:42.233 [DEBUG] [Thread-120618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:20:42.233 [DEBUG] [Thread-120618] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:20:42.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:20:42.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:20:42.234 [DEBUG] [Thread-120618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:20:42.291 [DEBUG] [Thread-120618] [transport.py] [_log()] userauth is OK
2025-12-03T17:20:42.291 [DEBUG] [Thread-120618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:20:42.291 [DEBUG] [Thread-120618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:20:42.291 [DEBUG] [Thread-120618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:20:42.291 [DEBUG] [Thread-120618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:20:42.308 [INFO] [Thread-120618] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:20:42.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:20:42.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:20:43.148 [DEBUG] [Thread-120618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:20:43.157 [DEBUG] [Thread-120618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:20:43.196 [DEBUG] [Thread-120618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:20:43.196 [DEBUG] [Thread-120618] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:20:43.204 [DEBUG] [Thread-120618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:20:43.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:20:43.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:20:43.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:20:43.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:20:43.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:20:43.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:20:43.235 [DEBUG] [Thread-120618] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:20:44.693 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:44.695 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:45.710 [DEBUG] [Thread-120620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:48.553 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:20:57.783 [DEBUG] [Thread-120621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:00.767 [DEBUG] [Thread-120622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:11.056 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:21:13.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:21:13.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:21:13.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 20, 48), 23.29, 21.21, 0.0, 23.7, 21.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:21:13.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:20:48
2025-12-03T17:21:14.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:21:14.224 [DEBUG] [Thread-120623] [transport.py] [_log()] starting thread (client mode): 0xa517c190
2025-12-03T17:21:14.224 [DEBUG] [Thread-120623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:21:14.239 [DEBUG] [Thread-120623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:21:14.239 [INFO] [Thread-120623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] client lang: <none>
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] server lang: <none>
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] kex follows: False
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] Compression: none
2025-12-03T17:21:14.242 [DEBUG] [Thread-120623] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:21:14.261 [DEBUG] [Thread-120623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:21:14.261 [DEBUG] [Thread-120623] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:21:14.261 [DEBUG] [Thread-120623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:21:14.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:21:14.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:21:14.263 [DEBUG] [Thread-120623] [transport.py] [_log()] userauth is OK
2025-12-03T17:21:14.263 [DEBUG] [Thread-120623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:21:14.263 [DEBUG] [Thread-120623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:21:14.263 [DEBUG] [Thread-120623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:21:14.264 [DEBUG] [Thread-120623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:21:14.277 [INFO] [Thread-120623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:21:14.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:21:15.015 [DEBUG] [Thread-120623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:21:15.015 [DEBUG] [Thread-120623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:21:15.016 [DEBUG] [Thread-120623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:21:15.058 [DEBUG] [Thread-120623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:21:15.058 [DEBUG] [Thread-120623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:21:15.061 [DEBUG] [Thread-120623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:21:15.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:21:15.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:21:15.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:21:15.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:21:15.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:21:15.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:21:15.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.639284 -999.00  +21.10  17.78     27   +1.40 1 1 1 1 1   887    0 19.29 -44.44 ----- 17.8 17.8 144.7 22.8 25.6 -29.8 25.7 -29.1 27.3 -28.3 27.7 -29.0
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:21:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.639284
2025-12-03T17:21:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:21:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:21:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:21:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:21:15.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:21:15.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:20:48', tmtdew=23.29, humidity=21.21, cloud=0.0, wind=23.7, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:20:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:21:15.087 [DEBUG] [Thread-120623] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:21:15.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:21:15.183 [DEBUG] [Thread-120626] [transport.py] [_log()] starting thread (client mode): 0xa277bb20
2025-12-03T17:21:15.183 [DEBUG] [Thread-120626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:21:15.198 [DEBUG] [Thread-120626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:21:15.198 [INFO] [Thread-120626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:15.206 [DEBUG] [Thread-120626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] client lang: <none>
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] server lang: <none>
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] kex follows: False
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] Compression: none
2025-12-03T17:21:15.207 [DEBUG] [Thread-120626] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:21:15.262 [DEBUG] [Thread-120626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:21:15.263 [DEBUG] [Thread-120626] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:21:15.263 [DEBUG] [Thread-120626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:21:15.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:21:15.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:21:15.319 [DEBUG] [Thread-120626] [transport.py] [_log()] userauth is OK
2025-12-03T17:21:15.319 [DEBUG] [Thread-120626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:21:15.319 [DEBUG] [Thread-120626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:21:15.319 [DEBUG] [Thread-120626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:21:15.319 [DEBUG] [Thread-120626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:21:15.337 [INFO] [Thread-120626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:21:15.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:21:15.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:21:15.795 [DEBUG] [Thread-120628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:16.184 [DEBUG] [Thread-120626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:21:16.185 [DEBUG] [Thread-120626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:21:16.233 [DEBUG] [Thread-120626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:21:16.233 [DEBUG] [Thread-120626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:21:16.242 [DEBUG] [Thread-120626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:21:16.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:21:16.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:21:16.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:21:16.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:21:16.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:21:16.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:21:16.275 [DEBUG] [Thread-120626] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:21:30.844 [DEBUG] [Thread-120629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:33.607 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:34.086 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:36.491 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:36.878 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:37.254 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:37.646 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:38.045 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:38.423 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:39.842 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:41.236 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:42.628 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:44.057 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:44.604 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:44.837 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:44.838 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:45.873 [DEBUG] [Thread-120630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:46.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:21:46.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:21:46.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:21:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 21, 20), 23.31, 21.16, 0.0, 23.43, 21.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:21:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:21:20
2025-12-03T17:21:47.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:21:47.256 [DEBUG] [Thread-120631] [transport.py] [_log()] starting thread (client mode): 0xa51d05b0
2025-12-03T17:21:47.256 [DEBUG] [Thread-120631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:21:47.276 [DEBUG] [Thread-120631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:21:47.276 [INFO] [Thread-120631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:21:47.279 [DEBUG] [Thread-120631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] client lang: <none>
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] server lang: <none>
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] kex follows: False
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] Compression: none
2025-12-03T17:21:47.280 [DEBUG] [Thread-120631] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:21:47.298 [DEBUG] [Thread-120631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:21:47.298 [DEBUG] [Thread-120631] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:21:47.299 [DEBUG] [Thread-120631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:21:47.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:21:47.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:21:47.342 [DEBUG] [Thread-120631] [transport.py] [_log()] userauth is OK
2025-12-03T17:21:47.342 [DEBUG] [Thread-120631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:21:47.342 [DEBUG] [Thread-120631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:21:47.342 [DEBUG] [Thread-120631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:21:47.342 [DEBUG] [Thread-120631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:21:47.374 [INFO] [Thread-120631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:21:47.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:21:48.036 [DEBUG] [Thread-120631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:21:48.036 [DEBUG] [Thread-120631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:21:48.036 [DEBUG] [Thread-120631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:21:48.077 [DEBUG] [Thread-120631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:21:48.077 [DEBUG] [Thread-120631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:21:48.080 [DEBUG] [Thread-120631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:21:48.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:21:48.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:21:48.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:21:48.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:21:48.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:21:48.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:21:48.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:21:48.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:21:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:21:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.639631 -999.00  +21.30  18.40     26   +1.50 1 1 1 1 1   887    0 18.98 -46.44 ----- 18.4 18.4 163.0 25.1 25.7 -29.3 25.7 -30.6 27.5 -27.0 27.7 -28.3
2025-12-03T17:21:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:21:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:21:48.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.639631
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:21:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:21:20', tmtdew=23.31, humidity=21.16, cloud=0.0, wind=23.43, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:21:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:21:48.106 [DEBUG] [Thread-120631] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:21:48.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:21:48.201 [DEBUG] [Thread-120634] [transport.py] [_log()] starting thread (client mode): 0xa51d3700
2025-12-03T17:21:48.201 [DEBUG] [Thread-120634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:21:48.219 [DEBUG] [Thread-120634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:21:48.219 [INFO] [Thread-120634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:48.226 [DEBUG] [Thread-120634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] client lang: <none>
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] server lang: <none>
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] kex follows: False
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:21:48.227 [DEBUG] [Thread-120634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:21:48.228 [DEBUG] [Thread-120634] [transport.py] [_log()] Compression: none
2025-12-03T17:21:48.228 [DEBUG] [Thread-120634] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:21:48.287 [DEBUG] [Thread-120634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:21:48.287 [DEBUG] [Thread-120634] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:21:48.287 [DEBUG] [Thread-120634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:21:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:21:48.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:21:48.343 [DEBUG] [Thread-120634] [transport.py] [_log()] userauth is OK
2025-12-03T17:21:48.343 [DEBUG] [Thread-120634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:21:48.343 [DEBUG] [Thread-120634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:21:48.343 [DEBUG] [Thread-120634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:21:48.343 [DEBUG] [Thread-120634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:21:48.362 [INFO] [Thread-120634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:21:48.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:21:48.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:21:49.213 [DEBUG] [Thread-120634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:21:49.214 [DEBUG] [Thread-120634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:21:49.262 [DEBUG] [Thread-120634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:21:49.262 [DEBUG] [Thread-120634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:21:49.271 [DEBUG] [Thread-120634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:21:49.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:21:49.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:21:49.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:21:49.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:21:49.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:21:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:21:49.310 [DEBUG] [Thread-120634] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:21:53.033 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:57.822 [DEBUG] [Thread-120636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:21:59.439 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:00.903 [DEBUG] [Thread-120637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:05.848 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:12.269 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:15.939 [DEBUG] [Thread-120638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:18.787 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:19.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:22:19.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:22:19.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:22:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 21, 52), 23.0, 21.08, 0.0, 26.45, 21.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:22:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:21:52
2025-12-03T17:22:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:22:20.280 [DEBUG] [Thread-120639] [transport.py] [_log()] starting thread (client mode): 0xa517e980
2025-12-03T17:22:20.280 [DEBUG] [Thread-120639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:22:20.302 [DEBUG] [Thread-120639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:22:20.302 [INFO] [Thread-120639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] client lang: <none>
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] server lang: <none>
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] kex follows: False
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:22:20.306 [DEBUG] [Thread-120639] [transport.py] [_log()] Compression: none
2025-12-03T17:22:20.307 [DEBUG] [Thread-120639] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:22:20.319 [DEBUG] [Thread-120639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:22:20.320 [DEBUG] [Thread-120639] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:22:20.320 [DEBUG] [Thread-120639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:22:20.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:22:20.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:22:20.322 [DEBUG] [Thread-120639] [transport.py] [_log()] userauth is OK
2025-12-03T17:22:20.322 [DEBUG] [Thread-120639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:22:20.322 [DEBUG] [Thread-120639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:22:20.322 [DEBUG] [Thread-120639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:22:20.323 [DEBUG] [Thread-120639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:22:20.346 [INFO] [Thread-120639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:22:20.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:22:21.075 [DEBUG] [Thread-120639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:22:21.075 [DEBUG] [Thread-120639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:22:21.076 [DEBUG] [Thread-120639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:22:21.117 [DEBUG] [Thread-120639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:22:21.117 [DEBUG] [Thread-120639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:22:21.122 [DEBUG] [Thread-120639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:22:21.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:22:21.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:22:21.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:22:21.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:22:21.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:22:21.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:22:21.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.639978 -999.00  +21.30  29.51     26   +1.40 1 1 1 1 1   887    0 18.52 -45.81 ----- 29.5 29.5 174.0 32.8 25.6 -31.3 25.6 -29.3 27.4 -29.0 27.6 -31.8
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:22:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.639978
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:22:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:21:52', tmtdew=23.0, humidity=21.08, cloud=0.0, wind=26.45, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:21:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:22:21.140 [DEBUG] [Thread-120639] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:22:21.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:22:21.224 [DEBUG] [Thread-120642] [transport.py] [_log()] starting thread (client mode): 0xa517eb00
2025-12-03T17:22:21.224 [DEBUG] [Thread-120642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:22:21.239 [DEBUG] [Thread-120642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:22:21.239 [INFO] [Thread-120642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] client lang: <none>
2025-12-03T17:22:21.246 [DEBUG] [Thread-120642] [transport.py] [_log()] server lang: <none>
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] kex follows: False
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] Compression: none
2025-12-03T17:22:21.247 [DEBUG] [Thread-120642] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:22:21.309 [DEBUG] [Thread-120642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:22:21.309 [DEBUG] [Thread-120642] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:22:21.309 [DEBUG] [Thread-120642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:22:21.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:22:21.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:22:21.371 [DEBUG] [Thread-120642] [transport.py] [_log()] userauth is OK
2025-12-03T17:22:21.371 [DEBUG] [Thread-120642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:22:21.371 [DEBUG] [Thread-120642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:22:21.371 [DEBUG] [Thread-120642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:22:21.371 [DEBUG] [Thread-120642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:22:21.393 [INFO] [Thread-120642] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:22:21.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:22:21.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:22:22.239 [DEBUG] [Thread-120642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:22:22.239 [DEBUG] [Thread-120642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:22:22.287 [DEBUG] [Thread-120642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:22:22.287 [DEBUG] [Thread-120642] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:22:22.296 [DEBUG] [Thread-120642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:22:22.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:22:22.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:22:22.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:22:22.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:22:22.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:22:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:22:22.332 [DEBUG] [Thread-120642] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:22:25.235 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:30.969 [DEBUG] [Thread-120644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:31.634 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:38.030 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:44.457 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:44.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:44.978 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:46.012 [DEBUG] [Thread-120645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:50.853 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:51.195 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:52.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:22:52.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:22:52.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:22:52.644 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:53.032 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 22, 24), 22.82, 21.29, 0.0, 26.5, 20.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:22:53.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:22:24
2025-12-03T17:22:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:22:53.316 [DEBUG] [Thread-120646] [transport.py] [_log()] starting thread (client mode): 0xa517cfd0
2025-12-03T17:22:53.316 [DEBUG] [Thread-120646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:22:53.337 [DEBUG] [Thread-120646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:22:53.337 [INFO] [Thread-120646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:22:53.340 [DEBUG] [Thread-120646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:22:53.340 [DEBUG] [Thread-120646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:22:53.340 [DEBUG] [Thread-120646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] client lang: <none>
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] server lang: <none>
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] kex follows: False
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:22:53.341 [DEBUG] [Thread-120646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:22:53.342 [DEBUG] [Thread-120646] [transport.py] [_log()] Compression: none
2025-12-03T17:22:53.342 [DEBUG] [Thread-120646] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:22:53.359 [DEBUG] [Thread-120646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:22:53.360 [DEBUG] [Thread-120646] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:22:53.360 [DEBUG] [Thread-120646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:22:53.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:22:53.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:22:53.362 [DEBUG] [Thread-120646] [transport.py] [_log()] userauth is OK
2025-12-03T17:22:53.362 [DEBUG] [Thread-120646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:22:53.363 [DEBUG] [Thread-120646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:22:53.363 [DEBUG] [Thread-120646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:22:53.363 [DEBUG] [Thread-120646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:22:53.397 [INFO] [Thread-120646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:22:53.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:22:53.429 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:53.861 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:54.059 [DEBUG] [Thread-120646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:22:54.059 [DEBUG] [Thread-120646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:22:54.059 [DEBUG] [Thread-120646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:22:54.100 [DEBUG] [Thread-120646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:22:54.100 [DEBUG] [Thread-120646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:22:54.103 [DEBUG] [Thread-120646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:22:54.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:22:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:22:54.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:22:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:22:54.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:22:54.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:22:54.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:22:54.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:22:54.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:22:54.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.640326 -999.00  +21.00  19.80     27   +1.30 1 1 1 1 1   887    0 18.89 -43.40 ----- 19.8 19.8 160.5 26.7 25.6 -30.3 25.6 -29.0 27.2 -29.1 27.5 -30.7
2025-12-03T17:22:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:22:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:22:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.640326
2025-12-03T17:22:54.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:22:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:22:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:22:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:22:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:22:54.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:22:24', tmtdew=22.82, humidity=21.29, cloud=0.0, wind=26.5, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:22:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:22:54.127 [DEBUG] [Thread-120646] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:22:54.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:22:54.228 [DEBUG] [Thread-120649] [transport.py] [_log()] starting thread (client mode): 0xa272b610
2025-12-03T17:22:54.228 [DEBUG] [Thread-120649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:22:54.240 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:54.248 [DEBUG] [Thread-120649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:22:54.248 [INFO] [Thread-120649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:22:54.260 [DEBUG] [Thread-120649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:22:54.260 [DEBUG] [Thread-120649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:22:54.260 [DEBUG] [Thread-120649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:22:54.260 [DEBUG] [Thread-120649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:54.260 [DEBUG] [Thread-120649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] client lang: <none>
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] server lang: <none>
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] kex follows: False
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] Compression: none
2025-12-03T17:22:54.261 [DEBUG] [Thread-120649] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:22:54.322 [DEBUG] [Thread-120649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:22:54.323 [DEBUG] [Thread-120649] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:22:54.323 [DEBUG] [Thread-120649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:22:54.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:22:54.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:22:54.379 [DEBUG] [Thread-120649] [transport.py] [_log()] userauth is OK
2025-12-03T17:22:54.379 [DEBUG] [Thread-120649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:22:54.380 [DEBUG] [Thread-120649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:22:54.380 [DEBUG] [Thread-120649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:22:54.380 [DEBUG] [Thread-120649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:22:54.399 [INFO] [Thread-120649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:22:54.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:22:54.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:22:54.693 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:55.105 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:55.230 [DEBUG] [Thread-120649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:22:55.230 [DEBUG] [Thread-120649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:22:55.278 [DEBUG] [Thread-120649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:22:55.278 [DEBUG] [Thread-120649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:22:55.287 [DEBUG] [Thread-120649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:22:55.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:22:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:22:55.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:22:55.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:22:55.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:22:55.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:22:55.322 [DEBUG] [Thread-120649] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:22:55.540 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:55.935 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:56.350 [DEBUG] [Thread-120544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:22:57.851 [DEBUG] [Thread-120651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:01.038 [DEBUG] [Thread-120652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:16.071 [DEBUG] [Thread-120653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:23:25.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:23:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:23:26.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 22, 56), 22.8, 21.83, 0.0, 26.96, 20.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:23:26.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:22:56
2025-12-03T17:23:26.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:23:26.280 [DEBUG] [Thread-120654] [transport.py] [_log()] starting thread (client mode): 0xa517fc40
2025-12-03T17:23:26.280 [DEBUG] [Thread-120654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:23:26.295 [DEBUG] [Thread-120654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:23:26.295 [INFO] [Thread-120654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:23:26.298 [DEBUG] [Thread-120654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] client lang: <none>
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] server lang: <none>
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] kex follows: False
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] Compression: none
2025-12-03T17:23:26.299 [DEBUG] [Thread-120654] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:23:26.312 [DEBUG] [Thread-120654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:23:26.312 [DEBUG] [Thread-120654] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:23:26.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:23:26.312 [DEBUG] [Thread-120654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:23:26.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:23:26.313 [DEBUG] [Thread-120654] [transport.py] [_log()] userauth is OK
2025-12-03T17:23:26.313 [DEBUG] [Thread-120654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:23:26.314 [DEBUG] [Thread-120654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:23:26.314 [DEBUG] [Thread-120654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:23:26.314 [DEBUG] [Thread-120654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:23:26.326 [INFO] [Thread-120654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:23:26.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:23:27.078 [DEBUG] [Thread-120654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:23:27.078 [DEBUG] [Thread-120654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:23:27.079 [DEBUG] [Thread-120654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:23:27.119 [DEBUG] [Thread-120654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:23:27.119 [DEBUG] [Thread-120654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:23:27.121 [DEBUG] [Thread-120654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:23:27.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:23:27.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:23:27.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:23:27.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:23:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:23:27.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:23:27.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:23:27.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.640673 -999.00  +20.90  18.12     27   +1.30 1 1 1 1 1   887    0 18.46 -44.64 ----- 18.1 18.1 171.0 27.0 25.5 -30.4 25.4 -32.5 27.2 -27.8 27.6 -29.2
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.640673
2025-12-03T17:23:27.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:23:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:23:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:23:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:23:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:23:27.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:22:56', tmtdew=22.8, humidity=21.83, cloud=0.0, wind=26.96, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:22:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:23:27.146 [DEBUG] [Thread-120654] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:23:27.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:23:27.247 [DEBUG] [Thread-120657] [transport.py] [_log()] starting thread (client mode): 0xa517c070
2025-12-03T17:23:27.247 [DEBUG] [Thread-120657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:23:27.262 [DEBUG] [Thread-120657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:23:27.262 [INFO] [Thread-120657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:23:27.269 [DEBUG] [Thread-120657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:23:27.269 [DEBUG] [Thread-120657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:23:27.269 [DEBUG] [Thread-120657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:23:27.269 [DEBUG] [Thread-120657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] client lang: <none>
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] server lang: <none>
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] kex follows: False
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] Compression: none
2025-12-03T17:23:27.270 [DEBUG] [Thread-120657] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:23:27.327 [DEBUG] [Thread-120657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:23:27.327 [DEBUG] [Thread-120657] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:23:27.328 [DEBUG] [Thread-120657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:23:27.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:23:27.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:23:27.383 [DEBUG] [Thread-120657] [transport.py] [_log()] userauth is OK
2025-12-03T17:23:27.383 [DEBUG] [Thread-120657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:23:27.383 [DEBUG] [Thread-120657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:23:27.383 [DEBUG] [Thread-120657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:23:27.383 [DEBUG] [Thread-120657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:23:27.401 [INFO] [Thread-120657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:23:27.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:23:27.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:23:28.244 [DEBUG] [Thread-120657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:23:28.244 [DEBUG] [Thread-120657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:23:28.292 [DEBUG] [Thread-120657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:23:28.292 [DEBUG] [Thread-120657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:23:28.301 [DEBUG] [Thread-120657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:23:28.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:23:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:23:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:23:28.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:23:28.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:23:28.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:23:28.334 [DEBUG] [Thread-120657] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:23:31.096 [DEBUG] [Thread-120659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:45.123 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:45.124 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:46.143 [DEBUG] [Thread-120660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:57.879 [DEBUG] [Thread-120661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:23:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:23:58.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:23:58.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:23:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 23, 28), 22.67, 22.02, 0.0, 23.03, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:23:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:23:28
2025-12-03T17:23:59.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:23:59.358 [DEBUG] [Thread-120662] [transport.py] [_log()] starting thread (client mode): 0xa272b1f0
2025-12-03T17:23:59.358 [DEBUG] [Thread-120662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:23:59.377 [DEBUG] [Thread-120662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:23:59.377 [INFO] [Thread-120662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:23:59.380 [DEBUG] [Thread-120662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] client lang: <none>
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] server lang: <none>
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] kex follows: False
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] Compression: none
2025-12-03T17:23:59.381 [DEBUG] [Thread-120662] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:23:59.395 [DEBUG] [Thread-120662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:23:59.395 [DEBUG] [Thread-120662] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:23:59.396 [DEBUG] [Thread-120662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:23:59.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:23:59.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:23:59.396 [DEBUG] [Thread-120662] [transport.py] [_log()] userauth is OK
2025-12-03T17:23:59.396 [DEBUG] [Thread-120662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:23:59.396 [DEBUG] [Thread-120662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:23:59.396 [DEBUG] [Thread-120662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:23:59.397 [DEBUG] [Thread-120662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:23:59.412 [INFO] [Thread-120662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:23:59.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:24:00.030 [DEBUG] [Thread-120662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:24:00.031 [DEBUG] [Thread-120662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:24:00.031 [DEBUG] [Thread-120662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:24:00.072 [DEBUG] [Thread-120662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:24:00.072 [DEBUG] [Thread-120662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:24:00.075 [DEBUG] [Thread-120662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:24:00.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:24:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:24:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:24:00.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:24:00.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:24:00.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:24:00.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.641020 -999.00  +20.90  16.93     27   +1.30 1 1 1 1 1   887    0 18.69 -48.07 ----- 16.9 16.9 164.4 25.6 25.5 -29.8 25.5 -29.4 27.2 -28.1 27.5 -29.7
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.641020
2025-12-03T17:24:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:24:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:24:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:24:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:24:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:24:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:23:28', tmtdew=22.67, humidity=22.02, cloud=0.0, wind=23.03, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:23:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:24:00.097 [DEBUG] [Thread-120662] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:24:00.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:24:00.191 [DEBUG] [Thread-120665] [transport.py] [_log()] starting thread (client mode): 0xa517ebc0
2025-12-03T17:24:00.191 [DEBUG] [Thread-120665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:24:00.209 [DEBUG] [Thread-120665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:24:00.209 [INFO] [Thread-120665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:24:00.217 [DEBUG] [Thread-120665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:24:00.217 [DEBUG] [Thread-120665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] client lang: <none>
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] server lang: <none>
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] kex follows: False
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] Compression: none
2025-12-03T17:24:00.218 [DEBUG] [Thread-120665] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:24:00.275 [DEBUG] [Thread-120665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:24:00.276 [DEBUG] [Thread-120665] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:24:00.276 [DEBUG] [Thread-120665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:24:00.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:24:00.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:24:00.330 [DEBUG] [Thread-120665] [transport.py] [_log()] userauth is OK
2025-12-03T17:24:00.331 [DEBUG] [Thread-120665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:24:00.331 [DEBUG] [Thread-120665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:24:00.331 [DEBUG] [Thread-120665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:24:00.331 [DEBUG] [Thread-120665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:24:00.349 [INFO] [Thread-120665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:24:00.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:24:00.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:24:01.173 [DEBUG] [Thread-120667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:01.190 [DEBUG] [Thread-120665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:24:01.190 [DEBUG] [Thread-120665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:24:01.237 [DEBUG] [Thread-120665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:24:01.237 [DEBUG] [Thread-120665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:24:01.246 [DEBUG] [Thread-120665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:24:01.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:24:01.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:24:01.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:24:01.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:24:01.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:24:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:24:01.279 [DEBUG] [Thread-120665] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:24:16.208 [DEBUG] [Thread-120668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:31.239 [DEBUG] [Thread-120669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:24:31.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:24:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:24:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 23, 28), 22.67, 22.02, 0.0, 23.03, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:24:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:23:28
2025-12-03T17:24:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:24:32.233 [DEBUG] [Thread-120670] [transport.py] [_log()] starting thread (client mode): 0xa277bb20
2025-12-03T17:24:32.233 [DEBUG] [Thread-120670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:24:32.253 [DEBUG] [Thread-120670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:24:32.253 [INFO] [Thread-120670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] client lang: <none>
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] server lang: <none>
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] kex follows: False
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] Compression: none
2025-12-03T17:24:32.254 [DEBUG] [Thread-120670] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:24:32.263 [DEBUG] [Thread-120670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:24:32.263 [DEBUG] [Thread-120670] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:24:32.263 [DEBUG] [Thread-120670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:24:32.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:24:32.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:24:32.263 [DEBUG] [Thread-120670] [transport.py] [_log()] userauth is OK
2025-12-03T17:24:32.264 [DEBUG] [Thread-120670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:24:32.264 [DEBUG] [Thread-120670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:24:32.264 [DEBUG] [Thread-120670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:24:32.264 [DEBUG] [Thread-120670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:24:32.273 [INFO] [Thread-120670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:24:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:24:32.996 [DEBUG] [Thread-120670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:24:32.996 [DEBUG] [Thread-120670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:24:32.996 [DEBUG] [Thread-120670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:24:33.037 [DEBUG] [Thread-120670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:24:33.037 [DEBUG] [Thread-120670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:24:33.039 [DEBUG] [Thread-120670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:24:33.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:24:33.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:24:33.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:24:33.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:24:33.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:24:33.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:24:33.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.641714 -999.00  +21.00  14.44     27   +1.20 1 1 1 1 1   887    0 18.98 -43.43 ----- 14.4 14.4 158.8 20.0 25.5 -29.9 25.6 -28.6 27.1 -27.3 27.5 -28.7
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.641714
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:24:33.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:23:28', tmtdew=22.67, humidity=22.02, cloud=0.0, wind=23.03, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:24:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:24:33.053 [DEBUG] [Thread-120670] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:24:33.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:24:33.139 [DEBUG] [Thread-120673] [transport.py] [_log()] starting thread (client mode): 0xa277bc70
2025-12-03T17:24:33.139 [DEBUG] [Thread-120673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:24:33.153 [DEBUG] [Thread-120673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:24:33.154 [INFO] [Thread-120673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:24:33.161 [DEBUG] [Thread-120673] [transport.py] [_log()] client lang: <none>
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] server lang: <none>
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] kex follows: False
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] Compression: none
2025-12-03T17:24:33.162 [DEBUG] [Thread-120673] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:24:33.222 [DEBUG] [Thread-120673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:24:33.222 [DEBUG] [Thread-120673] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:24:33.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:24:33.222 [DEBUG] [Thread-120673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:24:33.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:24:33.279 [DEBUG] [Thread-120673] [transport.py] [_log()] userauth is OK
2025-12-03T17:24:33.279 [DEBUG] [Thread-120673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:24:33.279 [DEBUG] [Thread-120673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:24:33.279 [DEBUG] [Thread-120673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:24:33.279 [DEBUG] [Thread-120673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:24:33.296 [INFO] [Thread-120673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:24:33.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:24:33.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:24:34.121 [DEBUG] [Thread-120673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:24:34.121 [DEBUG] [Thread-120673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:24:34.168 [DEBUG] [Thread-120673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:24:34.169 [DEBUG] [Thread-120673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:24:34.177 [DEBUG] [Thread-120673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:24:34.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:24:34.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:24:34.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:24:34.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:24:34.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:24:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:24:34.209 [DEBUG] [Thread-120673] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:24:45.263 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:45.264 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:46.266 [DEBUG] [Thread-120675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:24:57.930 [DEBUG] [Thread-120676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:01.315 [DEBUG] [Thread-120677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:04.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:25:04.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:25:04.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:25:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 24, 32), 22.61, 21.89, 0.0, 21.26, 20.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:25:04.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:24:32
2025-12-03T17:25:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:25:05.237 [DEBUG] [Thread-120678] [transport.py] [_log()] starting thread (client mode): 0xa2779c90
2025-12-03T17:25:05.237 [DEBUG] [Thread-120678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:25:05.257 [DEBUG] [Thread-120678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:25:05.257 [INFO] [Thread-120678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] client lang: <none>
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] server lang: <none>
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] kex follows: False
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:25:05.260 [DEBUG] [Thread-120678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:25:05.261 [DEBUG] [Thread-120678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:25:05.261 [DEBUG] [Thread-120678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:25:05.261 [DEBUG] [Thread-120678] [transport.py] [_log()] Compression: none
2025-12-03T17:25:05.261 [DEBUG] [Thread-120678] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:25:05.276 [DEBUG] [Thread-120678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:25:05.276 [DEBUG] [Thread-120678] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:25:05.277 [DEBUG] [Thread-120678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:25:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:25:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:25:05.277 [DEBUG] [Thread-120678] [transport.py] [_log()] userauth is OK
2025-12-03T17:25:05.277 [DEBUG] [Thread-120678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:25:05.277 [DEBUG] [Thread-120678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:25:05.278 [DEBUG] [Thread-120678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:25:05.278 [DEBUG] [Thread-120678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:25:05.292 [INFO] [Thread-120678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:25:05.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:25:06.196 [DEBUG] [Thread-120678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:25:06.196 [DEBUG] [Thread-120678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:25:06.196 [DEBUG] [Thread-120678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:25:06.236 [DEBUG] [Thread-120678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:25:06.236 [DEBUG] [Thread-120678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:25:06.239 [DEBUG] [Thread-120678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:25:06.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:25:06.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:25:06.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:25:06.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:25:06.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:25:06.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:25:06.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.642062 -999.00  +21.00  20.97     26   +1.10 1 1 1 1 1   887    0 19.16 -42.17 ----- 21.0 21.0 156.8 28.6 25.5 -30.0 25.4 -29.3 27.1 -28.0 27.4 -30.1
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.642062
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:25:06.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:24:32', tmtdew=22.61, humidity=21.89, cloud=0.0, wind=21.26, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:24:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:25:06.259 [DEBUG] [Thread-120678] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:25:06.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:25:06.345 [DEBUG] [Thread-120681] [transport.py] [_log()] starting thread (client mode): 0xa277b550
2025-12-03T17:25:06.345 [DEBUG] [Thread-120681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:25:06.362 [DEBUG] [Thread-120681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:25:06.362 [INFO] [Thread-120681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] client lang: <none>
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] server lang: <none>
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] kex follows: False
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] Compression: none
2025-12-03T17:25:06.369 [DEBUG] [Thread-120681] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:25:06.427 [DEBUG] [Thread-120681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:25:06.427 [DEBUG] [Thread-120681] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:25:06.428 [DEBUG] [Thread-120681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:25:06.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:25:06.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:25:06.483 [DEBUG] [Thread-120681] [transport.py] [_log()] userauth is OK
2025-12-03T17:25:06.483 [DEBUG] [Thread-120681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:25:06.483 [DEBUG] [Thread-120681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:25:06.483 [DEBUG] [Thread-120681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:25:06.484 [DEBUG] [Thread-120681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:25:06.502 [INFO] [Thread-120681] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:25:06.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:25:06.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:25:07.358 [DEBUG] [Thread-120681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:25:07.359 [DEBUG] [Thread-120681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:25:07.406 [DEBUG] [Thread-120681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:25:07.407 [DEBUG] [Thread-120681] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:25:07.416 [DEBUG] [Thread-120681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:25:07.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:25:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:25:07.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:25:07.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:25:07.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:25:07.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:25:07.450 [DEBUG] [Thread-120681] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:25:16.345 [DEBUG] [Thread-120683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:31.394 [DEBUG] [Thread-120684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:37.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:25:37.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:25:37.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:25:38.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 25, 4), 22.74, 21.71, 0.0, 20.7, 20.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:25:38.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:25:04
2025-12-03T17:25:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:25:38.470 [DEBUG] [Thread-120685] [transport.py] [_log()] starting thread (client mode): 0xa272a0b0
2025-12-03T17:25:38.470 [DEBUG] [Thread-120685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:25:38.488 [DEBUG] [Thread-120685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:25:38.489 [INFO] [Thread-120685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] client lang: <none>
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] server lang: <none>
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] kex follows: False
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] Compression: none
2025-12-03T17:25:38.492 [DEBUG] [Thread-120685] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:25:38.510 [DEBUG] [Thread-120685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:25:38.510 [DEBUG] [Thread-120685] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:25:38.511 [DEBUG] [Thread-120685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:25:38.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:25:38.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:25:38.513 [DEBUG] [Thread-120685] [transport.py] [_log()] userauth is OK
2025-12-03T17:25:38.513 [DEBUG] [Thread-120685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:25:38.513 [DEBUG] [Thread-120685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:25:38.513 [DEBUG] [Thread-120685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:25:38.513 [DEBUG] [Thread-120685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:25:38.536 [INFO] [Thread-120685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:25:38.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:25:39.100 [DEBUG] [Thread-120685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:25:39.100 [DEBUG] [Thread-120685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:25:39.100 [DEBUG] [Thread-120685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:25:39.141 [DEBUG] [Thread-120685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:25:39.141 [DEBUG] [Thread-120685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:25:39.144 [DEBUG] [Thread-120685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:25:39.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:25:39.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:25:39.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:25:39.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:25:39.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:25:39.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:25:39.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:25:39.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:25:39.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:25:39.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.642409 -999.00  +20.90  14.80     27   +1.20 1 1 1 1 1   887    0 18.64 -39.51 ----- 14.8 14.8 159.0 24.7 25.4 -30.7 25.4 -29.8 26.9 -28.5 27.4 -30.5
2025-12-03T17:25:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:25:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:25:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.642409
2025-12-03T17:25:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:25:39.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:25:39.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:25:39.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:25:39.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:25:39.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:25:04', tmtdew=22.74, humidity=21.71, cloud=0.0, wind=20.7, temperature=20.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:25:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:25:39.172 [DEBUG] [Thread-120685] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:25:39.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:25:39.268 [DEBUG] [Thread-120688] [transport.py] [_log()] starting thread (client mode): 0xa2729390
2025-12-03T17:25:39.268 [DEBUG] [Thread-120688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:25:39.287 [DEBUG] [Thread-120688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:25:39.288 [INFO] [Thread-120688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:25:39.299 [DEBUG] [Thread-120688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:25:39.299 [DEBUG] [Thread-120688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:25:39.299 [DEBUG] [Thread-120688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] client lang: <none>
2025-12-03T17:25:39.300 [DEBUG] [Thread-120688] [transport.py] [_log()] server lang: <none>
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] kex follows: False
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:25:39.301 [DEBUG] [Thread-120688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:25:39.302 [DEBUG] [Thread-120688] [transport.py] [_log()] Compression: none
2025-12-03T17:25:39.302 [DEBUG] [Thread-120688] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:25:39.358 [DEBUG] [Thread-120688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:25:39.358 [DEBUG] [Thread-120688] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:25:39.359 [DEBUG] [Thread-120688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:25:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:25:39.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:25:39.415 [DEBUG] [Thread-120688] [transport.py] [_log()] userauth is OK
2025-12-03T17:25:39.415 [DEBUG] [Thread-120688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:25:39.415 [DEBUG] [Thread-120688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:25:39.415 [DEBUG] [Thread-120688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:25:39.415 [DEBUG] [Thread-120688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:25:39.435 [INFO] [Thread-120688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:25:39.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:25:39.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:25:40.249 [DEBUG] [Thread-120688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:25:40.249 [DEBUG] [Thread-120688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:25:40.296 [DEBUG] [Thread-120688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:25:40.297 [DEBUG] [Thread-120688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:25:40.305 [DEBUG] [Thread-120688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:25:40.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:25:40.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:25:40.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:25:40.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:25:40.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:25:40.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:25:40.339 [DEBUG] [Thread-120688] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:25:45.403 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:45.404 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:46.417 [DEBUG] [Thread-120690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:25:57.981 [DEBUG] [Thread-120691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:01.457 [DEBUG] [Thread-120692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:26:10.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:26:10.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:26:11.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 25, 36), 23.19, 21.09, 0.0, 21.47, 21.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:26:11.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:25:36
2025-12-03T17:26:11.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:26:11.312 [DEBUG] [Thread-120693] [transport.py] [_log()] starting thread (client mode): 0xa2729f00
2025-12-03T17:26:11.313 [DEBUG] [Thread-120693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:26:11.332 [DEBUG] [Thread-120693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:26:11.333 [INFO] [Thread-120693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] client lang: <none>
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] server lang: <none>
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] kex follows: False
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:26:11.336 [DEBUG] [Thread-120693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:26:11.337 [DEBUG] [Thread-120693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:26:11.337 [DEBUG] [Thread-120693] [transport.py] [_log()] Compression: none
2025-12-03T17:26:11.337 [DEBUG] [Thread-120693] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:26:11.352 [DEBUG] [Thread-120693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:26:11.353 [DEBUG] [Thread-120693] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:26:11.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:26:11.354 [DEBUG] [Thread-120693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:26:11.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:26:11.394 [DEBUG] [Thread-120693] [transport.py] [_log()] userauth is OK
2025-12-03T17:26:11.394 [DEBUG] [Thread-120693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:26:11.394 [DEBUG] [Thread-120693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:26:11.394 [DEBUG] [Thread-120693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:26:11.394 [DEBUG] [Thread-120693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:26:11.428 [INFO] [Thread-120693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:26:11.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:26:12.061 [DEBUG] [Thread-120693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:26:12.062 [DEBUG] [Thread-120693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:26:12.062 [DEBUG] [Thread-120693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:26:12.103 [DEBUG] [Thread-120693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:26:12.103 [DEBUG] [Thread-120693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:26:12.106 [DEBUG] [Thread-120693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:26:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:26:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:26:12.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:26:12.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:26:12.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:26:12.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:26:12.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:26:12.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.642756 -999.00  +20.90  19.42     26   +1.10 1 1 1 1 1   887    0 18.88 -37.02 ----- 19.4 19.4 152.2 23.7 25.4 -30.0 25.4 -31.4 26.9 -28.3 27.3 -30.0
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.642756
2025-12-03T17:26:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:26:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:26:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:26:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:26:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:26:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:25:36', tmtdew=23.19, humidity=21.09, cloud=0.0, wind=21.47, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:25:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:26:12.130 [DEBUG] [Thread-120693] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:26:12.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:26:12.226 [DEBUG] [Thread-120696] [transport.py] [_log()] starting thread (client mode): 0xa2729750
2025-12-03T17:26:12.226 [DEBUG] [Thread-120696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:26:12.240 [DEBUG] [Thread-120696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:26:12.240 [INFO] [Thread-120696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] client lang: <none>
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] server lang: <none>
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] kex follows: False
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:26:12.248 [DEBUG] [Thread-120696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:26:12.249 [DEBUG] [Thread-120696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:26:12.249 [DEBUG] [Thread-120696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:26:12.249 [DEBUG] [Thread-120696] [transport.py] [_log()] Compression: none
2025-12-03T17:26:12.249 [DEBUG] [Thread-120696] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:26:12.307 [DEBUG] [Thread-120696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:26:12.307 [DEBUG] [Thread-120696] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:26:12.307 [DEBUG] [Thread-120696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:26:12.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:26:12.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:26:12.367 [DEBUG] [Thread-120696] [transport.py] [_log()] userauth is OK
2025-12-03T17:26:12.367 [DEBUG] [Thread-120696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:26:12.367 [DEBUG] [Thread-120696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:26:12.367 [DEBUG] [Thread-120696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:26:12.367 [DEBUG] [Thread-120696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:26:12.387 [INFO] [Thread-120696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:26:12.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:26:12.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:26:13.237 [DEBUG] [Thread-120696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:26:13.237 [DEBUG] [Thread-120696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:26:13.285 [DEBUG] [Thread-120696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:26:13.285 [DEBUG] [Thread-120696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:26:13.294 [DEBUG] [Thread-120696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:26:13.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:26:13.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:26:13.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:26:13.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:26:13.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:26:13.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:26:13.328 [DEBUG] [Thread-120696] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:26:16.491 [DEBUG] [Thread-120698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:31.532 [DEBUG] [Thread-120699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:43.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:26:43.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:26:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:26:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 26, 40), 23.42, 20.71, 0.0, 27.6, 21.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:26:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:26:40
2025-12-03T17:26:44.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:26:44.307 [DEBUG] [Thread-120700] [transport.py] [_log()] starting thread (client mode): 0xa27626e0
2025-12-03T17:26:44.307 [DEBUG] [Thread-120700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:26:44.326 [DEBUG] [Thread-120700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:26:44.326 [INFO] [Thread-120700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:44.327 [DEBUG] [Thread-120700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] client lang: <none>
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] server lang: <none>
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] kex follows: False
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] Compression: none
2025-12-03T17:26:44.328 [DEBUG] [Thread-120700] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:26:44.343 [DEBUG] [Thread-120700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:26:44.344 [DEBUG] [Thread-120700] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:26:44.344 [DEBUG] [Thread-120700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:26:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:26:44.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:26:44.347 [DEBUG] [Thread-120700] [transport.py] [_log()] userauth is OK
2025-12-03T17:26:44.347 [DEBUG] [Thread-120700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:26:44.347 [DEBUG] [Thread-120700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:26:44.347 [DEBUG] [Thread-120700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:26:44.347 [DEBUG] [Thread-120700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:26:44.363 [INFO] [Thread-120700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:26:44.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:26:44.938 [DEBUG] [Thread-120700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:26:44.938 [DEBUG] [Thread-120700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:26:44.938 [DEBUG] [Thread-120700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:26:44.979 [DEBUG] [Thread-120700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:26:44.979 [DEBUG] [Thread-120700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:26:44.982 [DEBUG] [Thread-120700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:26:44.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:26:44.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:26:44.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:26:44.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:26:44.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:26:45.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:26:45.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.643103 -999.00  +20.70  16.97     26   +0.90 1 1 1 1 1   887    0 19.00 -35.96 ----- 17.0 17.0 154.0 24.8 25.3 -30.0 25.3 -29.8 26.9 -27.9 27.3 -29.5
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:26:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.643103
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:26:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:26:40', tmtdew=23.42, humidity=20.71, cloud=0.0, wind=27.6, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:26:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:26:45.003 [DEBUG] [Thread-120700] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:26:45.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:26:45.100 [DEBUG] [Thread-120703] [transport.py] [_log()] starting thread (client mode): 0xa51d1d20
2025-12-03T17:26:45.100 [DEBUG] [Thread-120703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:26:45.115 [DEBUG] [Thread-120703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:26:45.115 [INFO] [Thread-120703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:26:45.123 [DEBUG] [Thread-120703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] client lang: <none>
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] server lang: <none>
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] kex follows: False
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:26:45.124 [DEBUG] [Thread-120703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:26:45.125 [DEBUG] [Thread-120703] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:26:45.125 [DEBUG] [Thread-120703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:26:45.125 [DEBUG] [Thread-120703] [transport.py] [_log()] Compression: none
2025-12-03T17:26:45.125 [DEBUG] [Thread-120703] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:26:45.188 [DEBUG] [Thread-120703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:26:45.189 [DEBUG] [Thread-120703] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:26:45.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:26:45.190 [DEBUG] [Thread-120703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:26:45.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:26:45.247 [DEBUG] [Thread-120703] [transport.py] [_log()] userauth is OK
2025-12-03T17:26:45.247 [DEBUG] [Thread-120703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:26:45.247 [DEBUG] [Thread-120703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:26:45.247 [DEBUG] [Thread-120703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:26:45.247 [DEBUG] [Thread-120703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:26:45.266 [INFO] [Thread-120703] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:26:45.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:26:45.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:26:45.545 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:45.546 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:46.134 [DEBUG] [Thread-120703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:26:46.135 [DEBUG] [Thread-120703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:26:46.183 [DEBUG] [Thread-120703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:26:46.183 [DEBUG] [Thread-120703] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:26:46.192 [DEBUG] [Thread-120703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:26:46.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:26:46.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:26:46.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:26:46.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:26:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:26:46.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:26:46.226 [DEBUG] [Thread-120703] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:26:46.557 [DEBUG] [Thread-120705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:26:58.028 [DEBUG] [Thread-120706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:01.612 [DEBUG] [Thread-120707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:16.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:27:16.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:27:16.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:27:16.638 [DEBUG] [Thread-120708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 27, 12), 23.29, 20.88, 0.0, 21.07, 21.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:27:16.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:27:12
2025-12-03T17:27:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:27:17.198 [DEBUG] [Thread-120709] [transport.py] [_log()] starting thread (client mode): 0xa517f370
2025-12-03T17:27:17.198 [DEBUG] [Thread-120709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:27:17.219 [DEBUG] [Thread-120709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:27:17.219 [INFO] [Thread-120709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:27:17.222 [DEBUG] [Thread-120709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:27:17.222 [DEBUG] [Thread-120709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:27:17.222 [DEBUG] [Thread-120709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:27:17.222 [DEBUG] [Thread-120709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:17.222 [DEBUG] [Thread-120709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] client lang: <none>
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] server lang: <none>
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] kex follows: False
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] Compression: none
2025-12-03T17:27:17.223 [DEBUG] [Thread-120709] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:27:17.240 [DEBUG] [Thread-120709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:27:17.241 [DEBUG] [Thread-120709] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:27:17.241 [DEBUG] [Thread-120709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:27:17.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:27:17.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:27:17.243 [DEBUG] [Thread-120709] [transport.py] [_log()] userauth is OK
2025-12-03T17:27:17.244 [DEBUG] [Thread-120709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:27:17.244 [DEBUG] [Thread-120709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:27:17.244 [DEBUG] [Thread-120709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:27:17.244 [DEBUG] [Thread-120709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:27:17.267 [INFO] [Thread-120709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:27:17.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:27:17.898 [DEBUG] [Thread-120709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:27:17.898 [DEBUG] [Thread-120709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:27:17.899 [DEBUG] [Thread-120709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:27:17.939 [DEBUG] [Thread-120709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:27:17.939 [DEBUG] [Thread-120709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:27:17.942 [DEBUG] [Thread-120709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:27:17.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:27:17.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:27:17.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:27:17.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:27:17.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:27:17.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:27:17.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:27:17.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.643450 -999.00  +20.70  18.72     27   +1.00 1 1 1 1 1   887    0 18.71 -33.28 ----- 18.7 18.7 172.4 24.9 25.2 -30.4 25.3 -29.3 26.8 -28.2 27.2 -29.6
2025-12-03T17:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:27:17.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.643450
2025-12-03T17:27:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:27:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:27:17.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:27:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:27:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:27:17.968 [DEBUG] [Thread-120709] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:27:17.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:27:12', tmtdew=23.29, humidity=20.88, cloud=0.0, wind=21.07, temperature=21.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:26:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:27:18.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:27:18.066 [DEBUG] [Thread-120712] [transport.py] [_log()] starting thread (client mode): 0xa2778e20
2025-12-03T17:27:18.066 [DEBUG] [Thread-120712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:27:18.081 [DEBUG] [Thread-120712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:27:18.081 [INFO] [Thread-120712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:27:18.088 [DEBUG] [Thread-120712] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:27:18.089 [DEBUG] [Thread-120712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] client lang: <none>
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] server lang: <none>
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] kex follows: False
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:27:18.090 [DEBUG] [Thread-120712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:27:18.091 [DEBUG] [Thread-120712] [transport.py] [_log()] Compression: none
2025-12-03T17:27:18.091 [DEBUG] [Thread-120712] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:27:18.150 [DEBUG] [Thread-120712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:27:18.151 [DEBUG] [Thread-120712] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:27:18.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:27:18.152 [DEBUG] [Thread-120712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:27:18.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:27:18.207 [DEBUG] [Thread-120712] [transport.py] [_log()] userauth is OK
2025-12-03T17:27:18.207 [DEBUG] [Thread-120712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:27:18.207 [DEBUG] [Thread-120712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:27:18.207 [DEBUG] [Thread-120712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:27:18.207 [DEBUG] [Thread-120712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:27:18.226 [INFO] [Thread-120712] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:27:18.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:27:18.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:27:19.065 [DEBUG] [Thread-120712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:27:19.065 [DEBUG] [Thread-120712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:27:19.116 [DEBUG] [Thread-120712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:27:19.116 [DEBUG] [Thread-120712] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:27:19.124 [DEBUG] [Thread-120712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:27:19.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:27:19.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:27:19.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:27:19.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:27:19.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:27:19.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:27:19.176 [DEBUG] [Thread-120712] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:27:31.665 [DEBUG] [Thread-120714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:45.686 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:45.686 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:46.710 [DEBUG] [Thread-120715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:27:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:27:49.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:27:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:27:49.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 27, 44), 23.21, 20.85, 0.0, 18.7, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:27:49.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:27:44
2025-12-03T17:27:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:27:50.127 [DEBUG] [Thread-120716] [transport.py] [_log()] starting thread (client mode): 0xa51d1bd0
2025-12-03T17:27:50.127 [DEBUG] [Thread-120716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:27:50.138 [DEBUG] [Thread-120716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:27:50.138 [INFO] [Thread-120716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] client lang: <none>
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] server lang: <none>
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] kex follows: False
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:27:50.140 [DEBUG] [Thread-120716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:27:50.141 [DEBUG] [Thread-120716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:27:50.141 [DEBUG] [Thread-120716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:27:50.141 [DEBUG] [Thread-120716] [transport.py] [_log()] Compression: none
2025-12-03T17:27:50.141 [DEBUG] [Thread-120716] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:27:50.150 [DEBUG] [Thread-120716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:27:50.150 [DEBUG] [Thread-120716] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:27:50.150 [DEBUG] [Thread-120716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:27:50.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:27:50.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:27:50.151 [DEBUG] [Thread-120716] [transport.py] [_log()] userauth is OK
2025-12-03T17:27:50.151 [DEBUG] [Thread-120716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:27:50.151 [DEBUG] [Thread-120716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:27:50.151 [DEBUG] [Thread-120716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:27:50.151 [DEBUG] [Thread-120716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:27:50.161 [INFO] [Thread-120716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:27:50.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:27:50.824 [DEBUG] [Thread-120716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:27:50.824 [DEBUG] [Thread-120716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:27:50.824 [DEBUG] [Thread-120716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:27:50.864 [DEBUG] [Thread-120716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:27:50.864 [DEBUG] [Thread-120716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:27:50.866 [DEBUG] [Thread-120716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:27:50.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:27:50.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:27:50.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:27:50.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:27:50.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:27:50.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:27:50.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:27:50.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.643798 -999.00  +20.90  17.53     26   +1.10 1 1 1 1 1   887    0 19.00 -34.58 ----- 17.5 17.5 135.8 20.9 25.2 -30.0 25.4 -28.7 26.9 -27.5 27.2 -28.6
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.643798
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:27:50.884 [DEBUG] [Thread-120716] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:27:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:27:44', tmtdew=23.21, humidity=20.85, cloud=0.0, wind=18.7, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:27:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:27:50.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:27:50.977 [DEBUG] [Thread-120719] [transport.py] [_log()] starting thread (client mode): 0xa277af80
2025-12-03T17:27:50.977 [DEBUG] [Thread-120719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:27:50.992 [DEBUG] [Thread-120719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:27:50.992 [INFO] [Thread-120719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:51.000 [DEBUG] [Thread-120719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] client lang: <none>
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] server lang: <none>
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] kex follows: False
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:27:51.001 [DEBUG] [Thread-120719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:27:51.002 [DEBUG] [Thread-120719] [transport.py] [_log()] Compression: none
2025-12-03T17:27:51.002 [DEBUG] [Thread-120719] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:27:51.058 [DEBUG] [Thread-120719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:27:51.059 [DEBUG] [Thread-120719] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:27:51.059 [DEBUG] [Thread-120719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:27:51.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:27:51.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:27:51.119 [DEBUG] [Thread-120719] [transport.py] [_log()] userauth is OK
2025-12-03T17:27:51.119 [DEBUG] [Thread-120719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:27:51.119 [DEBUG] [Thread-120719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:27:51.119 [DEBUG] [Thread-120719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:27:51.119 [DEBUG] [Thread-120719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:27:51.137 [INFO] [Thread-120719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:27:51.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:27:51.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:27:51.979 [DEBUG] [Thread-120719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:27:51.979 [DEBUG] [Thread-120719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:27:52.026 [DEBUG] [Thread-120719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:27:52.027 [DEBUG] [Thread-120719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:27:52.035 [DEBUG] [Thread-120719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:27:52.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:27:52.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:27:52.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:27:52.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:27:52.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:27:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:27:52.069 [DEBUG] [Thread-120719] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:27:58.062 [DEBUG] [Thread-120721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:01.735 [DEBUG] [Thread-120722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:16.770 [DEBUG] [Thread-120723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:28:22.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:28:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:28:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 28, 16), 23.19, 20.86, 0.0, 19.78, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:28:22.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:28:16
2025-12-03T17:28:22.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:28:23.027 [DEBUG] [Thread-120724] [transport.py] [_log()] starting thread (client mode): 0xa272b8b0
2025-12-03T17:28:23.027 [DEBUG] [Thread-120724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:28:23.047 [DEBUG] [Thread-120724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:28:23.047 [INFO] [Thread-120724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:28:23.050 [DEBUG] [Thread-120724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] client lang: <none>
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] server lang: <none>
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] kex follows: False
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:28:23.051 [DEBUG] [Thread-120724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:28:23.052 [DEBUG] [Thread-120724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:28:23.052 [DEBUG] [Thread-120724] [transport.py] [_log()] Compression: none
2025-12-03T17:28:23.052 [DEBUG] [Thread-120724] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:28:23.069 [DEBUG] [Thread-120724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:28:23.069 [DEBUG] [Thread-120724] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:28:23.070 [DEBUG] [Thread-120724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:28:23.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:28:23.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:28:23.072 [DEBUG] [Thread-120724] [transport.py] [_log()] userauth is OK
2025-12-03T17:28:23.072 [DEBUG] [Thread-120724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:28:23.072 [DEBUG] [Thread-120724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:28:23.072 [DEBUG] [Thread-120724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:28:23.073 [DEBUG] [Thread-120724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:28:23.093 [INFO] [Thread-120724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:28:23.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:28:23.737 [DEBUG] [Thread-120724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:28:23.738 [DEBUG] [Thread-120724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:28:23.738 [DEBUG] [Thread-120724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:28:23.779 [DEBUG] [Thread-120724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:28:23.779 [DEBUG] [Thread-120724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:28:23.781 [DEBUG] [Thread-120724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:28:23.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:28:23.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:28:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:28:23.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:28:23.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:28:23.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:28:23.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.644145 -999.00  +21.00  14.23     26   +1.20 1 1 1 1 1   887    0 19.17 -34.99 ----- 14.2 14.2 142.6 18.0 25.3 -29.3 25.5 -28.8 26.9 -27.0 27.3 -28.8
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.644145
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:28:23.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:28:16', tmtdew=23.19, humidity=20.86, cloud=0.0, wind=19.78, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:27:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:28:23.802 [DEBUG] [Thread-120724] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:28:23.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:28:23.898 [DEBUG] [Thread-120727] [transport.py] [_log()] starting thread (client mode): 0xa51d2440
2025-12-03T17:28:23.898 [DEBUG] [Thread-120727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:28:23.913 [DEBUG] [Thread-120727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:28:23.913 [INFO] [Thread-120727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:28:23.920 [DEBUG] [Thread-120727] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] client lang: <none>
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] server lang: <none>
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] kex follows: False
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] Compression: none
2025-12-03T17:28:23.921 [DEBUG] [Thread-120727] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:28:23.978 [DEBUG] [Thread-120727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:28:23.978 [DEBUG] [Thread-120727] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:28:23.978 [DEBUG] [Thread-120727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:28:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:28:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:28:24.035 [DEBUG] [Thread-120727] [transport.py] [_log()] userauth is OK
2025-12-03T17:28:24.035 [DEBUG] [Thread-120727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:28:24.035 [DEBUG] [Thread-120727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:28:24.035 [DEBUG] [Thread-120727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:28:24.035 [DEBUG] [Thread-120727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:28:24.053 [INFO] [Thread-120727] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:28:24.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:28:24.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:28:24.977 [DEBUG] [Thread-120727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:28:24.977 [DEBUG] [Thread-120727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:28:25.024 [DEBUG] [Thread-120727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:28:25.024 [DEBUG] [Thread-120727] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:28:25.033 [DEBUG] [Thread-120727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:28:25.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:28:25.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:28:25.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:28:25.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:28:25.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:28:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:28:25.065 [DEBUG] [Thread-120727] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:28:31.796 [DEBUG] [Thread-120729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:45.828 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:45.829 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:46.845 [DEBUG] [Thread-120730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:28:55.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:28:55.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:28:55.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:28:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 28, 48), 23.24, 21.01, 0.0, 26.94, 21.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:28:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:28:48
2025-12-03T17:28:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:28:56.025 [DEBUG] [Thread-120731] [transport.py] [_log()] starting thread (client mode): 0xa51d2da0
2025-12-03T17:28:56.025 [DEBUG] [Thread-120731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:28:56.048 [DEBUG] [Thread-120731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:28:56.048 [INFO] [Thread-120731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:28:56.050 [DEBUG] [Thread-120731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:28:56.050 [DEBUG] [Thread-120731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:28:56.050 [DEBUG] [Thread-120731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] client lang: <none>
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] server lang: <none>
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] kex follows: False
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:28:56.051 [DEBUG] [Thread-120731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:28:56.052 [DEBUG] [Thread-120731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:28:56.052 [DEBUG] [Thread-120731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:28:56.052 [DEBUG] [Thread-120731] [transport.py] [_log()] Compression: none
2025-12-03T17:28:56.052 [DEBUG] [Thread-120731] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:28:56.066 [DEBUG] [Thread-120731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:28:56.066 [DEBUG] [Thread-120731] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:28:56.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:28:56.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:28:56.068 [DEBUG] [Thread-120731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:28:56.110 [DEBUG] [Thread-120731] [transport.py] [_log()] userauth is OK
2025-12-03T17:28:56.110 [DEBUG] [Thread-120731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:28:56.110 [DEBUG] [Thread-120731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:28:56.110 [DEBUG] [Thread-120731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:28:56.110 [DEBUG] [Thread-120731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:28:56.134 [INFO] [Thread-120731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:28:56.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:28:56.752 [DEBUG] [Thread-120731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:28:56.753 [DEBUG] [Thread-120731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:28:56.753 [DEBUG] [Thread-120731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:28:56.794 [DEBUG] [Thread-120731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:28:56.794 [DEBUG] [Thread-120731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:28:56.796 [DEBUG] [Thread-120731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:28:56.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:28:56.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:28:56.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:28:56.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:28:56.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:28:56.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:28:56.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:28:56.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.644492 -999.00  +21.00  21.84     26   +1.10 1 1 1 1 1   887    0 18.85 -34.77 ----- 21.8 21.8 158.4 31.2 25.2 -29.9 25.4 -29.4 26.9 -27.7 27.2 -29.4
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.644492
2025-12-03T17:28:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:28:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:28:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:28:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:28:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:28:56.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:28:48', tmtdew=23.24, humidity=21.01, cloud=0.0, wind=26.94, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:28:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:28:56.826 [DEBUG] [Thread-120731] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:28:56.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:28:56.916 [DEBUG] [Thread-120734] [transport.py] [_log()] starting thread (client mode): 0xa27c8eb0
2025-12-03T17:28:56.916 [DEBUG] [Thread-120734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:28:56.930 [DEBUG] [Thread-120734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:28:56.931 [INFO] [Thread-120734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:28:56.938 [DEBUG] [Thread-120734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:28:56.938 [DEBUG] [Thread-120734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:28:56.938 [DEBUG] [Thread-120734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:28:56.938 [DEBUG] [Thread-120734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:56.938 [DEBUG] [Thread-120734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] client lang: <none>
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] server lang: <none>
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] kex follows: False
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] Compression: none
2025-12-03T17:28:56.939 [DEBUG] [Thread-120734] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:28:56.995 [DEBUG] [Thread-120734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:28:56.995 [DEBUG] [Thread-120734] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:28:56.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:28:56.996 [DEBUG] [Thread-120734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:28:56.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:28:57.051 [DEBUG] [Thread-120734] [transport.py] [_log()] userauth is OK
2025-12-03T17:28:57.051 [DEBUG] [Thread-120734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:28:57.052 [DEBUG] [Thread-120734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:28:57.052 [DEBUG] [Thread-120734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:28:57.052 [DEBUG] [Thread-120734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:28:57.071 [INFO] [Thread-120734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:28:57.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:28:57.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:28:57.919 [DEBUG] [Thread-120734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:28:57.919 [DEBUG] [Thread-120734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:28:57.967 [DEBUG] [Thread-120734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:28:57.967 [DEBUG] [Thread-120734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:28:57.976 [DEBUG] [Thread-120734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:28:57.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:28:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:28:57.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:28:58.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:28:58.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:28:58.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:28:58.010 [DEBUG] [Thread-120734] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:28:58.103 [DEBUG] [Thread-120736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:01.878 [DEBUG] [Thread-120737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:16.915 [DEBUG] [Thread-120738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:28.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:29:28.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:29:28.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:29:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 29, 20), 23.3, 20.95, 0.0, 26.57, 21.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:29:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:29:20
2025-12-03T17:29:28.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:29:28.970 [DEBUG] [Thread-120739] [transport.py] [_log()] starting thread (client mode): 0xa27ca7a0
2025-12-03T17:29:28.970 [DEBUG] [Thread-120739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:29:28.990 [DEBUG] [Thread-120739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:29:28.990 [INFO] [Thread-120739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:29:28.993 [DEBUG] [Thread-120739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:29:28.993 [DEBUG] [Thread-120739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] client lang: <none>
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] server lang: <none>
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] kex follows: False
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] Compression: none
2025-12-03T17:29:28.994 [DEBUG] [Thread-120739] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:29:29.013 [DEBUG] [Thread-120739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:29:29.014 [DEBUG] [Thread-120739] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:29:29.015 [DEBUG] [Thread-120739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:29:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:29:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:29:29.017 [DEBUG] [Thread-120739] [transport.py] [_log()] userauth is OK
2025-12-03T17:29:29.017 [DEBUG] [Thread-120739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:29:29.017 [DEBUG] [Thread-120739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:29:29.017 [DEBUG] [Thread-120739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:29:29.017 [DEBUG] [Thread-120739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:29:29.052 [INFO] [Thread-120739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:29:29.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:29:29.677 [DEBUG] [Thread-120739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:29:29.677 [DEBUG] [Thread-120739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:29:29.677 [DEBUG] [Thread-120739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:29:29.718 [DEBUG] [Thread-120739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:29:29.718 [DEBUG] [Thread-120739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:29:29.721 [DEBUG] [Thread-120739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:29:29.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:29:29.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:29:29.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:29:29.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:29:29.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:29:29.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:29:29.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:29:29.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:29:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:29:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.645187 -999.00  +21.10  23.69     26   +1.20 1 1 1 1 1   887    0 18.66 -38.71 ----- 23.7 23.7 142.4 29.3 25.2 -29.6 25.4 -29.1 27.0 -27.4 27.3 -28.7
2025-12-03T17:29:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:29:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:29:29.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.645187
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:29:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:29:20', tmtdew=23.3, humidity=20.95, cloud=0.0, wind=26.57, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:29:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:29:29.748 [DEBUG] [Thread-120739] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:29:29.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:29:29.855 [DEBUG] [Thread-120742] [transport.py] [_log()] starting thread (client mode): 0xa514b190
2025-12-03T17:29:29.855 [DEBUG] [Thread-120742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:29:29.873 [DEBUG] [Thread-120742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:29:29.874 [INFO] [Thread-120742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:29:29.884 [DEBUG] [Thread-120742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:29:29.885 [DEBUG] [Thread-120742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] client lang: <none>
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] server lang: <none>
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] kex follows: False
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] Compression: none
2025-12-03T17:29:29.886 [DEBUG] [Thread-120742] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:29:29.945 [DEBUG] [Thread-120742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:29:29.946 [DEBUG] [Thread-120742] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:29:29.946 [DEBUG] [Thread-120742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:29:29.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:29:29.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:29:30.006 [DEBUG] [Thread-120742] [transport.py] [_log()] userauth is OK
2025-12-03T17:29:30.006 [DEBUG] [Thread-120742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:29:30.006 [DEBUG] [Thread-120742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:29:30.006 [DEBUG] [Thread-120742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:29:30.006 [DEBUG] [Thread-120742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:29:30.026 [INFO] [Thread-120742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:29:30.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:29:30.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:29:30.853 [DEBUG] [Thread-120742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:29:30.854 [DEBUG] [Thread-120742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:29:30.904 [DEBUG] [Thread-120742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:29:30.904 [DEBUG] [Thread-120742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:29:30.914 [DEBUG] [Thread-120742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:29:30.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:29:30.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:29:30.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:29:30.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:29:30.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:29:30.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:29:30.951 [DEBUG] [Thread-120742] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:29:31.950 [DEBUG] [Thread-120744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:45.969 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:45.971 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:46.996 [DEBUG] [Thread-120745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:29:58.142 [DEBUG] [Thread-120746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:00.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:30:00.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:30:00.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:30:01.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 29, 52), 23.2, 20.86, 0.0, 25.23, 21.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:30:01.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:29:52
2025-12-03T17:30:01.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:30:01.926 [DEBUG] [Thread-120747] [transport.py] [_log()] starting thread (client mode): 0xa5148a30
2025-12-03T17:30:01.926 [DEBUG] [Thread-120747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:30:01.947 [DEBUG] [Thread-120747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:30:01.947 [INFO] [Thread-120747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] client lang: <none>
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] server lang: <none>
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] kex follows: False
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] Compression: none
2025-12-03T17:30:01.951 [DEBUG] [Thread-120747] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:30:01.966 [DEBUG] [Thread-120747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:30:01.966 [DEBUG] [Thread-120747] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:30:01.966 [DEBUG] [Thread-120747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:30:01.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:30:01.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:30:01.967 [DEBUG] [Thread-120747] [transport.py] [_log()] userauth is OK
2025-12-03T17:30:01.967 [DEBUG] [Thread-120747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:30:01.967 [DEBUG] [Thread-120747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:30:01.967 [DEBUG] [Thread-120747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:30:01.967 [DEBUG] [Thread-120747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:30:01.977 [INFO] [Thread-120747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:30:01.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:30:02.026 [DEBUG] [Thread-120749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:02.704 [DEBUG] [Thread-120747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:30:02.704 [DEBUG] [Thread-120747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:30:02.705 [DEBUG] [Thread-120747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:30:02.746 [DEBUG] [Thread-120747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:30:02.746 [DEBUG] [Thread-120747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:30:02.748 [DEBUG] [Thread-120747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:30:02.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:30:02.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:30:02.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:30:02.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:30:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:30:02.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:30:02.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:30:02.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:30:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:30:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.645534 -999.00  +21.00  10.32     26   +1.20 1 1 1 1 1   887    0 18.80 -35.54 ----- 10.3 10.3 148.5 21.4 25.2 -29.9 25.5 -28.6 26.9 -27.6 27.2 -28.8
2025-12-03T17:30:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:30:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:30:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.645534
2025-12-03T17:30:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:30:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:29:52', tmtdew=23.2, humidity=20.86, cloud=0.0, wind=25.23, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:29:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:30:02.777 [DEBUG] [Thread-120747] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:30:02.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:30:02.873 [DEBUG] [Thread-120751] [transport.py] [_log()] starting thread (client mode): 0xa514a650
2025-12-03T17:30:02.874 [DEBUG] [Thread-120751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:30:02.888 [DEBUG] [Thread-120751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:30:02.888 [INFO] [Thread-120751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] client lang: <none>
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] server lang: <none>
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] kex follows: False
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:30:02.895 [DEBUG] [Thread-120751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:30:02.896 [DEBUG] [Thread-120751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:30:02.896 [DEBUG] [Thread-120751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:30:02.896 [DEBUG] [Thread-120751] [transport.py] [_log()] Compression: none
2025-12-03T17:30:02.896 [DEBUG] [Thread-120751] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:30:02.954 [DEBUG] [Thread-120751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:30:02.954 [DEBUG] [Thread-120751] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:30:02.954 [DEBUG] [Thread-120751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:30:02.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:30:02.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:30:03.011 [DEBUG] [Thread-120751] [transport.py] [_log()] userauth is OK
2025-12-03T17:30:03.011 [DEBUG] [Thread-120751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:30:03.011 [DEBUG] [Thread-120751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:30:03.011 [DEBUG] [Thread-120751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:30:03.011 [DEBUG] [Thread-120751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:30:03.025 [INFO] [Thread-120751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:30:03.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:30:03.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:30:03.910 [DEBUG] [Thread-120751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:30:03.910 [DEBUG] [Thread-120751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:30:03.958 [DEBUG] [Thread-120751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:30:03.958 [DEBUG] [Thread-120751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:30:03.967 [DEBUG] [Thread-120751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:30:03.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:30:03.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:30:03.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:30:03.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:30:03.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:30:03.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:30:04.001 [DEBUG] [Thread-120751] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:30:17.056 [DEBUG] [Thread-120753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:32.102 [DEBUG] [Thread-120754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:30:34.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:30:34.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:30:34.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 30, 24), 23.12, 20.95, 0.0, 24.56, 21.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:30:34.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:30:24
2025-12-03T17:30:34.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:30:34.942 [DEBUG] [Thread-120755] [transport.py] [_log()] starting thread (client mode): 0xa27c8070
2025-12-03T17:30:34.942 [DEBUG] [Thread-120755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:30:34.962 [DEBUG] [Thread-120755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:30:34.962 [INFO] [Thread-120755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:30:34.963 [DEBUG] [Thread-120755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:30:34.963 [DEBUG] [Thread-120755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:30:34.963 [DEBUG] [Thread-120755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:30:34.963 [DEBUG] [Thread-120755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] client lang: <none>
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] server lang: <none>
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] kex follows: False
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] Compression: none
2025-12-03T17:30:34.964 [DEBUG] [Thread-120755] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:30:34.982 [DEBUG] [Thread-120755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:30:34.982 [DEBUG] [Thread-120755] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:30:34.983 [DEBUG] [Thread-120755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:30:34.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:30:34.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:30:34.985 [DEBUG] [Thread-120755] [transport.py] [_log()] userauth is OK
2025-12-03T17:30:34.985 [DEBUG] [Thread-120755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:30:34.985 [DEBUG] [Thread-120755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:30:34.985 [DEBUG] [Thread-120755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:30:34.985 [DEBUG] [Thread-120755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:30:35.020 [INFO] [Thread-120755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:30:35.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:30:35.648 [DEBUG] [Thread-120755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:30:35.648 [DEBUG] [Thread-120755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:30:35.648 [DEBUG] [Thread-120755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:30:35.689 [DEBUG] [Thread-120755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:30:35.689 [DEBUG] [Thread-120755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:30:35.692 [DEBUG] [Thread-120755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:30:35.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:30:35.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:30:35.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:30:35.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:30:35.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:30:35.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:30:35.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:30:35.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:30:35.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:30:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.645881 -999.00  +21.20  14.10     26   +1.30 1 1 1 1 1   887    0 19.27 -34.45 ----- 14.1 14.1 169.0 20.2 25.3 -29.2 25.5 -31.9 27.1 -27.3 27.3 -29.1
2025-12-03T17:30:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:30:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:30:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.645881
2025-12-03T17:30:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:30:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:30:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:30:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:30:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:30:35.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:30:24', tmtdew=23.12, humidity=20.95, cloud=0.0, wind=24.56, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:30:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:30:35.718 [DEBUG] [Thread-120755] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:30:35.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:30:35.814 [DEBUG] [Thread-120758] [transport.py] [_log()] starting thread (client mode): 0xa27c8b50
2025-12-03T17:30:35.814 [DEBUG] [Thread-120758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:30:35.829 [DEBUG] [Thread-120758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:30:35.829 [INFO] [Thread-120758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:30:35.837 [DEBUG] [Thread-120758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] client lang: <none>
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] server lang: <none>
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] kex follows: False
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:30:35.838 [DEBUG] [Thread-120758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:30:35.839 [DEBUG] [Thread-120758] [transport.py] [_log()] Compression: none
2025-12-03T17:30:35.839 [DEBUG] [Thread-120758] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:30:35.898 [DEBUG] [Thread-120758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:30:35.898 [DEBUG] [Thread-120758] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:30:35.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:30:35.900 [DEBUG] [Thread-120758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:30:35.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:30:35.961 [DEBUG] [Thread-120758] [transport.py] [_log()] userauth is OK
2025-12-03T17:30:35.962 [DEBUG] [Thread-120758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:30:35.962 [DEBUG] [Thread-120758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:30:35.962 [DEBUG] [Thread-120758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:30:35.962 [DEBUG] [Thread-120758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:30:35.982 [INFO] [Thread-120758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:30:35.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:30:35.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:30:36.846 [DEBUG] [Thread-120758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:30:36.847 [DEBUG] [Thread-120758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:30:36.895 [DEBUG] [Thread-120758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:30:36.895 [DEBUG] [Thread-120758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:30:36.904 [DEBUG] [Thread-120758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:30:36.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:30:36.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:30:36.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:30:36.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:30:36.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:30:36.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:30:36.938 [DEBUG] [Thread-120758] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:30:46.110 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:46.112 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:47.134 [DEBUG] [Thread-120760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:30:58.173 [DEBUG] [Thread-120761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:02.174 [DEBUG] [Thread-120762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:06.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:31:06.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:31:06.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:31:07.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 30, 56), 23.1, 21.03, 0.0, 26.2, 20.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:31:07.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:30:56
2025-12-03T17:31:07.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:31:07.892 [DEBUG] [Thread-120763] [transport.py] [_log()] starting thread (client mode): 0xa514a890
2025-12-03T17:31:07.892 [DEBUG] [Thread-120763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:31:07.916 [DEBUG] [Thread-120763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:31:07.916 [INFO] [Thread-120763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] client lang: <none>
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] server lang: <none>
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] kex follows: False
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] Compression: none
2025-12-03T17:31:07.920 [DEBUG] [Thread-120763] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:31:07.939 [DEBUG] [Thread-120763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:31:07.940 [DEBUG] [Thread-120763] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:31:07.940 [DEBUG] [Thread-120763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:31:07.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:31:07.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:31:07.942 [DEBUG] [Thread-120763] [transport.py] [_log()] userauth is OK
2025-12-03T17:31:07.942 [DEBUG] [Thread-120763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:31:07.942 [DEBUG] [Thread-120763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:31:07.942 [DEBUG] [Thread-120763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:31:07.942 [DEBUG] [Thread-120763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:31:07.964 [INFO] [Thread-120763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:31:07.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:31:08.705 [DEBUG] [Thread-120763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:31:08.705 [DEBUG] [Thread-120763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:31:08.706 [DEBUG] [Thread-120763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:31:08.755 [DEBUG] [Thread-120763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:31:08.755 [DEBUG] [Thread-120763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:31:08.758 [DEBUG] [Thread-120763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:31:08.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:31:08.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:31:08.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:31:08.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:31:08.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:31:08.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:31:08.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.646228 -999.00  +21.40  17.19     26   +1.30 1 1 1 1 1   887    0 19.14 -33.34 ----- 17.2 17.2 138.6 21.5 25.3 -29.7 25.5 -28.6 27.1 -29.0 27.2 -29.7
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:31:08.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.646228
2025-12-03T17:31:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:31:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:31:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:31:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:31:08.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:31:08.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:30:56', tmtdew=23.1, humidity=21.03, cloud=0.0, wind=26.2, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:30:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:31:08.779 [DEBUG] [Thread-120763] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:31:08.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:31:08.875 [DEBUG] [Thread-120766] [transport.py] [_log()] starting thread (client mode): 0xa514ad40
2025-12-03T17:31:08.875 [DEBUG] [Thread-120766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:31:08.890 [DEBUG] [Thread-120766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:31:08.890 [INFO] [Thread-120766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:31:08.898 [DEBUG] [Thread-120766] [transport.py] [_log()] client lang: <none>
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] server lang: <none>
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] kex follows: False
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] Compression: none
2025-12-03T17:31:08.899 [DEBUG] [Thread-120766] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:31:08.955 [DEBUG] [Thread-120766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:31:08.955 [DEBUG] [Thread-120766] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:31:08.956 [DEBUG] [Thread-120766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:31:08.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:31:08.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:31:09.011 [DEBUG] [Thread-120766] [transport.py] [_log()] userauth is OK
2025-12-03T17:31:09.011 [DEBUG] [Thread-120766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:31:09.011 [DEBUG] [Thread-120766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:31:09.011 [DEBUG] [Thread-120766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:31:09.011 [DEBUG] [Thread-120766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:31:09.031 [INFO] [Thread-120766] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:31:09.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:31:09.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:31:09.900 [DEBUG] [Thread-120766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:31:09.901 [DEBUG] [Thread-120766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:31:09.948 [DEBUG] [Thread-120766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:31:09.948 [DEBUG] [Thread-120766] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:31:09.957 [DEBUG] [Thread-120766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:31:09.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:31:09.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:31:09.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:31:09.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:31:09.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:31:09.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:31:09.991 [DEBUG] [Thread-120766] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:31:17.200 [DEBUG] [Thread-120768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:32.243 [DEBUG] [Thread-120769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:40.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:31:40.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:31:40.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:31:40.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 31, 28), 23.17, 20.96, 0.0, 30.3, 21.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:31:40.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:31:28
2025-12-03T17:31:40.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:31:40.963 [DEBUG] [Thread-120770] [transport.py] [_log()] starting thread (client mode): 0xa27c8850
2025-12-03T17:31:40.963 [DEBUG] [Thread-120770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:31:40.984 [DEBUG] [Thread-120770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:31:40.984 [INFO] [Thread-120770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] client lang: <none>
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] server lang: <none>
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] kex follows: False
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] Compression: none
2025-12-03T17:31:40.988 [DEBUG] [Thread-120770] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:31:41.004 [DEBUG] [Thread-120770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:31:41.004 [DEBUG] [Thread-120770] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:31:41.004 [DEBUG] [Thread-120770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:31:41.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:31:41.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:31:41.005 [DEBUG] [Thread-120770] [transport.py] [_log()] userauth is OK
2025-12-03T17:31:41.005 [DEBUG] [Thread-120770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:31:41.005 [DEBUG] [Thread-120770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:31:41.005 [DEBUG] [Thread-120770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:31:41.005 [DEBUG] [Thread-120770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:31:41.014 [INFO] [Thread-120770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:31:41.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:31:41.651 [DEBUG] [Thread-120770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:31:41.651 [DEBUG] [Thread-120770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:31:41.651 [DEBUG] [Thread-120770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:31:41.692 [DEBUG] [Thread-120770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:31:41.692 [DEBUG] [Thread-120770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:31:41.695 [DEBUG] [Thread-120770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:31:41.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:31:41.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:31:41.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:31:41.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:31:41.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:31:41.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:31:41.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.646576 -999.00  +21.40  16.67     26   +1.10 1 1 1 1 1   887    0 18.70 -33.43 ----- 16.7 16.7 145.3 28.1 25.4 -29.7 25.5 -29.4 27.1 -28.1 27.4 -29.4
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.646576
2025-12-03T17:31:41.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:31:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:31:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:31:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:31:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:31:41.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:31:28', tmtdew=23.17, humidity=20.96, cloud=0.0, wind=30.3, temperature=21.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:31:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:31:41.714 [DEBUG] [Thread-120770] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:31:41.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:31:41.803 [DEBUG] [Thread-120773] [transport.py] [_log()] starting thread (client mode): 0xa514a260
2025-12-03T17:31:41.803 [DEBUG] [Thread-120773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:31:41.818 [DEBUG] [Thread-120773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:31:41.818 [INFO] [Thread-120773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:31:41.825 [DEBUG] [Thread-120773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] client lang: <none>
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] server lang: <none>
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] kex follows: False
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] Compression: none
2025-12-03T17:31:41.826 [DEBUG] [Thread-120773] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:31:41.881 [DEBUG] [Thread-120773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:31:41.882 [DEBUG] [Thread-120773] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:31:41.882 [DEBUG] [Thread-120773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:31:41.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:31:41.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:31:41.939 [DEBUG] [Thread-120773] [transport.py] [_log()] userauth is OK
2025-12-03T17:31:41.939 [DEBUG] [Thread-120773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:31:41.939 [DEBUG] [Thread-120773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:31:41.939 [DEBUG] [Thread-120773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:31:41.939 [DEBUG] [Thread-120773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:31:41.954 [INFO] [Thread-120773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:31:41.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:31:41.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:31:42.745 [DEBUG] [Thread-120773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:31:42.745 [DEBUG] [Thread-120773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:31:42.794 [DEBUG] [Thread-120773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:31:42.794 [DEBUG] [Thread-120773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:31:42.802 [DEBUG] [Thread-120773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:31:42.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:31:42.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:31:42.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:31:42.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:31:42.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:31:42.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:31:42.834 [DEBUG] [Thread-120773] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:31:46.256 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:46.257 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:47.270 [DEBUG] [Thread-120775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:31:58.208 [DEBUG] [Thread-120776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:02.312 [DEBUG] [Thread-120777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:32:12.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:32:12.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:32:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 32), 23.26, 20.91, 0.0, 23.98, 21.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:32:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:32:00
2025-12-03T17:32:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:32:13.809 [DEBUG] [Thread-120778] [transport.py] [_log()] starting thread (client mode): 0xa27c9360
2025-12-03T17:32:13.809 [DEBUG] [Thread-120778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:32:13.830 [DEBUG] [Thread-120778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:32:13.831 [INFO] [Thread-120778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] client lang: <none>
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] server lang: <none>
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] kex follows: False
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] Compression: none
2025-12-03T17:32:13.834 [DEBUG] [Thread-120778] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:32:13.843 [DEBUG] [Thread-120778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:32:13.843 [DEBUG] [Thread-120778] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:32:13.844 [DEBUG] [Thread-120778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:32:13.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:32:13.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:32:13.845 [DEBUG] [Thread-120778] [transport.py] [_log()] userauth is OK
2025-12-03T17:32:13.845 [DEBUG] [Thread-120778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:32:13.846 [DEBUG] [Thread-120778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:32:13.846 [DEBUG] [Thread-120778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:32:13.846 [DEBUG] [Thread-120778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:32:13.880 [INFO] [Thread-120778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:32:13.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:32:14.596 [DEBUG] [Thread-120778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:32:14.596 [DEBUG] [Thread-120778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:32:14.597 [DEBUG] [Thread-120778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:32:14.638 [DEBUG] [Thread-120778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:32:14.638 [DEBUG] [Thread-120778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:32:14.640 [DEBUG] [Thread-120778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:32:14.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:32:14.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:32:14.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:32:14.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:32:14.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:32:14.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:32:14.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:32:14.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:32:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:32:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.646923 -999.00  +21.20  16.26     26   +1.20 1 1 1 1 1   887    0 18.65 -34.50 ----- 16.3 16.3 139.6 19.7 25.2 -29.9 25.5 -29.2 27.1 -27.5 27.3 -29.1
2025-12-03T17:32:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:32:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:32:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.646923
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:32:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:32:00', tmtdew=23.26, humidity=20.91, cloud=0.0, wind=23.98, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:31:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:32:14.666 [DEBUG] [Thread-120778] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:32:14.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:32:14.760 [DEBUG] [Thread-120781] [transport.py] [_log()] starting thread (client mode): 0xa277b430
2025-12-03T17:32:14.760 [DEBUG] [Thread-120781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:32:14.775 [DEBUG] [Thread-120781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:32:14.775 [INFO] [Thread-120781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:14.783 [DEBUG] [Thread-120781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] client lang: <none>
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] server lang: <none>
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] kex follows: False
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:32:14.784 [DEBUG] [Thread-120781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:32:14.785 [DEBUG] [Thread-120781] [transport.py] [_log()] Compression: none
2025-12-03T17:32:14.785 [DEBUG] [Thread-120781] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:32:14.837 [DEBUG] [Thread-120781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:32:14.837 [DEBUG] [Thread-120781] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:32:14.838 [DEBUG] [Thread-120781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:32:14.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:32:14.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:32:14.899 [DEBUG] [Thread-120781] [transport.py] [_log()] userauth is OK
2025-12-03T17:32:14.899 [DEBUG] [Thread-120781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:32:14.899 [DEBUG] [Thread-120781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:32:14.900 [DEBUG] [Thread-120781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:32:14.900 [DEBUG] [Thread-120781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:32:14.919 [INFO] [Thread-120781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:32:14.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:32:14.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:32:15.755 [DEBUG] [Thread-120781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:32:15.755 [DEBUG] [Thread-120781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:32:15.804 [DEBUG] [Thread-120781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:32:15.804 [DEBUG] [Thread-120781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:32:15.812 [DEBUG] [Thread-120781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:32:15.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:32:15.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:32:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:32:15.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:32:15.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:32:15.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:32:15.848 [DEBUG] [Thread-120781] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:32:17.337 [DEBUG] [Thread-120783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:32.380 [DEBUG] [Thread-120784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:45.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:32:45.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:32:46.396 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:46.397 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:46.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 32, 32), 23.13, 21.08, 0.0, 23.75, 21.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:32:46.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:32:32
2025-12-03T17:32:46.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:32:46.796 [DEBUG] [Thread-120785] [transport.py] [_log()] starting thread (client mode): 0xa2761990
2025-12-03T17:32:46.796 [DEBUG] [Thread-120785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:32:46.816 [DEBUG] [Thread-120785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:32:46.816 [INFO] [Thread-120785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:32:46.819 [DEBUG] [Thread-120785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] client lang: <none>
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] server lang: <none>
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] kex follows: False
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] Compression: none
2025-12-03T17:32:46.820 [DEBUG] [Thread-120785] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:32:46.837 [DEBUG] [Thread-120785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:32:46.838 [DEBUG] [Thread-120785] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:32:46.838 [DEBUG] [Thread-120785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:32:46.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:32:46.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:32:46.839 [DEBUG] [Thread-120785] [transport.py] [_log()] userauth is OK
2025-12-03T17:32:46.839 [DEBUG] [Thread-120785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:32:46.839 [DEBUG] [Thread-120785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:32:46.839 [DEBUG] [Thread-120785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:32:46.839 [DEBUG] [Thread-120785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:32:46.849 [INFO] [Thread-120785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:32:46.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:32:47.415 [DEBUG] [Thread-120787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:32:47.485 [DEBUG] [Thread-120785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:32:47.485 [DEBUG] [Thread-120785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:32:47.485 [DEBUG] [Thread-120785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:32:47.526 [DEBUG] [Thread-120785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:32:47.526 [DEBUG] [Thread-120785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:32:47.529 [DEBUG] [Thread-120785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:32:47.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:32:47.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:32:47.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:32:47.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:32:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:32:47.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:32:47.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:32:47.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.647270 -999.00  +21.00  25.33     26   +1.10 1 1 1 1 1   887    0 18.78 -35.43 ----- 25.3 25.3 137.6 32.3 25.2 -29.5 25.5 -29.4 27.0 -28.1 27.2 -30.2
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.647270
2025-12-03T17:32:47.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:32:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:32:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:32:47.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:32:47.553 [DEBUG] [Thread-120785] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:32:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:32:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:32:32', tmtdew=23.13, humidity=21.08, cloud=0.0, wind=23.75, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:32:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:32:47.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:32:47.655 [DEBUG] [Thread-120789] [transport.py] [_log()] starting thread (client mode): 0xa27c9270
2025-12-03T17:32:47.655 [DEBUG] [Thread-120789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:32:47.670 [DEBUG] [Thread-120789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:32:47.670 [INFO] [Thread-120789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] client lang: <none>
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] server lang: <none>
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] kex follows: False
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:32:47.678 [DEBUG] [Thread-120789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:32:47.679 [DEBUG] [Thread-120789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:32:47.679 [DEBUG] [Thread-120789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:32:47.679 [DEBUG] [Thread-120789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:32:47.679 [DEBUG] [Thread-120789] [transport.py] [_log()] Compression: none
2025-12-03T17:32:47.679 [DEBUG] [Thread-120789] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:32:47.735 [DEBUG] [Thread-120789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:32:47.736 [DEBUG] [Thread-120789] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:32:47.736 [DEBUG] [Thread-120789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:32:47.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:32:47.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:32:47.791 [DEBUG] [Thread-120789] [transport.py] [_log()] userauth is OK
2025-12-03T17:32:47.792 [DEBUG] [Thread-120789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:32:47.792 [DEBUG] [Thread-120789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:32:47.792 [DEBUG] [Thread-120789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:32:47.792 [DEBUG] [Thread-120789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:32:47.811 [INFO] [Thread-120789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:32:47.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:32:47.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:32:48.665 [DEBUG] [Thread-120789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:32:48.665 [DEBUG] [Thread-120789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:32:48.713 [DEBUG] [Thread-120789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:32:48.713 [DEBUG] [Thread-120789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:32:48.722 [DEBUG] [Thread-120789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:32:48.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:32:48.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:32:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:32:48.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:32:48.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:32:48.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:32:48.756 [DEBUG] [Thread-120789] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:32:58.237 [DEBUG] [Thread-120791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:02.444 [DEBUG] [Thread-120792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:17.491 [DEBUG] [Thread-120793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:33:18.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:33:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:33:19.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 33, 4), 22.94, 21.29, 0.0, 21.21, 20.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:33:19.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:33:04
2025-12-03T17:33:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:33:19.694 [DEBUG] [Thread-120794] [transport.py] [_log()] starting thread (client mode): 0xa272b070
2025-12-03T17:33:19.694 [DEBUG] [Thread-120794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:33:19.713 [DEBUG] [Thread-120794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:33:19.713 [INFO] [Thread-120794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:19.717 [DEBUG] [Thread-120794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] client lang: <none>
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] server lang: <none>
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] kex follows: False
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] Compression: none
2025-12-03T17:33:19.718 [DEBUG] [Thread-120794] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:33:19.736 [DEBUG] [Thread-120794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:33:19.737 [DEBUG] [Thread-120794] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:33:19.737 [DEBUG] [Thread-120794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:33:19.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:33:19.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:33:19.739 [DEBUG] [Thread-120794] [transport.py] [_log()] userauth is OK
2025-12-03T17:33:19.739 [DEBUG] [Thread-120794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:33:19.739 [DEBUG] [Thread-120794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:33:19.739 [DEBUG] [Thread-120794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:33:19.739 [DEBUG] [Thread-120794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:33:19.775 [INFO] [Thread-120794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:33:19.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:33:20.486 [DEBUG] [Thread-120794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:33:20.486 [DEBUG] [Thread-120794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:33:20.487 [DEBUG] [Thread-120794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:33:20.527 [DEBUG] [Thread-120794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:33:20.527 [DEBUG] [Thread-120794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:33:20.529 [DEBUG] [Thread-120794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:33:20.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:33:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:33:20.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:33:20.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:33:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:33:20.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:33:20.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:33:20.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:33:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:33:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.647617 -999.00  +20.70  17.75     27   +1.10 1 1 1 1 1   887    0 18.76 -34.71 ----- 17.8 17.8 132.6 28.7 25.1 -30.1 25.5 -29.1 26.9 -28.7 27.1 -30.0
2025-12-03T17:33:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:33:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:33:20.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.647617
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:33:20.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:33:04', tmtdew=22.94, humidity=21.29, cloud=0.0, wind=21.21, temperature=20.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:32:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:33:20.556 [DEBUG] [Thread-120794] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:33:20.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:33:20.651 [DEBUG] [Thread-120797] [transport.py] [_log()] starting thread (client mode): 0xa514a3e0
2025-12-03T17:33:20.652 [DEBUG] [Thread-120797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:33:20.666 [DEBUG] [Thread-120797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:33:20.666 [INFO] [Thread-120797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:33:20.673 [DEBUG] [Thread-120797] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] client lang: <none>
2025-12-03T17:33:20.674 [DEBUG] [Thread-120797] [transport.py] [_log()] server lang: <none>
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] kex follows: False
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] Compression: none
2025-12-03T17:33:20.675 [DEBUG] [Thread-120797] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:33:20.731 [DEBUG] [Thread-120797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:33:20.731 [DEBUG] [Thread-120797] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:33:20.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:33:20.732 [DEBUG] [Thread-120797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:33:20.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:33:20.787 [DEBUG] [Thread-120797] [transport.py] [_log()] userauth is OK
2025-12-03T17:33:20.787 [DEBUG] [Thread-120797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:33:20.788 [DEBUG] [Thread-120797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:33:20.788 [DEBUG] [Thread-120797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:33:20.788 [DEBUG] [Thread-120797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:33:20.806 [INFO] [Thread-120797] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:33:20.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:33:20.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:33:21.624 [DEBUG] [Thread-120797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:33:21.624 [DEBUG] [Thread-120797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:33:21.672 [DEBUG] [Thread-120797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:33:21.672 [DEBUG] [Thread-120797] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:33:21.680 [DEBUG] [Thread-120797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:33:21.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:33:21.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:33:21.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:33:21.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:33:21.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:33:21.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:33:21.715 [DEBUG] [Thread-120797] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:33:32.525 [DEBUG] [Thread-120799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:46.541 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:46.542 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:47.561 [DEBUG] [Thread-120800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:33:51.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:33:51.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:33:51.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:33:52.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 33, 36), 22.81, 21.68, 0.0, 27.53, 20.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:33:52.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:33:36
2025-12-03T17:33:52.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:33:52.678 [DEBUG] [Thread-120801] [transport.py] [_log()] starting thread (client mode): 0xa2761c60
2025-12-03T17:33:52.678 [DEBUG] [Thread-120801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:33:52.699 [DEBUG] [Thread-120801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:33:52.699 [INFO] [Thread-120801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:33:52.702 [DEBUG] [Thread-120801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:33:52.702 [DEBUG] [Thread-120801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:33:52.702 [DEBUG] [Thread-120801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] client lang: <none>
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] server lang: <none>
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] kex follows: False
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:33:52.703 [DEBUG] [Thread-120801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:33:52.704 [DEBUG] [Thread-120801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:33:52.704 [DEBUG] [Thread-120801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:33:52.704 [DEBUG] [Thread-120801] [transport.py] [_log()] Compression: none
2025-12-03T17:33:52.704 [DEBUG] [Thread-120801] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:33:52.722 [DEBUG] [Thread-120801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:33:52.722 [DEBUG] [Thread-120801] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:33:52.723 [DEBUG] [Thread-120801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:33:52.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:33:52.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:33:52.725 [DEBUG] [Thread-120801] [transport.py] [_log()] userauth is OK
2025-12-03T17:33:52.725 [DEBUG] [Thread-120801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:33:52.726 [DEBUG] [Thread-120801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:33:52.726 [DEBUG] [Thread-120801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:33:52.726 [DEBUG] [Thread-120801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:33:52.761 [INFO] [Thread-120801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:33:52.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:33:53.378 [DEBUG] [Thread-120801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:33:53.378 [DEBUG] [Thread-120801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:33:53.378 [DEBUG] [Thread-120801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:33:53.419 [DEBUG] [Thread-120801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:33:53.419 [DEBUG] [Thread-120801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:33:53.422 [DEBUG] [Thread-120801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:33:53.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:33:53.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:33:53.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:33:53.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:33:53.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:33:53.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:33:53.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:33:53.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:33:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:33:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.647964 -999.00  +20.80  12.90     27   +1.20 1 1 1 1 1   887    0 18.64 -38.37 ----- 12.9 12.9 149.6 22.4 25.1 -29.7 25.4 -29.6 26.9 -27.7 27.1 -30.2
2025-12-03T17:33:53.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:33:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:33:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.647964
2025-12-03T17:33:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:33:53.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:33:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:33:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:33:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:33:53.447 [DEBUG] [Thread-120801] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:33:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:33:36', tmtdew=22.81, humidity=21.68, cloud=0.0, wind=27.53, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:33:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:33:53.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:33:53.544 [DEBUG] [Thread-120804] [transport.py] [_log()] starting thread (client mode): 0xa277aad0
2025-12-03T17:33:53.544 [DEBUG] [Thread-120804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:33:53.559 [DEBUG] [Thread-120804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:33:53.559 [INFO] [Thread-120804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:33:53.566 [DEBUG] [Thread-120804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] client lang: <none>
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] server lang: <none>
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] kex follows: False
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:33:53.567 [DEBUG] [Thread-120804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:33:53.568 [DEBUG] [Thread-120804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:33:53.568 [DEBUG] [Thread-120804] [transport.py] [_log()] Compression: none
2025-12-03T17:33:53.568 [DEBUG] [Thread-120804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:33:53.623 [DEBUG] [Thread-120804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:33:53.623 [DEBUG] [Thread-120804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:33:53.624 [DEBUG] [Thread-120804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:33:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:33:53.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:33:53.679 [DEBUG] [Thread-120804] [transport.py] [_log()] userauth is OK
2025-12-03T17:33:53.680 [DEBUG] [Thread-120804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:33:53.680 [DEBUG] [Thread-120804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:33:53.680 [DEBUG] [Thread-120804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:33:53.680 [DEBUG] [Thread-120804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:33:53.701 [INFO] [Thread-120804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:33:53.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:33:53.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:33:54.572 [DEBUG] [Thread-120804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:33:54.573 [DEBUG] [Thread-120804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:33:54.624 [DEBUG] [Thread-120804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:33:54.624 [DEBUG] [Thread-120804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:33:54.632 [DEBUG] [Thread-120804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:33:54.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:33:54.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:33:54.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:33:54.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:33:54.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:33:54.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:33:54.664 [DEBUG] [Thread-120804] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:33:58.292 [DEBUG] [Thread-120806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:02.595 [DEBUG] [Thread-120807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:17.637 [DEBUG] [Thread-120808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:24.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:34:24.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:34:24.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:34:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 34, 8), 22.89, 21.56, 0.0, 26.98, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:34:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:34:08
2025-12-03T17:34:25.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:34:25.610 [DEBUG] [Thread-120809] [transport.py] [_log()] starting thread (client mode): 0xa272aa10
2025-12-03T17:34:25.610 [DEBUG] [Thread-120809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:34:25.631 [DEBUG] [Thread-120809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:34:25.631 [INFO] [Thread-120809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:34:25.632 [DEBUG] [Thread-120809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] client lang: <none>
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] server lang: <none>
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] kex follows: False
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:34:25.633 [DEBUG] [Thread-120809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:34:25.634 [DEBUG] [Thread-120809] [transport.py] [_log()] Compression: none
2025-12-03T17:34:25.634 [DEBUG] [Thread-120809] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:34:25.653 [DEBUG] [Thread-120809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:34:25.653 [DEBUG] [Thread-120809] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:34:25.654 [DEBUG] [Thread-120809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:34:25.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:34:25.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:34:25.655 [DEBUG] [Thread-120809] [transport.py] [_log()] userauth is OK
2025-12-03T17:34:25.655 [DEBUG] [Thread-120809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:34:25.656 [DEBUG] [Thread-120809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:34:25.656 [DEBUG] [Thread-120809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:34:25.656 [DEBUG] [Thread-120809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:34:25.679 [INFO] [Thread-120809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:34:25.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:34:26.451 [DEBUG] [Thread-120809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:34:26.451 [DEBUG] [Thread-120809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:34:26.451 [DEBUG] [Thread-120809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:34:26.493 [DEBUG] [Thread-120809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:34:26.493 [DEBUG] [Thread-120809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:34:26.496 [DEBUG] [Thread-120809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:34:26.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:34:26.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:34:26.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:34:26.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:34:26.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:34:26.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:34:26.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:34:26.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.648312 -999.00  +21.00  18.93     27   +1.50 1 1 1 1 1   887    0 18.60 -40.49 ----- 18.9 18.9 166.4 29.1 25.1 -29.5 25.4 -30.2 26.9 -27.8 27.1 -29.3
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.648312
2025-12-03T17:34:26.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:34:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:34:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:34:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:34:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:34:26.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:34:08', tmtdew=22.89, humidity=21.56, cloud=0.0, wind=26.98, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:33:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:34:26.523 [DEBUG] [Thread-120809] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:34:26.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:34:26.618 [DEBUG] [Thread-120812] [transport.py] [_log()] starting thread (client mode): 0xa27c9ed0
2025-12-03T17:34:26.619 [DEBUG] [Thread-120812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:34:26.634 [DEBUG] [Thread-120812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:34:26.634 [INFO] [Thread-120812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:34:26.641 [DEBUG] [Thread-120812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] client lang: <none>
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] server lang: <none>
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] kex follows: False
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] Compression: none
2025-12-03T17:34:26.642 [DEBUG] [Thread-120812] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:34:26.699 [DEBUG] [Thread-120812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:34:26.699 [DEBUG] [Thread-120812] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:34:26.700 [DEBUG] [Thread-120812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:34:26.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:34:26.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:34:26.755 [DEBUG] [Thread-120812] [transport.py] [_log()] userauth is OK
2025-12-03T17:34:26.756 [DEBUG] [Thread-120812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:34:26.756 [DEBUG] [Thread-120812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:34:26.756 [DEBUG] [Thread-120812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:34:26.756 [DEBUG] [Thread-120812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:34:26.775 [INFO] [Thread-120812] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:34:26.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:34:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:34:27.664 [DEBUG] [Thread-120812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:34:27.665 [DEBUG] [Thread-120812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:34:27.713 [DEBUG] [Thread-120812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:34:27.713 [DEBUG] [Thread-120812] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:34:27.722 [DEBUG] [Thread-120812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:34:27.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:34:27.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:34:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:34:27.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:34:27.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:34:27.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:34:27.758 [DEBUG] [Thread-120812] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:34:32.667 [DEBUG] [Thread-120814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:46.689 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:46.690 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:47.712 [DEBUG] [Thread-120815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:34:57.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:34:57.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:34:58.320 [DEBUG] [Thread-120816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:34:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 34, 40), 22.78, 21.68, 0.0, 27.38, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:34:58.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:34:40
2025-12-03T17:34:58.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:34:58.733 [DEBUG] [Thread-120817] [transport.py] [_log()] starting thread (client mode): 0xa272a290
2025-12-03T17:34:58.733 [DEBUG] [Thread-120817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:34:58.752 [DEBUG] [Thread-120817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:34:58.752 [INFO] [Thread-120817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:58.756 [DEBUG] [Thread-120817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] client lang: <none>
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] server lang: <none>
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] kex follows: False
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] Compression: none
2025-12-03T17:34:58.757 [DEBUG] [Thread-120817] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:34:58.774 [DEBUG] [Thread-120817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:34:58.775 [DEBUG] [Thread-120817] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:34:58.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:34:58.776 [DEBUG] [Thread-120817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:34:58.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:34:58.778 [DEBUG] [Thread-120817] [transport.py] [_log()] userauth is OK
2025-12-03T17:34:58.779 [DEBUG] [Thread-120817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:34:58.779 [DEBUG] [Thread-120817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:34:58.779 [DEBUG] [Thread-120817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:34:58.779 [DEBUG] [Thread-120817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:34:58.796 [INFO] [Thread-120817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:34:58.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:34:59.389 [DEBUG] [Thread-120817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:34:59.389 [DEBUG] [Thread-120817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:34:59.389 [DEBUG] [Thread-120817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:34:59.430 [DEBUG] [Thread-120817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:34:59.430 [DEBUG] [Thread-120817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:34:59.433 [DEBUG] [Thread-120817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:34:59.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:34:59.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:34:59.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:34:59.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:34:59.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:34:59.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:34:59.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:34:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.649006 -999.00  +21.10  21.15     27   +1.50 1 1 1 1 1   887    0 18.55 -44.60 ----- 21.1 21.1 165.0 28.8 25.0 -31.1 25.0 -29.6 26.6 -29.4 26.9 -29.8
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.649006
2025-12-03T17:34:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:34:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:34:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:34:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:34:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:34:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:34:40', tmtdew=22.78, humidity=21.68, cloud=0.0, wind=27.38, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:34:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:34:59.458 [DEBUG] [Thread-120817] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:34:59.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:34:59.554 [DEBUG] [Thread-120820] [transport.py] [_log()] starting thread (client mode): 0xa514a830
2025-12-03T17:34:59.554 [DEBUG] [Thread-120820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:34:59.569 [DEBUG] [Thread-120820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:34:59.569 [INFO] [Thread-120820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:34:59.576 [DEBUG] [Thread-120820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:34:59.577 [DEBUG] [Thread-120820] [transport.py] [_log()] client lang: <none>
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] server lang: <none>
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] kex follows: False
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:34:59.578 [DEBUG] [Thread-120820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:34:59.579 [DEBUG] [Thread-120820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:34:59.579 [DEBUG] [Thread-120820] [transport.py] [_log()] Compression: none
2025-12-03T17:34:59.579 [DEBUG] [Thread-120820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:34:59.636 [DEBUG] [Thread-120820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:34:59.637 [DEBUG] [Thread-120820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:34:59.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:34:59.638 [DEBUG] [Thread-120820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:34:59.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:34:59.691 [DEBUG] [Thread-120820] [transport.py] [_log()] userauth is OK
2025-12-03T17:34:59.692 [DEBUG] [Thread-120820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:34:59.692 [DEBUG] [Thread-120820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:34:59.692 [DEBUG] [Thread-120820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:34:59.692 [DEBUG] [Thread-120820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:34:59.721 [INFO] [Thread-120820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:34:59.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:34:59.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:35:00.560 [DEBUG] [Thread-120820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:35:00.561 [DEBUG] [Thread-120820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:35:00.609 [DEBUG] [Thread-120820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:35:00.609 [DEBUG] [Thread-120820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:35:00.618 [DEBUG] [Thread-120820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:35:00.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:35:00.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:35:00.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:35:00.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:35:00.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:35:00.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:35:00.652 [DEBUG] [Thread-120820] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:35:02.741 [DEBUG] [Thread-120822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:17.789 [DEBUG] [Thread-120823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:30.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:35:30.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:35:30.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:35:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 35, 12), 22.63, 21.93, 0.0, 26.47, 20.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:35:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:35:12
2025-12-03T17:35:31.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:35:31.656 [DEBUG] [Thread-120824] [transport.py] [_log()] starting thread (client mode): 0xa2779540
2025-12-03T17:35:31.656 [DEBUG] [Thread-120824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:35:31.677 [DEBUG] [Thread-120824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:35:31.677 [INFO] [Thread-120824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] client lang: <none>
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] server lang: <none>
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] kex follows: False
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:35:31.680 [DEBUG] [Thread-120824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:35:31.681 [DEBUG] [Thread-120824] [transport.py] [_log()] Compression: none
2025-12-03T17:35:31.681 [DEBUG] [Thread-120824] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:35:31.694 [DEBUG] [Thread-120824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:35:31.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:35:31.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] userauth is OK
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:35:31.695 [DEBUG] [Thread-120824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:35:31.710 [INFO] [Thread-120824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:35:31.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:35:32.465 [DEBUG] [Thread-120824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:35:32.465 [DEBUG] [Thread-120824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:35:32.465 [DEBUG] [Thread-120824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:35:32.507 [DEBUG] [Thread-120824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:35:32.507 [DEBUG] [Thread-120824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:35:32.509 [DEBUG] [Thread-120824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:35:32.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:35:32.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:35:32.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:35:32.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:35:32.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:35:32.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:35:32.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.649353 -999.00  +21.00  19.86     27   +1.40 1 1 1 1 1   887    0 18.64 -43.35 ----- 19.9 19.9 173.4 30.5 24.9 -31.0 25.0 -30.3 26.6 -28.3 26.8 -29.9
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.649353
2025-12-03T17:35:32.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:35:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:35:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:35:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:35:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:35:32.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:35:12', tmtdew=22.63, humidity=21.93, cloud=0.0, wind=26.47, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:35:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:35:32.528 [DEBUG] [Thread-120824] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:35:32.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:35:32.614 [DEBUG] [Thread-120827] [transport.py] [_log()] starting thread (client mode): 0xa514a1d0
2025-12-03T17:35:32.614 [DEBUG] [Thread-120827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:35:32.629 [DEBUG] [Thread-120827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:35:32.629 [INFO] [Thread-120827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] client lang: <none>
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] server lang: <none>
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] kex follows: False
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] Compression: none
2025-12-03T17:35:32.636 [DEBUG] [Thread-120827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:35:32.693 [DEBUG] [Thread-120827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:35:32.693 [DEBUG] [Thread-120827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:35:32.693 [DEBUG] [Thread-120827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:35:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:35:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:35:32.751 [DEBUG] [Thread-120827] [transport.py] [_log()] userauth is OK
2025-12-03T17:35:32.751 [DEBUG] [Thread-120827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:35:32.751 [DEBUG] [Thread-120827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:35:32.751 [DEBUG] [Thread-120827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:35:32.751 [DEBUG] [Thread-120827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:35:32.765 [INFO] [Thread-120827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:35:32.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:35:32.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:35:32.816 [DEBUG] [Thread-120829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:33.629 [DEBUG] [Thread-120827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:35:33.629 [DEBUG] [Thread-120827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:35:33.676 [DEBUG] [Thread-120827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:35:33.677 [DEBUG] [Thread-120827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:35:33.685 [DEBUG] [Thread-120827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:35:33.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:35:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:35:33.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:35:33.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:35:33.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:35:33.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:35:33.721 [DEBUG] [Thread-120827] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:35:46.842 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:46.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:47.852 [DEBUG] [Thread-120830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:35:58.359 [DEBUG] [Thread-120831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:02.881 [DEBUG] [Thread-120832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:03.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:36:03.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:36:03.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:36:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 35, 44), 22.73, 21.93, 0.0, 25.21, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:36:04.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:35:44
2025-12-03T17:36:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:36:04.684 [DEBUG] [Thread-120833] [transport.py] [_log()] starting thread (client mode): 0xa514b010
2025-12-03T17:36:04.684 [DEBUG] [Thread-120833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:36:04.704 [DEBUG] [Thread-120833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:36:04.704 [INFO] [Thread-120833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] client lang: <none>
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] server lang: <none>
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] kex follows: False
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] Compression: none
2025-12-03T17:36:04.708 [DEBUG] [Thread-120833] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:36:04.726 [DEBUG] [Thread-120833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:36:04.726 [DEBUG] [Thread-120833] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:36:04.727 [DEBUG] [Thread-120833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:36:04.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:36:04.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:36:04.729 [DEBUG] [Thread-120833] [transport.py] [_log()] userauth is OK
2025-12-03T17:36:04.729 [DEBUG] [Thread-120833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:36:04.729 [DEBUG] [Thread-120833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:36:04.729 [DEBUG] [Thread-120833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:36:04.729 [DEBUG] [Thread-120833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:36:04.765 [INFO] [Thread-120833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:36:04.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:36:05.435 [DEBUG] [Thread-120833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:36:05.436 [DEBUG] [Thread-120833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:36:05.436 [DEBUG] [Thread-120833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:36:05.477 [DEBUG] [Thread-120833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:36:05.477 [DEBUG] [Thread-120833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:36:05.480 [DEBUG] [Thread-120833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:36:05.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:36:05.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:36:05.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:36:05.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:36:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:36:05.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:36:05.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:36:05.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.649700 -999.00  +20.90  21.04     27   +1.30 1 1 1 1 1   887    0 18.35 -44.38 ----- 21.0 21.0 175.4 25.3 24.9 -30.1 24.8 -30.7 26.7 -27.3 26.9 -30.1
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.649700
2025-12-03T17:36:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:36:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:36:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:36:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:36:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:36:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:35:44', tmtdew=22.73, humidity=21.93, cloud=0.0, wind=25.21, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:35:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:36:05.504 [DEBUG] [Thread-120833] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:36:05.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:36:05.600 [DEBUG] [Thread-120836] [transport.py] [_log()] starting thread (client mode): 0xa27530d0
2025-12-03T17:36:05.600 [DEBUG] [Thread-120836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:36:05.615 [DEBUG] [Thread-120836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:36:05.615 [INFO] [Thread-120836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] client lang: <none>
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] server lang: <none>
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] kex follows: False
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:36:05.623 [DEBUG] [Thread-120836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:36:05.624 [DEBUG] [Thread-120836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:36:05.624 [DEBUG] [Thread-120836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:36:05.624 [DEBUG] [Thread-120836] [transport.py] [_log()] Compression: none
2025-12-03T17:36:05.624 [DEBUG] [Thread-120836] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:36:05.684 [DEBUG] [Thread-120836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:36:05.684 [DEBUG] [Thread-120836] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:36:05.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:36:05.685 [DEBUG] [Thread-120836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:36:05.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:36:05.743 [DEBUG] [Thread-120836] [transport.py] [_log()] userauth is OK
2025-12-03T17:36:05.743 [DEBUG] [Thread-120836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:36:05.743 [DEBUG] [Thread-120836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:36:05.744 [DEBUG] [Thread-120836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:36:05.744 [DEBUG] [Thread-120836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:36:05.763 [INFO] [Thread-120836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:36:05.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:36:05.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:36:06.609 [DEBUG] [Thread-120836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:36:06.609 [DEBUG] [Thread-120836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:36:06.657 [DEBUG] [Thread-120836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:36:06.657 [DEBUG] [Thread-120836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:36:06.665 [DEBUG] [Thread-120836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:36:06.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:36:06.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:36:06.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:36:06.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:36:06.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:36:06.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:36:06.697 [DEBUG] [Thread-120836] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:36:17.909 [DEBUG] [Thread-120838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:32.945 [DEBUG] [Thread-120839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:36.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:36:36.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:36:36.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:36:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 36, 16), 22.74, 21.91, 0.0, 27.54, 20.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:36:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:36:16
2025-12-03T17:36:37.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:36:37.638 [DEBUG] [Thread-120840] [transport.py] [_log()] starting thread (client mode): 0xa2729030
2025-12-03T17:36:37.639 [DEBUG] [Thread-120840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:36:37.665 [DEBUG] [Thread-120840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:36:37.665 [INFO] [Thread-120840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] client lang: <none>
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] server lang: <none>
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] kex follows: False
2025-12-03T17:36:37.669 [DEBUG] [Thread-120840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] Compression: none
2025-12-03T17:36:37.670 [DEBUG] [Thread-120840] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:36:37.684 [DEBUG] [Thread-120840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:36:37.685 [DEBUG] [Thread-120840] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:36:37.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:36:37.686 [DEBUG] [Thread-120840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:36:37.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:36:37.688 [DEBUG] [Thread-120840] [transport.py] [_log()] userauth is OK
2025-12-03T17:36:37.688 [DEBUG] [Thread-120840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:36:37.688 [DEBUG] [Thread-120840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:36:37.688 [DEBUG] [Thread-120840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:36:37.688 [DEBUG] [Thread-120840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:36:37.723 [INFO] [Thread-120840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:36:37.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:36:38.434 [DEBUG] [Thread-120840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:36:38.434 [DEBUG] [Thread-120840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:36:38.434 [DEBUG] [Thread-120840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:36:38.475 [DEBUG] [Thread-120840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:36:38.475 [DEBUG] [Thread-120840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:36:38.478 [DEBUG] [Thread-120840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:36:38.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:36:38.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:36:38.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:36:38.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:36:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:36:38.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:36:38.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:36:38.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:36:38.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:36:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.650048 -999.00  +20.90  16.43     27   +1.30 1 1 1 1 1   887    0 18.94 -43.78 ----- 16.4 16.4 161.4 24.2 24.9 -29.3 25.1 -29.0 26.6 -28.2 26.8 -29.5
2025-12-03T17:36:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:36:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:36:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.650048
2025-12-03T17:36:38.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:36:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:36:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:36:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:36:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:36:38.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:36:16', tmtdew=22.74, humidity=21.91, cloud=0.0, wind=27.54, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:36:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:36:38.505 [DEBUG] [Thread-120840] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:36:38.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:36:38.599 [DEBUG] [Thread-120843] [transport.py] [_log()] starting thread (client mode): 0xa272a2c0
2025-12-03T17:36:38.599 [DEBUG] [Thread-120843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:36:38.614 [DEBUG] [Thread-120843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:36:38.614 [INFO] [Thread-120843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:36:38.622 [DEBUG] [Thread-120843] [transport.py] [_log()] client lang: <none>
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] server lang: <none>
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] kex follows: False
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] Compression: none
2025-12-03T17:36:38.623 [DEBUG] [Thread-120843] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:36:38.679 [DEBUG] [Thread-120843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:36:38.679 [DEBUG] [Thread-120843] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:36:38.680 [DEBUG] [Thread-120843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:36:38.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:36:38.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:36:38.735 [DEBUG] [Thread-120843] [transport.py] [_log()] userauth is OK
2025-12-03T17:36:38.736 [DEBUG] [Thread-120843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:36:38.736 [DEBUG] [Thread-120843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:36:38.736 [DEBUG] [Thread-120843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:36:38.736 [DEBUG] [Thread-120843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:36:38.758 [INFO] [Thread-120843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:36:38.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:36:38.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:36:39.621 [DEBUG] [Thread-120843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:36:39.622 [DEBUG] [Thread-120843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:36:39.670 [DEBUG] [Thread-120843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:36:39.670 [DEBUG] [Thread-120843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:36:39.681 [DEBUG] [Thread-120843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:36:39.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:36:39.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:36:39.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:36:39.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:36:39.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:36:39.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:36:39.719 [DEBUG] [Thread-120843] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:36:46.984 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:46.985 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:47.973 [DEBUG] [Thread-120845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:36:58.404 [DEBUG] [Thread-120846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:03.009 [DEBUG] [Thread-120847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:09.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:37:09.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:37:09.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:37:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 36, 48), 22.75, 21.48, 0.0, 25.35, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:37:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:36:48
2025-12-03T17:37:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:37:10.659 [DEBUG] [Thread-120848] [transport.py] [_log()] starting thread (client mode): 0xa277a020
2025-12-03T17:37:10.659 [DEBUG] [Thread-120848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:37:10.678 [DEBUG] [Thread-120848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:37:10.678 [INFO] [Thread-120848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:37:10.681 [DEBUG] [Thread-120848] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] client lang: <none>
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] server lang: <none>
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] kex follows: False
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:37:10.682 [DEBUG] [Thread-120848] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:37:10.683 [DEBUG] [Thread-120848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:37:10.683 [DEBUG] [Thread-120848] [transport.py] [_log()] Compression: none
2025-12-03T17:37:10.683 [DEBUG] [Thread-120848] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:37:10.698 [DEBUG] [Thread-120848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:37:10.698 [DEBUG] [Thread-120848] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:37:10.698 [DEBUG] [Thread-120848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:37:10.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:37:10.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:37:10.699 [DEBUG] [Thread-120848] [transport.py] [_log()] userauth is OK
2025-12-03T17:37:10.700 [DEBUG] [Thread-120848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:37:10.700 [DEBUG] [Thread-120848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:37:10.700 [DEBUG] [Thread-120848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:37:10.700 [DEBUG] [Thread-120848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:37:10.714 [INFO] [Thread-120848] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:37:10.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:37:11.320 [DEBUG] [Thread-120848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:37:11.320 [DEBUG] [Thread-120848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:37:11.320 [DEBUG] [Thread-120848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:37:11.361 [DEBUG] [Thread-120848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:37:11.361 [DEBUG] [Thread-120848] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:37:11.363 [DEBUG] [Thread-120848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:37:11.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:37:11.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:37:11.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:37:11.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:37:11.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:37:11.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:37:11.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:37:11.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:37:11.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:37:11.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.650395 -999.00  +20.70  18.92     27   +1.30 1 1 1 1 1   887    0 18.31 -43.76 ----- 18.9 18.9 175.4 26.5 24.9 -29.9 25.0 -30.6 26.6 -27.9 26.9 -29.4
2025-12-03T17:37:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:37:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:37:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.650395
2025-12-03T17:37:11.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:37:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:37:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:37:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:37:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:37:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:36:48', tmtdew=22.75, humidity=21.48, cloud=0.0, wind=25.35, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:36:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:37:11.386 [DEBUG] [Thread-120848] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:37:11.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:37:11.481 [DEBUG] [Thread-120851] [transport.py] [_log()] starting thread (client mode): 0xa514a710
2025-12-03T17:37:11.481 [DEBUG] [Thread-120851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:37:11.496 [DEBUG] [Thread-120851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:37:11.496 [INFO] [Thread-120851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:11.503 [DEBUG] [Thread-120851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] client lang: <none>
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] server lang: <none>
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] kex follows: False
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] Compression: none
2025-12-03T17:37:11.504 [DEBUG] [Thread-120851] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:37:11.566 [DEBUG] [Thread-120851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:37:11.567 [DEBUG] [Thread-120851] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:37:11.567 [DEBUG] [Thread-120851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:37:11.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:37:11.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:37:11.623 [DEBUG] [Thread-120851] [transport.py] [_log()] userauth is OK
2025-12-03T17:37:11.624 [DEBUG] [Thread-120851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:37:11.624 [DEBUG] [Thread-120851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:37:11.624 [DEBUG] [Thread-120851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:37:11.624 [DEBUG] [Thread-120851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:37:11.642 [INFO] [Thread-120851] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:37:11.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:37:11.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:37:12.520 [DEBUG] [Thread-120851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:37:12.521 [DEBUG] [Thread-120851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:37:12.569 [DEBUG] [Thread-120851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:37:12.569 [DEBUG] [Thread-120851] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:37:12.578 [DEBUG] [Thread-120851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:37:12.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:37:12.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:37:12.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:37:12.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:37:12.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:37:12.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:37:12.613 [DEBUG] [Thread-120851] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:37:18.039 [DEBUG] [Thread-120853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:33.084 [DEBUG] [Thread-120854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:42.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:37:42.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:37:42.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:37:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 37, 20), 22.74, 21.49, 0.0, 23.48, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:37:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:37:20
2025-12-03T17:37:43.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:37:43.607 [DEBUG] [Thread-120855] [transport.py] [_log()] starting thread (client mode): 0xa51486d0
2025-12-03T17:37:43.607 [DEBUG] [Thread-120855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:37:43.627 [DEBUG] [Thread-120855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:37:43.627 [INFO] [Thread-120855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:37:43.629 [DEBUG] [Thread-120855] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:37:43.629 [DEBUG] [Thread-120855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] client lang: <none>
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] server lang: <none>
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] kex follows: False
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:37:43.630 [DEBUG] [Thread-120855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:37:43.631 [DEBUG] [Thread-120855] [transport.py] [_log()] Compression: none
2025-12-03T17:37:43.631 [DEBUG] [Thread-120855] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:37:43.647 [DEBUG] [Thread-120855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:37:43.648 [DEBUG] [Thread-120855] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:37:43.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:37:43.649 [DEBUG] [Thread-120855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:37:43.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:37:43.651 [DEBUG] [Thread-120855] [transport.py] [_log()] userauth is OK
2025-12-03T17:37:43.651 [DEBUG] [Thread-120855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:37:43.651 [DEBUG] [Thread-120855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:37:43.651 [DEBUG] [Thread-120855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:37:43.651 [DEBUG] [Thread-120855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:37:43.676 [INFO] [Thread-120855] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:37:43.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:37:44.354 [DEBUG] [Thread-120855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:37:44.354 [DEBUG] [Thread-120855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:37:44.354 [DEBUG] [Thread-120855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:37:44.395 [DEBUG] [Thread-120855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:37:44.395 [DEBUG] [Thread-120855] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:37:44.398 [DEBUG] [Thread-120855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:37:44.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:37:44.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:37:44.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:37:44.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:37:44.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:37:44.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:37:44.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:37:44.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:37:44.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:37:44.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.650742 -999.00  +20.70  18.81     27   +1.40 1 1 1 1 1   887    0 18.52 -53.70 ----- 18.8 18.8 176.2 20.8 24.9 -29.8 25.0 -28.3 26.6 -26.8 26.8 -28.9
2025-12-03T17:37:44.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:37:44.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:37:44.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.650742
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:37:44.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:37:20', tmtdew=22.74, humidity=21.49, cloud=0.0, wind=23.48, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:37:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:37:44.421 [DEBUG] [Thread-120855] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:37:44.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:37:44.518 [DEBUG] [Thread-120858] [transport.py] [_log()] starting thread (client mode): 0xa272a950
2025-12-03T17:37:44.518 [DEBUG] [Thread-120858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:37:44.533 [DEBUG] [Thread-120858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:37:44.533 [INFO] [Thread-120858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:37:44.541 [DEBUG] [Thread-120858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] client lang: <none>
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] server lang: <none>
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] kex follows: False
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] Compression: none
2025-12-03T17:37:44.542 [DEBUG] [Thread-120858] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:37:44.599 [DEBUG] [Thread-120858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:37:44.599 [DEBUG] [Thread-120858] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:37:44.600 [DEBUG] [Thread-120858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:37:44.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:37:44.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:37:44.655 [DEBUG] [Thread-120858] [transport.py] [_log()] userauth is OK
2025-12-03T17:37:44.655 [DEBUG] [Thread-120858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:37:44.655 [DEBUG] [Thread-120858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:37:44.655 [DEBUG] [Thread-120858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:37:44.655 [DEBUG] [Thread-120858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:37:44.677 [INFO] [Thread-120858] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:37:44.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:37:44.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:37:45.527 [DEBUG] [Thread-120858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:37:45.527 [DEBUG] [Thread-120858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:37:45.575 [DEBUG] [Thread-120858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:37:45.575 [DEBUG] [Thread-120858] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:37:45.584 [DEBUG] [Thread-120858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:37:45.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:37:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:37:45.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:37:45.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:37:45.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:37:45.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:37:45.618 [DEBUG] [Thread-120858] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:37:47.124 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:47.125 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:48.115 [DEBUG] [Thread-120860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:37:58.447 [DEBUG] [Thread-120861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:03.166 [DEBUG] [Thread-120862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:15.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:38:15.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:38:15.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:38:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 37, 52), 22.45, 22.06, 0.0, 20.12, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:38:16.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:37:52
2025-12-03T17:38:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:38:16.581 [DEBUG] [Thread-120863] [transport.py] [_log()] starting thread (client mode): 0xa272a890
2025-12-03T17:38:16.581 [DEBUG] [Thread-120863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:38:16.602 [DEBUG] [Thread-120863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:38:16.602 [INFO] [Thread-120863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] client lang: <none>
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] server lang: <none>
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] kex follows: False
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] Compression: none
2025-12-03T17:38:16.605 [DEBUG] [Thread-120863] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:38:16.623 [DEBUG] [Thread-120863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:38:16.623 [DEBUG] [Thread-120863] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:38:16.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:38:16.624 [DEBUG] [Thread-120863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:38:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:38:16.626 [DEBUG] [Thread-120863] [transport.py] [_log()] userauth is OK
2025-12-03T17:38:16.626 [DEBUG] [Thread-120863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:38:16.626 [DEBUG] [Thread-120863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:38:16.626 [DEBUG] [Thread-120863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:38:16.626 [DEBUG] [Thread-120863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:38:16.648 [INFO] [Thread-120863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:38:16.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:38:17.293 [DEBUG] [Thread-120863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:38:17.293 [DEBUG] [Thread-120863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:38:17.293 [DEBUG] [Thread-120863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:38:17.333 [DEBUG] [Thread-120863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:38:17.334 [DEBUG] [Thread-120863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:38:17.336 [DEBUG] [Thread-120863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:38:17.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:38:17.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:38:17.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:38:17.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:38:17.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:38:17.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:38:17.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.651089 -999.00  +20.70  13.23     27   +1.30 1 1 1 1 1   887    0 18.71 -58.09 ----- 13.2 13.2 150.6 25.1 24.9 -29.2 25.1 -28.7 26.6 -27.0 26.9 -29.4
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:38:17.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.651089
2025-12-03T17:38:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:38:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:38:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:38:17.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:38:17.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:38:17.362 [DEBUG] [Thread-120863] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:38:17.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:37:52', tmtdew=22.45, humidity=22.06, cloud=0.0, wind=20.12, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:37:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:38:17.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:38:17.460 [DEBUG] [Thread-120866] [transport.py] [_log()] starting thread (client mode): 0xa517c040
2025-12-03T17:38:17.460 [DEBUG] [Thread-120866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:38:17.479 [DEBUG] [Thread-120866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:38:17.479 [INFO] [Thread-120866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:38:17.486 [DEBUG] [Thread-120866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:38:17.486 [DEBUG] [Thread-120866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] client lang: <none>
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] server lang: <none>
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] kex follows: False
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:38:17.487 [DEBUG] [Thread-120866] [transport.py] [_log()] Compression: none
2025-12-03T17:38:17.488 [DEBUG] [Thread-120866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:38:17.547 [DEBUG] [Thread-120866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:38:17.547 [DEBUG] [Thread-120866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:38:17.547 [DEBUG] [Thread-120866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:38:17.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:38:17.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:38:17.603 [DEBUG] [Thread-120866] [transport.py] [_log()] userauth is OK
2025-12-03T17:38:17.603 [DEBUG] [Thread-120866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:38:17.603 [DEBUG] [Thread-120866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:38:17.603 [DEBUG] [Thread-120866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:38:17.604 [DEBUG] [Thread-120866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:38:17.623 [INFO] [Thread-120866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:38:17.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:38:17.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:38:18.192 [DEBUG] [Thread-120868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:18.524 [DEBUG] [Thread-120866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:38:18.524 [DEBUG] [Thread-120866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:38:18.572 [DEBUG] [Thread-120866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:38:18.572 [DEBUG] [Thread-120866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:38:18.581 [DEBUG] [Thread-120866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:38:18.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:38:18.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:38:18.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:38:18.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:38:18.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:38:18.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:38:18.617 [DEBUG] [Thread-120866] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:38:33.234 [DEBUG] [Thread-120869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:47.266 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:47.267 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:48.265 [DEBUG] [Thread-120870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:38:48.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:38:48.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:38:48.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:38:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 38, 24), 22.56, 21.91, 0.0, 21.56, 20.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:38:49.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:38:24
2025-12-03T17:38:49.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:38:49.568 [DEBUG] [Thread-120871] [transport.py] [_log()] starting thread (client mode): 0xa514a0e0
2025-12-03T17:38:49.569 [DEBUG] [Thread-120871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:38:49.588 [DEBUG] [Thread-120871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:38:49.588 [INFO] [Thread-120871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:38:49.591 [DEBUG] [Thread-120871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:38:49.591 [DEBUG] [Thread-120871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:38:49.591 [DEBUG] [Thread-120871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] client lang: <none>
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] server lang: <none>
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] kex follows: False
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:38:49.592 [DEBUG] [Thread-120871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:38:49.593 [DEBUG] [Thread-120871] [transport.py] [_log()] Compression: none
2025-12-03T17:38:49.593 [DEBUG] [Thread-120871] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:38:49.608 [DEBUG] [Thread-120871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:38:49.608 [DEBUG] [Thread-120871] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:38:49.609 [DEBUG] [Thread-120871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:38:49.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:38:49.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:38:49.611 [DEBUG] [Thread-120871] [transport.py] [_log()] userauth is OK
2025-12-03T17:38:49.611 [DEBUG] [Thread-120871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:38:49.611 [DEBUG] [Thread-120871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:38:49.611 [DEBUG] [Thread-120871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:38:49.611 [DEBUG] [Thread-120871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:38:49.634 [INFO] [Thread-120871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:38:49.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:38:50.377 [DEBUG] [Thread-120871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:38:50.377 [DEBUG] [Thread-120871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:38:50.377 [DEBUG] [Thread-120871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:38:50.417 [DEBUG] [Thread-120871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:38:50.418 [DEBUG] [Thread-120871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:38:50.420 [DEBUG] [Thread-120871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:38:50.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:38:50.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:38:50.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:38:50.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:38:50.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:38:50.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:38:50.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:38:50.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:38:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:38:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.651437 -999.00  +20.70  16.19     27   +1.40 1 1 1 1 1   887    0 17.88 -57.38 ----- 16.2 16.2 145.6 27.2 24.9 -29.4 25.1 -28.9 26.7 -27.8 26.9 -29.5
2025-12-03T17:38:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:38:50.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:38:50.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.651437
2025-12-03T17:38:50.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:38:50.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:38:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:38:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:38:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:38:50.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:38:24', tmtdew=22.56, humidity=21.91, cloud=0.0, wind=21.56, temperature=20.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:38:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:38:50.440 [DEBUG] [Thread-120871] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:38:50.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:38:50.536 [DEBUG] [Thread-120874] [transport.py] [_log()] starting thread (client mode): 0xa51d28f0
2025-12-03T17:38:50.536 [DEBUG] [Thread-120874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:38:50.550 [DEBUG] [Thread-120874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:38:50.550 [INFO] [Thread-120874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:38:50.557 [DEBUG] [Thread-120874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] client lang: <none>
2025-12-03T17:38:50.558 [DEBUG] [Thread-120874] [transport.py] [_log()] server lang: <none>
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] kex follows: False
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] Compression: none
2025-12-03T17:38:50.559 [DEBUG] [Thread-120874] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:38:50.615 [DEBUG] [Thread-120874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:38:50.615 [DEBUG] [Thread-120874] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:38:50.616 [DEBUG] [Thread-120874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:38:50.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:38:50.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:38:50.671 [DEBUG] [Thread-120874] [transport.py] [_log()] userauth is OK
2025-12-03T17:38:50.672 [DEBUG] [Thread-120874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:38:50.672 [DEBUG] [Thread-120874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:38:50.672 [DEBUG] [Thread-120874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:38:50.672 [DEBUG] [Thread-120874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:38:50.690 [INFO] [Thread-120874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:38:50.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:38:50.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:38:51.625 [DEBUG] [Thread-120874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:38:51.625 [DEBUG] [Thread-120874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:38:51.671 [DEBUG] [Thread-120874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:38:51.672 [DEBUG] [Thread-120874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:38:51.680 [DEBUG] [Thread-120874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:38:51.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:38:51.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:38:51.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:38:51.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:38:51.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:38:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:38:51.714 [DEBUG] [Thread-120874] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:38:58.480 [DEBUG] [Thread-120876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:03.295 [DEBUG] [Thread-120877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:18.337 [DEBUG] [Thread-120878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:21.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:39:21.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:39:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:39:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 38, 57), 22.64, 21.88, 0.0, 22.51, 21.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:39:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:38:57
2025-12-03T17:39:22.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:39:22.757 [DEBUG] [Thread-120879] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T17:39:22.757 [DEBUG] [Thread-120879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:39:22.777 [DEBUG] [Thread-120879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:39:22.777 [INFO] [Thread-120879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:39:22.780 [DEBUG] [Thread-120879] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:39:22.780 [DEBUG] [Thread-120879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:39:22.780 [DEBUG] [Thread-120879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:39:22.780 [DEBUG] [Thread-120879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:22.780 [DEBUG] [Thread-120879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] client lang: <none>
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] server lang: <none>
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] kex follows: False
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] Compression: none
2025-12-03T17:39:22.781 [DEBUG] [Thread-120879] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:39:22.795 [DEBUG] [Thread-120879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:39:22.795 [DEBUG] [Thread-120879] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:39:22.795 [DEBUG] [Thread-120879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:39:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:39:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:39:22.796 [DEBUG] [Thread-120879] [transport.py] [_log()] userauth is OK
2025-12-03T17:39:22.796 [DEBUG] [Thread-120879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:39:22.796 [DEBUG] [Thread-120879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:39:22.796 [DEBUG] [Thread-120879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:39:22.796 [DEBUG] [Thread-120879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:39:22.812 [INFO] [Thread-120879] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:39:22.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:39:23.757 [DEBUG] [Thread-120879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:39:23.757 [DEBUG] [Thread-120879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:39:23.757 [DEBUG] [Thread-120879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:39:23.799 [DEBUG] [Thread-120879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:39:23.799 [DEBUG] [Thread-120879] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:39:23.801 [DEBUG] [Thread-120879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:39:23.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:39:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:39:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:39:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:39:23.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:39:23.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:39:23.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.651784 -999.00  +20.80  16.08     27   +1.60 1 1 1 1 1   887    0 17.88 -57.15 ----- 16.1 16.1 171.2 26.6 24.9 -29.6 25.1 -30.5 26.6 -26.9 26.9 -28.4
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.651784
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:39:23.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:38:57', tmtdew=22.64, humidity=21.88, cloud=0.0, wind=22.51, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:38:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:39:23.822 [DEBUG] [Thread-120879] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:39:23.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:39:23.907 [DEBUG] [Thread-120882] [transport.py] [_log()] starting thread (client mode): 0xa517c0a0
2025-12-03T17:39:23.907 [DEBUG] [Thread-120882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:39:23.922 [DEBUG] [Thread-120882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:39:23.922 [INFO] [Thread-120882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:39:23.929 [DEBUG] [Thread-120882] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] client lang: <none>
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] server lang: <none>
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] kex follows: False
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] Compression: none
2025-12-03T17:39:23.930 [DEBUG] [Thread-120882] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:39:23.986 [DEBUG] [Thread-120882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:39:23.986 [DEBUG] [Thread-120882] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:39:23.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:39:23.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:39:23.986 [DEBUG] [Thread-120882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:39:24.043 [DEBUG] [Thread-120882] [transport.py] [_log()] userauth is OK
2025-12-03T17:39:24.043 [DEBUG] [Thread-120882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:39:24.043 [DEBUG] [Thread-120882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:39:24.043 [DEBUG] [Thread-120882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:39:24.043 [DEBUG] [Thread-120882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:39:24.060 [INFO] [Thread-120882] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:39:24.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:39:24.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:39:24.916 [DEBUG] [Thread-120882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:39:24.916 [DEBUG] [Thread-120882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:39:24.964 [DEBUG] [Thread-120882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:39:24.964 [DEBUG] [Thread-120882] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:39:24.973 [DEBUG] [Thread-120882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:39:24.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:39:24.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:39:24.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:39:24.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:39:24.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:39:25.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:39:25.011 [DEBUG] [Thread-120882] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:39:33.364 [DEBUG] [Thread-120884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:47.411 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:47.413 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:48.417 [DEBUG] [Thread-120885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:39:55.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:39:55.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:39:55.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:39:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 39, 29), 22.57, 21.99, 0.0, 26.17, 21.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:39:55.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:39:29
2025-12-03T17:39:55.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:39:55.993 [DEBUG] [Thread-120886] [transport.py] [_log()] starting thread (client mode): 0xa277af80
2025-12-03T17:39:55.993 [DEBUG] [Thread-120886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:39:56.013 [DEBUG] [Thread-120886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:39:56.013 [INFO] [Thread-120886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:39:56.016 [DEBUG] [Thread-120886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] client lang: <none>
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] server lang: <none>
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] kex follows: False
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] Compression: none
2025-12-03T17:39:56.017 [DEBUG] [Thread-120886] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:39:56.036 [DEBUG] [Thread-120886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:39:56.037 [DEBUG] [Thread-120886] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:39:56.037 [DEBUG] [Thread-120886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:39:56.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:39:56.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:39:56.078 [DEBUG] [Thread-120886] [transport.py] [_log()] userauth is OK
2025-12-03T17:39:56.078 [DEBUG] [Thread-120886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:39:56.079 [DEBUG] [Thread-120886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:39:56.079 [DEBUG] [Thread-120886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:39:56.079 [DEBUG] [Thread-120886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:39:56.115 [INFO] [Thread-120886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:39:56.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:39:56.774 [DEBUG] [Thread-120886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:39:56.774 [DEBUG] [Thread-120886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:39:56.774 [DEBUG] [Thread-120886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:39:56.815 [DEBUG] [Thread-120886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:39:56.815 [DEBUG] [Thread-120886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:39:56.818 [DEBUG] [Thread-120886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:39:56.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:39:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:39:56.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:39:56.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:39:56.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:39:56.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:39:56.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:39:56.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:39:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:39:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.652478 -999.00  +20.70  20.76     28   +1.60 1 1 1 1 1   887    0 17.31 -58.39 ----- 20.8 20.8 164.6 30.9 24.9 -30.5 25.0 -28.8 26.5 -28.2 26.8 -29.6
2025-12-03T17:39:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:39:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:39:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.652478
2025-12-03T17:39:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:39:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:39:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:39:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:39:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:39:56.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:39:29', tmtdew=22.57, humidity=21.99, cloud=0.0, wind=26.17, temperature=21.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:39:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:39:56.842 [DEBUG] [Thread-120886] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:39:56.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:39:56.949 [DEBUG] [Thread-120889] [transport.py] [_log()] starting thread (client mode): 0xa2761cc0
2025-12-03T17:39:56.949 [DEBUG] [Thread-120889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:39:56.963 [DEBUG] [Thread-120889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:39:56.963 [INFO] [Thread-120889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] client lang: <none>
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] server lang: <none>
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] kex follows: False
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] Compression: none
2025-12-03T17:39:56.971 [DEBUG] [Thread-120889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:39:57.027 [DEBUG] [Thread-120889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:39:57.028 [DEBUG] [Thread-120889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:39:57.028 [DEBUG] [Thread-120889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:39:57.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:39:57.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:39:57.087 [DEBUG] [Thread-120889] [transport.py] [_log()] userauth is OK
2025-12-03T17:39:57.087 [DEBUG] [Thread-120889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:39:57.088 [DEBUG] [Thread-120889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:39:57.088 [DEBUG] [Thread-120889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:39:57.088 [DEBUG] [Thread-120889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:39:57.106 [INFO] [Thread-120889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:39:57.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:39:57.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:39:57.962 [DEBUG] [Thread-120889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:39:57.962 [DEBUG] [Thread-120889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:39:58.010 [DEBUG] [Thread-120889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:39:58.010 [DEBUG] [Thread-120889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:39:58.019 [DEBUG] [Thread-120889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:39:58.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:39:58.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:39:58.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:39:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:39:58.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:39:58.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:39:58.051 [DEBUG] [Thread-120889] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:39:58.508 [DEBUG] [Thread-120891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:03.447 [DEBUG] [Thread-120892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:18.483 [DEBUG] [Thread-120893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:40:28.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:40:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:40:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 40, 1), 22.54, 22.11, 0.0, 22.34, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:40:28.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:40:01
2025-12-03T17:40:28.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:40:29.021 [DEBUG] [Thread-120894] [transport.py] [_log()] starting thread (client mode): 0xa517e830
2025-12-03T17:40:29.021 [DEBUG] [Thread-120894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:40:29.041 [DEBUG] [Thread-120894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:40:29.041 [INFO] [Thread-120894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] client lang: <none>
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] server lang: <none>
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] kex follows: False
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:40:29.044 [DEBUG] [Thread-120894] [transport.py] [_log()] Compression: none
2025-12-03T17:40:29.045 [DEBUG] [Thread-120894] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:40:29.061 [DEBUG] [Thread-120894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:40:29.061 [DEBUG] [Thread-120894] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:40:29.062 [DEBUG] [Thread-120894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:40:29.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:40:29.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:40:29.106 [DEBUG] [Thread-120894] [transport.py] [_log()] userauth is OK
2025-12-03T17:40:29.106 [DEBUG] [Thread-120894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:40:29.106 [DEBUG] [Thread-120894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:40:29.107 [DEBUG] [Thread-120894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:40:29.107 [DEBUG] [Thread-120894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:40:29.136 [INFO] [Thread-120894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:40:29.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:40:29.779 [DEBUG] [Thread-120894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:40:29.779 [DEBUG] [Thread-120894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:40:29.780 [DEBUG] [Thread-120894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:40:29.821 [DEBUG] [Thread-120894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:40:29.821 [DEBUG] [Thread-120894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:40:29.824 [DEBUG] [Thread-120894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:40:29.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:40:29.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:40:29.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:40:29.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:40:29.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:40:29.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:40:29.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:40:29.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:40:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:40:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.652825 -999.00  +20.70  11.74     28   +1.70 1 1 1 1 1   887    0 18.88 -51.42 ----- 11.7 11.7 177.3 21.4 24.8 -29.7 24.7 -31.3 26.5 -26.9 26.7 -29.9
2025-12-03T17:40:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:40:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:40:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.652825
2025-12-03T17:40:29.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:40:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:40:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:40:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:40:29.856 [DEBUG] [Thread-120894] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:40:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:40:29.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:40:01', tmtdew=22.54, humidity=22.11, cloud=0.0, wind=22.34, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:40:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:40:29.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:40:29.954 [DEBUG] [Thread-120897] [transport.py] [_log()] starting thread (client mode): 0xa51d3580
2025-12-03T17:40:29.954 [DEBUG] [Thread-120897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:40:29.969 [DEBUG] [Thread-120897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:40:29.969 [INFO] [Thread-120897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:40:29.976 [DEBUG] [Thread-120897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:40:29.976 [DEBUG] [Thread-120897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:40:29.976 [DEBUG] [Thread-120897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:40:29.976 [DEBUG] [Thread-120897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:40:29.976 [DEBUG] [Thread-120897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] client lang: <none>
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] server lang: <none>
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] kex follows: False
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:40:29.977 [DEBUG] [Thread-120897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:40:29.978 [DEBUG] [Thread-120897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:40:29.978 [DEBUG] [Thread-120897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:40:29.978 [DEBUG] [Thread-120897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:40:29.978 [DEBUG] [Thread-120897] [transport.py] [_log()] Compression: none
2025-12-03T17:40:29.978 [DEBUG] [Thread-120897] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:40:30.034 [DEBUG] [Thread-120897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:40:30.035 [DEBUG] [Thread-120897] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:40:30.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:40:30.036 [DEBUG] [Thread-120897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:40:30.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:40:30.091 [DEBUG] [Thread-120897] [transport.py] [_log()] userauth is OK
2025-12-03T17:40:30.091 [DEBUG] [Thread-120897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:40:30.091 [DEBUG] [Thread-120897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:40:30.091 [DEBUG] [Thread-120897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:40:30.092 [DEBUG] [Thread-120897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:40:30.114 [INFO] [Thread-120897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:40:30.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:40:30.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:40:30.962 [DEBUG] [Thread-120897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:40:30.962 [DEBUG] [Thread-120897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:40:31.011 [DEBUG] [Thread-120897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:40:31.011 [DEBUG] [Thread-120897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:40:31.020 [DEBUG] [Thread-120897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:40:31.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:40:31.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:40:31.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:40:31.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:40:31.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:40:31.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:40:31.055 [DEBUG] [Thread-120897] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:40:33.507 [DEBUG] [Thread-120899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:47.555 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:47.556 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:48.544 [DEBUG] [Thread-120900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:40:58.542 [DEBUG] [Thread-120901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:41:01.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:41:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:41:01.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 40, 33), 22.33, 22.42, 0.0, 20.43, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:41:01.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:40:33
2025-12-03T17:41:01.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:41:02.041 [DEBUG] [Thread-120902] [transport.py] [_log()] starting thread (client mode): 0xa51d0820
2025-12-03T17:41:02.041 [DEBUG] [Thread-120902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:41:02.061 [DEBUG] [Thread-120902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:41:02.062 [INFO] [Thread-120902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] client lang: <none>
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] server lang: <none>
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] kex follows: False
2025-12-03T17:41:02.067 [DEBUG] [Thread-120902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] Compression: none
2025-12-03T17:41:02.068 [DEBUG] [Thread-120902] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:41:02.095 [DEBUG] [Thread-120902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:41:02.096 [DEBUG] [Thread-120902] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:41:02.096 [DEBUG] [Thread-120902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:41:02.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:41:02.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:41:02.098 [DEBUG] [Thread-120902] [transport.py] [_log()] userauth is OK
2025-12-03T17:41:02.098 [DEBUG] [Thread-120902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:41:02.098 [DEBUG] [Thread-120902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:41:02.098 [DEBUG] [Thread-120902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:41:02.098 [DEBUG] [Thread-120902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:41:02.139 [INFO] [Thread-120902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:41:02.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:41:02.829 [DEBUG] [Thread-120902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:41:02.829 [DEBUG] [Thread-120902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:41:02.829 [DEBUG] [Thread-120902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:41:02.870 [DEBUG] [Thread-120902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:41:02.870 [DEBUG] [Thread-120902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:41:02.873 [DEBUG] [Thread-120902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:41:02.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:41:02.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:41:02.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:41:02.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:41:02.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:41:02.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:41:02.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:41:02.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.653173 -999.00  +20.70  12.46     28   +1.60 1 1 1 1 1   887    0 18.92 -47.63 ----- 12.5 12.5 154.4 21.1 24.9 -29.3 25.0 -28.6 26.5 -27.2 26.8 -28.7
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.653173
2025-12-03T17:41:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:41:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:41:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:41:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:41:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:41:02.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:40:33', tmtdew=22.33, humidity=22.42, cloud=0.0, wind=20.43, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:40:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:41:02.899 [DEBUG] [Thread-120902] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:41:02.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:41:02.996 [DEBUG] [Thread-120905] [transport.py] [_log()] starting thread (client mode): 0xa51d00a0
2025-12-03T17:41:02.996 [DEBUG] [Thread-120905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:41:03.010 [DEBUG] [Thread-120905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:41:03.011 [INFO] [Thread-120905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:41:03.018 [DEBUG] [Thread-120905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:41:03.018 [DEBUG] [Thread-120905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:41:03.018 [DEBUG] [Thread-120905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] client lang: <none>
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] server lang: <none>
2025-12-03T17:41:03.019 [DEBUG] [Thread-120905] [transport.py] [_log()] kex follows: False
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] Compression: none
2025-12-03T17:41:03.020 [DEBUG] [Thread-120905] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:41:03.080 [DEBUG] [Thread-120905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:41:03.081 [DEBUG] [Thread-120905] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:41:03.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:41:03.082 [DEBUG] [Thread-120905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:41:03.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:41:03.135 [DEBUG] [Thread-120905] [transport.py] [_log()] userauth is OK
2025-12-03T17:41:03.136 [DEBUG] [Thread-120905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:41:03.136 [DEBUG] [Thread-120905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:41:03.136 [DEBUG] [Thread-120905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:41:03.136 [DEBUG] [Thread-120905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:41:03.155 [INFO] [Thread-120905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:41:03.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:41:03.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:41:03.574 [DEBUG] [Thread-120907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:03.972 [DEBUG] [Thread-120905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:41:03.972 [DEBUG] [Thread-120905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:41:04.019 [DEBUG] [Thread-120905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:41:04.020 [DEBUG] [Thread-120905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:41:04.028 [DEBUG] [Thread-120905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:41:04.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:41:04.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:41:04.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:41:04.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:41:04.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:41:04.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:41:04.062 [DEBUG] [Thread-120905] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:41:18.609 [DEBUG] [Thread-120908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:33.635 [DEBUG] [Thread-120909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:34.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:41:34.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:41:34.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:41:34.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 41, 5), 22.43, 22.31, 0.0, 22.23, 20.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:41:34.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:41:05
2025-12-03T17:41:34.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:41:35.051 [DEBUG] [Thread-120910] [transport.py] [_log()] starting thread (client mode): 0xa51d3f10
2025-12-03T17:41:35.052 [DEBUG] [Thread-120910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:41:35.066 [DEBUG] [Thread-120910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:41:35.066 [INFO] [Thread-120910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] client lang: <none>
2025-12-03T17:41:35.069 [DEBUG] [Thread-120910] [transport.py] [_log()] server lang: <none>
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] kex follows: False
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] Compression: none
2025-12-03T17:41:35.070 [DEBUG] [Thread-120910] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:41:35.079 [DEBUG] [Thread-120910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:41:35.079 [DEBUG] [Thread-120910] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:41:35.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:41:35.080 [DEBUG] [Thread-120910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:41:35.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:41:35.082 [DEBUG] [Thread-120910] [transport.py] [_log()] userauth is OK
2025-12-03T17:41:35.082 [DEBUG] [Thread-120910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:41:35.082 [DEBUG] [Thread-120910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:41:35.082 [DEBUG] [Thread-120910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:41:35.083 [DEBUG] [Thread-120910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:41:35.106 [INFO] [Thread-120910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:41:35.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:41:35.700 [DEBUG] [Thread-120910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:41:35.700 [DEBUG] [Thread-120910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:41:35.701 [DEBUG] [Thread-120910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:41:35.741 [DEBUG] [Thread-120910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:41:35.741 [DEBUG] [Thread-120910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:41:35.744 [DEBUG] [Thread-120910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:41:35.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:41:35.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:41:35.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:41:35.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:41:35.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:41:35.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:41:35.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:41:35.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:41:35.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:41:35.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.653520 -999.00  +20.80  22.26     28   +1.70 1 1 1 1 1   887    0 18.62 -51.32 ----- 22.3 22.3 167.0 27.2 24.8 -29.1 25.0 -29.2 26.6 -26.7 26.8 -29.2
2025-12-03T17:41:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:41:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:41:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.653520
2025-12-03T17:41:35.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:41:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:41:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:41:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:41:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:41:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:41:05', tmtdew=22.43, humidity=22.31, cloud=0.0, wind=22.23, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:41:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:41:35.770 [DEBUG] [Thread-120910] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:41:35.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:41:35.859 [DEBUG] [Thread-120913] [transport.py] [_log()] starting thread (client mode): 0xa517d6c0
2025-12-03T17:41:35.859 [DEBUG] [Thread-120913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:41:35.874 [DEBUG] [Thread-120913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:41:35.874 [INFO] [Thread-120913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] client lang: <none>
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] server lang: <none>
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] kex follows: False
2025-12-03T17:41:35.882 [DEBUG] [Thread-120913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] Compression: none
2025-12-03T17:41:35.883 [DEBUG] [Thread-120913] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:41:35.938 [DEBUG] [Thread-120913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:41:35.939 [DEBUG] [Thread-120913] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:41:35.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:41:35.939 [DEBUG] [Thread-120913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:41:35.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:41:35.995 [DEBUG] [Thread-120913] [transport.py] [_log()] userauth is OK
2025-12-03T17:41:35.995 [DEBUG] [Thread-120913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:41:35.996 [DEBUG] [Thread-120913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:41:35.996 [DEBUG] [Thread-120913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:41:35.996 [DEBUG] [Thread-120913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:41:36.015 [INFO] [Thread-120913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:41:36.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:41:36.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:41:36.876 [DEBUG] [Thread-120913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:41:36.876 [DEBUG] [Thread-120913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:41:36.925 [DEBUG] [Thread-120913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:41:36.925 [DEBUG] [Thread-120913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:41:36.934 [DEBUG] [Thread-120913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:41:36.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:41:36.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:41:36.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:41:36.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:41:36.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:41:36.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:41:36.966 [DEBUG] [Thread-120913] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:41:47.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:47.695 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:48.664 [DEBUG] [Thread-120915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:41:58.570 [DEBUG] [Thread-120916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:03.708 [DEBUG] [Thread-120917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:42:06.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:42:06.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:42:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 41, 37), 22.23, 22.31, 0.0, 27.81, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:42:07.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:41:37
2025-12-03T17:42:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:42:07.935 [DEBUG] [Thread-120918] [transport.py] [_log()] starting thread (client mode): 0xa51d2b00
2025-12-03T17:42:07.935 [DEBUG] [Thread-120918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:42:07.951 [DEBUG] [Thread-120918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:42:07.951 [INFO] [Thread-120918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:42:07.954 [DEBUG] [Thread-120918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:42:07.954 [DEBUG] [Thread-120918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:42:07.954 [DEBUG] [Thread-120918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:42:07.954 [DEBUG] [Thread-120918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:07.954 [DEBUG] [Thread-120918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] client lang: <none>
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] server lang: <none>
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] kex follows: False
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] Compression: none
2025-12-03T17:42:07.955 [DEBUG] [Thread-120918] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:42:07.974 [DEBUG] [Thread-120918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:42:07.974 [DEBUG] [Thread-120918] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:42:07.974 [DEBUG] [Thread-120918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:42:07.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:42:07.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:42:07.976 [DEBUG] [Thread-120918] [transport.py] [_log()] userauth is OK
2025-12-03T17:42:07.976 [DEBUG] [Thread-120918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:42:07.977 [DEBUG] [Thread-120918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:42:07.977 [DEBUG] [Thread-120918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:42:07.977 [DEBUG] [Thread-120918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:42:08.000 [INFO] [Thread-120918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:42:08.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:42:08.760 [DEBUG] [Thread-120918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:42:08.760 [DEBUG] [Thread-120918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:42:08.760 [DEBUG] [Thread-120918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:42:08.801 [DEBUG] [Thread-120918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:42:08.801 [DEBUG] [Thread-120918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:42:08.803 [DEBUG] [Thread-120918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:42:08.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:42:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:42:08.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:42:08.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:42:08.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:42:08.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:42:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:42:08.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:42:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:42:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.653867 -999.00  +20.90  16.76     28   +1.70 1 1 1 1 1   887    0 18.25 -52.18 ----- 16.8 16.8 163.4 26.8 -999.0 -999.0 24.9 -28.6 26.5 -28.2 26.8 -29.3
2025-12-03T17:42:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:42:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:42:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.653867
2025-12-03T17:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:42:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:42:08.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:41:37', tmtdew=22.23, humidity=22.31, cloud=0.0, wind=27.81, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:41:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:42:08.829 [DEBUG] [Thread-120918] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:42:08.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:42:08.925 [DEBUG] [Thread-120921] [transport.py] [_log()] starting thread (client mode): 0xa51d3280
2025-12-03T17:42:08.925 [DEBUG] [Thread-120921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:42:08.940 [DEBUG] [Thread-120921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:42:08.940 [INFO] [Thread-120921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:42:08.947 [DEBUG] [Thread-120921] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:42:08.947 [DEBUG] [Thread-120921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:42:08.947 [DEBUG] [Thread-120921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:42:08.947 [DEBUG] [Thread-120921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:08.947 [DEBUG] [Thread-120921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] client lang: <none>
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] server lang: <none>
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] kex follows: False
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] Compression: none
2025-12-03T17:42:08.948 [DEBUG] [Thread-120921] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:42:09.011 [DEBUG] [Thread-120921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:42:09.011 [DEBUG] [Thread-120921] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:42:09.012 [DEBUG] [Thread-120921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:42:09.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:42:09.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:42:09.067 [DEBUG] [Thread-120921] [transport.py] [_log()] userauth is OK
2025-12-03T17:42:09.067 [DEBUG] [Thread-120921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:42:09.067 [DEBUG] [Thread-120921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:42:09.067 [DEBUG] [Thread-120921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:42:09.067 [DEBUG] [Thread-120921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:42:09.086 [INFO] [Thread-120921] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:42:09.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:42:09.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:42:09.936 [DEBUG] [Thread-120921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:42:09.936 [DEBUG] [Thread-120921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:42:09.983 [DEBUG] [Thread-120921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:42:09.984 [DEBUG] [Thread-120921] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:42:09.992 [DEBUG] [Thread-120921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:42:10.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:42:10.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:42:10.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:42:10.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:42:10.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:42:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:42:10.024 [DEBUG] [Thread-120921] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:42:18.737 [DEBUG] [Thread-120923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:33.776 [DEBUG] [Thread-120924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:40.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:42:40.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:42:40.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:42:40.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 42, 9), 22.25, 22.26, 0.0, 29.17, 20.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:42:40.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:42:09
2025-12-03T17:42:40.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:42:41.012 [DEBUG] [Thread-120925] [transport.py] [_log()] starting thread (client mode): 0xa51d1990
2025-12-03T17:42:41.012 [DEBUG] [Thread-120925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:42:41.032 [DEBUG] [Thread-120925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:42:41.032 [INFO] [Thread-120925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:42:41.035 [DEBUG] [Thread-120925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:42:41.035 [DEBUG] [Thread-120925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:42:41.035 [DEBUG] [Thread-120925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] client lang: <none>
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] server lang: <none>
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] kex follows: False
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:42:41.036 [DEBUG] [Thread-120925] [transport.py] [_log()] Compression: none
2025-12-03T17:42:41.037 [DEBUG] [Thread-120925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:42:41.055 [DEBUG] [Thread-120925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:42:41.056 [DEBUG] [Thread-120925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:42:41.056 [DEBUG] [Thread-120925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:42:41.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:42:41.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:42:41.098 [DEBUG] [Thread-120925] [transport.py] [_log()] userauth is OK
2025-12-03T17:42:41.098 [DEBUG] [Thread-120925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:42:41.098 [DEBUG] [Thread-120925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:42:41.098 [DEBUG] [Thread-120925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:42:41.098 [DEBUG] [Thread-120925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:42:41.118 [INFO] [Thread-120925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:42:41.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:42:41.740 [DEBUG] [Thread-120925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:42:41.741 [DEBUG] [Thread-120925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:42:41.741 [DEBUG] [Thread-120925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:42:41.782 [DEBUG] [Thread-120925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:42:41.782 [DEBUG] [Thread-120925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:42:41.784 [DEBUG] [Thread-120925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:42:41.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:42:41.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:42:41.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:42:41.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:42:41.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:42:41.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:42:41.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.654214 -999.00  +21.10  21.47     27   +1.80 1 1 1 1 1   887    0 17.73 -56.12 ----- 21.5 21.5 147.0 25.4 24.8 -29.2 25.0 -28.9 26.4 -27.9 26.7 -28.8
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.654214
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:42:41.800 [DEBUG] [Thread-120925] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:42:41.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:42:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:42:09', tmtdew=22.25, humidity=22.26, cloud=0.0, wind=29.17, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:42:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:42:41.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:42:41.891 [DEBUG] [Thread-120928] [transport.py] [_log()] starting thread (client mode): 0xa51d2da0
2025-12-03T17:42:41.891 [DEBUG] [Thread-120928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:42:41.906 [DEBUG] [Thread-120928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:42:41.906 [INFO] [Thread-120928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] client lang: <none>
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] server lang: <none>
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] kex follows: False
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] Compression: none
2025-12-03T17:42:41.914 [DEBUG] [Thread-120928] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:42:41.969 [DEBUG] [Thread-120928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:42:41.970 [DEBUG] [Thread-120928] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:42:41.970 [DEBUG] [Thread-120928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:42:41.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:42:41.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:42:42.027 [DEBUG] [Thread-120928] [transport.py] [_log()] userauth is OK
2025-12-03T17:42:42.027 [DEBUG] [Thread-120928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:42:42.027 [DEBUG] [Thread-120928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:42:42.027 [DEBUG] [Thread-120928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:42:42.027 [DEBUG] [Thread-120928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:42:42.042 [INFO] [Thread-120928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:42:42.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:42:42.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:42:42.849 [DEBUG] [Thread-120928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:42:42.849 [DEBUG] [Thread-120928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:42:42.897 [DEBUG] [Thread-120928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:42:42.897 [DEBUG] [Thread-120928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:42:42.905 [DEBUG] [Thread-120928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:42:42.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:42:42.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:42:42.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:42:42.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:42:42.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:42:42.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:42:42.939 [DEBUG] [Thread-120928] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:42:47.841 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:47.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:48.801 [DEBUG] [Thread-120930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:42:58.610 [DEBUG] [Thread-120931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:03.855 [DEBUG] [Thread-120932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:12.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:43:12.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:43:12.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:43:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 42, 41), 22.38, 22.36, 0.0, 31.55, 20.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:43:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:42:41
2025-12-03T17:43:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:43:13.972 [DEBUG] [Thread-120933] [transport.py] [_log()] starting thread (client mode): 0xa517c670
2025-12-03T17:43:13.973 [DEBUG] [Thread-120933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:43:13.994 [DEBUG] [Thread-120933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:43:13.994 [INFO] [Thread-120933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:43:13.996 [DEBUG] [Thread-120933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:43:13.996 [DEBUG] [Thread-120933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:43:13.996 [DEBUG] [Thread-120933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] client lang: <none>
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] server lang: <none>
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] kex follows: False
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] Compression: none
2025-12-03T17:43:13.997 [DEBUG] [Thread-120933] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:43:14.011 [DEBUG] [Thread-120933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:43:14.011 [DEBUG] [Thread-120933] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:43:14.011 [DEBUG] [Thread-120933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:43:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:43:14.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:43:14.012 [DEBUG] [Thread-120933] [transport.py] [_log()] userauth is OK
2025-12-03T17:43:14.012 [DEBUG] [Thread-120933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:43:14.012 [DEBUG] [Thread-120933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:43:14.012 [DEBUG] [Thread-120933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:43:14.013 [DEBUG] [Thread-120933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:43:14.023 [INFO] [Thread-120933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:43:14.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:43:14.635 [DEBUG] [Thread-120933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:43:14.635 [DEBUG] [Thread-120933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:43:14.635 [DEBUG] [Thread-120933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:43:14.677 [DEBUG] [Thread-120933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:43:14.677 [DEBUG] [Thread-120933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:43:14.679 [DEBUG] [Thread-120933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:43:14.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:43:14.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:43:14.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:43:14.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:43:14.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:43:14.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:43:14.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.654562 -999.00  +21.00  24.10     27   +1.60 1 1 1 1 1   887    0 17.98 -52.67 ----- 24.1 24.1 146.2 31.1 24.8 -29.5 24.9 -30.3 26.4 -27.5 26.6 -29.0
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.654562
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:43:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:42:41', tmtdew=22.38, humidity=22.36, cloud=0.0, wind=31.55, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:42:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:43:14.697 [DEBUG] [Thread-120933] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:43:14.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:43:14.782 [DEBUG] [Thread-120936] [transport.py] [_log()] starting thread (client mode): 0xa51d0ee0
2025-12-03T17:43:14.782 [DEBUG] [Thread-120936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:43:14.798 [DEBUG] [Thread-120936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:43:14.798 [INFO] [Thread-120936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] client lang: <none>
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] server lang: <none>
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] kex follows: False
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:43:14.805 [DEBUG] [Thread-120936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:43:14.806 [DEBUG] [Thread-120936] [transport.py] [_log()] Compression: none
2025-12-03T17:43:14.806 [DEBUG] [Thread-120936] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:43:14.866 [DEBUG] [Thread-120936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:43:14.866 [DEBUG] [Thread-120936] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:43:14.866 [DEBUG] [Thread-120936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:43:14.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:43:14.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:43:14.923 [DEBUG] [Thread-120936] [transport.py] [_log()] userauth is OK
2025-12-03T17:43:14.923 [DEBUG] [Thread-120936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:43:14.923 [DEBUG] [Thread-120936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:43:14.923 [DEBUG] [Thread-120936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:43:14.923 [DEBUG] [Thread-120936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:43:14.941 [INFO] [Thread-120936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:43:14.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:43:14.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:43:15.796 [DEBUG] [Thread-120936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:43:15.796 [DEBUG] [Thread-120936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:43:15.844 [DEBUG] [Thread-120936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:43:15.844 [DEBUG] [Thread-120936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:43:15.853 [DEBUG] [Thread-120936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:43:15.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:43:15.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:43:15.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:43:15.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:43:15.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:43:15.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:43:15.884 [DEBUG] [Thread-120936] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:43:18.883 [DEBUG] [Thread-120938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:33.928 [DEBUG] [Thread-120939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:43:45.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:43:45.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:43:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 43, 13), 22.34, 22.42, 0.0, 31.37, 21.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:43:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:43:13
2025-12-03T17:43:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:43:46.915 [DEBUG] [Thread-120940] [transport.py] [_log()] starting thread (client mode): 0xa2752ef0
2025-12-03T17:43:46.915 [DEBUG] [Thread-120940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:43:46.936 [DEBUG] [Thread-120940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:43:46.936 [INFO] [Thread-120940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:46.939 [DEBUG] [Thread-120940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] client lang: <none>
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] server lang: <none>
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] kex follows: False
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] Compression: none
2025-12-03T17:43:46.940 [DEBUG] [Thread-120940] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:43:46.956 [DEBUG] [Thread-120940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:43:46.956 [DEBUG] [Thread-120940] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:43:46.957 [DEBUG] [Thread-120940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:43:46.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:43:46.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:43:46.958 [DEBUG] [Thread-120940] [transport.py] [_log()] userauth is OK
2025-12-03T17:43:46.958 [DEBUG] [Thread-120940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:43:46.958 [DEBUG] [Thread-120940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:43:46.958 [DEBUG] [Thread-120940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:43:46.958 [DEBUG] [Thread-120940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:43:46.969 [INFO] [Thread-120940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:43:46.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:43:47.599 [DEBUG] [Thread-120940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:43:47.599 [DEBUG] [Thread-120940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:43:47.599 [DEBUG] [Thread-120940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:43:47.640 [DEBUG] [Thread-120940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:43:47.640 [DEBUG] [Thread-120940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:43:47.643 [DEBUG] [Thread-120940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:43:47.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:43:47.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:43:47.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:43:47.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:43:47.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:43:47.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:43:47.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:43:47.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:43:47.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:43:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.654909 -999.00  +21.10  20.73     27   +1.70 1 1 1 1 1   887    0 18.06 -44.83 ----- 20.7 20.7 166.0 31.2 24.7 -29.4 24.9 -29.6 26.4 -26.9 26.6 -28.9
2025-12-03T17:43:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:43:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:43:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.654909
2025-12-03T17:43:47.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:43:47.670 [DEBUG] [Thread-120940] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:43:47.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:43:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:43:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:43:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:43:47.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:43:13', tmtdew=22.34, humidity=22.42, cloud=0.0, wind=31.37, temperature=21.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:43:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:43:47.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:43:47.772 [DEBUG] [Thread-120943] [transport.py] [_log()] starting thread (client mode): 0xa2750dc0
2025-12-03T17:43:47.772 [DEBUG] [Thread-120943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:43:47.787 [DEBUG] [Thread-120943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:43:47.787 [INFO] [Thread-120943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:47.795 [DEBUG] [Thread-120943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] client lang: <none>
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] server lang: <none>
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] kex follows: False
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] Compression: none
2025-12-03T17:43:47.796 [DEBUG] [Thread-120943] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:43:47.853 [DEBUG] [Thread-120943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:43:47.853 [DEBUG] [Thread-120943] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:43:47.853 [DEBUG] [Thread-120943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:43:47.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:43:47.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:43:47.915 [DEBUG] [Thread-120943] [transport.py] [_log()] userauth is OK
2025-12-03T17:43:47.915 [DEBUG] [Thread-120943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:43:47.916 [DEBUG] [Thread-120943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:43:47.916 [DEBUG] [Thread-120943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:43:47.916 [DEBUG] [Thread-120943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:43:47.934 [INFO] [Thread-120943] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:43:47.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:43:47.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:43:47.984 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:47.984 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:48.747 [DEBUG] [Thread-120943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:43:48.748 [DEBUG] [Thread-120943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:43:48.796 [DEBUG] [Thread-120943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:43:48.796 [DEBUG] [Thread-120943] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:43:48.805 [DEBUG] [Thread-120943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:43:48.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:43:48.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:43:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:43:48.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:43:48.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:43:48.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:43:48.839 [DEBUG] [Thread-120943] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:43:48.955 [DEBUG] [Thread-120945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:43:58.652 [DEBUG] [Thread-120946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:03.987 [DEBUG] [Thread-120947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:18.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:44:18.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:44:18.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:44:19.014 [DEBUG] [Thread-120948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 43, 45), 22.38, 22.16, 0.0, 31.14, 20.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:44:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:43:45
2025-12-03T17:44:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:44:19.833 [DEBUG] [Thread-120949] [transport.py] [_log()] starting thread (client mode): 0xa51d1db0
2025-12-03T17:44:19.833 [DEBUG] [Thread-120949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:44:19.847 [DEBUG] [Thread-120949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:44:19.847 [INFO] [Thread-120949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] client lang: <none>
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] server lang: <none>
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] kex follows: False
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] Compression: none
2025-12-03T17:44:19.849 [DEBUG] [Thread-120949] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:44:19.862 [DEBUG] [Thread-120949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:44:19.862 [DEBUG] [Thread-120949] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:44:19.862 [DEBUG] [Thread-120949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:44:19.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:44:19.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:44:19.864 [DEBUG] [Thread-120949] [transport.py] [_log()] userauth is OK
2025-12-03T17:44:19.864 [DEBUG] [Thread-120949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:44:19.864 [DEBUG] [Thread-120949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:44:19.864 [DEBUG] [Thread-120949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:44:19.864 [DEBUG] [Thread-120949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:44:19.881 [INFO] [Thread-120949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:44:19.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:44:20.495 [DEBUG] [Thread-120949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:44:20.496 [DEBUG] [Thread-120949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:44:20.496 [DEBUG] [Thread-120949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:44:20.536 [DEBUG] [Thread-120949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:44:20.537 [DEBUG] [Thread-120949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:44:20.539 [DEBUG] [Thread-120949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:44:20.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:44:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:44:20.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:44:20.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:44:20.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:44:20.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:44:20.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:44:20.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:44:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:44:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.655256 -999.00  +20.80  31.85     27   +1.50 1 1 2 1 1   887    0 18.20 -44.94 ----- 31.9 31.9 181.4 35.7 24.7 -30.2 24.4 -33.3 26.3 -30.1 26.4 -30.8
2025-12-03T17:44:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:44:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:44:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.655256
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:44:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:43:45', tmtdew=22.38, humidity=22.16, cloud=0.0, wind=31.14, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:43:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:44:20.564 [DEBUG] [Thread-120949] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:44:20.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:44:20.658 [DEBUG] [Thread-120952] [transport.py] [_log()] starting thread (client mode): 0xa272a470
2025-12-03T17:44:20.658 [DEBUG] [Thread-120952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:44:20.673 [DEBUG] [Thread-120952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:44:20.673 [INFO] [Thread-120952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:44:20.681 [DEBUG] [Thread-120952] [transport.py] [_log()] client lang: <none>
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] server lang: <none>
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] kex follows: False
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] Compression: none
2025-12-03T17:44:20.682 [DEBUG] [Thread-120952] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:44:20.739 [DEBUG] [Thread-120952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:44:20.739 [DEBUG] [Thread-120952] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:44:20.740 [DEBUG] [Thread-120952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:44:20.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:44:20.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:44:20.795 [DEBUG] [Thread-120952] [transport.py] [_log()] userauth is OK
2025-12-03T17:44:20.795 [DEBUG] [Thread-120952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:44:20.795 [DEBUG] [Thread-120952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:44:20.795 [DEBUG] [Thread-120952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:44:20.795 [DEBUG] [Thread-120952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:44:20.817 [INFO] [Thread-120952] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:44:20.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:44:20.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:44:21.700 [DEBUG] [Thread-120952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:44:21.701 [DEBUG] [Thread-120952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:44:21.748 [DEBUG] [Thread-120952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:44:21.749 [DEBUG] [Thread-120952] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:44:21.757 [DEBUG] [Thread-120952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:44:21.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:44:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:44:21.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:44:21.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:44:21.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:44:21.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:44:21.791 [DEBUG] [Thread-120952] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:44:34.043 [DEBUG] [Thread-120954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:48.124 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:48.125 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:49.089 [DEBUG] [Thread-120955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:44:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:44:51.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:44:51.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:44:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 44, 49), 22.08, 22.72, 0.0, 30.93, 20.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:44:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:44:49
2025-12-03T17:44:52.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:44:52.777 [DEBUG] [Thread-120956] [transport.py] [_log()] starting thread (client mode): 0xa517fa00
2025-12-03T17:44:52.777 [DEBUG] [Thread-120956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:44:52.800 [DEBUG] [Thread-120956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:44:52.800 [INFO] [Thread-120956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] client lang: <none>
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] server lang: <none>
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] kex follows: False
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] Compression: none
2025-12-03T17:44:52.804 [DEBUG] [Thread-120956] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:44:52.823 [DEBUG] [Thread-120956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:44:52.823 [DEBUG] [Thread-120956] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:44:52.824 [DEBUG] [Thread-120956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:44:52.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:44:52.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:44:52.825 [DEBUG] [Thread-120956] [transport.py] [_log()] userauth is OK
2025-12-03T17:44:52.826 [DEBUG] [Thread-120956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:44:52.826 [DEBUG] [Thread-120956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:44:52.826 [DEBUG] [Thread-120956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:44:52.826 [DEBUG] [Thread-120956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:44:52.848 [INFO] [Thread-120956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:44:52.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:44:53.492 [DEBUG] [Thread-120956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:44:53.492 [DEBUG] [Thread-120956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:44:53.492 [DEBUG] [Thread-120956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:44:53.533 [DEBUG] [Thread-120956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:44:53.534 [DEBUG] [Thread-120956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:44:53.536 [DEBUG] [Thread-120956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:44:53.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:44:53.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:44:53.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:44:53.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:44:53.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:44:53.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:44:53.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:44:53.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:44:53.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:44:53.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.655603 -999.00  +20.70  19.87     28   +1.60 1 1 1 1 1   887    0 17.98 -41.15 ----- 19.9 19.9 175.2 27.4 24.5 -30.3 24.6 -28.7 26.1 -28.1 26.3 -29.4
2025-12-03T17:44:53.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:44:53.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:44:53.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.655603
2025-12-03T17:44:53.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:44:53.558 [DEBUG] [Thread-120956] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:44:53.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:44:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:44:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:44:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:44:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:44:49', tmtdew=22.08, humidity=22.72, cloud=0.0, wind=30.93, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:44:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:44:53.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:44:53.658 [DEBUG] [Thread-120959] [transport.py] [_log()] starting thread (client mode): 0xa2752c80
2025-12-03T17:44:53.658 [DEBUG] [Thread-120959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:44:53.673 [DEBUG] [Thread-120959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:44:53.673 [INFO] [Thread-120959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:44:53.681 [DEBUG] [Thread-120959] [transport.py] [_log()] client lang: <none>
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] server lang: <none>
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] kex follows: False
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] Compression: none
2025-12-03T17:44:53.682 [DEBUG] [Thread-120959] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:44:53.738 [DEBUG] [Thread-120959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:44:53.738 [DEBUG] [Thread-120959] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:44:53.738 [DEBUG] [Thread-120959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:44:53.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:44:53.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:44:53.801 [DEBUG] [Thread-120959] [transport.py] [_log()] userauth is OK
2025-12-03T17:44:53.801 [DEBUG] [Thread-120959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:44:53.802 [DEBUG] [Thread-120959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:44:53.802 [DEBUG] [Thread-120959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:44:53.802 [DEBUG] [Thread-120959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:44:53.821 [INFO] [Thread-120959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:44:53.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:44:53.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:44:54.692 [DEBUG] [Thread-120959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:44:54.692 [DEBUG] [Thread-120959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:44:54.739 [DEBUG] [Thread-120959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:44:54.740 [DEBUG] [Thread-120959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:44:54.748 [DEBUG] [Thread-120959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:44:54.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:44:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:44:54.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:44:54.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:44:54.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:44:54.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:44:54.787 [DEBUG] [Thread-120959] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:44:58.693 [DEBUG] [Thread-120961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:04.122 [DEBUG] [Thread-120962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:19.163 [DEBUG] [Thread-120963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:24.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:45:24.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:45:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:45:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 45, 21), 22.18, 22.59, 0.0, 28.32, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:45:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:45:21
2025-12-03T17:45:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:45:25.768 [DEBUG] [Thread-120964] [transport.py] [_log()] starting thread (client mode): 0xa51d33a0
2025-12-03T17:45:25.768 [DEBUG] [Thread-120964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:45:25.779 [DEBUG] [Thread-120964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:45:25.779 [INFO] [Thread-120964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:45:25.781 [DEBUG] [Thread-120964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] client lang: <none>
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] server lang: <none>
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] kex follows: False
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] Compression: none
2025-12-03T17:45:25.782 [DEBUG] [Thread-120964] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:45:25.802 [DEBUG] [Thread-120964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:45:25.803 [DEBUG] [Thread-120964] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:45:25.803 [DEBUG] [Thread-120964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:45:25.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:45:25.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:45:25.806 [DEBUG] [Thread-120964] [transport.py] [_log()] userauth is OK
2025-12-03T17:45:25.806 [DEBUG] [Thread-120964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:45:25.806 [DEBUG] [Thread-120964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:45:25.806 [DEBUG] [Thread-120964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:45:25.806 [DEBUG] [Thread-120964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:45:25.822 [INFO] [Thread-120964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:45:25.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:45:26.530 [DEBUG] [Thread-120964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:45:26.530 [DEBUG] [Thread-120964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:45:26.531 [DEBUG] [Thread-120964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:45:26.572 [DEBUG] [Thread-120964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:45:26.572 [DEBUG] [Thread-120964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:45:26.575 [DEBUG] [Thread-120964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:45:26.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:45:26.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:45:26.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:45:26.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:45:26.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:45:26.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:45:26.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.656297 -999.00  +20.40  17.79     28   +1.60 1 1 1 1 1   887    0 18.16 -38.53 ----- 17.8 17.8 174.4 32.7 24.3 -30.5 24.1 -32.1 25.9 -28.3 26.1 -30.3
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:45:26.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.656297
2025-12-03T17:45:26.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:45:26.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:45:26.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:45:26.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:45:26.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:45:26.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:45:21', tmtdew=22.18, humidity=22.59, cloud=0.0, wind=28.32, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:45:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:45:26.599 [DEBUG] [Thread-120964] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:45:26.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:45:26.695 [DEBUG] [Thread-120967] [transport.py] [_log()] starting thread (client mode): 0xa2752800
2025-12-03T17:45:26.695 [DEBUG] [Thread-120967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:45:26.713 [DEBUG] [Thread-120967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:45:26.713 [INFO] [Thread-120967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:45:26.720 [DEBUG] [Thread-120967] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:45:26.720 [DEBUG] [Thread-120967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:45:26.720 [DEBUG] [Thread-120967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] client lang: <none>
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] server lang: <none>
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] kex follows: False
2025-12-03T17:45:26.721 [DEBUG] [Thread-120967] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] Compression: none
2025-12-03T17:45:26.722 [DEBUG] [Thread-120967] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:45:26.779 [DEBUG] [Thread-120967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:45:26.779 [DEBUG] [Thread-120967] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:45:26.780 [DEBUG] [Thread-120967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:45:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:45:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:45:26.835 [DEBUG] [Thread-120967] [transport.py] [_log()] userauth is OK
2025-12-03T17:45:26.835 [DEBUG] [Thread-120967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:45:26.835 [DEBUG] [Thread-120967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:45:26.836 [DEBUG] [Thread-120967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:45:26.836 [DEBUG] [Thread-120967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:45:26.856 [INFO] [Thread-120967] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:45:26.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:45:26.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:45:27.760 [DEBUG] [Thread-120967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:45:27.760 [DEBUG] [Thread-120967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:45:27.808 [DEBUG] [Thread-120967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:45:27.808 [DEBUG] [Thread-120967] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:45:27.817 [DEBUG] [Thread-120967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:45:27.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:45:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:45:27.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:45:27.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:45:27.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:45:27.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:45:27.853 [DEBUG] [Thread-120967] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:45:34.193 [DEBUG] [Thread-120969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:48.276 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:48.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:49.234 [DEBUG] [Thread-120970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:45:57.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:45:57.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:45:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 45, 53), 22.18, 22.58, 0.0, 20.79, 20.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:45:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:45:53
2025-12-03T17:45:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:45:58.721 [DEBUG] [Thread-120971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:45:58.822 [DEBUG] [Thread-120972] [transport.py] [_log()] starting thread (client mode): 0xa2728f10
2025-12-03T17:45:58.822 [DEBUG] [Thread-120972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:45:58.840 [DEBUG] [Thread-120972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:45:58.841 [INFO] [Thread-120972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] client lang: <none>
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] server lang: <none>
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] kex follows: False
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:45:58.844 [DEBUG] [Thread-120972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:45:58.845 [DEBUG] [Thread-120972] [transport.py] [_log()] Compression: none
2025-12-03T17:45:58.845 [DEBUG] [Thread-120972] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:45:58.861 [DEBUG] [Thread-120972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:45:58.861 [DEBUG] [Thread-120972] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:45:58.862 [DEBUG] [Thread-120972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:45:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:45:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:45:58.864 [DEBUG] [Thread-120972] [transport.py] [_log()] userauth is OK
2025-12-03T17:45:58.864 [DEBUG] [Thread-120972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:45:58.864 [DEBUG] [Thread-120972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:45:58.864 [DEBUG] [Thread-120972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:45:58.864 [DEBUG] [Thread-120972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:45:58.879 [INFO] [Thread-120972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:45:58.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:45:59.547 [DEBUG] [Thread-120972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:45:59.547 [DEBUG] [Thread-120972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:45:59.547 [DEBUG] [Thread-120972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:45:59.588 [DEBUG] [Thread-120972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:45:59.588 [DEBUG] [Thread-120972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:45:59.591 [DEBUG] [Thread-120972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:45:59.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:45:59.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:45:59.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:45:59.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:45:59.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:45:59.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:45:59.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:45:59.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:45:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:45:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.656645 -999.00  +20.40  18.87     28   +1.50 1 1 1 1 1   887    0 18.22 -42.55 ----- 18.9 18.9 168.4 26.6 24.3 -30.1 24.3 -30.9 25.9 -27.3 26.0 -29.1
2025-12-03T17:45:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:45:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:45:59.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.656645
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:45:59.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:45:53', tmtdew=22.18, humidity=22.58, cloud=0.0, wind=20.79, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:45:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:45:59.615 [DEBUG] [Thread-120972] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:45:59.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:45:59.709 [DEBUG] [Thread-120975] [transport.py] [_log()] starting thread (client mode): 0xa277bb20
2025-12-03T17:45:59.709 [DEBUG] [Thread-120975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:45:59.724 [DEBUG] [Thread-120975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:45:59.724 [INFO] [Thread-120975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:45:59.731 [DEBUG] [Thread-120975] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:45:59.731 [DEBUG] [Thread-120975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:45:59.731 [DEBUG] [Thread-120975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] client lang: <none>
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] server lang: <none>
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] kex follows: False
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] Compression: none
2025-12-03T17:45:59.732 [DEBUG] [Thread-120975] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:45:59.791 [DEBUG] [Thread-120975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:45:59.791 [DEBUG] [Thread-120975] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:45:59.792 [DEBUG] [Thread-120975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:45:59.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:45:59.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:45:59.847 [DEBUG] [Thread-120975] [transport.py] [_log()] userauth is OK
2025-12-03T17:45:59.847 [DEBUG] [Thread-120975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:45:59.847 [DEBUG] [Thread-120975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:45:59.847 [DEBUG] [Thread-120975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:45:59.848 [DEBUG] [Thread-120975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:45:59.866 [INFO] [Thread-120975] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:45:59.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:45:59.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:46:00.716 [DEBUG] [Thread-120975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:46:00.716 [DEBUG] [Thread-120975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:46:00.764 [DEBUG] [Thread-120975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:46:00.764 [DEBUG] [Thread-120975] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:46:00.773 [DEBUG] [Thread-120975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:46:00.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:46:00.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:46:00.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:46:00.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:46:00.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:46:00.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:46:00.807 [DEBUG] [Thread-120975] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:46:04.258 [DEBUG] [Thread-120977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:19.310 [DEBUG] [Thread-120978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:30.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:46:30.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:46:30.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:46:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 46, 26), 22.42, 22.26, 0.0, 23.01, 20.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:46:31.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:46:26
2025-12-03T17:46:31.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:46:31.808 [DEBUG] [Thread-120979] [transport.py] [_log()] starting thread (client mode): 0xa2728070
2025-12-03T17:46:31.808 [DEBUG] [Thread-120979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:46:31.829 [DEBUG] [Thread-120979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:46:31.829 [INFO] [Thread-120979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:46:31.831 [DEBUG] [Thread-120979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] client lang: <none>
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] server lang: <none>
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] kex follows: False
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] Compression: none
2025-12-03T17:46:31.832 [DEBUG] [Thread-120979] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:46:31.846 [DEBUG] [Thread-120979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:46:31.846 [DEBUG] [Thread-120979] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:46:31.846 [DEBUG] [Thread-120979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:46:31.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:46:31.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:46:31.847 [DEBUG] [Thread-120979] [transport.py] [_log()] userauth is OK
2025-12-03T17:46:31.847 [DEBUG] [Thread-120979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:46:31.847 [DEBUG] [Thread-120979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:46:31.847 [DEBUG] [Thread-120979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:46:31.847 [DEBUG] [Thread-120979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:46:31.856 [INFO] [Thread-120979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:46:31.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:46:32.451 [DEBUG] [Thread-120979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:46:32.451 [DEBUG] [Thread-120979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:46:32.451 [DEBUG] [Thread-120979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:46:32.492 [DEBUG] [Thread-120979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:46:32.492 [DEBUG] [Thread-120979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:46:32.494 [DEBUG] [Thread-120979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:46:32.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:46:32.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:46:32.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:46:32.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:46:32.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:46:32.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:46:32.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.656992 -999.00  +20.50  20.82     28   +1.50 1 1 1 1 1   887    0 17.70 -46.16 ----- 20.8 20.8 195.2 31.6 24.3 -29.3 24.2 -29.7 25.9 -26.9 26.1 -29.2
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.656992
2025-12-03T17:46:32.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:46:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:46:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:46:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:46:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:46:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:46:26', tmtdew=22.42, humidity=22.26, cloud=0.0, wind=23.01, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:46:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:46:32.514 [DEBUG] [Thread-120979] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:46:32.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:46:32.599 [DEBUG] [Thread-120982] [transport.py] [_log()] starting thread (client mode): 0xa272b8b0
2025-12-03T17:46:32.599 [DEBUG] [Thread-120982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:46:32.613 [DEBUG] [Thread-120982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:46:32.614 [INFO] [Thread-120982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] client lang: <none>
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] server lang: <none>
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] kex follows: False
2025-12-03T17:46:32.621 [DEBUG] [Thread-120982] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] Compression: none
2025-12-03T17:46:32.622 [DEBUG] [Thread-120982] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:46:32.678 [DEBUG] [Thread-120982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:46:32.678 [DEBUG] [Thread-120982] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:46:32.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:46:32.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:46:32.678 [DEBUG] [Thread-120982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:46:32.735 [DEBUG] [Thread-120982] [transport.py] [_log()] userauth is OK
2025-12-03T17:46:32.735 [DEBUG] [Thread-120982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:46:32.735 [DEBUG] [Thread-120982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:46:32.735 [DEBUG] [Thread-120982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:46:32.735 [DEBUG] [Thread-120982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:46:32.752 [INFO] [Thread-120982] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:46:32.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:46:32.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:46:33.600 [DEBUG] [Thread-120982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:46:33.600 [DEBUG] [Thread-120982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:46:33.648 [DEBUG] [Thread-120982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:46:33.648 [DEBUG] [Thread-120982] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:46:33.657 [DEBUG] [Thread-120982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:46:33.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:46:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:46:33.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:46:33.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:46:33.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:46:33.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:46:33.690 [DEBUG] [Thread-120982] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:46:34.339 [DEBUG] [Thread-120984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:48.415 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:48.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:49.391 [DEBUG] [Thread-120985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:46:58.768 [DEBUG] [Thread-120986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:03.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:47:03.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:47:03.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:47:04.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 46, 58), 22.59, 22.06, 0.0, 24.72, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:47:04.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:46:58
2025-12-03T17:47:04.421 [DEBUG] [Thread-120987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:04.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:47:04.658 [DEBUG] [Thread-120988] [transport.py] [_log()] starting thread (client mode): 0xa2728e80
2025-12-03T17:47:04.658 [DEBUG] [Thread-120988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:47:04.681 [DEBUG] [Thread-120988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:47:04.681 [INFO] [Thread-120988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] client lang: <none>
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] server lang: <none>
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] kex follows: False
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] Compression: none
2025-12-03T17:47:04.685 [DEBUG] [Thread-120988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:47:04.704 [DEBUG] [Thread-120988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:47:04.704 [DEBUG] [Thread-120988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:47:04.704 [DEBUG] [Thread-120988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:47:04.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:47:04.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:47:04.705 [DEBUG] [Thread-120988] [transport.py] [_log()] userauth is OK
2025-12-03T17:47:04.706 [DEBUG] [Thread-120988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:47:04.706 [DEBUG] [Thread-120988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:47:04.706 [DEBUG] [Thread-120988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:47:04.706 [DEBUG] [Thread-120988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:47:04.723 [INFO] [Thread-120988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:47:04.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:47:05.360 [DEBUG] [Thread-120988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:47:05.360 [DEBUG] [Thread-120988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:47:05.360 [DEBUG] [Thread-120988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:47:05.401 [DEBUG] [Thread-120988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:47:05.401 [DEBUG] [Thread-120988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:47:05.404 [DEBUG] [Thread-120988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:47:05.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:47:05.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:47:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:47:05.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:47:05.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:47:05.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:47:05.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:47:05.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:47:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:47:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.657339 -999.00  +20.50  19.07     28   +1.50 1 1 1 1 1   887    0 18.40 -41.81 ----- 19.1 19.1 192.4 32.8 24.2 -29.8 24.2 -30.2 25.8 -27.1 26.0 -28.9
2025-12-03T17:47:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:47:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:47:05.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.657339
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:47:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:46:58', tmtdew=22.59, humidity=22.06, cloud=0.0, wind=24.72, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:46:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:47:05.431 [DEBUG] [Thread-120988] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:47:05.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:47:05.525 [DEBUG] [Thread-120991] [transport.py] [_log()] starting thread (client mode): 0xa517c280
2025-12-03T17:47:05.525 [DEBUG] [Thread-120991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:47:05.542 [DEBUG] [Thread-120991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:47:05.542 [INFO] [Thread-120991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] client lang: <none>
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] server lang: <none>
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] kex follows: False
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] Compression: none
2025-12-03T17:47:05.549 [DEBUG] [Thread-120991] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:47:05.606 [DEBUG] [Thread-120991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:47:05.606 [DEBUG] [Thread-120991] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:47:05.606 [DEBUG] [Thread-120991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:47:05.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:47:05.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:47:05.663 [DEBUG] [Thread-120991] [transport.py] [_log()] userauth is OK
2025-12-03T17:47:05.663 [DEBUG] [Thread-120991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:47:05.663 [DEBUG] [Thread-120991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:47:05.663 [DEBUG] [Thread-120991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:47:05.663 [DEBUG] [Thread-120991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:47:05.677 [INFO] [Thread-120991] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:47:05.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:47:05.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:47:06.592 [DEBUG] [Thread-120991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:47:06.592 [DEBUG] [Thread-120991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:47:06.639 [DEBUG] [Thread-120991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:47:06.639 [DEBUG] [Thread-120991] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:47:06.647 [DEBUG] [Thread-120991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:47:06.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:47:06.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:47:06.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:47:06.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:47:06.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:47:06.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:47:06.679 [DEBUG] [Thread-120991] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:47:19.448 [DEBUG] [Thread-120993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:34.490 [DEBUG] [Thread-120994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:36.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:47:36.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:47:36.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:47:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 47, 30), 22.38, 22.39, 0.0, 27.35, 20.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:47:37.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:47:30
2025-12-03T17:47:37.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:47:37.652 [DEBUG] [Thread-120995] [transport.py] [_log()] starting thread (client mode): 0xa2753730
2025-12-03T17:47:37.652 [DEBUG] [Thread-120995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:47:37.664 [DEBUG] [Thread-120995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:47:37.665 [INFO] [Thread-120995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:47:37.666 [DEBUG] [Thread-120995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:47:37.666 [DEBUG] [Thread-120995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:47:37.666 [DEBUG] [Thread-120995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:47:37.666 [DEBUG] [Thread-120995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:37.666 [DEBUG] [Thread-120995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] client lang: <none>
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] server lang: <none>
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] kex follows: False
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] Compression: none
2025-12-03T17:47:37.667 [DEBUG] [Thread-120995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:47:37.680 [DEBUG] [Thread-120995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:47:37.681 [DEBUG] [Thread-120995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:47:37.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:47:37.682 [DEBUG] [Thread-120995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:47:37.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:47:37.683 [DEBUG] [Thread-120995] [transport.py] [_log()] userauth is OK
2025-12-03T17:47:37.683 [DEBUG] [Thread-120995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:47:37.683 [DEBUG] [Thread-120995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:47:37.683 [DEBUG] [Thread-120995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:47:37.683 [DEBUG] [Thread-120995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:47:37.697 [INFO] [Thread-120995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:47:37.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:47:38.262 [DEBUG] [Thread-120995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:47:38.262 [DEBUG] [Thread-120995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:47:38.262 [DEBUG] [Thread-120995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:47:38.303 [DEBUG] [Thread-120995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:47:38.303 [DEBUG] [Thread-120995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:47:38.306 [DEBUG] [Thread-120995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:47:38.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:47:38.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:47:38.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:47:38.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:47:38.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:47:38.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:47:38.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:47:38.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:47:38.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:47:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.657687 -999.00  +20.50  18.48     28   +1.40 1 1 1 1 1   887    0 18.32 -41.40 ----- 18.5 18.5 155.6 27.6 24.2 -29.7 24.4 -28.4 25.8 -27.4 26.0 -30.4
2025-12-03T17:47:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:47:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:47:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.657687
2025-12-03T17:47:38.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:47:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:47:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:47:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:47:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:47:38.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:47:30', tmtdew=22.38, humidity=22.39, cloud=0.0, wind=27.35, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:47:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:47:38.331 [DEBUG] [Thread-120995] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:47:38.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:47:38.428 [DEBUG] [Thread-120998] [transport.py] [_log()] starting thread (client mode): 0xa2751360
2025-12-03T17:47:38.428 [DEBUG] [Thread-120998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:47:38.443 [DEBUG] [Thread-120998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:47:38.443 [INFO] [Thread-120998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] client lang: <none>
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] server lang: <none>
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] kex follows: False
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:47:38.451 [DEBUG] [Thread-120998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:47:38.452 [DEBUG] [Thread-120998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:47:38.452 [DEBUG] [Thread-120998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:47:38.452 [DEBUG] [Thread-120998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:47:38.452 [DEBUG] [Thread-120998] [transport.py] [_log()] Compression: none
2025-12-03T17:47:38.452 [DEBUG] [Thread-120998] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:47:38.510 [DEBUG] [Thread-120998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:47:38.511 [DEBUG] [Thread-120998] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:47:38.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:47:38.512 [DEBUG] [Thread-120998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:47:38.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:47:38.567 [DEBUG] [Thread-120998] [transport.py] [_log()] userauth is OK
2025-12-03T17:47:38.567 [DEBUG] [Thread-120998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:47:38.567 [DEBUG] [Thread-120998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:47:38.567 [DEBUG] [Thread-120998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:47:38.567 [DEBUG] [Thread-120998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:47:38.586 [INFO] [Thread-120998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:47:38.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:47:38.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:47:39.408 [DEBUG] [Thread-120998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:47:39.409 [DEBUG] [Thread-120998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:47:39.458 [DEBUG] [Thread-120998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:47:39.458 [DEBUG] [Thread-120998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:47:39.467 [DEBUG] [Thread-120998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:47:39.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:47:39.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:47:39.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:47:39.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:47:39.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:47:39.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:47:39.502 [DEBUG] [Thread-120998] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:47:48.554 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:48.555 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:49.517 [DEBUG] [Thread-121000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:47:58.801 [DEBUG] [Thread-121001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:04.549 [DEBUG] [Thread-121002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:48:09.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:48:09.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:48:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 48, 2), 22.41, 22.33, 0.0, 29.7, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:48:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:48:02
2025-12-03T17:48:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:48:10.464 [DEBUG] [Thread-121003] [transport.py] [_log()] starting thread (client mode): 0xa517fa60
2025-12-03T17:48:10.464 [DEBUG] [Thread-121003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:48:10.484 [DEBUG] [Thread-121003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:48:10.484 [INFO] [Thread-121003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] client lang: <none>
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] server lang: <none>
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] kex follows: False
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:48:10.487 [DEBUG] [Thread-121003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:48:10.488 [DEBUG] [Thread-121003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:48:10.488 [DEBUG] [Thread-121003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:48:10.488 [DEBUG] [Thread-121003] [transport.py] [_log()] Compression: none
2025-12-03T17:48:10.488 [DEBUG] [Thread-121003] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:48:10.503 [DEBUG] [Thread-121003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:48:10.504 [DEBUG] [Thread-121003] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:48:10.504 [DEBUG] [Thread-121003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:48:10.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:48:10.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:48:10.545 [DEBUG] [Thread-121003] [transport.py] [_log()] userauth is OK
2025-12-03T17:48:10.545 [DEBUG] [Thread-121003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:48:10.545 [DEBUG] [Thread-121003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:48:10.545 [DEBUG] [Thread-121003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:48:10.545 [DEBUG] [Thread-121003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:48:10.570 [INFO] [Thread-121003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:48:10.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:48:11.170 [DEBUG] [Thread-121003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:48:11.170 [DEBUG] [Thread-121003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:48:11.170 [DEBUG] [Thread-121003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:48:11.211 [DEBUG] [Thread-121003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:48:11.211 [DEBUG] [Thread-121003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:48:11.214 [DEBUG] [Thread-121003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:48:11.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:48:11.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:48:11.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:48:11.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:48:11.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:48:11.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:48:11.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:48:11.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.658034 -999.00  +20.60  17.06     28   +1.50 1 1 1 1 1   887    0 18.24 -39.96 ----- 17.1 17.1 151.2 22.2 24.2 -29.5 24.4 -29.1 25.8 -26.9 26.1 -28.9
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.658034
2025-12-03T17:48:11.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:48:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:48:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:48:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:48:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:48:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:48:02', tmtdew=22.41, humidity=22.33, cloud=0.0, wind=29.7, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:47:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:48:11.240 [DEBUG] [Thread-121003] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:48:11.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:48:11.351 [DEBUG] [Thread-121006] [transport.py] [_log()] starting thread (client mode): 0xa272ba90
2025-12-03T17:48:11.351 [DEBUG] [Thread-121006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:48:11.366 [DEBUG] [Thread-121006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:48:11.366 [INFO] [Thread-121006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:48:11.373 [DEBUG] [Thread-121006] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:48:11.373 [DEBUG] [Thread-121006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:48:11.374 [DEBUG] [Thread-121006] [transport.py] [_log()] client lang: <none>
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] server lang: <none>
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] kex follows: False
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] Compression: none
2025-12-03T17:48:11.375 [DEBUG] [Thread-121006] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:48:11.431 [DEBUG] [Thread-121006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:48:11.431 [DEBUG] [Thread-121006] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:48:11.431 [DEBUG] [Thread-121006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:48:11.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:48:11.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:48:11.487 [DEBUG] [Thread-121006] [transport.py] [_log()] userauth is OK
2025-12-03T17:48:11.487 [DEBUG] [Thread-121006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:48:11.487 [DEBUG] [Thread-121006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:48:11.487 [DEBUG] [Thread-121006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:48:11.487 [DEBUG] [Thread-121006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:48:11.507 [INFO] [Thread-121006] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:48:11.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:48:11.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:48:12.373 [DEBUG] [Thread-121006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:48:12.374 [DEBUG] [Thread-121006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:48:12.422 [DEBUG] [Thread-121006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:48:12.422 [DEBUG] [Thread-121006] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:48:12.431 [DEBUG] [Thread-121006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:48:12.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:48:12.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:48:12.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:48:12.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:48:12.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:48:12.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:48:12.465 [DEBUG] [Thread-121006] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:48:19.576 [DEBUG] [Thread-121008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:34.616 [DEBUG] [Thread-121009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:42.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:48:42.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:48:42.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:48:43.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 48, 34), 22.61, 21.89, 0.0, 23.96, 21.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:48:43.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:48:34
2025-12-03T17:48:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:48:43.443 [DEBUG] [Thread-121010] [transport.py] [_log()] starting thread (client mode): 0xa514b2b0
2025-12-03T17:48:43.444 [DEBUG] [Thread-121010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:48:43.463 [DEBUG] [Thread-121010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:48:43.464 [INFO] [Thread-121010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:48:43.467 [DEBUG] [Thread-121010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:48:43.467 [DEBUG] [Thread-121010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] client lang: <none>
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] server lang: <none>
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] kex follows: False
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:48:43.468 [DEBUG] [Thread-121010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:48:43.469 [DEBUG] [Thread-121010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:48:43.469 [DEBUG] [Thread-121010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:48:43.469 [DEBUG] [Thread-121010] [transport.py] [_log()] Compression: none
2025-12-03T17:48:43.469 [DEBUG] [Thread-121010] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:48:43.484 [DEBUG] [Thread-121010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:48:43.485 [DEBUG] [Thread-121010] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:48:43.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:48:43.486 [DEBUG] [Thread-121010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:48:43.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:48:43.489 [DEBUG] [Thread-121010] [transport.py] [_log()] userauth is OK
2025-12-03T17:48:43.489 [DEBUG] [Thread-121010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:48:43.489 [DEBUG] [Thread-121010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:48:43.489 [DEBUG] [Thread-121010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:48:43.489 [DEBUG] [Thread-121010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:48:43.508 [INFO] [Thread-121010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:48:43.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:48:44.068 [DEBUG] [Thread-121010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:48:44.069 [DEBUG] [Thread-121010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:48:44.069 [DEBUG] [Thread-121010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:48:44.110 [DEBUG] [Thread-121010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:48:44.110 [DEBUG] [Thread-121010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:48:44.113 [DEBUG] [Thread-121010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:48:44.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:48:44.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:48:44.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:48:44.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:48:44.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:48:44.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:48:44.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:48:44.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:48:44.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:48:44.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.658381 -999.00  +20.50  24.85     28   +1.40 1 1 1 1 1   887    0 18.00 -41.59 ----- 24.9 24.9 147.0 32.8 24.2 -29.6 24.4 -29.4 25.8 -27.7 25.9 -30.1
2025-12-03T17:48:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:48:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:48:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.658381
2025-12-03T17:48:44.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:48:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:48:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:48:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:48:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:48:44.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:48:34', tmtdew=22.61, humidity=21.89, cloud=0.0, wind=23.96, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:48:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:48:44.135 [DEBUG] [Thread-121010] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:48:44.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:48:44.232 [DEBUG] [Thread-121013] [transport.py] [_log()] starting thread (client mode): 0xa27c8430
2025-12-03T17:48:44.232 [DEBUG] [Thread-121013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:48:44.247 [DEBUG] [Thread-121013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:48:44.247 [INFO] [Thread-121013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:48:44.254 [DEBUG] [Thread-121013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:48:44.254 [DEBUG] [Thread-121013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:48:44.254 [DEBUG] [Thread-121013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:48:44.254 [DEBUG] [Thread-121013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] client lang: <none>
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] server lang: <none>
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] kex follows: False
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] Compression: none
2025-12-03T17:48:44.255 [DEBUG] [Thread-121013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:48:44.310 [DEBUG] [Thread-121013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:48:44.311 [DEBUG] [Thread-121013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:48:44.311 [DEBUG] [Thread-121013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:48:44.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:48:44.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:48:44.367 [DEBUG] [Thread-121013] [transport.py] [_log()] userauth is OK
2025-12-03T17:48:44.367 [DEBUG] [Thread-121013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:48:44.367 [DEBUG] [Thread-121013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:48:44.367 [DEBUG] [Thread-121013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:48:44.367 [DEBUG] [Thread-121013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:48:44.386 [INFO] [Thread-121013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:48:44.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:48:44.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:48:45.232 [DEBUG] [Thread-121013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:48:45.232 [DEBUG] [Thread-121013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:48:45.279 [DEBUG] [Thread-121013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:48:45.279 [DEBUG] [Thread-121013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:48:45.288 [DEBUG] [Thread-121013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:48:45.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:48:45.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:48:45.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:48:45.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:48:45.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:48:45.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:48:45.323 [DEBUG] [Thread-121013] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:48:48.693 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:48.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:49.648 [DEBUG] [Thread-121015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:48:58.845 [DEBUG] [Thread-121016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:04.687 [DEBUG] [Thread-121017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:15.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:49:15.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:49:15.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:49:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 49, 6), 22.5, 22.03, 0.0, 24.45, 20.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:49:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:49:06
2025-12-03T17:49:16.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:49:16.276 [DEBUG] [Thread-121018] [transport.py] [_log()] starting thread (client mode): 0xa517ff70
2025-12-03T17:49:16.277 [DEBUG] [Thread-121018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:49:16.297 [DEBUG] [Thread-121018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:49:16.297 [INFO] [Thread-121018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:49:16.300 [DEBUG] [Thread-121018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:49:16.300 [DEBUG] [Thread-121018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] client lang: <none>
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] server lang: <none>
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] kex follows: False
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:49:16.301 [DEBUG] [Thread-121018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:49:16.302 [DEBUG] [Thread-121018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:49:16.302 [DEBUG] [Thread-121018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:49:16.302 [DEBUG] [Thread-121018] [transport.py] [_log()] Compression: none
2025-12-03T17:49:16.302 [DEBUG] [Thread-121018] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:49:16.319 [DEBUG] [Thread-121018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:49:16.320 [DEBUG] [Thread-121018] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:49:16.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:49:16.321 [DEBUG] [Thread-121018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:49:16.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:49:16.323 [DEBUG] [Thread-121018] [transport.py] [_log()] userauth is OK
2025-12-03T17:49:16.323 [DEBUG] [Thread-121018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:49:16.324 [DEBUG] [Thread-121018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:49:16.324 [DEBUG] [Thread-121018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:49:16.324 [DEBUG] [Thread-121018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:49:16.359 [INFO] [Thread-121018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:49:16.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:49:16.978 [DEBUG] [Thread-121018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:49:16.978 [DEBUG] [Thread-121018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:49:16.978 [DEBUG] [Thread-121018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:49:17.019 [DEBUG] [Thread-121018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:49:17.019 [DEBUG] [Thread-121018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:49:17.022 [DEBUG] [Thread-121018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:49:17.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:49:17.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:49:17.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:49:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:49:17.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:49:17.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:49:17.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:49:17.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:49:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:49:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.658728 -999.00  +20.30  20.23     28   +1.30 1 1 1 1 1   887    0 17.98 -43.63 ----- 20.2 20.2 142.8 30.6 -999.0 -999.0 24.4 -28.8 25.7 -27.7 25.9 -29.8
2025-12-03T17:49:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:49:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:49:17.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.658728
2025-12-03T17:49:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:49:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:49:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:49:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:49:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:49:17.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:49:06', tmtdew=22.5, humidity=22.03, cloud=0.0, wind=24.45, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:48:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:49:17.049 [DEBUG] [Thread-121018] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:49:17.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:49:17.144 [DEBUG] [Thread-121021] [transport.py] [_log()] starting thread (client mode): 0xa514bc10
2025-12-03T17:49:17.144 [DEBUG] [Thread-121021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:49:17.160 [DEBUG] [Thread-121021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:49:17.160 [INFO] [Thread-121021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:17.167 [DEBUG] [Thread-121021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] client lang: <none>
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] server lang: <none>
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] kex follows: False
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] Compression: none
2025-12-03T17:49:17.168 [DEBUG] [Thread-121021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:49:17.226 [DEBUG] [Thread-121021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:49:17.226 [DEBUG] [Thread-121021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:49:17.226 [DEBUG] [Thread-121021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:49:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:49:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:49:17.283 [DEBUG] [Thread-121021] [transport.py] [_log()] userauth is OK
2025-12-03T17:49:17.283 [DEBUG] [Thread-121021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:49:17.283 [DEBUG] [Thread-121021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:49:17.284 [DEBUG] [Thread-121021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:49:17.284 [DEBUG] [Thread-121021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:49:17.303 [INFO] [Thread-121021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:49:17.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:49:18.150 [DEBUG] [Thread-121021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:49:18.151 [DEBUG] [Thread-121021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:49:18.199 [DEBUG] [Thread-121021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:49:18.199 [DEBUG] [Thread-121021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:49:18.208 [DEBUG] [Thread-121021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:49:18.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:49:18.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:49:18.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:49:18.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:49:18.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:49:18.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:49:18.242 [DEBUG] [Thread-121021] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:49:19.712 [DEBUG] [Thread-121023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:34.754 [DEBUG] [Thread-121024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:49:48.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:49:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:49:48.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:48.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 49, 38), 22.64, 21.59, 0.0, 21.63, 20.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:49:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:49:38
2025-12-03T17:49:49.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:49:49.205 [DEBUG] [Thread-121025] [transport.py] [_log()] starting thread (client mode): 0xa5149de0
2025-12-03T17:49:49.206 [DEBUG] [Thread-121025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:49:49.219 [DEBUG] [Thread-121025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:49:49.219 [INFO] [Thread-121025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] client lang: <none>
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] server lang: <none>
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] kex follows: False
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] Compression: none
2025-12-03T17:49:49.222 [DEBUG] [Thread-121025] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:49:49.230 [DEBUG] [Thread-121025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:49:49.230 [DEBUG] [Thread-121025] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:49:49.230 [DEBUG] [Thread-121025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:49:49.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:49:49.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:49:49.231 [DEBUG] [Thread-121025] [transport.py] [_log()] userauth is OK
2025-12-03T17:49:49.231 [DEBUG] [Thread-121025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:49:49.231 [DEBUG] [Thread-121025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:49:49.231 [DEBUG] [Thread-121025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:49:49.231 [DEBUG] [Thread-121025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:49:49.244 [INFO] [Thread-121025] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:49:49.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:49:49.781 [DEBUG] [Thread-121027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:49:49.916 [DEBUG] [Thread-121025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:49:49.916 [DEBUG] [Thread-121025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:49:49.917 [DEBUG] [Thread-121025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:49:49.956 [DEBUG] [Thread-121025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:49:49.957 [DEBUG] [Thread-121025] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:49:49.959 [DEBUG] [Thread-121025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:49:49.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:49:49.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:49:49.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:49:49.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:49:49.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:49:49.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:49:49.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.659075 -999.00  +20.40  17.64     28   +1.40 1 1 1 1 1   887    0 18.16 -41.91 ----- 17.6 17.6 157.4 20.8 24.1 -29.8 24.4 -28.4 25.8 -27.7 25.9 -28.8
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:49:49.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.659075
2025-12-03T17:49:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:49:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:49:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:49:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:49:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:49:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:49:38', tmtdew=22.64, humidity=21.59, cloud=0.0, wind=21.63, temperature=20.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:49:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:49:49.985 [DEBUG] [Thread-121025] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:49:50.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:49:50.081 [DEBUG] [Thread-121029] [transport.py] [_log()] starting thread (client mode): 0xa2763280
2025-12-03T17:49:50.081 [DEBUG] [Thread-121029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:49:50.096 [DEBUG] [Thread-121029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:49:50.096 [INFO] [Thread-121029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:49:50.104 [DEBUG] [Thread-121029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:49:50.104 [DEBUG] [Thread-121029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:49:50.104 [DEBUG] [Thread-121029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:49:50.104 [DEBUG] [Thread-121029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] client lang: <none>
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] server lang: <none>
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] kex follows: False
2025-12-03T17:49:50.105 [DEBUG] [Thread-121029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] Compression: none
2025-12-03T17:49:50.106 [DEBUG] [Thread-121029] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:49:50.163 [DEBUG] [Thread-121029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:49:50.164 [DEBUG] [Thread-121029] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:49:50.164 [DEBUG] [Thread-121029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:49:50.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:49:50.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:49:50.219 [DEBUG] [Thread-121029] [transport.py] [_log()] userauth is OK
2025-12-03T17:49:50.219 [DEBUG] [Thread-121029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:49:50.219 [DEBUG] [Thread-121029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:49:50.220 [DEBUG] [Thread-121029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:49:50.220 [DEBUG] [Thread-121029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:49:50.238 [INFO] [Thread-121029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:49:50.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:49:50.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:49:51.069 [DEBUG] [Thread-121029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:49:51.070 [DEBUG] [Thread-121029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:49:51.118 [DEBUG] [Thread-121029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:49:51.118 [DEBUG] [Thread-121029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:49:51.127 [DEBUG] [Thread-121029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:49:51.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:49:51.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:49:51.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:49:51.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:49:51.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:49:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:49:51.162 [DEBUG] [Thread-121029] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:49:58.880 [DEBUG] [Thread-121031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:04.809 [DEBUG] [Thread-121032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:19.858 [DEBUG] [Thread-121033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:21.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:50:21.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:50:21.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:50:21.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 50, 11), 22.59, 21.67, 0.0, 20.27, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:50:21.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:50:11
2025-12-03T17:50:22.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:50:22.202 [DEBUG] [Thread-121034] [transport.py] [_log()] starting thread (client mode): 0xa2752d40
2025-12-03T17:50:22.202 [DEBUG] [Thread-121034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:50:22.224 [DEBUG] [Thread-121034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:50:22.224 [INFO] [Thread-121034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:22.227 [DEBUG] [Thread-121034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] client lang: <none>
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] server lang: <none>
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] kex follows: False
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] Compression: none
2025-12-03T17:50:22.228 [DEBUG] [Thread-121034] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:50:22.243 [DEBUG] [Thread-121034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:50:22.243 [DEBUG] [Thread-121034] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:50:22.243 [DEBUG] [Thread-121034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:50:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:50:22.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:50:22.244 [DEBUG] [Thread-121034] [transport.py] [_log()] userauth is OK
2025-12-03T17:50:22.244 [DEBUG] [Thread-121034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:50:22.244 [DEBUG] [Thread-121034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:50:22.244 [DEBUG] [Thread-121034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:50:22.244 [DEBUG] [Thread-121034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:50:22.253 [INFO] [Thread-121034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:50:22.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:50:22.890 [DEBUG] [Thread-121034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:50:22.890 [DEBUG] [Thread-121034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:50:22.890 [DEBUG] [Thread-121034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:50:22.932 [DEBUG] [Thread-121034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:50:22.932 [DEBUG] [Thread-121034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:50:22.934 [DEBUG] [Thread-121034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:50:22.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:50:22.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:50:22.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:50:22.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:50:22.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:50:22.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:50:22.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:50:22.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.659423 -999.00  +20.60  22.69     28   +1.50 1 1 1 1 1   887    0 18.25 -43.83 ----- 22.7 22.7 171.2 27.1 24.1 -29.4 24.3 -28.9 25.8 -27.0 25.9 -28.8
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.659423
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:50:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:50:11', tmtdew=22.59, humidity=21.67, cloud=0.0, wind=20.27, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:49:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:50:22.953 [DEBUG] [Thread-121034] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:50:23.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:50:23.036 [DEBUG] [Thread-121037] [transport.py] [_log()] starting thread (client mode): 0xa2753a60
2025-12-03T17:50:23.037 [DEBUG] [Thread-121037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:50:23.052 [DEBUG] [Thread-121037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:50:23.053 [INFO] [Thread-121037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] client lang: <none>
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] server lang: <none>
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] kex follows: False
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:50:23.060 [DEBUG] [Thread-121037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:50:23.061 [DEBUG] [Thread-121037] [transport.py] [_log()] Compression: none
2025-12-03T17:50:23.061 [DEBUG] [Thread-121037] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:50:23.118 [DEBUG] [Thread-121037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:50:23.118 [DEBUG] [Thread-121037] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:50:23.119 [DEBUG] [Thread-121037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:50:23.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:50:23.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:50:23.175 [DEBUG] [Thread-121037] [transport.py] [_log()] userauth is OK
2025-12-03T17:50:23.175 [DEBUG] [Thread-121037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:50:23.175 [DEBUG] [Thread-121037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:50:23.175 [DEBUG] [Thread-121037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:50:23.175 [DEBUG] [Thread-121037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:50:23.193 [INFO] [Thread-121037] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:50:23.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:50:23.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:50:24.087 [DEBUG] [Thread-121037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:50:24.087 [DEBUG] [Thread-121037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:50:24.134 [DEBUG] [Thread-121037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:50:24.135 [DEBUG] [Thread-121037] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:50:24.143 [DEBUG] [Thread-121037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:50:24.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:50:24.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:50:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:50:24.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:50:24.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:50:24.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:50:24.174 [DEBUG] [Thread-121037] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:50:34.882 [DEBUG] [Thread-121039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:48.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:48.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:49.930 [DEBUG] [Thread-121040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:50:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:50:54.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:50:54.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:50:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 50, 43), 22.4, 22.03, 0.0, 23.13, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:50:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:50:43
2025-12-03T17:50:54.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:50:55.140 [DEBUG] [Thread-121041] [transport.py] [_log()] starting thread (client mode): 0xa517f4c0
2025-12-03T17:50:55.140 [DEBUG] [Thread-121041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:50:55.150 [DEBUG] [Thread-121041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:50:55.150 [INFO] [Thread-121041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:50:55.151 [DEBUG] [Thread-121041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:50:55.151 [DEBUG] [Thread-121041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] client lang: <none>
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] server lang: <none>
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] kex follows: False
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] Compression: none
2025-12-03T17:50:55.152 [DEBUG] [Thread-121041] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:50:55.162 [DEBUG] [Thread-121041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:50:55.162 [DEBUG] [Thread-121041] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:50:55.162 [DEBUG] [Thread-121041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:50:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:50:55.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:50:55.163 [DEBUG] [Thread-121041] [transport.py] [_log()] userauth is OK
2025-12-03T17:50:55.163 [DEBUG] [Thread-121041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:50:55.163 [DEBUG] [Thread-121041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:50:55.163 [DEBUG] [Thread-121041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:50:55.163 [DEBUG] [Thread-121041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:50:55.191 [INFO] [Thread-121041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:50:55.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:50:55.768 [DEBUG] [Thread-121041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:50:55.768 [DEBUG] [Thread-121041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:50:55.769 [DEBUG] [Thread-121041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:50:55.809 [DEBUG] [Thread-121041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:50:55.809 [DEBUG] [Thread-121041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:50:55.811 [DEBUG] [Thread-121041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:50:55.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:50:55.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:50:55.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:50:55.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:50:55.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:50:55.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:50:55.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.660117 -999.00  +20.40  16.12     28   +1.30 1 1 1 1 1   887    0 18.09 -49.20 ----- 16.1 16.1 155.4 22.8 24.1 -30.3 24.4 -28.6 25.7 -27.1 25.9 -28.9
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:50:55.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.660117
2025-12-03T17:50:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:50:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:50:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:50:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:50:55.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:50:55.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:50:43', tmtdew=22.4, humidity=22.03, cloud=0.0, wind=23.13, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:50:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:50:55.831 [DEBUG] [Thread-121041] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:50:55.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:50:55.927 [DEBUG] [Thread-121044] [transport.py] [_log()] starting thread (client mode): 0xa27c9c30
2025-12-03T17:50:55.927 [DEBUG] [Thread-121044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:50:55.941 [DEBUG] [Thread-121044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:50:55.941 [INFO] [Thread-121044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] client lang: <none>
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] server lang: <none>
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] kex follows: False
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:50:55.949 [DEBUG] [Thread-121044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:50:55.950 [DEBUG] [Thread-121044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:50:55.950 [DEBUG] [Thread-121044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:50:55.950 [DEBUG] [Thread-121044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:50:55.950 [DEBUG] [Thread-121044] [transport.py] [_log()] Compression: none
2025-12-03T17:50:55.950 [DEBUG] [Thread-121044] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:50:56.006 [DEBUG] [Thread-121044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:50:56.007 [DEBUG] [Thread-121044] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:50:56.007 [DEBUG] [Thread-121044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:50:56.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:50:56.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:50:56.063 [DEBUG] [Thread-121044] [transport.py] [_log()] userauth is OK
2025-12-03T17:50:56.063 [DEBUG] [Thread-121044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:50:56.063 [DEBUG] [Thread-121044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:50:56.063 [DEBUG] [Thread-121044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:50:56.064 [DEBUG] [Thread-121044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:50:56.083 [INFO] [Thread-121044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:50:56.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:50:56.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:50:56.881 [DEBUG] [Thread-121044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:50:56.881 [DEBUG] [Thread-121044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:50:56.929 [DEBUG] [Thread-121044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:50:56.929 [DEBUG] [Thread-121044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:50:56.940 [DEBUG] [Thread-121044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:50:56.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:50:56.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:50:56.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:50:56.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:50:56.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:50:56.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:50:56.974 [DEBUG] [Thread-121044] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:50:58.912 [DEBUG] [Thread-121046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:04.957 [DEBUG] [Thread-121047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:20.008 [DEBUG] [Thread-121048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:51:26.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:51:26.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:51:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 51, 15), 22.38, 22.04, 0.0, 23.63, 20.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:51:27.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:51:15
2025-12-03T17:51:27.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:51:27.942 [DEBUG] [Thread-121049] [transport.py] [_log()] starting thread (client mode): 0xa272b370
2025-12-03T17:51:27.942 [DEBUG] [Thread-121049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:51:27.962 [DEBUG] [Thread-121049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:51:27.962 [INFO] [Thread-121049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:51:27.966 [DEBUG] [Thread-121049] [transport.py] [_log()] client lang: <none>
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] server lang: <none>
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] kex follows: False
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] Compression: none
2025-12-03T17:51:27.967 [DEBUG] [Thread-121049] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:51:27.985 [DEBUG] [Thread-121049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:51:27.986 [DEBUG] [Thread-121049] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:51:27.986 [DEBUG] [Thread-121049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:51:27.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:51:27.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:51:27.988 [DEBUG] [Thread-121049] [transport.py] [_log()] userauth is OK
2025-12-03T17:51:27.989 [DEBUG] [Thread-121049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:51:27.989 [DEBUG] [Thread-121049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:51:27.989 [DEBUG] [Thread-121049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:51:27.989 [DEBUG] [Thread-121049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:51:28.025 [INFO] [Thread-121049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:51:28.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:51:28.661 [DEBUG] [Thread-121049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:51:28.661 [DEBUG] [Thread-121049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:51:28.662 [DEBUG] [Thread-121049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:51:28.702 [DEBUG] [Thread-121049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:51:28.702 [DEBUG] [Thread-121049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:51:28.705 [DEBUG] [Thread-121049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:51:28.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:51:28.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:51:28.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:51:28.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:51:28.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:51:28.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:51:28.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:51:28.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.660464 -999.00  +20.30  19.75     28   +1.30 1 1 1 1 1   887    0 18.22 -50.38 ----- 19.8 19.8 158.8 26.0 24.1 -29.7 24.3 -28.6 25.7 -27.5 25.9 -30.3
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.660464
2025-12-03T17:51:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:51:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:51:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:51:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:51:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:51:28.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:51:15', tmtdew=22.38, humidity=22.04, cloud=0.0, wind=23.63, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:51:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:51:28.725 [DEBUG] [Thread-121049] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:51:28.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:51:28.823 [DEBUG] [Thread-121052] [transport.py] [_log()] starting thread (client mode): 0xa51bb1f0
2025-12-03T17:51:28.823 [DEBUG] [Thread-121052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:51:28.837 [DEBUG] [Thread-121052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:51:28.837 [INFO] [Thread-121052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:51:28.844 [DEBUG] [Thread-121052] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:51:28.844 [DEBUG] [Thread-121052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] client lang: <none>
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] server lang: <none>
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] kex follows: False
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] Compression: none
2025-12-03T17:51:28.845 [DEBUG] [Thread-121052] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:51:28.902 [DEBUG] [Thread-121052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:51:28.902 [DEBUG] [Thread-121052] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:51:28.903 [DEBUG] [Thread-121052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:51:28.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:51:28.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:51:28.959 [DEBUG] [Thread-121052] [transport.py] [_log()] userauth is OK
2025-12-03T17:51:28.959 [DEBUG] [Thread-121052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:51:28.959 [DEBUG] [Thread-121052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:51:28.959 [DEBUG] [Thread-121052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:51:28.960 [DEBUG] [Thread-121052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:51:28.982 [INFO] [Thread-121052] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:51:28.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:51:28.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:51:29.837 [DEBUG] [Thread-121052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:51:29.837 [DEBUG] [Thread-121052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:51:29.885 [DEBUG] [Thread-121052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:51:29.885 [DEBUG] [Thread-121052] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:51:29.894 [DEBUG] [Thread-121052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:51:29.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:51:29.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:51:29.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:51:29.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:51:29.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:51:29.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:51:29.928 [DEBUG] [Thread-121052] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:51:35.037 [DEBUG] [Thread-121054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:49.136 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:49.137 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:50.083 [DEBUG] [Thread-121055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:58.952 [DEBUG] [Thread-121056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:51:59.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:51:59.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:51:59.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:52:00.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 51, 47), 22.43, 22.06, 0.0, 21.68, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:52:00.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:51:47
2025-12-03T17:52:00.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:52:00.890 [DEBUG] [Thread-121057] [transport.py] [_log()] starting thread (client mode): 0xa51b9390
2025-12-03T17:52:00.890 [DEBUG] [Thread-121057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:52:00.908 [DEBUG] [Thread-121057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:52:00.908 [INFO] [Thread-121057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] client lang: <none>
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] server lang: <none>
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] kex follows: False
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] Compression: none
2025-12-03T17:52:00.911 [DEBUG] [Thread-121057] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:52:00.921 [DEBUG] [Thread-121057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:52:00.921 [DEBUG] [Thread-121057] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:52:00.921 [DEBUG] [Thread-121057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:52:00.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:52:00.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:52:00.922 [DEBUG] [Thread-121057] [transport.py] [_log()] userauth is OK
2025-12-03T17:52:00.923 [DEBUG] [Thread-121057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:52:00.923 [DEBUG] [Thread-121057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:52:00.923 [DEBUG] [Thread-121057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:52:00.923 [DEBUG] [Thread-121057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:52:00.934 [INFO] [Thread-121057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:52:00.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:52:01.511 [DEBUG] [Thread-121057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:52:01.517 [DEBUG] [Thread-121057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:52:01.518 [DEBUG] [Thread-121057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:52:01.551 [DEBUG] [Thread-121057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:52:01.551 [DEBUG] [Thread-121057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:52:01.553 [DEBUG] [Thread-121057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:52:01.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:52:01.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:52:01.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:52:01.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:52:01.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:52:01.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.660811 -999.00  +20.30  16.44     28   +1.30 1 1 1 1 1   887    0 18.29 -50.28 ----- 16.4 16.4 143.4 20.9 24.1 -29.1 24.4 -28.8 25.7 -26.3 25.9 -29.2
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:52:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.660811
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:52:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:51:47', tmtdew=22.43, humidity=22.06, cloud=0.0, wind=21.68, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:51:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:52:01.573 [DEBUG] [Thread-121057] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:52:01.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:52:01.658 [DEBUG] [Thread-121060] [transport.py] [_log()] starting thread (client mode): 0xa2761e70
2025-12-03T17:52:01.658 [DEBUG] [Thread-121060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:52:01.673 [DEBUG] [Thread-121060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:52:01.673 [INFO] [Thread-121060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:52:01.680 [DEBUG] [Thread-121060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:52:01.680 [DEBUG] [Thread-121060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] client lang: <none>
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] server lang: <none>
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] kex follows: False
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] Compression: none
2025-12-03T17:52:01.681 [DEBUG] [Thread-121060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:52:01.740 [DEBUG] [Thread-121060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:52:01.741 [DEBUG] [Thread-121060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:52:01.741 [DEBUG] [Thread-121060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:52:01.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:52:01.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:52:01.799 [DEBUG] [Thread-121060] [transport.py] [_log()] userauth is OK
2025-12-03T17:52:01.799 [DEBUG] [Thread-121060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:52:01.799 [DEBUG] [Thread-121060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:52:01.799 [DEBUG] [Thread-121060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:52:01.799 [DEBUG] [Thread-121060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:52:01.819 [INFO] [Thread-121060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:52:01.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:52:01.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:52:02.664 [DEBUG] [Thread-121060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:52:02.664 [DEBUG] [Thread-121060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:52:02.713 [DEBUG] [Thread-121060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:52:02.713 [DEBUG] [Thread-121060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:52:02.723 [DEBUG] [Thread-121060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:52:02.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:52:02.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:52:02.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:52:02.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:52:02.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:52:02.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:52:02.761 [DEBUG] [Thread-121060] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:52:05.113 [DEBUG] [Thread-121062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:20.159 [DEBUG] [Thread-121063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:32.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:52:32.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:52:32.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:52:33.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 52, 18), 22.47, 21.99, 0.0, 20.98, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:52:33.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:52:18
2025-12-03T17:52:33.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:52:33.732 [DEBUG] [Thread-121064] [transport.py] [_log()] starting thread (client mode): 0xa2762ef0
2025-12-03T17:52:33.732 [DEBUG] [Thread-121064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:52:33.752 [DEBUG] [Thread-121064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:52:33.752 [INFO] [Thread-121064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:52:33.755 [DEBUG] [Thread-121064] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:52:33.755 [DEBUG] [Thread-121064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] client lang: <none>
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] server lang: <none>
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] kex follows: False
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:52:33.756 [DEBUG] [Thread-121064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:52:33.757 [DEBUG] [Thread-121064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:52:33.757 [DEBUG] [Thread-121064] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:52:33.757 [DEBUG] [Thread-121064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:52:33.757 [DEBUG] [Thread-121064] [transport.py] [_log()] Compression: none
2025-12-03T17:52:33.757 [DEBUG] [Thread-121064] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:52:33.775 [DEBUG] [Thread-121064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:52:33.776 [DEBUG] [Thread-121064] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:52:33.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:52:33.777 [DEBUG] [Thread-121064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:52:33.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:52:33.779 [DEBUG] [Thread-121064] [transport.py] [_log()] userauth is OK
2025-12-03T17:52:33.779 [DEBUG] [Thread-121064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:52:33.779 [DEBUG] [Thread-121064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:52:33.780 [DEBUG] [Thread-121064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:52:33.780 [DEBUG] [Thread-121064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:52:33.805 [INFO] [Thread-121064] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:52:33.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:52:34.436 [DEBUG] [Thread-121064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:52:34.437 [DEBUG] [Thread-121064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:52:34.437 [DEBUG] [Thread-121064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:52:34.478 [DEBUG] [Thread-121064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:52:34.478 [DEBUG] [Thread-121064] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:52:34.481 [DEBUG] [Thread-121064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:52:34.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:52:34.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:52:34.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:52:34.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:52:34.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:52:34.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:52:34.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:52:34.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:52:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:52:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.661159 -999.00  +20.50  19.19     28   +1.40 1 1 1 1 1   887    0 18.10 -51.15 ----- 19.2 19.2 145.0 25.0 24.1 -29.1 24.4 -29.1 25.8 -27.0 25.9 -28.7
2025-12-03T17:52:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:52:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:52:34.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.661159
2025-12-03T17:52:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:52:34.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:52:34.504 [DEBUG] [Thread-121064] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:52:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:52:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:52:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:52:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:52:18', tmtdew=22.47, humidity=21.99, cloud=0.0, wind=20.98, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:52:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:52:34.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:52:34.601 [DEBUG] [Thread-121067] [transport.py] [_log()] starting thread (client mode): 0xa27c9990
2025-12-03T17:52:34.601 [DEBUG] [Thread-121067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:52:34.616 [DEBUG] [Thread-121067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:52:34.616 [INFO] [Thread-121067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:52:34.623 [DEBUG] [Thread-121067] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] client lang: <none>
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] server lang: <none>
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] kex follows: False
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:52:34.624 [DEBUG] [Thread-121067] [transport.py] [_log()] Compression: none
2025-12-03T17:52:34.625 [DEBUG] [Thread-121067] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:52:34.683 [DEBUG] [Thread-121067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:52:34.683 [DEBUG] [Thread-121067] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:52:34.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:52:34.684 [DEBUG] [Thread-121067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:52:34.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:52:34.739 [DEBUG] [Thread-121067] [transport.py] [_log()] userauth is OK
2025-12-03T17:52:34.739 [DEBUG] [Thread-121067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:52:34.739 [DEBUG] [Thread-121067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:52:34.739 [DEBUG] [Thread-121067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:52:34.740 [DEBUG] [Thread-121067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:52:34.762 [INFO] [Thread-121067] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:52:34.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:52:34.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:52:35.187 [DEBUG] [Thread-121069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:35.601 [DEBUG] [Thread-121067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:52:35.601 [DEBUG] [Thread-121067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:52:35.650 [DEBUG] [Thread-121067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:52:35.650 [DEBUG] [Thread-121067] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:52:35.659 [DEBUG] [Thread-121067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:52:35.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:52:35.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:52:35.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:52:35.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:52:35.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:52:35.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:52:35.695 [DEBUG] [Thread-121067] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:52:49.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:49.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:50.243 [DEBUG] [Thread-121070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:52:58.994 [DEBUG] [Thread-121071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:05.270 [DEBUG] [Thread-121072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:05.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:53:05.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:53:05.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:53:06.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 52, 50), 22.49, 22.03, 0.0, 26.04, 20.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:53:06.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:52:50
2025-12-03T17:53:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:53:06.642 [DEBUG] [Thread-121073] [transport.py] [_log()] starting thread (client mode): 0xa2762890
2025-12-03T17:53:06.645 [DEBUG] [Thread-121073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:53:06.663 [DEBUG] [Thread-121073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:53:06.663 [INFO] [Thread-121073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] client lang: <none>
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] server lang: <none>
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] kex follows: False
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] Compression: none
2025-12-03T17:53:06.666 [DEBUG] [Thread-121073] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:53:06.685 [DEBUG] [Thread-121073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:53:06.685 [DEBUG] [Thread-121073] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:53:06.686 [DEBUG] [Thread-121073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:53:06.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:53:06.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:53:06.688 [DEBUG] [Thread-121073] [transport.py] [_log()] userauth is OK
2025-12-03T17:53:06.688 [DEBUG] [Thread-121073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:53:06.688 [DEBUG] [Thread-121073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:53:06.688 [DEBUG] [Thread-121073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:53:06.688 [DEBUG] [Thread-121073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:53:06.723 [INFO] [Thread-121073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:53:06.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:53:07.333 [DEBUG] [Thread-121073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:53:07.333 [DEBUG] [Thread-121073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:53:07.334 [DEBUG] [Thread-121073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:53:07.374 [DEBUG] [Thread-121073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:53:07.374 [DEBUG] [Thread-121073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:53:07.377 [DEBUG] [Thread-121073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:53:07.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:53:07.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:53:07.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:53:07.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:53:07.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:53:07.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:53:07.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:53:07.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.661506 -999.00  +20.40  16.54     28   +1.20 1 1 1 1 1   887    0 17.69 -52.69 ----- 16.5 16.5 151.2 25.4 24.1 -29.6 24.3 -28.4 25.7 -27.9 25.8 -29.6
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.661506
2025-12-03T17:53:07.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:53:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:53:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:53:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:53:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:53:07.398 [DEBUG] [Thread-121073] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:53:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:52:50', tmtdew=22.49, humidity=22.03, cloud=0.0, wind=26.04, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:52:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:53:07.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:53:07.498 [DEBUG] [Thread-121076] [transport.py] [_log()] starting thread (client mode): 0xa2760490
2025-12-03T17:53:07.498 [DEBUG] [Thread-121076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:53:07.512 [DEBUG] [Thread-121076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:53:07.513 [INFO] [Thread-121076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:53:07.520 [DEBUG] [Thread-121076] [transport.py] [_log()] client lang: <none>
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] server lang: <none>
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] kex follows: False
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] Compression: none
2025-12-03T17:53:07.521 [DEBUG] [Thread-121076] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:53:07.579 [DEBUG] [Thread-121076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:53:07.579 [DEBUG] [Thread-121076] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:53:07.580 [DEBUG] [Thread-121076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:53:07.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:53:07.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:53:07.639 [DEBUG] [Thread-121076] [transport.py] [_log()] userauth is OK
2025-12-03T17:53:07.639 [DEBUG] [Thread-121076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:53:07.639 [DEBUG] [Thread-121076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:53:07.639 [DEBUG] [Thread-121076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:53:07.639 [DEBUG] [Thread-121076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:53:07.658 [INFO] [Thread-121076] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:53:07.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:53:07.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:53:08.498 [DEBUG] [Thread-121076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:53:08.498 [DEBUG] [Thread-121076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:53:08.546 [DEBUG] [Thread-121076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:53:08.546 [DEBUG] [Thread-121076] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:53:08.555 [DEBUG] [Thread-121076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:53:08.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:53:08.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:53:08.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:53:08.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:53:08.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:53:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:53:08.589 [DEBUG] [Thread-121076] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:53:20.298 [DEBUG] [Thread-121078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:35.339 [DEBUG] [Thread-121079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:38.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:53:38.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:53:38.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:53:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 53, 22), 22.48, 22.01, 0.0, 23.22, 20.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:53:39.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:53:22
2025-12-03T17:53:39.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:53:39.548 [DEBUG] [Thread-121080] [transport.py] [_log()] starting thread (client mode): 0xa51b80a0
2025-12-03T17:53:39.548 [DEBUG] [Thread-121080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:53:39.569 [DEBUG] [Thread-121080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:53:39.569 [INFO] [Thread-121080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:53:39.572 [DEBUG] [Thread-121080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:53:39.572 [DEBUG] [Thread-121080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] client lang: <none>
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] server lang: <none>
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] kex follows: False
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] Compression: none
2025-12-03T17:53:39.573 [DEBUG] [Thread-121080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:53:39.590 [DEBUG] [Thread-121080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:53:39.591 [DEBUG] [Thread-121080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:53:39.591 [DEBUG] [Thread-121080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:53:39.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:53:39.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:53:39.593 [DEBUG] [Thread-121080] [transport.py] [_log()] userauth is OK
2025-12-03T17:53:39.593 [DEBUG] [Thread-121080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:53:39.594 [DEBUG] [Thread-121080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:53:39.594 [DEBUG] [Thread-121080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:53:39.594 [DEBUG] [Thread-121080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:53:39.615 [INFO] [Thread-121080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:53:39.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:53:40.194 [DEBUG] [Thread-121080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:53:40.194 [DEBUG] [Thread-121080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:53:40.195 [DEBUG] [Thread-121080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:53:40.235 [DEBUG] [Thread-121080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:53:40.235 [DEBUG] [Thread-121080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:53:40.238 [DEBUG] [Thread-121080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:53:40.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:53:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:53:40.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:53:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:53:40.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:53:40.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:53:40.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.661853 -999.00  +20.60  15.21     27   +1.40 1 1 1 1 1   887    0 17.47 -48.54 ----- 15.2 15.2 150.2 19.8 24.1 -28.9 24.4 -28.0 25.8 -26.5 25.9 -28.3
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:53:40.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.661853
2025-12-03T17:53:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:53:40.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:53:40.263 [DEBUG] [Thread-121080] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:53:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:53:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:53:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:53:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:53:22', tmtdew=22.48, humidity=22.01, cloud=0.0, wind=23.22, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:53:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:53:40.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:53:49.417 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:49.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:50.368 [DEBUG] [Thread-121083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:53:59.027 [DEBUG] [Thread-121084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:05.413 [DEBUG] [Thread-121085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:20.441 [DEBUG] [Thread-121086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:35.472 [DEBUG] [Thread-121087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:49.568 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:49.570 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:50.505 [DEBUG] [Thread-121088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:54:59.072 [DEBUG] [Thread-121089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:05.532 [DEBUG] [Thread-121090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:20.567 [DEBUG] [Thread-121091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:35.596 [DEBUG] [Thread-121092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:49.711 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:49.712 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:50.626 [DEBUG] [Thread-121093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:55:54.902 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T17:55:59.128 [DEBUG] [Thread-121094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:05.654 [DEBUG] [Thread-121095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:20.683 [DEBUG] [Thread-121096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:24.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:56:24.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:56:24.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:56:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 56, 4), 22.37, 22.29, 0.0, 22.58, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:56:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:56:04
2025-12-03T17:56:25.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:56:25.880 [DEBUG] [Thread-121097] [transport.py] [_log()] starting thread (client mode): 0xa51bbdf0
2025-12-03T17:56:25.880 [DEBUG] [Thread-121097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:56:25.900 [DEBUG] [Thread-121097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:56:25.900 [INFO] [Thread-121097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] client lang: <none>
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] server lang: <none>
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] kex follows: False
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:56:25.903 [DEBUG] [Thread-121097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:56:25.904 [DEBUG] [Thread-121097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:56:25.904 [DEBUG] [Thread-121097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:56:25.904 [DEBUG] [Thread-121097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:56:25.904 [DEBUG] [Thread-121097] [transport.py] [_log()] Compression: none
2025-12-03T17:56:25.904 [DEBUG] [Thread-121097] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:56:25.912 [DEBUG] [Thread-121097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:56:25.912 [DEBUG] [Thread-121097] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:56:25.912 [DEBUG] [Thread-121097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:56:25.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:56:25.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:56:25.913 [DEBUG] [Thread-121097] [transport.py] [_log()] userauth is OK
2025-12-03T17:56:25.913 [DEBUG] [Thread-121097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:56:25.913 [DEBUG] [Thread-121097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:56:25.913 [DEBUG] [Thread-121097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:56:25.913 [DEBUG] [Thread-121097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:56:25.928 [INFO] [Thread-121097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:56:25.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:56:26.522 [DEBUG] [Thread-121097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:56:26.522 [DEBUG] [Thread-121097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:56:26.523 [DEBUG] [Thread-121097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:56:26.563 [DEBUG] [Thread-121097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:56:26.563 [DEBUG] [Thread-121097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:56:26.566 [DEBUG] [Thread-121097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:56:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:56:26.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:56:26.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:56:26.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:56:26.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:56:26.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:56:26.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:56:26.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:56:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:56:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.663936 -999.00  +20.50  14.29     28   +1.60 1 1 1 1 1   887    0 18.02 -41.60 ----- 14.3 14.3 151.2 23.3 24.1 -30.0 24.3 -28.5 25.7 -27.8 25.9 -28.6
2025-12-03T17:56:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:56:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:56:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.663936
2025-12-03T17:56:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:56:26.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:56:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:56:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:56:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:56:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:56:04', tmtdew=22.37, humidity=22.29, cloud=0.0, wind=22.58, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:56:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:56:26.591 [DEBUG] [Thread-121097] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:56:26.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:56:26.687 [DEBUG] [Thread-121100] [transport.py] [_log()] starting thread (client mode): 0xa27624a0
2025-12-03T17:56:26.687 [DEBUG] [Thread-121100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:56:26.702 [DEBUG] [Thread-121100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:56:26.702 [INFO] [Thread-121100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:56:26.710 [DEBUG] [Thread-121100] [transport.py] [_log()] client lang: <none>
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] server lang: <none>
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] kex follows: False
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] Compression: none
2025-12-03T17:56:26.711 [DEBUG] [Thread-121100] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:56:26.767 [DEBUG] [Thread-121100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:56:26.767 [DEBUG] [Thread-121100] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:56:26.768 [DEBUG] [Thread-121100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:56:26.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:56:26.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:56:26.823 [DEBUG] [Thread-121100] [transport.py] [_log()] userauth is OK
2025-12-03T17:56:26.823 [DEBUG] [Thread-121100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:56:26.823 [DEBUG] [Thread-121100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:56:26.824 [DEBUG] [Thread-121100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:56:26.824 [DEBUG] [Thread-121100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:56:26.843 [INFO] [Thread-121100] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:56:26.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:56:26.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:56:27.664 [DEBUG] [Thread-121100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:56:27.665 [DEBUG] [Thread-121100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:56:27.713 [DEBUG] [Thread-121100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:56:27.713 [DEBUG] [Thread-121100] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:56:27.722 [DEBUG] [Thread-121100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:56:27.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:56:27.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:56:27.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:56:27.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:56:27.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:56:27.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:56:27.758 [DEBUG] [Thread-121100] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:56:35.713 [DEBUG] [Thread-121102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:49.864 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:49.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:50.756 [DEBUG] [Thread-121103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:57.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:56:57.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:56:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:56:58.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 56, 36), 22.04, 22.92, 0.0, 25.13, 20.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:56:58.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:56:36
2025-12-03T17:56:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:56:58.731 [DEBUG] [Thread-121104] [transport.py] [_log()] starting thread (client mode): 0xa2760160
2025-12-03T17:56:58.731 [DEBUG] [Thread-121104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:56:58.750 [DEBUG] [Thread-121104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:56:58.750 [INFO] [Thread-121104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:56:58.753 [DEBUG] [Thread-121104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:56:58.753 [DEBUG] [Thread-121104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] client lang: <none>
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] server lang: <none>
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] kex follows: False
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] Compression: none
2025-12-03T17:56:58.754 [DEBUG] [Thread-121104] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:56:58.771 [DEBUG] [Thread-121104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:56:58.771 [DEBUG] [Thread-121104] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:56:58.772 [DEBUG] [Thread-121104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:56:58.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:56:58.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:56:58.774 [DEBUG] [Thread-121104] [transport.py] [_log()] userauth is OK
2025-12-03T17:56:58.774 [DEBUG] [Thread-121104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:56:58.774 [DEBUG] [Thread-121104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:56:58.774 [DEBUG] [Thread-121104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:56:58.774 [DEBUG] [Thread-121104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:56:58.798 [INFO] [Thread-121104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:56:58.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:56:59.162 [DEBUG] [Thread-121106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:56:59.452 [DEBUG] [Thread-121104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:56:59.452 [DEBUG] [Thread-121104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:56:59.452 [DEBUG] [Thread-121104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:56:59.493 [DEBUG] [Thread-121104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:56:59.493 [DEBUG] [Thread-121104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:56:59.496 [DEBUG] [Thread-121104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:56:59.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:56:59.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:56:59.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:56:59.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:56:59.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:56:59.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:56:59.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.664284 -999.00  +20.60  21.94     28   +1.70 1 1 1 1 1   887    0 17.63 -44.82 ----- 21.9 21.9 163.2 28.9 24.1 -29.7 24.2 -28.3 25.6 -27.8 25.8 -29.1
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:56:59.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.664284
2025-12-03T17:56:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:56:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:56:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:56:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:56:59.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:56:59.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:56:36', tmtdew=22.04, humidity=22.92, cloud=0.0, wind=25.13, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:56:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:56:59.522 [DEBUG] [Thread-121104] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:56:59.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:56:59.627 [DEBUG] [Thread-121108] [transport.py] [_log()] starting thread (client mode): 0xa51bb1f0
2025-12-03T17:56:59.627 [DEBUG] [Thread-121108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:56:59.646 [DEBUG] [Thread-121108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:56:59.646 [INFO] [Thread-121108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:56:59.654 [DEBUG] [Thread-121108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] client lang: <none>
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] server lang: <none>
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] kex follows: False
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] Compression: none
2025-12-03T17:56:59.655 [DEBUG] [Thread-121108] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:56:59.714 [DEBUG] [Thread-121108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:56:59.715 [DEBUG] [Thread-121108] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:56:59.715 [DEBUG] [Thread-121108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:56:59.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:56:59.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:56:59.778 [DEBUG] [Thread-121108] [transport.py] [_log()] userauth is OK
2025-12-03T17:56:59.778 [DEBUG] [Thread-121108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:56:59.779 [DEBUG] [Thread-121108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:56:59.779 [DEBUG] [Thread-121108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:56:59.779 [DEBUG] [Thread-121108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:56:59.799 [INFO] [Thread-121108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:56:59.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:56:59.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:57:00.643 [DEBUG] [Thread-121108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:57:00.643 [DEBUG] [Thread-121108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:57:00.691 [DEBUG] [Thread-121108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:57:00.691 [DEBUG] [Thread-121108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:57:00.700 [DEBUG] [Thread-121108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:57:00.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:57:00.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:57:00.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:57:00.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:57:00.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:57:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:57:00.734 [DEBUG] [Thread-121108] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:57:05.786 [DEBUG] [Thread-121110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:20.831 [DEBUG] [Thread-121111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:57:30.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:57:30.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:57:31.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 57, 8), 22.18, 22.74, 0.0, 25.94, 20.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:57:31.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:57:08
2025-12-03T17:57:31.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:57:31.726 [DEBUG] [Thread-121112] [transport.py] [_log()] starting thread (client mode): 0xa514afe0
2025-12-03T17:57:31.726 [DEBUG] [Thread-121112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:57:31.746 [DEBUG] [Thread-121112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:57:31.746 [INFO] [Thread-121112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:57:31.749 [DEBUG] [Thread-121112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:57:31.749 [DEBUG] [Thread-121112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:57:31.749 [DEBUG] [Thread-121112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:57:31.749 [DEBUG] [Thread-121112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:57:31.749 [DEBUG] [Thread-121112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] client lang: <none>
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] server lang: <none>
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] kex follows: False
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] Compression: none
2025-12-03T17:57:31.750 [DEBUG] [Thread-121112] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:57:31.766 [DEBUG] [Thread-121112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:57:31.767 [DEBUG] [Thread-121112] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:57:31.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:57:31.767 [DEBUG] [Thread-121112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:57:31.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:57:31.769 [DEBUG] [Thread-121112] [transport.py] [_log()] userauth is OK
2025-12-03T17:57:31.770 [DEBUG] [Thread-121112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:57:31.770 [DEBUG] [Thread-121112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:57:31.770 [DEBUG] [Thread-121112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:57:31.770 [DEBUG] [Thread-121112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:57:31.793 [INFO] [Thread-121112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:57:31.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:57:32.434 [DEBUG] [Thread-121112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:57:32.435 [DEBUG] [Thread-121112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:57:32.435 [DEBUG] [Thread-121112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:57:32.476 [DEBUG] [Thread-121112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:57:32.476 [DEBUG] [Thread-121112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:57:32.479 [DEBUG] [Thread-121112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:57:32.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:57:32.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:57:32.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:57:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:57:32.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:57:32.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:57:32.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.664631 -999.00  +20.70  17.52     28   +1.70 1 1 1 1 1   887    0 18.04 -44.35 ----- 17.5 17.5 154.7 23.1 24.1 -28.8 24.3 -28.1 25.7 -26.8 25.9 -28.8
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:57:32.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.664631
2025-12-03T17:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:57:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:57:32.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:57:08', tmtdew=22.18, humidity=22.74, cloud=0.0, wind=25.94, temperature=20.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:57:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:57:32.504 [DEBUG] [Thread-121112] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:57:32.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:57:32.602 [DEBUG] [Thread-121115] [transport.py] [_log()] starting thread (client mode): 0xa27c8bb0
2025-12-03T17:57:32.602 [DEBUG] [Thread-121115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:57:32.620 [DEBUG] [Thread-121115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:57:32.620 [INFO] [Thread-121115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:57:32.630 [DEBUG] [Thread-121115] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:57:32.630 [DEBUG] [Thread-121115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] client lang: <none>
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] server lang: <none>
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] kex follows: False
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:57:32.631 [DEBUG] [Thread-121115] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:57:32.632 [DEBUG] [Thread-121115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:57:32.632 [DEBUG] [Thread-121115] [transport.py] [_log()] Compression: none
2025-12-03T17:57:32.632 [DEBUG] [Thread-121115] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:57:32.693 [DEBUG] [Thread-121115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:57:32.693 [DEBUG] [Thread-121115] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:57:32.694 [DEBUG] [Thread-121115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:57:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:57:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:57:32.760 [DEBUG] [Thread-121115] [transport.py] [_log()] userauth is OK
2025-12-03T17:57:32.760 [DEBUG] [Thread-121115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:57:32.761 [DEBUG] [Thread-121115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:57:32.761 [DEBUG] [Thread-121115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:57:32.761 [DEBUG] [Thread-121115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:57:32.784 [INFO] [Thread-121115] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:57:32.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:57:32.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:57:33.614 [DEBUG] [Thread-121115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:57:33.615 [DEBUG] [Thread-121115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:57:33.663 [DEBUG] [Thread-121115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:57:33.663 [DEBUG] [Thread-121115] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:57:33.675 [DEBUG] [Thread-121115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:57:33.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:57:33.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:57:33.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:57:33.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:57:33.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:57:33.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:57:33.720 [DEBUG] [Thread-121115] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:57:35.858 [DEBUG] [Thread-121117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:50.005 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:50.006 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:50.895 [DEBUG] [Thread-121118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:57:59.210 [DEBUG] [Thread-121119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:03.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:58:03.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:58:03.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:58:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 57, 40), 21.98, 22.72, 0.0, 22.74, 20.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:58:04.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:57:40
2025-12-03T17:58:04.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:58:04.712 [DEBUG] [Thread-121120] [transport.py] [_log()] starting thread (client mode): 0xa2763070
2025-12-03T17:58:04.712 [DEBUG] [Thread-121120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:58:04.732 [DEBUG] [Thread-121120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:58:04.732 [INFO] [Thread-121120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] client lang: <none>
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] server lang: <none>
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] kex follows: False
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] Compression: none
2025-12-03T17:58:04.735 [DEBUG] [Thread-121120] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:58:04.750 [DEBUG] [Thread-121120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:58:04.750 [DEBUG] [Thread-121120] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:58:04.750 [DEBUG] [Thread-121120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:58:04.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:58:04.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:58:04.751 [DEBUG] [Thread-121120] [transport.py] [_log()] userauth is OK
2025-12-03T17:58:04.751 [DEBUG] [Thread-121120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:58:04.751 [DEBUG] [Thread-121120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:58:04.751 [DEBUG] [Thread-121120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:58:04.751 [DEBUG] [Thread-121120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:58:04.761 [INFO] [Thread-121120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:58:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:58:05.404 [DEBUG] [Thread-121120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:58:05.404 [DEBUG] [Thread-121120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:58:05.405 [DEBUG] [Thread-121120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:58:05.445 [DEBUG] [Thread-121120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:58:05.445 [DEBUG] [Thread-121120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:58:05.448 [DEBUG] [Thread-121120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:58:05.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:58:05.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:58:05.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:58:05.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:58:05.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:58:05.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:58:05.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.664978 -999.00  +20.70  17.88     28   +1.80 1 1 1 1 1   887    0 18.17 -44.29 ----- 17.9 17.9 153.6 23.3 24.1 -30.0 24.3 -28.8 25.7 -27.1 25.9 -28.9
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.664978
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:58:05.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:57:40', tmtdew=21.98, humidity=22.72, cloud=0.0, wind=22.74, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:57:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:58:05.465 [DEBUG] [Thread-121120] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:58:05.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:58:05.550 [DEBUG] [Thread-121123] [transport.py] [_log()] starting thread (client mode): 0xa27cbca0
2025-12-03T17:58:05.550 [DEBUG] [Thread-121123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:58:05.565 [DEBUG] [Thread-121123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:58:05.565 [INFO] [Thread-121123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] client lang: <none>
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] server lang: <none>
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] kex follows: False
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:58:05.572 [DEBUG] [Thread-121123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:58:05.573 [DEBUG] [Thread-121123] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:58:05.573 [DEBUG] [Thread-121123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:58:05.573 [DEBUG] [Thread-121123] [transport.py] [_log()] Compression: none
2025-12-03T17:58:05.573 [DEBUG] [Thread-121123] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:58:05.630 [DEBUG] [Thread-121123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:58:05.630 [DEBUG] [Thread-121123] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:58:05.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:58:05.631 [DEBUG] [Thread-121123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:58:05.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:58:05.687 [DEBUG] [Thread-121123] [transport.py] [_log()] userauth is OK
2025-12-03T17:58:05.687 [DEBUG] [Thread-121123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:58:05.687 [DEBUG] [Thread-121123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:58:05.687 [DEBUG] [Thread-121123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:58:05.687 [DEBUG] [Thread-121123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:58:05.704 [INFO] [Thread-121123] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:58:05.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:58:05.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:58:05.921 [DEBUG] [Thread-121125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:06.560 [DEBUG] [Thread-121123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:58:06.560 [DEBUG] [Thread-121123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:58:06.608 [DEBUG] [Thread-121123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:58:06.608 [DEBUG] [Thread-121123] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:58:06.616 [DEBUG] [Thread-121123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:58:06.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:58:06.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:58:06.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:58:06.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:58:06.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:58:06.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:58:06.649 [DEBUG] [Thread-121123] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:58:20.956 [DEBUG] [Thread-121126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:35.986 [DEBUG] [Thread-121127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:36.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:58:36.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:58:36.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:58:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 58, 12), 22.0, 22.69, 0.0, 24.28, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:58:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:58:12
2025-12-03T17:58:37.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:58:37.618 [DEBUG] [Thread-121128] [transport.py] [_log()] starting thread (client mode): 0xa2762320
2025-12-03T17:58:37.618 [DEBUG] [Thread-121128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:58:37.639 [DEBUG] [Thread-121128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:58:37.639 [INFO] [Thread-121128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:58:37.641 [DEBUG] [Thread-121128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] client lang: <none>
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] server lang: <none>
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] kex follows: False
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:58:37.642 [DEBUG] [Thread-121128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:58:37.643 [DEBUG] [Thread-121128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:58:37.643 [DEBUG] [Thread-121128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:58:37.643 [DEBUG] [Thread-121128] [transport.py] [_log()] Compression: none
2025-12-03T17:58:37.643 [DEBUG] [Thread-121128] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:58:37.659 [DEBUG] [Thread-121128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:58:37.660 [DEBUG] [Thread-121128] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:58:37.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:58:37.661 [DEBUG] [Thread-121128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:58:37.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:58:37.663 [DEBUG] [Thread-121128] [transport.py] [_log()] userauth is OK
2025-12-03T17:58:37.663 [DEBUG] [Thread-121128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:58:37.663 [DEBUG] [Thread-121128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:58:37.663 [DEBUG] [Thread-121128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:58:37.663 [DEBUG] [Thread-121128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:58:37.687 [INFO] [Thread-121128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:58:37.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:58:38.342 [DEBUG] [Thread-121128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:58:38.342 [DEBUG] [Thread-121128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:58:38.343 [DEBUG] [Thread-121128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:58:38.383 [DEBUG] [Thread-121128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:58:38.383 [DEBUG] [Thread-121128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:58:38.386 [DEBUG] [Thread-121128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:58:38.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:58:38.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:58:38.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:58:38.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:58:38.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:58:38.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:58:38.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.665325 -999.00  +20.60  21.88     28   +1.80 1 1 1 1 1   887    0 17.74 -41.56 ----- 21.9 21.9 172.1 28.8 24.1 -29.2 24.2 -30.9 25.7 -27.3 25.9 -29.2
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:58:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.665325
2025-12-03T17:58:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:58:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:58:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:58:38.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:58:38.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:58:38.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:58:12', tmtdew=22.0, humidity=22.69, cloud=0.0, wind=24.28, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:58:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:58:38.412 [DEBUG] [Thread-121128] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:58:38.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:58:38.511 [DEBUG] [Thread-121131] [transport.py] [_log()] starting thread (client mode): 0xa277a320
2025-12-03T17:58:38.511 [DEBUG] [Thread-121131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:58:38.529 [DEBUG] [Thread-121131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:58:38.529 [INFO] [Thread-121131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:58:38.539 [DEBUG] [Thread-121131] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] client lang: <none>
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] server lang: <none>
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] kex follows: False
2025-12-03T17:58:38.540 [DEBUG] [Thread-121131] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] Compression: none
2025-12-03T17:58:38.541 [DEBUG] [Thread-121131] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:58:38.600 [DEBUG] [Thread-121131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:58:38.600 [DEBUG] [Thread-121131] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:58:38.601 [DEBUG] [Thread-121131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:58:38.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:58:38.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:58:38.664 [DEBUG] [Thread-121131] [transport.py] [_log()] userauth is OK
2025-12-03T17:58:38.664 [DEBUG] [Thread-121131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:58:38.664 [DEBUG] [Thread-121131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:58:38.664 [DEBUG] [Thread-121131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:58:38.664 [DEBUG] [Thread-121131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:58:38.683 [INFO] [Thread-121131] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:58:38.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:58:38.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:58:39.547 [DEBUG] [Thread-121131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:58:39.547 [DEBUG] [Thread-121131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:58:39.594 [DEBUG] [Thread-121131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:58:39.594 [DEBUG] [Thread-121131] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:58:39.603 [DEBUG] [Thread-121131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:58:39.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:58:39.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:58:39.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:58:39.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:58:39.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:58:39.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:58:39.634 [DEBUG] [Thread-121131] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:58:50.146 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:50.147 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:51.019 [DEBUG] [Thread-121133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:58:59.245 [DEBUG] [Thread-121134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:06.066 [DEBUG] [Thread-121135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:09.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:59:09.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:59:09.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:59:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 58, 44), 22.12, 22.61, 0.0, 24.15, 20.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:59:10.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:58:44
2025-12-03T17:59:10.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:59:10.584 [DEBUG] [Thread-121136] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T17:59:10.584 [DEBUG] [Thread-121136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:59:10.605 [DEBUG] [Thread-121136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:59:10.605 [INFO] [Thread-121136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] client lang: <none>
2025-12-03T17:59:10.608 [DEBUG] [Thread-121136] [transport.py] [_log()] server lang: <none>
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] kex follows: False
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] Compression: none
2025-12-03T17:59:10.609 [DEBUG] [Thread-121136] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:59:10.628 [DEBUG] [Thread-121136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:59:10.628 [DEBUG] [Thread-121136] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:59:10.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:59:10.630 [DEBUG] [Thread-121136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:59:10.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:59:10.632 [DEBUG] [Thread-121136] [transport.py] [_log()] userauth is OK
2025-12-03T17:59:10.632 [DEBUG] [Thread-121136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:59:10.632 [DEBUG] [Thread-121136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:59:10.632 [DEBUG] [Thread-121136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:59:10.632 [DEBUG] [Thread-121136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:59:10.646 [INFO] [Thread-121136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:59:10.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:59:11.285 [DEBUG] [Thread-121136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:59:11.285 [DEBUG] [Thread-121136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:59:11.286 [DEBUG] [Thread-121136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:59:11.327 [DEBUG] [Thread-121136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:59:11.327 [DEBUG] [Thread-121136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:59:11.330 [DEBUG] [Thread-121136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:59:11.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:59:11.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:59:11.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:59:11.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:59:11.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:59:11.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:59:11.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:59:11.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.665673 -999.00  +20.60  21.83     28   +1.70 1 1 1 1 1   887    0 18.39 -38.83 ----- 21.8 21.8 166.0 26.5 24.1 -29.5 24.2 -28.7 25.7 -27.8 25.8 -29.1
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.665673
2025-12-03T17:59:11.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:59:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:59:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:59:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:59:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:59:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:58:44', tmtdew=22.12, humidity=22.61, cloud=0.0, wind=24.15, temperature=20.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:58:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:59:11.353 [DEBUG] [Thread-121136] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:59:11.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:59:11.449 [DEBUG] [Thread-121139] [transport.py] [_log()] starting thread (client mode): 0xa27ca0b0
2025-12-03T17:59:11.450 [DEBUG] [Thread-121139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:59:11.466 [DEBUG] [Thread-121139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:59:11.466 [INFO] [Thread-121139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:59:11.474 [DEBUG] [Thread-121139] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:59:11.474 [DEBUG] [Thread-121139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] client lang: <none>
2025-12-03T17:59:11.475 [DEBUG] [Thread-121139] [transport.py] [_log()] server lang: <none>
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] kex follows: False
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] Compression: none
2025-12-03T17:59:11.476 [DEBUG] [Thread-121139] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:59:11.531 [DEBUG] [Thread-121139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:59:11.532 [DEBUG] [Thread-121139] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:59:11.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:59:11.533 [DEBUG] [Thread-121139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:59:11.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:59:11.587 [DEBUG] [Thread-121139] [transport.py] [_log()] userauth is OK
2025-12-03T17:59:11.587 [DEBUG] [Thread-121139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:59:11.587 [DEBUG] [Thread-121139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:59:11.588 [DEBUG] [Thread-121139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:59:11.588 [DEBUG] [Thread-121139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:59:11.610 [INFO] [Thread-121139] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:59:11.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:59:11.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:59:12.453 [DEBUG] [Thread-121139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:59:12.453 [DEBUG] [Thread-121139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:59:12.501 [DEBUG] [Thread-121139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:59:12.501 [DEBUG] [Thread-121139] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:59:12.510 [DEBUG] [Thread-121139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:59:12.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:59:12.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:59:12.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:59:12.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:59:12.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:59:12.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:59:12.545 [DEBUG] [Thread-121139] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:59:21.092 [DEBUG] [Thread-121141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:36.135 [DEBUG] [Thread-121142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T17:59:42.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T17:59:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T17:59:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 59, 16), 22.1, 22.61, 0.0, 24.31, 20.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T17:59:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:59:16
2025-12-03T17:59:43.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T17:59:43.529 [DEBUG] [Thread-121143] [transport.py] [_log()] starting thread (client mode): 0xa272a350
2025-12-03T17:59:43.529 [DEBUG] [Thread-121143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:59:43.550 [DEBUG] [Thread-121143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T17:59:43.550 [INFO] [Thread-121143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] client lang: <none>
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] server lang: <none>
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] kex follows: False
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] Compression: none
2025-12-03T17:59:43.553 [DEBUG] [Thread-121143] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:59:43.561 [DEBUG] [Thread-121143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:59:43.561 [DEBUG] [Thread-121143] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:59:43.561 [DEBUG] [Thread-121143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T17:59:43.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T17:59:43.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:59:43.562 [DEBUG] [Thread-121143] [transport.py] [_log()] userauth is OK
2025-12-03T17:59:43.562 [DEBUG] [Thread-121143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:59:43.562 [DEBUG] [Thread-121143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:59:43.562 [DEBUG] [Thread-121143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T17:59:43.562 [DEBUG] [Thread-121143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:59:43.572 [INFO] [Thread-121143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:59:43.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:59:44.175 [DEBUG] [Thread-121143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:59:44.175 [DEBUG] [Thread-121143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:59:44.176 [DEBUG] [Thread-121143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T17:59:44.217 [DEBUG] [Thread-121143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:59:44.217 [DEBUG] [Thread-121143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:59:44.220 [DEBUG] [Thread-121143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:59:44.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:59:44.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T17:59:44.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T17:59:44.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T17:59:44.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:59:44.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T17:59:44.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:59:44.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:59:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T17:59:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.666020 -999.00  +20.70  21.90     28   +1.80 1 1 1 1 1   887    0 17.63 -43.63 ----- 21.9 21.9 153.0 25.6 24.1 -29.1 24.3 -28.3 25.7 -26.9 25.9 -28.7
2025-12-03T17:59:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T17:59:44.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T17:59:44.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.666020
2025-12-03T17:59:44.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T17:59:44.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T17:59:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T17:59:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T17:59:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T17:59:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:59:16', tmtdew=22.1, humidity=22.61, cloud=0.0, wind=24.31, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:59:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T17:59:44.244 [DEBUG] [Thread-121143] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:59:44.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T17:59:44.341 [DEBUG] [Thread-121146] [transport.py] [_log()] starting thread (client mode): 0xa27c9bd0
2025-12-03T17:59:44.341 [DEBUG] [Thread-121146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T17:59:44.356 [DEBUG] [Thread-121146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T17:59:44.357 [INFO] [Thread-121146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T17:59:44.364 [DEBUG] [Thread-121146] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T17:59:44.364 [DEBUG] [Thread-121146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] client lang: <none>
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] server lang: <none>
2025-12-03T17:59:44.365 [DEBUG] [Thread-121146] [transport.py] [_log()] kex follows: False
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] Compression: none
2025-12-03T17:59:44.366 [DEBUG] [Thread-121146] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T17:59:44.422 [DEBUG] [Thread-121146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T17:59:44.423 [DEBUG] [Thread-121146] [transport.py] [_log()] Switch to new keys ...
2025-12-03T17:59:44.423 [DEBUG] [Thread-121146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T17:59:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T17:59:44.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T17:59:44.479 [DEBUG] [Thread-121146] [transport.py] [_log()] userauth is OK
2025-12-03T17:59:44.479 [DEBUG] [Thread-121146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T17:59:44.479 [DEBUG] [Thread-121146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T17:59:44.479 [DEBUG] [Thread-121146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T17:59:44.480 [DEBUG] [Thread-121146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T17:59:44.499 [INFO] [Thread-121146] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T17:59:44.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T17:59:44.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T17:59:45.357 [DEBUG] [Thread-121146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T17:59:45.357 [DEBUG] [Thread-121146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T17:59:45.405 [DEBUG] [Thread-121146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T17:59:45.405 [DEBUG] [Thread-121146] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T17:59:45.414 [DEBUG] [Thread-121146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T17:59:45.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T17:59:45.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T17:59:45.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T17:59:45.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T17:59:45.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T17:59:45.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T17:59:45.448 [DEBUG] [Thread-121146] [transport.py] [_log()] EOF in transport thread
2025-12-03T17:59:50.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:50.288 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:51.163 [DEBUG] [Thread-121148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T17:59:59.276 [DEBUG] [Thread-121149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:06.208 [DEBUG] [Thread-121150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:00:15.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:00:15.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:00:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 17, 59, 48), 22.24, 22.17, 0.0, 29.17, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:00:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 17:59:48
2025-12-03T18:00:16.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:00:16.424 [DEBUG] [Thread-121151] [transport.py] [_log()] starting thread (client mode): 0xa51482e0
2025-12-03T18:00:16.424 [DEBUG] [Thread-121151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:00:16.443 [DEBUG] [Thread-121151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:00:16.443 [INFO] [Thread-121151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:00:16.446 [DEBUG] [Thread-121151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] client lang: <none>
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] server lang: <none>
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] kex follows: False
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] Compression: none
2025-12-03T18:00:16.447 [DEBUG] [Thread-121151] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:00:16.465 [DEBUG] [Thread-121151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:00:16.465 [DEBUG] [Thread-121151] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:00:16.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:00:16.466 [DEBUG] [Thread-121151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:00:16.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:00:16.468 [DEBUG] [Thread-121151] [transport.py] [_log()] userauth is OK
2025-12-03T18:00:16.468 [DEBUG] [Thread-121151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:00:16.468 [DEBUG] [Thread-121151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:00:16.468 [DEBUG] [Thread-121151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:00:16.469 [DEBUG] [Thread-121151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:00:16.484 [INFO] [Thread-121151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:00:16.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:00:17.161 [DEBUG] [Thread-121151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:00:17.161 [DEBUG] [Thread-121151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:00:17.162 [DEBUG] [Thread-121151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:00:17.203 [DEBUG] [Thread-121151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:00:17.203 [DEBUG] [Thread-121151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:00:17.206 [DEBUG] [Thread-121151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:00:17.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:00:17.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:00:17.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:00:17.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:00:17.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:00:17.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:00:17.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:00:17.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.666367 -999.00  +20.70  22.48     28   +1.60 1 1 1 1 1   887    0 18.60 -39.28 ----- 22.5 22.5 160.6 30.9 24.1 -29.7 24.3 -29.5 25.6 -28.2 25.8 -29.8
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.666367
2025-12-03T18:00:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:00:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:00:17.230 [DEBUG] [Thread-121151] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:00:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:00:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:00:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:00:17.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T17:59:48', tmtdew=22.24, humidity=22.17, cloud=0.0, wind=29.17, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T15:59:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:00:17.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:00:17.324 [DEBUG] [Thread-121154] [transport.py] [_log()] starting thread (client mode): 0xa277b6a0
2025-12-03T18:00:17.324 [DEBUG] [Thread-121154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:00:17.341 [DEBUG] [Thread-121154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:00:17.341 [INFO] [Thread-121154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:00:17.348 [DEBUG] [Thread-121154] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:00:17.348 [DEBUG] [Thread-121154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] client lang: <none>
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] server lang: <none>
2025-12-03T18:00:17.349 [DEBUG] [Thread-121154] [transport.py] [_log()] kex follows: False
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] Compression: none
2025-12-03T18:00:17.350 [DEBUG] [Thread-121154] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:00:17.406 [DEBUG] [Thread-121154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:00:17.407 [DEBUG] [Thread-121154] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:00:17.407 [DEBUG] [Thread-121154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:00:17.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:00:17.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:00:17.463 [DEBUG] [Thread-121154] [transport.py] [_log()] userauth is OK
2025-12-03T18:00:17.463 [DEBUG] [Thread-121154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:00:17.463 [DEBUG] [Thread-121154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:00:17.464 [DEBUG] [Thread-121154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:00:17.464 [DEBUG] [Thread-121154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:00:17.487 [INFO] [Thread-121154] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:00:17.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:00:17.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:00:18.327 [DEBUG] [Thread-121154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:00:18.327 [DEBUG] [Thread-121154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:00:18.376 [DEBUG] [Thread-121154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:00:18.376 [DEBUG] [Thread-121154] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:00:18.385 [DEBUG] [Thread-121154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:00:18.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:00:18.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:00:18.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:00:18.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:00:18.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:00:18.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:00:18.419 [DEBUG] [Thread-121154] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:00:21.238 [DEBUG] [Thread-121156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:36.275 [DEBUG] [Thread-121157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:48.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:00:48.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:00:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:00:49.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 0, 20), 22.15, 22.31, 0.0, 29.57, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:00:49.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:00:20
2025-12-03T18:00:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:00:49.391 [DEBUG] [Thread-121158] [transport.py] [_log()] starting thread (client mode): 0xa27c8220
2025-12-03T18:00:49.391 [DEBUG] [Thread-121158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:00:49.413 [DEBUG] [Thread-121158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:00:49.413 [INFO] [Thread-121158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] client lang: <none>
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] server lang: <none>
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] kex follows: False
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] Compression: none
2025-12-03T18:00:49.417 [DEBUG] [Thread-121158] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:00:49.425 [DEBUG] [Thread-121158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:00:49.426 [DEBUG] [Thread-121158] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:00:49.426 [DEBUG] [Thread-121158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:00:49.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:00:49.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:00:49.427 [DEBUG] [Thread-121158] [transport.py] [_log()] userauth is OK
2025-12-03T18:00:49.427 [DEBUG] [Thread-121158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:00:49.427 [DEBUG] [Thread-121158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:00:49.427 [DEBUG] [Thread-121158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:00:49.427 [DEBUG] [Thread-121158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:00:49.437 [INFO] [Thread-121158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:00:49.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:00:49.990 [DEBUG] [Thread-121158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:00:49.990 [DEBUG] [Thread-121158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:00:49.991 [DEBUG] [Thread-121158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:00:50.031 [DEBUG] [Thread-121158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:00:50.031 [DEBUG] [Thread-121158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:00:50.034 [DEBUG] [Thread-121158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:00:50.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:00:50.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:00:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:00:50.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:00:50.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:00:50.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:00:50.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.666714 -999.00  +20.50  19.40     28   +1.50 1 1 1 1 1   887    0 17.96 -38.25 ----- 19.4 19.4 166.5 31.0 24.0 -30.4 24.2 -30.1 25.5 -28.2 25.7 -29.8
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:00:50.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.666714
2025-12-03T18:00:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:00:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:00:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:00:50.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:00:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:00:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:00:20', tmtdew=22.15, humidity=22.31, cloud=0.0, wind=29.57, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:00:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:00:50.061 [DEBUG] [Thread-121158] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:00:50.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:00:50.156 [DEBUG] [Thread-121161] [transport.py] [_log()] starting thread (client mode): 0xa51b9330
2025-12-03T18:00:50.156 [DEBUG] [Thread-121161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:00:50.174 [DEBUG] [Thread-121161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:00:50.174 [INFO] [Thread-121161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:50.181 [DEBUG] [Thread-121161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] client lang: <none>
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] server lang: <none>
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] kex follows: False
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] Compression: none
2025-12-03T18:00:50.182 [DEBUG] [Thread-121161] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:00:50.239 [DEBUG] [Thread-121161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:00:50.239 [DEBUG] [Thread-121161] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:00:50.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:00:50.240 [DEBUG] [Thread-121161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:00:50.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:00:50.295 [DEBUG] [Thread-121161] [transport.py] [_log()] userauth is OK
2025-12-03T18:00:50.295 [DEBUG] [Thread-121161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:00:50.295 [DEBUG] [Thread-121161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:00:50.295 [DEBUG] [Thread-121161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:00:50.295 [DEBUG] [Thread-121161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:00:50.314 [INFO] [Thread-121161] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:00:50.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:00:50.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:00:50.425 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:50.426 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:51.164 [DEBUG] [Thread-121161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:00:51.164 [DEBUG] [Thread-121161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:00:51.213 [DEBUG] [Thread-121161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:00:51.213 [DEBUG] [Thread-121161] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:00:51.222 [DEBUG] [Thread-121161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:00:51.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:00:51.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:00:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:00:51.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:00:51.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:00:51.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:00:51.256 [DEBUG] [Thread-121161] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:00:51.304 [DEBUG] [Thread-121163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:00:59.328 [DEBUG] [Thread-121164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:06.355 [DEBUG] [Thread-121165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:01:21.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:01:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:01:21.386 [DEBUG] [Thread-121166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 0, 52), 21.99, 22.77, 0.0, 27.53, 20.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:01:21.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:00:52
2025-12-03T18:01:22.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:01:22.251 [DEBUG] [Thread-121167] [transport.py] [_log()] starting thread (client mode): 0xa51ba440
2025-12-03T18:01:22.252 [DEBUG] [Thread-121167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:01:22.272 [DEBUG] [Thread-121167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:01:22.272 [INFO] [Thread-121167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] client lang: <none>
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] server lang: <none>
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] kex follows: False
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:01:22.275 [DEBUG] [Thread-121167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:01:22.276 [DEBUG] [Thread-121167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:01:22.276 [DEBUG] [Thread-121167] [transport.py] [_log()] Compression: none
2025-12-03T18:01:22.276 [DEBUG] [Thread-121167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:01:22.293 [DEBUG] [Thread-121167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:01:22.293 [DEBUG] [Thread-121167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:01:22.294 [DEBUG] [Thread-121167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:01:22.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:01:22.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:01:22.296 [DEBUG] [Thread-121167] [transport.py] [_log()] userauth is OK
2025-12-03T18:01:22.296 [DEBUG] [Thread-121167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:01:22.296 [DEBUG] [Thread-121167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:01:22.296 [DEBUG] [Thread-121167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:01:22.296 [DEBUG] [Thread-121167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:01:22.317 [INFO] [Thread-121167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:01:22.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:01:22.993 [DEBUG] [Thread-121167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:01:22.994 [DEBUG] [Thread-121167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:01:22.994 [DEBUG] [Thread-121167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:01:23.035 [DEBUG] [Thread-121167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:01:23.035 [DEBUG] [Thread-121167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:01:23.038 [DEBUG] [Thread-121167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:01:23.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:01:23.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:01:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:01:23.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:01:23.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:01:23.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:01:23.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:01:23.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:01:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:01:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.667409 -999.00  +20.30  18.63     28   +1.60 1 1 1 1 1   887    0 18.39 -34.67 ----- 18.6 18.6 168.0 25.5 24.0 -29.2 24.1 -28.9 25.5 -27.3 25.7 -28.7
2025-12-03T18:01:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:01:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:01:23.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.667409
2025-12-03T18:01:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:01:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:01:23.063 [DEBUG] [Thread-121167] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:01:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:01:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:01:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:01:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:00:52', tmtdew=21.99, humidity=22.77, cloud=0.0, wind=27.53, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:01:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:01:23.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:01:23.157 [DEBUG] [Thread-121170] [transport.py] [_log()] starting thread (client mode): 0xa2778490
2025-12-03T18:01:23.157 [DEBUG] [Thread-121170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:01:23.171 [DEBUG] [Thread-121170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:01:23.171 [INFO] [Thread-121170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:23.179 [DEBUG] [Thread-121170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] client lang: <none>
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] server lang: <none>
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] kex follows: False
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:01:23.180 [DEBUG] [Thread-121170] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:01:23.181 [DEBUG] [Thread-121170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:01:23.181 [DEBUG] [Thread-121170] [transport.py] [_log()] Compression: none
2025-12-03T18:01:23.181 [DEBUG] [Thread-121170] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:01:23.235 [DEBUG] [Thread-121170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:01:23.236 [DEBUG] [Thread-121170] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:01:23.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:01:23.236 [DEBUG] [Thread-121170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:01:23.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:01:23.291 [DEBUG] [Thread-121170] [transport.py] [_log()] userauth is OK
2025-12-03T18:01:23.291 [DEBUG] [Thread-121170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:01:23.291 [DEBUG] [Thread-121170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:01:23.292 [DEBUG] [Thread-121170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:01:23.292 [DEBUG] [Thread-121170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:01:23.314 [INFO] [Thread-121170] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:01:23.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:01:23.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:01:24.165 [DEBUG] [Thread-121170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:01:24.165 [DEBUG] [Thread-121170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:01:24.213 [DEBUG] [Thread-121170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:01:24.213 [DEBUG] [Thread-121170] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:01:24.222 [DEBUG] [Thread-121170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:01:24.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:01:24.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:01:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:01:24.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:01:24.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:01:24.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:01:24.256 [DEBUG] [Thread-121170] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:01:36.414 [DEBUG] [Thread-121172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:50.564 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:50.565 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:51.459 [DEBUG] [Thread-121173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:01:54.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:01:54.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:01:54.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:01:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 1, 24), 22.2, 22.43, 0.0, 26.15, 20.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:01:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:01:24
2025-12-03T18:01:55.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:01:55.288 [DEBUG] [Thread-121174] [transport.py] [_log()] starting thread (client mode): 0xa27ca5c0
2025-12-03T18:01:55.288 [DEBUG] [Thread-121174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:01:55.308 [DEBUG] [Thread-121174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:01:55.308 [INFO] [Thread-121174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:01:55.311 [DEBUG] [Thread-121174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:01:55.311 [DEBUG] [Thread-121174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:01:55.311 [DEBUG] [Thread-121174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:01:55.311 [DEBUG] [Thread-121174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] client lang: <none>
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] server lang: <none>
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] kex follows: False
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] Compression: none
2025-12-03T18:01:55.312 [DEBUG] [Thread-121174] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:01:55.327 [DEBUG] [Thread-121174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:01:55.328 [DEBUG] [Thread-121174] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:01:55.328 [DEBUG] [Thread-121174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:01:55.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:01:55.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:01:55.329 [DEBUG] [Thread-121174] [transport.py] [_log()] userauth is OK
2025-12-03T18:01:55.329 [DEBUG] [Thread-121174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:01:55.329 [DEBUG] [Thread-121174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:01:55.329 [DEBUG] [Thread-121174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:01:55.329 [DEBUG] [Thread-121174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:01:55.343 [INFO] [Thread-121174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:01:55.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:01:55.912 [DEBUG] [Thread-121174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:01:55.912 [DEBUG] [Thread-121174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:01:55.912 [DEBUG] [Thread-121174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:01:55.954 [DEBUG] [Thread-121174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:01:55.954 [DEBUG] [Thread-121174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:01:55.956 [DEBUG] [Thread-121174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:01:55.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:01:55.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:01:55.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:01:55.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:01:55.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:01:55.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:01:55.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.667756 -999.00  +20.30  19.45     28   +1.60 1 1 1 1 1   887    0 18.13 -32.07 ----- 19.4 19.4 156.5 26.8 23.9 -29.7 24.1 -28.7 25.4 -27.3 25.7 -29.3
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.667756
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:01:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:01:24', tmtdew=22.2, humidity=22.43, cloud=0.0, wind=26.15, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:01:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:01:55.974 [DEBUG] [Thread-121174] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:01:56.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:01:56.060 [DEBUG] [Thread-121177] [transport.py] [_log()] starting thread (client mode): 0xa2762890
2025-12-03T18:01:56.060 [DEBUG] [Thread-121177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:01:56.080 [DEBUG] [Thread-121177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:01:56.080 [INFO] [Thread-121177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:01:56.087 [DEBUG] [Thread-121177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] client lang: <none>
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] server lang: <none>
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] kex follows: False
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] Compression: none
2025-12-03T18:01:56.088 [DEBUG] [Thread-121177] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:01:56.146 [DEBUG] [Thread-121177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:01:56.146 [DEBUG] [Thread-121177] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:01:56.146 [DEBUG] [Thread-121177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:01:56.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:01:56.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:01:56.203 [DEBUG] [Thread-121177] [transport.py] [_log()] userauth is OK
2025-12-03T18:01:56.203 [DEBUG] [Thread-121177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:01:56.203 [DEBUG] [Thread-121177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:01:56.203 [DEBUG] [Thread-121177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:01:56.203 [DEBUG] [Thread-121177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:01:56.220 [INFO] [Thread-121177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:01:56.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:01:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:01:57.089 [DEBUG] [Thread-121177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:01:57.089 [DEBUG] [Thread-121177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:01:57.136 [DEBUG] [Thread-121177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:01:57.137 [DEBUG] [Thread-121177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:01:57.145 [DEBUG] [Thread-121177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:01:57.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:01:57.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:01:57.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:01:57.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:01:57.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:01:57.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:01:57.177 [DEBUG] [Thread-121177] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:01:59.374 [DEBUG] [Thread-121179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:06.490 [DEBUG] [Thread-121180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:21.538 [DEBUG] [Thread-121181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:02:27.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:02:27.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:02:27.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 1, 56), 22.0, 22.66, 0.0, 21.33, 20.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:02:27.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:01:56
2025-12-03T18:02:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:02:28.162 [DEBUG] [Thread-121182] [transport.py] [_log()] starting thread (client mode): 0xa2779ae0
2025-12-03T18:02:28.163 [DEBUG] [Thread-121182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:02:28.183 [DEBUG] [Thread-121182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:02:28.183 [INFO] [Thread-121182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] client lang: <none>
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] server lang: <none>
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] kex follows: False
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] Compression: none
2025-12-03T18:02:28.187 [DEBUG] [Thread-121182] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:02:28.205 [DEBUG] [Thread-121182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:02:28.205 [DEBUG] [Thread-121182] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:02:28.206 [DEBUG] [Thread-121182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:02:28.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:02:28.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:02:28.208 [DEBUG] [Thread-121182] [transport.py] [_log()] userauth is OK
2025-12-03T18:02:28.208 [DEBUG] [Thread-121182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:02:28.208 [DEBUG] [Thread-121182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:02:28.208 [DEBUG] [Thread-121182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:02:28.208 [DEBUG] [Thread-121182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:02:28.222 [INFO] [Thread-121182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:02:28.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:02:28.780 [DEBUG] [Thread-121182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:02:28.780 [DEBUG] [Thread-121182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:02:28.780 [DEBUG] [Thread-121182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:02:28.820 [DEBUG] [Thread-121182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:02:28.820 [DEBUG] [Thread-121182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:02:28.822 [DEBUG] [Thread-121182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:02:28.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:02:28.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:02:28.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:02:28.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:02:28.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:02:28.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:02:28.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:02:28.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.668103 -999.00  +20.30  17.63     28   +1.40 1 1 1 1 1   887    0 18.23 -28.16 ----- 17.6 17.6 150.0 23.2 23.9 -29.7 24.1 -28.7 25.3 -27.6 25.6 -28.9
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.668103
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:02:28.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:01:56', tmtdew=22.0, humidity=22.66, cloud=0.0, wind=21.33, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:02:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:02:28.838 [DEBUG] [Thread-121182] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:02:28.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:02:28.925 [DEBUG] [Thread-121185] [transport.py] [_log()] starting thread (client mode): 0xa517cca0
2025-12-03T18:02:28.925 [DEBUG] [Thread-121185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:02:28.940 [DEBUG] [Thread-121185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:02:28.940 [INFO] [Thread-121185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:02:28.947 [DEBUG] [Thread-121185] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] client lang: <none>
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] server lang: <none>
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] kex follows: False
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] Compression: none
2025-12-03T18:02:28.948 [DEBUG] [Thread-121185] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:02:29.006 [DEBUG] [Thread-121185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:02:29.006 [DEBUG] [Thread-121185] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:02:29.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:02:29.007 [DEBUG] [Thread-121185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:02:29.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:02:29.067 [DEBUG] [Thread-121185] [transport.py] [_log()] userauth is OK
2025-12-03T18:02:29.067 [DEBUG] [Thread-121185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:02:29.067 [DEBUG] [Thread-121185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:02:29.067 [DEBUG] [Thread-121185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:02:29.067 [DEBUG] [Thread-121185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:02:29.085 [INFO] [Thread-121185] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:02:29.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:02:29.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:02:29.954 [DEBUG] [Thread-121185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:02:29.955 [DEBUG] [Thread-121185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:02:30.002 [DEBUG] [Thread-121185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:02:30.003 [DEBUG] [Thread-121185] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:02:30.011 [DEBUG] [Thread-121185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:02:30.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:02:30.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:02:30.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:02:30.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:02:30.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:02:30.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:02:30.044 [DEBUG] [Thread-121185] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:02:36.564 [DEBUG] [Thread-121187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:50.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:50.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:51.608 [DEBUG] [Thread-121188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:02:59.416 [DEBUG] [Thread-121189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:00.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:03:00.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:03:00.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:03:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 2, 28), 22.03, 22.61, 0.0, 25.14, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:03:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:02:28
2025-12-03T18:03:00.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:03:01.044 [DEBUG] [Thread-121190] [transport.py] [_log()] starting thread (client mode): 0xa514beb0
2025-12-03T18:03:01.044 [DEBUG] [Thread-121190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:03:01.064 [DEBUG] [Thread-121190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:03:01.064 [INFO] [Thread-121190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:01.067 [DEBUG] [Thread-121190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] client lang: <none>
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] server lang: <none>
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] kex follows: False
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] Compression: none
2025-12-03T18:03:01.068 [DEBUG] [Thread-121190] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:03:01.083 [DEBUG] [Thread-121190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:03:01.083 [DEBUG] [Thread-121190] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:03:01.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:03:01.084 [DEBUG] [Thread-121190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:03:01.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:03:01.084 [DEBUG] [Thread-121190] [transport.py] [_log()] userauth is OK
2025-12-03T18:03:01.085 [DEBUG] [Thread-121190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:03:01.085 [DEBUG] [Thread-121190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:03:01.085 [DEBUG] [Thread-121190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:03:01.085 [DEBUG] [Thread-121190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:03:01.095 [INFO] [Thread-121190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:03:01.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:03:01.696 [DEBUG] [Thread-121190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:03:01.697 [DEBUG] [Thread-121190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:03:01.697 [DEBUG] [Thread-121190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:03:01.737 [DEBUG] [Thread-121190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:03:01.737 [DEBUG] [Thread-121190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:03:01.739 [DEBUG] [Thread-121190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:03:01.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:03:01.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:03:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:03:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:03:01.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:03:01.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:03:01.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.668450 -999.00  +20.30  24.90     27   +1.10 1 1 1 1 1   887    0 18.61 -28.98 ----- 24.9 24.9 144.2 28.4 23.9 -29.6 24.1 -28.6 25.3 -27.9 25.6 -29.3
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.668450
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:03:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:03:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:03:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:03:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:02:28', tmtdew=22.03, humidity=22.61, cloud=0.0, wind=25.14, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:02:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:03:01.749 [DEBUG] [Thread-121190] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:03:01.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:03:01.834 [DEBUG] [Thread-121193] [transport.py] [_log()] starting thread (client mode): 0xa2729fc0
2025-12-03T18:03:01.834 [DEBUG] [Thread-121193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:03:01.849 [DEBUG] [Thread-121193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:03:01.849 [INFO] [Thread-121193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] client lang: <none>
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] server lang: <none>
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] kex follows: False
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] Compression: none
2025-12-03T18:03:01.856 [DEBUG] [Thread-121193] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:03:01.914 [DEBUG] [Thread-121193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:03:01.914 [DEBUG] [Thread-121193] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:03:01.914 [DEBUG] [Thread-121193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:03:01.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:03:01.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:03:01.971 [DEBUG] [Thread-121193] [transport.py] [_log()] userauth is OK
2025-12-03T18:03:01.971 [DEBUG] [Thread-121193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:03:01.971 [DEBUG] [Thread-121193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:03:01.971 [DEBUG] [Thread-121193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:03:01.971 [DEBUG] [Thread-121193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:03:01.985 [INFO] [Thread-121193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:03:01.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:03:01.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:03:02.822 [DEBUG] [Thread-121193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:03:02.822 [DEBUG] [Thread-121193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:03:02.870 [DEBUG] [Thread-121193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:03:02.870 [DEBUG] [Thread-121193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:03:02.879 [DEBUG] [Thread-121193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:03:02.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:03:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:03:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:03:02.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:03:02.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:03:02.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:03:02.914 [DEBUG] [Thread-121193] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:03:06.634 [DEBUG] [Thread-121195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:21.667 [DEBUG] [Thread-121196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:32.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:03:32.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:03:32.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:03:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 3), 22.42, 22.04, 0.0, 28.21, 20.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:03:33.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:03:00
2025-12-03T18:03:33.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:03:33.932 [DEBUG] [Thread-121197] [transport.py] [_log()] starting thread (client mode): 0xa277ba00
2025-12-03T18:03:33.932 [DEBUG] [Thread-121197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:03:33.952 [DEBUG] [Thread-121197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:03:33.952 [INFO] [Thread-121197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] client lang: <none>
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] server lang: <none>
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] kex follows: False
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] Compression: none
2025-12-03T18:03:33.955 [DEBUG] [Thread-121197] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:03:33.971 [DEBUG] [Thread-121197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:03:33.971 [DEBUG] [Thread-121197] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:03:33.971 [DEBUG] [Thread-121197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:03:33.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:03:33.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:03:33.972 [DEBUG] [Thread-121197] [transport.py] [_log()] userauth is OK
2025-12-03T18:03:33.972 [DEBUG] [Thread-121197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:03:33.972 [DEBUG] [Thread-121197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:03:33.972 [DEBUG] [Thread-121197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:03:33.972 [DEBUG] [Thread-121197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:03:33.988 [INFO] [Thread-121197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:03:33.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:03:34.626 [DEBUG] [Thread-121197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:03:34.626 [DEBUG] [Thread-121197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:03:34.626 [DEBUG] [Thread-121197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:03:34.667 [DEBUG] [Thread-121197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:03:34.667 [DEBUG] [Thread-121197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:03:34.670 [DEBUG] [Thread-121197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:03:34.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:03:34.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:03:34.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:03:34.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:03:34.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:03:34.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:03:34.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.668797 -999.00  +20.20  20.01     28   +1.20 1 1 1 1 1   887    0 18.32 -27.90 ----- 20.0 20.0 145.6 27.0 23.8 -29.6 24.1 -28.9 25.4 -26.9 25.6 -29.1
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:03:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.668797
2025-12-03T18:03:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:03:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:03:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:03:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:03:34.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:03:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:03:00', tmtdew=22.42, humidity=22.04, cloud=0.0, wind=28.21, temperature=20.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:03:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:03:34.696 [DEBUG] [Thread-121197] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:03:34.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:03:34.797 [DEBUG] [Thread-121200] [transport.py] [_log()] starting thread (client mode): 0xa51d3280
2025-12-03T18:03:34.797 [DEBUG] [Thread-121200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:03:34.812 [DEBUG] [Thread-121200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:03:34.812 [INFO] [Thread-121200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:03:34.820 [DEBUG] [Thread-121200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] client lang: <none>
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] server lang: <none>
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] kex follows: False
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] Compression: none
2025-12-03T18:03:34.821 [DEBUG] [Thread-121200] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:03:34.878 [DEBUG] [Thread-121200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:03:34.879 [DEBUG] [Thread-121200] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:03:34.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:03:34.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:03:34.881 [DEBUG] [Thread-121200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:03:34.935 [DEBUG] [Thread-121200] [transport.py] [_log()] userauth is OK
2025-12-03T18:03:34.935 [DEBUG] [Thread-121200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:03:34.935 [DEBUG] [Thread-121200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:03:34.935 [DEBUG] [Thread-121200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:03:34.936 [DEBUG] [Thread-121200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:03:34.957 [INFO] [Thread-121200] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:03:34.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:03:34.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:03:35.793 [DEBUG] [Thread-121200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:03:35.794 [DEBUG] [Thread-121200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:03:35.842 [DEBUG] [Thread-121200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:03:35.842 [DEBUG] [Thread-121200] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:03:35.850 [DEBUG] [Thread-121200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:03:35.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:03:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:03:35.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:03:35.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:03:35.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:03:35.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:03:35.885 [DEBUG] [Thread-121200] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:03:36.701 [DEBUG] [Thread-121202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:50.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:50.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:51.743 [DEBUG] [Thread-121203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:03:59.461 [DEBUG] [Thread-121204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:05.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:04:05.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:04:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:04:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 3, 32), 22.33, 22.16, 0.0, 24.91, 20.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:04:06.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:03:32
2025-12-03T18:04:06.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:04:06.767 [DEBUG] [Thread-121205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:06.902 [DEBUG] [Thread-121206] [transport.py] [_log()] starting thread (client mode): 0xa517e560
2025-12-03T18:04:06.902 [DEBUG] [Thread-121206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:04:06.922 [DEBUG] [Thread-121206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:04:06.922 [INFO] [Thread-121206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] client lang: <none>
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] server lang: <none>
2025-12-03T18:04:06.926 [DEBUG] [Thread-121206] [transport.py] [_log()] kex follows: False
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] Compression: none
2025-12-03T18:04:06.927 [DEBUG] [Thread-121206] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:04:06.945 [DEBUG] [Thread-121206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:04:06.945 [DEBUG] [Thread-121206] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:04:06.946 [DEBUG] [Thread-121206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:04:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:04:06.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:04:06.948 [DEBUG] [Thread-121206] [transport.py] [_log()] userauth is OK
2025-12-03T18:04:06.948 [DEBUG] [Thread-121206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:04:06.949 [DEBUG] [Thread-121206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:04:06.949 [DEBUG] [Thread-121206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:04:06.949 [DEBUG] [Thread-121206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:04:06.982 [INFO] [Thread-121206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:04:06.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:04:07.579 [DEBUG] [Thread-121206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:04:07.579 [DEBUG] [Thread-121206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:04:07.579 [DEBUG] [Thread-121206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:04:07.620 [DEBUG] [Thread-121206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:04:07.620 [DEBUG] [Thread-121206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:04:07.622 [DEBUG] [Thread-121206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:04:07.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:04:07.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:04:07.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:04:07.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:04:07.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:04:07.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:04:07.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:04:07.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:04:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:04:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.669145 -999.00  +20.20  19.58     28   +1.10 1 1 1 1 1   887    0 18.45 -25.79 ----- 19.6 19.6 148.8 25.9 23.8 -29.1 24.1 -28.5 25.3 -27.3 25.4 -29.5
2025-12-03T18:04:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:04:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:04:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.669145
2025-12-03T18:04:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:04:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:04:07.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:04:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:04:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:04:07.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:03:32', tmtdew=22.33, humidity=22.16, cloud=0.0, wind=24.91, temperature=20.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:03:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:04:07.641 [DEBUG] [Thread-121206] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:04:07.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:04:07.737 [DEBUG] [Thread-121209] [transport.py] [_log()] starting thread (client mode): 0xa2750280
2025-12-03T18:04:07.737 [DEBUG] [Thread-121209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:04:07.752 [DEBUG] [Thread-121209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:04:07.752 [INFO] [Thread-121209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:04:07.760 [DEBUG] [Thread-121209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:04:07.760 [DEBUG] [Thread-121209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:04:07.760 [DEBUG] [Thread-121209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] client lang: <none>
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] server lang: <none>
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] kex follows: False
2025-12-03T18:04:07.761 [DEBUG] [Thread-121209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] Compression: none
2025-12-03T18:04:07.762 [DEBUG] [Thread-121209] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:04:07.819 [DEBUG] [Thread-121209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:04:07.820 [DEBUG] [Thread-121209] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:04:07.820 [DEBUG] [Thread-121209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:04:07.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:04:07.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:04:07.879 [DEBUG] [Thread-121209] [transport.py] [_log()] userauth is OK
2025-12-03T18:04:07.879 [DEBUG] [Thread-121209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:04:07.879 [DEBUG] [Thread-121209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:04:07.880 [DEBUG] [Thread-121209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:04:07.880 [DEBUG] [Thread-121209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:04:07.899 [INFO] [Thread-121209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:04:07.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:04:07.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:04:08.734 [DEBUG] [Thread-121209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:04:08.735 [DEBUG] [Thread-121209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:04:08.783 [DEBUG] [Thread-121209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:04:08.783 [DEBUG] [Thread-121209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:04:08.792 [DEBUG] [Thread-121209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:04:08.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:04:08.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:04:08.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:04:08.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:04:08.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:04:08.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:04:08.828 [DEBUG] [Thread-121209] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:04:21.796 [DEBUG] [Thread-121211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:36.840 [DEBUG] [Thread-121212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:38.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:04:38.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:04:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:04:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 4, 36), 22.32, 22.26, 0.0, 23.89, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:04:39.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:04:36
2025-12-03T18:04:39.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:04:39.811 [DEBUG] [Thread-121213] [transport.py] [_log()] starting thread (client mode): 0xa2760e50
2025-12-03T18:04:39.811 [DEBUG] [Thread-121213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:04:39.831 [DEBUG] [Thread-121213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:04:39.831 [INFO] [Thread-121213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:04:39.834 [DEBUG] [Thread-121213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] client lang: <none>
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] server lang: <none>
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] kex follows: False
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] Compression: none
2025-12-03T18:04:39.835 [DEBUG] [Thread-121213] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:04:39.854 [DEBUG] [Thread-121213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:04:39.855 [DEBUG] [Thread-121213] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:04:39.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:04:39.855 [DEBUG] [Thread-121213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:04:39.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:04:39.858 [DEBUG] [Thread-121213] [transport.py] [_log()] userauth is OK
2025-12-03T18:04:39.858 [DEBUG] [Thread-121213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:04:39.858 [DEBUG] [Thread-121213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:04:39.858 [DEBUG] [Thread-121213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:04:39.858 [DEBUG] [Thread-121213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:04:39.881 [INFO] [Thread-121213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:04:39.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:04:40.495 [DEBUG] [Thread-121213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:04:40.495 [DEBUG] [Thread-121213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:04:40.495 [DEBUG] [Thread-121213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:04:40.536 [DEBUG] [Thread-121213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:04:40.536 [DEBUG] [Thread-121213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:04:40.538 [DEBUG] [Thread-121213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:04:40.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:04:40.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:04:40.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:04:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:04:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:04:40.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:04:40.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:04:40.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.669492 -999.00  +20.20  14.43     28   +1.20 1 1 1 1 1   887    0 18.80 -23.91 ----- 14.4 14.4 140.8 25.3 23.7 -28.9 24.1 -28.8 25.3 -26.8 25.5 -28.9
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.669492
2025-12-03T18:04:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:04:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:04:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:04:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:04:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:04:40.559 [DEBUG] [Thread-121213] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:04:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:04:36', tmtdew=22.32, humidity=22.26, cloud=0.0, wind=23.89, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:04:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:04:40.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:04:40.656 [DEBUG] [Thread-121216] [transport.py] [_log()] starting thread (client mode): 0xa517cb50
2025-12-03T18:04:40.657 [DEBUG] [Thread-121216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:04:40.674 [DEBUG] [Thread-121216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:04:40.674 [INFO] [Thread-121216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] client lang: <none>
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] server lang: <none>
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] kex follows: False
2025-12-03T18:04:40.682 [DEBUG] [Thread-121216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] Compression: none
2025-12-03T18:04:40.683 [DEBUG] [Thread-121216] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:04:40.739 [DEBUG] [Thread-121216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:04:40.740 [DEBUG] [Thread-121216] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:04:40.740 [DEBUG] [Thread-121216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:04:40.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:04:40.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:04:40.795 [DEBUG] [Thread-121216] [transport.py] [_log()] userauth is OK
2025-12-03T18:04:40.795 [DEBUG] [Thread-121216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:04:40.795 [DEBUG] [Thread-121216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:04:40.795 [DEBUG] [Thread-121216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:04:40.796 [DEBUG] [Thread-121216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:04:40.815 [INFO] [Thread-121216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:04:40.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:04:40.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:04:41.677 [DEBUG] [Thread-121216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:04:41.678 [DEBUG] [Thread-121216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:04:41.726 [DEBUG] [Thread-121216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:04:41.726 [DEBUG] [Thread-121216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:04:41.735 [DEBUG] [Thread-121216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:04:41.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:04:41.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:04:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:04:41.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:04:41.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:04:41.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:04:41.769 [DEBUG] [Thread-121216] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:04:50.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:50.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:51.870 [DEBUG] [Thread-121218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:04:59.524 [DEBUG] [Thread-121219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:06.915 [DEBUG] [Thread-121220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:11.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:05:11.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:05:11.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:05:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 5, 8), 22.36, 22.22, 0.0, 22.36, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:05:12.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:05:08
2025-12-03T18:05:12.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:05:12.752 [DEBUG] [Thread-121221] [transport.py] [_log()] starting thread (client mode): 0xa517fdc0
2025-12-03T18:05:12.752 [DEBUG] [Thread-121221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:05:12.771 [DEBUG] [Thread-121221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:05:12.771 [INFO] [Thread-121221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] client lang: <none>
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] server lang: <none>
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] kex follows: False
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] Compression: none
2025-12-03T18:05:12.775 [DEBUG] [Thread-121221] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:05:12.788 [DEBUG] [Thread-121221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:05:12.788 [DEBUG] [Thread-121221] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:05:12.789 [DEBUG] [Thread-121221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:05:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:05:12.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:05:12.833 [DEBUG] [Thread-121221] [transport.py] [_log()] userauth is OK
2025-12-03T18:05:12.833 [DEBUG] [Thread-121221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:05:12.833 [DEBUG] [Thread-121221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:05:12.833 [DEBUG] [Thread-121221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:05:12.833 [DEBUG] [Thread-121221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:05:12.853 [INFO] [Thread-121221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:05:12.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:05:13.802 [DEBUG] [Thread-121221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:05:13.802 [DEBUG] [Thread-121221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:05:13.802 [DEBUG] [Thread-121221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:05:13.843 [DEBUG] [Thread-121221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:05:13.843 [DEBUG] [Thread-121221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:05:13.845 [DEBUG] [Thread-121221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:05:13.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:05:13.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:05:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:05:13.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:05:13.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:05:13.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:05:13.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:05:13.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.669839 -999.00  +20.20  16.96     28   +1.30 1 1 1 1 1   887    0 17.74 -21.85 ----- 17.0 17.0 142.6 26.1 23.7 -29.4 24.1 -29.1 25.3 -27.2 25.5 -28.4
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.669839
2025-12-03T18:05:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:05:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:05:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:05:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:05:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:05:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:05:08', tmtdew=22.36, humidity=22.22, cloud=0.0, wind=22.36, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:04:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:05:13.869 [DEBUG] [Thread-121221] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:05:13.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:05:13.966 [DEBUG] [Thread-121224] [transport.py] [_log()] starting thread (client mode): 0xa2751450
2025-12-03T18:05:13.966 [DEBUG] [Thread-121224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:05:13.981 [DEBUG] [Thread-121224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:05:13.981 [INFO] [Thread-121224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:13.989 [DEBUG] [Thread-121224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] client lang: <none>
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] server lang: <none>
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] kex follows: False
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] Compression: none
2025-12-03T18:05:13.990 [DEBUG] [Thread-121224] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:05:14.046 [DEBUG] [Thread-121224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:05:14.047 [DEBUG] [Thread-121224] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:05:14.047 [DEBUG] [Thread-121224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:05:14.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:05:14.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:05:14.103 [DEBUG] [Thread-121224] [transport.py] [_log()] userauth is OK
2025-12-03T18:05:14.103 [DEBUG] [Thread-121224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:05:14.103 [DEBUG] [Thread-121224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:05:14.103 [DEBUG] [Thread-121224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:05:14.103 [DEBUG] [Thread-121224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:05:14.125 [INFO] [Thread-121224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:05:14.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:05:14.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:05:14.938 [DEBUG] [Thread-121224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:05:14.938 [DEBUG] [Thread-121224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:05:14.986 [DEBUG] [Thread-121224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:05:14.986 [DEBUG] [Thread-121224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:05:14.994 [DEBUG] [Thread-121224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:05:15.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:05:15.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:05:15.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:05:15.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:05:15.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:05:15.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:05:15.029 [DEBUG] [Thread-121224] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:05:21.943 [DEBUG] [Thread-121226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:36.980 [DEBUG] [Thread-121227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:05:45.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:05:45.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:05:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 5, 40), 22.23, 22.26, 0.0, 22.16, 20.58, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:05:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:05:40
2025-12-03T18:05:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:05:46.054 [DEBUG] [Thread-121228] [transport.py] [_log()] starting thread (client mode): 0xa27510f0
2025-12-03T18:05:46.054 [DEBUG] [Thread-121228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:05:46.069 [DEBUG] [Thread-121228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:05:46.069 [INFO] [Thread-121228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] client lang: <none>
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] server lang: <none>
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] kex follows: False
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] Compression: none
2025-12-03T18:05:46.072 [DEBUG] [Thread-121228] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:05:46.088 [DEBUG] [Thread-121228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:05:46.088 [DEBUG] [Thread-121228] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:05:46.088 [DEBUG] [Thread-121228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:05:46.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:05:46.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:05:46.089 [DEBUG] [Thread-121228] [transport.py] [_log()] userauth is OK
2025-12-03T18:05:46.089 [DEBUG] [Thread-121228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:05:46.089 [DEBUG] [Thread-121228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:05:46.089 [DEBUG] [Thread-121228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:05:46.089 [DEBUG] [Thread-121228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:05:46.098 [INFO] [Thread-121228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:05:46.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:05:46.751 [DEBUG] [Thread-121228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:05:46.751 [DEBUG] [Thread-121228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:05:46.751 [DEBUG] [Thread-121228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:05:46.791 [DEBUG] [Thread-121228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:05:46.791 [DEBUG] [Thread-121228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:05:46.794 [DEBUG] [Thread-121228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:05:46.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:05:46.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:05:46.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:05:46.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:05:46.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:05:46.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:05:46.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.670186 -999.00  +20.30  15.67     28   +1.40 1 1 1 1 1   887    0 18.52 -21.39 ----- 15.7 15.7 132.6 25.7 23.7 -29.3 24.1 -28.8 25.4 -27.8 25.4 -29.2
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.670186
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:05:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:05:40', tmtdew=22.23, humidity=22.26, cloud=0.0, wind=22.16, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:05:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:05:46.812 [DEBUG] [Thread-121228] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:05:46.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:05:46.898 [DEBUG] [Thread-121231] [transport.py] [_log()] starting thread (client mode): 0xa517c460
2025-12-03T18:05:46.898 [DEBUG] [Thread-121231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:05:46.913 [DEBUG] [Thread-121231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:05:46.913 [INFO] [Thread-121231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] client lang: <none>
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] server lang: <none>
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] kex follows: False
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] Compression: none
2025-12-03T18:05:46.921 [DEBUG] [Thread-121231] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:05:46.978 [DEBUG] [Thread-121231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:05:46.978 [DEBUG] [Thread-121231] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:05:46.978 [DEBUG] [Thread-121231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:05:46.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:05:46.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:05:47.035 [DEBUG] [Thread-121231] [transport.py] [_log()] userauth is OK
2025-12-03T18:05:47.035 [DEBUG] [Thread-121231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:05:47.035 [DEBUG] [Thread-121231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:05:47.035 [DEBUG] [Thread-121231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:05:47.035 [DEBUG] [Thread-121231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:05:47.049 [INFO] [Thread-121231] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:05:47.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:05:47.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:05:47.884 [DEBUG] [Thread-121231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:05:47.884 [DEBUG] [Thread-121231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:05:47.931 [DEBUG] [Thread-121231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:05:47.932 [DEBUG] [Thread-121231] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:05:47.940 [DEBUG] [Thread-121231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:05:47.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:05:47.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:05:47.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:05:47.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:05:47.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:05:47.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:05:47.972 [DEBUG] [Thread-121231] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:05:51.137 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:51.138 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:52.007 [DEBUG] [Thread-121233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:05:59.562 [DEBUG] [Thread-121234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:07.060 [DEBUG] [Thread-121235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:17.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:06:17.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:06:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:06:18.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 6, 12), 22.14, 22.41, 0.0, 22.51, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:06:18.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:06:12
2025-12-03T18:06:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:06:18.964 [DEBUG] [Thread-121236] [transport.py] [_log()] starting thread (client mode): 0xa517e9b0
2025-12-03T18:06:18.964 [DEBUG] [Thread-121236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:06:18.987 [DEBUG] [Thread-121236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:06:18.987 [INFO] [Thread-121236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:06:18.991 [DEBUG] [Thread-121236] [transport.py] [_log()] client lang: <none>
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] server lang: <none>
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] kex follows: False
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] Compression: none
2025-12-03T18:06:18.992 [DEBUG] [Thread-121236] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:06:19.011 [DEBUG] [Thread-121236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:06:19.011 [DEBUG] [Thread-121236] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:06:19.012 [DEBUG] [Thread-121236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:06:19.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:06:19.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:06:19.014 [DEBUG] [Thread-121236] [transport.py] [_log()] userauth is OK
2025-12-03T18:06:19.014 [DEBUG] [Thread-121236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:06:19.014 [DEBUG] [Thread-121236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:06:19.014 [DEBUG] [Thread-121236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:06:19.014 [DEBUG] [Thread-121236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:06:19.037 [INFO] [Thread-121236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:06:19.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:06:19.609 [DEBUG] [Thread-121236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:06:19.609 [DEBUG] [Thread-121236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:06:19.609 [DEBUG] [Thread-121236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:06:19.650 [DEBUG] [Thread-121236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:06:19.650 [DEBUG] [Thread-121236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:06:19.652 [DEBUG] [Thread-121236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:06:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:06:19.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:06:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:06:19.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:06:19.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:06:19.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:06:19.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.670881 -999.00  +20.40  19.92     28   +1.60 1 1 1 1 1   887    0 18.05 -19.34 ----- 19.9 19.9 156.2 31.0 23.7 -29.6 24.1 -29.4 25.3 -27.8 25.4 -29.8
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.670881
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:06:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:06:12', tmtdew=22.14, humidity=22.41, cloud=0.0, wind=22.51, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:06:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:06:19.672 [DEBUG] [Thread-121236] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:06:19.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:06:19.757 [DEBUG] [Thread-121239] [transport.py] [_log()] starting thread (client mode): 0xa517f640
2025-12-03T18:06:19.757 [DEBUG] [Thread-121239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:06:19.772 [DEBUG] [Thread-121239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:06:19.772 [INFO] [Thread-121239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:06:19.779 [DEBUG] [Thread-121239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] client lang: <none>
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] server lang: <none>
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] kex follows: False
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] Compression: none
2025-12-03T18:06:19.780 [DEBUG] [Thread-121239] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:06:19.840 [DEBUG] [Thread-121239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:06:19.840 [DEBUG] [Thread-121239] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:06:19.840 [DEBUG] [Thread-121239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:06:19.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:06:19.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:06:19.895 [DEBUG] [Thread-121239] [transport.py] [_log()] userauth is OK
2025-12-03T18:06:19.896 [DEBUG] [Thread-121239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:06:19.896 [DEBUG] [Thread-121239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:06:19.896 [DEBUG] [Thread-121239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:06:19.896 [DEBUG] [Thread-121239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:06:19.915 [INFO] [Thread-121239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:06:19.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:06:19.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:06:20.813 [DEBUG] [Thread-121239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:06:20.814 [DEBUG] [Thread-121239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:06:20.861 [DEBUG] [Thread-121239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:06:20.861 [DEBUG] [Thread-121239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:06:20.869 [DEBUG] [Thread-121239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:06:20.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:06:20.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:06:20.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:06:20.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:06:20.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:06:20.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:06:20.903 [DEBUG] [Thread-121239] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:06:22.093 [DEBUG] [Thread-121241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:37.128 [DEBUG] [Thread-121242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:50.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:06:50.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:06:50.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:06:51.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:51.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 6, 44), 22.08, 22.42, 0.0, 27.88, 20.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:06:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:06:44
2025-12-03T18:06:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:06:51.867 [DEBUG] [Thread-121243] [transport.py] [_log()] starting thread (client mode): 0xa517e950
2025-12-03T18:06:51.867 [DEBUG] [Thread-121243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:06:51.887 [DEBUG] [Thread-121243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:06:51.888 [INFO] [Thread-121243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] client lang: <none>
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] server lang: <none>
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] kex follows: False
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:06:51.891 [DEBUG] [Thread-121243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:06:51.892 [DEBUG] [Thread-121243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:06:51.892 [DEBUG] [Thread-121243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:06:51.892 [DEBUG] [Thread-121243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:06:51.892 [DEBUG] [Thread-121243] [transport.py] [_log()] Compression: none
2025-12-03T18:06:51.892 [DEBUG] [Thread-121243] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:06:51.908 [DEBUG] [Thread-121243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:06:51.909 [DEBUG] [Thread-121243] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:06:51.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:06:51.909 [DEBUG] [Thread-121243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:06:51.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:06:51.911 [DEBUG] [Thread-121243] [transport.py] [_log()] userauth is OK
2025-12-03T18:06:51.911 [DEBUG] [Thread-121243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:06:51.911 [DEBUG] [Thread-121243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:06:51.911 [DEBUG] [Thread-121243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:06:51.911 [DEBUG] [Thread-121243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:06:51.935 [INFO] [Thread-121243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:06:51.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:06:52.160 [DEBUG] [Thread-121245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:06:52.586 [DEBUG] [Thread-121243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:06:52.586 [DEBUG] [Thread-121243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:06:52.586 [DEBUG] [Thread-121243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:06:52.627 [DEBUG] [Thread-121243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:06:52.627 [DEBUG] [Thread-121243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:06:52.629 [DEBUG] [Thread-121243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:06:52.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:06:52.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:06:52.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:06:52.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:06:52.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:06:52.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:06:52.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:06:52.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:06:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:06:52.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.671228 -999.00  +20.50  21.33     28   +1.70 1 1 1 1 1   887    0 18.49 -19.74 ----- 21.3 21.3 164.0 28.7 23.7 -29.1 24.1 -28.7 25.3 -26.9 25.4 -28.5
2025-12-03T18:06:52.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:06:52.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:06:52.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.671228
2025-12-03T18:06:52.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:06:52.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:06:52.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:06:52.651 [DEBUG] [Thread-121243] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:06:52.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:06:52.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:06:52.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:06:44', tmtdew=22.08, humidity=22.42, cloud=0.0, wind=27.88, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:06:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:06:52.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:06:52.755 [DEBUG] [Thread-121247] [transport.py] [_log()] starting thread (client mode): 0xa51d1cc0
2025-12-03T18:06:52.755 [DEBUG] [Thread-121247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:06:52.769 [DEBUG] [Thread-121247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:06:52.769 [INFO] [Thread-121247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:06:52.777 [DEBUG] [Thread-121247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] client lang: <none>
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] server lang: <none>
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] kex follows: False
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] Compression: none
2025-12-03T18:06:52.778 [DEBUG] [Thread-121247] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:06:52.835 [DEBUG] [Thread-121247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:06:52.835 [DEBUG] [Thread-121247] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:06:52.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:06:52.837 [DEBUG] [Thread-121247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:06:52.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:06:52.891 [DEBUG] [Thread-121247] [transport.py] [_log()] userauth is OK
2025-12-03T18:06:52.891 [DEBUG] [Thread-121247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:06:52.891 [DEBUG] [Thread-121247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:06:52.891 [DEBUG] [Thread-121247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:06:52.892 [DEBUG] [Thread-121247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:06:52.910 [INFO] [Thread-121247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:06:52.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:06:52.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:06:53.745 [DEBUG] [Thread-121247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:06:53.745 [DEBUG] [Thread-121247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:06:53.793 [DEBUG] [Thread-121247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:06:53.793 [DEBUG] [Thread-121247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:06:53.802 [DEBUG] [Thread-121247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:06:53.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:06:53.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:06:53.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:06:53.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:06:53.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:06:53.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:06:53.836 [DEBUG] [Thread-121247] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:06:59.608 [DEBUG] [Thread-121249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:07.188 [DEBUG] [Thread-121250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:22.229 [DEBUG] [Thread-121251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:23.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:07:23.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:07:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:07:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 7, 16), 22.05, 22.46, 0.0, 26.93, 20.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:07:24.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:07:16
2025-12-03T18:07:24.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:07:24.821 [DEBUG] [Thread-121252] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T18:07:24.821 [DEBUG] [Thread-121252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:07:24.841 [DEBUG] [Thread-121252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:07:24.841 [INFO] [Thread-121252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:24.844 [DEBUG] [Thread-121252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] client lang: <none>
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] server lang: <none>
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] kex follows: False
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] Compression: none
2025-12-03T18:07:24.845 [DEBUG] [Thread-121252] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:07:24.858 [DEBUG] [Thread-121252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:07:24.858 [DEBUG] [Thread-121252] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:07:24.859 [DEBUG] [Thread-121252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:07:24.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:07:24.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:07:24.860 [DEBUG] [Thread-121252] [transport.py] [_log()] userauth is OK
2025-12-03T18:07:24.861 [DEBUG] [Thread-121252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:07:24.861 [DEBUG] [Thread-121252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:07:24.861 [DEBUG] [Thread-121252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:07:24.861 [DEBUG] [Thread-121252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:07:24.896 [INFO] [Thread-121252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:07:24.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:07:25.535 [DEBUG] [Thread-121252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:07:25.535 [DEBUG] [Thread-121252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:07:25.535 [DEBUG] [Thread-121252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:07:25.576 [DEBUG] [Thread-121252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:07:25.576 [DEBUG] [Thread-121252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:07:25.579 [DEBUG] [Thread-121252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:07:25.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:07:25.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:07:25.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:07:25.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:07:25.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:07:25.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:07:25.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:07:25.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:07:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:07:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.671575 -999.00  +20.40  21.11     28   +1.60 1 1 1 1 1   887    0 18.17 -19.30 ----- 21.1 21.1 168.2 29.5 23.7 -30.0 23.9 -28.9 25.2 -27.3 25.4 -29.5
2025-12-03T18:07:25.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:07:25.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:07:25.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.671575
2025-12-03T18:07:25.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:07:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:07:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:07:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:07:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:07:25.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:07:16', tmtdew=22.05, humidity=22.46, cloud=0.0, wind=26.93, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:07:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:07:25.604 [DEBUG] [Thread-121252] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:07:25.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:07:25.701 [DEBUG] [Thread-121255] [transport.py] [_log()] starting thread (client mode): 0xa517ce50
2025-12-03T18:07:25.701 [DEBUG] [Thread-121255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:07:25.716 [DEBUG] [Thread-121255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:07:25.716 [INFO] [Thread-121255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:07:25.723 [DEBUG] [Thread-121255] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:07:25.723 [DEBUG] [Thread-121255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] client lang: <none>
2025-12-03T18:07:25.724 [DEBUG] [Thread-121255] [transport.py] [_log()] server lang: <none>
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] kex follows: False
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] Compression: none
2025-12-03T18:07:25.725 [DEBUG] [Thread-121255] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:07:25.784 [DEBUG] [Thread-121255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:07:25.785 [DEBUG] [Thread-121255] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:07:25.785 [DEBUG] [Thread-121255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:07:25.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:07:25.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:07:25.844 [DEBUG] [Thread-121255] [transport.py] [_log()] userauth is OK
2025-12-03T18:07:25.844 [DEBUG] [Thread-121255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:07:25.844 [DEBUG] [Thread-121255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:07:25.845 [DEBUG] [Thread-121255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:07:25.845 [DEBUG] [Thread-121255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:07:25.863 [INFO] [Thread-121255] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:07:25.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:07:25.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:07:26.693 [DEBUG] [Thread-121255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:07:26.693 [DEBUG] [Thread-121255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:07:26.741 [DEBUG] [Thread-121255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:07:26.741 [DEBUG] [Thread-121255] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:07:26.750 [DEBUG] [Thread-121255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:07:26.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:07:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:07:26.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:07:26.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:07:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:07:26.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:07:26.784 [DEBUG] [Thread-121255] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:07:37.262 [DEBUG] [Thread-121257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:51.418 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:51.419 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:52.308 [DEBUG] [Thread-121258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:56.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:07:56.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:07:56.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:07:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 7, 48), 21.98, 23.01, 0.0, 26.1, 20.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:07:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:07:48
2025-12-03T18:07:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:07:57.777 [DEBUG] [Thread-121259] [transport.py] [_log()] starting thread (client mode): 0xa517d5d0
2025-12-03T18:07:57.777 [DEBUG] [Thread-121259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:07:57.798 [DEBUG] [Thread-121259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:07:57.798 [INFO] [Thread-121259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] client lang: <none>
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] server lang: <none>
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] kex follows: False
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:07:57.801 [DEBUG] [Thread-121259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:07:57.802 [DEBUG] [Thread-121259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:07:57.802 [DEBUG] [Thread-121259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:07:57.802 [DEBUG] [Thread-121259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:07:57.802 [DEBUG] [Thread-121259] [transport.py] [_log()] Compression: none
2025-12-03T18:07:57.802 [DEBUG] [Thread-121259] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:07:57.820 [DEBUG] [Thread-121259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:07:57.820 [DEBUG] [Thread-121259] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:07:57.821 [DEBUG] [Thread-121259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:07:57.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:07:57.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:07:57.823 [DEBUG] [Thread-121259] [transport.py] [_log()] userauth is OK
2025-12-03T18:07:57.823 [DEBUG] [Thread-121259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:07:57.823 [DEBUG] [Thread-121259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:07:57.823 [DEBUG] [Thread-121259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:07:57.823 [DEBUG] [Thread-121259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:07:57.858 [INFO] [Thread-121259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:07:57.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:07:58.485 [DEBUG] [Thread-121259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:07:58.485 [DEBUG] [Thread-121259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:07:58.485 [DEBUG] [Thread-121259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:07:58.526 [DEBUG] [Thread-121259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:07:58.526 [DEBUG] [Thread-121259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:07:58.528 [DEBUG] [Thread-121259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:07:58.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:07:58.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:07:58.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:07:58.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:07:58.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:07:58.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:07:58.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:07:58.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.671922 -999.00  +20.30  23.85     28   +1.60 1 1 1 1 1   887    0 18.45 -18.19 ----- 23.9 23.9 170.8 28.3 23.6 -29.8 23.8 -30.0 25.1 -28.3 25.3 -29.8
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.671922
2025-12-03T18:07:58.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:07:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:07:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:07:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:07:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:07:58.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:07:48', tmtdew=21.98, humidity=23.01, cloud=0.0, wind=26.1, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:07:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:07:58.552 [DEBUG] [Thread-121259] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:07:58.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:07:58.648 [DEBUG] [Thread-121262] [transport.py] [_log()] starting thread (client mode): 0xa2750fd0
2025-12-03T18:07:58.648 [DEBUG] [Thread-121262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:07:58.665 [DEBUG] [Thread-121262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:07:58.665 [INFO] [Thread-121262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:07:58.672 [DEBUG] [Thread-121262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:07:58.672 [DEBUG] [Thread-121262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:07:58.672 [DEBUG] [Thread-121262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] client lang: <none>
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] server lang: <none>
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] kex follows: False
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] Compression: none
2025-12-03T18:07:58.673 [DEBUG] [Thread-121262] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:07:58.730 [DEBUG] [Thread-121262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:07:58.731 [DEBUG] [Thread-121262] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:07:58.731 [DEBUG] [Thread-121262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:07:58.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:07:58.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:07:58.787 [DEBUG] [Thread-121262] [transport.py] [_log()] userauth is OK
2025-12-03T18:07:58.787 [DEBUG] [Thread-121262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:07:58.787 [DEBUG] [Thread-121262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:07:58.787 [DEBUG] [Thread-121262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:07:58.788 [DEBUG] [Thread-121262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:07:58.807 [INFO] [Thread-121262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:07:58.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:07:58.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:07:59.643 [DEBUG] [Thread-121264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:07:59.650 [DEBUG] [Thread-121262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:07:59.650 [DEBUG] [Thread-121262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:07:59.698 [DEBUG] [Thread-121262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:07:59.699 [DEBUG] [Thread-121262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:07:59.707 [DEBUG] [Thread-121262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:07:59.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:07:59.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:07:59.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:07:59.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:07:59.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:07:59.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:07:59.742 [DEBUG] [Thread-121262] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:08:07.337 [DEBUG] [Thread-121265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:22.374 [DEBUG] [Thread-121266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:08:29.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:08:29.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:08:30.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 8, 20), 22.01, 22.96, 0.0, 27.47, 20.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:08:30.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:08:20
2025-12-03T18:08:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:08:30.724 [DEBUG] [Thread-121267] [transport.py] [_log()] starting thread (client mode): 0xa517ee90
2025-12-03T18:08:30.724 [DEBUG] [Thread-121267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:08:30.744 [DEBUG] [Thread-121267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:08:30.744 [INFO] [Thread-121267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:08:30.747 [DEBUG] [Thread-121267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] client lang: <none>
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] server lang: <none>
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] kex follows: False
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:08:30.748 [DEBUG] [Thread-121267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:08:30.749 [DEBUG] [Thread-121267] [transport.py] [_log()] Compression: none
2025-12-03T18:08:30.749 [DEBUG] [Thread-121267] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:08:30.767 [DEBUG] [Thread-121267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:08:30.767 [DEBUG] [Thread-121267] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:08:30.768 [DEBUG] [Thread-121267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:08:30.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:08:30.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:08:30.769 [DEBUG] [Thread-121267] [transport.py] [_log()] userauth is OK
2025-12-03T18:08:30.770 [DEBUG] [Thread-121267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:08:30.770 [DEBUG] [Thread-121267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:08:30.770 [DEBUG] [Thread-121267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:08:30.770 [DEBUG] [Thread-121267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:08:30.794 [INFO] [Thread-121267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:08:30.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:08:31.381 [DEBUG] [Thread-121267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:08:31.381 [DEBUG] [Thread-121267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:08:31.382 [DEBUG] [Thread-121267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:08:31.422 [DEBUG] [Thread-121267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:08:31.422 [DEBUG] [Thread-121267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:08:31.425 [DEBUG] [Thread-121267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:08:31.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:08:31.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:08:31.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:08:31.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:08:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:08:31.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:08:31.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:08:31.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:08:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:08:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.672269 -999.00  +20.20  19.75     29   +1.60 1 1 1 1 1   887    0 18.44 -18.67 ----- 19.8 19.8 165.2 27.0 23.6 -29.4 23.8 -29.8 25.1 -27.6 25.3 -29.4
2025-12-03T18:08:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:08:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:08:31.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.672269
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:08:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:08:20', tmtdew=22.01, humidity=22.96, cloud=0.0, wind=27.47, temperature=20.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:08:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:08:31.449 [DEBUG] [Thread-121267] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:08:31.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:08:31.545 [DEBUG] [Thread-121270] [transport.py] [_log()] starting thread (client mode): 0xa51d17e0
2025-12-03T18:08:31.545 [DEBUG] [Thread-121270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:08:31.560 [DEBUG] [Thread-121270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:08:31.560 [INFO] [Thread-121270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] client lang: <none>
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] server lang: <none>
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] kex follows: False
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] Compression: none
2025-12-03T18:08:31.568 [DEBUG] [Thread-121270] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:08:31.627 [DEBUG] [Thread-121270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:08:31.627 [DEBUG] [Thread-121270] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:08:31.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:08:31.628 [DEBUG] [Thread-121270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:08:31.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:08:31.685 [DEBUG] [Thread-121270] [transport.py] [_log()] userauth is OK
2025-12-03T18:08:31.685 [DEBUG] [Thread-121270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:08:31.686 [DEBUG] [Thread-121270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:08:31.686 [DEBUG] [Thread-121270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:08:31.686 [DEBUG] [Thread-121270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:08:31.708 [INFO] [Thread-121270] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:08:31.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:08:31.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:08:32.558 [DEBUG] [Thread-121270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:08:32.558 [DEBUG] [Thread-121270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:08:32.605 [DEBUG] [Thread-121270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:08:32.606 [DEBUG] [Thread-121270] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:08:32.614 [DEBUG] [Thread-121270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:08:32.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:08:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:08:32.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:08:32.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:08:32.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:08:32.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:08:32.647 [DEBUG] [Thread-121270] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:08:37.400 [DEBUG] [Thread-121272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:51.558 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:51.559 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:52.442 [DEBUG] [Thread-121273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:08:59.671 [DEBUG] [Thread-121274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:02.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:09:02.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:09:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:09:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 8, 52), 21.94, 22.86, 0.0, 23.57, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:09:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:08:52
2025-12-03T18:09:03.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:09:03.617 [DEBUG] [Thread-121275] [transport.py] [_log()] starting thread (client mode): 0xa27281f0
2025-12-03T18:09:03.617 [DEBUG] [Thread-121275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:09:03.637 [DEBUG] [Thread-121275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:09:03.637 [INFO] [Thread-121275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:09:03.640 [DEBUG] [Thread-121275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] client lang: <none>
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] server lang: <none>
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] kex follows: False
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:09:03.641 [DEBUG] [Thread-121275] [transport.py] [_log()] Compression: none
2025-12-03T18:09:03.642 [DEBUG] [Thread-121275] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:09:03.660 [DEBUG] [Thread-121275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:09:03.661 [DEBUG] [Thread-121275] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:09:03.662 [DEBUG] [Thread-121275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:09:03.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:09:03.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:09:03.664 [DEBUG] [Thread-121275] [transport.py] [_log()] userauth is OK
2025-12-03T18:09:03.664 [DEBUG] [Thread-121275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:09:03.664 [DEBUG] [Thread-121275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:09:03.664 [DEBUG] [Thread-121275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:09:03.664 [DEBUG] [Thread-121275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:09:03.682 [INFO] [Thread-121275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:09:03.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:09:04.315 [DEBUG] [Thread-121275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:09:04.315 [DEBUG] [Thread-121275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:09:04.316 [DEBUG] [Thread-121275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:09:04.357 [DEBUG] [Thread-121275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:09:04.357 [DEBUG] [Thread-121275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:09:04.360 [DEBUG] [Thread-121275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:09:04.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:09:04.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:09:04.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:09:04.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:09:04.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:09:04.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:09:04.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.672617 -999.00  +20.20  16.63     29   +1.70 1 1 1 1 1   887    0 18.17 -18.05 ----- 16.6 16.6 163.2 23.4 23.7 -29.1 23.9 -28.7 25.2 -26.7 25.3 -28.7
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:09:04.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.672617
2025-12-03T18:09:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:09:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:09:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:09:04.386 [DEBUG] [Thread-121275] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:09:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:09:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:09:04.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:08:52', tmtdew=21.94, humidity=22.86, cloud=0.0, wind=23.57, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:08:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:09:04.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:09:04.482 [DEBUG] [Thread-121278] [transport.py] [_log()] starting thread (client mode): 0xa51d2f80
2025-12-03T18:09:04.483 [DEBUG] [Thread-121278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:09:04.502 [DEBUG] [Thread-121278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:09:04.502 [INFO] [Thread-121278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:09:04.510 [DEBUG] [Thread-121278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] client lang: <none>
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] server lang: <none>
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] kex follows: False
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] Compression: none
2025-12-03T18:09:04.511 [DEBUG] [Thread-121278] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:09:04.566 [DEBUG] [Thread-121278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:09:04.567 [DEBUG] [Thread-121278] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:09:04.567 [DEBUG] [Thread-121278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:09:04.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:09:04.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:09:04.627 [DEBUG] [Thread-121278] [transport.py] [_log()] userauth is OK
2025-12-03T18:09:04.627 [DEBUG] [Thread-121278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:09:04.627 [DEBUG] [Thread-121278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:09:04.628 [DEBUG] [Thread-121278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:09:04.628 [DEBUG] [Thread-121278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:09:04.646 [INFO] [Thread-121278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:09:04.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:09:04.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:09:05.462 [DEBUG] [Thread-121278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:09:05.462 [DEBUG] [Thread-121278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:09:05.509 [DEBUG] [Thread-121278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:09:05.509 [DEBUG] [Thread-121278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:09:05.519 [DEBUG] [Thread-121278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:09:05.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:09:05.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:09:05.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:09:05.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:09:05.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:09:05.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:09:05.551 [DEBUG] [Thread-121278] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:09:07.474 [DEBUG] [Thread-121280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:22.523 [DEBUG] [Thread-121281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:09:35.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:09:35.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:09:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 9, 24), 21.97, 22.81, 0.0, 24.01, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:09:36.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:09:24
2025-12-03T18:09:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:09:36.570 [DEBUG] [Thread-121282] [transport.py] [_log()] starting thread (client mode): 0xa2753a60
2025-12-03T18:09:36.570 [DEBUG] [Thread-121282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:09:36.585 [DEBUG] [Thread-121282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:09:36.585 [INFO] [Thread-121282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] client lang: <none>
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] server lang: <none>
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] kex follows: False
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] Compression: none
2025-12-03T18:09:36.589 [DEBUG] [Thread-121282] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:09:36.605 [DEBUG] [Thread-121282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:09:36.605 [DEBUG] [Thread-121282] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:09:36.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:09:36.605 [DEBUG] [Thread-121282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:09:36.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:09:36.606 [DEBUG] [Thread-121282] [transport.py] [_log()] userauth is OK
2025-12-03T18:09:36.606 [DEBUG] [Thread-121282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:09:36.606 [DEBUG] [Thread-121282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:09:36.606 [DEBUG] [Thread-121282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:09:36.606 [DEBUG] [Thread-121282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:09:36.615 [INFO] [Thread-121282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:09:36.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:09:37.244 [DEBUG] [Thread-121282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:09:37.245 [DEBUG] [Thread-121282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:09:37.245 [DEBUG] [Thread-121282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:09:37.286 [DEBUG] [Thread-121282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:09:37.286 [DEBUG] [Thread-121282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:09:37.288 [DEBUG] [Thread-121282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:09:37.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:09:37.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:09:37.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:09:37.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:09:37.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:09:37.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:09:37.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.672964 -999.00  +20.20  17.96     29   +1.60 1 1 1 1 1   887    0 18.63 -17.86 ----- 18.0 18.0 161.1 23.7 23.6 -29.3 23.8 -28.7 25.1 -27.4 25.3 -29.0
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.672964
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:09:37.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:09:24', tmtdew=21.97, humidity=22.81, cloud=0.0, wind=24.01, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:09:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:09:37.300 [DEBUG] [Thread-121282] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:09:37.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:09:37.385 [DEBUG] [Thread-121285] [transport.py] [_log()] starting thread (client mode): 0xa27cb160
2025-12-03T18:09:37.386 [DEBUG] [Thread-121285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:09:37.400 [DEBUG] [Thread-121285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:09:37.401 [INFO] [Thread-121285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] client lang: <none>
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] server lang: <none>
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] kex follows: False
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:09:37.408 [DEBUG] [Thread-121285] [transport.py] [_log()] Compression: none
2025-12-03T18:09:37.409 [DEBUG] [Thread-121285] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:09:37.465 [DEBUG] [Thread-121285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:09:37.466 [DEBUG] [Thread-121285] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:09:37.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:09:37.466 [DEBUG] [Thread-121285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:09:37.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:09:37.523 [DEBUG] [Thread-121285] [transport.py] [_log()] userauth is OK
2025-12-03T18:09:37.523 [DEBUG] [Thread-121285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:09:37.523 [DEBUG] [Thread-121285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:09:37.523 [DEBUG] [Thread-121285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:09:37.523 [DEBUG] [Thread-121285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:09:37.540 [INFO] [Thread-121285] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:09:37.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:09:37.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:09:37.552 [DEBUG] [Thread-121287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:38.399 [DEBUG] [Thread-121285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:09:38.399 [DEBUG] [Thread-121285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:09:38.446 [DEBUG] [Thread-121285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:09:38.446 [DEBUG] [Thread-121285] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:09:38.455 [DEBUG] [Thread-121285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:09:38.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:09:38.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:09:38.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:09:38.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:09:38.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:09:38.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:09:38.486 [DEBUG] [Thread-121285] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:09:51.703 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:51.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:52.589 [DEBUG] [Thread-121288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:09:59.709 [DEBUG] [Thread-121289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:07.616 [DEBUG] [Thread-121290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:10:08.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:10:08.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:10:09.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 9, 56), 21.77, 22.89, 0.0, 22.89, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:10:09.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:09:56
2025-12-03T18:10:09.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:10:09.453 [DEBUG] [Thread-121291] [transport.py] [_log()] starting thread (client mode): 0xa2728cd0
2025-12-03T18:10:09.454 [DEBUG] [Thread-121291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:10:09.474 [DEBUG] [Thread-121291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:10:09.474 [INFO] [Thread-121291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:10:09.477 [DEBUG] [Thread-121291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:10:09.477 [DEBUG] [Thread-121291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:10:09.477 [DEBUG] [Thread-121291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:10:09.477 [DEBUG] [Thread-121291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:09.477 [DEBUG] [Thread-121291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] client lang: <none>
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] server lang: <none>
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] kex follows: False
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] Compression: none
2025-12-03T18:10:09.478 [DEBUG] [Thread-121291] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:10:09.504 [DEBUG] [Thread-121291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:10:09.504 [DEBUG] [Thread-121291] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:10:09.505 [DEBUG] [Thread-121291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:10:09.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:10:09.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:10:09.507 [DEBUG] [Thread-121291] [transport.py] [_log()] userauth is OK
2025-12-03T18:10:09.507 [DEBUG] [Thread-121291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:10:09.507 [DEBUG] [Thread-121291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:10:09.507 [DEBUG] [Thread-121291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:10:09.507 [DEBUG] [Thread-121291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:10:09.525 [INFO] [Thread-121291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:10:09.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:10:10.487 [DEBUG] [Thread-121291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:10:10.487 [DEBUG] [Thread-121291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:10:10.488 [DEBUG] [Thread-121291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:10:10.528 [DEBUG] [Thread-121291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:10:10.528 [DEBUG] [Thread-121291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:10:10.530 [DEBUG] [Thread-121291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:10:10.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:10:10.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:10:10.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:10:10.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:10:10.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:10:10.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:10:10.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:10:10.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:10:10.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:10:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.673311 -999.00  +20.20  21.02     29   +1.60 1 1 1 1 1   887    0 18.40 -19.77 ----- 21.0 21.0 167.6 25.4 23.6 -29.7 23.8 -28.4 25.1 -27.5 25.3 -29.1
2025-12-03T18:10:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:10:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:10:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.673311
2025-12-03T18:10:10.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:10:10.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:10:10.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:10:10.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:10:10.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:10:10.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:09:56', tmtdew=21.77, humidity=22.89, cloud=0.0, wind=22.89, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:09:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:10:10.556 [DEBUG] [Thread-121291] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:10:10.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:10:10.653 [DEBUG] [Thread-121294] [transport.py] [_log()] starting thread (client mode): 0xa51d0700
2025-12-03T18:10:10.653 [DEBUG] [Thread-121294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:10:10.667 [DEBUG] [Thread-121294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:10:10.667 [INFO] [Thread-121294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] client lang: <none>
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] server lang: <none>
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] kex follows: False
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:10:10.674 [DEBUG] [Thread-121294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:10:10.675 [DEBUG] [Thread-121294] [transport.py] [_log()] Compression: none
2025-12-03T18:10:10.675 [DEBUG] [Thread-121294] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:10:10.730 [DEBUG] [Thread-121294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:10:10.731 [DEBUG] [Thread-121294] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:10:10.731 [DEBUG] [Thread-121294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:10:10.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:10:10.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:10:10.787 [DEBUG] [Thread-121294] [transport.py] [_log()] userauth is OK
2025-12-03T18:10:10.787 [DEBUG] [Thread-121294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:10:10.787 [DEBUG] [Thread-121294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:10:10.787 [DEBUG] [Thread-121294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:10:10.787 [DEBUG] [Thread-121294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:10:10.805 [INFO] [Thread-121294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:10:10.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:10:10.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:10:11.650 [DEBUG] [Thread-121294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:10:11.650 [DEBUG] [Thread-121294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:10:11.698 [DEBUG] [Thread-121294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:10:11.699 [DEBUG] [Thread-121294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:10:11.707 [DEBUG] [Thread-121294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:10:11.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:10:11.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:10:11.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:10:11.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:10:11.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:10:11.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:10:11.741 [DEBUG] [Thread-121294] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:10:22.647 [DEBUG] [Thread-121296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:37.691 [DEBUG] [Thread-121297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:41.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:10:41.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:10:41.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:10:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 10, 28), 21.84, 22.77, 0.0, 22.92, 20.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:10:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:10:28
2025-12-03T18:10:42.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:10:42.707 [DEBUG] [Thread-121298] [transport.py] [_log()] starting thread (client mode): 0xa51baf20
2025-12-03T18:10:42.707 [DEBUG] [Thread-121298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:10:42.728 [DEBUG] [Thread-121298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:10:42.728 [INFO] [Thread-121298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:10:42.731 [DEBUG] [Thread-121298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] client lang: <none>
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] server lang: <none>
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] kex follows: False
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:10:42.732 [DEBUG] [Thread-121298] [transport.py] [_log()] Compression: none
2025-12-03T18:10:42.733 [DEBUG] [Thread-121298] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:10:42.750 [DEBUG] [Thread-121298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:10:42.750 [DEBUG] [Thread-121298] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:10:42.751 [DEBUG] [Thread-121298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:10:42.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:10:42.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:10:42.752 [DEBUG] [Thread-121298] [transport.py] [_log()] userauth is OK
2025-12-03T18:10:42.753 [DEBUG] [Thread-121298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:10:42.753 [DEBUG] [Thread-121298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:10:42.753 [DEBUG] [Thread-121298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:10:42.753 [DEBUG] [Thread-121298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:10:42.777 [INFO] [Thread-121298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:10:42.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:10:43.348 [DEBUG] [Thread-121298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:10:43.348 [DEBUG] [Thread-121298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:10:43.349 [DEBUG] [Thread-121298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:10:43.389 [DEBUG] [Thread-121298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:10:43.389 [DEBUG] [Thread-121298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:10:43.392 [DEBUG] [Thread-121298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:10:43.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:10:43.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:10:43.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:10:43.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:10:43.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:10:43.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:10:43.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:10:43.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:10:43.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:10:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.673658 -999.00  +20.20  14.57     29   +1.60 1 1 1 1 1   887    0 18.61 -21.68 ----- 14.6 14.6 153.1 24.0 23.6 -29.2 23.8 -28.3 25.1 -27.4 25.2 -29.2
2025-12-03T18:10:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:10:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:10:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.673658
2025-12-03T18:10:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:10:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:10:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:10:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:10:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:10:43.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:10:28', tmtdew=21.84, humidity=22.77, cloud=0.0, wind=22.92, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:10:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:10:43.416 [DEBUG] [Thread-121298] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:10:43.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:10:43.512 [DEBUG] [Thread-121301] [transport.py] [_log()] starting thread (client mode): 0xa51b9e10
2025-12-03T18:10:43.512 [DEBUG] [Thread-121301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:10:43.527 [DEBUG] [Thread-121301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:10:43.527 [INFO] [Thread-121301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] client lang: <none>
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] server lang: <none>
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] kex follows: False
2025-12-03T18:10:43.535 [DEBUG] [Thread-121301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] Compression: none
2025-12-03T18:10:43.536 [DEBUG] [Thread-121301] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:10:43.598 [DEBUG] [Thread-121301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:10:43.599 [DEBUG] [Thread-121301] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:10:43.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:10:43.600 [DEBUG] [Thread-121301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:10:43.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:10:43.655 [DEBUG] [Thread-121301] [transport.py] [_log()] userauth is OK
2025-12-03T18:10:43.655 [DEBUG] [Thread-121301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:10:43.655 [DEBUG] [Thread-121301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:10:43.656 [DEBUG] [Thread-121301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:10:43.656 [DEBUG] [Thread-121301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:10:43.675 [INFO] [Thread-121301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:10:43.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:10:43.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:10:44.561 [DEBUG] [Thread-121301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:10:44.561 [DEBUG] [Thread-121301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:10:44.609 [DEBUG] [Thread-121301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:10:44.609 [DEBUG] [Thread-121301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:10:44.618 [DEBUG] [Thread-121301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:10:44.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:10:44.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:10:44.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:10:44.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:10:44.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:10:44.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:10:44.653 [DEBUG] [Thread-121301] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:10:51.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:51.844 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:52.723 [DEBUG] [Thread-121303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:10:59.745 [DEBUG] [Thread-121304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:07.757 [DEBUG] [Thread-121305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:14.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:11:14.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:11:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:11:15.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 11), 21.9, 22.74, 0.0, 20.29, 20.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:11:15.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:11:00
2025-12-03T18:11:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:11:15.604 [DEBUG] [Thread-121306] [transport.py] [_log()] starting thread (client mode): 0xa51b9090
2025-12-03T18:11:15.604 [DEBUG] [Thread-121306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:11:15.623 [DEBUG] [Thread-121306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:11:15.623 [INFO] [Thread-121306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] client lang: <none>
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] server lang: <none>
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] kex follows: False
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:11:15.627 [DEBUG] [Thread-121306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:11:15.628 [DEBUG] [Thread-121306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:11:15.628 [DEBUG] [Thread-121306] [transport.py] [_log()] Compression: none
2025-12-03T18:11:15.628 [DEBUG] [Thread-121306] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:11:15.644 [DEBUG] [Thread-121306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:11:15.644 [DEBUG] [Thread-121306] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:11:15.645 [DEBUG] [Thread-121306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:11:15.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:11:15.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:11:15.647 [DEBUG] [Thread-121306] [transport.py] [_log()] userauth is OK
2025-12-03T18:11:15.647 [DEBUG] [Thread-121306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:11:15.647 [DEBUG] [Thread-121306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:11:15.647 [DEBUG] [Thread-121306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:11:15.647 [DEBUG] [Thread-121306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:11:15.670 [INFO] [Thread-121306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:11:15.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:11:16.273 [DEBUG] [Thread-121306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:11:16.274 [DEBUG] [Thread-121306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:11:16.274 [DEBUG] [Thread-121306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:11:16.315 [DEBUG] [Thread-121306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:11:16.315 [DEBUG] [Thread-121306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:11:16.318 [DEBUG] [Thread-121306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:11:16.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:11:16.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:11:16.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:11:16.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:11:16.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:11:16.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:11:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:11:16.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:11:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:11:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.674006 -999.00  +20.10  19.27     29   +1.60 1 1 1 1 1   887    0 18.55 -22.99 ----- 19.3 19.3 153.7 31.5 23.5 -29.8 23.7 -28.5 25.0 -27.4 25.1 -29.6
2025-12-03T18:11:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:11:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:11:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.674006
2025-12-03T18:11:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:11:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:11:16.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:11:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:11:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:11:16.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:11:00', tmtdew=21.9, humidity=22.74, cloud=0.0, wind=20.29, temperature=20.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:10:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:11:16.345 [DEBUG] [Thread-121306] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:11:16.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:11:16.441 [DEBUG] [Thread-121309] [transport.py] [_log()] starting thread (client mode): 0xa51d2740
2025-12-03T18:11:16.441 [DEBUG] [Thread-121309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:11:16.455 [DEBUG] [Thread-121309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:11:16.456 [INFO] [Thread-121309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:16.463 [DEBUG] [Thread-121309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] client lang: <none>
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] server lang: <none>
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] kex follows: False
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] Compression: none
2025-12-03T18:11:16.464 [DEBUG] [Thread-121309] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:11:16.523 [DEBUG] [Thread-121309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:11:16.523 [DEBUG] [Thread-121309] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:11:16.524 [DEBUG] [Thread-121309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:11:16.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:11:16.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:11:16.579 [DEBUG] [Thread-121309] [transport.py] [_log()] userauth is OK
2025-12-03T18:11:16.579 [DEBUG] [Thread-121309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:11:16.579 [DEBUG] [Thread-121309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:11:16.580 [DEBUG] [Thread-121309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:11:16.580 [DEBUG] [Thread-121309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:11:16.598 [INFO] [Thread-121309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:11:16.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:11:16.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:11:17.461 [DEBUG] [Thread-121309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:11:17.461 [DEBUG] [Thread-121309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:11:17.509 [DEBUG] [Thread-121309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:11:17.509 [DEBUG] [Thread-121309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:11:17.519 [DEBUG] [Thread-121309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:11:17.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:11:17.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:11:17.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:11:17.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:11:17.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:11:17.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:11:17.554 [DEBUG] [Thread-121309] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:11:22.788 [DEBUG] [Thread-121311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:37.829 [DEBUG] [Thread-121312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:47.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:11:47.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:11:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:11:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 11, 32), 21.72, 23.01, 0.0, 22.87, 20.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:11:48.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:11:32
2025-12-03T18:11:48.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:11:48.503 [DEBUG] [Thread-121313] [transport.py] [_log()] starting thread (client mode): 0xa27c8850
2025-12-03T18:11:48.503 [DEBUG] [Thread-121313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:11:48.524 [DEBUG] [Thread-121313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:11:48.524 [INFO] [Thread-121313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] client lang: <none>
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] server lang: <none>
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] kex follows: False
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:11:48.527 [DEBUG] [Thread-121313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:11:48.528 [DEBUG] [Thread-121313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:11:48.528 [DEBUG] [Thread-121313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:11:48.528 [DEBUG] [Thread-121313] [transport.py] [_log()] Compression: none
2025-12-03T18:11:48.528 [DEBUG] [Thread-121313] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:11:48.545 [DEBUG] [Thread-121313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:11:48.545 [DEBUG] [Thread-121313] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:11:48.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:11:48.546 [DEBUG] [Thread-121313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:11:48.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:11:48.548 [DEBUG] [Thread-121313] [transport.py] [_log()] userauth is OK
2025-12-03T18:11:48.548 [DEBUG] [Thread-121313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:11:48.548 [DEBUG] [Thread-121313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:11:48.549 [DEBUG] [Thread-121313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:11:48.549 [DEBUG] [Thread-121313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:11:48.568 [INFO] [Thread-121313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:11:48.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:11:49.144 [DEBUG] [Thread-121313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:11:49.145 [DEBUG] [Thread-121313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:11:49.145 [DEBUG] [Thread-121313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:11:49.186 [DEBUG] [Thread-121313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:11:49.186 [DEBUG] [Thread-121313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:11:49.189 [DEBUG] [Thread-121313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:11:49.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:11:49.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:11:49.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:11:49.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:11:49.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:11:49.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:11:49.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:11:49.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.674700 -999.00  +20.10  20.20     29   +1.50 1 1 1 1 1   887    0 17.95 -26.44 ----- 20.2 20.2 163.4 28.3 23.5 -29.3 23.6 -30.0 24.9 -27.7 25.1 -29.4
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.674700
2025-12-03T18:11:49.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:11:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:11:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:11:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:11:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:11:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:11:32', tmtdew=21.72, humidity=23.01, cloud=0.0, wind=22.87, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:11:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:11:49.207 [DEBUG] [Thread-121313] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:11:49.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:11:49.305 [DEBUG] [Thread-121316] [transport.py] [_log()] starting thread (client mode): 0xa27cb190
2025-12-03T18:11:49.305 [DEBUG] [Thread-121316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:11:49.319 [DEBUG] [Thread-121316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:11:49.319 [INFO] [Thread-121316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:11:49.326 [DEBUG] [Thread-121316] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:11:49.326 [DEBUG] [Thread-121316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] client lang: <none>
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] server lang: <none>
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] kex follows: False
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] Compression: none
2025-12-03T18:11:49.327 [DEBUG] [Thread-121316] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:11:49.386 [DEBUG] [Thread-121316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:11:49.387 [DEBUG] [Thread-121316] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:11:49.387 [DEBUG] [Thread-121316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:11:49.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:11:49.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:11:49.443 [DEBUG] [Thread-121316] [transport.py] [_log()] userauth is OK
2025-12-03T18:11:49.443 [DEBUG] [Thread-121316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:11:49.443 [DEBUG] [Thread-121316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:11:49.443 [DEBUG] [Thread-121316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:11:49.444 [DEBUG] [Thread-121316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:11:49.461 [INFO] [Thread-121316] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:11:49.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:11:49.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:11:50.325 [DEBUG] [Thread-121316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:11:50.325 [DEBUG] [Thread-121316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:11:50.373 [DEBUG] [Thread-121316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:11:50.373 [DEBUG] [Thread-121316] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:11:50.382 [DEBUG] [Thread-121316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:11:50.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:11:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:11:50.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:11:50.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:11:50.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:11:50.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:11:50.416 [DEBUG] [Thread-121316] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:11:51.988 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:51.990 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:52.858 [DEBUG] [Thread-121318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:11:59.794 [DEBUG] [Thread-121319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:07.904 [DEBUG] [Thread-121320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:20.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:12:20.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:12:20.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:12:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 12, 5), 21.69, 23.04, 0.0, 19.06, 20.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:12:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:12:05
2025-12-03T18:12:21.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:12:21.370 [DEBUG] [Thread-121321] [transport.py] [_log()] starting thread (client mode): 0xa51bb8b0
2025-12-03T18:12:21.371 [DEBUG] [Thread-121321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:12:21.392 [DEBUG] [Thread-121321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:12:21.392 [INFO] [Thread-121321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] client lang: <none>
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] server lang: <none>
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] kex follows: False
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:12:21.395 [DEBUG] [Thread-121321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:12:21.396 [DEBUG] [Thread-121321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:12:21.396 [DEBUG] [Thread-121321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:12:21.396 [DEBUG] [Thread-121321] [transport.py] [_log()] Compression: none
2025-12-03T18:12:21.396 [DEBUG] [Thread-121321] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:12:21.412 [DEBUG] [Thread-121321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:12:21.413 [DEBUG] [Thread-121321] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:12:21.413 [DEBUG] [Thread-121321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:12:21.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:12:21.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:12:21.415 [DEBUG] [Thread-121321] [transport.py] [_log()] userauth is OK
2025-12-03T18:12:21.416 [DEBUG] [Thread-121321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:12:21.416 [DEBUG] [Thread-121321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:12:21.416 [DEBUG] [Thread-121321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:12:21.416 [DEBUG] [Thread-121321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:12:21.439 [INFO] [Thread-121321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:12:21.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:12:22.072 [DEBUG] [Thread-121321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:12:22.072 [DEBUG] [Thread-121321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:12:22.073 [DEBUG] [Thread-121321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:12:22.113 [DEBUG] [Thread-121321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:12:22.113 [DEBUG] [Thread-121321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:12:22.116 [DEBUG] [Thread-121321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:12:22.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:12:22.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:12:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:12:22.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:12:22.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:12:22.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:12:22.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:12:22.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:12:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:12:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.675048 -999.00  +20.10  21.69     29   +1.50 1 1 1 1 1   887    0 17.92 -25.77 ----- 21.7 21.7 183.2 25.4 23.4 -29.7 23.4 -31.7 24.9 -28.4 25.0 -29.4
2025-12-03T18:12:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:12:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:12:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.675048
2025-12-03T18:12:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:12:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:12:05', tmtdew=21.69, humidity=23.04, cloud=0.0, wind=19.06, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:12:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:12:22.143 [DEBUG] [Thread-121321] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:12:22.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:12:22.239 [DEBUG] [Thread-121324] [transport.py] [_log()] starting thread (client mode): 0xa51d1840
2025-12-03T18:12:22.239 [DEBUG] [Thread-121324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:12:22.254 [DEBUG] [Thread-121324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:12:22.254 [INFO] [Thread-121324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:12:22.261 [DEBUG] [Thread-121324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:12:22.261 [DEBUG] [Thread-121324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] client lang: <none>
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] server lang: <none>
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] kex follows: False
2025-12-03T18:12:22.262 [DEBUG] [Thread-121324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] Compression: none
2025-12-03T18:12:22.263 [DEBUG] [Thread-121324] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:12:22.320 [DEBUG] [Thread-121324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:12:22.320 [DEBUG] [Thread-121324] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:12:22.321 [DEBUG] [Thread-121324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:12:22.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:12:22.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:12:22.376 [DEBUG] [Thread-121324] [transport.py] [_log()] userauth is OK
2025-12-03T18:12:22.376 [DEBUG] [Thread-121324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:12:22.376 [DEBUG] [Thread-121324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:12:22.376 [DEBUG] [Thread-121324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:12:22.376 [DEBUG] [Thread-121324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:12:22.395 [INFO] [Thread-121324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:12:22.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:12:22.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:12:22.931 [DEBUG] [Thread-121326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:23.211 [DEBUG] [Thread-121324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:12:23.211 [DEBUG] [Thread-121324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:12:23.258 [DEBUG] [Thread-121324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:12:23.259 [DEBUG] [Thread-121324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:12:23.267 [DEBUG] [Thread-121324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:12:23.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:12:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:12:23.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:12:23.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:12:23.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:12:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:12:23.301 [DEBUG] [Thread-121324] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:12:37.979 [DEBUG] [Thread-121327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:52.135 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:52.136 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:53.008 [DEBUG] [Thread-121328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:12:53.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:12:53.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:12:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:12:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 12, 37), 21.63, 23.07, 0.0, 23.98, 20.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:12:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:12:37
2025-12-03T18:12:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:12:54.261 [DEBUG] [Thread-121329] [transport.py] [_log()] starting thread (client mode): 0xa277b280
2025-12-03T18:12:54.261 [DEBUG] [Thread-121329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:12:54.283 [DEBUG] [Thread-121329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:12:54.283 [INFO] [Thread-121329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] client lang: <none>
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] server lang: <none>
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] kex follows: False
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:12:54.286 [DEBUG] [Thread-121329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:12:54.287 [DEBUG] [Thread-121329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:12:54.287 [DEBUG] [Thread-121329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:12:54.287 [DEBUG] [Thread-121329] [transport.py] [_log()] Compression: none
2025-12-03T18:12:54.287 [DEBUG] [Thread-121329] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:12:54.304 [DEBUG] [Thread-121329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:12:54.305 [DEBUG] [Thread-121329] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:12:54.305 [DEBUG] [Thread-121329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:12:54.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:12:54.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:12:54.307 [DEBUG] [Thread-121329] [transport.py] [_log()] userauth is OK
2025-12-03T18:12:54.307 [DEBUG] [Thread-121329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:12:54.308 [DEBUG] [Thread-121329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:12:54.308 [DEBUG] [Thread-121329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:12:54.308 [DEBUG] [Thread-121329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:12:54.331 [INFO] [Thread-121329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:12:54.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:12:54.939 [DEBUG] [Thread-121329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:12:54.939 [DEBUG] [Thread-121329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:12:54.940 [DEBUG] [Thread-121329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:12:54.980 [DEBUG] [Thread-121329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:12:54.980 [DEBUG] [Thread-121329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:12:54.982 [DEBUG] [Thread-121329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:12:54.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:12:54.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:12:54.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:12:54.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:12:54.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:12:55.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:12:55.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.675395 -999.00  +20.00  16.34     29   +1.50 1 1 1 1 1   887    0 18.25 -25.47 ----- 16.3 16.3 169.5 25.3 23.3 -29.7 23.3 -31.4 24.8 -27.6 24.9 -29.2
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.675395
2025-12-03T18:12:55.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:12:55.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:12:55.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:12:55.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:12:55.002 [DEBUG] [Thread-121329] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:12:55.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:12:55.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:12:37', tmtdew=21.63, humidity=23.07, cloud=0.0, wind=23.98, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:12:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:12:55.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:12:55.097 [DEBUG] [Thread-121332] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T18:12:55.097 [DEBUG] [Thread-121332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:12:55.112 [DEBUG] [Thread-121332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:12:55.112 [INFO] [Thread-121332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:12:55.119 [DEBUG] [Thread-121332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:12:55.119 [DEBUG] [Thread-121332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:12:55.119 [DEBUG] [Thread-121332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] client lang: <none>
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] server lang: <none>
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] kex follows: False
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:12:55.120 [DEBUG] [Thread-121332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:12:55.121 [DEBUG] [Thread-121332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:12:55.121 [DEBUG] [Thread-121332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:12:55.121 [DEBUG] [Thread-121332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:12:55.121 [DEBUG] [Thread-121332] [transport.py] [_log()] Compression: none
2025-12-03T18:12:55.121 [DEBUG] [Thread-121332] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:12:55.179 [DEBUG] [Thread-121332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:12:55.179 [DEBUG] [Thread-121332] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:12:55.180 [DEBUG] [Thread-121332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:12:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:12:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:12:55.235 [DEBUG] [Thread-121332] [transport.py] [_log()] userauth is OK
2025-12-03T18:12:55.235 [DEBUG] [Thread-121332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:12:55.235 [DEBUG] [Thread-121332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:12:55.236 [DEBUG] [Thread-121332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:12:55.236 [DEBUG] [Thread-121332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:12:55.254 [INFO] [Thread-121332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:12:55.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:12:55.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:12:56.078 [DEBUG] [Thread-121332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:12:56.078 [DEBUG] [Thread-121332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:12:56.126 [DEBUG] [Thread-121332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:12:56.126 [DEBUG] [Thread-121332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:12:56.135 [DEBUG] [Thread-121332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:12:56.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:12:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:12:56.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:12:56.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:12:56.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:12:56.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:12:56.170 [DEBUG] [Thread-121332] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:12:59.835 [DEBUG] [Thread-121334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:08.036 [DEBUG] [Thread-121335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:23.079 [DEBUG] [Thread-121336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:26.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:13:26.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:13:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:13:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 13, 9), 21.75, 22.89, 0.0, 26.33, 20.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:13:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:13:09
2025-12-03T18:13:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:13:27.175 [DEBUG] [Thread-121337] [transport.py] [_log()] starting thread (client mode): 0xa2760b20
2025-12-03T18:13:27.175 [DEBUG] [Thread-121337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:13:27.195 [DEBUG] [Thread-121337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:13:27.195 [INFO] [Thread-121337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] client lang: <none>
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] server lang: <none>
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] kex follows: False
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] Compression: none
2025-12-03T18:13:27.198 [DEBUG] [Thread-121337] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:13:27.216 [DEBUG] [Thread-121337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:13:27.217 [DEBUG] [Thread-121337] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:13:27.217 [DEBUG] [Thread-121337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:13:27.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:13:27.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:13:27.218 [DEBUG] [Thread-121337] [transport.py] [_log()] userauth is OK
2025-12-03T18:13:27.218 [DEBUG] [Thread-121337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:13:27.218 [DEBUG] [Thread-121337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:13:27.218 [DEBUG] [Thread-121337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:13:27.218 [DEBUG] [Thread-121337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:13:27.233 [INFO] [Thread-121337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:13:27.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:13:27.880 [DEBUG] [Thread-121337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:13:27.880 [DEBUG] [Thread-121337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:13:27.880 [DEBUG] [Thread-121337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:13:27.921 [DEBUG] [Thread-121337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:13:27.921 [DEBUG] [Thread-121337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:13:27.923 [DEBUG] [Thread-121337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:13:27.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:13:27.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:13:27.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:13:27.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:13:27.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:13:27.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:13:27.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.675742 -999.00  +20.10  20.26     29   +1.60 1 1 1 1 1   887    0 18.05 -25.35 ----- 20.3 20.3 162.4 23.6 23.3 -28.8 23.5 -28.4 24.8 -26.8 24.9 -29.1
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.675742
2025-12-03T18:13:27.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:13:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:13:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:13:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:13:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:13:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:13:09', tmtdew=21.75, humidity=22.89, cloud=0.0, wind=26.33, temperature=20.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:13:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:13:27.942 [DEBUG] [Thread-121337] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:13:28.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:13:28.027 [DEBUG] [Thread-121340] [transport.py] [_log()] starting thread (client mode): 0xa27c8760
2025-12-03T18:13:28.027 [DEBUG] [Thread-121340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:13:28.042 [DEBUG] [Thread-121340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:13:28.042 [INFO] [Thread-121340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] client lang: <none>
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] server lang: <none>
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] kex follows: False
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:13:28.049 [DEBUG] [Thread-121340] [transport.py] [_log()] Compression: none
2025-12-03T18:13:28.050 [DEBUG] [Thread-121340] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:13:28.106 [DEBUG] [Thread-121340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:13:28.106 [DEBUG] [Thread-121340] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:13:28.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:13:28.107 [DEBUG] [Thread-121340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:13:28.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:13:28.163 [DEBUG] [Thread-121340] [transport.py] [_log()] userauth is OK
2025-12-03T18:13:28.163 [DEBUG] [Thread-121340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:13:28.163 [DEBUG] [Thread-121340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:13:28.163 [DEBUG] [Thread-121340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:13:28.163 [DEBUG] [Thread-121340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:13:28.177 [INFO] [Thread-121340] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:13:28.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:13:28.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:13:29.021 [DEBUG] [Thread-121340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:13:29.021 [DEBUG] [Thread-121340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:13:29.068 [DEBUG] [Thread-121340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:13:29.068 [DEBUG] [Thread-121340] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:13:29.076 [DEBUG] [Thread-121340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:13:29.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:13:29.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:13:29.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:13:29.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:13:29.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:13:29.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:13:29.107 [DEBUG] [Thread-121340] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:13:38.109 [DEBUG] [Thread-121342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:52.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:52.279 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:53.153 [DEBUG] [Thread-121343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:13:59.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:13:59.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:13:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 13, 41), 21.79, 22.91, 0.0, 28.53, 20.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:13:59.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:13:41
2025-12-03T18:13:59.863 [DEBUG] [Thread-121344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:13:59.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:14:00.079 [DEBUG] [Thread-121345] [transport.py] [_log()] starting thread (client mode): 0xa27280a0
2025-12-03T18:14:00.079 [DEBUG] [Thread-121345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:14:00.100 [DEBUG] [Thread-121345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:14:00.100 [INFO] [Thread-121345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:14:00.102 [DEBUG] [Thread-121345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:14:00.102 [DEBUG] [Thread-121345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:14:00.102 [DEBUG] [Thread-121345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:14:00.102 [DEBUG] [Thread-121345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:00.102 [DEBUG] [Thread-121345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] client lang: <none>
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] server lang: <none>
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] kex follows: False
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:14:00.103 [DEBUG] [Thread-121345] [transport.py] [_log()] Compression: none
2025-12-03T18:14:00.104 [DEBUG] [Thread-121345] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:14:00.117 [DEBUG] [Thread-121345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:14:00.118 [DEBUG] [Thread-121345] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:14:00.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:14:00.119 [DEBUG] [Thread-121345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:14:00.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:14:00.121 [DEBUG] [Thread-121345] [transport.py] [_log()] userauth is OK
2025-12-03T18:14:00.121 [DEBUG] [Thread-121345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:14:00.121 [DEBUG] [Thread-121345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:14:00.121 [DEBUG] [Thread-121345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:14:00.121 [DEBUG] [Thread-121345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:14:00.144 [INFO] [Thread-121345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:14:00.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:14:00.736 [DEBUG] [Thread-121345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:14:00.736 [DEBUG] [Thread-121345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:14:00.737 [DEBUG] [Thread-121345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:14:00.777 [DEBUG] [Thread-121345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:14:00.777 [DEBUG] [Thread-121345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:14:00.779 [DEBUG] [Thread-121345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:14:00.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:14:00.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:14:00.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:14:00.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:14:00.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:14:00.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:14:00.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:14:00.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.676089 -999.00  +20.10  17.34     29   +1.60 1 1 1 1 1   887    0 18.31 -25.79 ----- 17.3 17.3 170.5 25.7 23.3 -29.4 23.4 -29.8 24.8 -27.2 24.9 -29.4
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.676089
2025-12-03T18:14:00.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:14:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:14:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:14:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:14:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:14:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:13:41', tmtdew=21.79, humidity=22.91, cloud=0.0, wind=28.53, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:13:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:14:00.803 [DEBUG] [Thread-121345] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:14:00.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:14:00.899 [DEBUG] [Thread-121348] [transport.py] [_log()] starting thread (client mode): 0xa2752200
2025-12-03T18:14:00.899 [DEBUG] [Thread-121348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:14:00.914 [DEBUG] [Thread-121348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:14:00.914 [INFO] [Thread-121348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:14:00.921 [DEBUG] [Thread-121348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] client lang: <none>
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] server lang: <none>
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] kex follows: False
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:14:00.922 [DEBUG] [Thread-121348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:14:00.923 [DEBUG] [Thread-121348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:14:00.923 [DEBUG] [Thread-121348] [transport.py] [_log()] Compression: none
2025-12-03T18:14:00.923 [DEBUG] [Thread-121348] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:14:00.978 [DEBUG] [Thread-121348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:14:00.979 [DEBUG] [Thread-121348] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:14:00.979 [DEBUG] [Thread-121348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:14:00.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:14:00.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:14:01.034 [DEBUG] [Thread-121348] [transport.py] [_log()] userauth is OK
2025-12-03T18:14:01.035 [DEBUG] [Thread-121348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:14:01.035 [DEBUG] [Thread-121348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:14:01.035 [DEBUG] [Thread-121348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:14:01.035 [DEBUG] [Thread-121348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:14:01.049 [INFO] [Thread-121348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:14:01.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:14:01.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:14:01.903 [DEBUG] [Thread-121348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:14:01.903 [DEBUG] [Thread-121348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:14:01.951 [DEBUG] [Thread-121348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:14:01.951 [DEBUG] [Thread-121348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:14:01.960 [DEBUG] [Thread-121348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:14:01.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:14:01.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:14:01.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:14:01.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:14:01.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:14:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:14:01.992 [DEBUG] [Thread-121348] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:14:08.181 [DEBUG] [Thread-121350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:23.215 [DEBUG] [Thread-121351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:14:32.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:14:32.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:14:32.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 14, 13), 21.8, 22.87, 0.0, 28.41, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:14:32.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:14:13
2025-12-03T18:14:32.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:14:32.962 [DEBUG] [Thread-121352] [transport.py] [_log()] starting thread (client mode): 0xa51d00a0
2025-12-03T18:14:32.962 [DEBUG] [Thread-121352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:14:32.982 [DEBUG] [Thread-121352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:14:32.982 [INFO] [Thread-121352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:14:32.985 [DEBUG] [Thread-121352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:14:32.985 [DEBUG] [Thread-121352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:14:32.985 [DEBUG] [Thread-121352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] client lang: <none>
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] server lang: <none>
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] kex follows: False
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] Compression: none
2025-12-03T18:14:32.986 [DEBUG] [Thread-121352] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:14:33.002 [DEBUG] [Thread-121352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:14:33.003 [DEBUG] [Thread-121352] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:14:33.003 [DEBUG] [Thread-121352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:14:33.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:14:33.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:14:33.005 [DEBUG] [Thread-121352] [transport.py] [_log()] userauth is OK
2025-12-03T18:14:33.005 [DEBUG] [Thread-121352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:14:33.005 [DEBUG] [Thread-121352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:14:33.006 [DEBUG] [Thread-121352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:14:33.006 [DEBUG] [Thread-121352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:14:33.041 [INFO] [Thread-121352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:14:33.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:14:33.675 [DEBUG] [Thread-121352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:14:33.675 [DEBUG] [Thread-121352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:14:33.675 [DEBUG] [Thread-121352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:14:33.716 [DEBUG] [Thread-121352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:14:33.716 [DEBUG] [Thread-121352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:14:33.719 [DEBUG] [Thread-121352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:14:33.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:14:33.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:14:33.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:14:33.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:14:33.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:14:33.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:14:33.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:14:33.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:14:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:14:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.676436 -999.00  +20.10  14.25     29   +1.60 1 1 1 1 1   887    0 18.06 -26.89 ----- 14.2 14.2 165.2 23.6 23.3 -28.8 23.4 -28.3 24.7 -27.0 24.9 -28.6
2025-12-03T18:14:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:14:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:14:33.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.676436
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:14:33.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:14:13', tmtdew=21.8, humidity=22.87, cloud=0.0, wind=28.41, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:14:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:14:33.744 [DEBUG] [Thread-121352] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:14:33.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:14:33.851 [DEBUG] [Thread-121355] [transport.py] [_log()] starting thread (client mode): 0xa2760850
2025-12-03T18:14:33.851 [DEBUG] [Thread-121355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:14:33.866 [DEBUG] [Thread-121355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:14:33.866 [INFO] [Thread-121355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:14:33.873 [DEBUG] [Thread-121355] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] client lang: <none>
2025-12-03T18:14:33.874 [DEBUG] [Thread-121355] [transport.py] [_log()] server lang: <none>
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] kex follows: False
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] Compression: none
2025-12-03T18:14:33.875 [DEBUG] [Thread-121355] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:14:33.931 [DEBUG] [Thread-121355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:14:33.932 [DEBUG] [Thread-121355] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:14:33.932 [DEBUG] [Thread-121355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:14:33.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:14:33.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:14:33.987 [DEBUG] [Thread-121355] [transport.py] [_log()] userauth is OK
2025-12-03T18:14:33.987 [DEBUG] [Thread-121355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:14:33.987 [DEBUG] [Thread-121355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:14:33.988 [DEBUG] [Thread-121355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:14:33.988 [DEBUG] [Thread-121355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:14:34.009 [INFO] [Thread-121355] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:14:34.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:14:34.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:14:34.880 [DEBUG] [Thread-121355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:14:34.881 [DEBUG] [Thread-121355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:14:34.928 [DEBUG] [Thread-121355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:14:34.929 [DEBUG] [Thread-121355] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:14:34.937 [DEBUG] [Thread-121355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:14:34.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:14:34.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:14:34.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:14:34.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:14:34.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:14:34.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:14:34.971 [DEBUG] [Thread-121355] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:14:38.243 [DEBUG] [Thread-121357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:52.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:52.425 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:53.276 [DEBUG] [Thread-121358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:14:59.900 [DEBUG] [Thread-121359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:15:04.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:15:04.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:15:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 14, 45), 21.71, 22.99, 0.0, 26.03, 20.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:15:05.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:14:45
2025-12-03T18:15:05.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:15:05.922 [DEBUG] [Thread-121360] [transport.py] [_log()] starting thread (client mode): 0xa51ba2c0
2025-12-03T18:15:05.922 [DEBUG] [Thread-121360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:15:05.942 [DEBUG] [Thread-121360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:15:05.942 [INFO] [Thread-121360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] client lang: <none>
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] server lang: <none>
2025-12-03T18:15:05.944 [DEBUG] [Thread-121360] [transport.py] [_log()] kex follows: False
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] Compression: none
2025-12-03T18:15:05.945 [DEBUG] [Thread-121360] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:15:05.956 [DEBUG] [Thread-121360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:15:05.957 [DEBUG] [Thread-121360] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:15:05.957 [DEBUG] [Thread-121360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:15:05.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:15:05.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:15:05.958 [DEBUG] [Thread-121360] [transport.py] [_log()] userauth is OK
2025-12-03T18:15:05.958 [DEBUG] [Thread-121360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:15:05.958 [DEBUG] [Thread-121360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:15:05.958 [DEBUG] [Thread-121360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:15:05.958 [DEBUG] [Thread-121360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:15:05.977 [INFO] [Thread-121360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:15:05.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:15:06.778 [DEBUG] [Thread-121360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:15:06.778 [DEBUG] [Thread-121360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:15:06.778 [DEBUG] [Thread-121360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:15:06.819 [DEBUG] [Thread-121360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:15:06.819 [DEBUG] [Thread-121360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:15:06.821 [DEBUG] [Thread-121360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:15:06.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:15:06.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:15:06.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:15:06.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:15:06.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:15:06.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:15:06.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:15:06.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.676783 -999.00  +20.10  16.19     29   +1.60 1 1 1 1 1   887    0 18.13 -26.44 ----- 16.2 16.2 165.4 27.0 23.2 -29.3 23.4 -28.6 24.7 -26.8 24.9 -28.5
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.676783
2025-12-03T18:15:06.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:15:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:15:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:15:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:15:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:15:06.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:14:45', tmtdew=21.71, humidity=22.99, cloud=0.0, wind=26.03, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:14:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:15:06.869 [DEBUG] [Thread-121360] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:15:06.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:15:06.968 [DEBUG] [Thread-121363] [transport.py] [_log()] starting thread (client mode): 0xa27617e0
2025-12-03T18:15:06.968 [DEBUG] [Thread-121363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:15:06.982 [DEBUG] [Thread-121363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:15:06.982 [INFO] [Thread-121363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] client lang: <none>
2025-12-03T18:15:06.990 [DEBUG] [Thread-121363] [transport.py] [_log()] server lang: <none>
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] kex follows: False
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] Compression: none
2025-12-03T18:15:06.991 [DEBUG] [Thread-121363] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:15:07.050 [DEBUG] [Thread-121363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:15:07.051 [DEBUG] [Thread-121363] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:15:07.051 [DEBUG] [Thread-121363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:15:07.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:15:07.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:15:07.107 [DEBUG] [Thread-121363] [transport.py] [_log()] userauth is OK
2025-12-03T18:15:07.107 [DEBUG] [Thread-121363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:15:07.107 [DEBUG] [Thread-121363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:15:07.107 [DEBUG] [Thread-121363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:15:07.107 [DEBUG] [Thread-121363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:15:07.127 [INFO] [Thread-121363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:15:07.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:15:07.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:15:07.949 [DEBUG] [Thread-121363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:15:07.949 [DEBUG] [Thread-121363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:15:07.997 [DEBUG] [Thread-121363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:15:07.997 [DEBUG] [Thread-121363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:15:08.005 [DEBUG] [Thread-121363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:15:08.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:15:08.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:15:08.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:15:08.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:15:08.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:15:08.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:15:08.040 [DEBUG] [Thread-121363] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:15:08.306 [DEBUG] [Thread-121365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:23.347 [DEBUG] [Thread-121366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:38.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:15:38.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:15:38.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:15:38.373 [DEBUG] [Thread-121367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:38.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 15, 17), 21.68, 23.04, 0.0, 23.41, 20.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:15:38.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:15:17
2025-12-03T18:15:38.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:15:38.995 [DEBUG] [Thread-121368] [transport.py] [_log()] starting thread (client mode): 0xa2728310
2025-12-03T18:15:38.995 [DEBUG] [Thread-121368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:15:39.015 [DEBUG] [Thread-121368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:15:39.015 [INFO] [Thread-121368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:15:39.018 [DEBUG] [Thread-121368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:15:39.018 [DEBUG] [Thread-121368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:15:39.018 [DEBUG] [Thread-121368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] client lang: <none>
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] server lang: <none>
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] kex follows: False
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] Compression: none
2025-12-03T18:15:39.019 [DEBUG] [Thread-121368] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:15:39.035 [DEBUG] [Thread-121368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:15:39.035 [DEBUG] [Thread-121368] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:15:39.036 [DEBUG] [Thread-121368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:15:39.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:15:39.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:15:39.038 [DEBUG] [Thread-121368] [transport.py] [_log()] userauth is OK
2025-12-03T18:15:39.038 [DEBUG] [Thread-121368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:15:39.038 [DEBUG] [Thread-121368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:15:39.038 [DEBUG] [Thread-121368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:15:39.038 [DEBUG] [Thread-121368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:15:39.056 [INFO] [Thread-121368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:15:39.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:15:39.672 [DEBUG] [Thread-121368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:15:39.672 [DEBUG] [Thread-121368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:15:39.673 [DEBUG] [Thread-121368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:15:39.714 [DEBUG] [Thread-121368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:15:39.714 [DEBUG] [Thread-121368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:15:39.717 [DEBUG] [Thread-121368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:15:39.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:15:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:15:39.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:15:39.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:15:39.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:15:39.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:15:39.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.677130 -999.00  +20.20  18.15     28   +1.50 1 1 1 1 1   887    0 17.70 -28.46 ----- 18.1 18.1 147.2 26.6 23.3 -29.4 23.5 -28.5 24.7 -27.5 24.9 -29.3
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:15:39.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.677130
2025-12-03T18:15:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:15:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:15:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:15:39.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:15:39.742 [DEBUG] [Thread-121368] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:15:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:15:39.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:15:17', tmtdew=21.68, humidity=23.04, cloud=0.0, wind=23.41, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:15:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:15:39.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:15:39.840 [DEBUG] [Thread-121371] [transport.py] [_log()] starting thread (client mode): 0xa5148430
2025-12-03T18:15:39.840 [DEBUG] [Thread-121371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:15:39.855 [DEBUG] [Thread-121371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:15:39.855 [INFO] [Thread-121371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:15:39.862 [DEBUG] [Thread-121371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:15:39.863 [DEBUG] [Thread-121371] [transport.py] [_log()] client lang: <none>
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] server lang: <none>
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] kex follows: False
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:15:39.864 [DEBUG] [Thread-121371] [transport.py] [_log()] Compression: none
2025-12-03T18:15:39.865 [DEBUG] [Thread-121371] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:15:39.921 [DEBUG] [Thread-121371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:15:39.922 [DEBUG] [Thread-121371] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:15:39.922 [DEBUG] [Thread-121371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:15:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:15:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:15:39.979 [DEBUG] [Thread-121371] [transport.py] [_log()] userauth is OK
2025-12-03T18:15:39.979 [DEBUG] [Thread-121371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:15:39.980 [DEBUG] [Thread-121371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:15:39.980 [DEBUG] [Thread-121371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:15:39.980 [DEBUG] [Thread-121371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:15:39.999 [INFO] [Thread-121371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:15:39.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:15:39.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:15:40.877 [DEBUG] [Thread-121371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:15:40.877 [DEBUG] [Thread-121371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:15:40.931 [DEBUG] [Thread-121371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:15:40.931 [DEBUG] [Thread-121371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:15:40.940 [DEBUG] [Thread-121371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:15:40.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:15:40.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:15:40.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:15:40.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:15:40.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:15:40.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:15:40.974 [DEBUG] [Thread-121371] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:15:52.566 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:52.567 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:53.404 [DEBUG] [Thread-121373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:15:59.939 [DEBUG] [Thread-121374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:08.445 [DEBUG] [Thread-121375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:16:10.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:16:10.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:16:11.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 15, 49), 21.78, 23.11, 0.0, 25.41, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:16:11.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:15:49
2025-12-03T18:16:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:16:11.928 [DEBUG] [Thread-121376] [transport.py] [_log()] starting thread (client mode): 0xa514a1a0
2025-12-03T18:16:11.928 [DEBUG] [Thread-121376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:16:11.948 [DEBUG] [Thread-121376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:16:11.948 [INFO] [Thread-121376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:16:11.950 [DEBUG] [Thread-121376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:16:11.950 [DEBUG] [Thread-121376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] client lang: <none>
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] server lang: <none>
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] kex follows: False
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] Compression: none
2025-12-03T18:16:11.951 [DEBUG] [Thread-121376] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:16:11.969 [DEBUG] [Thread-121376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:16:11.969 [DEBUG] [Thread-121376] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:16:11.969 [DEBUG] [Thread-121376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:16:11.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:16:11.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:16:11.971 [DEBUG] [Thread-121376] [transport.py] [_log()] userauth is OK
2025-12-03T18:16:11.971 [DEBUG] [Thread-121376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:16:11.971 [DEBUG] [Thread-121376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:16:11.972 [DEBUG] [Thread-121376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:16:11.972 [DEBUG] [Thread-121376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:16:11.989 [INFO] [Thread-121376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:16:11.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:16:12.644 [DEBUG] [Thread-121376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:16:12.645 [DEBUG] [Thread-121376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:16:12.645 [DEBUG] [Thread-121376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:16:12.684 [DEBUG] [Thread-121376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:16:12.685 [DEBUG] [Thread-121376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:16:12.687 [DEBUG] [Thread-121376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:16:12.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:16:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:16:12.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:16:12.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:16:12.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:16:12.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:16:12.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:16:12.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:16:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:16:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.677478 -999.00  +20.10  18.25     29   +1.50 1 1 1 1 1   887    0 17.78 -30.06 ----- 18.2 18.2 153.2 36.8 23.2 -29.6 23.4 -29.4 24.6 -28.5 24.7 -29.4
2025-12-03T18:16:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:16:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:16:12.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.677478
2025-12-03T18:16:12.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:16:12.709 [DEBUG] [Thread-121376] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:16:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:16:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:16:12.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:16:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:16:12.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:15:49', tmtdew=21.78, humidity=23.11, cloud=0.0, wind=25.41, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:15:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:16:12.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:16:12.812 [DEBUG] [Thread-121379] [transport.py] [_log()] starting thread (client mode): 0xa5149a50
2025-12-03T18:16:12.812 [DEBUG] [Thread-121379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:16:12.827 [DEBUG] [Thread-121379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:16:12.827 [INFO] [Thread-121379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:16:12.834 [DEBUG] [Thread-121379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:16:12.834 [DEBUG] [Thread-121379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:16:12.834 [DEBUG] [Thread-121379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:16:12.834 [DEBUG] [Thread-121379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] client lang: <none>
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] server lang: <none>
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] kex follows: False
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] Compression: none
2025-12-03T18:16:12.835 [DEBUG] [Thread-121379] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:16:12.894 [DEBUG] [Thread-121379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:16:12.895 [DEBUG] [Thread-121379] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:16:12.895 [DEBUG] [Thread-121379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:16:12.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:16:12.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:16:12.952 [DEBUG] [Thread-121379] [transport.py] [_log()] userauth is OK
2025-12-03T18:16:12.952 [DEBUG] [Thread-121379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:16:12.952 [DEBUG] [Thread-121379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:16:12.952 [DEBUG] [Thread-121379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:16:12.952 [DEBUG] [Thread-121379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:16:12.971 [INFO] [Thread-121379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:16:12.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:16:12.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:16:13.812 [DEBUG] [Thread-121379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:16:13.812 [DEBUG] [Thread-121379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:16:13.862 [DEBUG] [Thread-121379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:16:13.862 [DEBUG] [Thread-121379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:16:13.871 [DEBUG] [Thread-121379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:16:13.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:16:13.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:16:13.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:16:13.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:16:13.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:16:13.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:16:13.907 [DEBUG] [Thread-121379] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:16:23.476 [DEBUG] [Thread-121381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:38.517 [DEBUG] [Thread-121382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:16:43.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:16:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:16:44.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 16, 21), 21.72, 23.22, 0.0, 22.32, 20.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:16:44.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:16:21
2025-12-03T18:16:44.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:16:44.915 [DEBUG] [Thread-121383] [transport.py] [_log()] starting thread (client mode): 0xa514aec0
2025-12-03T18:16:44.915 [DEBUG] [Thread-121383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:16:44.934 [DEBUG] [Thread-121383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:16:44.934 [INFO] [Thread-121383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] client lang: <none>
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] server lang: <none>
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] kex follows: False
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] Compression: none
2025-12-03T18:16:44.936 [DEBUG] [Thread-121383] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:16:44.945 [DEBUG] [Thread-121383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:16:44.945 [DEBUG] [Thread-121383] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:16:44.945 [DEBUG] [Thread-121383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:16:44.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:16:44.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:16:44.946 [DEBUG] [Thread-121383] [transport.py] [_log()] userauth is OK
2025-12-03T18:16:44.946 [DEBUG] [Thread-121383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:16:44.946 [DEBUG] [Thread-121383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:16:44.946 [DEBUG] [Thread-121383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:16:44.946 [DEBUG] [Thread-121383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:16:44.956 [INFO] [Thread-121383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:16:44.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:16:45.587 [DEBUG] [Thread-121383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:16:45.587 [DEBUG] [Thread-121383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:16:45.587 [DEBUG] [Thread-121383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:16:45.628 [DEBUG] [Thread-121383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:16:45.628 [DEBUG] [Thread-121383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:16:45.631 [DEBUG] [Thread-121383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:16:45.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:16:45.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:16:45.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:16:45.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:16:45.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:16:45.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:16:45.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:16:45.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:16:45.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:16:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.678172 -999.00  +19.90  20.84     29   +1.50 1 1 1 1 1   887    0 17.40 -38.79 ----- 20.8 20.8 158.4 27.2 23.1 -29.5 23.4 -30.6 24.5 -27.2 24.7 -29.1
2025-12-03T18:16:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:16:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:16:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.678172
2025-12-03T18:16:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:16:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:16:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:16:45.653 [DEBUG] [Thread-121383] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:16:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:16:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:16:45.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:16:21', tmtdew=21.72, humidity=23.22, cloud=0.0, wind=22.32, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:16:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:16:45.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:16:45.748 [DEBUG] [Thread-121386] [transport.py] [_log()] starting thread (client mode): 0xa2763040
2025-12-03T18:16:45.748 [DEBUG] [Thread-121386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:16:45.763 [DEBUG] [Thread-121386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:16:45.763 [INFO] [Thread-121386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] client lang: <none>
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] server lang: <none>
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] kex follows: False
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:16:45.771 [DEBUG] [Thread-121386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:16:45.772 [DEBUG] [Thread-121386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:16:45.772 [DEBUG] [Thread-121386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:16:45.772 [DEBUG] [Thread-121386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:16:45.772 [DEBUG] [Thread-121386] [transport.py] [_log()] Compression: none
2025-12-03T18:16:45.772 [DEBUG] [Thread-121386] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:16:45.832 [DEBUG] [Thread-121386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:16:45.832 [DEBUG] [Thread-121386] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:16:45.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:16:45.833 [DEBUG] [Thread-121386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:16:45.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:16:45.891 [DEBUG] [Thread-121386] [transport.py] [_log()] userauth is OK
2025-12-03T18:16:45.891 [DEBUG] [Thread-121386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:16:45.891 [DEBUG] [Thread-121386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:16:45.891 [DEBUG] [Thread-121386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:16:45.891 [DEBUG] [Thread-121386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:16:45.910 [INFO] [Thread-121386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:16:45.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:16:45.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:16:46.788 [DEBUG] [Thread-121386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:16:46.789 [DEBUG] [Thread-121386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:16:46.838 [DEBUG] [Thread-121386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:16:46.838 [DEBUG] [Thread-121386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:16:46.847 [DEBUG] [Thread-121386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:16:46.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:16:46.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:16:46.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:16:46.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:16:46.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:16:46.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:16:46.880 [DEBUG] [Thread-121386] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:16:52.706 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:52.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:53.544 [DEBUG] [Thread-121388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:16:59.973 [DEBUG] [Thread-121389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:08.578 [DEBUG] [Thread-121390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:16.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:17:16.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:17:16.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:17:17.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 16, 53), 21.79, 23.19, 0.0, 21.83, 20.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:17:17.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:16:53
2025-12-03T18:17:17.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:17:17.840 [DEBUG] [Thread-121391] [transport.py] [_log()] starting thread (client mode): 0xa2761f00
2025-12-03T18:17:17.840 [DEBUG] [Thread-121391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:17:17.861 [DEBUG] [Thread-121391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:17:17.861 [INFO] [Thread-121391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:17:17.864 [DEBUG] [Thread-121391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:17:17.864 [DEBUG] [Thread-121391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:17:17.864 [DEBUG] [Thread-121391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:17:17.864 [DEBUG] [Thread-121391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] client lang: <none>
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] server lang: <none>
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] kex follows: False
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:17:17.865 [DEBUG] [Thread-121391] [transport.py] [_log()] Compression: none
2025-12-03T18:17:17.866 [DEBUG] [Thread-121391] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:17:17.882 [DEBUG] [Thread-121391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:17:17.882 [DEBUG] [Thread-121391] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:17:17.882 [DEBUG] [Thread-121391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:17:17.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:17:17.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:17:17.883 [DEBUG] [Thread-121391] [transport.py] [_log()] userauth is OK
2025-12-03T18:17:17.883 [DEBUG] [Thread-121391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:17:17.883 [DEBUG] [Thread-121391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:17:17.883 [DEBUG] [Thread-121391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:17:17.883 [DEBUG] [Thread-121391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:17:17.903 [INFO] [Thread-121391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:17:17.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:17:18.563 [DEBUG] [Thread-121391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:17:18.563 [DEBUG] [Thread-121391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:17:18.563 [DEBUG] [Thread-121391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:17:18.605 [DEBUG] [Thread-121391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:17:18.605 [DEBUG] [Thread-121391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:17:18.607 [DEBUG] [Thread-121391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:17:18.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:17:18.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:17:18.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:17:18.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:17:18.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:17:18.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:17:18.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.678520 -999.00  +19.90  20.84     29   +1.60 1 1 1 1 1   887    0 17.79 -40.88 ----- 20.8 20.8 176.4 31.6 23.0 -29.3 23.2 -29.0 24.4 -27.6 24.6 -28.7
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.678520
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:17:18.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:16:53', tmtdew=21.79, humidity=23.19, cloud=0.0, wind=21.83, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:17:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:17:18.626 [DEBUG] [Thread-121391] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:17:18.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:17:18.711 [DEBUG] [Thread-121394] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T18:17:18.711 [DEBUG] [Thread-121394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:17:18.727 [DEBUG] [Thread-121394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:17:18.727 [INFO] [Thread-121394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:17:18.734 [DEBUG] [Thread-121394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:17:18.734 [DEBUG] [Thread-121394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] client lang: <none>
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] server lang: <none>
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] kex follows: False
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] Compression: none
2025-12-03T18:17:18.735 [DEBUG] [Thread-121394] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:17:18.790 [DEBUG] [Thread-121394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:17:18.790 [DEBUG] [Thread-121394] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:17:18.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:17:18.790 [DEBUG] [Thread-121394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:17:18.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:17:18.847 [DEBUG] [Thread-121394] [transport.py] [_log()] userauth is OK
2025-12-03T18:17:18.847 [DEBUG] [Thread-121394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:17:18.847 [DEBUG] [Thread-121394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:17:18.847 [DEBUG] [Thread-121394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:17:18.847 [DEBUG] [Thread-121394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:17:18.863 [INFO] [Thread-121394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:17:18.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:17:18.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:17:19.715 [DEBUG] [Thread-121394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:17:19.715 [DEBUG] [Thread-121394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:17:19.763 [DEBUG] [Thread-121394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:17:19.763 [DEBUG] [Thread-121394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:17:19.773 [DEBUG] [Thread-121394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:17:19.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:17:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:17:19.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:17:19.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:17:19.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:17:19.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:17:19.808 [DEBUG] [Thread-121394] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:17:23.605 [DEBUG] [Thread-121396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:38.643 [DEBUG] [Thread-121397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:49.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:17:49.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:17:49.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:17:50.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 17, 25), 21.81, 23.16, 0.0, 21.3, 20.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:17:50.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:17:25
2025-12-03T18:17:50.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:17:50.775 [DEBUG] [Thread-121398] [transport.py] [_log()] starting thread (client mode): 0xa2762440
2025-12-03T18:17:50.775 [DEBUG] [Thread-121398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:17:50.797 [DEBUG] [Thread-121398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:17:50.798 [INFO] [Thread-121398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:17:50.801 [DEBUG] [Thread-121398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] client lang: <none>
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] server lang: <none>
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] kex follows: False
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] Compression: none
2025-12-03T18:17:50.802 [DEBUG] [Thread-121398] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:17:50.820 [DEBUG] [Thread-121398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:17:50.821 [DEBUG] [Thread-121398] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:17:50.822 [DEBUG] [Thread-121398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:17:50.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:17:50.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:17:50.823 [DEBUG] [Thread-121398] [transport.py] [_log()] userauth is OK
2025-12-03T18:17:50.824 [DEBUG] [Thread-121398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:17:50.824 [DEBUG] [Thread-121398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:17:50.824 [DEBUG] [Thread-121398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:17:50.824 [DEBUG] [Thread-121398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:17:50.841 [INFO] [Thread-121398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:17:50.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:17:51.402 [DEBUG] [Thread-121398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:17:51.402 [DEBUG] [Thread-121398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:17:51.402 [DEBUG] [Thread-121398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:17:51.443 [DEBUG] [Thread-121398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:17:51.443 [DEBUG] [Thread-121398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:17:51.446 [DEBUG] [Thread-121398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:17:51.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:17:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:17:51.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:17:51.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:17:51.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:17:51.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:17:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:17:51.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:17:51.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:17:51.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.678867 -999.00  +19.90  18.66     29   +1.50 1 1 1 1 1   887    0 17.50 -38.46 ----- 18.7 18.7 159.8 26.1 23.1 -29.1 23.3 -29.3 24.4 -26.9 24.6 -29.4
2025-12-03T18:17:51.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:17:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:17:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.678867
2025-12-03T18:17:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:17:51.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:17:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:17:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:17:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:17:51.470 [DEBUG] [Thread-121398] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:17:51.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:17:25', tmtdew=21.81, humidity=23.16, cloud=0.0, wind=21.3, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:17:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:17:51.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:17:51.569 [DEBUG] [Thread-121401] [transport.py] [_log()] starting thread (client mode): 0xa51b84c0
2025-12-03T18:17:51.569 [DEBUG] [Thread-121401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:17:51.583 [DEBUG] [Thread-121401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:17:51.584 [INFO] [Thread-121401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:17:51.591 [DEBUG] [Thread-121401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:17:51.591 [DEBUG] [Thread-121401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] client lang: <none>
2025-12-03T18:17:51.592 [DEBUG] [Thread-121401] [transport.py] [_log()] server lang: <none>
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] kex follows: False
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] Compression: none
2025-12-03T18:17:51.593 [DEBUG] [Thread-121401] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:17:51.651 [DEBUG] [Thread-121401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:17:51.651 [DEBUG] [Thread-121401] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:17:51.652 [DEBUG] [Thread-121401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:17:51.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:17:51.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:17:51.707 [DEBUG] [Thread-121401] [transport.py] [_log()] userauth is OK
2025-12-03T18:17:51.707 [DEBUG] [Thread-121401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:17:51.707 [DEBUG] [Thread-121401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:17:51.707 [DEBUG] [Thread-121401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:17:51.707 [DEBUG] [Thread-121401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:17:51.730 [INFO] [Thread-121401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:17:51.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:17:51.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:17:52.596 [DEBUG] [Thread-121401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:17:52.597 [DEBUG] [Thread-121401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:17:52.644 [DEBUG] [Thread-121401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:17:52.644 [DEBUG] [Thread-121401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:17:52.655 [DEBUG] [Thread-121401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:17:52.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:17:52.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:17:52.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:17:52.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:17:52.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:17:52.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:17:52.691 [DEBUG] [Thread-121401] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:17:52.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:52.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:17:53.672 [DEBUG] [Thread-121403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:00.008 [DEBUG] [Thread-121404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:08.707 [DEBUG] [Thread-121405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:22.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:18:22.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:18:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:18:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 17, 57), 21.65, 23.17, 0.0, 21.16, 20.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:18:23.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:17:57
2025-12-03T18:18:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:18:23.669 [DEBUG] [Thread-121406] [transport.py] [_log()] starting thread (client mode): 0xa27625f0
2025-12-03T18:18:23.669 [DEBUG] [Thread-121406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:18:23.693 [DEBUG] [Thread-121406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:18:23.693 [INFO] [Thread-121406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] client lang: <none>
2025-12-03T18:18:23.697 [DEBUG] [Thread-121406] [transport.py] [_log()] server lang: <none>
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] kex follows: False
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] Compression: none
2025-12-03T18:18:23.698 [DEBUG] [Thread-121406] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:18:23.718 [DEBUG] [Thread-121406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:18:23.718 [DEBUG] [Thread-121406] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:18:23.719 [DEBUG] [Thread-121406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:18:23.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:18:23.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:18:23.720 [DEBUG] [Thread-121406] [transport.py] [_log()] userauth is OK
2025-12-03T18:18:23.721 [DEBUG] [Thread-121406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:18:23.721 [DEBUG] [Thread-121406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:18:23.721 [DEBUG] [Thread-121406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:18:23.721 [DEBUG] [Thread-121406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:18:23.736 [DEBUG] [Thread-121408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:23.744 [INFO] [Thread-121406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:18:23.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:18:24.416 [DEBUG] [Thread-121406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:18:24.416 [DEBUG] [Thread-121406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:18:24.416 [DEBUG] [Thread-121406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:18:24.457 [DEBUG] [Thread-121406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:18:24.457 [DEBUG] [Thread-121406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:18:24.460 [DEBUG] [Thread-121406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:18:24.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:18:24.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:18:24.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:18:24.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:18:24.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:18:24.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:18:24.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:18:24.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:18:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:18:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.679214 -999.00  +19.90  16.02     29   +1.60 1 1 1 1 1   887    0 17.93 -36.06 ----- 16.0 16.0 168.1 22.6 23.0 -28.8 23.1 -31.3 24.4 -28.2 24.6 -29.2
2025-12-03T18:18:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:18:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:18:24.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.679214
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:18:24.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:17:57', tmtdew=21.65, humidity=23.17, cloud=0.0, wind=21.16, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:18:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:18:24.484 [DEBUG] [Thread-121406] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:18:24.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:18:24.579 [DEBUG] [Thread-121410] [transport.py] [_log()] starting thread (client mode): 0xa2763a60
2025-12-03T18:18:24.579 [DEBUG] [Thread-121410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:18:24.593 [DEBUG] [Thread-121410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:18:24.593 [INFO] [Thread-121410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:24.601 [DEBUG] [Thread-121410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] client lang: <none>
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] server lang: <none>
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] kex follows: False
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:18:24.602 [DEBUG] [Thread-121410] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:18:24.603 [DEBUG] [Thread-121410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:18:24.603 [DEBUG] [Thread-121410] [transport.py] [_log()] Compression: none
2025-12-03T18:18:24.603 [DEBUG] [Thread-121410] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:18:24.659 [DEBUG] [Thread-121410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:18:24.660 [DEBUG] [Thread-121410] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:18:24.660 [DEBUG] [Thread-121410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:18:24.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:18:24.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:18:24.715 [DEBUG] [Thread-121410] [transport.py] [_log()] userauth is OK
2025-12-03T18:18:24.715 [DEBUG] [Thread-121410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:18:24.715 [DEBUG] [Thread-121410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:18:24.715 [DEBUG] [Thread-121410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:18:24.715 [DEBUG] [Thread-121410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:18:24.735 [INFO] [Thread-121410] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:18:24.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:18:24.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:18:25.567 [DEBUG] [Thread-121410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:18:25.567 [DEBUG] [Thread-121410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:18:25.615 [DEBUG] [Thread-121410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:18:25.615 [DEBUG] [Thread-121410] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:18:25.624 [DEBUG] [Thread-121410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:18:25.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:18:25.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:18:25.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:18:25.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:18:25.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:18:25.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:18:25.658 [DEBUG] [Thread-121410] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:18:38.762 [DEBUG] [Thread-121412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:52.991 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:52.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:53.795 [DEBUG] [Thread-121413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:18:55.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:18:55.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:18:55.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:18:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 18, 29), 21.73, 23.07, 0.0, 18.6, 20.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:18:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:18:29
2025-12-03T18:18:56.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:18:56.619 [DEBUG] [Thread-121414] [transport.py] [_log()] starting thread (client mode): 0xa2763e50
2025-12-03T18:18:56.619 [DEBUG] [Thread-121414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:18:56.639 [DEBUG] [Thread-121414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:18:56.639 [INFO] [Thread-121414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:56.641 [DEBUG] [Thread-121414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] client lang: <none>
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] server lang: <none>
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] kex follows: False
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] Compression: none
2025-12-03T18:18:56.642 [DEBUG] [Thread-121414] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:18:56.662 [DEBUG] [Thread-121414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:18:56.662 [DEBUG] [Thread-121414] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:18:56.663 [DEBUG] [Thread-121414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:18:56.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:18:56.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:18:56.704 [DEBUG] [Thread-121414] [transport.py] [_log()] userauth is OK
2025-12-03T18:18:56.705 [DEBUG] [Thread-121414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:18:56.705 [DEBUG] [Thread-121414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:18:56.705 [DEBUG] [Thread-121414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:18:56.705 [DEBUG] [Thread-121414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:18:56.737 [INFO] [Thread-121414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:18:56.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:18:57.359 [DEBUG] [Thread-121414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:18:57.360 [DEBUG] [Thread-121414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:18:57.360 [DEBUG] [Thread-121414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:18:57.401 [DEBUG] [Thread-121414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:18:57.401 [DEBUG] [Thread-121414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:18:57.404 [DEBUG] [Thread-121414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:18:57.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:18:57.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:18:57.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:18:57.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:18:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:18:57.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:18:57.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:18:57.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:18:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:18:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.679561 -999.00  +19.90  15.62     29   +1.60 1 1 1 1 1   887    0 17.79 -36.50 ----- 15.6 15.6 171.7 23.4 23.0 -28.9 23.2 -28.6 24.4 -27.0 24.6 -28.5
2025-12-03T18:18:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:18:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:18:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.679561
2025-12-03T18:18:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:18:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:18:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:18:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:18:57.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:18:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:18:29', tmtdew=21.73, humidity=23.07, cloud=0.0, wind=18.6, temperature=20.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:18:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:18:57.433 [DEBUG] [Thread-121414] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:18:57.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:18:57.537 [DEBUG] [Thread-121417] [transport.py] [_log()] starting thread (client mode): 0xa27502b0
2025-12-03T18:18:57.537 [DEBUG] [Thread-121417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:18:57.552 [DEBUG] [Thread-121417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:18:57.552 [INFO] [Thread-121417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] client lang: <none>
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] server lang: <none>
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] kex follows: False
2025-12-03T18:18:57.560 [DEBUG] [Thread-121417] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] Compression: none
2025-12-03T18:18:57.561 [DEBUG] [Thread-121417] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:18:57.619 [DEBUG] [Thread-121417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:18:57.619 [DEBUG] [Thread-121417] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:18:57.619 [DEBUG] [Thread-121417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:18:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:18:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:18:57.688 [DEBUG] [Thread-121417] [transport.py] [_log()] userauth is OK
2025-12-03T18:18:57.688 [DEBUG] [Thread-121417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:18:57.688 [DEBUG] [Thread-121417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:18:57.688 [DEBUG] [Thread-121417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:18:57.688 [DEBUG] [Thread-121417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:18:57.708 [INFO] [Thread-121417] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:18:57.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:18:57.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:18:58.538 [DEBUG] [Thread-121417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:18:58.538 [DEBUG] [Thread-121417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:18:58.586 [DEBUG] [Thread-121417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:18:58.586 [DEBUG] [Thread-121417] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:18:58.595 [DEBUG] [Thread-121417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:18:58.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:18:58.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:18:58.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:18:58.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:18:58.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:18:58.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:18:58.630 [DEBUG] [Thread-121417] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:19:00.047 [DEBUG] [Thread-121419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:08.830 [DEBUG] [Thread-121420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:23.871 [DEBUG] [Thread-121421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:19:28.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:19:28.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:19:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 19, 1), 21.74, 22.99, 0.0, 26.03, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:19:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:19:01
2025-12-03T18:19:29.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:19:29.600 [DEBUG] [Thread-121422] [transport.py] [_log()] starting thread (client mode): 0xa51483a0
2025-12-03T18:19:29.600 [DEBUG] [Thread-121422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:19:29.620 [DEBUG] [Thread-121422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:19:29.620 [INFO] [Thread-121422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:19:29.623 [DEBUG] [Thread-121422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] client lang: <none>
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] server lang: <none>
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] kex follows: False
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] Compression: none
2025-12-03T18:19:29.624 [DEBUG] [Thread-121422] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:19:29.635 [DEBUG] [Thread-121422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:19:29.636 [DEBUG] [Thread-121422] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:19:29.637 [DEBUG] [Thread-121422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:19:29.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:19:29.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:19:29.639 [DEBUG] [Thread-121422] [transport.py] [_log()] userauth is OK
2025-12-03T18:19:29.639 [DEBUG] [Thread-121422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:19:29.639 [DEBUG] [Thread-121422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:19:29.639 [DEBUG] [Thread-121422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:19:29.640 [DEBUG] [Thread-121422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:19:29.671 [INFO] [Thread-121422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:19:29.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:19:30.316 [DEBUG] [Thread-121422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:19:30.316 [DEBUG] [Thread-121422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:19:30.317 [DEBUG] [Thread-121422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:19:30.358 [DEBUG] [Thread-121422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:19:30.358 [DEBUG] [Thread-121422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:19:30.360 [DEBUG] [Thread-121422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:19:30.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:19:30.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:19:30.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:19:30.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:19:30.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:19:30.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:19:30.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.679908 -999.00  +20.00  19.02     29   +1.50 1 1 1 1 1   887    0 17.74 -38.07 ----- 19.0 19.0 179.6 23.8 23.0 -29.0 23.0 -30.1 24.4 -27.2 24.5 -29.0
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:19:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.679908
2025-12-03T18:19:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:19:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:19:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:19:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:19:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:19:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:19:01', tmtdew=21.74, humidity=22.99, cloud=0.0, wind=26.03, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:19:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:19:30.387 [DEBUG] [Thread-121422] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:19:30.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:19:30.473 [DEBUG] [Thread-121425] [transport.py] [_log()] starting thread (client mode): 0xa27635e0
2025-12-03T18:19:30.473 [DEBUG] [Thread-121425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:19:30.489 [DEBUG] [Thread-121425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:19:30.489 [INFO] [Thread-121425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:19:30.496 [DEBUG] [Thread-121425] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:19:30.497 [DEBUG] [Thread-121425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] client lang: <none>
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] server lang: <none>
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] kex follows: False
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:19:30.498 [DEBUG] [Thread-121425] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:19:30.499 [DEBUG] [Thread-121425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:19:30.499 [DEBUG] [Thread-121425] [transport.py] [_log()] Compression: none
2025-12-03T18:19:30.499 [DEBUG] [Thread-121425] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:19:30.559 [DEBUG] [Thread-121425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:19:30.560 [DEBUG] [Thread-121425] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:19:30.560 [DEBUG] [Thread-121425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:19:30.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:19:30.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:19:30.615 [DEBUG] [Thread-121425] [transport.py] [_log()] userauth is OK
2025-12-03T18:19:30.616 [DEBUG] [Thread-121425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:19:30.616 [DEBUG] [Thread-121425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:19:30.616 [DEBUG] [Thread-121425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:19:30.616 [DEBUG] [Thread-121425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:19:30.634 [INFO] [Thread-121425] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:19:30.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:19:30.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:19:31.492 [DEBUG] [Thread-121425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:19:31.493 [DEBUG] [Thread-121425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:19:31.541 [DEBUG] [Thread-121425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:19:31.541 [DEBUG] [Thread-121425] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:19:31.550 [DEBUG] [Thread-121425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:19:31.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:19:31.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:19:31.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:19:31.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:19:31.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:19:31.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:19:31.584 [DEBUG] [Thread-121425] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:19:38.899 [DEBUG] [Thread-121427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:53.132 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:53.133 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:19:53.941 [DEBUG] [Thread-121428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:00.078 [DEBUG] [Thread-121429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:01.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:20:01.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:20:01.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:20:02.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 19, 33), 21.82, 22.87, 0.0, 25.99, 20.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:20:02.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:19:33
2025-12-03T18:20:02.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:20:02.557 [DEBUG] [Thread-121430] [transport.py] [_log()] starting thread (client mode): 0xa51b9690
2025-12-03T18:20:02.558 [DEBUG] [Thread-121430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:20:02.584 [DEBUG] [Thread-121430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:20:02.584 [INFO] [Thread-121430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:20:02.588 [DEBUG] [Thread-121430] [transport.py] [_log()] client lang: <none>
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] server lang: <none>
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] kex follows: False
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] Compression: none
2025-12-03T18:20:02.589 [DEBUG] [Thread-121430] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:20:02.607 [DEBUG] [Thread-121430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:20:02.608 [DEBUG] [Thread-121430] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:20:02.608 [DEBUG] [Thread-121430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:20:02.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:20:02.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:20:02.610 [DEBUG] [Thread-121430] [transport.py] [_log()] userauth is OK
2025-12-03T18:20:02.611 [DEBUG] [Thread-121430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:20:02.611 [DEBUG] [Thread-121430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:20:02.611 [DEBUG] [Thread-121430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:20:02.611 [DEBUG] [Thread-121430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:20:02.626 [INFO] [Thread-121430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:20:02.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:20:03.392 [DEBUG] [Thread-121430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:20:03.392 [DEBUG] [Thread-121430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:20:03.393 [DEBUG] [Thread-121430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:20:03.433 [DEBUG] [Thread-121430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:20:03.433 [DEBUG] [Thread-121430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:20:03.436 [DEBUG] [Thread-121430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:20:03.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:20:03.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:20:03.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:20:03.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:20:03.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:20:03.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:20:03.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.680256 -999.00  +19.90  19.77     29   +1.50 1 1 1 1 1   887    0 18.00 -38.08 ----- 19.8 19.8 173.2 23.6 23.0 -29.2 23.2 -29.7 24.4 -27.0 24.6 -28.6
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:20:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.680256
2025-12-03T18:20:03.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:20:03.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:20:03.462 [DEBUG] [Thread-121430] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:20:03.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:20:03.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:20:03.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:20:03.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:19:33', tmtdew=21.82, humidity=22.87, cloud=0.0, wind=25.99, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:19:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:20:03.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:20:03.559 [DEBUG] [Thread-121433] [transport.py] [_log()] starting thread (client mode): 0xa2763790
2025-12-03T18:20:03.559 [DEBUG] [Thread-121433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:20:03.573 [DEBUG] [Thread-121433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:20:03.574 [INFO] [Thread-121433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:03.582 [DEBUG] [Thread-121433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] client lang: <none>
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] server lang: <none>
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] kex follows: False
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:20:03.583 [DEBUG] [Thread-121433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:20:03.584 [DEBUG] [Thread-121433] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:20:03.584 [DEBUG] [Thread-121433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:20:03.584 [DEBUG] [Thread-121433] [transport.py] [_log()] Compression: none
2025-12-03T18:20:03.584 [DEBUG] [Thread-121433] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:20:03.639 [DEBUG] [Thread-121433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:20:03.640 [DEBUG] [Thread-121433] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:20:03.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:20:03.641 [DEBUG] [Thread-121433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:20:03.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:20:03.695 [DEBUG] [Thread-121433] [transport.py] [_log()] userauth is OK
2025-12-03T18:20:03.696 [DEBUG] [Thread-121433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:20:03.696 [DEBUG] [Thread-121433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:20:03.696 [DEBUG] [Thread-121433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:20:03.696 [DEBUG] [Thread-121433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:20:03.715 [INFO] [Thread-121433] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:20:03.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:20:03.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:20:04.595 [DEBUG] [Thread-121433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:20:04.595 [DEBUG] [Thread-121433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:20:04.643 [DEBUG] [Thread-121433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:20:04.643 [DEBUG] [Thread-121433] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:20:04.652 [DEBUG] [Thread-121433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:20:04.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:20:04.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:20:04.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:20:04.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:20:04.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:20:04.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:20:04.685 [DEBUG] [Thread-121433] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:20:08.970 [DEBUG] [Thread-121435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:24.014 [DEBUG] [Thread-121436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:34.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:20:34.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:20:34.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:20:35.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 20, 5), 21.83, 22.86, 0.0, 27.24, 20.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:20:35.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:20:05
2025-12-03T18:20:35.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:20:35.700 [DEBUG] [Thread-121437] [transport.py] [_log()] starting thread (client mode): 0xa2752d40
2025-12-03T18:20:35.700 [DEBUG] [Thread-121437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:20:35.719 [DEBUG] [Thread-121437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:20:35.719 [INFO] [Thread-121437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:20:35.722 [DEBUG] [Thread-121437] [transport.py] [_log()] client lang: <none>
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] server lang: <none>
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] kex follows: False
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] Compression: none
2025-12-03T18:20:35.723 [DEBUG] [Thread-121437] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:20:35.737 [DEBUG] [Thread-121437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:20:35.737 [DEBUG] [Thread-121437] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:20:35.737 [DEBUG] [Thread-121437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:20:35.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:20:35.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:20:35.738 [DEBUG] [Thread-121437] [transport.py] [_log()] userauth is OK
2025-12-03T18:20:35.738 [DEBUG] [Thread-121437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:20:35.738 [DEBUG] [Thread-121437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:20:35.738 [DEBUG] [Thread-121437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:20:35.738 [DEBUG] [Thread-121437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:20:35.748 [INFO] [Thread-121437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:20:35.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:20:36.371 [DEBUG] [Thread-121437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:20:36.371 [DEBUG] [Thread-121437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:20:36.371 [DEBUG] [Thread-121437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:20:36.413 [DEBUG] [Thread-121437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:20:36.413 [DEBUG] [Thread-121437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:20:36.415 [DEBUG] [Thread-121437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:20:36.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:20:36.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:20:36.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:20:36.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:20:36.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:20:36.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:20:36.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:20:36.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.680603 -999.00  +20.00  16.83     29   +1.60 1 1 1 1 1   887    0 17.43 -38.00 ----- 16.8 16.8 154.7 22.8 23.0 -28.7 23.2 -27.9 24.4 -26.9 24.5 -28.0
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.680603
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:20:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:20:05', tmtdew=21.83, humidity=22.86, cloud=0.0, wind=27.24, temperature=20.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:20:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:20:36.433 [DEBUG] [Thread-121437] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:20:36.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:20:36.521 [DEBUG] [Thread-121440] [transport.py] [_log()] starting thread (client mode): 0xa27cb820
2025-12-03T18:20:36.521 [DEBUG] [Thread-121440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:20:36.539 [DEBUG] [Thread-121440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:20:36.540 [INFO] [Thread-121440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:20:36.547 [DEBUG] [Thread-121440] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:20:36.547 [DEBUG] [Thread-121440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:20:36.547 [DEBUG] [Thread-121440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:20:36.547 [DEBUG] [Thread-121440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:36.547 [DEBUG] [Thread-121440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] client lang: <none>
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] server lang: <none>
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] kex follows: False
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] Compression: none
2025-12-03T18:20:36.548 [DEBUG] [Thread-121440] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:20:36.607 [DEBUG] [Thread-121440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:20:36.607 [DEBUG] [Thread-121440] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:20:36.608 [DEBUG] [Thread-121440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:20:36.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:20:36.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:20:36.663 [DEBUG] [Thread-121440] [transport.py] [_log()] userauth is OK
2025-12-03T18:20:36.663 [DEBUG] [Thread-121440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:20:36.663 [DEBUG] [Thread-121440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:20:36.663 [DEBUG] [Thread-121440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:20:36.664 [DEBUG] [Thread-121440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:20:36.682 [INFO] [Thread-121440] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:20:36.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:20:36.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:20:37.528 [DEBUG] [Thread-121440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:20:37.529 [DEBUG] [Thread-121440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:20:37.576 [DEBUG] [Thread-121440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:20:37.577 [DEBUG] [Thread-121440] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:20:37.585 [DEBUG] [Thread-121440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:20:37.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:20:37.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:20:37.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:20:37.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:20:37.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:20:37.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:20:37.618 [DEBUG] [Thread-121440] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:20:39.038 [DEBUG] [Thread-121442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:53.271 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:53.272 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:20:54.073 [DEBUG] [Thread-121443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:00.128 [DEBUG] [Thread-121444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:07.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:21:07.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:21:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:21:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 20, 37), 21.92, 22.79, 0.0, 29.33, 20.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:21:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:20:37
2025-12-03T18:21:08.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:21:08.602 [DEBUG] [Thread-121445] [transport.py] [_log()] starting thread (client mode): 0xa51bbe80
2025-12-03T18:21:08.603 [DEBUG] [Thread-121445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:21:08.623 [DEBUG] [Thread-121445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:21:08.623 [INFO] [Thread-121445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] client lang: <none>
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] server lang: <none>
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] kex follows: False
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:21:08.626 [DEBUG] [Thread-121445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:21:08.627 [DEBUG] [Thread-121445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:21:08.627 [DEBUG] [Thread-121445] [transport.py] [_log()] Compression: none
2025-12-03T18:21:08.627 [DEBUG] [Thread-121445] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:21:08.644 [DEBUG] [Thread-121445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:21:08.644 [DEBUG] [Thread-121445] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:21:08.644 [DEBUG] [Thread-121445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:21:08.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:21:08.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:21:08.646 [DEBUG] [Thread-121445] [transport.py] [_log()] userauth is OK
2025-12-03T18:21:08.646 [DEBUG] [Thread-121445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:21:08.646 [DEBUG] [Thread-121445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:21:08.646 [DEBUG] [Thread-121445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:21:08.647 [DEBUG] [Thread-121445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:21:08.664 [INFO] [Thread-121445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:21:08.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:21:09.099 [DEBUG] [Thread-121447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:09.265 [DEBUG] [Thread-121445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:21:09.265 [DEBUG] [Thread-121445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:21:09.265 [DEBUG] [Thread-121445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:21:09.305 [DEBUG] [Thread-121445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:21:09.305 [DEBUG] [Thread-121445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:21:09.307 [DEBUG] [Thread-121445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:21:09.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:21:09.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:21:09.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:21:09.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:21:09.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:21:09.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.680950 -999.00  +20.00  23.13     29   +1.50 1 1 1 1 1   887    0 17.25 -41.06 ----- 23.1 23.1 172.2 28.5 23.0 -29.3 23.1 -30.2 24.4 -27.0 24.5 -29.4
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.680950
2025-12-03T18:21:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:21:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:21:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:21:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:21:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:21:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:20:37', tmtdew=21.92, humidity=22.79, cloud=0.0, wind=29.33, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:20:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:21:09.325 [DEBUG] [Thread-121445] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:21:09.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:21:09.412 [DEBUG] [Thread-121449] [transport.py] [_log()] starting thread (client mode): 0xa2751ea0
2025-12-03T18:21:09.412 [DEBUG] [Thread-121449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:21:09.429 [DEBUG] [Thread-121449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:21:09.429 [INFO] [Thread-121449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:21:09.436 [DEBUG] [Thread-121449] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] client lang: <none>
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] server lang: <none>
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] kex follows: False
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] Compression: none
2025-12-03T18:21:09.437 [DEBUG] [Thread-121449] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:21:09.494 [DEBUG] [Thread-121449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:21:09.495 [DEBUG] [Thread-121449] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:21:09.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:21:09.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:21:09.495 [DEBUG] [Thread-121449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:21:09.551 [DEBUG] [Thread-121449] [transport.py] [_log()] userauth is OK
2025-12-03T18:21:09.551 [DEBUG] [Thread-121449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:21:09.551 [DEBUG] [Thread-121449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:21:09.551 [DEBUG] [Thread-121449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:21:09.551 [DEBUG] [Thread-121449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:21:09.569 [INFO] [Thread-121449] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:21:09.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:21:09.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:21:10.450 [DEBUG] [Thread-121449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:21:10.450 [DEBUG] [Thread-121449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:21:10.499 [DEBUG] [Thread-121449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:21:10.499 [DEBUG] [Thread-121449] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:21:10.507 [DEBUG] [Thread-121449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:21:10.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:21:10.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:21:10.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:21:10.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:21:10.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:21:10.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:21:10.539 [DEBUG] [Thread-121449] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:21:24.127 [DEBUG] [Thread-121451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:39.170 [DEBUG] [Thread-121452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:21:40.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:21:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:21:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 21, 9), 21.91, 22.77, 0.0, 28.32, 20.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:21:41.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:21:09
2025-12-03T18:21:41.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:21:41.504 [DEBUG] [Thread-121453] [transport.py] [_log()] starting thread (client mode): 0xa2728850
2025-12-03T18:21:41.504 [DEBUG] [Thread-121453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:21:41.524 [DEBUG] [Thread-121453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:21:41.524 [INFO] [Thread-121453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:21:41.527 [DEBUG] [Thread-121453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] client lang: <none>
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] server lang: <none>
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] kex follows: False
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:21:41.528 [DEBUG] [Thread-121453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:21:41.529 [DEBUG] [Thread-121453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:21:41.529 [DEBUG] [Thread-121453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:21:41.529 [DEBUG] [Thread-121453] [transport.py] [_log()] Compression: none
2025-12-03T18:21:41.529 [DEBUG] [Thread-121453] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:21:41.547 [DEBUG] [Thread-121453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:21:41.548 [DEBUG] [Thread-121453] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:21:41.548 [DEBUG] [Thread-121453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:21:41.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:21:41.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:21:41.550 [DEBUG] [Thread-121453] [transport.py] [_log()] userauth is OK
2025-12-03T18:21:41.550 [DEBUG] [Thread-121453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:21:41.550 [DEBUG] [Thread-121453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:21:41.550 [DEBUG] [Thread-121453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:21:41.551 [DEBUG] [Thread-121453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:21:41.570 [INFO] [Thread-121453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:21:41.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:21:42.204 [DEBUG] [Thread-121453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:21:42.204 [DEBUG] [Thread-121453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:21:42.204 [DEBUG] [Thread-121453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:21:42.245 [DEBUG] [Thread-121453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:21:42.245 [DEBUG] [Thread-121453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:21:42.247 [DEBUG] [Thread-121453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:21:42.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:21:42.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:21:42.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:21:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:21:42.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:21:42.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:21:42.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.681297 -999.00  +20.00  17.64     29   +1.50 1 1 1 1 1   887    0 17.61 -41.95 ----- 17.6 17.6 168.4 24.2 23.0 -28.9 23.1 -29.0 24.4 -27.0 24.6 -29.1
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.681297
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:21:42.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:21:09', tmtdew=21.91, humidity=22.77, cloud=0.0, wind=28.32, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:21:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:21:42.265 [DEBUG] [Thread-121453] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:21:42.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:21:42.351 [DEBUG] [Thread-121456] [transport.py] [_log()] starting thread (client mode): 0xa2728580
2025-12-03T18:21:42.351 [DEBUG] [Thread-121456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:21:42.366 [DEBUG] [Thread-121456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:21:42.366 [INFO] [Thread-121456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:42.373 [DEBUG] [Thread-121456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] client lang: <none>
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] server lang: <none>
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] kex follows: False
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] Compression: none
2025-12-03T18:21:42.374 [DEBUG] [Thread-121456] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:21:42.430 [DEBUG] [Thread-121456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:21:42.430 [DEBUG] [Thread-121456] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:21:42.430 [DEBUG] [Thread-121456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:21:42.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:21:42.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:21:42.487 [DEBUG] [Thread-121456] [transport.py] [_log()] userauth is OK
2025-12-03T18:21:42.487 [DEBUG] [Thread-121456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:21:42.487 [DEBUG] [Thread-121456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:21:42.487 [DEBUG] [Thread-121456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:21:42.487 [DEBUG] [Thread-121456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:21:42.501 [INFO] [Thread-121456] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:21:42.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:21:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:21:43.352 [DEBUG] [Thread-121456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:21:43.352 [DEBUG] [Thread-121456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:21:43.400 [DEBUG] [Thread-121456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:21:43.400 [DEBUG] [Thread-121456] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:21:43.409 [DEBUG] [Thread-121456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:21:43.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:21:43.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:21:43.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:21:43.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:21:43.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:21:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:21:43.441 [DEBUG] [Thread-121456] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:21:53.411 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:53.412 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:21:54.202 [DEBUG] [Thread-121458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:00.173 [DEBUG] [Thread-121459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:09.247 [DEBUG] [Thread-121460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:22:13.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:22:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:22:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 21, 41), 21.89, 22.87, 0.0, 27.21, 20.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:22:14.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:21:41
2025-12-03T18:22:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:22:14.473 [DEBUG] [Thread-121461] [transport.py] [_log()] starting thread (client mode): 0xa2761ae0
2025-12-03T18:22:14.473 [DEBUG] [Thread-121461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:22:14.493 [DEBUG] [Thread-121461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:22:14.493 [INFO] [Thread-121461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:14.495 [DEBUG] [Thread-121461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] client lang: <none>
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] server lang: <none>
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] kex follows: False
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] Compression: none
2025-12-03T18:22:14.496 [DEBUG] [Thread-121461] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:22:14.513 [DEBUG] [Thread-121461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:22:14.513 [DEBUG] [Thread-121461] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:22:14.513 [DEBUG] [Thread-121461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:22:14.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:22:14.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:22:14.514 [DEBUG] [Thread-121461] [transport.py] [_log()] userauth is OK
2025-12-03T18:22:14.514 [DEBUG] [Thread-121461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:22:14.514 [DEBUG] [Thread-121461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:22:14.514 [DEBUG] [Thread-121461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:22:14.514 [DEBUG] [Thread-121461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:22:14.526 [INFO] [Thread-121461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:22:14.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:22:15.155 [DEBUG] [Thread-121461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:22:15.155 [DEBUG] [Thread-121461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:22:15.155 [DEBUG] [Thread-121461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:22:15.196 [DEBUG] [Thread-121461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:22:15.196 [DEBUG] [Thread-121461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:22:15.198 [DEBUG] [Thread-121461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:22:15.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:22:15.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:22:15.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:22:15.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:22:15.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:22:15.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:22:15.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.681992 -999.00  +19.90  22.51     29   +1.40 1 1 1 1 1   887    0 17.44 -36.14 ----- 22.5 22.5 167.2 26.9 22.9 -29.5 23.1 -28.8 24.3 -27.5 24.5 -29.2
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.681992
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:22:15.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:21:41', tmtdew=21.89, humidity=22.87, cloud=0.0, wind=27.21, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:22:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:22:15.217 [DEBUG] [Thread-121461] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:22:15.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:22:15.301 [DEBUG] [Thread-121464] [transport.py] [_log()] starting thread (client mode): 0xa5148d30
2025-12-03T18:22:15.301 [DEBUG] [Thread-121464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:22:15.316 [DEBUG] [Thread-121464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:22:15.316 [INFO] [Thread-121464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:15.323 [DEBUG] [Thread-121464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] client lang: <none>
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] server lang: <none>
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] kex follows: False
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] Compression: none
2025-12-03T18:22:15.324 [DEBUG] [Thread-121464] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:22:15.381 [DEBUG] [Thread-121464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:22:15.382 [DEBUG] [Thread-121464] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:22:15.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:22:15.382 [DEBUG] [Thread-121464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:22:15.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:22:15.439 [DEBUG] [Thread-121464] [transport.py] [_log()] userauth is OK
2025-12-03T18:22:15.439 [DEBUG] [Thread-121464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:22:15.439 [DEBUG] [Thread-121464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:22:15.439 [DEBUG] [Thread-121464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:22:15.439 [DEBUG] [Thread-121464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:22:15.453 [INFO] [Thread-121464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:22:15.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:22:15.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:22:16.370 [DEBUG] [Thread-121464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:22:16.370 [DEBUG] [Thread-121464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:22:16.418 [DEBUG] [Thread-121464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:22:16.418 [DEBUG] [Thread-121464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:22:16.427 [DEBUG] [Thread-121464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:22:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:22:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:22:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:22:16.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:22:16.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:22:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:22:16.461 [DEBUG] [Thread-121464] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:22:24.276 [DEBUG] [Thread-121466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:39.308 [DEBUG] [Thread-121467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:22:46.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:22:46.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:22:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 22, 13), 21.84, 22.94, 0.0, 27.3, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:22:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:22:13
2025-12-03T18:22:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:22:47.486 [DEBUG] [Thread-121468] [transport.py] [_log()] starting thread (client mode): 0xa514b4f0
2025-12-03T18:22:47.486 [DEBUG] [Thread-121468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:22:47.506 [DEBUG] [Thread-121468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:22:47.506 [INFO] [Thread-121468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:47.509 [DEBUG] [Thread-121468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] client lang: <none>
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] server lang: <none>
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] kex follows: False
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] Compression: none
2025-12-03T18:22:47.510 [DEBUG] [Thread-121468] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:22:47.524 [DEBUG] [Thread-121468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:22:47.525 [DEBUG] [Thread-121468] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:22:47.525 [DEBUG] [Thread-121468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:22:47.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:22:47.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:22:47.526 [DEBUG] [Thread-121468] [transport.py] [_log()] userauth is OK
2025-12-03T18:22:47.526 [DEBUG] [Thread-121468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:22:47.526 [DEBUG] [Thread-121468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:22:47.526 [DEBUG] [Thread-121468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:22:47.526 [DEBUG] [Thread-121468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:22:47.535 [INFO] [Thread-121468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:22:47.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:22:48.159 [DEBUG] [Thread-121468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:22:48.159 [DEBUG] [Thread-121468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:22:48.160 [DEBUG] [Thread-121468] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:22:48.200 [DEBUG] [Thread-121468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:22:48.200 [DEBUG] [Thread-121468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:22:48.203 [DEBUG] [Thread-121468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:22:48.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:22:48.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:22:48.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:22:48.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:22:48.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:22:48.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:22:48.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.682339 -999.00  +19.80  19.35     29   +1.40 1 1 1 1 1   887    0 17.39 -36.40 ----- 19.4 19.4 170.0 29.8 22.9 -29.2 23.1 -28.5 24.2 -27.4 24.4 -29.0
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:22:48.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.682339
2025-12-03T18:22:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:22:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:22:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:22:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:22:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:22:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:22:13', tmtdew=21.84, humidity=22.94, cloud=0.0, wind=27.3, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:22:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:22:48.228 [DEBUG] [Thread-121468] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:22:48.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:22:48.325 [DEBUG] [Thread-121471] [transport.py] [_log()] starting thread (client mode): 0xa27ca890
2025-12-03T18:22:48.325 [DEBUG] [Thread-121471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:22:48.340 [DEBUG] [Thread-121471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:22:48.340 [INFO] [Thread-121471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:22:48.347 [DEBUG] [Thread-121471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:22:48.347 [DEBUG] [Thread-121471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] client lang: <none>
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] server lang: <none>
2025-12-03T18:22:48.348 [DEBUG] [Thread-121471] [transport.py] [_log()] kex follows: False
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] Compression: none
2025-12-03T18:22:48.349 [DEBUG] [Thread-121471] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:22:48.409 [DEBUG] [Thread-121471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:22:48.410 [DEBUG] [Thread-121471] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:22:48.410 [DEBUG] [Thread-121471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:22:48.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:22:48.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:22:48.467 [DEBUG] [Thread-121471] [transport.py] [_log()] userauth is OK
2025-12-03T18:22:48.467 [DEBUG] [Thread-121471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:22:48.467 [DEBUG] [Thread-121471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:22:48.467 [DEBUG] [Thread-121471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:22:48.468 [DEBUG] [Thread-121471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:22:48.490 [INFO] [Thread-121471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:22:48.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:22:48.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:22:49.334 [DEBUG] [Thread-121471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:22:49.334 [DEBUG] [Thread-121471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:22:49.385 [DEBUG] [Thread-121471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:22:49.385 [DEBUG] [Thread-121471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:22:49.394 [DEBUG] [Thread-121471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:22:49.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:22:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:22:49.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:22:49.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:22:49.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:22:49.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:22:49.428 [DEBUG] [Thread-121471] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:22:53.553 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:53.554 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:22:54.338 [DEBUG] [Thread-121473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:00.219 [DEBUG] [Thread-121474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:09.377 [DEBUG] [Thread-121475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:19.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:23:19.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:23:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:23:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 22, 45), 21.67, 23.06, 0.0, 24.33, 20.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:23:20.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:22:45
2025-12-03T18:23:20.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:23:20.418 [DEBUG] [Thread-121476] [transport.py] [_log()] starting thread (client mode): 0xa27caf20
2025-12-03T18:23:20.419 [DEBUG] [Thread-121476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:23:20.440 [DEBUG] [Thread-121476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:23:20.440 [INFO] [Thread-121476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] client lang: <none>
2025-12-03T18:23:20.441 [DEBUG] [Thread-121476] [transport.py] [_log()] server lang: <none>
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] kex follows: False
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] Compression: none
2025-12-03T18:23:20.442 [DEBUG] [Thread-121476] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:23:20.451 [DEBUG] [Thread-121476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:23:20.451 [DEBUG] [Thread-121476] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:23:20.451 [DEBUG] [Thread-121476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:23:20.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:23:20.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:23:20.453 [DEBUG] [Thread-121476] [transport.py] [_log()] userauth is OK
2025-12-03T18:23:20.454 [DEBUG] [Thread-121476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:23:20.454 [DEBUG] [Thread-121476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:23:20.454 [DEBUG] [Thread-121476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:23:20.454 [DEBUG] [Thread-121476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:23:20.477 [INFO] [Thread-121476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:23:20.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:23:21.070 [DEBUG] [Thread-121476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:23:21.070 [DEBUG] [Thread-121476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:23:21.070 [DEBUG] [Thread-121476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:23:21.110 [DEBUG] [Thread-121476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:23:21.111 [DEBUG] [Thread-121476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:23:21.114 [DEBUG] [Thread-121476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:23:21.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:23:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:23:21.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:23:21.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:23:21.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:23:21.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:23:21.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:23:21.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.682686 -999.00  +19.80  17.61     29   +1.40 1 1 1 1 1   887    0 17.29 -39.26 ----- 17.6 17.6 167.0 26.4 22.9 -28.9 23.1 -28.5 24.2 -27.2 24.4 -28.7
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.682686
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:23:21.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:22:45', tmtdew=21.67, humidity=23.06, cloud=0.0, wind=24.33, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:23:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:23:21.131 [DEBUG] [Thread-121476] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:23:21.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:23:21.214 [DEBUG] [Thread-121479] [transport.py] [_log()] starting thread (client mode): 0xa51d2bf0
2025-12-03T18:23:21.214 [DEBUG] [Thread-121479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:23:21.229 [DEBUG] [Thread-121479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:23:21.229 [INFO] [Thread-121479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:23:21.236 [DEBUG] [Thread-121479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] client lang: <none>
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] server lang: <none>
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] kex follows: False
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] Compression: none
2025-12-03T18:23:21.237 [DEBUG] [Thread-121479] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:23:21.293 [DEBUG] [Thread-121479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:23:21.293 [DEBUG] [Thread-121479] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:23:21.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:23:21.294 [DEBUG] [Thread-121479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:23:21.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:23:21.356 [DEBUG] [Thread-121479] [transport.py] [_log()] userauth is OK
2025-12-03T18:23:21.356 [DEBUG] [Thread-121479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:23:21.356 [DEBUG] [Thread-121479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:23:21.356 [DEBUG] [Thread-121479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:23:21.356 [DEBUG] [Thread-121479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:23:21.377 [INFO] [Thread-121479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:23:21.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:23:21.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:23:22.237 [DEBUG] [Thread-121479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:23:22.237 [DEBUG] [Thread-121479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:23:22.285 [DEBUG] [Thread-121479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:23:22.285 [DEBUG] [Thread-121479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:23:22.294 [DEBUG] [Thread-121479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:23:22.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:23:22.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:23:22.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:23:22.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:23:22.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:23:22.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:23:22.328 [DEBUG] [Thread-121479] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:23:24.402 [DEBUG] [Thread-121481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:39.452 [DEBUG] [Thread-121482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:52.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:23:52.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:23:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:23:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 23, 49), 21.67, 23.06, 0.0, 20.54, 20.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:23:53.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:23:49
2025-12-03T18:23:53.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:23:53.297 [DEBUG] [Thread-121483] [transport.py] [_log()] starting thread (client mode): 0xa2762860
2025-12-03T18:23:53.297 [DEBUG] [Thread-121483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:23:53.317 [DEBUG] [Thread-121483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:23:53.317 [INFO] [Thread-121483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] client lang: <none>
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] server lang: <none>
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] kex follows: False
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] Compression: none
2025-12-03T18:23:53.319 [DEBUG] [Thread-121483] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:23:53.328 [DEBUG] [Thread-121483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:23:53.328 [DEBUG] [Thread-121483] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:23:53.329 [DEBUG] [Thread-121483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:23:53.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:23:53.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:23:53.330 [DEBUG] [Thread-121483] [transport.py] [_log()] userauth is OK
2025-12-03T18:23:53.330 [DEBUG] [Thread-121483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:23:53.330 [DEBUG] [Thread-121483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:23:53.330 [DEBUG] [Thread-121483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:23:53.330 [DEBUG] [Thread-121483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:23:53.349 [INFO] [Thread-121483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:23:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:23:53.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:53.695 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:54.010 [DEBUG] [Thread-121483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:23:54.010 [DEBUG] [Thread-121483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:23:54.011 [DEBUG] [Thread-121483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:23:54.052 [DEBUG] [Thread-121483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:23:54.052 [DEBUG] [Thread-121483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:23:54.054 [DEBUG] [Thread-121483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:23:54.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:23:54.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:23:54.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:23:54.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:23:54.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:23:54.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:23:54.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:23:54.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:23:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:23:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.683033 -999.00  +19.80  17.21     29   +1.40 1 1 1 1 1   887    0 17.92 -40.70 ----- 17.2 17.2 172.6 26.1 22.8 -29.1 23.1 -28.2 24.2 -26.9 24.4 -28.5
2025-12-03T18:23:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:23:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:23:54.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.683033
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:23:54.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:23:49', tmtdew=21.67, humidity=23.06, cloud=0.0, wind=20.54, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:23:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:23:54.079 [DEBUG] [Thread-121483] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:23:54.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:23:54.175 [DEBUG] [Thread-121486] [transport.py] [_log()] starting thread (client mode): 0xa27c9120
2025-12-03T18:23:54.175 [DEBUG] [Thread-121486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:23:54.189 [DEBUG] [Thread-121486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:23:54.189 [INFO] [Thread-121486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:23:54.197 [DEBUG] [Thread-121486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:23:54.197 [DEBUG] [Thread-121486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:23:54.197 [DEBUG] [Thread-121486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] client lang: <none>
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] server lang: <none>
2025-12-03T18:23:54.198 [DEBUG] [Thread-121486] [transport.py] [_log()] kex follows: False
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] Compression: none
2025-12-03T18:23:54.199 [DEBUG] [Thread-121486] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:23:54.254 [DEBUG] [Thread-121486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:23:54.255 [DEBUG] [Thread-121486] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:23:54.255 [DEBUG] [Thread-121486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:23:54.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:23:54.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:23:54.311 [DEBUG] [Thread-121486] [transport.py] [_log()] userauth is OK
2025-12-03T18:23:54.311 [DEBUG] [Thread-121486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:23:54.311 [DEBUG] [Thread-121486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:23:54.311 [DEBUG] [Thread-121486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:23:54.312 [DEBUG] [Thread-121486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:23:54.329 [INFO] [Thread-121486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:23:54.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:23:54.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:23:54.477 [DEBUG] [Thread-121488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:23:55.116 [DEBUG] [Thread-121486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:23:55.116 [DEBUG] [Thread-121486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:23:55.163 [DEBUG] [Thread-121486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:23:55.163 [DEBUG] [Thread-121486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:23:55.172 [DEBUG] [Thread-121486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:23:55.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:23:55.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:23:55.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:23:55.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:23:55.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:23:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:23:55.206 [DEBUG] [Thread-121486] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:24:00.258 [DEBUG] [Thread-121489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:09.517 [DEBUG] [Thread-121490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:24.546 [DEBUG] [Thread-121491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:24:25.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:24:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:24:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 24, 21), 21.65, 23.09, 0.0, 21.9, 20.15, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:24:25.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:24:21
2025-12-03T18:24:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:24:26.219 [DEBUG] [Thread-121492] [transport.py] [_log()] starting thread (client mode): 0xa27539d0
2025-12-03T18:24:26.219 [DEBUG] [Thread-121492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:24:26.239 [DEBUG] [Thread-121492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:24:26.239 [INFO] [Thread-121492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] client lang: <none>
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] server lang: <none>
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] kex follows: False
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:24:26.241 [DEBUG] [Thread-121492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:24:26.242 [DEBUG] [Thread-121492] [transport.py] [_log()] Compression: none
2025-12-03T18:24:26.242 [DEBUG] [Thread-121492] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:24:26.250 [DEBUG] [Thread-121492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:24:26.250 [DEBUG] [Thread-121492] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:24:26.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:24:26.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] userauth is OK
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:24:26.251 [DEBUG] [Thread-121492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:24:26.264 [INFO] [Thread-121492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:24:26.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:24:26.861 [DEBUG] [Thread-121492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:24:26.861 [DEBUG] [Thread-121492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:24:26.862 [DEBUG] [Thread-121492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:24:26.903 [DEBUG] [Thread-121492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:24:26.903 [DEBUG] [Thread-121492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:24:26.905 [DEBUG] [Thread-121492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:24:26.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:24:26.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:24:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:24:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:24:26.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:24:26.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:24:26.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.683381 -999.00  +19.80  22.54     29   +1.40 1 1 1 1 1   887    0 17.42 -37.22 ----- 22.5 22.5 155.4 27.9 22.8 -29.0 23.0 -28.8 24.2 -27.2 24.3 -29.0
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.683381
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:24:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:24:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:24:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:24:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:24:21', tmtdew=21.65, humidity=23.09, cloud=0.0, wind=21.9, temperature=20.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:24:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:24:26.924 [DEBUG] [Thread-121492] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:24:26.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:24:27.010 [DEBUG] [Thread-121495] [transport.py] [_log()] starting thread (client mode): 0xa27624d0
2025-12-03T18:24:27.010 [DEBUG] [Thread-121495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:24:27.027 [DEBUG] [Thread-121495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:24:27.027 [INFO] [Thread-121495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:27.034 [DEBUG] [Thread-121495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] client lang: <none>
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] server lang: <none>
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] kex follows: False
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] Compression: none
2025-12-03T18:24:27.035 [DEBUG] [Thread-121495] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:24:27.090 [DEBUG] [Thread-121495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:24:27.090 [DEBUG] [Thread-121495] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:24:27.090 [DEBUG] [Thread-121495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:24:27.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:24:27.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:24:27.151 [DEBUG] [Thread-121495] [transport.py] [_log()] userauth is OK
2025-12-03T18:24:27.151 [DEBUG] [Thread-121495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:24:27.151 [DEBUG] [Thread-121495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:24:27.151 [DEBUG] [Thread-121495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:24:27.151 [DEBUG] [Thread-121495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:24:27.167 [INFO] [Thread-121495] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:24:27.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:24:27.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:24:28.024 [DEBUG] [Thread-121495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:24:28.024 [DEBUG] [Thread-121495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:24:28.072 [DEBUG] [Thread-121495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:24:28.072 [DEBUG] [Thread-121495] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:24:28.081 [DEBUG] [Thread-121495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:24:28.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:24:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:24:28.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:24:28.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:24:28.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:24:28.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:24:28.115 [DEBUG] [Thread-121495] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:24:39.577 [DEBUG] [Thread-121497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:53.836 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:53.837 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:54.621 [DEBUG] [Thread-121498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:24:58.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:24:58.128 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:24:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:24:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 24, 53), 21.74, 22.97, 0.0, 26.5, 20.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:24:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:24:53
2025-12-03T18:24:58.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:24:59.076 [DEBUG] [Thread-121499] [transport.py] [_log()] starting thread (client mode): 0xa2751fc0
2025-12-03T18:24:59.076 [DEBUG] [Thread-121499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:24:59.094 [DEBUG] [Thread-121499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:24:59.094 [INFO] [Thread-121499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] client lang: <none>
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] server lang: <none>
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] kex follows: False
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] Compression: none
2025-12-03T18:24:59.097 [DEBUG] [Thread-121499] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:24:59.109 [DEBUG] [Thread-121499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:24:59.109 [DEBUG] [Thread-121499] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:24:59.110 [DEBUG] [Thread-121499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:24:59.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:24:59.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:24:59.111 [DEBUG] [Thread-121499] [transport.py] [_log()] userauth is OK
2025-12-03T18:24:59.111 [DEBUG] [Thread-121499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:24:59.111 [DEBUG] [Thread-121499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:24:59.111 [DEBUG] [Thread-121499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:24:59.111 [DEBUG] [Thread-121499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:24:59.130 [INFO] [Thread-121499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:24:59.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:24:59.801 [DEBUG] [Thread-121499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:24:59.801 [DEBUG] [Thread-121499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:24:59.801 [DEBUG] [Thread-121499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:24:59.842 [DEBUG] [Thread-121499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:24:59.842 [DEBUG] [Thread-121499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:24:59.845 [DEBUG] [Thread-121499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:24:59.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:24:59.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:24:59.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:24:59.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:24:59.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:24:59.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:24:59.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:24:59.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.683728 -999.00  +19.80  22.51     29   +1.40 1 1 1 1 1   887    0 17.29 -34.33 ----- 22.5 22.5 162.6 28.1 22.8 -29.0 23.0 -28.3 24.2 -26.9 24.3 -28.2
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.683728
2025-12-03T18:24:59.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:24:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:24:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:24:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:24:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:24:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:24:53', tmtdew=21.74, humidity=22.97, cloud=0.0, wind=26.5, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:24:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:24:59.869 [DEBUG] [Thread-121499] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:24:59.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:24:59.965 [DEBUG] [Thread-121502] [transport.py] [_log()] starting thread (client mode): 0xa2760be0
2025-12-03T18:24:59.965 [DEBUG] [Thread-121502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:24:59.980 [DEBUG] [Thread-121502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:24:59.980 [INFO] [Thread-121502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:24:59.988 [DEBUG] [Thread-121502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] client lang: <none>
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] server lang: <none>
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] kex follows: False
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:24:59.989 [DEBUG] [Thread-121502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:24:59.990 [DEBUG] [Thread-121502] [transport.py] [_log()] Compression: none
2025-12-03T18:24:59.990 [DEBUG] [Thread-121502] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:25:00.047 [DEBUG] [Thread-121502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:25:00.048 [DEBUG] [Thread-121502] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:25:00.048 [DEBUG] [Thread-121502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:25:00.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:25:00.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:25:00.107 [DEBUG] [Thread-121502] [transport.py] [_log()] userauth is OK
2025-12-03T18:25:00.107 [DEBUG] [Thread-121502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:25:00.107 [DEBUG] [Thread-121502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:25:00.107 [DEBUG] [Thread-121502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:25:00.107 [DEBUG] [Thread-121502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:25:00.124 [INFO] [Thread-121502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:25:00.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:25:00.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:25:00.286 [DEBUG] [Thread-121504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:00.989 [DEBUG] [Thread-121502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:25:00.989 [DEBUG] [Thread-121502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:25:01.036 [DEBUG] [Thread-121502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:25:01.037 [DEBUG] [Thread-121502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:25:01.045 [DEBUG] [Thread-121502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:25:01.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:25:01.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:25:01.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:25:01.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:25:01.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:25:01.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:25:01.076 [DEBUG] [Thread-121502] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:25:09.646 [DEBUG] [Thread-121505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:24.691 [DEBUG] [Thread-121506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:31.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:25:31.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:25:31.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:25:31.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 25, 25), 21.74, 22.92, 0.0, 24.19, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:25:31.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:25:25
2025-12-03T18:25:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:25:32.051 [DEBUG] [Thread-121507] [transport.py] [_log()] starting thread (client mode): 0xa517e440
2025-12-03T18:25:32.051 [DEBUG] [Thread-121507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:25:32.065 [DEBUG] [Thread-121507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:25:32.065 [INFO] [Thread-121507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:25:32.067 [DEBUG] [Thread-121507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] client lang: <none>
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] server lang: <none>
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] kex follows: False
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] Compression: none
2025-12-03T18:25:32.068 [DEBUG] [Thread-121507] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:25:32.085 [DEBUG] [Thread-121507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:25:32.086 [DEBUG] [Thread-121507] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:25:32.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:25:32.087 [DEBUG] [Thread-121507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:25:32.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:25:32.089 [DEBUG] [Thread-121507] [transport.py] [_log()] userauth is OK
2025-12-03T18:25:32.089 [DEBUG] [Thread-121507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:25:32.089 [DEBUG] [Thread-121507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:25:32.090 [DEBUG] [Thread-121507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:25:32.090 [DEBUG] [Thread-121507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:25:32.104 [INFO] [Thread-121507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:25:32.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:25:32.748 [DEBUG] [Thread-121507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:25:32.748 [DEBUG] [Thread-121507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:25:32.749 [DEBUG] [Thread-121507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:25:32.789 [DEBUG] [Thread-121507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:25:32.789 [DEBUG] [Thread-121507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:25:32.792 [DEBUG] [Thread-121507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:25:32.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:25:32.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:25:32.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:25:32.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:25:32.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:25:32.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:25:32.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:25:32.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.684075 -999.00  +19.80  18.35     29   +1.30 1 1 1 1 1   887    0 17.51 -35.71 ----- 18.4 18.4 148.5 34.7 22.8 -29.4 23.0 -28.9 24.1 -27.6 24.2 -28.8
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.684075
2025-12-03T18:25:32.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:25:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:25:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:25:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:25:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:25:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:25:25', tmtdew=21.74, humidity=22.92, cloud=0.0, wind=24.19, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:25:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:25:32.812 [DEBUG] [Thread-121507] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:25:32.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:25:32.909 [DEBUG] [Thread-121510] [transport.py] [_log()] starting thread (client mode): 0xa517f6a0
2025-12-03T18:25:32.910 [DEBUG] [Thread-121510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:25:32.924 [DEBUG] [Thread-121510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:25:32.924 [INFO] [Thread-121510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:25:32.932 [DEBUG] [Thread-121510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] client lang: <none>
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] server lang: <none>
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] kex follows: False
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] Compression: none
2025-12-03T18:25:32.933 [DEBUG] [Thread-121510] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:25:32.991 [DEBUG] [Thread-121510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:25:32.991 [DEBUG] [Thread-121510] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:25:32.992 [DEBUG] [Thread-121510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:25:32.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:25:32.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:25:33.047 [DEBUG] [Thread-121510] [transport.py] [_log()] userauth is OK
2025-12-03T18:25:33.047 [DEBUG] [Thread-121510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:25:33.048 [DEBUG] [Thread-121510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:25:33.048 [DEBUG] [Thread-121510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:25:33.048 [DEBUG] [Thread-121510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:25:33.066 [INFO] [Thread-121510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:25:33.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:25:33.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:25:33.875 [DEBUG] [Thread-121510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:25:33.875 [DEBUG] [Thread-121510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:25:33.923 [DEBUG] [Thread-121510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:25:33.923 [DEBUG] [Thread-121510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:25:33.932 [DEBUG] [Thread-121510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:25:33.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:25:33.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:25:33.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:25:33.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:25:33.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:25:33.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:25:33.967 [DEBUG] [Thread-121510] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:25:39.718 [DEBUG] [Thread-121512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:53.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:53.978 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:25:54.763 [DEBUG] [Thread-121513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:00.321 [DEBUG] [Thread-121514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:03.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:26:03.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:26:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:26:04.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 25, 57), 21.81, 22.96, 0.0, 27.51, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:26:04.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:25:57
2025-12-03T18:26:04.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:26:04.934 [DEBUG] [Thread-121515] [transport.py] [_log()] starting thread (client mode): 0xa27cbca0
2025-12-03T18:26:04.934 [DEBUG] [Thread-121515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:26:04.946 [DEBUG] [Thread-121515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:26:04.946 [INFO] [Thread-121515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] client lang: <none>
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] server lang: <none>
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] kex follows: False
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] Compression: none
2025-12-03T18:26:04.949 [DEBUG] [Thread-121515] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:26:04.957 [DEBUG] [Thread-121515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:26:04.958 [DEBUG] [Thread-121515] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:26:04.958 [DEBUG] [Thread-121515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:26:04.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:26:04.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:26:04.959 [DEBUG] [Thread-121515] [transport.py] [_log()] userauth is OK
2025-12-03T18:26:04.959 [DEBUG] [Thread-121515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:26:04.959 [DEBUG] [Thread-121515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:26:04.959 [DEBUG] [Thread-121515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:26:04.959 [DEBUG] [Thread-121515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:26:04.970 [INFO] [Thread-121515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:26:04.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:26:05.555 [DEBUG] [Thread-121515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:26:05.555 [DEBUG] [Thread-121515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:26:05.556 [DEBUG] [Thread-121515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:26:05.596 [DEBUG] [Thread-121515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:26:05.596 [DEBUG] [Thread-121515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:26:05.599 [DEBUG] [Thread-121515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:26:05.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:26:05.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:26:05.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:26:05.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:26:05.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:26:05.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:26:05.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:26:05.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:26:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:26:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.684422 -999.00  +19.70  18.91     29   +1.30 1 1 1 1 1   887    0 17.38 -35.20 ----- 18.9 18.9 143.9 28.6 22.7 -29.0 23.0 -28.4 24.1 -27.2 24.2 -28.6
2025-12-03T18:26:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:26:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:26:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.684422
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:26:05.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:25:57', tmtdew=21.81, humidity=22.96, cloud=0.0, wind=27.51, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:25:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:26:05.623 [DEBUG] [Thread-121515] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:26:05.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:26:05.718 [DEBUG] [Thread-121518] [transport.py] [_log()] starting thread (client mode): 0xa2762170
2025-12-03T18:26:05.718 [DEBUG] [Thread-121518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:26:05.733 [DEBUG] [Thread-121518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:26:05.733 [INFO] [Thread-121518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:26:05.740 [DEBUG] [Thread-121518] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:26:05.741 [DEBUG] [Thread-121518] [transport.py] [_log()] client lang: <none>
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] server lang: <none>
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] kex follows: False
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] Compression: none
2025-12-03T18:26:05.742 [DEBUG] [Thread-121518] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:26:05.799 [DEBUG] [Thread-121518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:26:05.800 [DEBUG] [Thread-121518] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:26:05.800 [DEBUG] [Thread-121518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:26:05.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:26:05.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:26:05.855 [DEBUG] [Thread-121518] [transport.py] [_log()] userauth is OK
2025-12-03T18:26:05.856 [DEBUG] [Thread-121518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:26:05.856 [DEBUG] [Thread-121518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:26:05.856 [DEBUG] [Thread-121518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:26:05.856 [DEBUG] [Thread-121518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:26:05.875 [INFO] [Thread-121518] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:26:05.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:26:05.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:26:06.742 [DEBUG] [Thread-121518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:26:06.742 [DEBUG] [Thread-121518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:26:06.791 [DEBUG] [Thread-121518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:26:06.791 [DEBUG] [Thread-121518] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:26:06.800 [DEBUG] [Thread-121518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:26:06.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:26:06.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:26:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:26:06.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:26:06.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:26:06.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:26:06.833 [DEBUG] [Thread-121518] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:26:09.793 [DEBUG] [Thread-121520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:24.834 [DEBUG] [Thread-121521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:26:36.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:26:36.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:26:37.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 26, 29), 21.7, 23.12, 0.0, 30.31, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:26:37.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:26:29
2025-12-03T18:26:37.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:26:37.806 [DEBUG] [Thread-121522] [transport.py] [_log()] starting thread (client mode): 0xa517db10
2025-12-03T18:26:37.807 [DEBUG] [Thread-121522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:26:37.822 [DEBUG] [Thread-121522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:26:37.822 [INFO] [Thread-121522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:26:37.825 [DEBUG] [Thread-121522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] client lang: <none>
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] server lang: <none>
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] kex follows: False
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] Compression: none
2025-12-03T18:26:37.826 [DEBUG] [Thread-121522] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:26:37.842 [DEBUG] [Thread-121522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:26:37.842 [DEBUG] [Thread-121522] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:26:37.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:26:37.843 [DEBUG] [Thread-121522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:26:37.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:26:37.845 [DEBUG] [Thread-121522] [transport.py] [_log()] userauth is OK
2025-12-03T18:26:37.845 [DEBUG] [Thread-121522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:26:37.845 [DEBUG] [Thread-121522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:26:37.845 [DEBUG] [Thread-121522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:26:37.845 [DEBUG] [Thread-121522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:26:37.869 [INFO] [Thread-121522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:26:37.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:26:38.450 [DEBUG] [Thread-121522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:26:38.451 [DEBUG] [Thread-121522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:26:38.451 [DEBUG] [Thread-121522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:26:38.492 [DEBUG] [Thread-121522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:26:38.492 [DEBUG] [Thread-121522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:26:38.495 [DEBUG] [Thread-121522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:26:38.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:26:38.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:26:38.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:26:38.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:26:38.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:26:38.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:26:38.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:26:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.684770 -999.00  +19.70  22.88     29   +1.20 1 1 1 1 1   887    0 18.11 -34.63 ----- 22.9 22.9 154.6 32.1 22.7 -29.4 23.0 -28.5 24.0 -27.8 24.1 -28.8
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.684770
2025-12-03T18:26:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:26:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:26:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:26:38.515 [DEBUG] [Thread-121522] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:26:38.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:26:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:26:38.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:26:29', tmtdew=21.7, humidity=23.12, cloud=0.0, wind=30.31, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:26:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:26:38.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:26:38.612 [DEBUG] [Thread-121525] [transport.py] [_log()] starting thread (client mode): 0xa517f8e0
2025-12-03T18:26:38.612 [DEBUG] [Thread-121525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:26:38.626 [DEBUG] [Thread-121525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:26:38.626 [INFO] [Thread-121525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:26:38.634 [DEBUG] [Thread-121525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:26:38.634 [DEBUG] [Thread-121525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:26:38.635 [DEBUG] [Thread-121525] [transport.py] [_log()] client lang: <none>
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] server lang: <none>
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] kex follows: False
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:26:38.636 [DEBUG] [Thread-121525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:26:38.637 [DEBUG] [Thread-121525] [transport.py] [_log()] Compression: none
2025-12-03T18:26:38.637 [DEBUG] [Thread-121525] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:26:38.691 [DEBUG] [Thread-121525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:26:38.692 [DEBUG] [Thread-121525] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:26:38.693 [DEBUG] [Thread-121525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:26:38.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:26:38.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:26:38.748 [DEBUG] [Thread-121525] [transport.py] [_log()] userauth is OK
2025-12-03T18:26:38.748 [DEBUG] [Thread-121525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:26:38.748 [DEBUG] [Thread-121525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:26:38.748 [DEBUG] [Thread-121525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:26:38.748 [DEBUG] [Thread-121525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:26:38.767 [INFO] [Thread-121525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:26:38.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:26:38.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:26:39.606 [DEBUG] [Thread-121525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:26:39.606 [DEBUG] [Thread-121525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:26:39.654 [DEBUG] [Thread-121525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:26:39.654 [DEBUG] [Thread-121525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:26:39.663 [DEBUG] [Thread-121525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:26:39.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:26:39.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:26:39.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:26:39.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:26:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:26:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:26:39.697 [DEBUG] [Thread-121525] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:26:39.866 [DEBUG] [Thread-121527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:54.121 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:54.123 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:26:54.906 [DEBUG] [Thread-121528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:00.350 [DEBUG] [Thread-121529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:09.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:27:09.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:27:09.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:27:09.930 [DEBUG] [Thread-121530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:10.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 27, 1), 21.65, 23.21, 0.0, 27.23, 19.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:27:10.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:27:01
2025-12-03T18:27:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:27:10.677 [DEBUG] [Thread-121531] [transport.py] [_log()] starting thread (client mode): 0xa517d300
2025-12-03T18:27:10.677 [DEBUG] [Thread-121531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:27:10.690 [DEBUG] [Thread-121531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:27:10.691 [INFO] [Thread-121531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] client lang: <none>
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] server lang: <none>
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] kex follows: False
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] Compression: none
2025-12-03T18:27:10.692 [DEBUG] [Thread-121531] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:27:10.704 [DEBUG] [Thread-121531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:27:10.704 [DEBUG] [Thread-121531] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:27:10.704 [DEBUG] [Thread-121531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:27:10.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:27:10.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:27:10.706 [DEBUG] [Thread-121531] [transport.py] [_log()] userauth is OK
2025-12-03T18:27:10.706 [DEBUG] [Thread-121531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:27:10.706 [DEBUG] [Thread-121531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:27:10.706 [DEBUG] [Thread-121531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:27:10.706 [DEBUG] [Thread-121531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:27:10.720 [INFO] [Thread-121531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:27:10.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:27:11.325 [DEBUG] [Thread-121531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:27:11.325 [DEBUG] [Thread-121531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:27:11.326 [DEBUG] [Thread-121531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:27:11.366 [DEBUG] [Thread-121531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:27:11.366 [DEBUG] [Thread-121531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:27:11.369 [DEBUG] [Thread-121531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:27:11.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:27:11.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:27:11.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:27:11.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:27:11.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:27:11.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:27:11.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.685464 -999.00  +19.70  25.35     29   +1.20 1 1 1 1 1   887    0 17.80 -33.94 ----- 25.4 25.4 156.7 29.4 22.6 -29.4 22.8 -29.2 23.9 -27.3 24.0 -29.0
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.685464
2025-12-03T18:27:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:27:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:27:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:27:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:27:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:27:11.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:27:01', tmtdew=21.65, humidity=23.21, cloud=0.0, wind=27.23, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:27:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:27:11.379 [DEBUG] [Thread-121531] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:27:11.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:27:11.468 [DEBUG] [Thread-121534] [transport.py] [_log()] starting thread (client mode): 0xa27262f0
2025-12-03T18:27:11.468 [DEBUG] [Thread-121534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:27:11.483 [DEBUG] [Thread-121534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:27:11.483 [INFO] [Thread-121534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:27:11.490 [DEBUG] [Thread-121534] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] client lang: <none>
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] server lang: <none>
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] kex follows: False
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] Compression: none
2025-12-03T18:27:11.491 [DEBUG] [Thread-121534] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:27:11.548 [DEBUG] [Thread-121534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:27:11.549 [DEBUG] [Thread-121534] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:27:11.549 [DEBUG] [Thread-121534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:27:11.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:27:11.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:27:11.610 [DEBUG] [Thread-121534] [transport.py] [_log()] userauth is OK
2025-12-03T18:27:11.610 [DEBUG] [Thread-121534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:27:11.610 [DEBUG] [Thread-121534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:27:11.610 [DEBUG] [Thread-121534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:27:11.610 [DEBUG] [Thread-121534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:27:11.632 [INFO] [Thread-121534] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:27:11.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:27:11.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:27:12.421 [DEBUG] [Thread-121534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:27:12.421 [DEBUG] [Thread-121534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:27:12.469 [DEBUG] [Thread-121534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:27:12.469 [DEBUG] [Thread-121534] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:27:12.478 [DEBUG] [Thread-121534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:27:12.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:27:12.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:27:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:27:12.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:27:12.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:27:12.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:27:12.515 [DEBUG] [Thread-121534] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:27:24.960 [DEBUG] [Thread-121536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:39.999 [DEBUG] [Thread-121537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:27:42.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:27:42.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:27:43.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 27, 33), 22.24, 22.31, 0.0, 28.55, 20.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:27:43.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:27:33
2025-12-03T18:27:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:27:43.444 [DEBUG] [Thread-121538] [transport.py] [_log()] starting thread (client mode): 0xa2726800
2025-12-03T18:27:43.444 [DEBUG] [Thread-121538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:27:43.464 [DEBUG] [Thread-121538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:27:43.464 [INFO] [Thread-121538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] client lang: <none>
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] server lang: <none>
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] kex follows: False
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] Compression: none
2025-12-03T18:27:43.467 [DEBUG] [Thread-121538] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:27:43.483 [DEBUG] [Thread-121538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:27:43.484 [DEBUG] [Thread-121538] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:27:43.484 [DEBUG] [Thread-121538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:27:43.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:27:43.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:27:43.486 [DEBUG] [Thread-121538] [transport.py] [_log()] userauth is OK
2025-12-03T18:27:43.486 [DEBUG] [Thread-121538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:27:43.486 [DEBUG] [Thread-121538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:27:43.486 [DEBUG] [Thread-121538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:27:43.486 [DEBUG] [Thread-121538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:27:43.506 [INFO] [Thread-121538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:27:43.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:27:44.110 [DEBUG] [Thread-121538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:27:44.110 [DEBUG] [Thread-121538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:27:44.111 [DEBUG] [Thread-121538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:27:44.152 [DEBUG] [Thread-121538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:27:44.152 [DEBUG] [Thread-121538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:27:44.154 [DEBUG] [Thread-121538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:27:44.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:27:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:27:44.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:27:44.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:27:44.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:27:44.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:27:44.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:27:44.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:27:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:27:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.685811 -999.00  +19.60  20.06     29   +1.20 1 1 1 1 1   887    0 17.05 -34.01 ----- 20.1 20.1 151.2 30.6 22.5 -29.0 22.8 -28.4 23.9 -27.2 24.0 -28.8
2025-12-03T18:27:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:27:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:27:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.685811
2025-12-03T18:27:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:27:44.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:27:33', tmtdew=22.24, humidity=22.31, cloud=0.0, wind=28.55, temperature=20.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:27:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:27:44.180 [DEBUG] [Thread-121538] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:27:44.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:27:44.277 [DEBUG] [Thread-121541] [transport.py] [_log()] starting thread (client mode): 0xa2726620
2025-12-03T18:27:44.277 [DEBUG] [Thread-121541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:27:44.297 [DEBUG] [Thread-121541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:27:44.297 [INFO] [Thread-121541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:27:44.304 [DEBUG] [Thread-121541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:27:44.305 [DEBUG] [Thread-121541] [transport.py] [_log()] client lang: <none>
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] server lang: <none>
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] kex follows: False
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] Compression: none
2025-12-03T18:27:44.306 [DEBUG] [Thread-121541] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:27:44.362 [DEBUG] [Thread-121541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:27:44.363 [DEBUG] [Thread-121541] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:27:44.363 [DEBUG] [Thread-121541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:27:44.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:27:44.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:27:44.423 [DEBUG] [Thread-121541] [transport.py] [_log()] userauth is OK
2025-12-03T18:27:44.423 [DEBUG] [Thread-121541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:27:44.423 [DEBUG] [Thread-121541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:27:44.423 [DEBUG] [Thread-121541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:27:44.424 [DEBUG] [Thread-121541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:27:44.443 [INFO] [Thread-121541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:27:44.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:27:44.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:27:45.294 [DEBUG] [Thread-121541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:27:45.294 [DEBUG] [Thread-121541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:27:45.342 [DEBUG] [Thread-121541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:27:45.342 [DEBUG] [Thread-121541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:27:45.351 [DEBUG] [Thread-121541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:27:45.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:27:45.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:27:45.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:27:45.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:27:45.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:27:45.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:27:45.385 [DEBUG] [Thread-121541] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:27:54.270 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:54.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:27:55.027 [DEBUG] [Thread-121543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:00.386 [DEBUG] [Thread-121544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:10.081 [DEBUG] [Thread-121545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:15.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:28:15.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:28:15.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:28:16.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 28, 5), 21.73, 23.07, 0.0, 28.71, 19.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:28:16.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:28:05
2025-12-03T18:28:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:28:16.371 [DEBUG] [Thread-121546] [transport.py] [_log()] starting thread (client mode): 0xa517f820
2025-12-03T18:28:16.371 [DEBUG] [Thread-121546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:28:16.391 [DEBUG] [Thread-121546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:28:16.391 [INFO] [Thread-121546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] client lang: <none>
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] server lang: <none>
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] kex follows: False
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] Compression: none
2025-12-03T18:28:16.395 [DEBUG] [Thread-121546] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:28:16.410 [DEBUG] [Thread-121546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:28:16.410 [DEBUG] [Thread-121546] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:28:16.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:28:16.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:28:16.410 [DEBUG] [Thread-121546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:28:16.411 [DEBUG] [Thread-121546] [transport.py] [_log()] userauth is OK
2025-12-03T18:28:16.411 [DEBUG] [Thread-121546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:28:16.411 [DEBUG] [Thread-121546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:28:16.411 [DEBUG] [Thread-121546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:28:16.411 [DEBUG] [Thread-121546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:28:16.424 [INFO] [Thread-121546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:28:16.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:28:17.001 [DEBUG] [Thread-121546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:28:17.001 [DEBUG] [Thread-121546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:28:17.001 [DEBUG] [Thread-121546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:28:17.043 [DEBUG] [Thread-121546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:28:17.043 [DEBUG] [Thread-121546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:28:17.045 [DEBUG] [Thread-121546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:28:17.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:28:17.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:28:17.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:28:17.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:28:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:28:17.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:28:17.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:28:17.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:28:17.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:28:17.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.686158 -999.00  +19.60  22.10     29   +1.20 1 1 1 1 1   887    0 17.23 -33.32 ----- 22.1 22.1 147.2 25.5 22.5 -29.4 22.8 -28.3 23.9 -27.2 23.9 -29.3
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.686158
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:28:17.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:28:05', tmtdew=21.73, humidity=23.07, cloud=0.0, wind=28.71, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:28:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:28:17.064 [DEBUG] [Thread-121546] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:28:17.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:28:17.148 [DEBUG] [Thread-121549] [transport.py] [_log()] starting thread (client mode): 0xa517e470
2025-12-03T18:28:17.148 [DEBUG] [Thread-121549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:28:17.163 [DEBUG] [Thread-121549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:28:17.163 [INFO] [Thread-121549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] client lang: <none>
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] server lang: <none>
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] kex follows: False
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:28:17.171 [DEBUG] [Thread-121549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:28:17.172 [DEBUG] [Thread-121549] [transport.py] [_log()] Compression: none
2025-12-03T18:28:17.172 [DEBUG] [Thread-121549] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:28:17.226 [DEBUG] [Thread-121549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:28:17.226 [DEBUG] [Thread-121549] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:28:17.226 [DEBUG] [Thread-121549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:28:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:28:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:28:17.283 [DEBUG] [Thread-121549] [transport.py] [_log()] userauth is OK
2025-12-03T18:28:17.283 [DEBUG] [Thread-121549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:28:17.283 [DEBUG] [Thread-121549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:28:17.283 [DEBUG] [Thread-121549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:28:17.283 [DEBUG] [Thread-121549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:28:17.296 [INFO] [Thread-121549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:28:17.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:28:17.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:28:18.099 [DEBUG] [Thread-121549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:28:18.099 [DEBUG] [Thread-121549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:28:18.146 [DEBUG] [Thread-121549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:28:18.146 [DEBUG] [Thread-121549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:28:18.154 [DEBUG] [Thread-121549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:28:18.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:28:18.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:28:18.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:28:18.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:28:18.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:28:18.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:28:18.186 [DEBUG] [Thread-121549] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:28:25.114 [DEBUG] [Thread-121551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:40.160 [DEBUG] [Thread-121552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:28:48.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:28:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:28:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 28, 37), 21.84, 23.01, 0.0, 28.57, 20.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:28:48.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:28:37
2025-12-03T18:28:48.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:28:49.144 [DEBUG] [Thread-121553] [transport.py] [_log()] starting thread (client mode): 0xa2724ca0
2025-12-03T18:28:49.144 [DEBUG] [Thread-121553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:28:49.156 [DEBUG] [Thread-121553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:28:49.156 [INFO] [Thread-121553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] client lang: <none>
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] server lang: <none>
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] kex follows: False
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] Compression: none
2025-12-03T18:28:49.158 [DEBUG] [Thread-121553] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:28:49.170 [DEBUG] [Thread-121553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:28:49.170 [DEBUG] [Thread-121553] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:28:49.170 [DEBUG] [Thread-121553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:28:49.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:28:49.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:28:49.171 [DEBUG] [Thread-121553] [transport.py] [_log()] userauth is OK
2025-12-03T18:28:49.172 [DEBUG] [Thread-121553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:28:49.172 [DEBUG] [Thread-121553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:28:49.172 [DEBUG] [Thread-121553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:28:49.172 [DEBUG] [Thread-121553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:28:49.183 [INFO] [Thread-121553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:28:49.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:28:49.810 [DEBUG] [Thread-121553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:28:49.811 [DEBUG] [Thread-121553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:28:49.811 [DEBUG] [Thread-121553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:28:49.852 [DEBUG] [Thread-121553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:28:49.852 [DEBUG] [Thread-121553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:28:49.854 [DEBUG] [Thread-121553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:28:49.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:28:49.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:28:49.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:28:49.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:28:49.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:28:49.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:28:49.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.686506 -999.00  +19.60  18.89     29   +1.20 1 1 1 1 1   887    0 17.65 -32.39 ----- 18.9 18.9 162.8 24.7 22.5 -29.3 22.8 -28.2 23.8 -26.9 24.0 -28.6
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:28:49.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.686506
2025-12-03T18:28:49.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:28:49.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:28:49.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:28:49.873 [DEBUG] [Thread-121553] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:28:49.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:28:49.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:28:49.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:28:37', tmtdew=21.84, humidity=23.01, cloud=0.0, wind=28.57, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:28:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:28:49.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:28:49.970 [DEBUG] [Thread-121556] [transport.py] [_log()] starting thread (client mode): 0xa51d02b0
2025-12-03T18:28:49.970 [DEBUG] [Thread-121556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:28:49.985 [DEBUG] [Thread-121556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:28:49.985 [INFO] [Thread-121556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:28:49.992 [DEBUG] [Thread-121556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:28:49.992 [DEBUG] [Thread-121556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:28:49.992 [DEBUG] [Thread-121556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:28:49.992 [DEBUG] [Thread-121556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:49.992 [DEBUG] [Thread-121556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] client lang: <none>
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] server lang: <none>
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] kex follows: False
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] Compression: none
2025-12-03T18:28:49.993 [DEBUG] [Thread-121556] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:28:50.050 [DEBUG] [Thread-121556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:28:50.051 [DEBUG] [Thread-121556] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:28:50.051 [DEBUG] [Thread-121556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:28:50.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:28:50.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:28:50.107 [DEBUG] [Thread-121556] [transport.py] [_log()] userauth is OK
2025-12-03T18:28:50.107 [DEBUG] [Thread-121556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:28:50.107 [DEBUG] [Thread-121556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:28:50.108 [DEBUG] [Thread-121556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:28:50.108 [DEBUG] [Thread-121556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:28:50.127 [INFO] [Thread-121556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:28:50.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:28:50.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:28:50.944 [DEBUG] [Thread-121556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:28:50.945 [DEBUG] [Thread-121556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:28:50.993 [DEBUG] [Thread-121556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:28:50.993 [DEBUG] [Thread-121556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:28:51.001 [DEBUG] [Thread-121556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:28:51.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:28:51.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:28:51.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:28:51.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:28:51.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:28:51.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:28:51.035 [DEBUG] [Thread-121556] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:28:54.412 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:54.412 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:28:55.187 [DEBUG] [Thread-121558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:00.421 [DEBUG] [Thread-121559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:10.219 [DEBUG] [Thread-121560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:29:21.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:29:21.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:29:21.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 29, 10), 21.86, 22.97, 0.0, 28.16, 20.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:29:21.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:29:10
2025-12-03T18:29:21.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:29:22.032 [DEBUG] [Thread-121561] [transport.py] [_log()] starting thread (client mode): 0xa517f0d0
2025-12-03T18:29:22.032 [DEBUG] [Thread-121561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:29:22.052 [DEBUG] [Thread-121561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:29:22.052 [INFO] [Thread-121561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:22.055 [DEBUG] [Thread-121561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] client lang: <none>
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] server lang: <none>
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] kex follows: False
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:29:22.056 [DEBUG] [Thread-121561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:29:22.057 [DEBUG] [Thread-121561] [transport.py] [_log()] Compression: none
2025-12-03T18:29:22.057 [DEBUG] [Thread-121561] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:29:22.064 [DEBUG] [Thread-121561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:29:22.065 [DEBUG] [Thread-121561] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:29:22.065 [DEBUG] [Thread-121561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:29:22.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:29:22.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:29:22.066 [DEBUG] [Thread-121561] [transport.py] [_log()] userauth is OK
2025-12-03T18:29:22.066 [DEBUG] [Thread-121561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:29:22.066 [DEBUG] [Thread-121561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:29:22.066 [DEBUG] [Thread-121561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:29:22.066 [DEBUG] [Thread-121561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:29:22.080 [INFO] [Thread-121561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:29:22.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:29:22.676 [DEBUG] [Thread-121561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:29:22.676 [DEBUG] [Thread-121561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:29:22.677 [DEBUG] [Thread-121561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:29:22.717 [DEBUG] [Thread-121561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:29:22.717 [DEBUG] [Thread-121561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:29:22.719 [DEBUG] [Thread-121561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:29:22.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:29:22.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:29:22.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:29:22.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:29:22.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:29:22.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:29:22.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:29:22.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:29:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:29:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.686853 -999.00  +19.70  20.20     29   +1.20 1 1 1 1 1   887    0 17.47 -34.22 ----- 20.2 20.2 161.0 24.8 22.4 -29.0 22.8 -28.1 23.8 -26.8 23.9 -28.8
2025-12-03T18:29:22.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:29:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:29:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.686853
2025-12-03T18:29:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:29:22.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:29:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:29:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:29:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:29:22.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:29:10', tmtdew=21.86, humidity=22.97, cloud=0.0, wind=28.16, temperature=20.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:29:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:29:22.736 [DEBUG] [Thread-121561] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:29:22.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:29:22.837 [DEBUG] [Thread-121564] [transport.py] [_log()] starting thread (client mode): 0xa517e380
2025-12-03T18:29:22.837 [DEBUG] [Thread-121564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:29:22.855 [DEBUG] [Thread-121564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:29:22.856 [INFO] [Thread-121564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:29:22.863 [DEBUG] [Thread-121564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:29:22.863 [DEBUG] [Thread-121564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:29:22.863 [DEBUG] [Thread-121564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:29:22.863 [DEBUG] [Thread-121564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] client lang: <none>
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] server lang: <none>
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] kex follows: False
2025-12-03T18:29:22.864 [DEBUG] [Thread-121564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] Compression: none
2025-12-03T18:29:22.865 [DEBUG] [Thread-121564] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:29:22.923 [DEBUG] [Thread-121564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:29:22.924 [DEBUG] [Thread-121564] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:29:22.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:29:22.925 [DEBUG] [Thread-121564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:29:22.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:29:22.980 [DEBUG] [Thread-121564] [transport.py] [_log()] userauth is OK
2025-12-03T18:29:22.980 [DEBUG] [Thread-121564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:29:22.980 [DEBUG] [Thread-121564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:29:22.980 [DEBUG] [Thread-121564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:29:22.980 [DEBUG] [Thread-121564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:29:22.999 [INFO] [Thread-121564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:29:22.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:29:23.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:29:23.875 [DEBUG] [Thread-121564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:29:23.875 [DEBUG] [Thread-121564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:29:23.927 [DEBUG] [Thread-121564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:29:23.927 [DEBUG] [Thread-121564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:29:23.937 [DEBUG] [Thread-121564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:29:23.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:29:23.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:29:23.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:29:23.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:29:23.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:29:23.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:29:23.974 [DEBUG] [Thread-121564] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:29:25.243 [DEBUG] [Thread-121566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:40.291 [DEBUG] [Thread-121567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:53.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:29:53.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:29:53.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:29:54.553 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:54.554 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 29, 42), 21.72, 23.11, 0.0, 26.47, 19.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:29:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:29:42
2025-12-03T18:29:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:29:54.906 [DEBUG] [Thread-121568] [transport.py] [_log()] starting thread (client mode): 0xa2726500
2025-12-03T18:29:54.906 [DEBUG] [Thread-121568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:29:54.922 [DEBUG] [Thread-121568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:29:54.922 [INFO] [Thread-121568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] client lang: <none>
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] server lang: <none>
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] kex follows: False
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] Compression: none
2025-12-03T18:29:54.924 [DEBUG] [Thread-121568] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:29:54.932 [DEBUG] [Thread-121568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:29:54.932 [DEBUG] [Thread-121568] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:29:54.932 [DEBUG] [Thread-121568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:29:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:29:54.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:29:54.933 [DEBUG] [Thread-121568] [transport.py] [_log()] userauth is OK
2025-12-03T18:29:54.933 [DEBUG] [Thread-121568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:29:54.933 [DEBUG] [Thread-121568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:29:54.933 [DEBUG] [Thread-121568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:29:54.933 [DEBUG] [Thread-121568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:29:54.941 [INFO] [Thread-121568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:29:54.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:29:55.321 [DEBUG] [Thread-121570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:29:55.583 [DEBUG] [Thread-121568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:29:55.583 [DEBUG] [Thread-121568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:29:55.584 [DEBUG] [Thread-121568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:29:55.625 [DEBUG] [Thread-121568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:29:55.625 [DEBUG] [Thread-121568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:29:55.627 [DEBUG] [Thread-121568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:29:55.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:29:55.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:29:55.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:29:55.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:29:55.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:29:55.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:29:55.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.687200 -999.00  +19.70  16.01     29   +1.20 1 1 1 1 1   887    0 17.10 -32.14 ----- 16.0 16.0 157.3 25.3 22.5 -28.9 22.8 -28.8 23.8 -26.6 23.9 -29.3
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:29:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.687200
2025-12-03T18:29:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:29:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:29:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:29:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:29:55.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:29:55.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:29:42', tmtdew=21.72, humidity=23.11, cloud=0.0, wind=26.47, temperature=19.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:29:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:29:55.645 [DEBUG] [Thread-121568] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:29:55.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:29:55.740 [DEBUG] [Thread-121572] [transport.py] [_log()] starting thread (client mode): 0xa27244f0
2025-12-03T18:29:55.740 [DEBUG] [Thread-121572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:29:55.755 [DEBUG] [Thread-121572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:29:55.756 [INFO] [Thread-121572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:29:55.763 [DEBUG] [Thread-121572] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:29:55.763 [DEBUG] [Thread-121572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:29:55.763 [DEBUG] [Thread-121572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:29:55.763 [DEBUG] [Thread-121572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] client lang: <none>
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] server lang: <none>
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] kex follows: False
2025-12-03T18:29:55.764 [DEBUG] [Thread-121572] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] Compression: none
2025-12-03T18:29:55.765 [DEBUG] [Thread-121572] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:29:55.823 [DEBUG] [Thread-121572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:29:55.824 [DEBUG] [Thread-121572] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:29:55.824 [DEBUG] [Thread-121572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:29:55.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:29:55.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:29:55.883 [DEBUG] [Thread-121572] [transport.py] [_log()] userauth is OK
2025-12-03T18:29:55.883 [DEBUG] [Thread-121572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:29:55.884 [DEBUG] [Thread-121572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:29:55.884 [DEBUG] [Thread-121572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:29:55.884 [DEBUG] [Thread-121572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:29:55.903 [INFO] [Thread-121572] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:29:55.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:29:55.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:29:56.709 [DEBUG] [Thread-121572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:29:56.709 [DEBUG] [Thread-121572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:29:56.757 [DEBUG] [Thread-121572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:29:56.757 [DEBUG] [Thread-121572] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:29:56.766 [DEBUG] [Thread-121572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:29:56.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:29:56.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:29:56.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:29:56.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:29:56.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:29:56.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:29:56.801 [DEBUG] [Thread-121572] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:30:00.468 [DEBUG] [Thread-121574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:10.352 [DEBUG] [Thread-121575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:25.394 [DEBUG] [Thread-121576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:26.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:30:26.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:30:26.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:30:27.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 30, 14), 21.75, 23.04, 0.0, 26.84, 19.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:30:27.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:30:14
2025-12-03T18:30:27.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:30:27.746 [DEBUG] [Thread-121577] [transport.py] [_log()] starting thread (client mode): 0xa517fa90
2025-12-03T18:30:27.746 [DEBUG] [Thread-121577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:30:27.766 [DEBUG] [Thread-121577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:30:27.766 [INFO] [Thread-121577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:30:27.767 [DEBUG] [Thread-121577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:30:27.767 [DEBUG] [Thread-121577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:30:27.767 [DEBUG] [Thread-121577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:30:27.767 [DEBUG] [Thread-121577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] client lang: <none>
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] server lang: <none>
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] kex follows: False
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:30:27.768 [DEBUG] [Thread-121577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:30:27.769 [DEBUG] [Thread-121577] [transport.py] [_log()] Compression: none
2025-12-03T18:30:27.769 [DEBUG] [Thread-121577] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:30:27.780 [DEBUG] [Thread-121577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:30:27.780 [DEBUG] [Thread-121577] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:30:27.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:30:27.782 [DEBUG] [Thread-121577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:30:27.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:30:27.784 [DEBUG] [Thread-121577] [transport.py] [_log()] userauth is OK
2025-12-03T18:30:27.784 [DEBUG] [Thread-121577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:30:27.784 [DEBUG] [Thread-121577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:30:27.784 [DEBUG] [Thread-121577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:30:27.784 [DEBUG] [Thread-121577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:30:27.803 [INFO] [Thread-121577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:30:27.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:30:28.387 [DEBUG] [Thread-121577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:30:28.387 [DEBUG] [Thread-121577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:30:28.387 [DEBUG] [Thread-121577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:30:28.428 [DEBUG] [Thread-121577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:30:28.428 [DEBUG] [Thread-121577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:30:28.431 [DEBUG] [Thread-121577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:30:28.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:30:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:30:28.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:30:28.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:30:28.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:30:28.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:30:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:30:28.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.687547 -999.00  +19.70  17.73     29   +1.20 1 1 1 1 1   887    0 17.45 -29.01 ----- 17.7 17.7 164.0 22.9 22.4 -29.1 22.7 -28.2 23.8 -27.1 23.9 -28.8
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.687547
2025-12-03T18:30:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:30:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:30:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:30:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:30:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:30:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:30:14', tmtdew=21.75, humidity=23.04, cloud=0.0, wind=26.84, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:30:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:30:28.456 [DEBUG] [Thread-121577] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:30:28.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:30:28.550 [DEBUG] [Thread-121580] [transport.py] [_log()] starting thread (client mode): 0xa51d2560
2025-12-03T18:30:28.551 [DEBUG] [Thread-121580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:30:28.565 [DEBUG] [Thread-121580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:30:28.565 [INFO] [Thread-121580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:30:28.573 [DEBUG] [Thread-121580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] client lang: <none>
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] server lang: <none>
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] kex follows: False
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:30:28.574 [DEBUG] [Thread-121580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:30:28.575 [DEBUG] [Thread-121580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:30:28.575 [DEBUG] [Thread-121580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:30:28.575 [DEBUG] [Thread-121580] [transport.py] [_log()] Compression: none
2025-12-03T18:30:28.575 [DEBUG] [Thread-121580] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:30:28.632 [DEBUG] [Thread-121580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:30:28.632 [DEBUG] [Thread-121580] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:30:28.633 [DEBUG] [Thread-121580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:30:28.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:30:28.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:30:28.687 [DEBUG] [Thread-121580] [transport.py] [_log()] userauth is OK
2025-12-03T18:30:28.688 [DEBUG] [Thread-121580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:30:28.688 [DEBUG] [Thread-121580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:30:28.688 [DEBUG] [Thread-121580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:30:28.688 [DEBUG] [Thread-121580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:30:28.708 [INFO] [Thread-121580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:30:28.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:30:28.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:30:29.524 [DEBUG] [Thread-121580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:30:29.525 [DEBUG] [Thread-121580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:30:29.573 [DEBUG] [Thread-121580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:30:29.573 [DEBUG] [Thread-121580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:30:29.582 [DEBUG] [Thread-121580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:30:29.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:30:29.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:30:29.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:30:29.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:30:29.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:30:29.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:30:29.615 [DEBUG] [Thread-121580] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:30:40.423 [DEBUG] [Thread-121582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:54.699 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:54.700 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:55.461 [DEBUG] [Thread-121583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:30:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:30:59.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:30:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:31:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 30, 46), 21.61, 23.17, 0.0, 28.53, 19.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:31:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:30:46
2025-12-03T18:31:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:31:00.497 [DEBUG] [Thread-121584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:00.570 [DEBUG] [Thread-121585] [transport.py] [_log()] starting thread (client mode): 0xa517fe50
2025-12-03T18:31:00.570 [DEBUG] [Thread-121585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:31:00.584 [DEBUG] [Thread-121585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:31:00.584 [INFO] [Thread-121585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] client lang: <none>
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] server lang: <none>
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] kex follows: False
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:31:00.586 [DEBUG] [Thread-121585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:31:00.587 [DEBUG] [Thread-121585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:31:00.587 [DEBUG] [Thread-121585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:31:00.587 [DEBUG] [Thread-121585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:31:00.587 [DEBUG] [Thread-121585] [transport.py] [_log()] Compression: none
2025-12-03T18:31:00.587 [DEBUG] [Thread-121585] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:31:00.604 [DEBUG] [Thread-121585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:31:00.604 [DEBUG] [Thread-121585] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:31:00.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:31:00.606 [DEBUG] [Thread-121585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:31:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:31:00.607 [DEBUG] [Thread-121585] [transport.py] [_log()] userauth is OK
2025-12-03T18:31:00.608 [DEBUG] [Thread-121585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:31:00.608 [DEBUG] [Thread-121585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:31:00.608 [DEBUG] [Thread-121585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:31:00.608 [DEBUG] [Thread-121585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:31:00.631 [INFO] [Thread-121585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:31:00.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:31:01.247 [DEBUG] [Thread-121585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:31:01.247 [DEBUG] [Thread-121585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:31:01.247 [DEBUG] [Thread-121585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:31:01.288 [DEBUG] [Thread-121585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:31:01.288 [DEBUG] [Thread-121585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:31:01.291 [DEBUG] [Thread-121585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:31:01.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:31:01.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:31:01.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:31:01.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:31:01.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:31:01.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:31:01.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:31:01.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.687894 -999.00  +19.60  20.70     29   +1.20 1 1 1 1 1   887    0 17.46 -24.36 ----- 20.7 20.7 156.4 23.0 22.4 -28.7 22.7 -28.2 23.7 -26.5 23.9 -28.7
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.687894
2025-12-03T18:31:01.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:31:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:31:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:31:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:31:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:31:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:30:46', tmtdew=21.61, humidity=23.17, cloud=0.0, wind=28.53, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:30:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:31:01.315 [DEBUG] [Thread-121585] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:31:01.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:31:01.411 [DEBUG] [Thread-121588] [transport.py] [_log()] starting thread (client mode): 0xa51d1b70
2025-12-03T18:31:01.411 [DEBUG] [Thread-121588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:31:01.427 [DEBUG] [Thread-121588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:31:01.427 [INFO] [Thread-121588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:31:01.434 [DEBUG] [Thread-121588] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:31:01.434 [DEBUG] [Thread-121588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:31:01.434 [DEBUG] [Thread-121588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:31:01.434 [DEBUG] [Thread-121588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] client lang: <none>
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] server lang: <none>
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] kex follows: False
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] Compression: none
2025-12-03T18:31:01.435 [DEBUG] [Thread-121588] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:31:01.497 [DEBUG] [Thread-121588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:31:01.497 [DEBUG] [Thread-121588] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:31:01.497 [DEBUG] [Thread-121588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:31:01.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:31:01.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:31:01.555 [DEBUG] [Thread-121588] [transport.py] [_log()] userauth is OK
2025-12-03T18:31:01.555 [DEBUG] [Thread-121588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:31:01.556 [DEBUG] [Thread-121588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:31:01.556 [DEBUG] [Thread-121588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:31:01.556 [DEBUG] [Thread-121588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:31:01.578 [INFO] [Thread-121588] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:31:01.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:31:01.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:31:02.442 [DEBUG] [Thread-121588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:31:02.443 [DEBUG] [Thread-121588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:31:02.491 [DEBUG] [Thread-121588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:31:02.491 [DEBUG] [Thread-121588] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:31:02.499 [DEBUG] [Thread-121588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:31:02.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:31:02.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:31:02.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:31:02.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:31:02.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:31:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:31:02.533 [DEBUG] [Thread-121588] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:31:10.491 [DEBUG] [Thread-121590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:25.536 [DEBUG] [Thread-121591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:31:32.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:31:32.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:31:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 31, 18), 21.6, 23.19, 0.0, 29.06, 19.79, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:31:33.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:31:18
2025-12-03T18:31:33.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:31:33.509 [DEBUG] [Thread-121592] [transport.py] [_log()] starting thread (client mode): 0xa272a830
2025-12-03T18:31:33.509 [DEBUG] [Thread-121592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:31:33.526 [DEBUG] [Thread-121592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:31:33.526 [INFO] [Thread-121592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] client lang: <none>
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] server lang: <none>
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] kex follows: False
2025-12-03T18:31:33.529 [DEBUG] [Thread-121592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] Compression: none
2025-12-03T18:31:33.530 [DEBUG] [Thread-121592] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:31:33.548 [DEBUG] [Thread-121592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:31:33.549 [DEBUG] [Thread-121592] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:31:33.549 [DEBUG] [Thread-121592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:31:33.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:31:33.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:31:33.551 [DEBUG] [Thread-121592] [transport.py] [_log()] userauth is OK
2025-12-03T18:31:33.551 [DEBUG] [Thread-121592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:31:33.551 [DEBUG] [Thread-121592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:31:33.551 [DEBUG] [Thread-121592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:31:33.551 [DEBUG] [Thread-121592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:31:33.583 [INFO] [Thread-121592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:31:33.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:31:34.195 [DEBUG] [Thread-121592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:31:34.195 [DEBUG] [Thread-121592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:31:34.195 [DEBUG] [Thread-121592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:31:34.235 [DEBUG] [Thread-121592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:31:34.236 [DEBUG] [Thread-121592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:31:34.238 [DEBUG] [Thread-121592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:31:34.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:31:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:31:34.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:31:34.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:31:34.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:31:34.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:31:34.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:31:34.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.688242 -999.00  +19.70  17.10     29   +1.30 1 1 1 1 1   887    0 17.87 -23.59 ----- 17.1 17.1 139.9 22.4 22.4 -28.7 22.8 -28.6 23.8 -26.9 23.9 -28.7
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.688242
2025-12-03T18:31:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:31:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:31:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:31:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:31:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:31:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:31:18', tmtdew=21.6, humidity=23.19, cloud=0.0, wind=29.06, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:31:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:31:34.259 [DEBUG] [Thread-121592] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:31:34.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:31:34.360 [DEBUG] [Thread-121595] [transport.py] [_log()] starting thread (client mode): 0xa514b4f0
2025-12-03T18:31:34.360 [DEBUG] [Thread-121595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:31:34.374 [DEBUG] [Thread-121595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:31:34.374 [INFO] [Thread-121595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] client lang: <none>
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] server lang: <none>
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] kex follows: False
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:31:34.382 [DEBUG] [Thread-121595] [transport.py] [_log()] Compression: none
2025-12-03T18:31:34.383 [DEBUG] [Thread-121595] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:31:34.439 [DEBUG] [Thread-121595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:31:34.439 [DEBUG] [Thread-121595] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:31:34.440 [DEBUG] [Thread-121595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:31:34.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:31:34.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:31:34.499 [DEBUG] [Thread-121595] [transport.py] [_log()] userauth is OK
2025-12-03T18:31:34.499 [DEBUG] [Thread-121595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:31:34.499 [DEBUG] [Thread-121595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:31:34.499 [DEBUG] [Thread-121595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:31:34.500 [DEBUG] [Thread-121595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:31:34.517 [INFO] [Thread-121595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:31:34.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:31:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:31:35.364 [DEBUG] [Thread-121595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:31:35.364 [DEBUG] [Thread-121595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:31:35.413 [DEBUG] [Thread-121595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:31:35.413 [DEBUG] [Thread-121595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:31:35.421 [DEBUG] [Thread-121595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:31:35.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:31:35.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:31:35.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:31:35.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:31:35.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:31:35.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:31:35.455 [DEBUG] [Thread-121595] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:31:40.563 [DEBUG] [Thread-121597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:54.838 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:54.839 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:31:55.602 [DEBUG] [Thread-121598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:00.531 [DEBUG] [Thread-121599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:32:05.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:32:05.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:32:06.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 31, 50), 21.57, 23.24, 0.0, 26.29, 19.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:32:06.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:31:50
2025-12-03T18:32:06.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:32:06.461 [DEBUG] [Thread-121600] [transport.py] [_log()] starting thread (client mode): 0xa272ae60
2025-12-03T18:32:06.461 [DEBUG] [Thread-121600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:32:06.476 [DEBUG] [Thread-121600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:32:06.476 [INFO] [Thread-121600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] client lang: <none>
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] server lang: <none>
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] kex follows: False
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] Compression: none
2025-12-03T18:32:06.479 [DEBUG] [Thread-121600] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:32:06.490 [DEBUG] [Thread-121600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:32:06.491 [DEBUG] [Thread-121600] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:32:06.491 [DEBUG] [Thread-121600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:32:06.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:32:06.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:32:06.492 [DEBUG] [Thread-121600] [transport.py] [_log()] userauth is OK
2025-12-03T18:32:06.492 [DEBUG] [Thread-121600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:32:06.492 [DEBUG] [Thread-121600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:32:06.492 [DEBUG] [Thread-121600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:32:06.492 [DEBUG] [Thread-121600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:32:06.503 [INFO] [Thread-121600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:32:06.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:32:07.073 [DEBUG] [Thread-121600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:32:07.073 [DEBUG] [Thread-121600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:32:07.073 [DEBUG] [Thread-121600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:32:07.114 [DEBUG] [Thread-121600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:32:07.114 [DEBUG] [Thread-121600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:32:07.117 [DEBUG] [Thread-121600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:32:07.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:32:07.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:32:07.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:32:07.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:32:07.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:32:07.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:32:07.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.688589 -999.00  +19.70  16.77     29   +1.30 1 1 1 1 1   887    0 17.61 -24.89 ----- 16.8 16.8 150.4 30.5 22.3 -28.8 22.8 -29.2 23.8 -26.8 23.8 -28.4
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.688589
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:32:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:31:50', tmtdew=21.57, humidity=23.24, cloud=0.0, wind=26.29, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:31:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:32:07.136 [DEBUG] [Thread-121600] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:32:07.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:32:07.222 [DEBUG] [Thread-121603] [transport.py] [_log()] starting thread (client mode): 0xa2726170
2025-12-03T18:32:07.222 [DEBUG] [Thread-121603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:32:07.237 [DEBUG] [Thread-121603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:32:07.237 [INFO] [Thread-121603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] client lang: <none>
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] server lang: <none>
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] kex follows: False
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] Compression: none
2025-12-03T18:32:07.244 [DEBUG] [Thread-121603] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:32:07.301 [DEBUG] [Thread-121603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:32:07.302 [DEBUG] [Thread-121603] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:32:07.302 [DEBUG] [Thread-121603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:32:07.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:32:07.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:32:07.359 [DEBUG] [Thread-121603] [transport.py] [_log()] userauth is OK
2025-12-03T18:32:07.359 [DEBUG] [Thread-121603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:32:07.359 [DEBUG] [Thread-121603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:32:07.359 [DEBUG] [Thread-121603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:32:07.359 [DEBUG] [Thread-121603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:32:07.373 [INFO] [Thread-121603] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:32:07.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:32:07.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:32:08.263 [DEBUG] [Thread-121603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:32:08.263 [DEBUG] [Thread-121603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:32:08.310 [DEBUG] [Thread-121603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:32:08.310 [DEBUG] [Thread-121603] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:32:08.319 [DEBUG] [Thread-121603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:32:08.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:32:08.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:32:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:32:08.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:32:08.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:32:08.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:32:08.351 [DEBUG] [Thread-121603] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:32:10.628 [DEBUG] [Thread-121605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:25.675 [DEBUG] [Thread-121606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:32:38.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:32:38.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 32, 22), 21.59, 23.21, 0.0, 25.53, 19.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:32:39.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:32:22
2025-12-03T18:32:39.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:32:39.303 [DEBUG] [Thread-121607] [transport.py] [_log()] starting thread (client mode): 0xa2725810
2025-12-03T18:32:39.303 [DEBUG] [Thread-121607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:32:39.323 [DEBUG] [Thread-121607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:32:39.323 [INFO] [Thread-121607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:32:39.326 [DEBUG] [Thread-121607] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] client lang: <none>
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] server lang: <none>
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] kex follows: False
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] Compression: none
2025-12-03T18:32:39.327 [DEBUG] [Thread-121607] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:32:39.344 [DEBUG] [Thread-121607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:32:39.344 [DEBUG] [Thread-121607] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:32:39.345 [DEBUG] [Thread-121607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:32:39.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:32:39.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:32:39.388 [DEBUG] [Thread-121607] [transport.py] [_log()] userauth is OK
2025-12-03T18:32:39.389 [DEBUG] [Thread-121607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:32:39.389 [DEBUG] [Thread-121607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:32:39.389 [DEBUG] [Thread-121607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:32:39.389 [DEBUG] [Thread-121607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:32:39.409 [INFO] [Thread-121607] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:32:39.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:32:40.054 [DEBUG] [Thread-121607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:32:40.054 [DEBUG] [Thread-121607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:32:40.055 [DEBUG] [Thread-121607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:32:40.096 [DEBUG] [Thread-121607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:32:40.096 [DEBUG] [Thread-121607] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:32:40.099 [DEBUG] [Thread-121607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:32:40.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:32:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:32:40.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:32:40.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:32:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:32:40.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:32:40.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.689284 -999.00  +19.80  18.50     29   +1.30 1 1 1 1 1   887    0 17.70 -21.40 ----- 18.5 18.5 149.4 32.4 22.2 -29.0 22.7 -28.2 23.6 -26.8 23.8 -29.1
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:32:40.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.689284
2025-12-03T18:32:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:32:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:32:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:32:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:32:40.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:32:40.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:32:22', tmtdew=21.59, humidity=23.21, cloud=0.0, wind=25.53, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:32:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:32:40.124 [DEBUG] [Thread-121607] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:32:40.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:32:40.221 [DEBUG] [Thread-121610] [transport.py] [_log()] starting thread (client mode): 0xa27c9ea0
2025-12-03T18:32:40.221 [DEBUG] [Thread-121610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:32:40.240 [DEBUG] [Thread-121610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:32:40.240 [INFO] [Thread-121610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:32:40.247 [DEBUG] [Thread-121610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] client lang: <none>
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] server lang: <none>
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] kex follows: False
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] Compression: none
2025-12-03T18:32:40.248 [DEBUG] [Thread-121610] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:32:40.307 [DEBUG] [Thread-121610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:32:40.307 [DEBUG] [Thread-121610] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:32:40.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:32:40.308 [DEBUG] [Thread-121610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:32:40.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:32:40.363 [DEBUG] [Thread-121610] [transport.py] [_log()] userauth is OK
2025-12-03T18:32:40.363 [DEBUG] [Thread-121610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:32:40.363 [DEBUG] [Thread-121610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:32:40.363 [DEBUG] [Thread-121610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:32:40.363 [DEBUG] [Thread-121610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:32:40.377 [INFO] [Thread-121610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:32:40.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:32:40.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:32:40.707 [DEBUG] [Thread-121612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:41.202 [DEBUG] [Thread-121610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:32:41.203 [DEBUG] [Thread-121610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:32:41.250 [DEBUG] [Thread-121610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:32:41.250 [DEBUG] [Thread-121610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:32:41.259 [DEBUG] [Thread-121610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:32:41.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:32:41.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:32:41.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:32:41.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:32:41.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:32:41.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:32:41.293 [DEBUG] [Thread-121610] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:32:54.976 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:54.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:32:55.743 [DEBUG] [Thread-121613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:00.566 [DEBUG] [Thread-121614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:10.771 [DEBUG] [Thread-121615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:11.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:33:11.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:33:11.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:33:11.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 32, 54), 21.61, 23.21, 0.0, 28.88, 19.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:33:11.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:32:54
2025-12-03T18:33:12.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:33:12.235 [DEBUG] [Thread-121616] [transport.py] [_log()] starting thread (client mode): 0xa51d1240
2025-12-03T18:33:12.235 [DEBUG] [Thread-121616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:33:12.245 [DEBUG] [Thread-121616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:33:12.245 [INFO] [Thread-121616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] client lang: <none>
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] server lang: <none>
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] kex follows: False
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:33:12.247 [DEBUG] [Thread-121616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:33:12.248 [DEBUG] [Thread-121616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:33:12.248 [DEBUG] [Thread-121616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:33:12.248 [DEBUG] [Thread-121616] [transport.py] [_log()] Compression: none
2025-12-03T18:33:12.248 [DEBUG] [Thread-121616] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:33:12.258 [DEBUG] [Thread-121616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:33:12.259 [DEBUG] [Thread-121616] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:33:12.259 [DEBUG] [Thread-121616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:33:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:33:12.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:33:12.260 [DEBUG] [Thread-121616] [transport.py] [_log()] userauth is OK
2025-12-03T18:33:12.260 [DEBUG] [Thread-121616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:33:12.260 [DEBUG] [Thread-121616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:33:12.260 [DEBUG] [Thread-121616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:33:12.260 [DEBUG] [Thread-121616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:33:12.271 [INFO] [Thread-121616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:33:12.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:33:12.839 [DEBUG] [Thread-121616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:33:12.839 [DEBUG] [Thread-121616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:33:12.839 [DEBUG] [Thread-121616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:33:12.879 [DEBUG] [Thread-121616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:33:12.880 [DEBUG] [Thread-121616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:33:12.882 [DEBUG] [Thread-121616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:33:12.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:33:12.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:33:12.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:33:12.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:33:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:33:12.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:33:12.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:33:12.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.689631 -999.00  +19.60  20.76     29   +1.20 1 1 1 1 1   887    0 18.26 -19.10 ----- 20.8 20.8 160.8 36.0 22.2 -29.3 22.6 -28.3 23.5 -27.5 23.7 -28.7
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.689631
2025-12-03T18:33:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:33:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:33:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:33:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:33:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:33:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:32:54', tmtdew=21.61, humidity=23.21, cloud=0.0, wind=28.88, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:33:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:33:12.899 [DEBUG] [Thread-121616] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:33:12.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:33:12.995 [DEBUG] [Thread-121619] [transport.py] [_log()] starting thread (client mode): 0xa272ac20
2025-12-03T18:33:12.995 [DEBUG] [Thread-121619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:33:13.009 [DEBUG] [Thread-121619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:33:13.010 [INFO] [Thread-121619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:33:13.017 [DEBUG] [Thread-121619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:33:13.017 [DEBUG] [Thread-121619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] client lang: <none>
2025-12-03T18:33:13.018 [DEBUG] [Thread-121619] [transport.py] [_log()] server lang: <none>
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] kex follows: False
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] Compression: none
2025-12-03T18:33:13.019 [DEBUG] [Thread-121619] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:33:13.075 [DEBUG] [Thread-121619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:33:13.076 [DEBUG] [Thread-121619] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:33:13.076 [DEBUG] [Thread-121619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:33:13.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:33:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:33:13.132 [DEBUG] [Thread-121619] [transport.py] [_log()] userauth is OK
2025-12-03T18:33:13.132 [DEBUG] [Thread-121619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:33:13.132 [DEBUG] [Thread-121619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:33:13.132 [DEBUG] [Thread-121619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:33:13.133 [DEBUG] [Thread-121619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:33:13.151 [INFO] [Thread-121619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:33:13.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:33:13.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:33:14.000 [DEBUG] [Thread-121619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:33:14.000 [DEBUG] [Thread-121619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:33:14.048 [DEBUG] [Thread-121619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:33:14.048 [DEBUG] [Thread-121619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:33:14.056 [DEBUG] [Thread-121619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:33:14.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:33:14.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:33:14.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:33:14.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:33:14.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:33:14.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:33:14.091 [DEBUG] [Thread-121619] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:33:25.796 [DEBUG] [Thread-121621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:40.832 [DEBUG] [Thread-121622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:44.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:33:44.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:33:44.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:33:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 33, 26), 21.59, 23.21, 0.0, 29.63, 19.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:33:44.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:33:26
2025-12-03T18:33:44.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:33:45.041 [DEBUG] [Thread-121623] [transport.py] [_log()] starting thread (client mode): 0xa514af20
2025-12-03T18:33:45.041 [DEBUG] [Thread-121623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:33:45.061 [DEBUG] [Thread-121623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:33:45.061 [INFO] [Thread-121623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] client lang: <none>
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] server lang: <none>
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] kex follows: False
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] Compression: none
2025-12-03T18:33:45.065 [DEBUG] [Thread-121623] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:33:45.083 [DEBUG] [Thread-121623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:33:45.083 [DEBUG] [Thread-121623] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:33:45.083 [DEBUG] [Thread-121623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:33:45.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:33:45.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:33:45.085 [DEBUG] [Thread-121623] [transport.py] [_log()] userauth is OK
2025-12-03T18:33:45.085 [DEBUG] [Thread-121623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:33:45.086 [DEBUG] [Thread-121623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:33:45.086 [DEBUG] [Thread-121623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:33:45.086 [DEBUG] [Thread-121623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:33:45.106 [INFO] [Thread-121623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:33:45.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:33:45.679 [DEBUG] [Thread-121623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:33:45.679 [DEBUG] [Thread-121623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:33:45.680 [DEBUG] [Thread-121623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:33:45.720 [DEBUG] [Thread-121623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:33:45.720 [DEBUG] [Thread-121623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:33:45.723 [DEBUG] [Thread-121623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:33:45.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:33:45.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:33:45.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:33:45.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:33:45.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:33:45.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:33:45.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:33:45.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.689631 -999.00  +19.60  20.76     29   +1.20 1 1 1 1 1   887    0 18.26 -19.10 ----- 20.8 20.8 160.8 36.0 22.2 -29.3 22.6 -28.3 23.5 -27.5 23.7 -28.7
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.689631
2025-12-03T18:33:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:33:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:33:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:33:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:33:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:33:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:33:26', tmtdew=21.59, humidity=23.21, cloud=0.0, wind=29.63, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:33:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:33:45.750 [DEBUG] [Thread-121623] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:33:45.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:33:45.846 [DEBUG] [Thread-121626] [transport.py] [_log()] starting thread (client mode): 0xa5148f70
2025-12-03T18:33:45.846 [DEBUG] [Thread-121626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:33:45.860 [DEBUG] [Thread-121626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:33:45.860 [INFO] [Thread-121626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:33:45.868 [DEBUG] [Thread-121626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:33:45.868 [DEBUG] [Thread-121626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:33:45.868 [DEBUG] [Thread-121626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] client lang: <none>
2025-12-03T18:33:45.869 [DEBUG] [Thread-121626] [transport.py] [_log()] server lang: <none>
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] kex follows: False
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] Compression: none
2025-12-03T18:33:45.870 [DEBUG] [Thread-121626] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:33:45.927 [DEBUG] [Thread-121626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:33:45.928 [DEBUG] [Thread-121626] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:33:45.928 [DEBUG] [Thread-121626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:33:45.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:33:45.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:33:45.989 [DEBUG] [Thread-121626] [transport.py] [_log()] userauth is OK
2025-12-03T18:33:45.989 [DEBUG] [Thread-121626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:33:45.989 [DEBUG] [Thread-121626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:33:45.989 [DEBUG] [Thread-121626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:33:45.989 [DEBUG] [Thread-121626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:33:46.011 [INFO] [Thread-121626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:33:46.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:33:46.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:33:46.863 [DEBUG] [Thread-121626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:33:46.863 [DEBUG] [Thread-121626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:33:46.912 [DEBUG] [Thread-121626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:33:46.912 [DEBUG] [Thread-121626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:33:46.921 [DEBUG] [Thread-121626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:33:46.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:33:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:33:46.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:33:46.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:33:46.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:33:46.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:33:46.958 [DEBUG] [Thread-121626] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:33:55.115 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:55.116 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:33:55.863 [DEBUG] [Thread-121628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:00.601 [DEBUG] [Thread-121629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:10.909 [DEBUG] [Thread-121630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:16.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:34:16.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:34:16.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 33, 58), 21.49, 23.27, 0.0, 28.21, 19.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:33:58
2025-12-03T18:34:17.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:34:17.895 [DEBUG] [Thread-121631] [transport.py] [_log()] starting thread (client mode): 0xa514ba30
2025-12-03T18:34:17.895 [DEBUG] [Thread-121631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:34:17.917 [DEBUG] [Thread-121631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:34:17.917 [INFO] [Thread-121631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] client lang: <none>
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] server lang: <none>
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] kex follows: False
2025-12-03T18:34:17.920 [DEBUG] [Thread-121631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] Compression: none
2025-12-03T18:34:17.921 [DEBUG] [Thread-121631] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:34:17.938 [DEBUG] [Thread-121631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:34:17.938 [DEBUG] [Thread-121631] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:34:17.939 [DEBUG] [Thread-121631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:34:17.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:34:17.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:34:17.941 [DEBUG] [Thread-121631] [transport.py] [_log()] userauth is OK
2025-12-03T18:34:17.941 [DEBUG] [Thread-121631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:34:17.941 [DEBUG] [Thread-121631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:34:17.941 [DEBUG] [Thread-121631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:34:17.941 [DEBUG] [Thread-121631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:34:17.967 [INFO] [Thread-121631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:34:17.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:34:18.679 [DEBUG] [Thread-121631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:34:18.679 [DEBUG] [Thread-121631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:34:18.680 [DEBUG] [Thread-121631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:34:18.720 [DEBUG] [Thread-121631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:34:18.720 [DEBUG] [Thread-121631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:34:18.723 [DEBUG] [Thread-121631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:34:18.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:34:18.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:34:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:34:18.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:34:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:34:18.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:34:18.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:34:18.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:34:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:34:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.689978 -999.00  +19.60  21.39     29   +1.20 1 1 1 1 1   887    0 18.04 -17.26 ----- 21.4 21.4 160.0 28.6 22.2 -29.2 22.5 -28.8 23.5 -27.4 23.6 -28.7
2025-12-03T18:34:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:34:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:34:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.689978
2025-12-03T18:34:18.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:34:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:34:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:34:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:34:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:34:18.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:33:58', tmtdew=21.49, humidity=23.27, cloud=0.0, wind=28.21, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:33:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:34:18.740 [DEBUG] [Thread-121631] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:34:18.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:34:18.837 [DEBUG] [Thread-121634] [transport.py] [_log()] starting thread (client mode): 0xa27789d0
2025-12-03T18:34:18.837 [DEBUG] [Thread-121634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:34:18.851 [DEBUG] [Thread-121634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:34:18.851 [INFO] [Thread-121634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:18.859 [DEBUG] [Thread-121634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] client lang: <none>
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] server lang: <none>
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] kex follows: False
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:34:18.860 [DEBUG] [Thread-121634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:34:18.861 [DEBUG] [Thread-121634] [transport.py] [_log()] Compression: none
2025-12-03T18:34:18.861 [DEBUG] [Thread-121634] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:34:18.919 [DEBUG] [Thread-121634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:34:18.920 [DEBUG] [Thread-121634] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:34:18.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:34:18.921 [DEBUG] [Thread-121634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:34:18.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:34:18.976 [DEBUG] [Thread-121634] [transport.py] [_log()] userauth is OK
2025-12-03T18:34:18.976 [DEBUG] [Thread-121634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:34:18.976 [DEBUG] [Thread-121634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:34:18.976 [DEBUG] [Thread-121634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:34:18.976 [DEBUG] [Thread-121634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:34:18.998 [INFO] [Thread-121634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:34:18.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:34:18.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:34:19.825 [DEBUG] [Thread-121634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:34:19.825 [DEBUG] [Thread-121634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:34:19.872 [DEBUG] [Thread-121634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:34:19.873 [DEBUG] [Thread-121634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:34:19.881 [DEBUG] [Thread-121634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:34:19.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:34:19.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:34:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:34:19.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:34:19.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:34:19.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:34:19.915 [DEBUG] [Thread-121634] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:34:25.939 [DEBUG] [Thread-121636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:40.986 [DEBUG] [Thread-121637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:49.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:34:49.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:34:49.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:34:50.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 34, 30), 21.45, 23.34, 0.0, 28.69, 19.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:34:50.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:34:30
2025-12-03T18:34:50.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:34:50.864 [DEBUG] [Thread-121638] [transport.py] [_log()] starting thread (client mode): 0xa27503d0
2025-12-03T18:34:50.864 [DEBUG] [Thread-121638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:34:50.884 [DEBUG] [Thread-121638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:34:50.884 [INFO] [Thread-121638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] client lang: <none>
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] server lang: <none>
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] kex follows: False
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:34:50.888 [DEBUG] [Thread-121638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:34:50.889 [DEBUG] [Thread-121638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:34:50.889 [DEBUG] [Thread-121638] [transport.py] [_log()] Compression: none
2025-12-03T18:34:50.889 [DEBUG] [Thread-121638] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:34:50.905 [DEBUG] [Thread-121638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:34:50.905 [DEBUG] [Thread-121638] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:34:50.906 [DEBUG] [Thread-121638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:34:50.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:34:50.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:34:50.907 [DEBUG] [Thread-121638] [transport.py] [_log()] userauth is OK
2025-12-03T18:34:50.908 [DEBUG] [Thread-121638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:34:50.908 [DEBUG] [Thread-121638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:34:50.908 [DEBUG] [Thread-121638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:34:50.908 [DEBUG] [Thread-121638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:34:50.928 [INFO] [Thread-121638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:34:50.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:34:51.519 [DEBUG] [Thread-121638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:34:51.520 [DEBUG] [Thread-121638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:34:51.520 [DEBUG] [Thread-121638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:34:51.561 [DEBUG] [Thread-121638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:34:51.561 [DEBUG] [Thread-121638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:34:51.563 [DEBUG] [Thread-121638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:34:51.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:34:51.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:34:51.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:34:51.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:34:51.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:34:51.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:34:51.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.690325 -999.00  +19.60  24.18     29   +1.30 1 1 1 1 1   887    0 17.87 -15.49 ----- 24.2 24.2 165.6 28.2 22.2 -28.9 22.5 -28.3 23.5 -27.2 23.6 -29.3
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:34:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.690325
2025-12-03T18:34:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:34:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:34:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:34:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:34:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:34:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:34:30', tmtdew=21.45, humidity=23.34, cloud=0.0, wind=28.69, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:34:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:34:51.586 [DEBUG] [Thread-121638] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:34:51.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:34:51.683 [DEBUG] [Thread-121641] [transport.py] [_log()] starting thread (client mode): 0xa2750f40
2025-12-03T18:34:51.683 [DEBUG] [Thread-121641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:34:51.698 [DEBUG] [Thread-121641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:34:51.698 [INFO] [Thread-121641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:51.706 [DEBUG] [Thread-121641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] client lang: <none>
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] server lang: <none>
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] kex follows: False
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] Compression: none
2025-12-03T18:34:51.707 [DEBUG] [Thread-121641] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:34:51.763 [DEBUG] [Thread-121641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:34:51.764 [DEBUG] [Thread-121641] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:34:51.764 [DEBUG] [Thread-121641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:34:51.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:34:51.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:34:51.820 [DEBUG] [Thread-121641] [transport.py] [_log()] userauth is OK
2025-12-03T18:34:51.820 [DEBUG] [Thread-121641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:34:51.820 [DEBUG] [Thread-121641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:34:51.820 [DEBUG] [Thread-121641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:34:51.820 [DEBUG] [Thread-121641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:34:51.838 [INFO] [Thread-121641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:34:51.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:34:51.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:34:52.715 [DEBUG] [Thread-121641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:34:52.715 [DEBUG] [Thread-121641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:34:52.765 [DEBUG] [Thread-121641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:34:52.766 [DEBUG] [Thread-121641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:34:52.776 [DEBUG] [Thread-121641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:34:52.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:34:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:34:52.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:34:52.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:34:52.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:34:52.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:34:52.818 [DEBUG] [Thread-121641] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:34:55.256 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:55.264 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:34:56.016 [DEBUG] [Thread-121643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:00.638 [DEBUG] [Thread-121644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:11.071 [DEBUG] [Thread-121645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:35:22.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:35:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:35:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 35, 2), 21.42, 23.39, 0.0, 24.88, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:35:23.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:35:02
2025-12-03T18:35:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:35:23.765 [DEBUG] [Thread-121646] [transport.py] [_log()] starting thread (client mode): 0xa51d2dd0
2025-12-03T18:35:23.765 [DEBUG] [Thread-121646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:35:23.781 [DEBUG] [Thread-121646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:35:23.781 [INFO] [Thread-121646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] client lang: <none>
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] server lang: <none>
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] kex follows: False
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] Compression: none
2025-12-03T18:35:23.784 [DEBUG] [Thread-121646] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:35:23.802 [DEBUG] [Thread-121646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:35:23.802 [DEBUG] [Thread-121646] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:35:23.802 [DEBUG] [Thread-121646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:35:23.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:35:23.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:35:23.804 [DEBUG] [Thread-121646] [transport.py] [_log()] userauth is OK
2025-12-03T18:35:23.804 [DEBUG] [Thread-121646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:35:23.804 [DEBUG] [Thread-121646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:35:23.804 [DEBUG] [Thread-121646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:35:23.804 [DEBUG] [Thread-121646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:35:23.813 [INFO] [Thread-121646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:35:23.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:35:24.578 [DEBUG] [Thread-121646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:35:24.578 [DEBUG] [Thread-121646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:35:24.579 [DEBUG] [Thread-121646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:35:24.620 [DEBUG] [Thread-121646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:35:24.620 [DEBUG] [Thread-121646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:35:24.623 [DEBUG] [Thread-121646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:35:24.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:35:24.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:35:24.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:35:24.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:35:24.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:35:24.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:35:24.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:35:24.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.690672 -999.00  +19.50  25.52     29   +1.20 1 1 1 1 1   887    0 18.01 -15.54 ----- 25.5 25.5 146.6 27.6 22.1 -29.2 22.4 -29.3 23.4 -27.3 23.4 -29.5
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.690672
2025-12-03T18:35:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:35:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:35:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:35:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:35:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:35:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:35:02', tmtdew=21.42, humidity=23.39, cloud=0.0, wind=24.88, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:34:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:35:24.644 [DEBUG] [Thread-121646] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:35:24.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:35:24.739 [DEBUG] [Thread-121649] [transport.py] [_log()] starting thread (client mode): 0xa27c91b0
2025-12-03T18:35:24.739 [DEBUG] [Thread-121649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:35:24.758 [DEBUG] [Thread-121649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:35:24.758 [INFO] [Thread-121649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:35:24.765 [DEBUG] [Thread-121649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] client lang: <none>
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] server lang: <none>
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] kex follows: False
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:35:24.766 [DEBUG] [Thread-121649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:35:24.767 [DEBUG] [Thread-121649] [transport.py] [_log()] Compression: none
2025-12-03T18:35:24.767 [DEBUG] [Thread-121649] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:35:24.823 [DEBUG] [Thread-121649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:35:24.824 [DEBUG] [Thread-121649] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:35:24.824 [DEBUG] [Thread-121649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:35:24.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:35:24.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:35:24.879 [DEBUG] [Thread-121649] [transport.py] [_log()] userauth is OK
2025-12-03T18:35:24.880 [DEBUG] [Thread-121649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:35:24.880 [DEBUG] [Thread-121649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:35:24.880 [DEBUG] [Thread-121649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:35:24.880 [DEBUG] [Thread-121649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:35:24.899 [INFO] [Thread-121649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:35:24.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:35:24.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:35:25.787 [DEBUG] [Thread-121649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:35:25.787 [DEBUG] [Thread-121649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:35:25.835 [DEBUG] [Thread-121649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:35:25.835 [DEBUG] [Thread-121649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:35:25.844 [DEBUG] [Thread-121649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:35:25.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:35:25.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:35:25.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:35:25.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:35:25.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:35:25.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:35:25.888 [DEBUG] [Thread-121649] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:35:26.099 [DEBUG] [Thread-121651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:41.144 [DEBUG] [Thread-121652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:55.403 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:55.404 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:55.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:35:55.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:35:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:35:56.177 [DEBUG] [Thread-121653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:35:56.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 35, 34), 21.42, 23.32, 0.0, 24.83, 19.74, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:35:56.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:35:34
2025-12-03T18:35:56.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:35:56.861 [DEBUG] [Thread-121654] [transport.py] [_log()] starting thread (client mode): 0xa51bb5b0
2025-12-03T18:35:56.861 [DEBUG] [Thread-121654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:35:56.881 [DEBUG] [Thread-121654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:35:56.881 [INFO] [Thread-121654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:56.884 [DEBUG] [Thread-121654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] client lang: <none>
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] server lang: <none>
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] kex follows: False
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] Compression: none
2025-12-03T18:35:56.885 [DEBUG] [Thread-121654] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:35:56.899 [DEBUG] [Thread-121654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:35:56.899 [DEBUG] [Thread-121654] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:35:56.900 [DEBUG] [Thread-121654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:35:56.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:35:56.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:35:56.901 [DEBUG] [Thread-121654] [transport.py] [_log()] userauth is OK
2025-12-03T18:35:56.901 [DEBUG] [Thread-121654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:35:56.901 [DEBUG] [Thread-121654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:35:56.901 [DEBUG] [Thread-121654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:35:56.901 [DEBUG] [Thread-121654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:35:56.912 [INFO] [Thread-121654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:35:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:35:57.517 [DEBUG] [Thread-121654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:35:57.517 [DEBUG] [Thread-121654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:35:57.517 [DEBUG] [Thread-121654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:35:57.558 [DEBUG] [Thread-121654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:35:57.558 [DEBUG] [Thread-121654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:35:57.560 [DEBUG] [Thread-121654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:35:57.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:35:57.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:35:57.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:35:57.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:35:57.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:35:57.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:35:57.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.691019 -999.00  +19.40  20.20     29   +1.20 1 1 1 1 1   887    0 18.38 -14.66 ----- 20.2 20.2 143.6 22.8 22.1 -28.9 22.4 -28.7 23.4 -27.0 23.5 -28.2
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.691019
2025-12-03T18:35:57.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:35:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:35:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:35:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:35:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:35:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:35:34', tmtdew=21.42, humidity=23.32, cloud=0.0, wind=24.83, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:35:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:35:57.579 [DEBUG] [Thread-121654] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:35:57.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:35:57.665 [DEBUG] [Thread-121657] [transport.py] [_log()] starting thread (client mode): 0xa514ae60
2025-12-03T18:35:57.665 [DEBUG] [Thread-121657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:35:57.680 [DEBUG] [Thread-121657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:35:57.680 [INFO] [Thread-121657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:57.687 [DEBUG] [Thread-121657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] client lang: <none>
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] server lang: <none>
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] kex follows: False
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] Compression: none
2025-12-03T18:35:57.688 [DEBUG] [Thread-121657] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:35:57.742 [DEBUG] [Thread-121657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:35:57.742 [DEBUG] [Thread-121657] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:35:57.742 [DEBUG] [Thread-121657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:35:57.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:35:57.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:35:57.799 [DEBUG] [Thread-121657] [transport.py] [_log()] userauth is OK
2025-12-03T18:35:57.799 [DEBUG] [Thread-121657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:35:57.799 [DEBUG] [Thread-121657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:35:57.799 [DEBUG] [Thread-121657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:35:57.799 [DEBUG] [Thread-121657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:35:57.817 [INFO] [Thread-121657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:35:57.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:35:57.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:35:58.664 [DEBUG] [Thread-121657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:35:58.664 [DEBUG] [Thread-121657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:35:58.711 [DEBUG] [Thread-121657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:35:58.712 [DEBUG] [Thread-121657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:35:58.720 [DEBUG] [Thread-121657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:35:58.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:35:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:35:58.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:35:58.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:35:58.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:35:58.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:35:58.751 [DEBUG] [Thread-121657] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:36:00.667 [DEBUG] [Thread-121659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:11.206 [DEBUG] [Thread-121660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:26.247 [DEBUG] [Thread-121661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:28.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:36:28.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:36:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:36:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 36, 6), 21.42, 23.31, 0.0, 27.56, 19.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:36:29.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:36:06
2025-12-03T18:36:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:36:29.699 [DEBUG] [Thread-121662] [transport.py] [_log()] starting thread (client mode): 0xa2778670
2025-12-03T18:36:29.699 [DEBUG] [Thread-121662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:36:29.719 [DEBUG] [Thread-121662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:36:29.720 [INFO] [Thread-121662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:36:29.721 [DEBUG] [Thread-121662] [transport.py] [_log()] client lang: <none>
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] server lang: <none>
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] kex follows: False
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] Compression: none
2025-12-03T18:36:29.722 [DEBUG] [Thread-121662] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:36:29.740 [DEBUG] [Thread-121662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:36:29.741 [DEBUG] [Thread-121662] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:36:29.742 [DEBUG] [Thread-121662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:36:29.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:36:29.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:36:29.785 [DEBUG] [Thread-121662] [transport.py] [_log()] userauth is OK
2025-12-03T18:36:29.785 [DEBUG] [Thread-121662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:36:29.785 [DEBUG] [Thread-121662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:36:29.785 [DEBUG] [Thread-121662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:36:29.786 [DEBUG] [Thread-121662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:36:29.810 [INFO] [Thread-121662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:36:29.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:36:30.552 [DEBUG] [Thread-121662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:36:30.552 [DEBUG] [Thread-121662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:36:30.553 [DEBUG] [Thread-121662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:36:30.593 [DEBUG] [Thread-121662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:36:30.593 [DEBUG] [Thread-121662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:36:30.595 [DEBUG] [Thread-121662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:36:30.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:36:30.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:36:30.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:36:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:36:30.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:36:30.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:36:30.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.691367 -999.00  +19.40  19.25     29   +1.20 1 1 1 1 1   887    0 17.78 -13.82 ----- 19.2 19.2 153.4 25.4 22.0 -29.1 22.4 -28.7 23.4 -27.4 23.5 -28.5
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:36:30.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.691367
2025-12-03T18:36:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:36:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:36:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:36:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:36:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:36:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:36:06', tmtdew=21.42, humidity=23.31, cloud=0.0, wind=27.56, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:35:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:36:30.615 [DEBUG] [Thread-121662] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:36:30.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:36:30.711 [DEBUG] [Thread-121665] [transport.py] [_log()] starting thread (client mode): 0xa517efb0
2025-12-03T18:36:30.711 [DEBUG] [Thread-121665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:36:30.726 [DEBUG] [Thread-121665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:36:30.726 [INFO] [Thread-121665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:36:30.734 [DEBUG] [Thread-121665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] client lang: <none>
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] server lang: <none>
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] kex follows: False
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] Compression: none
2025-12-03T18:36:30.735 [DEBUG] [Thread-121665] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:36:30.791 [DEBUG] [Thread-121665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:36:30.791 [DEBUG] [Thread-121665] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:36:30.792 [DEBUG] [Thread-121665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:36:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:36:30.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:36:30.853 [DEBUG] [Thread-121665] [transport.py] [_log()] userauth is OK
2025-12-03T18:36:30.853 [DEBUG] [Thread-121665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:36:30.853 [DEBUG] [Thread-121665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:36:30.853 [DEBUG] [Thread-121665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:36:30.853 [DEBUG] [Thread-121665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:36:30.872 [INFO] [Thread-121665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:36:30.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:36:30.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:36:31.727 [DEBUG] [Thread-121665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:36:31.727 [DEBUG] [Thread-121665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:36:31.776 [DEBUG] [Thread-121665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:36:31.776 [DEBUG] [Thread-121665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:36:31.785 [DEBUG] [Thread-121665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:36:31.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:36:31.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:36:31.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:36:31.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:36:31.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:36:31.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:36:31.819 [DEBUG] [Thread-121665] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:36:41.281 [DEBUG] [Thread-121667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:55.546 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:55.546 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:36:56.334 [DEBUG] [Thread-121668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:00.714 [DEBUG] [Thread-121669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:01.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:37:01.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:37:01.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:37:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 36, 38), 21.42, 23.32, 0.0, 27.03, 19.84, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:37:02.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:36:38
2025-12-03T18:37:02.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:37:02.770 [DEBUG] [Thread-121670] [transport.py] [_log()] starting thread (client mode): 0xa27538e0
2025-12-03T18:37:02.771 [DEBUG] [Thread-121670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:37:02.790 [DEBUG] [Thread-121670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:37:02.790 [INFO] [Thread-121670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:37:02.793 [DEBUG] [Thread-121670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:37:02.793 [DEBUG] [Thread-121670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:37:02.793 [DEBUG] [Thread-121670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] client lang: <none>
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] server lang: <none>
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] kex follows: False
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] Compression: none
2025-12-03T18:37:02.794 [DEBUG] [Thread-121670] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:37:02.813 [DEBUG] [Thread-121670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:37:02.813 [DEBUG] [Thread-121670] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:37:02.814 [DEBUG] [Thread-121670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:37:02.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:37:02.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:37:02.815 [DEBUG] [Thread-121670] [transport.py] [_log()] userauth is OK
2025-12-03T18:37:02.816 [DEBUG] [Thread-121670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:37:02.816 [DEBUG] [Thread-121670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:37:02.816 [DEBUG] [Thread-121670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:37:02.816 [DEBUG] [Thread-121670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:37:02.839 [INFO] [Thread-121670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:37:02.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:37:03.428 [DEBUG] [Thread-121670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:37:03.428 [DEBUG] [Thread-121670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:37:03.428 [DEBUG] [Thread-121670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:37:03.469 [DEBUG] [Thread-121670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:37:03.469 [DEBUG] [Thread-121670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:37:03.473 [DEBUG] [Thread-121670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:37:03.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:37:03.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:37:03.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:37:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:37:03.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:37:03.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:37:03.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:37:03.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:37:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:37:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.691714 -999.00  +19.50  23.26     29   +1.30 1 1 1 1 1   887    0 18.24 -14.53 ----- 23.3 23.3 141.8 31.7 22.0 -28.7 22.4 -28.3 23.3 -26.7 23.4 -28.7
2025-12-03T18:37:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:37:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:37:03.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.691714
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:37:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:36:38', tmtdew=21.42, humidity=23.32, cloud=0.0, wind=27.03, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:36:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:37:03.503 [DEBUG] [Thread-121670] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:37:03.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:37:03.598 [DEBUG] [Thread-121673] [transport.py] [_log()] starting thread (client mode): 0xa2760b20
2025-12-03T18:37:03.598 [DEBUG] [Thread-121673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:37:03.613 [DEBUG] [Thread-121673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:37:03.613 [INFO] [Thread-121673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:37:03.620 [DEBUG] [Thread-121673] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:37:03.620 [DEBUG] [Thread-121673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:37:03.620 [DEBUG] [Thread-121673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] client lang: <none>
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] server lang: <none>
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] kex follows: False
2025-12-03T18:37:03.621 [DEBUG] [Thread-121673] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] Compression: none
2025-12-03T18:37:03.622 [DEBUG] [Thread-121673] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:37:03.679 [DEBUG] [Thread-121673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:37:03.680 [DEBUG] [Thread-121673] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:37:03.680 [DEBUG] [Thread-121673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:37:03.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:37:03.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:37:03.735 [DEBUG] [Thread-121673] [transport.py] [_log()] userauth is OK
2025-12-03T18:37:03.735 [DEBUG] [Thread-121673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:37:03.735 [DEBUG] [Thread-121673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:37:03.736 [DEBUG] [Thread-121673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:37:03.736 [DEBUG] [Thread-121673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:37:03.755 [INFO] [Thread-121673] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:37:03.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:37:03.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:37:04.594 [DEBUG] [Thread-121673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:37:04.594 [DEBUG] [Thread-121673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:37:04.642 [DEBUG] [Thread-121673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:37:04.643 [DEBUG] [Thread-121673] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:37:04.651 [DEBUG] [Thread-121673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:37:04.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:37:04.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:37:04.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:37:04.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:37:04.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:37:04.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:37:04.686 [DEBUG] [Thread-121673] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:37:11.362 [DEBUG] [Thread-121675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:26.395 [DEBUG] [Thread-121676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:34.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:37:34.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:37:34.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:37:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 37, 10), 21.44, 23.29, 0.0, 25.32, 19.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:37:35.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:37:10
2025-12-03T18:37:35.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:37:35.650 [DEBUG] [Thread-121677] [transport.py] [_log()] starting thread (client mode): 0xa2751db0
2025-12-03T18:37:35.650 [DEBUG] [Thread-121677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:37:35.670 [DEBUG] [Thread-121677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:37:35.670 [INFO] [Thread-121677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] client lang: <none>
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] server lang: <none>
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] kex follows: False
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:37:35.673 [DEBUG] [Thread-121677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:37:35.674 [DEBUG] [Thread-121677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:37:35.674 [DEBUG] [Thread-121677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:37:35.674 [DEBUG] [Thread-121677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:37:35.674 [DEBUG] [Thread-121677] [transport.py] [_log()] Compression: none
2025-12-03T18:37:35.674 [DEBUG] [Thread-121677] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:37:35.692 [DEBUG] [Thread-121677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:37:35.692 [DEBUG] [Thread-121677] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:37:35.693 [DEBUG] [Thread-121677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:37:35.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:37:35.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:37:35.695 [DEBUG] [Thread-121677] [transport.py] [_log()] userauth is OK
2025-12-03T18:37:35.695 [DEBUG] [Thread-121677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:37:35.695 [DEBUG] [Thread-121677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:37:35.696 [DEBUG] [Thread-121677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:37:35.696 [DEBUG] [Thread-121677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:37:35.720 [INFO] [Thread-121677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:37:35.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:37:36.511 [DEBUG] [Thread-121677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:37:36.511 [DEBUG] [Thread-121677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:37:36.512 [DEBUG] [Thread-121677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:37:36.552 [DEBUG] [Thread-121677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:37:36.552 [DEBUG] [Thread-121677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:37:36.557 [DEBUG] [Thread-121677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:37:36.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:37:36.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:37:36.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:37:36.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:37:36.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:37:36.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:37:36.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:37:36.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.692061 -999.00  +19.40  19.73     29   +1.20 1 1 1 1 1   887    0 17.88 -14.65 ----- 19.7 19.7 148.4 33.1 21.9 -29.2 22.3 -28.4 23.3 -27.5 23.4 -28.9
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.692061
2025-12-03T18:37:36.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:37:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:37:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:37:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:37:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:37:36.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:37:10', tmtdew=21.44, humidity=23.29, cloud=0.0, wind=25.32, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:36:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:37:36.581 [DEBUG] [Thread-121677] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:37:36.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:37:36.678 [DEBUG] [Thread-121680] [transport.py] [_log()] starting thread (client mode): 0xa2752080
2025-12-03T18:37:36.678 [DEBUG] [Thread-121680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:37:36.694 [DEBUG] [Thread-121680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:37:36.694 [INFO] [Thread-121680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:37:36.702 [DEBUG] [Thread-121680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:37:36.702 [DEBUG] [Thread-121680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:37:36.702 [DEBUG] [Thread-121680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:37:36.702 [DEBUG] [Thread-121680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] client lang: <none>
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] server lang: <none>
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] kex follows: False
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] Compression: none
2025-12-03T18:37:36.703 [DEBUG] [Thread-121680] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:37:36.759 [DEBUG] [Thread-121680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:37:36.760 [DEBUG] [Thread-121680] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:37:36.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:37:36.761 [DEBUG] [Thread-121680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:37:36.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:37:36.816 [DEBUG] [Thread-121680] [transport.py] [_log()] userauth is OK
2025-12-03T18:37:36.817 [DEBUG] [Thread-121680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:37:36.817 [DEBUG] [Thread-121680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:37:36.817 [DEBUG] [Thread-121680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:37:36.817 [DEBUG] [Thread-121680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:37:36.836 [INFO] [Thread-121680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:37:36.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:37:36.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:37:37.674 [DEBUG] [Thread-121680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:37:37.674 [DEBUG] [Thread-121680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:37:37.722 [DEBUG] [Thread-121680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:37:37.722 [DEBUG] [Thread-121680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:37:37.731 [DEBUG] [Thread-121680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:37:37.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:37:37.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:37:37.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:37:37.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:37:37.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:37:37.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:37:37.764 [DEBUG] [Thread-121680] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:37:41.423 [DEBUG] [Thread-121682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:55.696 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:55.697 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:37:56.458 [DEBUG] [Thread-121683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:00.762 [DEBUG] [Thread-121684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:07.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:38:07.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:38:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:38:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 37, 42), 21.44, 23.31, 0.0, 31.13, 19.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:38:08.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:37:42
2025-12-03T18:38:08.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:38:08.752 [DEBUG] [Thread-121685] [transport.py] [_log()] starting thread (client mode): 0xa2778e20
2025-12-03T18:38:08.752 [DEBUG] [Thread-121685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:38:08.767 [DEBUG] [Thread-121685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:38:08.767 [INFO] [Thread-121685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] client lang: <none>
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] server lang: <none>
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] kex follows: False
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] Compression: none
2025-12-03T18:38:08.771 [DEBUG] [Thread-121685] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:38:08.788 [DEBUG] [Thread-121685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:38:08.789 [DEBUG] [Thread-121685] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:38:08.789 [DEBUG] [Thread-121685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:38:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:38:08.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:38:08.791 [DEBUG] [Thread-121685] [transport.py] [_log()] userauth is OK
2025-12-03T18:38:08.791 [DEBUG] [Thread-121685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:38:08.791 [DEBUG] [Thread-121685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:38:08.791 [DEBUG] [Thread-121685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:38:08.791 [DEBUG] [Thread-121685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:38:08.815 [INFO] [Thread-121685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:38:08.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:38:09.445 [DEBUG] [Thread-121685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:38:09.445 [DEBUG] [Thread-121685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:38:09.445 [DEBUG] [Thread-121685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:38:09.486 [DEBUG] [Thread-121685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:38:09.486 [DEBUG] [Thread-121685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:38:09.489 [DEBUG] [Thread-121685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:38:09.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:38:09.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:38:09.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:38:09.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:38:09.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:38:09.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:38:09.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:38:09.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:38:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:38:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.692408 -999.00  +19.40  25.61     29   +1.20 1 1 1 1 1   887    0 18.10 -14.29 ----- 25.6 25.6 144.0 28.7 21.9 -28.7 22.3 -28.2 23.3 -26.9 23.3 -28.7
2025-12-03T18:38:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:38:09.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:38:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.692408
2025-12-03T18:38:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:38:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:38:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:38:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:38:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:38:09.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:37:42', tmtdew=21.44, humidity=23.31, cloud=0.0, wind=31.13, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:37:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:38:09.512 [DEBUG] [Thread-121685] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:38:09.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:38:09.612 [DEBUG] [Thread-121688] [transport.py] [_log()] starting thread (client mode): 0xa2763070
2025-12-03T18:38:09.612 [DEBUG] [Thread-121688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:38:09.627 [DEBUG] [Thread-121688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:38:09.627 [INFO] [Thread-121688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:09.635 [DEBUG] [Thread-121688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] client lang: <none>
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] server lang: <none>
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] kex follows: False
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:38:09.636 [DEBUG] [Thread-121688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:38:09.637 [DEBUG] [Thread-121688] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:38:09.637 [DEBUG] [Thread-121688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:38:09.637 [DEBUG] [Thread-121688] [transport.py] [_log()] Compression: none
2025-12-03T18:38:09.637 [DEBUG] [Thread-121688] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:38:09.692 [DEBUG] [Thread-121688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:38:09.692 [DEBUG] [Thread-121688] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:38:09.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:38:09.693 [DEBUG] [Thread-121688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:38:09.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:38:09.747 [DEBUG] [Thread-121688] [transport.py] [_log()] userauth is OK
2025-12-03T18:38:09.748 [DEBUG] [Thread-121688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:38:09.748 [DEBUG] [Thread-121688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:38:09.748 [DEBUG] [Thread-121688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:38:09.748 [DEBUG] [Thread-121688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:38:09.767 [INFO] [Thread-121688] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:38:09.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:38:09.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:38:10.593 [DEBUG] [Thread-121688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:38:10.593 [DEBUG] [Thread-121688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:38:10.641 [DEBUG] [Thread-121688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:38:10.641 [DEBUG] [Thread-121688] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:38:10.650 [DEBUG] [Thread-121688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:38:10.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:38:10.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:38:10.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:38:10.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:38:10.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:38:10.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:38:10.684 [DEBUG] [Thread-121688] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:38:11.488 [DEBUG] [Thread-121690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:26.533 [DEBUG] [Thread-121691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:40.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:38:40.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:38:40.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:38:41.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 38, 14), 21.43, 23.31, 0.0, 28.41, 19.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:38:41.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:38:14
2025-12-03T18:38:41.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:38:41.559 [DEBUG] [Thread-121692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:41.653 [DEBUG] [Thread-121693] [transport.py] [_log()] starting thread (client mode): 0xa27626e0
2025-12-03T18:38:41.653 [DEBUG] [Thread-121693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:38:41.673 [DEBUG] [Thread-121693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:38:41.673 [INFO] [Thread-121693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:41.676 [DEBUG] [Thread-121693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] client lang: <none>
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] server lang: <none>
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] kex follows: False
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] Compression: none
2025-12-03T18:38:41.677 [DEBUG] [Thread-121693] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:38:41.697 [DEBUG] [Thread-121693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:38:41.697 [DEBUG] [Thread-121693] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:38:41.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:38:41.699 [DEBUG] [Thread-121693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:38:41.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:38:41.700 [DEBUG] [Thread-121693] [transport.py] [_log()] userauth is OK
2025-12-03T18:38:41.701 [DEBUG] [Thread-121693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:38:41.701 [DEBUG] [Thread-121693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:38:41.701 [DEBUG] [Thread-121693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:38:41.701 [DEBUG] [Thread-121693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:38:41.715 [INFO] [Thread-121693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:38:41.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:38:42.479 [DEBUG] [Thread-121693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:38:42.479 [DEBUG] [Thread-121693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:38:42.479 [DEBUG] [Thread-121693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:38:42.521 [DEBUG] [Thread-121693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:38:42.521 [DEBUG] [Thread-121693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:38:42.524 [DEBUG] [Thread-121693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:38:42.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:38:42.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:38:42.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:38:42.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:38:42.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:38:42.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:38:42.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:38:42.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:38:42.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:38:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.693103 -999.00  +19.40  21.02     29   +1.30 1 1 1 1 1   887    0 18.10 -14.74 ----- 21.0 21.0 141.4 25.4 21.9 -28.7 22.3 -28.3 23.2 -26.9 23.2 -28.2
2025-12-03T18:38:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:38:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:38:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.693103
2025-12-03T18:38:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:38:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:38:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:38:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:38:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:38:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:38:14', tmtdew=21.43, humidity=23.31, cloud=0.0, wind=28.41, temperature=19.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:38:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:38:42.548 [DEBUG] [Thread-121693] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:38:42.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:38:42.646 [DEBUG] [Thread-121696] [transport.py] [_log()] starting thread (client mode): 0xa51ba590
2025-12-03T18:38:42.646 [DEBUG] [Thread-121696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:38:42.663 [DEBUG] [Thread-121696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:38:42.663 [INFO] [Thread-121696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:42.671 [DEBUG] [Thread-121696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] client lang: <none>
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] server lang: <none>
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] kex follows: False
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:38:42.672 [DEBUG] [Thread-121696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:38:42.673 [DEBUG] [Thread-121696] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:38:42.673 [DEBUG] [Thread-121696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:38:42.673 [DEBUG] [Thread-121696] [transport.py] [_log()] Compression: none
2025-12-03T18:38:42.673 [DEBUG] [Thread-121696] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:38:42.727 [DEBUG] [Thread-121696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:38:42.728 [DEBUG] [Thread-121696] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:38:42.728 [DEBUG] [Thread-121696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:38:42.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:38:42.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:38:42.786 [DEBUG] [Thread-121696] [transport.py] [_log()] userauth is OK
2025-12-03T18:38:42.786 [DEBUG] [Thread-121696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:38:42.787 [DEBUG] [Thread-121696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:38:42.787 [DEBUG] [Thread-121696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:38:42.787 [DEBUG] [Thread-121696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:38:42.805 [INFO] [Thread-121696] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:38:42.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:38:42.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:38:43.669 [DEBUG] [Thread-121696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:38:43.669 [DEBUG] [Thread-121696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:38:43.718 [DEBUG] [Thread-121696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:38:43.718 [DEBUG] [Thread-121696] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:38:43.727 [DEBUG] [Thread-121696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:38:43.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:38:43.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:38:43.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:38:43.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:38:43.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:38:43.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:38:43.761 [DEBUG] [Thread-121696] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:38:55.838 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:55.839 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:38:56.588 [DEBUG] [Thread-121698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:00.815 [DEBUG] [Thread-121699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:11.626 [DEBUG] [Thread-121700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:13.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:39:13.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:39:13.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:39:14.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 38, 46), 21.29, 23.86, 0.0, 31.37, 19.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:39:14.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:38:46
2025-12-03T18:39:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:39:14.771 [DEBUG] [Thread-121701] [transport.py] [_log()] starting thread (client mode): 0xa277ad10
2025-12-03T18:39:14.771 [DEBUG] [Thread-121701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:39:14.792 [DEBUG] [Thread-121701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:39:14.792 [INFO] [Thread-121701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:39:14.795 [DEBUG] [Thread-121701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] client lang: <none>
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] server lang: <none>
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] kex follows: False
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] Compression: none
2025-12-03T18:39:14.796 [DEBUG] [Thread-121701] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:39:14.813 [DEBUG] [Thread-121701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:39:14.813 [DEBUG] [Thread-121701] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:39:14.814 [DEBUG] [Thread-121701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:39:14.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:39:14.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:39:14.815 [DEBUG] [Thread-121701] [transport.py] [_log()] userauth is OK
2025-12-03T18:39:14.815 [DEBUG] [Thread-121701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:39:14.815 [DEBUG] [Thread-121701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:39:14.815 [DEBUG] [Thread-121701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:39:14.815 [DEBUG] [Thread-121701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:39:14.830 [INFO] [Thread-121701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:39:14.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:39:15.482 [DEBUG] [Thread-121701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:39:15.482 [DEBUG] [Thread-121701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:39:15.483 [DEBUG] [Thread-121701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:39:15.523 [DEBUG] [Thread-121701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:39:15.523 [DEBUG] [Thread-121701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:39:15.526 [DEBUG] [Thread-121701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:39:15.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:39:15.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:39:15.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:39:15.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:39:15.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:39:15.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:39:15.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:39:15.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.693450 -999.00  +19.40  19.16     29   +1.30 1 1 1 1 1   887    0 18.33 -14.35 ----- 19.2 19.2 155.0 29.0 21.9 -29.0 22.2 -28.8 23.2 -27.5 23.3 -28.6
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.693450
2025-12-03T18:39:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:39:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:39:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:39:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:39:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:39:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:38:46', tmtdew=21.29, humidity=23.86, cloud=0.0, wind=31.37, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:38:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:39:15.552 [DEBUG] [Thread-121701] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:39:15.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:39:15.643 [DEBUG] [Thread-121704] [transport.py] [_log()] starting thread (client mode): 0xa51ba470
2025-12-03T18:39:15.643 [DEBUG] [Thread-121704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:39:15.658 [DEBUG] [Thread-121704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:39:15.658 [INFO] [Thread-121704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:39:15.665 [DEBUG] [Thread-121704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:39:15.665 [DEBUG] [Thread-121704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:39:15.665 [DEBUG] [Thread-121704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:39:15.665 [DEBUG] [Thread-121704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] client lang: <none>
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] server lang: <none>
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] kex follows: False
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] Compression: none
2025-12-03T18:39:15.666 [DEBUG] [Thread-121704] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:39:15.724 [DEBUG] [Thread-121704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:39:15.724 [DEBUG] [Thread-121704] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:39:15.725 [DEBUG] [Thread-121704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:39:15.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:39:15.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:39:15.779 [DEBUG] [Thread-121704] [transport.py] [_log()] userauth is OK
2025-12-03T18:39:15.779 [DEBUG] [Thread-121704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:39:15.780 [DEBUG] [Thread-121704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:39:15.780 [DEBUG] [Thread-121704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:39:15.780 [DEBUG] [Thread-121704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:39:15.802 [INFO] [Thread-121704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:39:15.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:39:15.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:39:16.639 [DEBUG] [Thread-121704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:39:16.639 [DEBUG] [Thread-121704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:39:16.687 [DEBUG] [Thread-121704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:39:16.687 [DEBUG] [Thread-121704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:39:16.696 [DEBUG] [Thread-121704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:39:16.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:39:16.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:39:16.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:39:16.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:39:16.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:39:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:39:16.730 [DEBUG] [Thread-121704] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:39:26.656 [DEBUG] [Thread-121706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:41.708 [DEBUG] [Thread-121707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:39:46.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:39:46.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:39:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 39, 18), 21.22, 23.97, 0.0, 29.57, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:39:47.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:39:18
2025-12-03T18:39:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:39:47.715 [DEBUG] [Thread-121708] [transport.py] [_log()] starting thread (client mode): 0xa27507f0
2025-12-03T18:39:47.715 [DEBUG] [Thread-121708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:39:47.735 [DEBUG] [Thread-121708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:39:47.735 [INFO] [Thread-121708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] client lang: <none>
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] server lang: <none>
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] kex follows: False
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:39:47.738 [DEBUG] [Thread-121708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:39:47.739 [DEBUG] [Thread-121708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:39:47.739 [DEBUG] [Thread-121708] [transport.py] [_log()] Compression: none
2025-12-03T18:39:47.739 [DEBUG] [Thread-121708] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:39:47.753 [DEBUG] [Thread-121708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:39:47.754 [DEBUG] [Thread-121708] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:39:47.754 [DEBUG] [Thread-121708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:39:47.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:39:47.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:39:47.796 [DEBUG] [Thread-121708] [transport.py] [_log()] userauth is OK
2025-12-03T18:39:47.796 [DEBUG] [Thread-121708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:39:47.796 [DEBUG] [Thread-121708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:39:47.796 [DEBUG] [Thread-121708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:39:47.796 [DEBUG] [Thread-121708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:39:47.814 [INFO] [Thread-121708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:39:47.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:39:48.614 [DEBUG] [Thread-121708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:39:48.614 [DEBUG] [Thread-121708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:39:48.615 [DEBUG] [Thread-121708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:39:48.656 [DEBUG] [Thread-121708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:39:48.656 [DEBUG] [Thread-121708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:39:48.658 [DEBUG] [Thread-121708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:39:48.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:39:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:39:48.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:39:48.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:39:48.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:39:48.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:39:48.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.693797 -999.00  +19.30  20.62     30   +1.30 1 1 1 1 1   887    0 18.46 -14.73 ----- 20.6 20.6 166.6 28.3 21.8 -29.2 22.1 -28.0 23.1 -26.9 23.2 -28.3
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.693797
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:39:48.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:39:18', tmtdew=21.22, humidity=23.97, cloud=0.0, wind=29.57, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:39:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:39:48.677 [DEBUG] [Thread-121708] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:39:48.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:39:48.765 [DEBUG] [Thread-121711] [transport.py] [_log()] starting thread (client mode): 0xa2751e10
2025-12-03T18:39:48.765 [DEBUG] [Thread-121711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:39:48.780 [DEBUG] [Thread-121711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:39:48.780 [INFO] [Thread-121711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] client lang: <none>
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] server lang: <none>
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] kex follows: False
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:39:48.790 [DEBUG] [Thread-121711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:39:48.791 [DEBUG] [Thread-121711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:39:48.791 [DEBUG] [Thread-121711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:39:48.791 [DEBUG] [Thread-121711] [transport.py] [_log()] Compression: none
2025-12-03T18:39:48.791 [DEBUG] [Thread-121711] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:39:48.847 [DEBUG] [Thread-121711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:39:48.848 [DEBUG] [Thread-121711] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:39:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:39:48.848 [DEBUG] [Thread-121711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:39:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:39:48.903 [DEBUG] [Thread-121711] [transport.py] [_log()] userauth is OK
2025-12-03T18:39:48.903 [DEBUG] [Thread-121711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:39:48.903 [DEBUG] [Thread-121711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:39:48.903 [DEBUG] [Thread-121711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:39:48.904 [DEBUG] [Thread-121711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:39:48.922 [INFO] [Thread-121711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:39:48.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:39:48.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:39:49.766 [DEBUG] [Thread-121711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:39:49.766 [DEBUG] [Thread-121711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:39:49.813 [DEBUG] [Thread-121711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:39:49.814 [DEBUG] [Thread-121711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:39:49.822 [DEBUG] [Thread-121711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:39:49.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:39:49.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:39:49.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:39:49.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:39:49.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:39:49.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:39:49.853 [DEBUG] [Thread-121711] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:39:55.996 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:55.997 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:39:56.739 [DEBUG] [Thread-121713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:00.860 [DEBUG] [Thread-121714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:11.791 [DEBUG] [Thread-121715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:19.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:40:19.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:40:19.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:40:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 39, 50), 21.25, 23.94, 0.0, 27.61, 19.69, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:40:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:39:50
2025-12-03T18:40:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:40:20.818 [DEBUG] [Thread-121716] [transport.py] [_log()] starting thread (client mode): 0xa27790f0
2025-12-03T18:40:20.818 [DEBUG] [Thread-121716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:40:20.838 [DEBUG] [Thread-121716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:40:20.838 [INFO] [Thread-121716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:40:20.841 [DEBUG] [Thread-121716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:40:20.841 [DEBUG] [Thread-121716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:40:20.841 [DEBUG] [Thread-121716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] client lang: <none>
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] server lang: <none>
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] kex follows: False
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:40:20.842 [DEBUG] [Thread-121716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:40:20.843 [DEBUG] [Thread-121716] [transport.py] [_log()] Compression: none
2025-12-03T18:40:20.843 [DEBUG] [Thread-121716] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:40:20.862 [DEBUG] [Thread-121716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:40:20.863 [DEBUG] [Thread-121716] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:40:20.863 [DEBUG] [Thread-121716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:40:20.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:40:20.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:40:20.865 [DEBUG] [Thread-121716] [transport.py] [_log()] userauth is OK
2025-12-03T18:40:20.865 [DEBUG] [Thread-121716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:40:20.866 [DEBUG] [Thread-121716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:40:20.866 [DEBUG] [Thread-121716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:40:20.866 [DEBUG] [Thread-121716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:40:20.890 [INFO] [Thread-121716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:40:20.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:40:21.524 [DEBUG] [Thread-121716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:40:21.524 [DEBUG] [Thread-121716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:40:21.525 [DEBUG] [Thread-121716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:40:21.565 [DEBUG] [Thread-121716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:40:21.565 [DEBUG] [Thread-121716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:40:21.568 [DEBUG] [Thread-121716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:40:21.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:40:21.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:40:21.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:40:21.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:40:21.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:40:21.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:40:21.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:40:21.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:40:21.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:40:21.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.694144 -999.00  +19.30  17.47     30   +1.30 1 1 1 1 1   887    0 17.82 -15.91 ----- 17.5 17.5 165.8 27.9 21.8 -28.6 22.2 -28.6 23.0 -26.5 23.2 -28.0
2025-12-03T18:40:21.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:40:21.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:40:21.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.694144
2025-12-03T18:40:21.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:40:21.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:40:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:40:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:40:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:40:21.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:39:50', tmtdew=21.25, humidity=23.94, cloud=0.0, wind=27.61, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:39:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:40:21.593 [DEBUG] [Thread-121716] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:40:21.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:40:21.686 [DEBUG] [Thread-121719] [transport.py] [_log()] starting thread (client mode): 0xa51b9ba0
2025-12-03T18:40:21.686 [DEBUG] [Thread-121719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:40:21.705 [DEBUG] [Thread-121719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:40:21.705 [INFO] [Thread-121719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:40:21.712 [DEBUG] [Thread-121719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:40:21.712 [DEBUG] [Thread-121719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:40:21.712 [DEBUG] [Thread-121719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:40:21.712 [DEBUG] [Thread-121719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] client lang: <none>
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] server lang: <none>
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] kex follows: False
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] Compression: none
2025-12-03T18:40:21.713 [DEBUG] [Thread-121719] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:40:21.770 [DEBUG] [Thread-121719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:40:21.771 [DEBUG] [Thread-121719] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:40:21.771 [DEBUG] [Thread-121719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:40:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:40:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:40:21.827 [DEBUG] [Thread-121719] [transport.py] [_log()] userauth is OK
2025-12-03T18:40:21.828 [DEBUG] [Thread-121719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:40:21.828 [DEBUG] [Thread-121719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:40:21.828 [DEBUG] [Thread-121719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:40:21.828 [DEBUG] [Thread-121719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:40:21.847 [INFO] [Thread-121719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:40:21.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:40:21.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:40:22.681 [DEBUG] [Thread-121719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:40:22.681 [DEBUG] [Thread-121719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:40:22.729 [DEBUG] [Thread-121719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:40:22.729 [DEBUG] [Thread-121719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:40:22.737 [DEBUG] [Thread-121719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:40:22.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:40:22.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:40:22.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:40:22.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:40:22.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:40:22.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:40:22.768 [DEBUG] [Thread-121719] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:40:26.820 [DEBUG] [Thread-121721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:41.853 [DEBUG] [Thread-121722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:52.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:40:52.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:40:52.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:40:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 40, 22), 21.24, 23.94, 0.0, 27.3, 19.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:40:53.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:40:22
2025-12-03T18:40:53.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:40:53.760 [DEBUG] [Thread-121723] [transport.py] [_log()] starting thread (client mode): 0xa51b96f0
2025-12-03T18:40:53.760 [DEBUG] [Thread-121723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:40:53.780 [DEBUG] [Thread-121723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:40:53.780 [INFO] [Thread-121723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:40:53.783 [DEBUG] [Thread-121723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:40:53.783 [DEBUG] [Thread-121723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:40:53.783 [DEBUG] [Thread-121723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:40:53.783 [DEBUG] [Thread-121723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:53.783 [DEBUG] [Thread-121723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] client lang: <none>
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] server lang: <none>
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] kex follows: False
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] Compression: none
2025-12-03T18:40:53.784 [DEBUG] [Thread-121723] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:40:53.800 [DEBUG] [Thread-121723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:40:53.801 [DEBUG] [Thread-121723] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:40:53.801 [DEBUG] [Thread-121723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:40:53.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:40:53.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:40:53.803 [DEBUG] [Thread-121723] [transport.py] [_log()] userauth is OK
2025-12-03T18:40:53.803 [DEBUG] [Thread-121723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:40:53.803 [DEBUG] [Thread-121723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:40:53.803 [DEBUG] [Thread-121723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:40:53.804 [DEBUG] [Thread-121723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:40:53.828 [INFO] [Thread-121723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:40:53.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:40:54.495 [DEBUG] [Thread-121723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:40:54.495 [DEBUG] [Thread-121723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:40:54.496 [DEBUG] [Thread-121723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:40:54.536 [DEBUG] [Thread-121723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:40:54.536 [DEBUG] [Thread-121723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:40:54.539 [DEBUG] [Thread-121723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:40:54.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:40:54.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:40:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:40:54.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:40:54.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:40:54.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:40:54.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:40:54.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:40:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:40:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.694491 -999.00  +19.30  19.86     30   +1.30 1 1 1 1 1   887    0 17.74 -18.36 ----- 19.9 19.9 159.0 26.8 21.8 -29.0 22.1 -28.0 23.0 -26.9 23.2 -28.4
2025-12-03T18:40:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:40:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:40:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.694491
2025-12-03T18:40:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:40:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:40:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:40:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:40:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:40:54.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:40:22', tmtdew=21.24, humidity=23.94, cloud=0.0, wind=27.3, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:40:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:40:54.561 [DEBUG] [Thread-121723] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:40:54.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:40:54.658 [DEBUG] [Thread-121726] [transport.py] [_log()] starting thread (client mode): 0xa514ac50
2025-12-03T18:40:54.658 [DEBUG] [Thread-121726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:40:54.675 [DEBUG] [Thread-121726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:40:54.675 [INFO] [Thread-121726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] client lang: <none>
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] server lang: <none>
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] kex follows: False
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:40:54.682 [DEBUG] [Thread-121726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:40:54.683 [DEBUG] [Thread-121726] [transport.py] [_log()] Compression: none
2025-12-03T18:40:54.683 [DEBUG] [Thread-121726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:40:54.740 [DEBUG] [Thread-121726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:40:54.740 [DEBUG] [Thread-121726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:40:54.740 [DEBUG] [Thread-121726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:40:54.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:40:54.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:40:54.795 [DEBUG] [Thread-121726] [transport.py] [_log()] userauth is OK
2025-12-03T18:40:54.795 [DEBUG] [Thread-121726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:40:54.795 [DEBUG] [Thread-121726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:40:54.795 [DEBUG] [Thread-121726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:40:54.795 [DEBUG] [Thread-121726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:40:54.813 [INFO] [Thread-121726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:40:54.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:40:54.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:40:55.664 [DEBUG] [Thread-121726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:40:55.664 [DEBUG] [Thread-121726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:40:55.712 [DEBUG] [Thread-121726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:40:55.713 [DEBUG] [Thread-121726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:40:55.721 [DEBUG] [Thread-121726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:40:55.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:40:55.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:40:55.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:40:55.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:40:55.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:40:55.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:40:55.753 [DEBUG] [Thread-121726] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:40:56.144 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:56.144 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:40:56.882 [DEBUG] [Thread-121728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:00.912 [DEBUG] [Thread-121729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:11.931 [DEBUG] [Thread-121730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:25.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:41:25.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:41:25.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:41:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 40, 54), 21.13, 24.05, 0.0, 30.24, 19.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:41:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:40:54
2025-12-03T18:41:26.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:41:26.742 [DEBUG] [Thread-121731] [transport.py] [_log()] starting thread (client mode): 0xa51b8310
2025-12-03T18:41:26.742 [DEBUG] [Thread-121731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:41:26.763 [DEBUG] [Thread-121731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:41:26.763 [INFO] [Thread-121731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] client lang: <none>
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] server lang: <none>
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] kex follows: False
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] Compression: none
2025-12-03T18:41:26.766 [DEBUG] [Thread-121731] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:41:26.784 [DEBUG] [Thread-121731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:41:26.784 [DEBUG] [Thread-121731] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:41:26.784 [DEBUG] [Thread-121731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:41:26.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:41:26.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:41:26.785 [DEBUG] [Thread-121731] [transport.py] [_log()] userauth is OK
2025-12-03T18:41:26.785 [DEBUG] [Thread-121731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:41:26.785 [DEBUG] [Thread-121731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:41:26.785 [DEBUG] [Thread-121731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:41:26.785 [DEBUG] [Thread-121731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:41:26.795 [INFO] [Thread-121731] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:41:26.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:41:26.961 [DEBUG] [Thread-121733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:27.440 [DEBUG] [Thread-121731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:41:27.441 [DEBUG] [Thread-121731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:41:27.441 [DEBUG] [Thread-121731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:41:27.482 [DEBUG] [Thread-121731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:41:27.482 [DEBUG] [Thread-121731] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:41:27.484 [DEBUG] [Thread-121731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:41:27.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:41:27.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:41:27.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:41:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:41:27.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:41:27.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:41:27.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.694839 -999.00  +19.30  27.68     30   +1.40 1 1 1 1 1   887    0 17.93 -20.55 ----- 27.7 27.7 138.8 31.4 21.8 -28.8 22.1 -28.6 23.0 -27.1 23.0 -28.4
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.694839
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:41:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:41:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:41:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:41:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:41:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:40:54', tmtdew=21.13, humidity=24.05, cloud=0.0, wind=30.24, temperature=19.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:40:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:41:27.504 [DEBUG] [Thread-121731] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:41:27.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:41:27.590 [DEBUG] [Thread-121735] [transport.py] [_log()] starting thread (client mode): 0xa2763130
2025-12-03T18:41:27.590 [DEBUG] [Thread-121735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:41:27.605 [DEBUG] [Thread-121735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:41:27.605 [INFO] [Thread-121735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] client lang: <none>
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] server lang: <none>
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] kex follows: False
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] Compression: none
2025-12-03T18:41:27.615 [DEBUG] [Thread-121735] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:41:27.673 [DEBUG] [Thread-121735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:41:27.674 [DEBUG] [Thread-121735] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:41:27.674 [DEBUG] [Thread-121735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:41:27.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:41:27.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:41:27.733 [DEBUG] [Thread-121735] [transport.py] [_log()] userauth is OK
2025-12-03T18:41:27.733 [DEBUG] [Thread-121735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:41:27.733 [DEBUG] [Thread-121735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:41:27.733 [DEBUG] [Thread-121735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:41:27.733 [DEBUG] [Thread-121735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:41:27.749 [INFO] [Thread-121735] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:41:27.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:41:27.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:41:28.607 [DEBUG] [Thread-121735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:41:28.607 [DEBUG] [Thread-121735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:41:28.656 [DEBUG] [Thread-121735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:41:28.656 [DEBUG] [Thread-121735] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:41:28.665 [DEBUG] [Thread-121735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:41:28.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:41:28.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:41:28.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:41:28.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:41:28.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:41:28.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:41:28.699 [DEBUG] [Thread-121735] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:41:41.987 [DEBUG] [Thread-121737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:56.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:56.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:57.033 [DEBUG] [Thread-121738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:41:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:41:58.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:41:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:41:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 41, 26), 21.11, 24.04, 0.0, 24.46, 19.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:41:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:41:26
2025-12-03T18:41:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:41:59.759 [DEBUG] [Thread-121739] [transport.py] [_log()] starting thread (client mode): 0xa51bb1c0
2025-12-03T18:41:59.759 [DEBUG] [Thread-121739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:41:59.782 [DEBUG] [Thread-121739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:41:59.782 [INFO] [Thread-121739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] client lang: <none>
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] server lang: <none>
2025-12-03T18:41:59.785 [DEBUG] [Thread-121739] [transport.py] [_log()] kex follows: False
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] Compression: none
2025-12-03T18:41:59.786 [DEBUG] [Thread-121739] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:41:59.801 [DEBUG] [Thread-121739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:41:59.801 [DEBUG] [Thread-121739] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:41:59.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:41:59.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] userauth is OK
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:41:59.802 [DEBUG] [Thread-121739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:41:59.812 [INFO] [Thread-121739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:41:59.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:42:00.488 [DEBUG] [Thread-121739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:42:00.488 [DEBUG] [Thread-121739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:42:00.488 [DEBUG] [Thread-121739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:42:00.528 [DEBUG] [Thread-121739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:42:00.528 [DEBUG] [Thread-121739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:42:00.531 [DEBUG] [Thread-121739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:42:00.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:42:00.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:42:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:42:00.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:42:00.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:42:00.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:42:00.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.695186 -999.00  +19.30  19.24     30   +1.30 1 1 1 1 1   887    0 17.47 -23.56 ----- 19.2 19.2 141.4 31.2 21.7 -28.5 22.1 -28.0 22.9 -26.5 23.0 -28.4
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.695186
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:42:00.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:41:26', tmtdew=21.11, humidity=24.04, cloud=0.0, wind=24.46, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:41:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:42:00.548 [DEBUG] [Thread-121739] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:42:00.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:42:00.636 [DEBUG] [Thread-121742] [transport.py] [_log()] starting thread (client mode): 0xa2753130
2025-12-03T18:42:00.636 [DEBUG] [Thread-121742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:42:00.653 [DEBUG] [Thread-121742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:42:00.654 [INFO] [Thread-121742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:00.661 [DEBUG] [Thread-121742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] client lang: <none>
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] server lang: <none>
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] kex follows: False
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] Compression: none
2025-12-03T18:42:00.662 [DEBUG] [Thread-121742] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:42:00.719 [DEBUG] [Thread-121742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:42:00.720 [DEBUG] [Thread-121742] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:42:00.720 [DEBUG] [Thread-121742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:42:00.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:42:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:42:00.776 [DEBUG] [Thread-121742] [transport.py] [_log()] userauth is OK
2025-12-03T18:42:00.776 [DEBUG] [Thread-121742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:42:00.776 [DEBUG] [Thread-121742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:42:00.776 [DEBUG] [Thread-121742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:42:00.777 [DEBUG] [Thread-121742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:42:00.800 [INFO] [Thread-121742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:42:00.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:42:00.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:42:00.957 [DEBUG] [Thread-121744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:01.700 [DEBUG] [Thread-121742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:42:01.700 [DEBUG] [Thread-121742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:42:01.748 [DEBUG] [Thread-121742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:42:01.748 [DEBUG] [Thread-121742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:42:01.757 [DEBUG] [Thread-121742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:42:01.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:42:01.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:42:01.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:42:01.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:42:01.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:42:01.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:42:01.792 [DEBUG] [Thread-121742] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:42:12.061 [DEBUG] [Thread-121745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:27.105 [DEBUG] [Thread-121746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:31.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:42:31.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:42:31.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:42:32.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 41, 58), 20.99, 24.15, 0.0, 28.27, 19.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:42:32.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:41:58
2025-12-03T18:42:32.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:42:32.822 [DEBUG] [Thread-121747] [transport.py] [_log()] starting thread (client mode): 0xa51bb490
2025-12-03T18:42:32.822 [DEBUG] [Thread-121747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:42:32.842 [DEBUG] [Thread-121747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:42:32.842 [INFO] [Thread-121747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] client lang: <none>
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] server lang: <none>
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] kex follows: False
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] Compression: none
2025-12-03T18:42:32.846 [DEBUG] [Thread-121747] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:42:32.870 [DEBUG] [Thread-121747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:42:32.871 [DEBUG] [Thread-121747] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:42:32.871 [DEBUG] [Thread-121747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:42:32.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:42:32.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:42:32.873 [DEBUG] [Thread-121747] [transport.py] [_log()] userauth is OK
2025-12-03T18:42:32.873 [DEBUG] [Thread-121747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:42:32.874 [DEBUG] [Thread-121747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:42:32.874 [DEBUG] [Thread-121747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:42:32.874 [DEBUG] [Thread-121747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:42:32.898 [INFO] [Thread-121747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:42:32.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:42:33.549 [DEBUG] [Thread-121747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:42:33.549 [DEBUG] [Thread-121747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:42:33.550 [DEBUG] [Thread-121747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:42:33.590 [DEBUG] [Thread-121747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:42:33.590 [DEBUG] [Thread-121747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:42:33.593 [DEBUG] [Thread-121747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:42:33.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:42:33.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:42:33.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:42:33.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:42:33.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:42:33.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:42:33.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:42:33.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.695533 -999.00  +19.20  16.31     30   +1.40 1 1 1 1 1   887    0 17.33 -26.37 ----- 16.3 16.3 140.8 22.5 21.7 -28.6 22.1 -28.3 23.0 -26.5 23.1 -27.7
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.695533
2025-12-03T18:42:33.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:42:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:42:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:42:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:42:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:42:33.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:41:58', tmtdew=20.99, humidity=24.15, cloud=0.0, wind=28.27, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:41:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:42:33.614 [DEBUG] [Thread-121747] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:42:33.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:42:33.711 [DEBUG] [Thread-121750] [transport.py] [_log()] starting thread (client mode): 0xa2728130
2025-12-03T18:42:33.711 [DEBUG] [Thread-121750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:42:33.726 [DEBUG] [Thread-121750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:42:33.726 [INFO] [Thread-121750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:33.734 [DEBUG] [Thread-121750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] client lang: <none>
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] server lang: <none>
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] kex follows: False
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] Compression: none
2025-12-03T18:42:33.735 [DEBUG] [Thread-121750] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:42:33.791 [DEBUG] [Thread-121750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:42:33.792 [DEBUG] [Thread-121750] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:42:33.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:42:33.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:42:33.793 [DEBUG] [Thread-121750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:42:33.847 [DEBUG] [Thread-121750] [transport.py] [_log()] userauth is OK
2025-12-03T18:42:33.848 [DEBUG] [Thread-121750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:42:33.848 [DEBUG] [Thread-121750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:42:33.848 [DEBUG] [Thread-121750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:42:33.848 [DEBUG] [Thread-121750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:42:33.866 [INFO] [Thread-121750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:42:33.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:42:33.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:42:34.680 [DEBUG] [Thread-121750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:42:34.680 [DEBUG] [Thread-121750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:42:34.727 [DEBUG] [Thread-121750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:42:34.728 [DEBUG] [Thread-121750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:42:34.737 [DEBUG] [Thread-121750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:42:34.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:42:34.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:42:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:42:34.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:42:34.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:42:34.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:42:34.771 [DEBUG] [Thread-121750] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:42:42.135 [DEBUG] [Thread-121752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:56.433 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:56.434 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:42:57.184 [DEBUG] [Thread-121753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:01.017 [DEBUG] [Thread-121754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:04.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:43:04.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:43:04.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:43:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 43, 2), 21.03, 24.1, 0.0, 26.89, 19.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:43:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:43:02
2025-12-03T18:43:05.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:43:05.781 [DEBUG] [Thread-121755] [transport.py] [_log()] starting thread (client mode): 0xa51baaa0
2025-12-03T18:43:05.781 [DEBUG] [Thread-121755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:43:05.801 [DEBUG] [Thread-121755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:43:05.802 [INFO] [Thread-121755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:43:05.804 [DEBUG] [Thread-121755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] client lang: <none>
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] server lang: <none>
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] kex follows: False
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] Compression: none
2025-12-03T18:43:05.805 [DEBUG] [Thread-121755] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:43:05.820 [DEBUG] [Thread-121755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:43:05.821 [DEBUG] [Thread-121755] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:43:05.821 [DEBUG] [Thread-121755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:43:05.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:43:05.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:43:05.822 [DEBUG] [Thread-121755] [transport.py] [_log()] userauth is OK
2025-12-03T18:43:05.822 [DEBUG] [Thread-121755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:43:05.822 [DEBUG] [Thread-121755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:43:05.822 [DEBUG] [Thread-121755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:43:05.822 [DEBUG] [Thread-121755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:43:05.837 [INFO] [Thread-121755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:43:05.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:43:06.469 [DEBUG] [Thread-121755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:43:06.469 [DEBUG] [Thread-121755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:43:06.469 [DEBUG] [Thread-121755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:43:06.511 [DEBUG] [Thread-121755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:43:06.511 [DEBUG] [Thread-121755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:43:06.513 [DEBUG] [Thread-121755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:43:06.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:43:06.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:43:06.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:43:06.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:43:06.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:43:06.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:43:06.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:43:06.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.695880 -999.00  +19.30  23.43     30   +1.40 1 1 1 1 1   887    0 17.37 -25.10 ----- 23.4 23.4 137.0 27.1 21.7 -28.7 22.2 -27.9 23.0 -26.4 23.1 -28.6
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.695880
2025-12-03T18:43:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:43:06.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:43:02', tmtdew=21.03, humidity=24.1, cloud=0.0, wind=26.89, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:42:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:43:06.538 [DEBUG] [Thread-121755] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:43:06.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:43:06.626 [DEBUG] [Thread-121758] [transport.py] [_log()] starting thread (client mode): 0xa2752410
2025-12-03T18:43:06.626 [DEBUG] [Thread-121758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:43:06.640 [DEBUG] [Thread-121758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:43:06.640 [INFO] [Thread-121758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] client lang: <none>
2025-12-03T18:43:06.648 [DEBUG] [Thread-121758] [transport.py] [_log()] server lang: <none>
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] kex follows: False
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] Compression: none
2025-12-03T18:43:06.649 [DEBUG] [Thread-121758] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:43:06.707 [DEBUG] [Thread-121758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:43:06.707 [DEBUG] [Thread-121758] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:43:06.708 [DEBUG] [Thread-121758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:43:06.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:43:06.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:43:06.763 [DEBUG] [Thread-121758] [transport.py] [_log()] userauth is OK
2025-12-03T18:43:06.764 [DEBUG] [Thread-121758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:43:06.764 [DEBUG] [Thread-121758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:43:06.764 [DEBUG] [Thread-121758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:43:06.764 [DEBUG] [Thread-121758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:43:06.782 [INFO] [Thread-121758] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:43:06.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:43:06.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:43:07.635 [DEBUG] [Thread-121758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:43:07.636 [DEBUG] [Thread-121758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:43:07.684 [DEBUG] [Thread-121758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:43:07.684 [DEBUG] [Thread-121758] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:43:07.693 [DEBUG] [Thread-121758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:43:07.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:43:07.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:43:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:43:07.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:43:07.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:43:07.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:43:07.728 [DEBUG] [Thread-121758] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:43:12.214 [DEBUG] [Thread-121760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:27.256 [DEBUG] [Thread-121761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:37.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:43:37.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:43:37.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:43:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 43, 34), 21.01, 24.14, 0.0, 23.5, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:43:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:43:34
2025-12-03T18:43:38.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:43:38.718 [DEBUG] [Thread-121762] [transport.py] [_log()] starting thread (client mode): 0xa2751ab0
2025-12-03T18:43:38.718 [DEBUG] [Thread-121762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:43:38.737 [DEBUG] [Thread-121762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:43:38.737 [INFO] [Thread-121762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:43:38.740 [DEBUG] [Thread-121762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] client lang: <none>
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] server lang: <none>
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] kex follows: False
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] Compression: none
2025-12-03T18:43:38.741 [DEBUG] [Thread-121762] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:43:38.760 [DEBUG] [Thread-121762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:43:38.761 [DEBUG] [Thread-121762] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:43:38.761 [DEBUG] [Thread-121762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:43:38.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:43:38.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:43:38.763 [DEBUG] [Thread-121762] [transport.py] [_log()] userauth is OK
2025-12-03T18:43:38.763 [DEBUG] [Thread-121762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:43:38.763 [DEBUG] [Thread-121762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:43:38.763 [DEBUG] [Thread-121762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:43:38.763 [DEBUG] [Thread-121762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:43:38.798 [INFO] [Thread-121762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:43:38.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:43:39.424 [DEBUG] [Thread-121762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:43:39.424 [DEBUG] [Thread-121762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:43:39.424 [DEBUG] [Thread-121762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:43:39.466 [DEBUG] [Thread-121762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:43:39.466 [DEBUG] [Thread-121762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:43:39.468 [DEBUG] [Thread-121762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:43:39.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:43:39.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:43:39.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:43:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:43:39.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:43:39.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:43:39.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.696228 -999.00  +19.40  18.04     30   +1.40 1 1 1 1 1   887    0 17.60 -26.57 ----- 18.0 18.0 162.2 27.5 21.7 -28.6 22.1 -28.1 23.0 -27.3 23.0 -28.6
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.696228
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:43:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:43:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:43:34', tmtdew=21.01, humidity=24.14, cloud=0.0, wind=23.5, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:42:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:43:39.487 [DEBUG] [Thread-121762] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:43:39.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:43:39.573 [DEBUG] [Thread-121765] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T18:43:39.573 [DEBUG] [Thread-121765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:43:39.589 [DEBUG] [Thread-121765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:43:39.589 [INFO] [Thread-121765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:43:39.596 [DEBUG] [Thread-121765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] client lang: <none>
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] server lang: <none>
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] kex follows: False
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] Compression: none
2025-12-03T18:43:39.597 [DEBUG] [Thread-121765] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:43:39.654 [DEBUG] [Thread-121765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:43:39.654 [DEBUG] [Thread-121765] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:43:39.655 [DEBUG] [Thread-121765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:43:39.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:43:39.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:43:39.716 [DEBUG] [Thread-121765] [transport.py] [_log()] userauth is OK
2025-12-03T18:43:39.716 [DEBUG] [Thread-121765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:43:39.716 [DEBUG] [Thread-121765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:43:39.716 [DEBUG] [Thread-121765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:43:39.716 [DEBUG] [Thread-121765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:43:39.731 [INFO] [Thread-121765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:43:39.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:43:39.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:43:40.568 [DEBUG] [Thread-121765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:43:40.568 [DEBUG] [Thread-121765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:43:40.616 [DEBUG] [Thread-121765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:43:40.616 [DEBUG] [Thread-121765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:43:40.624 [DEBUG] [Thread-121765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:43:40.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:43:40.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:43:40.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:43:40.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:43:40.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:43:40.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:43:40.657 [DEBUG] [Thread-121765] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:43:42.287 [DEBUG] [Thread-121767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:56.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:56.575 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:43:57.325 [DEBUG] [Thread-121768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:01.075 [DEBUG] [Thread-121769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:10.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:44:10.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:44:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:44:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 44, 6), 20.97, 24.2, 0.0, 21.26, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:44:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:44:06
2025-12-03T18:44:11.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:44:11.639 [DEBUG] [Thread-121770] [transport.py] [_log()] starting thread (client mode): 0xa277bf10
2025-12-03T18:44:11.639 [DEBUG] [Thread-121770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:44:11.658 [DEBUG] [Thread-121770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:44:11.658 [INFO] [Thread-121770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:44:11.661 [DEBUG] [Thread-121770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:44:11.661 [DEBUG] [Thread-121770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] client lang: <none>
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] server lang: <none>
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] kex follows: False
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] Compression: none
2025-12-03T18:44:11.662 [DEBUG] [Thread-121770] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:44:11.680 [DEBUG] [Thread-121770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:44:11.680 [DEBUG] [Thread-121770] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:44:11.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:44:11.681 [DEBUG] [Thread-121770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:44:11.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:44:11.683 [DEBUG] [Thread-121770] [transport.py] [_log()] userauth is OK
2025-12-03T18:44:11.683 [DEBUG] [Thread-121770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:44:11.683 [DEBUG] [Thread-121770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:44:11.683 [DEBUG] [Thread-121770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:44:11.683 [DEBUG] [Thread-121770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:44:11.701 [INFO] [Thread-121770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:44:11.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:44:12.313 [DEBUG] [Thread-121770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:44:12.313 [DEBUG] [Thread-121770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:44:12.313 [DEBUG] [Thread-121770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:44:12.354 [DEBUG] [Thread-121770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:44:12.354 [DEBUG] [Thread-121770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:44:12.356 [DEBUG] [Thread-121772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:12.357 [DEBUG] [Thread-121770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:44:12.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:44:12.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:44:12.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:44:12.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:44:12.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:44:12.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:44:12.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:44:12.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:44:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:44:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.696922 -999.00  +19.30  17.94     29   +1.30 1 1 1 1 1   887    0 17.49 -28.51 ----- 17.9 17.9 167.0 26.8 21.7 -28.7 22.0 -28.3 22.9 -27.1 23.0 -28.2
2025-12-03T18:44:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:44:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:44:12.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.696922
2025-12-03T18:44:12.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:44:12.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:44:12.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:44:12.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:44:12.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:44:12.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:44:06', tmtdew=20.97, humidity=24.2, cloud=0.0, wind=21.26, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:43:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:44:12.382 [DEBUG] [Thread-121770] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:44:12.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:44:12.477 [DEBUG] [Thread-121774] [transport.py] [_log()] starting thread (client mode): 0xa27c9a50
2025-12-03T18:44:12.477 [DEBUG] [Thread-121774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:44:12.492 [DEBUG] [Thread-121774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:44:12.492 [INFO] [Thread-121774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:44:12.499 [DEBUG] [Thread-121774] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:44:12.499 [DEBUG] [Thread-121774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] client lang: <none>
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] server lang: <none>
2025-12-03T18:44:12.500 [DEBUG] [Thread-121774] [transport.py] [_log()] kex follows: False
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] Compression: none
2025-12-03T18:44:12.501 [DEBUG] [Thread-121774] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:44:12.559 [DEBUG] [Thread-121774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:44:12.559 [DEBUG] [Thread-121774] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:44:12.559 [DEBUG] [Thread-121774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:44:12.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:44:12.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:44:12.616 [DEBUG] [Thread-121774] [transport.py] [_log()] userauth is OK
2025-12-03T18:44:12.616 [DEBUG] [Thread-121774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:44:12.616 [DEBUG] [Thread-121774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:44:12.616 [DEBUG] [Thread-121774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:44:12.616 [DEBUG] [Thread-121774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:44:12.638 [INFO] [Thread-121774] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:44:12.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:44:12.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:44:13.462 [DEBUG] [Thread-121774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:44:13.462 [DEBUG] [Thread-121774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:44:13.510 [DEBUG] [Thread-121774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:44:13.511 [DEBUG] [Thread-121774] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:44:13.519 [DEBUG] [Thread-121774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:44:13.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:44:13.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:44:13.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:44:13.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:44:13.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:44:13.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:44:13.554 [DEBUG] [Thread-121774] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:44:27.385 [DEBUG] [Thread-121776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:42.440 [DEBUG] [Thread-121777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:43.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:44:43.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:44:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:44:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 44, 38), 21.04, 24.17, 0.0, 23.64, 19.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:44:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:44:38
2025-12-03T18:44:44.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:44:44.531 [DEBUG] [Thread-121778] [transport.py] [_log()] starting thread (client mode): 0xa2728400
2025-12-03T18:44:44.531 [DEBUG] [Thread-121778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:44:44.551 [DEBUG] [Thread-121778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:44:44.551 [INFO] [Thread-121778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:44:44.554 [DEBUG] [Thread-121778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] client lang: <none>
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] server lang: <none>
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] kex follows: False
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] Compression: none
2025-12-03T18:44:44.555 [DEBUG] [Thread-121778] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:44:44.573 [DEBUG] [Thread-121778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:44:44.574 [DEBUG] [Thread-121778] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:44:44.574 [DEBUG] [Thread-121778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:44:44.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:44:44.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:44:44.576 [DEBUG] [Thread-121778] [transport.py] [_log()] userauth is OK
2025-12-03T18:44:44.576 [DEBUG] [Thread-121778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:44:44.576 [DEBUG] [Thread-121778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:44:44.576 [DEBUG] [Thread-121778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:44:44.577 [DEBUG] [Thread-121778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:44:44.591 [INFO] [Thread-121778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:44:44.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:44:45.234 [DEBUG] [Thread-121778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:44:45.234 [DEBUG] [Thread-121778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:44:45.235 [DEBUG] [Thread-121778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:44:45.276 [DEBUG] [Thread-121778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:44:45.276 [DEBUG] [Thread-121778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:44:45.279 [DEBUG] [Thread-121778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:44:45.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:44:45.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:44:45.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:44:45.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:44:45.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:44:45.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:44:45.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:44:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.697269 -999.00  +19.30  20.69     30   +1.40 1 1 1 1 1   887    0 17.13 -27.36 ----- 20.7 20.7 167.0 23.6 21.6 -28.7 22.0 -27.8 22.9 -26.6 23.0 -28.2
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.697269
2025-12-03T18:44:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:44:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:44:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:44:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:44:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:44:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:44:38', tmtdew=21.04, humidity=24.17, cloud=0.0, wind=23.64, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:44:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:44:45.305 [DEBUG] [Thread-121778] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:44:45.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:44:45.400 [DEBUG] [Thread-121781] [transport.py] [_log()] starting thread (client mode): 0xa51486d0
2025-12-03T18:44:45.400 [DEBUG] [Thread-121781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:44:45.415 [DEBUG] [Thread-121781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:44:45.415 [INFO] [Thread-121781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:44:45.422 [DEBUG] [Thread-121781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] client lang: <none>
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] server lang: <none>
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] kex follows: False
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] Compression: none
2025-12-03T18:44:45.423 [DEBUG] [Thread-121781] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:44:45.478 [DEBUG] [Thread-121781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:44:45.479 [DEBUG] [Thread-121781] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:44:45.479 [DEBUG] [Thread-121781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:44:45.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:44:45.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:44:45.535 [DEBUG] [Thread-121781] [transport.py] [_log()] userauth is OK
2025-12-03T18:44:45.536 [DEBUG] [Thread-121781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:44:45.536 [DEBUG] [Thread-121781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:44:45.536 [DEBUG] [Thread-121781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:44:45.536 [DEBUG] [Thread-121781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:44:45.555 [INFO] [Thread-121781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:44:45.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:44:45.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:44:46.423 [DEBUG] [Thread-121781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:44:46.423 [DEBUG] [Thread-121781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:44:46.475 [DEBUG] [Thread-121781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:44:46.475 [DEBUG] [Thread-121781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:44:46.484 [DEBUG] [Thread-121781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:44:46.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:44:46.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:44:46.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:44:46.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:44:46.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:44:46.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:44:46.518 [DEBUG] [Thread-121781] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:44:56.718 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:56.718 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:44:57.468 [DEBUG] [Thread-121783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:01.122 [DEBUG] [Thread-121784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:12.504 [DEBUG] [Thread-121785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:45:16.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:45:16.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:45:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 45, 10), 21.05, 24.14, 0.0, 22.8, 19.48, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:45:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:45:10
2025-12-03T18:45:17.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:45:17.504 [DEBUG] [Thread-121786] [transport.py] [_log()] starting thread (client mode): 0xa2729150
2025-12-03T18:45:17.504 [DEBUG] [Thread-121786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:45:17.524 [DEBUG] [Thread-121786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:45:17.524 [INFO] [Thread-121786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:17.527 [DEBUG] [Thread-121786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] client lang: <none>
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] server lang: <none>
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] kex follows: False
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] Compression: none
2025-12-03T18:45:17.528 [DEBUG] [Thread-121786] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:45:17.545 [DEBUG] [Thread-121786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:45:17.545 [DEBUG] [Thread-121786] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:45:17.546 [DEBUG] [Thread-121786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:45:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:45:17.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:45:17.548 [DEBUG] [Thread-121786] [transport.py] [_log()] userauth is OK
2025-12-03T18:45:17.548 [DEBUG] [Thread-121786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:45:17.548 [DEBUG] [Thread-121786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:45:17.548 [DEBUG] [Thread-121786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:45:17.548 [DEBUG] [Thread-121786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:45:17.572 [INFO] [Thread-121786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:45:17.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:45:18.257 [DEBUG] [Thread-121786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:45:18.258 [DEBUG] [Thread-121786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:45:18.258 [DEBUG] [Thread-121786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:45:18.299 [DEBUG] [Thread-121786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:45:18.299 [DEBUG] [Thread-121786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:45:18.302 [DEBUG] [Thread-121786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:45:18.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:45:18.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:45:18.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:45:18.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:45:18.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:45:18.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:45:18.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.697617 -999.00  +19.30  16.86     30   +1.30 1 1 1 1 1   887    0 17.43 -24.35 ----- 16.9 16.9 148.4 27.4 21.6 -28.6 22.0 -27.9 22.9 -26.2 22.9 -28.3
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:45:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.697617
2025-12-03T18:45:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:45:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:45:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:45:18.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:45:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:45:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:45:10', tmtdew=21.05, humidity=24.14, cloud=0.0, wind=22.8, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:44:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:45:18.328 [DEBUG] [Thread-121786] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:45:18.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:45:18.423 [DEBUG] [Thread-121789] [transport.py] [_log()] starting thread (client mode): 0xa2752080
2025-12-03T18:45:18.423 [DEBUG] [Thread-121789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:45:18.438 [DEBUG] [Thread-121789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:45:18.438 [INFO] [Thread-121789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:45:18.445 [DEBUG] [Thread-121789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:45:18.446 [DEBUG] [Thread-121789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] client lang: <none>
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] server lang: <none>
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] kex follows: False
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:45:18.447 [DEBUG] [Thread-121789] [transport.py] [_log()] Compression: none
2025-12-03T18:45:18.448 [DEBUG] [Thread-121789] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:45:18.504 [DEBUG] [Thread-121789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:45:18.505 [DEBUG] [Thread-121789] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:45:18.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:45:18.506 [DEBUG] [Thread-121789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:45:18.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:45:18.560 [DEBUG] [Thread-121789] [transport.py] [_log()] userauth is OK
2025-12-03T18:45:18.560 [DEBUG] [Thread-121789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:45:18.561 [DEBUG] [Thread-121789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:45:18.561 [DEBUG] [Thread-121789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:45:18.561 [DEBUG] [Thread-121789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:45:18.580 [INFO] [Thread-121789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:45:18.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:45:18.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:45:19.419 [DEBUG] [Thread-121789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:45:19.419 [DEBUG] [Thread-121789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:45:19.467 [DEBUG] [Thread-121789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:45:19.467 [DEBUG] [Thread-121789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:45:19.476 [DEBUG] [Thread-121789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:45:19.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:45:19.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:45:19.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:45:19.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:45:19.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:45:19.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:45:19.512 [DEBUG] [Thread-121789] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:45:27.535 [DEBUG] [Thread-121791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:42.574 [DEBUG] [Thread-121792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:49.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:45:49.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:45:49.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:45:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 45, 42), 21.09, 24.15, 0.0, 20.64, 19.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:45:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:45:42
2025-12-03T18:45:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:45:50.458 [DEBUG] [Thread-121793] [transport.py] [_log()] starting thread (client mode): 0xa5149300
2025-12-03T18:45:50.458 [DEBUG] [Thread-121793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:45:50.481 [DEBUG] [Thread-121793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:45:50.481 [INFO] [Thread-121793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:45:50.485 [DEBUG] [Thread-121793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] client lang: <none>
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] server lang: <none>
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] kex follows: False
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] Compression: none
2025-12-03T18:45:50.486 [DEBUG] [Thread-121793] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:45:50.505 [DEBUG] [Thread-121793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:45:50.506 [DEBUG] [Thread-121793] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:45:50.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:45:50.507 [DEBUG] [Thread-121793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:45:50.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:45:50.508 [DEBUG] [Thread-121793] [transport.py] [_log()] userauth is OK
2025-12-03T18:45:50.508 [DEBUG] [Thread-121793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:45:50.509 [DEBUG] [Thread-121793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:45:50.509 [DEBUG] [Thread-121793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:45:50.509 [DEBUG] [Thread-121793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:45:50.540 [INFO] [Thread-121793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:45:50.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:45:51.173 [DEBUG] [Thread-121793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:45:51.173 [DEBUG] [Thread-121793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:45:51.173 [DEBUG] [Thread-121793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:45:51.214 [DEBUG] [Thread-121793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:45:51.214 [DEBUG] [Thread-121793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:45:51.216 [DEBUG] [Thread-121793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:45:51.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:45:51.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:45:51.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:45:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:45:51.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:45:51.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:45:51.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:45:51.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:45:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:45:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.697964 -999.00  +19.30  17.04     30   +1.30 1 1 1 1 1   887    0 17.77 -26.50 ----- 17.0 17.0 162.6 23.2 21.6 -28.6 22.0 -27.8 22.9 -26.5 23.0 -28.2
2025-12-03T18:45:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:45:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:45:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.697964
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:45:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:45:42', tmtdew=21.09, humidity=24.15, cloud=0.0, wind=20.64, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:45:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:45:51.243 [DEBUG] [Thread-121793] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:45:51.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:45:51.345 [DEBUG] [Thread-121796] [transport.py] [_log()] starting thread (client mode): 0xa27786a0
2025-12-03T18:45:51.345 [DEBUG] [Thread-121796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:45:51.362 [DEBUG] [Thread-121796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:45:51.362 [INFO] [Thread-121796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:45:51.372 [DEBUG] [Thread-121796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] client lang: <none>
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] server lang: <none>
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] kex follows: False
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:45:51.373 [DEBUG] [Thread-121796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:45:51.374 [DEBUG] [Thread-121796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:45:51.374 [DEBUG] [Thread-121796] [transport.py] [_log()] Compression: none
2025-12-03T18:45:51.374 [DEBUG] [Thread-121796] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:45:51.427 [DEBUG] [Thread-121796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:45:51.428 [DEBUG] [Thread-121796] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:45:51.428 [DEBUG] [Thread-121796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:45:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:45:51.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:45:51.483 [DEBUG] [Thread-121796] [transport.py] [_log()] userauth is OK
2025-12-03T18:45:51.484 [DEBUG] [Thread-121796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:45:51.484 [DEBUG] [Thread-121796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:45:51.484 [DEBUG] [Thread-121796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:45:51.484 [DEBUG] [Thread-121796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:45:51.498 [INFO] [Thread-121796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:45:51.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:45:51.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:45:52.338 [DEBUG] [Thread-121796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:45:52.338 [DEBUG] [Thread-121796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:45:52.386 [DEBUG] [Thread-121796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:45:52.386 [DEBUG] [Thread-121796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:45:52.395 [DEBUG] [Thread-121796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:45:52.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:45:52.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:45:52.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:45:52.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:45:52.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:45:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:45:52.429 [DEBUG] [Thread-121796] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:45:56.857 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:56.858 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:45:57.604 [DEBUG] [Thread-121798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:01.157 [DEBUG] [Thread-121799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:12.656 [DEBUG] [Thread-121800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:46:22.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:46:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:46:23.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 46, 14), 21.09, 24.15, 0.0, 23.63, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:46:23.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:46:14
2025-12-03T18:46:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:46:23.413 [DEBUG] [Thread-121801] [transport.py] [_log()] starting thread (client mode): 0xa517f9a0
2025-12-03T18:46:23.413 [DEBUG] [Thread-121801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:46:23.433 [DEBUG] [Thread-121801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:46:23.433 [INFO] [Thread-121801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:46:23.434 [DEBUG] [Thread-121801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] client lang: <none>
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] server lang: <none>
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] kex follows: False
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] Compression: none
2025-12-03T18:46:23.435 [DEBUG] [Thread-121801] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:46:23.446 [DEBUG] [Thread-121801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:46:23.447 [DEBUG] [Thread-121801] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:46:23.447 [DEBUG] [Thread-121801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:46:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:46:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:46:23.449 [DEBUG] [Thread-121801] [transport.py] [_log()] userauth is OK
2025-12-03T18:46:23.449 [DEBUG] [Thread-121801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:46:23.449 [DEBUG] [Thread-121801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:46:23.449 [DEBUG] [Thread-121801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:46:23.449 [DEBUG] [Thread-121801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:46:23.475 [INFO] [Thread-121801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:46:23.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:46:24.118 [DEBUG] [Thread-121801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:46:24.119 [DEBUG] [Thread-121801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:46:24.119 [DEBUG] [Thread-121801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:46:24.160 [DEBUG] [Thread-121801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:46:24.160 [DEBUG] [Thread-121801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:46:24.163 [DEBUG] [Thread-121801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:46:24.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:46:24.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:46:24.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:46:24.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:46:24.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:46:24.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:46:24.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:46:24.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:46:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:46:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.698311 -999.00  +19.30  18.63     30   +1.30 1 1 1 1 1   887    0 17.31 -25.33 ----- 18.6 18.6 162.6 23.0 21.6 -28.5 22.0 -27.7 22.8 -26.7 22.9 -28.4
2025-12-03T18:46:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:46:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:46:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.698311
2025-12-03T18:46:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:46:24.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:46:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:46:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:46:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:46:24.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:46:14', tmtdew=21.09, humidity=24.15, cloud=0.0, wind=23.63, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:45:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:46:24.182 [DEBUG] [Thread-121801] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:46:24.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:46:24.275 [DEBUG] [Thread-121804] [transport.py] [_log()] starting thread (client mode): 0xa517d570
2025-12-03T18:46:24.275 [DEBUG] [Thread-121804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:46:24.290 [DEBUG] [Thread-121804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:46:24.290 [INFO] [Thread-121804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:46:24.297 [DEBUG] [Thread-121804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:46:24.297 [DEBUG] [Thread-121804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] client lang: <none>
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] server lang: <none>
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] kex follows: False
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] Compression: none
2025-12-03T18:46:24.298 [DEBUG] [Thread-121804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:46:24.355 [DEBUG] [Thread-121804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:46:24.355 [DEBUG] [Thread-121804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:46:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:46:24.356 [DEBUG] [Thread-121804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:46:24.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:46:24.417 [DEBUG] [Thread-121804] [transport.py] [_log()] userauth is OK
2025-12-03T18:46:24.417 [DEBUG] [Thread-121804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:46:24.417 [DEBUG] [Thread-121804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:46:24.417 [DEBUG] [Thread-121804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:46:24.417 [DEBUG] [Thread-121804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:46:24.439 [INFO] [Thread-121804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:46:24.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:46:24.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:46:25.270 [DEBUG] [Thread-121804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:46:25.270 [DEBUG] [Thread-121804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:46:25.318 [DEBUG] [Thread-121804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:46:25.318 [DEBUG] [Thread-121804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:46:25.326 [DEBUG] [Thread-121804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:46:25.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:46:25.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:46:25.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:46:25.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:46:25.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:46:25.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:46:25.360 [DEBUG] [Thread-121804] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:46:27.688 [DEBUG] [Thread-121806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:42.731 [DEBUG] [Thread-121807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:55.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:46:55.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:46:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:46:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 46, 46), 21.13, 24.15, 0.0, 29.29, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:46:56.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:46:46
2025-12-03T18:46:56.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:46:56.374 [DEBUG] [Thread-121808] [transport.py] [_log()] starting thread (client mode): 0xa51d12d0
2025-12-03T18:46:56.374 [DEBUG] [Thread-121808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:46:56.394 [DEBUG] [Thread-121808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:46:56.394 [INFO] [Thread-121808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] client lang: <none>
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] server lang: <none>
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] kex follows: False
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:46:56.396 [DEBUG] [Thread-121808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:46:56.397 [DEBUG] [Thread-121808] [transport.py] [_log()] Compression: none
2025-12-03T18:46:56.397 [DEBUG] [Thread-121808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:46:56.408 [DEBUG] [Thread-121808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:46:56.408 [DEBUG] [Thread-121808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:46:56.408 [DEBUG] [Thread-121808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:46:56.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:46:56.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:46:56.409 [DEBUG] [Thread-121808] [transport.py] [_log()] userauth is OK
2025-12-03T18:46:56.409 [DEBUG] [Thread-121808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:46:56.409 [DEBUG] [Thread-121808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:46:56.409 [DEBUG] [Thread-121808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:46:56.409 [DEBUG] [Thread-121808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:46:56.424 [INFO] [Thread-121808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:46:56.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:46:56.999 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:57.000 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:57.011 [DEBUG] [Thread-121808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:46:57.011 [DEBUG] [Thread-121808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:46:57.011 [DEBUG] [Thread-121808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:46:57.052 [DEBUG] [Thread-121808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:46:57.052 [DEBUG] [Thread-121808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:46:57.054 [DEBUG] [Thread-121808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:46:57.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:46:57.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:46:57.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:46:57.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:46:57.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:46:57.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:46:57.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.698659 -999.00  +19.30  18.99     30   +1.40 1 1 1 1 1   887    0 17.19 -26.78 ----- 19.0 19.0 148.2 23.4 21.6 -28.6 22.0 -27.9 22.8 -26.5 22.9 -27.9
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.698659
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:46:57.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:46:46', tmtdew=21.13, humidity=24.15, cloud=0.0, wind=29.29, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:46:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:46:57.071 [DEBUG] [Thread-121808] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:46:57.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:46:57.158 [DEBUG] [Thread-121811] [transport.py] [_log()] starting thread (client mode): 0xa51d2440
2025-12-03T18:46:57.158 [DEBUG] [Thread-121811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:46:57.173 [DEBUG] [Thread-121811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:46:57.173 [INFO] [Thread-121811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] client lang: <none>
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] server lang: <none>
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] kex follows: False
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:46:57.180 [DEBUG] [Thread-121811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:46:57.181 [DEBUG] [Thread-121811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:46:57.181 [DEBUG] [Thread-121811] [transport.py] [_log()] Compression: none
2025-12-03T18:46:57.181 [DEBUG] [Thread-121811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:46:57.243 [DEBUG] [Thread-121811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:46:57.243 [DEBUG] [Thread-121811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:46:57.243 [DEBUG] [Thread-121811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:46:57.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:46:57.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:46:57.299 [DEBUG] [Thread-121811] [transport.py] [_log()] userauth is OK
2025-12-03T18:46:57.299 [DEBUG] [Thread-121811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:46:57.299 [DEBUG] [Thread-121811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:46:57.299 [DEBUG] [Thread-121811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:46:57.299 [DEBUG] [Thread-121811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:46:57.313 [INFO] [Thread-121811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:46:57.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:46:57.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:46:57.764 [DEBUG] [Thread-121813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:46:58.183 [DEBUG] [Thread-121811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:46:58.183 [DEBUG] [Thread-121811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:46:58.231 [DEBUG] [Thread-121811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:46:58.231 [DEBUG] [Thread-121811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:46:58.240 [DEBUG] [Thread-121811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:46:58.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:46:58.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:46:58.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:46:58.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:46:58.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:46:58.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:46:58.276 [DEBUG] [Thread-121811] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:47:01.191 [DEBUG] [Thread-121814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:12.809 [DEBUG] [Thread-121815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:27.843 [DEBUG] [Thread-121816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:28.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:47:28.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:47:28.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:47:28.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 47, 18), 21.13, 24.17, 0.0, 30.1, 19.51, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:47:28.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:47:18
2025-12-03T18:47:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:47:29.247 [DEBUG] [Thread-121817] [transport.py] [_log()] starting thread (client mode): 0xa272a890
2025-12-03T18:47:29.247 [DEBUG] [Thread-121817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:47:29.267 [DEBUG] [Thread-121817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:47:29.267 [INFO] [Thread-121817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:47:29.270 [DEBUG] [Thread-121817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:47:29.270 [DEBUG] [Thread-121817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] client lang: <none>
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] server lang: <none>
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] kex follows: False
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:47:29.271 [DEBUG] [Thread-121817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:47:29.272 [DEBUG] [Thread-121817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:47:29.272 [DEBUG] [Thread-121817] [transport.py] [_log()] Compression: none
2025-12-03T18:47:29.272 [DEBUG] [Thread-121817] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:47:29.286 [DEBUG] [Thread-121817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:47:29.286 [DEBUG] [Thread-121817] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:47:29.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:47:29.287 [DEBUG] [Thread-121817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:47:29.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:47:29.328 [DEBUG] [Thread-121817] [transport.py] [_log()] userauth is OK
2025-12-03T18:47:29.329 [DEBUG] [Thread-121817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:47:29.329 [DEBUG] [Thread-121817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:47:29.329 [DEBUG] [Thread-121817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:47:29.329 [DEBUG] [Thread-121817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:47:29.360 [INFO] [Thread-121817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:47:29.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:47:30.002 [DEBUG] [Thread-121817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:47:30.002 [DEBUG] [Thread-121817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:47:30.002 [DEBUG] [Thread-121817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:47:30.043 [DEBUG] [Thread-121817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:47:30.043 [DEBUG] [Thread-121817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:47:30.046 [DEBUG] [Thread-121817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:47:30.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:47:30.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:47:30.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:47:30.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:47:30.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:47:30.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:47:30.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:47:30.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:47:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:47:30.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.699005 -999.00  +19.40  12.60     30   +1.40 1 1 1 1 1   887    0 17.40 -28.65 ----- 12.6 12.6 157.6 21.4 21.6 -28.8 21.9 -28.2 22.8 -27.2 22.9 -28.1
2025-12-03T18:47:30.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:47:30.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:47:30.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.699005
2025-12-03T18:47:30.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:47:30.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:47:30.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:47:30.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:47:30.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:47:30.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:47:18', tmtdew=21.13, humidity=24.17, cloud=0.0, wind=30.1, temperature=19.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:46:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:47:30.070 [DEBUG] [Thread-121817] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:47:30.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:47:30.170 [DEBUG] [Thread-121820] [transport.py] [_log()] starting thread (client mode): 0xa514ae90
2025-12-03T18:47:30.170 [DEBUG] [Thread-121820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:47:30.185 [DEBUG] [Thread-121820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:47:30.185 [INFO] [Thread-121820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:47:30.192 [DEBUG] [Thread-121820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] client lang: <none>
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] server lang: <none>
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] kex follows: False
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] Compression: none
2025-12-03T18:47:30.193 [DEBUG] [Thread-121820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:47:30.251 [DEBUG] [Thread-121820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:47:30.252 [DEBUG] [Thread-121820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:47:30.252 [DEBUG] [Thread-121820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:47:30.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:47:30.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:47:30.307 [DEBUG] [Thread-121820] [transport.py] [_log()] userauth is OK
2025-12-03T18:47:30.308 [DEBUG] [Thread-121820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:47:30.308 [DEBUG] [Thread-121820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:47:30.308 [DEBUG] [Thread-121820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:47:30.308 [DEBUG] [Thread-121820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:47:30.330 [INFO] [Thread-121820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:47:30.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:47:30.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:47:31.199 [DEBUG] [Thread-121820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:47:31.199 [DEBUG] [Thread-121820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:47:31.246 [DEBUG] [Thread-121820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:47:31.246 [DEBUG] [Thread-121820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:47:31.254 [DEBUG] [Thread-121820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:47:31.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:47:31.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:47:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:47:31.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:47:31.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:47:31.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:47:31.286 [DEBUG] [Thread-121820] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:47:42.872 [DEBUG] [Thread-121822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:57.141 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:57.142 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:47:57.917 [DEBUG] [Thread-121823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:01.233 [DEBUG] [Thread-121824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:48:01.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:48:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:48:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 47, 50), 21.0, 24.2, 0.0, 28.04, 19.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:48:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:47:50
2025-12-03T18:48:02.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:48:02.267 [DEBUG] [Thread-121825] [transport.py] [_log()] starting thread (client mode): 0xa2761c00
2025-12-03T18:48:02.267 [DEBUG] [Thread-121825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:48:02.287 [DEBUG] [Thread-121825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:48:02.287 [INFO] [Thread-121825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:48:02.290 [DEBUG] [Thread-121825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:48:02.290 [DEBUG] [Thread-121825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] client lang: <none>
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] server lang: <none>
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] kex follows: False
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] Compression: none
2025-12-03T18:48:02.291 [DEBUG] [Thread-121825] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:48:02.299 [DEBUG] [Thread-121825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:48:02.299 [DEBUG] [Thread-121825] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:48:02.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:48:02.300 [DEBUG] [Thread-121825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:48:02.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:48:02.341 [DEBUG] [Thread-121825] [transport.py] [_log()] userauth is OK
2025-12-03T18:48:02.341 [DEBUG] [Thread-121825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:48:02.341 [DEBUG] [Thread-121825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:48:02.341 [DEBUG] [Thread-121825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:48:02.341 [DEBUG] [Thread-121825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:48:02.376 [INFO] [Thread-121825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:48:02.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:48:02.992 [DEBUG] [Thread-121825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:48:02.992 [DEBUG] [Thread-121825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:48:02.993 [DEBUG] [Thread-121825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:48:03.034 [DEBUG] [Thread-121825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:48:03.034 [DEBUG] [Thread-121825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:48:03.037 [DEBUG] [Thread-121825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:48:03.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:48:03.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:48:03.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:48:03.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:48:03.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:48:03.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:48:03.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.699353 -999.00  +19.30  15.62     29   +1.20 1 1 1 1 1   887    0 17.80 -29.90 ----- 15.6 15.6 144.9 29.9 21.6 -28.8 21.9 -27.8 22.7 -26.8 22.9 -28.1
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:48:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.699353
2025-12-03T18:48:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:48:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:48:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:48:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:48:03.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:48:03.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:47:50', tmtdew=21.0, humidity=24.2, cloud=0.0, wind=28.04, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:47:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:48:03.062 [DEBUG] [Thread-121825] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:48:03.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:48:03.158 [DEBUG] [Thread-121828] [transport.py] [_log()] starting thread (client mode): 0xa2762440
2025-12-03T18:48:03.158 [DEBUG] [Thread-121828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:48:03.173 [DEBUG] [Thread-121828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:48:03.173 [INFO] [Thread-121828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] client lang: <none>
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] server lang: <none>
2025-12-03T18:48:03.181 [DEBUG] [Thread-121828] [transport.py] [_log()] kex follows: False
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] Compression: none
2025-12-03T18:48:03.182 [DEBUG] [Thread-121828] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:48:03.239 [DEBUG] [Thread-121828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:48:03.240 [DEBUG] [Thread-121828] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:48:03.240 [DEBUG] [Thread-121828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:48:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:48:03.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:48:03.296 [DEBUG] [Thread-121828] [transport.py] [_log()] userauth is OK
2025-12-03T18:48:03.296 [DEBUG] [Thread-121828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:48:03.296 [DEBUG] [Thread-121828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:48:03.296 [DEBUG] [Thread-121828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:48:03.296 [DEBUG] [Thread-121828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:48:03.319 [INFO] [Thread-121828] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:48:03.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:48:03.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:48:04.214 [DEBUG] [Thread-121828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:48:04.214 [DEBUG] [Thread-121828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:48:04.262 [DEBUG] [Thread-121828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:48:04.262 [DEBUG] [Thread-121828] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:48:04.271 [DEBUG] [Thread-121828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:48:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:48:04.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:48:04.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:48:04.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:48:04.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:48:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:48:04.305 [DEBUG] [Thread-121828] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:48:12.944 [DEBUG] [Thread-121830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:27.983 [DEBUG] [Thread-121831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:34.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:48:34.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:48:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:48:35.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 48, 22), 21.05, 24.15, 0.0, 27.76, 19.43, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:48:35.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:48:22
2025-12-03T18:48:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:48:35.291 [DEBUG] [Thread-121832] [transport.py] [_log()] starting thread (client mode): 0xa277ad10
2025-12-03T18:48:35.291 [DEBUG] [Thread-121832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:48:35.311 [DEBUG] [Thread-121832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:48:35.311 [INFO] [Thread-121832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] client lang: <none>
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] server lang: <none>
2025-12-03T18:48:35.314 [DEBUG] [Thread-121832] [transport.py] [_log()] kex follows: False
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] Compression: none
2025-12-03T18:48:35.315 [DEBUG] [Thread-121832] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:48:35.325 [DEBUG] [Thread-121832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:48:35.325 [DEBUG] [Thread-121832] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:48:35.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:48:35.326 [DEBUG] [Thread-121832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:48:35.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:48:35.329 [DEBUG] [Thread-121832] [transport.py] [_log()] userauth is OK
2025-12-03T18:48:35.329 [DEBUG] [Thread-121832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:48:35.329 [DEBUG] [Thread-121832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:48:35.329 [DEBUG] [Thread-121832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:48:35.329 [DEBUG] [Thread-121832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:48:35.352 [INFO] [Thread-121832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:48:35.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:48:35.978 [DEBUG] [Thread-121832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:48:35.978 [DEBUG] [Thread-121832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:48:35.978 [DEBUG] [Thread-121832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:48:36.019 [DEBUG] [Thread-121832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:48:36.019 [DEBUG] [Thread-121832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:48:36.022 [DEBUG] [Thread-121832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:48:36.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:48:36.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:48:36.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:48:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:48:36.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:48:36.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:48:36.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:48:36.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:48:36.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:48:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.699700 -999.00  +19.30  16.58     30   +1.30 1 1 1 1 1   887    0 17.67 -28.79 ----- 16.6 16.6 159.2 29.9 21.6 -28.7 21.8 -27.8 22.7 -26.6 22.8 -28.1
2025-12-03T18:48:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:48:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:48:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.699700
2025-12-03T18:48:36.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:48:36.044 [DEBUG] [Thread-121832] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:48:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:48:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:48:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:48:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:48:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:48:22', tmtdew=21.05, humidity=24.15, cloud=0.0, wind=27.76, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:47:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:48:36.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:48:36.138 [DEBUG] [Thread-121835] [transport.py] [_log()] starting thread (client mode): 0xa2751390
2025-12-03T18:48:36.138 [DEBUG] [Thread-121835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:48:36.153 [DEBUG] [Thread-121835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:48:36.153 [INFO] [Thread-121835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:48:36.160 [DEBUG] [Thread-121835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:48:36.160 [DEBUG] [Thread-121835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] client lang: <none>
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] server lang: <none>
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] kex follows: False
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] Compression: none
2025-12-03T18:48:36.161 [DEBUG] [Thread-121835] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:48:36.219 [DEBUG] [Thread-121835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:48:36.219 [DEBUG] [Thread-121835] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:48:36.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:48:36.220 [DEBUG] [Thread-121835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:48:36.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:48:36.275 [DEBUG] [Thread-121835] [transport.py] [_log()] userauth is OK
2025-12-03T18:48:36.275 [DEBUG] [Thread-121835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:48:36.276 [DEBUG] [Thread-121835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:48:36.276 [DEBUG] [Thread-121835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:48:36.276 [DEBUG] [Thread-121835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:48:36.294 [INFO] [Thread-121835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:48:36.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:48:36.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:48:37.195 [DEBUG] [Thread-121835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:48:37.195 [DEBUG] [Thread-121835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:48:37.243 [DEBUG] [Thread-121835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:48:37.243 [DEBUG] [Thread-121835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:48:37.252 [DEBUG] [Thread-121835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:48:37.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:48:37.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:48:37.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:48:37.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:48:37.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:48:37.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:48:37.286 [DEBUG] [Thread-121835] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:48:43.008 [DEBUG] [Thread-121837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:57.281 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:57.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:48:58.050 [DEBUG] [Thread-121838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:01.275 [DEBUG] [Thread-121839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:07.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:49:07.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:49:07.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:49:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 48, 54), 21.05, 24.05, 0.0, 24.24, 19.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:49:07.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:48:54
2025-12-03T18:49:08.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:49:08.257 [DEBUG] [Thread-121840] [transport.py] [_log()] starting thread (client mode): 0xa2725330
2025-12-03T18:49:08.257 [DEBUG] [Thread-121840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:49:08.276 [DEBUG] [Thread-121840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:49:08.276 [INFO] [Thread-121840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:49:08.279 [DEBUG] [Thread-121840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] client lang: <none>
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] server lang: <none>
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] kex follows: False
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] Compression: none
2025-12-03T18:49:08.280 [DEBUG] [Thread-121840] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:49:08.297 [DEBUG] [Thread-121840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:49:08.297 [DEBUG] [Thread-121840] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:49:08.298 [DEBUG] [Thread-121840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:49:08.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:49:08.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:49:08.299 [DEBUG] [Thread-121840] [transport.py] [_log()] userauth is OK
2025-12-03T18:49:08.300 [DEBUG] [Thread-121840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:49:08.300 [DEBUG] [Thread-121840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:49:08.300 [DEBUG] [Thread-121840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:49:08.300 [DEBUG] [Thread-121840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:49:08.318 [INFO] [Thread-121840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:49:08.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:49:08.928 [DEBUG] [Thread-121840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:49:08.928 [DEBUG] [Thread-121840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:49:08.928 [DEBUG] [Thread-121840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:49:08.969 [DEBUG] [Thread-121840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:49:08.969 [DEBUG] [Thread-121840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:49:08.972 [DEBUG] [Thread-121840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:49:08.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:49:08.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:49:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:49:08.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:49:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:49:08.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:49:08.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.700047 -999.00  +19.30  16.17     30   +1.20 1 1 1 1 1   887    0 17.69 -31.44 ----- 16.2 16.2 145.8 25.2 21.5 -28.6 21.8 -28.5 22.6 -26.4 22.8 -28.2
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:49:08.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.700047
2025-12-03T18:49:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:49:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:49:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:49:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:49:08.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:49:08.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:48:54', tmtdew=21.05, humidity=24.05, cloud=0.0, wind=24.24, temperature=19.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:48:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:49:08.997 [DEBUG] [Thread-121840] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:49:09.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:49:09.094 [DEBUG] [Thread-121843] [transport.py] [_log()] starting thread (client mode): 0xa2727e50
2025-12-03T18:49:09.094 [DEBUG] [Thread-121843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:49:09.108 [DEBUG] [Thread-121843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:49:09.109 [INFO] [Thread-121843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:49:09.116 [DEBUG] [Thread-121843] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:49:09.116 [DEBUG] [Thread-121843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] client lang: <none>
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] server lang: <none>
2025-12-03T18:49:09.117 [DEBUG] [Thread-121843] [transport.py] [_log()] kex follows: False
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] Compression: none
2025-12-03T18:49:09.118 [DEBUG] [Thread-121843] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:49:09.176 [DEBUG] [Thread-121843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:49:09.176 [DEBUG] [Thread-121843] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:49:09.176 [DEBUG] [Thread-121843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:49:09.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:49:09.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:49:09.232 [DEBUG] [Thread-121843] [transport.py] [_log()] userauth is OK
2025-12-03T18:49:09.232 [DEBUG] [Thread-121843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:49:09.232 [DEBUG] [Thread-121843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:49:09.232 [DEBUG] [Thread-121843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:49:09.233 [DEBUG] [Thread-121843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:49:09.253 [INFO] [Thread-121843] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:49:09.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:49:09.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:49:10.097 [DEBUG] [Thread-121843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:49:10.097 [DEBUG] [Thread-121843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:49:10.145 [DEBUG] [Thread-121843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:49:10.145 [DEBUG] [Thread-121843] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:49:10.154 [DEBUG] [Thread-121843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:49:10.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:49:10.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:49:10.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:49:10.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:49:10.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:49:10.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:49:10.189 [DEBUG] [Thread-121843] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:49:13.080 [DEBUG] [Thread-121845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:28.122 [DEBUG] [Thread-121846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:40.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:49:40.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:49:40.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:49:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 49, 26), 21.03, 24.09, 0.0, 25.64, 19.38, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:49:40.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:49:26
2025-12-03T18:49:41.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:49:41.153 [DEBUG] [Thread-121847] [transport.py] [_log()] starting thread (client mode): 0xa517f8e0
2025-12-03T18:49:41.153 [DEBUG] [Thread-121847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:49:41.173 [DEBUG] [Thread-121847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:49:41.173 [INFO] [Thread-121847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:49:41.176 [DEBUG] [Thread-121847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:49:41.176 [DEBUG] [Thread-121847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:49:41.176 [DEBUG] [Thread-121847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:49:41.176 [DEBUG] [Thread-121847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] client lang: <none>
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] server lang: <none>
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] kex follows: False
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:49:41.177 [DEBUG] [Thread-121847] [transport.py] [_log()] Compression: none
2025-12-03T18:49:41.178 [DEBUG] [Thread-121847] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:49:41.197 [DEBUG] [Thread-121847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:49:41.198 [DEBUG] [Thread-121847] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:49:41.198 [DEBUG] [Thread-121847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:49:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:49:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:49:41.200 [DEBUG] [Thread-121847] [transport.py] [_log()] userauth is OK
2025-12-03T18:49:41.200 [DEBUG] [Thread-121847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:49:41.200 [DEBUG] [Thread-121847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:49:41.201 [DEBUG] [Thread-121847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:49:41.201 [DEBUG] [Thread-121847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:49:41.236 [INFO] [Thread-121847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:49:41.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:49:41.874 [DEBUG] [Thread-121847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:49:41.874 [DEBUG] [Thread-121847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:49:41.874 [DEBUG] [Thread-121847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:49:41.915 [DEBUG] [Thread-121847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:49:41.915 [DEBUG] [Thread-121847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:49:41.918 [DEBUG] [Thread-121847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:49:41.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:49:41.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:49:41.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:49:41.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:49:41.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:49:41.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:49:41.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:49:41.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.700742 -999.00  +19.20  17.57     30   +1.20 1 1 1 1 1   887    0 17.10 -33.56 ----- 17.6 17.6 150.0 25.0 21.5 -28.5 21.8 -27.7 22.5 -26.3 22.7 -28.3
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.700742
2025-12-03T18:49:41.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:49:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:49:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:49:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:49:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:49:41.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:49:26', tmtdew=21.03, humidity=24.09, cloud=0.0, wind=25.64, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:49:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:49:41.940 [DEBUG] [Thread-121847] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:49:42.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:49:42.026 [DEBUG] [Thread-121850] [transport.py] [_log()] starting thread (client mode): 0xa517dde0
2025-12-03T18:49:42.026 [DEBUG] [Thread-121850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:49:42.044 [DEBUG] [Thread-121850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:49:42.045 [INFO] [Thread-121850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:49:42.052 [DEBUG] [Thread-121850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:49:42.053 [DEBUG] [Thread-121850] [transport.py] [_log()] client lang: <none>
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] server lang: <none>
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] kex follows: False
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] Compression: none
2025-12-03T18:49:42.054 [DEBUG] [Thread-121850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:49:42.115 [DEBUG] [Thread-121850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:49:42.116 [DEBUG] [Thread-121850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:49:42.116 [DEBUG] [Thread-121850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:49:42.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:49:42.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:49:42.171 [DEBUG] [Thread-121850] [transport.py] [_log()] userauth is OK
2025-12-03T18:49:42.172 [DEBUG] [Thread-121850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:49:42.172 [DEBUG] [Thread-121850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:49:42.172 [DEBUG] [Thread-121850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:49:42.172 [DEBUG] [Thread-121850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:49:42.191 [INFO] [Thread-121850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:49:42.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:49:42.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:49:43.092 [DEBUG] [Thread-121850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:49:43.092 [DEBUG] [Thread-121850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:49:43.140 [DEBUG] [Thread-121850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:49:43.140 [DEBUG] [Thread-121850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:49:43.149 [DEBUG] [Thread-121850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:49:43.150 [DEBUG] [Thread-121852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:43.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:49:43.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:49:43.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:49:43.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:49:43.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:49:43.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:49:43.183 [DEBUG] [Thread-121850] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:49:57.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:57.424 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:49:58.208 [DEBUG] [Thread-121853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:01.316 [DEBUG] [Thread-121854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:13.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:50:13.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:50:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:50:13.239 [DEBUG] [Thread-121855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 49, 58), 21.12, 24.09, 0.0, 24.16, 19.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:50:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:49:58
2025-12-03T18:50:13.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:50:14.146 [DEBUG] [Thread-121856] [transport.py] [_log()] starting thread (client mode): 0xa517d8a0
2025-12-03T18:50:14.146 [DEBUG] [Thread-121856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:50:14.166 [DEBUG] [Thread-121856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:50:14.166 [INFO] [Thread-121856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:14.169 [DEBUG] [Thread-121856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] client lang: <none>
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] server lang: <none>
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] kex follows: False
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] Compression: none
2025-12-03T18:50:14.170 [DEBUG] [Thread-121856] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:50:14.188 [DEBUG] [Thread-121856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:50:14.188 [DEBUG] [Thread-121856] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:50:14.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:50:14.189 [DEBUG] [Thread-121856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:50:14.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:50:14.191 [DEBUG] [Thread-121856] [transport.py] [_log()] userauth is OK
2025-12-03T18:50:14.191 [DEBUG] [Thread-121856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:50:14.191 [DEBUG] [Thread-121856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:50:14.192 [DEBUG] [Thread-121856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:50:14.192 [DEBUG] [Thread-121856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:50:14.227 [INFO] [Thread-121856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:50:14.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:50:14.848 [DEBUG] [Thread-121856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:50:14.849 [DEBUG] [Thread-121856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:50:14.849 [DEBUG] [Thread-121856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:50:14.890 [DEBUG] [Thread-121856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:50:14.890 [DEBUG] [Thread-121856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:50:14.893 [DEBUG] [Thread-121856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:50:14.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:50:14.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:50:14.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:50:14.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:50:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:50:14.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:50:14.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.701089 -999.00  +19.20  20.61     30   +1.20 1 1 1 1 1   887    0 17.11 -33.01 ----- 20.6 20.6 164.6 26.5 21.4 -28.6 21.8 -28.2 22.5 -26.6 22.7 -28.3
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:50:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.701089
2025-12-03T18:50:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:50:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:50:14.914 [DEBUG] [Thread-121856] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:50:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:50:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:50:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:50:14.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:49:58', tmtdew=21.12, humidity=24.09, cloud=0.0, wind=24.16, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:49:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:50:14.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:50:15.008 [DEBUG] [Thread-121859] [transport.py] [_log()] starting thread (client mode): 0xa517f820
2025-12-03T18:50:15.008 [DEBUG] [Thread-121859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:50:15.023 [DEBUG] [Thread-121859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:50:15.023 [INFO] [Thread-121859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:50:15.031 [DEBUG] [Thread-121859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] client lang: <none>
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] server lang: <none>
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] kex follows: False
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] Compression: none
2025-12-03T18:50:15.032 [DEBUG] [Thread-121859] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:50:15.088 [DEBUG] [Thread-121859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:50:15.089 [DEBUG] [Thread-121859] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:50:15.089 [DEBUG] [Thread-121859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:50:15.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:50:15.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:50:15.144 [DEBUG] [Thread-121859] [transport.py] [_log()] userauth is OK
2025-12-03T18:50:15.145 [DEBUG] [Thread-121859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:50:15.145 [DEBUG] [Thread-121859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:50:15.145 [DEBUG] [Thread-121859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:50:15.145 [DEBUG] [Thread-121859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:50:15.163 [INFO] [Thread-121859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:50:15.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:50:15.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:50:16.014 [DEBUG] [Thread-121859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:50:16.014 [DEBUG] [Thread-121859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:50:16.061 [DEBUG] [Thread-121859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:50:16.061 [DEBUG] [Thread-121859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:50:16.070 [DEBUG] [Thread-121859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:50:16.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:50:16.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:50:16.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:50:16.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:50:16.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:50:16.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:50:16.105 [DEBUG] [Thread-121859] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:50:28.267 [DEBUG] [Thread-121861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:43.308 [DEBUG] [Thread-121862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:50:46.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:50:46.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:50:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 50, 30), 21.14, 24.07, 0.0, 26.06, 19.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:50:46.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:50:30
2025-12-03T18:50:46.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:50:47.124 [DEBUG] [Thread-121863] [transport.py] [_log()] starting thread (client mode): 0xa517d600
2025-12-03T18:50:47.124 [DEBUG] [Thread-121863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:50:47.145 [DEBUG] [Thread-121863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:50:47.145 [INFO] [Thread-121863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] client lang: <none>
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] server lang: <none>
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] kex follows: False
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] Compression: none
2025-12-03T18:50:47.149 [DEBUG] [Thread-121863] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:50:47.164 [DEBUG] [Thread-121863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:50:47.164 [DEBUG] [Thread-121863] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:50:47.164 [DEBUG] [Thread-121863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:50:47.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:50:47.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:50:47.165 [DEBUG] [Thread-121863] [transport.py] [_log()] userauth is OK
2025-12-03T18:50:47.165 [DEBUG] [Thread-121863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:50:47.165 [DEBUG] [Thread-121863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:50:47.165 [DEBUG] [Thread-121863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:50:47.165 [DEBUG] [Thread-121863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:50:47.192 [INFO] [Thread-121863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:50:47.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:50:47.833 [DEBUG] [Thread-121863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:50:47.833 [DEBUG] [Thread-121863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:50:47.833 [DEBUG] [Thread-121863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:50:47.873 [DEBUG] [Thread-121863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:50:47.873 [DEBUG] [Thread-121863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:50:47.875 [DEBUG] [Thread-121863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:50:47.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:50:47.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:50:47.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:50:47.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:50:47.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:50:47.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:50:47.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:50:47.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:50:47.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:50:47.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.701436 -999.00  +19.20  24.30     29   +1.10 1 1 1 1 1   887    0 17.64 -32.38 ----- 24.3 24.3 167.8 33.5 21.4 -28.7 21.7 -28.2 22.4 -26.4 22.6 -28.5
2025-12-03T18:50:47.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.701436
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:50:47.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:50:30', tmtdew=21.14, humidity=24.07, cloud=0.0, wind=26.06, temperature=19.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:50:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:50:47.894 [DEBUG] [Thread-121863] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:50:47.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:50:47.979 [DEBUG] [Thread-121866] [transport.py] [_log()] starting thread (client mode): 0xa2751060
2025-12-03T18:50:47.979 [DEBUG] [Thread-121866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:50:47.994 [DEBUG] [Thread-121866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:50:47.994 [INFO] [Thread-121866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:50:48.001 [DEBUG] [Thread-121866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] client lang: <none>
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] server lang: <none>
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] kex follows: False
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] Compression: none
2025-12-03T18:50:48.002 [DEBUG] [Thread-121866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:50:48.057 [DEBUG] [Thread-121866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:50:48.057 [DEBUG] [Thread-121866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:50:48.057 [DEBUG] [Thread-121866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:50:48.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:50:48.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:50:48.114 [DEBUG] [Thread-121866] [transport.py] [_log()] userauth is OK
2025-12-03T18:50:48.114 [DEBUG] [Thread-121866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:50:48.114 [DEBUG] [Thread-121866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:50:48.114 [DEBUG] [Thread-121866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:50:48.114 [DEBUG] [Thread-121866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:50:48.132 [INFO] [Thread-121866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:50:48.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:50:48.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:50:48.971 [DEBUG] [Thread-121866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:50:48.971 [DEBUG] [Thread-121866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:50:49.019 [DEBUG] [Thread-121866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:50:49.020 [DEBUG] [Thread-121866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:50:49.029 [DEBUG] [Thread-121866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:50:49.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:50:49.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:50:49.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:50:49.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:50:49.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:50:49.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:50:49.061 [DEBUG] [Thread-121866] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:50:57.565 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:57.567 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:50:58.336 [DEBUG] [Thread-121868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:01.361 [DEBUG] [Thread-121869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:13.383 [DEBUG] [Thread-121870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:19.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:51:19.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:51:19.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:51:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 51, 2), 21.18, 23.99, 0.0, 27.07, 19.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:51:19.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:51:02
2025-12-03T18:51:19.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:51:20.040 [DEBUG] [Thread-121871] [transport.py] [_log()] starting thread (client mode): 0xa51d3fd0
2025-12-03T18:51:20.040 [DEBUG] [Thread-121871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:51:20.059 [DEBUG] [Thread-121871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:51:20.059 [INFO] [Thread-121871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] client lang: <none>
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] server lang: <none>
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] kex follows: False
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] Compression: none
2025-12-03T18:51:20.063 [DEBUG] [Thread-121871] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:51:20.080 [DEBUG] [Thread-121871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:51:20.080 [DEBUG] [Thread-121871] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:51:20.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:51:20.081 [DEBUG] [Thread-121871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:51:20.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:51:20.083 [DEBUG] [Thread-121871] [transport.py] [_log()] userauth is OK
2025-12-03T18:51:20.083 [DEBUG] [Thread-121871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:51:20.083 [DEBUG] [Thread-121871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:51:20.083 [DEBUG] [Thread-121871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:51:20.083 [DEBUG] [Thread-121871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:51:20.101 [INFO] [Thread-121871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:51:20.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:51:20.717 [DEBUG] [Thread-121871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:51:20.717 [DEBUG] [Thread-121871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:51:20.717 [DEBUG] [Thread-121871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:51:20.758 [DEBUG] [Thread-121871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:51:20.758 [DEBUG] [Thread-121871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:51:20.761 [DEBUG] [Thread-121871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:51:20.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:51:20.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:51:20.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:51:20.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:51:20.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:51:20.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:51:20.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.701783 -999.00  +19.10  16.29     29   +1.00 1 1 1 1 1   887    0 17.25 -33.23 ----- 16.3 16.3 156.8 29.4 21.4 -28.4 21.7 -27.6 22.4 -26.7 22.6 -27.9
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:51:20.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.701783
2025-12-03T18:51:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:51:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:51:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:51:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:51:20.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:51:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:51:02', tmtdew=21.18, humidity=23.99, cloud=0.0, wind=27.07, temperature=19.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:50:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:51:20.787 [DEBUG] [Thread-121871] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:51:20.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:51:20.881 [DEBUG] [Thread-121874] [transport.py] [_log()] starting thread (client mode): 0xa2726ad0
2025-12-03T18:51:20.881 [DEBUG] [Thread-121874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:51:20.896 [DEBUG] [Thread-121874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:51:20.896 [INFO] [Thread-121874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] client lang: <none>
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] server lang: <none>
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] kex follows: False
2025-12-03T18:51:20.904 [DEBUG] [Thread-121874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] Compression: none
2025-12-03T18:51:20.905 [DEBUG] [Thread-121874] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:51:20.959 [DEBUG] [Thread-121874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:51:20.959 [DEBUG] [Thread-121874] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:51:20.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:51:20.959 [DEBUG] [Thread-121874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:51:20.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:51:21.016 [DEBUG] [Thread-121874] [transport.py] [_log()] userauth is OK
2025-12-03T18:51:21.017 [DEBUG] [Thread-121874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:51:21.017 [DEBUG] [Thread-121874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:51:21.017 [DEBUG] [Thread-121874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:51:21.017 [DEBUG] [Thread-121874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:51:21.041 [INFO] [Thread-121874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:51:21.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:51:21.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:51:21.922 [DEBUG] [Thread-121874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:51:21.922 [DEBUG] [Thread-121874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:51:21.971 [DEBUG] [Thread-121874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:51:21.971 [DEBUG] [Thread-121874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:51:21.979 [DEBUG] [Thread-121874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:51:21.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:51:21.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:51:21.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:51:22.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:51:22.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:51:22.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:51:22.011 [DEBUG] [Thread-121874] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:51:28.414 [DEBUG] [Thread-121876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:43.468 [DEBUG] [Thread-121877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:52.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:51:52.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:51:52.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:51:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 51, 34), 21.24, 23.46, 0.0, 25.67, 19.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:51:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:51:34
2025-12-03T18:51:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:51:52.987 [DEBUG] [Thread-121878] [transport.py] [_log()] starting thread (client mode): 0xa2725db0
2025-12-03T18:51:52.987 [DEBUG] [Thread-121878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:51:53.007 [DEBUG] [Thread-121878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:51:53.007 [INFO] [Thread-121878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:51:53.010 [DEBUG] [Thread-121878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:51:53.010 [DEBUG] [Thread-121878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] client lang: <none>
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] server lang: <none>
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] kex follows: False
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:51:53.011 [DEBUG] [Thread-121878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:51:53.012 [DEBUG] [Thread-121878] [transport.py] [_log()] Compression: none
2025-12-03T18:51:53.012 [DEBUG] [Thread-121878] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:51:53.028 [DEBUG] [Thread-121878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:51:53.029 [DEBUG] [Thread-121878] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:51:53.029 [DEBUG] [Thread-121878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:51:53.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:51:53.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:51:53.073 [DEBUG] [Thread-121878] [transport.py] [_log()] userauth is OK
2025-12-03T18:51:53.073 [DEBUG] [Thread-121878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:51:53.073 [DEBUG] [Thread-121878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:51:53.073 [DEBUG] [Thread-121878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:51:53.073 [DEBUG] [Thread-121878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:51:53.093 [INFO] [Thread-121878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:51:53.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:51:53.712 [DEBUG] [Thread-121878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:51:53.712 [DEBUG] [Thread-121878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:51:53.712 [DEBUG] [Thread-121878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:51:53.753 [DEBUG] [Thread-121878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:51:53.753 [DEBUG] [Thread-121878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:51:53.756 [DEBUG] [Thread-121878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:51:53.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:51:53.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:51:53.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:51:53.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:51:53.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:51:53.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:51:53.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:51:53.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.702130 -999.00  +19.20  15.79     29   +1.10 1 1 1 1 1   887    0 17.56 -30.92 ----- 15.8 15.8 152.6 24.3 21.3 -28.7 21.7 -27.7 22.4 -27.2 22.6 -27.7
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.702130
2025-12-03T18:51:53.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:51:53.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:51:53.779 [DEBUG] [Thread-121878] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:51:53.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:51:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:51:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:51:53.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:51:34', tmtdew=21.24, humidity=23.46, cloud=0.0, wind=25.67, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:51:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:51:53.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:51:53.868 [DEBUG] [Thread-121881] [transport.py] [_log()] starting thread (client mode): 0xa2760c70
2025-12-03T18:51:53.868 [DEBUG] [Thread-121881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:51:53.883 [DEBUG] [Thread-121881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:51:53.883 [INFO] [Thread-121881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] client lang: <none>
2025-12-03T18:51:53.891 [DEBUG] [Thread-121881] [transport.py] [_log()] server lang: <none>
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] kex follows: False
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] Compression: none
2025-12-03T18:51:53.892 [DEBUG] [Thread-121881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:51:53.951 [DEBUG] [Thread-121881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:51:53.951 [DEBUG] [Thread-121881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:51:53.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:51:53.952 [DEBUG] [Thread-121881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:51:53.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:51:54.011 [DEBUG] [Thread-121881] [transport.py] [_log()] userauth is OK
2025-12-03T18:51:54.011 [DEBUG] [Thread-121881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:51:54.011 [DEBUG] [Thread-121881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:51:54.011 [DEBUG] [Thread-121881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:51:54.011 [DEBUG] [Thread-121881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:51:54.030 [INFO] [Thread-121881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:51:54.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:51:54.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:51:54.884 [DEBUG] [Thread-121881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:51:54.884 [DEBUG] [Thread-121881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:51:54.933 [DEBUG] [Thread-121881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:51:54.933 [DEBUG] [Thread-121881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:51:54.941 [DEBUG] [Thread-121881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:51:54.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:51:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:51:54.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:51:54.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:51:54.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:51:54.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:51:54.976 [DEBUG] [Thread-121881] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:51:57.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:57.712 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:51:58.497 [DEBUG] [Thread-121883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:01.389 [DEBUG] [Thread-121884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:13.534 [DEBUG] [Thread-121885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:52:24.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:52:24.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:52:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 52, 6), 21.2, 23.52, 0.0, 24.33, 19.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:52:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:52:06
2025-12-03T18:52:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:52:25.950 [DEBUG] [Thread-121886] [transport.py] [_log()] starting thread (client mode): 0xa517df00
2025-12-03T18:52:25.950 [DEBUG] [Thread-121886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:52:25.970 [DEBUG] [Thread-121886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:52:25.970 [INFO] [Thread-121886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] client lang: <none>
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] server lang: <none>
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] kex follows: False
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] Compression: none
2025-12-03T18:52:25.974 [DEBUG] [Thread-121886] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:52:25.991 [DEBUG] [Thread-121886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:52:25.992 [DEBUG] [Thread-121886] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:52:25.992 [DEBUG] [Thread-121886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:52:25.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:52:25.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:52:25.994 [DEBUG] [Thread-121886] [transport.py] [_log()] userauth is OK
2025-12-03T18:52:25.994 [DEBUG] [Thread-121886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:52:25.994 [DEBUG] [Thread-121886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:52:25.994 [DEBUG] [Thread-121886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:52:25.994 [DEBUG] [Thread-121886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:52:26.012 [INFO] [Thread-121886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:52:26.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:52:26.612 [DEBUG] [Thread-121886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:52:26.613 [DEBUG] [Thread-121886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:52:26.613 [DEBUG] [Thread-121886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:52:26.654 [DEBUG] [Thread-121886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:52:26.654 [DEBUG] [Thread-121886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:52:26.657 [DEBUG] [Thread-121886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:52:26.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:52:26.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:52:26.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:52:26.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:52:26.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:52:26.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:52:26.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:52:26.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.702478 -999.00  +19.10  22.95     29   +1.00 1 1 1 1 1   887    0 17.12 -32.19 ----- 22.9 22.9 149.2 28.3 21.3 -28.4 21.7 -28.0 22.4 -26.3 22.6 -27.9
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.702478
2025-12-03T18:52:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:52:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:52:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:52:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:52:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:52:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:52:06', tmtdew=21.2, humidity=23.52, cloud=0.0, wind=24.33, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:51:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:52:26.681 [DEBUG] [Thread-121886] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:52:26.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:52:26.777 [DEBUG] [Thread-121889] [transport.py] [_log()] starting thread (client mode): 0xa517e230
2025-12-03T18:52:26.777 [DEBUG] [Thread-121889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:52:26.792 [DEBUG] [Thread-121889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:52:26.792 [INFO] [Thread-121889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:52:26.799 [DEBUG] [Thread-121889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:52:26.800 [DEBUG] [Thread-121889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] client lang: <none>
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] server lang: <none>
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] kex follows: False
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:52:26.801 [DEBUG] [Thread-121889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:52:26.802 [DEBUG] [Thread-121889] [transport.py] [_log()] Compression: none
2025-12-03T18:52:26.802 [DEBUG] [Thread-121889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:52:26.860 [DEBUG] [Thread-121889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:52:26.860 [DEBUG] [Thread-121889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:52:26.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:52:26.862 [DEBUG] [Thread-121889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:52:26.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:52:26.916 [DEBUG] [Thread-121889] [transport.py] [_log()] userauth is OK
2025-12-03T18:52:26.916 [DEBUG] [Thread-121889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:52:26.916 [DEBUG] [Thread-121889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:52:26.916 [DEBUG] [Thread-121889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:52:26.917 [DEBUG] [Thread-121889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:52:26.939 [INFO] [Thread-121889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:52:26.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:52:26.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:52:27.820 [DEBUG] [Thread-121889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:52:27.820 [DEBUG] [Thread-121889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:52:27.868 [DEBUG] [Thread-121889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:52:27.868 [DEBUG] [Thread-121889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:52:27.877 [DEBUG] [Thread-121889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:52:27.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:52:27.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:52:27.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:52:27.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:52:27.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:52:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:52:27.911 [DEBUG] [Thread-121889] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:52:28.566 [DEBUG] [Thread-121891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:43.606 [DEBUG] [Thread-121892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:57.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:57.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:52:57.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:52:57.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:52:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 52, 38), 21.13, 23.55, 0.0, 24.1, 19.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:52:58.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:52:38
2025-12-03T18:52:58.631 [DEBUG] [Thread-121893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:52:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:52:58.864 [DEBUG] [Thread-121894] [transport.py] [_log()] starting thread (client mode): 0xa27515a0
2025-12-03T18:52:58.864 [DEBUG] [Thread-121894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:52:58.884 [DEBUG] [Thread-121894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:52:58.884 [INFO] [Thread-121894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] client lang: <none>
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] server lang: <none>
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] kex follows: False
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:52:58.886 [DEBUG] [Thread-121894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:52:58.887 [DEBUG] [Thread-121894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:52:58.887 [DEBUG] [Thread-121894] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:52:58.887 [DEBUG] [Thread-121894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:52:58.887 [DEBUG] [Thread-121894] [transport.py] [_log()] Compression: none
2025-12-03T18:52:58.887 [DEBUG] [Thread-121894] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:52:58.896 [DEBUG] [Thread-121894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:52:58.897 [DEBUG] [Thread-121894] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:52:58.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:52:58.898 [DEBUG] [Thread-121894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:52:58.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:52:58.900 [DEBUG] [Thread-121894] [transport.py] [_log()] userauth is OK
2025-12-03T18:52:58.901 [DEBUG] [Thread-121894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:52:58.901 [DEBUG] [Thread-121894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:52:58.901 [DEBUG] [Thread-121894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:52:58.901 [DEBUG] [Thread-121894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:52:58.926 [INFO] [Thread-121894] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:52:58.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:52:59.490 [DEBUG] [Thread-121894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:52:59.491 [DEBUG] [Thread-121894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:52:59.491 [DEBUG] [Thread-121894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:52:59.532 [DEBUG] [Thread-121894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:52:59.532 [DEBUG] [Thread-121894] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:52:59.535 [DEBUG] [Thread-121894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:52:59.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:52:59.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:52:59.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:52:59.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:52:59.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:52:59.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:52:59.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.702825 -999.00  +19.10  13.60     29   +1.00 1 1 1 1 1   887    0 17.29 -27.97 ----- 13.6 13.6 151.8 21.3 21.3 -28.4 21.6 -27.7 22.4 -26.3 22.4 -27.8
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:52:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.702825
2025-12-03T18:52:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:52:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:52:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:52:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:52:59.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:52:59.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:52:38', tmtdew=21.13, humidity=23.55, cloud=0.0, wind=24.1, temperature=19.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:52:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:52:59.562 [DEBUG] [Thread-121894] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:52:59.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:52:59.661 [DEBUG] [Thread-121897] [transport.py] [_log()] starting thread (client mode): 0xa27507f0
2025-12-03T18:52:59.661 [DEBUG] [Thread-121897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:52:59.677 [DEBUG] [Thread-121897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:52:59.677 [INFO] [Thread-121897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:52:59.685 [DEBUG] [Thread-121897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] client lang: <none>
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] server lang: <none>
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] kex follows: False
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:52:59.686 [DEBUG] [Thread-121897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:52:59.687 [DEBUG] [Thread-121897] [transport.py] [_log()] Compression: none
2025-12-03T18:52:59.687 [DEBUG] [Thread-121897] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:52:59.741 [DEBUG] [Thread-121897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:52:59.742 [DEBUG] [Thread-121897] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:52:59.742 [DEBUG] [Thread-121897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:52:59.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:52:59.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:52:59.797 [DEBUG] [Thread-121897] [transport.py] [_log()] userauth is OK
2025-12-03T18:52:59.797 [DEBUG] [Thread-121897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:52:59.797 [DEBUG] [Thread-121897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:52:59.798 [DEBUG] [Thread-121897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:52:59.798 [DEBUG] [Thread-121897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:52:59.816 [INFO] [Thread-121897] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:52:59.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:52:59.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:53:00.661 [DEBUG] [Thread-121897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:53:00.661 [DEBUG] [Thread-121897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:53:00.710 [DEBUG] [Thread-121897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:53:00.710 [DEBUG] [Thread-121897] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:53:00.722 [DEBUG] [Thread-121897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:53:00.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:53:00.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:53:00.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:53:00.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:53:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:53:00.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:53:00.757 [DEBUG] [Thread-121897] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:53:01.425 [DEBUG] [Thread-121899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:13.657 [DEBUG] [Thread-121900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:28.710 [DEBUG] [Thread-121901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:53:30.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:53:30.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:53:31.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 53, 11), 21.1, 23.6, 0.0, 22.87, 19.3, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:53:31.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:53:11
2025-12-03T18:53:31.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:53:31.711 [DEBUG] [Thread-121902] [transport.py] [_log()] starting thread (client mode): 0xa2760640
2025-12-03T18:53:31.711 [DEBUG] [Thread-121902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:53:31.731 [DEBUG] [Thread-121902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:53:31.731 [INFO] [Thread-121902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] client lang: <none>
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] server lang: <none>
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] kex follows: False
2025-12-03T18:53:31.733 [DEBUG] [Thread-121902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] Compression: none
2025-12-03T18:53:31.734 [DEBUG] [Thread-121902] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:53:31.750 [DEBUG] [Thread-121902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:53:31.751 [DEBUG] [Thread-121902] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:53:31.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:53:31.752 [DEBUG] [Thread-121902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:53:31.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:53:31.754 [DEBUG] [Thread-121902] [transport.py] [_log()] userauth is OK
2025-12-03T18:53:31.755 [DEBUG] [Thread-121902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:53:31.755 [DEBUG] [Thread-121902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:53:31.755 [DEBUG] [Thread-121902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:53:31.755 [DEBUG] [Thread-121902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:53:31.777 [INFO] [Thread-121902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:53:31.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:53:32.416 [DEBUG] [Thread-121902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:53:32.417 [DEBUG] [Thread-121902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:53:32.417 [DEBUG] [Thread-121902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:53:32.458 [DEBUG] [Thread-121902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:53:32.458 [DEBUG] [Thread-121902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:53:32.461 [DEBUG] [Thread-121902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:53:32.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:53:32.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:53:32.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:53:32.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:53:32.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:53:32.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:53:32.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:53:32.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:53:32.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:53:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.703172 -999.00  +19.10  17.87     29   +1.00 1 1 1 1 1   887    0 16.93 -27.96 ----- 17.9 17.9 147.0 25.5 21.3 -28.3 21.6 -28.0 22.4 -26.4 22.4 -28.0
2025-12-03T18:53:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:53:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:53:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.703172
2025-12-03T18:53:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:53:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:53:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:53:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:53:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:53:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:53:11', tmtdew=21.1, humidity=23.6, cloud=0.0, wind=22.87, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:52:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:53:32.485 [DEBUG] [Thread-121902] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:53:32.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:53:32.581 [DEBUG] [Thread-121905] [transport.py] [_log()] starting thread (client mode): 0xa277afb0
2025-12-03T18:53:32.582 [DEBUG] [Thread-121905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:53:32.596 [DEBUG] [Thread-121905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:53:32.596 [INFO] [Thread-121905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:53:32.603 [DEBUG] [Thread-121905] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] client lang: <none>
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] server lang: <none>
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] kex follows: False
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] Compression: none
2025-12-03T18:53:32.604 [DEBUG] [Thread-121905] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:53:32.662 [DEBUG] [Thread-121905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:53:32.662 [DEBUG] [Thread-121905] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:53:32.663 [DEBUG] [Thread-121905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:53:32.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:53:32.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:53:32.719 [DEBUG] [Thread-121905] [transport.py] [_log()] userauth is OK
2025-12-03T18:53:32.719 [DEBUG] [Thread-121905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:53:32.719 [DEBUG] [Thread-121905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:53:32.719 [DEBUG] [Thread-121905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:53:32.719 [DEBUG] [Thread-121905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:53:32.741 [INFO] [Thread-121905] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:53:32.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:53:32.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:53:33.587 [DEBUG] [Thread-121905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:53:33.587 [DEBUG] [Thread-121905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:53:33.635 [DEBUG] [Thread-121905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:53:33.635 [DEBUG] [Thread-121905] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:53:33.644 [DEBUG] [Thread-121905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:53:33.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:53:33.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:53:33.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:53:33.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:53:33.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:53:33.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:53:33.678 [DEBUG] [Thread-121905] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:53:43.740 [DEBUG] [Thread-121907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:57.990 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:57.991 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:53:58.773 [DEBUG] [Thread-121908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:01.458 [DEBUG] [Thread-121909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:03.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:54:03.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:54:03.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:54:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 53, 43), 21.14, 23.6, 0.0, 27.26, 19.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:54:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:53:43
2025-12-03T18:54:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:54:04.645 [DEBUG] [Thread-121910] [transport.py] [_log()] starting thread (client mode): 0xa2751b70
2025-12-03T18:54:04.645 [DEBUG] [Thread-121910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:54:04.666 [DEBUG] [Thread-121910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:54:04.666 [INFO] [Thread-121910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] client lang: <none>
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] server lang: <none>
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] kex follows: False
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] Compression: none
2025-12-03T18:54:04.669 [DEBUG] [Thread-121910] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:54:04.690 [DEBUG] [Thread-121910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:54:04.691 [DEBUG] [Thread-121910] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:54:04.691 [DEBUG] [Thread-121910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:54:04.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:54:04.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:54:04.693 [DEBUG] [Thread-121910] [transport.py] [_log()] userauth is OK
2025-12-03T18:54:04.693 [DEBUG] [Thread-121910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:54:04.693 [DEBUG] [Thread-121910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:54:04.693 [DEBUG] [Thread-121910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:54:04.693 [DEBUG] [Thread-121910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:54:04.718 [INFO] [Thread-121910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:54:04.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:54:05.354 [DEBUG] [Thread-121910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:54:05.354 [DEBUG] [Thread-121910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:54:05.355 [DEBUG] [Thread-121910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:54:05.395 [DEBUG] [Thread-121910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:54:05.395 [DEBUG] [Thread-121910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:54:05.398 [DEBUG] [Thread-121910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:54:05.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:54:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:54:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:54:05.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:54:05.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:54:05.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:54:05.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:54:05.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:54:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:54:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.703519 -999.00  +19.10  18.48     29   +1.10 1 1 1 1 1   887    0 17.61 -28.16 ----- 18.5 18.5 153.9 26.5 21.2 -28.3 21.6 -28.0 22.4 -26.4 22.4 -27.8
2025-12-03T18:54:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:54:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:54:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.703519
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:54:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:53:43', tmtdew=21.14, humidity=23.6, cloud=0.0, wind=27.26, temperature=19.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:53:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:54:05.423 [DEBUG] [Thread-121910] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:54:05.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:54:05.519 [DEBUG] [Thread-121913] [transport.py] [_log()] starting thread (client mode): 0xa51d3fd0
2025-12-03T18:54:05.519 [DEBUG] [Thread-121913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:54:05.534 [DEBUG] [Thread-121913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:54:05.534 [INFO] [Thread-121913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] client lang: <none>
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] server lang: <none>
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] kex follows: False
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:54:05.542 [DEBUG] [Thread-121913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:54:05.543 [DEBUG] [Thread-121913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:54:05.543 [DEBUG] [Thread-121913] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:54:05.543 [DEBUG] [Thread-121913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:54:05.543 [DEBUG] [Thread-121913] [transport.py] [_log()] Compression: none
2025-12-03T18:54:05.543 [DEBUG] [Thread-121913] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:54:05.600 [DEBUG] [Thread-121913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:54:05.600 [DEBUG] [Thread-121913] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:54:05.600 [DEBUG] [Thread-121913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:54:05.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:54:05.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:54:05.656 [DEBUG] [Thread-121913] [transport.py] [_log()] userauth is OK
2025-12-03T18:54:05.656 [DEBUG] [Thread-121913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:54:05.656 [DEBUG] [Thread-121913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:54:05.656 [DEBUG] [Thread-121913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:54:05.656 [DEBUG] [Thread-121913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:54:05.675 [INFO] [Thread-121913] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:54:05.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:54:05.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:54:06.531 [DEBUG] [Thread-121913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:54:06.531 [DEBUG] [Thread-121913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:54:06.579 [DEBUG] [Thread-121913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:54:06.579 [DEBUG] [Thread-121913] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:54:06.588 [DEBUG] [Thread-121913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:54:06.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:54:06.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:54:06.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:54:06.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:54:06.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:54:06.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:54:06.622 [DEBUG] [Thread-121913] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:54:13.803 [DEBUG] [Thread-121915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:28.854 [DEBUG] [Thread-121916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:54:36.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:54:36.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:54:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 54, 15), 21.1, 23.69, 0.0, 27.6, 19.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:54:37.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:54:15
2025-12-03T18:54:37.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:54:37.635 [DEBUG] [Thread-121917] [transport.py] [_log()] starting thread (client mode): 0xa51d37c0
2025-12-03T18:54:37.635 [DEBUG] [Thread-121917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:54:37.656 [DEBUG] [Thread-121917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:54:37.656 [INFO] [Thread-121917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] client lang: <none>
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] server lang: <none>
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] kex follows: False
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] Compression: none
2025-12-03T18:54:37.659 [DEBUG] [Thread-121917] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:54:37.675 [DEBUG] [Thread-121917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:54:37.675 [DEBUG] [Thread-121917] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:54:37.675 [DEBUG] [Thread-121917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:54:37.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:54:37.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:54:37.720 [DEBUG] [Thread-121917] [transport.py] [_log()] userauth is OK
2025-12-03T18:54:37.720 [DEBUG] [Thread-121917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:54:37.720 [DEBUG] [Thread-121917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:54:37.720 [DEBUG] [Thread-121917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:54:37.720 [DEBUG] [Thread-121917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:54:37.735 [INFO] [Thread-121917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:54:37.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:54:38.392 [DEBUG] [Thread-121917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:54:38.392 [DEBUG] [Thread-121917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:54:38.392 [DEBUG] [Thread-121917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:54:38.434 [DEBUG] [Thread-121917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:54:38.434 [DEBUG] [Thread-121917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:54:38.436 [DEBUG] [Thread-121917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:54:38.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:54:38.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:54:38.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:54:38.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:54:38.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:54:38.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:54:38.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.704214 -999.00  +19.10  16.19     30   +1.10 1 1 1 1 1   887    0 17.24 -26.90 ----- 16.2 16.2 166.0 25.8 21.2 -28.4 21.6 -27.8 22.3 -26.4 22.4 -28.2
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.704214
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:54:38.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:54:15', tmtdew=21.1, humidity=23.69, cloud=0.0, wind=27.6, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:54:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:54:38.454 [DEBUG] [Thread-121917] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:54:38.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:54:38.541 [DEBUG] [Thread-121920] [transport.py] [_log()] starting thread (client mode): 0xa27291b0
2025-12-03T18:54:38.541 [DEBUG] [Thread-121920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:54:38.562 [DEBUG] [Thread-121920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:54:38.563 [INFO] [Thread-121920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] client lang: <none>
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] server lang: <none>
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] kex follows: False
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:54:38.570 [DEBUG] [Thread-121920] [transport.py] [_log()] Compression: none
2025-12-03T18:54:38.571 [DEBUG] [Thread-121920] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:54:38.628 [DEBUG] [Thread-121920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:54:38.628 [DEBUG] [Thread-121920] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:54:38.628 [DEBUG] [Thread-121920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:54:38.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:54:38.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:54:38.685 [DEBUG] [Thread-121920] [transport.py] [_log()] userauth is OK
2025-12-03T18:54:38.685 [DEBUG] [Thread-121920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:54:38.685 [DEBUG] [Thread-121920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:54:38.685 [DEBUG] [Thread-121920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:54:38.685 [DEBUG] [Thread-121920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:54:38.700 [INFO] [Thread-121920] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:54:38.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:54:38.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:54:39.572 [DEBUG] [Thread-121920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:54:39.572 [DEBUG] [Thread-121920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:54:39.620 [DEBUG] [Thread-121920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:54:39.620 [DEBUG] [Thread-121920] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:54:39.629 [DEBUG] [Thread-121920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:54:39.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:54:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:54:39.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:54:39.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:54:39.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:54:39.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:54:39.660 [DEBUG] [Thread-121920] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:54:43.882 [DEBUG] [Thread-121922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:58.133 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:58.134 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:54:58.924 [DEBUG] [Thread-121923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:01.508 [DEBUG] [Thread-121924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:55:09.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:55:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:55:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 54, 47), 20.99, 24.2, 0.0, 24.33, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:55:10.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:54:47
2025-12-03T18:55:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:55:10.628 [DEBUG] [Thread-121925] [transport.py] [_log()] starting thread (client mode): 0xa2762500
2025-12-03T18:55:10.628 [DEBUG] [Thread-121925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:55:10.647 [DEBUG] [Thread-121925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:55:10.647 [INFO] [Thread-121925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] client lang: <none>
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] server lang: <none>
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] kex follows: False
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] Compression: none
2025-12-03T18:55:10.649 [DEBUG] [Thread-121925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:55:10.666 [DEBUG] [Thread-121925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:55:10.667 [DEBUG] [Thread-121925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:55:10.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:55:10.668 [DEBUG] [Thread-121925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:55:10.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:55:10.670 [DEBUG] [Thread-121925] [transport.py] [_log()] userauth is OK
2025-12-03T18:55:10.670 [DEBUG] [Thread-121925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:55:10.670 [DEBUG] [Thread-121925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:55:10.670 [DEBUG] [Thread-121925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:55:10.670 [DEBUG] [Thread-121925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:55:10.688 [INFO] [Thread-121925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:55:10.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:55:11.546 [DEBUG] [Thread-121925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:55:11.547 [DEBUG] [Thread-121925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:55:11.547 [DEBUG] [Thread-121925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:55:11.588 [DEBUG] [Thread-121925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:55:11.588 [DEBUG] [Thread-121925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:55:11.591 [DEBUG] [Thread-121925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:55:11.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:55:11.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:55:11.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:55:11.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:55:11.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:55:11.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:55:11.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:55:11.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.704561 -999.00  +19.10  14.31     29   +1.00 1 1 1 1 1   887    0 17.22 -26.31 ----- 14.3 14.3 145.8 27.2 21.2 -28.1 21.6 -27.4 22.3 -26.3 22.4 -27.9
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.704561
2025-12-03T18:55:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:55:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:55:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:55:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:55:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:55:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:54:47', tmtdew=20.99, humidity=24.2, cloud=0.0, wind=24.33, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:54:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:55:11.619 [DEBUG] [Thread-121925] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:55:11.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:55:11.715 [DEBUG] [Thread-121928] [transport.py] [_log()] starting thread (client mode): 0xa51d0be0
2025-12-03T18:55:11.716 [DEBUG] [Thread-121928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:55:11.730 [DEBUG] [Thread-121928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:55:11.731 [INFO] [Thread-121928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:55:11.738 [DEBUG] [Thread-121928] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:55:11.738 [DEBUG] [Thread-121928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:55:11.738 [DEBUG] [Thread-121928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] client lang: <none>
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] server lang: <none>
2025-12-03T18:55:11.739 [DEBUG] [Thread-121928] [transport.py] [_log()] kex follows: False
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] Compression: none
2025-12-03T18:55:11.740 [DEBUG] [Thread-121928] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:55:11.794 [DEBUG] [Thread-121928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:55:11.795 [DEBUG] [Thread-121928] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:55:11.795 [DEBUG] [Thread-121928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:55:11.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:55:11.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:55:11.850 [DEBUG] [Thread-121928] [transport.py] [_log()] userauth is OK
2025-12-03T18:55:11.851 [DEBUG] [Thread-121928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:55:11.851 [DEBUG] [Thread-121928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:55:11.851 [DEBUG] [Thread-121928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:55:11.851 [DEBUG] [Thread-121928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:55:11.865 [INFO] [Thread-121928] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:55:11.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:55:11.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:55:12.796 [DEBUG] [Thread-121928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:55:12.796 [DEBUG] [Thread-121928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:55:12.845 [DEBUG] [Thread-121928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:55:12.845 [DEBUG] [Thread-121928] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:55:12.853 [DEBUG] [Thread-121928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:55:12.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:55:12.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:55:12.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:55:12.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:55:12.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:55:12.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:55:12.885 [DEBUG] [Thread-121928] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:55:13.952 [DEBUG] [Thread-121930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:28.994 [DEBUG] [Thread-121931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:42.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:55:42.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:55:42.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:55:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 55, 19), 20.99, 24.2, 0.0, 25.05, 19.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:55:43.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:55:19
2025-12-03T18:55:43.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:55:43.838 [DEBUG] [Thread-121932] [transport.py] [_log()] starting thread (client mode): 0xa517cfd0
2025-12-03T18:55:43.838 [DEBUG] [Thread-121932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:55:43.859 [DEBUG] [Thread-121932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:55:43.859 [INFO] [Thread-121932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:55:43.860 [DEBUG] [Thread-121932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:55:43.860 [DEBUG] [Thread-121932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] client lang: <none>
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] server lang: <none>
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] kex follows: False
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] Compression: none
2025-12-03T18:55:43.861 [DEBUG] [Thread-121932] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:55:43.870 [DEBUG] [Thread-121932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:55:43.870 [DEBUG] [Thread-121932] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:55:43.871 [DEBUG] [Thread-121932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:55:43.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:55:43.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:55:43.872 [DEBUG] [Thread-121932] [transport.py] [_log()] userauth is OK
2025-12-03T18:55:43.872 [DEBUG] [Thread-121932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:55:43.872 [DEBUG] [Thread-121932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:55:43.872 [DEBUG] [Thread-121932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:55:43.872 [DEBUG] [Thread-121932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:55:43.890 [INFO] [Thread-121932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:55:43.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:55:44.025 [DEBUG] [Thread-121934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:44.475 [DEBUG] [Thread-121932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:55:44.475 [DEBUG] [Thread-121932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:55:44.475 [DEBUG] [Thread-121932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:55:44.516 [DEBUG] [Thread-121932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:55:44.516 [DEBUG] [Thread-121932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:55:44.519 [DEBUG] [Thread-121932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:55:44.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:55:44.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:55:44.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:55:44.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:55:44.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:55:44.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:55:44.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:55:44.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.704908 -999.00  +19.10  15.60     30   +1.10 1 1 1 1 1   887    0 17.28 -24.84 ----- 15.6 15.6 148.3 24.4 21.2 -28.3 21.6 -27.6 22.2 -26.5 22.3 -27.4
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.704908
2025-12-03T18:55:44.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:55:19', tmtdew=20.99, humidity=24.2, cloud=0.0, wind=25.05, temperature=19.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:55:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:55:44.543 [DEBUG] [Thread-121932] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:55:44.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:55:44.641 [DEBUG] [Thread-121936] [transport.py] [_log()] starting thread (client mode): 0xa27790f0
2025-12-03T18:55:44.641 [DEBUG] [Thread-121936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:55:44.655 [DEBUG] [Thread-121936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:55:44.655 [INFO] [Thread-121936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:55:44.663 [DEBUG] [Thread-121936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] client lang: <none>
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] server lang: <none>
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] kex follows: False
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] Compression: none
2025-12-03T18:55:44.664 [DEBUG] [Thread-121936] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:55:44.719 [DEBUG] [Thread-121936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:55:44.720 [DEBUG] [Thread-121936] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:55:44.720 [DEBUG] [Thread-121936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:55:44.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:55:44.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:55:44.776 [DEBUG] [Thread-121936] [transport.py] [_log()] userauth is OK
2025-12-03T18:55:44.776 [DEBUG] [Thread-121936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:55:44.776 [DEBUG] [Thread-121936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:55:44.776 [DEBUG] [Thread-121936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:55:44.776 [DEBUG] [Thread-121936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:55:44.797 [INFO] [Thread-121936] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:55:44.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:55:44.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:55:45.645 [DEBUG] [Thread-121936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:55:45.645 [DEBUG] [Thread-121936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:55:45.692 [DEBUG] [Thread-121936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:55:45.692 [DEBUG] [Thread-121936] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:55:45.701 [DEBUG] [Thread-121936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:55:45.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:55:45.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:55:45.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:55:45.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:55:45.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:55:45.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:55:45.733 [DEBUG] [Thread-121936] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:55:58.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:58.274 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:55:59.054 [DEBUG] [Thread-121938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:01.553 [DEBUG] [Thread-121939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:14.093 [DEBUG] [Thread-121940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:15.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:56:15.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:56:15.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:56:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 55, 51), 20.89, 24.17, 0.0, 26.41, 19.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:56:16.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:55:51
2025-12-03T18:56:16.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:56:16.681 [DEBUG] [Thread-121941] [transport.py] [_log()] starting thread (client mode): 0xa514a3e0
2025-12-03T18:56:16.681 [DEBUG] [Thread-121941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:56:16.701 [DEBUG] [Thread-121941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:56:16.701 [INFO] [Thread-121941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] client lang: <none>
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] server lang: <none>
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] kex follows: False
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:56:16.704 [DEBUG] [Thread-121941] [transport.py] [_log()] Compression: none
2025-12-03T18:56:16.705 [DEBUG] [Thread-121941] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:56:16.721 [DEBUG] [Thread-121941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:56:16.722 [DEBUG] [Thread-121941] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:56:16.722 [DEBUG] [Thread-121941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:56:16.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:56:16.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:56:16.724 [DEBUG] [Thread-121941] [transport.py] [_log()] userauth is OK
2025-12-03T18:56:16.724 [DEBUG] [Thread-121941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:56:16.724 [DEBUG] [Thread-121941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:56:16.724 [DEBUG] [Thread-121941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:56:16.724 [DEBUG] [Thread-121941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:56:16.742 [INFO] [Thread-121941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:56:16.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:56:17.393 [DEBUG] [Thread-121941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:56:17.393 [DEBUG] [Thread-121941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:56:17.393 [DEBUG] [Thread-121941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:56:17.434 [DEBUG] [Thread-121941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:56:17.434 [DEBUG] [Thread-121941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:56:17.437 [DEBUG] [Thread-121941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:56:17.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:56:17.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:56:17.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:56:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:56:17.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:56:17.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:56:17.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:56:17.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:56:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:56:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.705255 -999.00  +19.00  17.75     30   +1.20 1 1 1 1 1   887    0 17.51 -25.51 ----- 17.8 17.8 157.2 31.4 21.2 -28.4 21.6 -27.7 22.1 -27.0 22.4 -28.3
2025-12-03T18:56:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:56:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:56:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.705255
2025-12-03T18:56:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:56:17.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:56:17.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:56:17.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:56:17.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:56:17.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:55:51', tmtdew=20.89, humidity=24.17, cloud=0.0, wind=26.41, temperature=19.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:55:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:56:17.462 [DEBUG] [Thread-121941] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:56:17.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:56:17.558 [DEBUG] [Thread-121944] [transport.py] [_log()] starting thread (client mode): 0xa27cbaf0
2025-12-03T18:56:17.558 [DEBUG] [Thread-121944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:56:17.576 [DEBUG] [Thread-121944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:56:17.576 [INFO] [Thread-121944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:56:17.584 [DEBUG] [Thread-121944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:56:17.584 [DEBUG] [Thread-121944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:56:17.584 [DEBUG] [Thread-121944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:56:17.584 [DEBUG] [Thread-121944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] client lang: <none>
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] server lang: <none>
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] kex follows: False
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] Compression: none
2025-12-03T18:56:17.585 [DEBUG] [Thread-121944] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:56:17.646 [DEBUG] [Thread-121944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:56:17.646 [DEBUG] [Thread-121944] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:56:17.647 [DEBUG] [Thread-121944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:56:17.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:56:17.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:56:17.708 [DEBUG] [Thread-121944] [transport.py] [_log()] userauth is OK
2025-12-03T18:56:17.708 [DEBUG] [Thread-121944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:56:17.708 [DEBUG] [Thread-121944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:56:17.708 [DEBUG] [Thread-121944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:56:17.708 [DEBUG] [Thread-121944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:56:17.731 [INFO] [Thread-121944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:56:17.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:56:17.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:56:18.556 [DEBUG] [Thread-121944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:56:18.556 [DEBUG] [Thread-121944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:56:18.604 [DEBUG] [Thread-121944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:56:18.604 [DEBUG] [Thread-121944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:56:18.613 [DEBUG] [Thread-121944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:56:18.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:56:18.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:56:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:56:18.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:56:18.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:56:18.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:56:18.648 [DEBUG] [Thread-121944] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:56:29.125 [DEBUG] [Thread-121946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:44.169 [DEBUG] [Thread-121947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:48.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:56:48.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:56:48.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:56:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 56, 23), 20.8, 24.34, 0.0, 28.57, 19.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:56:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:56:23
2025-12-03T18:56:49.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:56:49.597 [DEBUG] [Thread-121948] [transport.py] [_log()] starting thread (client mode): 0xa2750d90
2025-12-03T18:56:49.597 [DEBUG] [Thread-121948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:56:49.617 [DEBUG] [Thread-121948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:56:49.617 [INFO] [Thread-121948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] client lang: <none>
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] server lang: <none>
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] kex follows: False
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] Compression: none
2025-12-03T18:56:49.621 [DEBUG] [Thread-121948] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:56:49.637 [DEBUG] [Thread-121948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:56:49.637 [DEBUG] [Thread-121948] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:56:49.638 [DEBUG] [Thread-121948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:56:49.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:56:49.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:56:49.639 [DEBUG] [Thread-121948] [transport.py] [_log()] userauth is OK
2025-12-03T18:56:49.640 [DEBUG] [Thread-121948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:56:49.640 [DEBUG] [Thread-121948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:56:49.640 [DEBUG] [Thread-121948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:56:49.640 [DEBUG] [Thread-121948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:56:49.658 [INFO] [Thread-121948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:56:49.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:56:50.311 [DEBUG] [Thread-121948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:56:50.311 [DEBUG] [Thread-121948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:56:50.312 [DEBUG] [Thread-121948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:56:50.352 [DEBUG] [Thread-121948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:56:50.352 [DEBUG] [Thread-121948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:56:50.355 [DEBUG] [Thread-121948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:56:50.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:56:50.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:56:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:56:50.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:56:50.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:56:50.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:56:50.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:56:50.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.705603 -999.00  +19.00  26.12     30   +1.20 1 1 1 1 1   887    0 17.24 -25.70 ----- 26.1 26.1 154.4 31.9 21.1 -28.5 21.4 -27.8 22.1 -26.4 22.2 -28.0
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.705603
2025-12-03T18:56:50.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:56:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:56:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:56:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:56:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:56:50.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:56:23', tmtdew=20.8, humidity=24.34, cloud=0.0, wind=28.57, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:56:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:56:50.380 [DEBUG] [Thread-121948] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:56:50.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:56:50.477 [DEBUG] [Thread-121951] [transport.py] [_log()] starting thread (client mode): 0xa277a320
2025-12-03T18:56:50.477 [DEBUG] [Thread-121951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:56:50.492 [DEBUG] [Thread-121951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:56:50.492 [INFO] [Thread-121951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:56:50.499 [DEBUG] [Thread-121951] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:56:50.499 [DEBUG] [Thread-121951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:56:50.499 [DEBUG] [Thread-121951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] client lang: <none>
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] server lang: <none>
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] kex follows: False
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] Compression: none
2025-12-03T18:56:50.500 [DEBUG] [Thread-121951] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:56:50.562 [DEBUG] [Thread-121951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:56:50.562 [DEBUG] [Thread-121951] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:56:50.563 [DEBUG] [Thread-121951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:56:50.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:56:50.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:56:50.618 [DEBUG] [Thread-121951] [transport.py] [_log()] userauth is OK
2025-12-03T18:56:50.618 [DEBUG] [Thread-121951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:56:50.618 [DEBUG] [Thread-121951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:56:50.618 [DEBUG] [Thread-121951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:56:50.618 [DEBUG] [Thread-121951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:56:50.637 [INFO] [Thread-121951] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:56:50.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:56:50.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:56:51.448 [DEBUG] [Thread-121951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:56:51.448 [DEBUG] [Thread-121951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:56:51.496 [DEBUG] [Thread-121951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:56:51.496 [DEBUG] [Thread-121951] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:56:51.505 [DEBUG] [Thread-121951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:56:51.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:56:51.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:56:51.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:56:51.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:56:51.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:56:51.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:56:51.540 [DEBUG] [Thread-121951] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:56:58.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:58.417 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:56:59.200 [DEBUG] [Thread-121953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:01.609 [DEBUG] [Thread-121954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:14.239 [DEBUG] [Thread-121955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:21.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:57:21.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:57:21.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:57:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 56, 55), 20.71, 24.4, 0.0, 29.29, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:57:22.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:56:55
2025-12-03T18:57:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:57:22.562 [DEBUG] [Thread-121956] [transport.py] [_log()] starting thread (client mode): 0xa27280a0
2025-12-03T18:57:22.563 [DEBUG] [Thread-121956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:57:22.584 [DEBUG] [Thread-121956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:57:22.584 [INFO] [Thread-121956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:57:22.587 [DEBUG] [Thread-121956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:57:22.587 [DEBUG] [Thread-121956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:57:22.587 [DEBUG] [Thread-121956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:57:22.587 [DEBUG] [Thread-121956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] client lang: <none>
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] server lang: <none>
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] kex follows: False
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:57:22.588 [DEBUG] [Thread-121956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:57:22.589 [DEBUG] [Thread-121956] [transport.py] [_log()] Compression: none
2025-12-03T18:57:22.589 [DEBUG] [Thread-121956] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:57:22.607 [DEBUG] [Thread-121956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:57:22.608 [DEBUG] [Thread-121956] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:57:22.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:57:22.609 [DEBUG] [Thread-121956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:57:22.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:57:22.611 [DEBUG] [Thread-121956] [transport.py] [_log()] userauth is OK
2025-12-03T18:57:22.611 [DEBUG] [Thread-121956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:57:22.611 [DEBUG] [Thread-121956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:57:22.612 [DEBUG] [Thread-121956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:57:22.612 [DEBUG] [Thread-121956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:57:22.636 [INFO] [Thread-121956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:57:22.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:57:23.299 [DEBUG] [Thread-121956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:57:23.299 [DEBUG] [Thread-121956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:57:23.300 [DEBUG] [Thread-121956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:57:23.340 [DEBUG] [Thread-121956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:57:23.340 [DEBUG] [Thread-121956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:57:23.343 [DEBUG] [Thread-121956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:57:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:57:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:57:23.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:57:23.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:57:23.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:57:23.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:57:23.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:57:23.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:57:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:57:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.705950 -999.00  +18.90  19.34     30   +1.20 1 1 1 1 1   887    0 17.47 -27.36 ----- 19.3 19.3 143.2 30.9 21.1 -28.0 21.4 -27.8 22.1 -26.2 22.2 -27.7
2025-12-03T18:57:23.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:57:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:57:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.705950
2025-12-03T18:57:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:57:23.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:56:55', tmtdew=20.71, humidity=24.4, cloud=0.0, wind=29.29, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:56:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:57:23.367 [DEBUG] [Thread-121956] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:57:23.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:57:23.464 [DEBUG] [Thread-121959] [transport.py] [_log()] starting thread (client mode): 0xa2727010
2025-12-03T18:57:23.464 [DEBUG] [Thread-121959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:57:23.479 [DEBUG] [Thread-121959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:57:23.480 [INFO] [Thread-121959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:57:23.487 [DEBUG] [Thread-121959] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:57:23.487 [DEBUG] [Thread-121959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] client lang: <none>
2025-12-03T18:57:23.488 [DEBUG] [Thread-121959] [transport.py] [_log()] server lang: <none>
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] kex follows: False
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] Compression: none
2025-12-03T18:57:23.489 [DEBUG] [Thread-121959] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:57:23.549 [DEBUG] [Thread-121959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:57:23.549 [DEBUG] [Thread-121959] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:57:23.550 [DEBUG] [Thread-121959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:57:23.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:57:23.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:57:23.607 [DEBUG] [Thread-121959] [transport.py] [_log()] userauth is OK
2025-12-03T18:57:23.607 [DEBUG] [Thread-121959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:57:23.607 [DEBUG] [Thread-121959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:57:23.607 [DEBUG] [Thread-121959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:57:23.607 [DEBUG] [Thread-121959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:57:23.626 [INFO] [Thread-121959] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:57:23.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:57:23.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:57:24.461 [DEBUG] [Thread-121959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:57:24.461 [DEBUG] [Thread-121959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:57:24.509 [DEBUG] [Thread-121959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:57:24.509 [DEBUG] [Thread-121959] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:57:24.518 [DEBUG] [Thread-121959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:57:24.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:57:24.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:57:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:57:24.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:57:24.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:57:24.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:57:24.552 [DEBUG] [Thread-121959] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:57:29.266 [DEBUG] [Thread-121961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:44.300 [DEBUG] [Thread-121962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:54.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:57:54.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:57:54.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:57:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 57, 27), 20.66, 24.49, 0.0, 28.0, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:57:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:57:27
2025-12-03T18:57:55.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:57:55.529 [DEBUG] [Thread-121963] [transport.py] [_log()] starting thread (client mode): 0xa277b520
2025-12-03T18:57:55.529 [DEBUG] [Thread-121963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:57:55.549 [DEBUG] [Thread-121963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:57:55.549 [INFO] [Thread-121963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] client lang: <none>
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] server lang: <none>
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] kex follows: False
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:57:55.552 [DEBUG] [Thread-121963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:57:55.553 [DEBUG] [Thread-121963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:57:55.553 [DEBUG] [Thread-121963] [transport.py] [_log()] Compression: none
2025-12-03T18:57:55.553 [DEBUG] [Thread-121963] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:57:55.568 [DEBUG] [Thread-121963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:57:55.568 [DEBUG] [Thread-121963] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:57:55.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:57:55.569 [DEBUG] [Thread-121963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:57:55.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:57:55.571 [DEBUG] [Thread-121963] [transport.py] [_log()] userauth is OK
2025-12-03T18:57:55.571 [DEBUG] [Thread-121963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:57:55.571 [DEBUG] [Thread-121963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:57:55.571 [DEBUG] [Thread-121963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:57:55.571 [DEBUG] [Thread-121963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:57:55.595 [INFO] [Thread-121963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:57:55.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:57:56.202 [DEBUG] [Thread-121963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:57:56.203 [DEBUG] [Thread-121963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:57:56.203 [DEBUG] [Thread-121963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:57:56.244 [DEBUG] [Thread-121963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:57:56.244 [DEBUG] [Thread-121963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:57:56.247 [DEBUG] [Thread-121963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:57:56.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:57:56.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:57:56.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:57:56.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:57:56.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:57:56.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:57:56.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:57:56.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.706297 -999.00  +19.00  19.93     30   +1.20 1 1 1 1 1   887    0 17.47 -26.23 ----- 19.9 19.9 146.4 27.9 21.1 -28.2 21.4 -27.4 22.1 -26.7 22.2 -27.5
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.706297
2025-12-03T18:57:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:57:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:57:56.269 [DEBUG] [Thread-121963] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:57:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:57:56.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:57:56.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:57:56.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:57:27', tmtdew=20.66, humidity=24.49, cloud=0.0, wind=28.0, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:57:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:57:56.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:57:56.366 [DEBUG] [Thread-121966] [transport.py] [_log()] starting thread (client mode): 0xa51d3f70
2025-12-03T18:57:56.366 [DEBUG] [Thread-121966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:57:56.381 [DEBUG] [Thread-121966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:57:56.381 [INFO] [Thread-121966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:57:56.388 [DEBUG] [Thread-121966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] client lang: <none>
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] server lang: <none>
2025-12-03T18:57:56.389 [DEBUG] [Thread-121966] [transport.py] [_log()] kex follows: False
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] Compression: none
2025-12-03T18:57:56.390 [DEBUG] [Thread-121966] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:57:56.448 [DEBUG] [Thread-121966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:57:56.448 [DEBUG] [Thread-121966] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:57:56.449 [DEBUG] [Thread-121966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:57:56.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:57:56.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:57:56.504 [DEBUG] [Thread-121966] [transport.py] [_log()] userauth is OK
2025-12-03T18:57:56.505 [DEBUG] [Thread-121966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:57:56.505 [DEBUG] [Thread-121966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:57:56.505 [DEBUG] [Thread-121966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:57:56.505 [DEBUG] [Thread-121966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:57:56.525 [INFO] [Thread-121966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:57:56.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:57:56.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:57:57.368 [DEBUG] [Thread-121966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:57:57.368 [DEBUG] [Thread-121966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:57:57.416 [DEBUG] [Thread-121966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:57:57.416 [DEBUG] [Thread-121966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:57:57.425 [DEBUG] [Thread-121966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:57:57.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:57:57.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:57:57.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:57:57.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:57:57.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:57:57.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:57:57.463 [DEBUG] [Thread-121966] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:57:58.560 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:58.561 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:57:59.328 [DEBUG] [Thread-121968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:01.658 [DEBUG] [Thread-121969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:14.371 [DEBUG] [Thread-121970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:27.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:58:27.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:58:27.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:58:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 57, 59), 20.6, 24.92, 0.0, 29.06, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:58:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:57:59
2025-12-03T18:58:28.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:58:28.477 [DEBUG] [Thread-121971] [transport.py] [_log()] starting thread (client mode): 0xa2761d20
2025-12-03T18:58:28.477 [DEBUG] [Thread-121971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:58:28.498 [DEBUG] [Thread-121971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:58:28.498 [INFO] [Thread-121971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] client lang: <none>
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] server lang: <none>
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] kex follows: False
2025-12-03T18:58:28.501 [DEBUG] [Thread-121971] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] Compression: none
2025-12-03T18:58:28.502 [DEBUG] [Thread-121971] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:58:28.517 [DEBUG] [Thread-121971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:58:28.517 [DEBUG] [Thread-121971] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:58:28.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:58:28.518 [DEBUG] [Thread-121971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:58:28.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:58:28.519 [DEBUG] [Thread-121971] [transport.py] [_log()] userauth is OK
2025-12-03T18:58:28.519 [DEBUG] [Thread-121971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:58:28.519 [DEBUG] [Thread-121971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:58:28.519 [DEBUG] [Thread-121971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:58:28.519 [DEBUG] [Thread-121971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:58:28.534 [INFO] [Thread-121971] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:58:28.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:58:29.184 [DEBUG] [Thread-121971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:58:29.184 [DEBUG] [Thread-121971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:58:29.184 [DEBUG] [Thread-121971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:58:29.224 [DEBUG] [Thread-121971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:58:29.225 [DEBUG] [Thread-121971] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:58:29.227 [DEBUG] [Thread-121971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:58:29.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:58:29.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:58:29.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:58:29.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:58:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:58:29.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:58:29.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.706644 -999.00  +19.00  22.24     30   +1.30 1 1 1 1 1   887    0 17.29 -24.70 ----- 22.2 22.2 142.6 27.9 21.0 -28.2 21.4 -27.9 22.0 -26.3 22.1 -27.8
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.706644
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:58:29.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:58:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:58:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:58:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:58:29.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:57:59', tmtdew=20.6, humidity=24.92, cloud=0.0, wind=29.06, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:57:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:58:29.244 [DEBUG] [Thread-121971] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:58:29.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:58:29.330 [DEBUG] [Thread-121974] [transport.py] [_log()] starting thread (client mode): 0xa517dc00
2025-12-03T18:58:29.330 [DEBUG] [Thread-121974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:58:29.345 [DEBUG] [Thread-121974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:58:29.345 [INFO] [Thread-121974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:58:29.352 [DEBUG] [Thread-121974] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] client lang: <none>
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] server lang: <none>
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] kex follows: False
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] Compression: none
2025-12-03T18:58:29.353 [DEBUG] [Thread-121974] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:58:29.396 [DEBUG] [Thread-121976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:29.411 [DEBUG] [Thread-121974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:58:29.411 [DEBUG] [Thread-121974] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:58:29.411 [DEBUG] [Thread-121974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:58:29.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:58:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:58:29.471 [DEBUG] [Thread-121974] [transport.py] [_log()] userauth is OK
2025-12-03T18:58:29.471 [DEBUG] [Thread-121974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:58:29.471 [DEBUG] [Thread-121974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:58:29.471 [DEBUG] [Thread-121974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:58:29.471 [DEBUG] [Thread-121974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:58:29.486 [INFO] [Thread-121974] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:58:29.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:58:29.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:58:30.400 [DEBUG] [Thread-121974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:58:30.401 [DEBUG] [Thread-121974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:58:30.448 [DEBUG] [Thread-121974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:58:30.449 [DEBUG] [Thread-121974] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:58:30.458 [DEBUG] [Thread-121974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:58:30.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:58:30.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:58:30.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:58:30.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:58:30.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:58:30.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:58:30.490 [DEBUG] [Thread-121974] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:58:44.432 [DEBUG] [Thread-121977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:58.699 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:58.701 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:58:59.457 [DEBUG] [Thread-121978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:00.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:59:00.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:59:00.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:59:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 58, 31), 20.58, 24.95, 0.0, 29.63, 19.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:59:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:58:31
2025-12-03T18:59:01.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:59:01.468 [DEBUG] [Thread-121979] [transport.py] [_log()] starting thread (client mode): 0xa27245e0
2025-12-03T18:59:01.468 [DEBUG] [Thread-121979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:59:01.488 [DEBUG] [Thread-121979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:59:01.488 [INFO] [Thread-121979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:01.491 [DEBUG] [Thread-121979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] client lang: <none>
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] server lang: <none>
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] kex follows: False
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] Compression: none
2025-12-03T18:59:01.492 [DEBUG] [Thread-121979] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:59:01.509 [DEBUG] [Thread-121979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:59:01.510 [DEBUG] [Thread-121979] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:59:01.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:59:01.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] userauth is OK
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:59:01.512 [DEBUG] [Thread-121979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:59:01.532 [INFO] [Thread-121979] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:59:01.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:59:01.707 [DEBUG] [Thread-121981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:02.187 [DEBUG] [Thread-121979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:59:02.187 [DEBUG] [Thread-121979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:59:02.187 [DEBUG] [Thread-121979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:59:02.228 [DEBUG] [Thread-121979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:59:02.228 [DEBUG] [Thread-121979] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:59:02.230 [DEBUG] [Thread-121979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:59:02.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:59:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:59:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:59:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:59:02.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:59:02.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:59:02.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.706991 -999.00  +18.90  27.36     30   +1.20 1 1 1 1 1   887    0 17.02 -25.87 ----- 27.4 27.4 145.4 34.6 20.9 -28.1 21.4 -27.9 21.9 -26.3 22.1 -27.8
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.706991
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:59:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:58:31', tmtdew=20.58, humidity=24.95, cloud=0.0, wind=29.63, temperature=19.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:58:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:59:02.246 [DEBUG] [Thread-121979] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:59:02.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:59:02.330 [DEBUG] [Thread-121983] [transport.py] [_log()] starting thread (client mode): 0xa2726dd0
2025-12-03T18:59:02.330 [DEBUG] [Thread-121983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:59:02.344 [DEBUG] [Thread-121983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:59:02.345 [INFO] [Thread-121983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] client lang: <none>
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] server lang: <none>
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] kex follows: False
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] Compression: none
2025-12-03T18:59:02.352 [DEBUG] [Thread-121983] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:59:02.408 [DEBUG] [Thread-121983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:59:02.409 [DEBUG] [Thread-121983] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:59:02.409 [DEBUG] [Thread-121983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:59:02.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:59:02.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:59:02.470 [DEBUG] [Thread-121983] [transport.py] [_log()] userauth is OK
2025-12-03T18:59:02.470 [DEBUG] [Thread-121983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:59:02.470 [DEBUG] [Thread-121983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:59:02.470 [DEBUG] [Thread-121983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:59:02.470 [DEBUG] [Thread-121983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:59:02.489 [INFO] [Thread-121983] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:59:02.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:59:02.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:59:03.387 [DEBUG] [Thread-121983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:59:03.387 [DEBUG] [Thread-121983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:59:03.435 [DEBUG] [Thread-121983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:59:03.435 [DEBUG] [Thread-121983] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:59:03.444 [DEBUG] [Thread-121983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:59:03.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:59:03.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:59:03.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:59:03.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:59:03.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:59:03.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:59:03.477 [DEBUG] [Thread-121983] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:59:14.482 [DEBUG] [Thread-121985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:29.524 [DEBUG] [Thread-121986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T18:59:33.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T18:59:33.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T18:59:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 59, 3), 20.5, 25.1, 0.0, 27.19, 19.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T18:59:34.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:59:03
2025-12-03T18:59:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T18:59:34.432 [DEBUG] [Thread-121987] [transport.py] [_log()] starting thread (client mode): 0xa2727d60
2025-12-03T18:59:34.432 [DEBUG] [Thread-121987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:59:34.452 [DEBUG] [Thread-121987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T18:59:34.452 [INFO] [Thread-121987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T18:59:34.455 [DEBUG] [Thread-121987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] client lang: <none>
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] server lang: <none>
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] kex follows: False
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:59:34.456 [DEBUG] [Thread-121987] [transport.py] [_log()] Compression: none
2025-12-03T18:59:34.457 [DEBUG] [Thread-121987] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:59:34.473 [DEBUG] [Thread-121987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:59:34.474 [DEBUG] [Thread-121987] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:59:34.474 [DEBUG] [Thread-121987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T18:59:34.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T18:59:34.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:59:34.476 [DEBUG] [Thread-121987] [transport.py] [_log()] userauth is OK
2025-12-03T18:59:34.477 [DEBUG] [Thread-121987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:59:34.477 [DEBUG] [Thread-121987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:59:34.477 [DEBUG] [Thread-121987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T18:59:34.477 [DEBUG] [Thread-121987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:59:34.503 [INFO] [Thread-121987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:59:34.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:59:35.149 [DEBUG] [Thread-121987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:59:35.149 [DEBUG] [Thread-121987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:59:35.150 [DEBUG] [Thread-121987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T18:59:35.190 [DEBUG] [Thread-121987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:59:35.190 [DEBUG] [Thread-121987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:59:35.193 [DEBUG] [Thread-121987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:59:35.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:59:35.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T18:59:35.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T18:59:35.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T18:59:35.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:59:35.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T18:59:35.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.707339 -999.00  +18.90  16.98     30   +1.30 1 1 1 1 1   887    0 17.41 -25.03 ----- 17.0 17.0 146.2 28.7 20.9 -28.1 21.3 -27.8 21.9 -26.2 22.0 -27.8
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T18:59:35.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.707339
2025-12-03T18:59:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T18:59:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T18:59:35.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T18:59:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T18:59:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T18:59:35.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:59:03', tmtdew=20.5, humidity=25.1, cloud=0.0, wind=27.19, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:58:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T18:59:35.219 [DEBUG] [Thread-121987] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:59:35.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T18:59:35.314 [DEBUG] [Thread-121990] [transport.py] [_log()] starting thread (client mode): 0xa51bafb0
2025-12-03T18:59:35.314 [DEBUG] [Thread-121990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T18:59:35.328 [DEBUG] [Thread-121990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T18:59:35.328 [INFO] [Thread-121990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] client lang: <none>
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] server lang: <none>
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] kex follows: False
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] Compression: none
2025-12-03T18:59:35.336 [DEBUG] [Thread-121990] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T18:59:35.394 [DEBUG] [Thread-121990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T18:59:35.395 [DEBUG] [Thread-121990] [transport.py] [_log()] Switch to new keys ...
2025-12-03T18:59:35.395 [DEBUG] [Thread-121990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T18:59:35.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T18:59:35.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T18:59:35.451 [DEBUG] [Thread-121990] [transport.py] [_log()] userauth is OK
2025-12-03T18:59:35.451 [DEBUG] [Thread-121990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T18:59:35.451 [DEBUG] [Thread-121990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T18:59:35.451 [DEBUG] [Thread-121990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T18:59:35.451 [DEBUG] [Thread-121990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T18:59:35.472 [INFO] [Thread-121990] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T18:59:35.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T18:59:35.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T18:59:36.314 [DEBUG] [Thread-121990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T18:59:36.314 [DEBUG] [Thread-121990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T18:59:36.363 [DEBUG] [Thread-121990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T18:59:36.363 [DEBUG] [Thread-121990] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T18:59:36.376 [DEBUG] [Thread-121990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T18:59:36.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T18:59:36.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T18:59:36.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T18:59:36.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T18:59:36.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T18:59:36.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T18:59:36.408 [DEBUG] [Thread-121990] [transport.py] [_log()] EOF in transport thread
2025-12-03T18:59:44.554 [DEBUG] [Thread-121992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:58.839 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:58.840 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T18:59:59.590 [DEBUG] [Thread-121993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:01.752 [DEBUG] [Thread-121994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:06.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:00:06.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:00:06.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:00:07.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 18, 59, 35), 20.47, 25.05, 0.0, 28.28, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:00:07.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 18:59:35
2025-12-03T19:00:07.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:00:07.357 [DEBUG] [Thread-121995] [transport.py] [_log()] starting thread (client mode): 0xa27cbca0
2025-12-03T19:00:07.357 [DEBUG] [Thread-121995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:00:07.375 [DEBUG] [Thread-121995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:00:07.375 [INFO] [Thread-121995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] client lang: <none>
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] server lang: <none>
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] kex follows: False
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] Compression: none
2025-12-03T19:00:07.379 [DEBUG] [Thread-121995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:00:07.394 [DEBUG] [Thread-121995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:00:07.395 [DEBUG] [Thread-121995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:00:07.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:00:07.396 [DEBUG] [Thread-121995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:00:07.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:00:07.397 [DEBUG] [Thread-121995] [transport.py] [_log()] userauth is OK
2025-12-03T19:00:07.398 [DEBUG] [Thread-121995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:00:07.398 [DEBUG] [Thread-121995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:00:07.398 [DEBUG] [Thread-121995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:00:07.398 [DEBUG] [Thread-121995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:00:07.422 [INFO] [Thread-121995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:00:07.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:00:08.114 [DEBUG] [Thread-121995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:00:08.114 [DEBUG] [Thread-121995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:00:08.114 [DEBUG] [Thread-121995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:00:08.154 [DEBUG] [Thread-121995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:00:08.154 [DEBUG] [Thread-121995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:00:08.156 [DEBUG] [Thread-121995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:00:08.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:00:08.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:00:08.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:00:08.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:00:08.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:00:08.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:00:08.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.708033 -999.00  +18.80  21.74     30   +1.30 1 1 1 1 1   887    0 16.86 -28.44 ----- 21.7 21.7 143.4 29.2 20.9 -27.9 21.3 -27.8 21.9 -26.4 21.9 -27.9
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.708033
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:00:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T18:59:35', tmtdew=20.47, humidity=25.05, cloud=0.0, wind=28.28, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T16:59:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:00:08.172 [DEBUG] [Thread-121995] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:00:08.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:00:08.257 [DEBUG] [Thread-121998] [transport.py] [_log()] starting thread (client mode): 0xa51bbaf0
2025-12-03T19:00:08.257 [DEBUG] [Thread-121998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:00:08.272 [DEBUG] [Thread-121998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:00:08.272 [INFO] [Thread-121998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] client lang: <none>
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] server lang: <none>
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] kex follows: False
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] Compression: none
2025-12-03T19:00:08.280 [DEBUG] [Thread-121998] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:00:08.338 [DEBUG] [Thread-121998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:00:08.339 [DEBUG] [Thread-121998] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:00:08.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:00:08.339 [DEBUG] [Thread-121998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:00:08.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:00:08.395 [DEBUG] [Thread-121998] [transport.py] [_log()] userauth is OK
2025-12-03T19:00:08.395 [DEBUG] [Thread-121998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:00:08.395 [DEBUG] [Thread-121998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:00:08.395 [DEBUG] [Thread-121998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:00:08.395 [DEBUG] [Thread-121998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:00:08.413 [INFO] [Thread-121998] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:00:08.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:00:08.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:00:09.284 [DEBUG] [Thread-121998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:00:09.284 [DEBUG] [Thread-121998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:00:09.331 [DEBUG] [Thread-121998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:00:09.332 [DEBUG] [Thread-121998] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:00:09.340 [DEBUG] [Thread-121998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:00:09.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:00:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:00:09.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:00:09.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:00:09.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:00:09.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:00:09.371 [DEBUG] [Thread-121998] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:00:14.617 [DEBUG] [Thread-122000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:29.658 [DEBUG] [Thread-122001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:39.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:00:39.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:00:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:00:40.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 0, 7), 20.41, 25.15, 0.0, 28.41, 18.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:00:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:00:07
2025-12-03T19:00:40.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:00:40.397 [DEBUG] [Thread-122002] [transport.py] [_log()] starting thread (client mode): 0xa51b85e0
2025-12-03T19:00:40.397 [DEBUG] [Thread-122002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:00:40.417 [DEBUG] [Thread-122002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:00:40.418 [INFO] [Thread-122002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] client lang: <none>
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] server lang: <none>
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] kex follows: False
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] Compression: none
2025-12-03T19:00:40.421 [DEBUG] [Thread-122002] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:00:40.437 [DEBUG] [Thread-122002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:00:40.438 [DEBUG] [Thread-122002] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:00:40.438 [DEBUG] [Thread-122002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:00:40.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:00:40.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:00:40.439 [DEBUG] [Thread-122002] [transport.py] [_log()] userauth is OK
2025-12-03T19:00:40.439 [DEBUG] [Thread-122002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:00:40.439 [DEBUG] [Thread-122002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:00:40.439 [DEBUG] [Thread-122002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:00:40.439 [DEBUG] [Thread-122002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:00:40.457 [INFO] [Thread-122002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:00:40.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:00:41.095 [DEBUG] [Thread-122002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:00:41.095 [DEBUG] [Thread-122002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:00:41.096 [DEBUG] [Thread-122002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:00:41.136 [DEBUG] [Thread-122002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:00:41.136 [DEBUG] [Thread-122002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:00:41.139 [DEBUG] [Thread-122002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:00:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:00:41.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:00:41.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:00:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:00:41.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:00:41.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:00:41.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.708380 -999.00  +18.80  24.13     31   +1.30 1 1 1 1 1   887    0 16.79 -31.14 ----- 24.1 24.1 143.0 29.8 20.8 -27.9 21.2 -27.6 21.8 -26.5 21.9 -27.8
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.708380
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:00:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:00:07', tmtdew=20.41, humidity=25.15, cloud=0.0, wind=28.41, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:00:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:00:41.157 [DEBUG] [Thread-122002] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:00:41.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:00:41.243 [DEBUG] [Thread-122005] [transport.py] [_log()] starting thread (client mode): 0xa2763280
2025-12-03T19:00:41.243 [DEBUG] [Thread-122005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:00:41.258 [DEBUG] [Thread-122005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:00:41.258 [INFO] [Thread-122005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:00:41.265 [DEBUG] [Thread-122005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] client lang: <none>
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] server lang: <none>
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] kex follows: False
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] Compression: none
2025-12-03T19:00:41.266 [DEBUG] [Thread-122005] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:00:41.322 [DEBUG] [Thread-122005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:00:41.323 [DEBUG] [Thread-122005] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:00:41.323 [DEBUG] [Thread-122005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:00:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:00:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:00:41.380 [DEBUG] [Thread-122005] [transport.py] [_log()] userauth is OK
2025-12-03T19:00:41.380 [DEBUG] [Thread-122005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:00:41.380 [DEBUG] [Thread-122005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:00:41.380 [DEBUG] [Thread-122005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:00:41.380 [DEBUG] [Thread-122005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:00:41.393 [INFO] [Thread-122005] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:00:41.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:00:41.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:00:42.281 [DEBUG] [Thread-122005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:00:42.281 [DEBUG] [Thread-122005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:00:42.329 [DEBUG] [Thread-122005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:00:42.329 [DEBUG] [Thread-122005] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:00:42.337 [DEBUG] [Thread-122005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:00:42.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:00:42.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:00:42.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:00:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:00:42.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:00:42.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:00:42.371 [DEBUG] [Thread-122005] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:00:44.692 [DEBUG] [Thread-122007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:58.980 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:58.982 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:00:59.736 [DEBUG] [Thread-122008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:01.780 [DEBUG] [Thread-122009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:01:12.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:01:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:01:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 0, 39), 20.43, 25.2, 0.0, 29.91, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:01:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:00:39
2025-12-03T19:01:13.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:01:13.396 [DEBUG] [Thread-122010] [transport.py] [_log()] starting thread (client mode): 0xa27627d0
2025-12-03T19:01:13.396 [DEBUG] [Thread-122010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:01:13.416 [DEBUG] [Thread-122010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:01:13.416 [INFO] [Thread-122010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:13.419 [DEBUG] [Thread-122010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] client lang: <none>
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] server lang: <none>
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] kex follows: False
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] Compression: none
2025-12-03T19:01:13.420 [DEBUG] [Thread-122010] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:01:13.436 [DEBUG] [Thread-122010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:01:13.436 [DEBUG] [Thread-122010] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:01:13.436 [DEBUG] [Thread-122010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:01:13.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:01:13.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:01:13.437 [DEBUG] [Thread-122010] [transport.py] [_log()] userauth is OK
2025-12-03T19:01:13.437 [DEBUG] [Thread-122010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:01:13.437 [DEBUG] [Thread-122010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:01:13.437 [DEBUG] [Thread-122010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:01:13.437 [DEBUG] [Thread-122010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:01:13.447 [INFO] [Thread-122010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:01:13.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:01:14.160 [DEBUG] [Thread-122010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:01:14.160 [DEBUG] [Thread-122010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:01:14.161 [DEBUG] [Thread-122010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:01:14.200 [DEBUG] [Thread-122010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:01:14.201 [DEBUG] [Thread-122010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:01:14.203 [DEBUG] [Thread-122010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:01:14.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:01:14.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:01:14.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:01:14.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:01:14.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:01:14.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:01:14.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:01:14.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.708728 -999.00  +18.80  14.60     31   +1.30 1 1 1 1 1   887    0 17.12 -31.19 ----- 14.6 14.6 143.8 29.8 20.8 -27.9 21.3 -27.4 21.8 -26.4 21.8 -27.7
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.708728
2025-12-03T19:01:14.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:01:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:01:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:01:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:01:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:01:14.227 [DEBUG] [Thread-122010] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:01:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:00:39', tmtdew=20.43, humidity=25.2, cloud=0.0, wind=29.91, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:00:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:01:14.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:01:14.325 [DEBUG] [Thread-122013] [transport.py] [_log()] starting thread (client mode): 0xa27cb8b0
2025-12-03T19:01:14.325 [DEBUG] [Thread-122013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:01:14.339 [DEBUG] [Thread-122013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:01:14.339 [INFO] [Thread-122013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] client lang: <none>
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] server lang: <none>
2025-12-03T19:01:14.347 [DEBUG] [Thread-122013] [transport.py] [_log()] kex follows: False
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] Compression: none
2025-12-03T19:01:14.348 [DEBUG] [Thread-122013] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:01:14.405 [DEBUG] [Thread-122013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:01:14.405 [DEBUG] [Thread-122013] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:01:14.406 [DEBUG] [Thread-122013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:01:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:01:14.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:01:14.461 [DEBUG] [Thread-122013] [transport.py] [_log()] userauth is OK
2025-12-03T19:01:14.461 [DEBUG] [Thread-122013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:01:14.461 [DEBUG] [Thread-122013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:01:14.461 [DEBUG] [Thread-122013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:01:14.462 [DEBUG] [Thread-122013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:01:14.484 [INFO] [Thread-122013] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:01:14.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:01:14.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:01:14.766 [DEBUG] [Thread-122015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:15.331 [DEBUG] [Thread-122013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:01:15.332 [DEBUG] [Thread-122013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:01:15.379 [DEBUG] [Thread-122013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:01:15.380 [DEBUG] [Thread-122013] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:01:15.388 [DEBUG] [Thread-122013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:01:15.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:01:15.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:01:15.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:01:15.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:01:15.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:01:15.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:01:15.422 [DEBUG] [Thread-122013] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:01:29.807 [DEBUG] [Thread-122016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:44.832 [DEBUG] [Thread-122017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:45.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:01:45.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:01:45.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:01:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 1, 11), 20.45, 25.17, 0.0, 29.89, 18.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:01:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:01:11
2025-12-03T19:01:46.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:01:46.414 [DEBUG] [Thread-122018] [transport.py] [_log()] starting thread (client mode): 0xa514b040
2025-12-03T19:01:46.414 [DEBUG] [Thread-122018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:01:46.435 [DEBUG] [Thread-122018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:01:46.435 [INFO] [Thread-122018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:01:46.438 [DEBUG] [Thread-122018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:01:46.438 [DEBUG] [Thread-122018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:01:46.438 [DEBUG] [Thread-122018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:01:46.438 [DEBUG] [Thread-122018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:46.438 [DEBUG] [Thread-122018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] client lang: <none>
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] server lang: <none>
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] kex follows: False
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:01:46.439 [DEBUG] [Thread-122018] [transport.py] [_log()] Compression: none
2025-12-03T19:01:46.440 [DEBUG] [Thread-122018] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:01:46.460 [DEBUG] [Thread-122018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:01:46.461 [DEBUG] [Thread-122018] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:01:46.461 [DEBUG] [Thread-122018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:01:46.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:01:46.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:01:46.463 [DEBUG] [Thread-122018] [transport.py] [_log()] userauth is OK
2025-12-03T19:01:46.463 [DEBUG] [Thread-122018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:01:46.463 [DEBUG] [Thread-122018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:01:46.464 [DEBUG] [Thread-122018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:01:46.464 [DEBUG] [Thread-122018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:01:46.498 [INFO] [Thread-122018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:01:46.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:01:47.127 [DEBUG] [Thread-122018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:01:47.127 [DEBUG] [Thread-122018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:01:47.127 [DEBUG] [Thread-122018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:01:47.167 [DEBUG] [Thread-122018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:01:47.167 [DEBUG] [Thread-122018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:01:47.170 [DEBUG] [Thread-122018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:01:47.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:01:47.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:01:47.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:01:47.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:01:47.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:01:47.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:01:47.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.709075 -999.00  +18.80  19.60     30   +1.30 1 1 1 1 1   887    0 17.32 -31.00 ----- 19.6 19.6 139.0 27.2 20.8 -28.0 21.2 -27.7 21.8 -26.2 21.8 -27.5
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.709075
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:01:47.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:01:11', tmtdew=20.45, humidity=25.17, cloud=0.0, wind=29.89, temperature=18.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:01:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:01:47.190 [DEBUG] [Thread-122018] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:01:47.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:01:47.275 [DEBUG] [Thread-122021] [transport.py] [_log()] starting thread (client mode): 0xa2760f70
2025-12-03T19:01:47.275 [DEBUG] [Thread-122021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:01:47.289 [DEBUG] [Thread-122021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:01:47.289 [INFO] [Thread-122021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] client lang: <none>
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] server lang: <none>
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] kex follows: False
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:01:47.297 [DEBUG] [Thread-122021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:01:47.298 [DEBUG] [Thread-122021] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:01:47.298 [DEBUG] [Thread-122021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:01:47.298 [DEBUG] [Thread-122021] [transport.py] [_log()] Compression: none
2025-12-03T19:01:47.298 [DEBUG] [Thread-122021] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:01:47.353 [DEBUG] [Thread-122021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:01:47.354 [DEBUG] [Thread-122021] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:01:47.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:01:47.355 [DEBUG] [Thread-122021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:01:47.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:01:47.409 [DEBUG] [Thread-122021] [transport.py] [_log()] userauth is OK
2025-12-03T19:01:47.410 [DEBUG] [Thread-122021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:01:47.410 [DEBUG] [Thread-122021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:01:47.410 [DEBUG] [Thread-122021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:01:47.410 [DEBUG] [Thread-122021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:01:47.429 [INFO] [Thread-122021] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:01:47.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:01:47.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:01:48.278 [DEBUG] [Thread-122021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:01:48.279 [DEBUG] [Thread-122021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:01:48.327 [DEBUG] [Thread-122021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:01:48.327 [DEBUG] [Thread-122021] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:01:48.336 [DEBUG] [Thread-122021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:01:48.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:01:48.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:01:48.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:01:48.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:01:48.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:01:48.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:01:48.372 [DEBUG] [Thread-122021] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:01:59.122 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:59.124 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:01:59.859 [DEBUG] [Thread-122023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:01.813 [DEBUG] [Thread-122024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:14.905 [DEBUG] [Thread-122025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:18.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:02:18.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:02:18.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:02:19.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 2, 15), 20.41, 25.15, 0.0, 26.03, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:02:19.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:02:15
2025-12-03T19:02:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:02:19.398 [DEBUG] [Thread-122026] [transport.py] [_log()] starting thread (client mode): 0xa514a980
2025-12-03T19:02:19.398 [DEBUG] [Thread-122026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:02:19.417 [DEBUG] [Thread-122026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:02:19.417 [INFO] [Thread-122026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] client lang: <none>
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] server lang: <none>
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] kex follows: False
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] Compression: none
2025-12-03T19:02:19.421 [DEBUG] [Thread-122026] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:02:19.436 [DEBUG] [Thread-122026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:02:19.436 [DEBUG] [Thread-122026] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:02:19.436 [DEBUG] [Thread-122026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:02:19.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:02:19.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:02:19.437 [DEBUG] [Thread-122026] [transport.py] [_log()] userauth is OK
2025-12-03T19:02:19.437 [DEBUG] [Thread-122026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:02:19.437 [DEBUG] [Thread-122026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:02:19.437 [DEBUG] [Thread-122026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:02:19.437 [DEBUG] [Thread-122026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:02:19.451 [INFO] [Thread-122026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:02:19.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:02:20.176 [DEBUG] [Thread-122026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:02:20.176 [DEBUG] [Thread-122026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:02:20.176 [DEBUG] [Thread-122026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:02:20.216 [DEBUG] [Thread-122026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:02:20.216 [DEBUG] [Thread-122026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:02:20.219 [DEBUG] [Thread-122026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:02:20.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:02:20.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:02:20.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:02:20.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:02:20.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:02:20.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:02:20.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.709422 -999.00  +18.80  26.99     31   +1.30 1 1 1 1 1   887    0 17.32 -32.31 ----- 27.0 27.0 143.6 31.1 20.8 -28.2 21.2 -27.9 21.8 -26.4 21.8 -27.9
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.709422
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:02:20.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:02:15', tmtdew=20.41, humidity=25.15, cloud=0.0, wind=26.03, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:01:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:02:20.236 [DEBUG] [Thread-122026] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:02:20.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:02:20.322 [DEBUG] [Thread-122029] [transport.py] [_log()] starting thread (client mode): 0xa51b8e20
2025-12-03T19:02:20.323 [DEBUG] [Thread-122029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:02:20.342 [DEBUG] [Thread-122029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:02:20.342 [INFO] [Thread-122029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:02:20.349 [DEBUG] [Thread-122029] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:02:20.349 [DEBUG] [Thread-122029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:02:20.349 [DEBUG] [Thread-122029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:02:20.349 [DEBUG] [Thread-122029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] client lang: <none>
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] server lang: <none>
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] kex follows: False
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] Compression: none
2025-12-03T19:02:20.350 [DEBUG] [Thread-122029] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:02:20.405 [DEBUG] [Thread-122029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:02:20.405 [DEBUG] [Thread-122029] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:02:20.405 [DEBUG] [Thread-122029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:02:20.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:02:20.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:02:20.462 [DEBUG] [Thread-122029] [transport.py] [_log()] userauth is OK
2025-12-03T19:02:20.462 [DEBUG] [Thread-122029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:02:20.462 [DEBUG] [Thread-122029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:02:20.462 [DEBUG] [Thread-122029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:02:20.462 [DEBUG] [Thread-122029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:02:20.476 [INFO] [Thread-122029] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:02:20.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:02:20.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:02:21.362 [DEBUG] [Thread-122029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:02:21.362 [DEBUG] [Thread-122029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:02:21.410 [DEBUG] [Thread-122029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:02:21.410 [DEBUG] [Thread-122029] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:02:21.419 [DEBUG] [Thread-122029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:02:21.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:02:21.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:02:21.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:02:21.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:02:21.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:02:21.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:02:21.451 [DEBUG] [Thread-122029] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:02:29.932 [DEBUG] [Thread-122031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:44.982 [DEBUG] [Thread-122032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:51.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:02:51.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:02:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:02:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 2, 47), 20.47, 25.13, 0.0, 28.55, 18.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:02:52.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:02:47
2025-12-03T19:02:52.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:02:52.421 [DEBUG] [Thread-122033] [transport.py] [_log()] starting thread (client mode): 0xa51bb3a0
2025-12-03T19:02:52.421 [DEBUG] [Thread-122033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:02:52.441 [DEBUG] [Thread-122033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:02:52.441 [INFO] [Thread-122033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:52.444 [DEBUG] [Thread-122033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] client lang: <none>
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] server lang: <none>
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] kex follows: False
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] Compression: none
2025-12-03T19:02:52.445 [DEBUG] [Thread-122033] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:02:52.462 [DEBUG] [Thread-122033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:02:52.463 [DEBUG] [Thread-122033] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:02:52.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:02:52.464 [DEBUG] [Thread-122033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:02:52.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:02:52.466 [DEBUG] [Thread-122033] [transport.py] [_log()] userauth is OK
2025-12-03T19:02:52.466 [DEBUG] [Thread-122033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:02:52.466 [DEBUG] [Thread-122033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:02:52.466 [DEBUG] [Thread-122033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:02:52.466 [DEBUG] [Thread-122033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:02:52.486 [INFO] [Thread-122033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:02:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:02:53.093 [DEBUG] [Thread-122033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:02:53.094 [DEBUG] [Thread-122033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:02:53.094 [DEBUG] [Thread-122033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:02:53.135 [DEBUG] [Thread-122033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:02:53.135 [DEBUG] [Thread-122033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:02:53.138 [DEBUG] [Thread-122033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:02:53.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:02:53.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:02:53.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:02:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:02:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:02:53.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:02:53.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.709769 -999.00  +18.80  16.98     31   +1.30 1 1 1 1 1   887    0 16.99 -31.90 ----- 17.0 17.0 140.4 25.1 20.7 -27.9 21.2 -27.9 21.6 -25.9 21.8 -27.9
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:02:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.709769
2025-12-03T19:02:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:02:53.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:02:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:02:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:02:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:02:53.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:02:47', tmtdew=20.47, humidity=25.13, cloud=0.0, wind=28.55, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:02:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:02:53.162 [DEBUG] [Thread-122033] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:02:53.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:02:53.269 [DEBUG] [Thread-122036] [transport.py] [_log()] starting thread (client mode): 0xa2728af0
2025-12-03T19:02:53.269 [DEBUG] [Thread-122036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:02:53.284 [DEBUG] [Thread-122036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:02:53.284 [INFO] [Thread-122036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:02:53.292 [DEBUG] [Thread-122036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] client lang: <none>
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] server lang: <none>
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] kex follows: False
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:02:53.293 [DEBUG] [Thread-122036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:02:53.294 [DEBUG] [Thread-122036] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:02:53.294 [DEBUG] [Thread-122036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:02:53.294 [DEBUG] [Thread-122036] [transport.py] [_log()] Compression: none
2025-12-03T19:02:53.294 [DEBUG] [Thread-122036] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:02:53.351 [DEBUG] [Thread-122036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:02:53.352 [DEBUG] [Thread-122036] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:02:53.352 [DEBUG] [Thread-122036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:02:53.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:02:53.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:02:53.411 [DEBUG] [Thread-122036] [transport.py] [_log()] userauth is OK
2025-12-03T19:02:53.411 [DEBUG] [Thread-122036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:02:53.411 [DEBUG] [Thread-122036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:02:53.412 [DEBUG] [Thread-122036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:02:53.412 [DEBUG] [Thread-122036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:02:53.433 [INFO] [Thread-122036] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:02:53.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:02:53.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:02:54.288 [DEBUG] [Thread-122036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:02:54.289 [DEBUG] [Thread-122036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:02:54.335 [DEBUG] [Thread-122036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:02:54.336 [DEBUG] [Thread-122036] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:02:54.345 [DEBUG] [Thread-122036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:02:54.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:02:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:02:54.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:02:54.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:02:54.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:02:54.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:02:54.380 [DEBUG] [Thread-122036] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:02:59.261 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:02:59.262 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:00.008 [DEBUG] [Thread-122038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:01.841 [DEBUG] [Thread-122039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:15.041 [DEBUG] [Thread-122040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:24.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:03:24.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:03:24.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:03:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 3, 20), 20.48, 25.12, 0.0, 29.61, 18.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:03:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:03:20
2025-12-03T19:03:25.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:03:25.373 [DEBUG] [Thread-122041] [transport.py] [_log()] starting thread (client mode): 0xa514a710
2025-12-03T19:03:25.373 [DEBUG] [Thread-122041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:03:25.394 [DEBUG] [Thread-122041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:03:25.394 [INFO] [Thread-122041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:03:25.398 [DEBUG] [Thread-122041] [transport.py] [_log()] client lang: <none>
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] server lang: <none>
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] kex follows: False
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] Compression: none
2025-12-03T19:03:25.399 [DEBUG] [Thread-122041] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:03:25.415 [DEBUG] [Thread-122041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:03:25.415 [DEBUG] [Thread-122041] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:03:25.416 [DEBUG] [Thread-122041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:03:25.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:03:25.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:03:25.418 [DEBUG] [Thread-122041] [transport.py] [_log()] userauth is OK
2025-12-03T19:03:25.418 [DEBUG] [Thread-122041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:03:25.418 [DEBUG] [Thread-122041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:03:25.418 [DEBUG] [Thread-122041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:03:25.419 [DEBUG] [Thread-122041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:03:25.440 [INFO] [Thread-122041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:03:25.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:03:26.182 [DEBUG] [Thread-122041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:03:26.183 [DEBUG] [Thread-122041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:03:26.183 [DEBUG] [Thread-122041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:03:26.224 [DEBUG] [Thread-122041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:03:26.224 [DEBUG] [Thread-122041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:03:26.226 [DEBUG] [Thread-122041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:03:26.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:03:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:03:26.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:03:26.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:03:26.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:03:26.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:03:26.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.710116 -999.00  +18.80  24.12     31   +1.30 1 1 1 1 1   887    0 16.89 -32.88 ----- 24.1 24.1 141.4 31.0 20.7 -27.9 21.1 -27.7 21.7 -26.2 21.7 -27.8
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:03:26.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.710116
2025-12-03T19:03:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:03:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:03:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:03:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:03:26.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:03:26.244 [DEBUG] [Thread-122041] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:03:26.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:03:20', tmtdew=20.48, humidity=25.12, cloud=0.0, wind=29.61, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:02:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:03:26.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:03:26.340 [DEBUG] [Thread-122044] [transport.py] [_log()] starting thread (client mode): 0xa514a980
2025-12-03T19:03:26.341 [DEBUG] [Thread-122044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:03:26.355 [DEBUG] [Thread-122044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:03:26.355 [INFO] [Thread-122044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:03:26.362 [DEBUG] [Thread-122044] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] client lang: <none>
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] server lang: <none>
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] kex follows: False
2025-12-03T19:03:26.363 [DEBUG] [Thread-122044] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] Compression: none
2025-12-03T19:03:26.364 [DEBUG] [Thread-122044] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:03:26.418 [DEBUG] [Thread-122044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:03:26.419 [DEBUG] [Thread-122044] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:03:26.419 [DEBUG] [Thread-122044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:03:26.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:03:26.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:03:26.475 [DEBUG] [Thread-122044] [transport.py] [_log()] userauth is OK
2025-12-03T19:03:26.475 [DEBUG] [Thread-122044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:03:26.475 [DEBUG] [Thread-122044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:03:26.476 [DEBUG] [Thread-122044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:03:26.476 [DEBUG] [Thread-122044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:03:26.495 [INFO] [Thread-122044] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:03:26.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:03:26.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:03:27.322 [DEBUG] [Thread-122044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:03:27.322 [DEBUG] [Thread-122044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:03:27.370 [DEBUG] [Thread-122044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:03:27.370 [DEBUG] [Thread-122044] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:03:27.379 [DEBUG] [Thread-122044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:03:27.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:03:27.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:03:27.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:03:27.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:03:27.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:03:27.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:03:27.415 [DEBUG] [Thread-122044] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:03:30.069 [DEBUG] [Thread-122046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:45.115 [DEBUG] [Thread-122047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:57.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:03:57.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:03:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:03:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 3, 52), 20.4, 25.17, 0.0, 29.45, 18.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:03:58.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:03:52
2025-12-03T19:03:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:03:58.388 [DEBUG] [Thread-122048] [transport.py] [_log()] starting thread (client mode): 0xa51ba500
2025-12-03T19:03:58.388 [DEBUG] [Thread-122048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:03:58.414 [DEBUG] [Thread-122048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:03:58.414 [INFO] [Thread-122048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] client lang: <none>
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] server lang: <none>
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] kex follows: False
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:03:58.418 [DEBUG] [Thread-122048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:03:58.419 [DEBUG] [Thread-122048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:03:58.419 [DEBUG] [Thread-122048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:03:58.419 [DEBUG] [Thread-122048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:03:58.419 [DEBUG] [Thread-122048] [transport.py] [_log()] Compression: none
2025-12-03T19:03:58.419 [DEBUG] [Thread-122048] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:03:58.435 [DEBUG] [Thread-122048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:03:58.436 [DEBUG] [Thread-122048] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:03:58.436 [DEBUG] [Thread-122048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:03:58.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:03:58.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:03:58.438 [DEBUG] [Thread-122048] [transport.py] [_log()] userauth is OK
2025-12-03T19:03:58.438 [DEBUG] [Thread-122048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:03:58.438 [DEBUG] [Thread-122048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:03:58.439 [DEBUG] [Thread-122048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:03:58.439 [DEBUG] [Thread-122048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:03:58.456 [INFO] [Thread-122048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:03:58.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:03:59.111 [DEBUG] [Thread-122048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:03:59.111 [DEBUG] [Thread-122048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:03:59.111 [DEBUG] [Thread-122048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:03:59.152 [DEBUG] [Thread-122048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:03:59.152 [DEBUG] [Thread-122048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:03:59.155 [DEBUG] [Thread-122048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:03:59.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:03:59.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:03:59.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:03:59.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:03:59.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:03:59.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:03:59.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:03:59.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:03:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:03:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.710464 -999.00  +18.80  25.45     31   +1.40 1 1 1 1 1   887    0 16.87 -33.26 ----- 25.4 25.4 160.2 27.3 20.7 -27.9 21.1 -27.3 21.6 -26.5 21.7 -27.3
2025-12-03T19:03:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:03:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:03:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.710464
2025-12-03T19:03:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:03:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:03:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:03:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:03:59.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:03:59.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:03:52', tmtdew=20.4, humidity=25.17, cloud=0.0, wind=29.45, temperature=18.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:03:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:03:59.186 [DEBUG] [Thread-122048] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:03:59.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:03:59.295 [DEBUG] [Thread-122051] [transport.py] [_log()] starting thread (client mode): 0xa2763040
2025-12-03T19:03:59.295 [DEBUG] [Thread-122051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:03:59.310 [DEBUG] [Thread-122051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:03:59.310 [INFO] [Thread-122051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:03:59.317 [DEBUG] [Thread-122051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:03:59.317 [DEBUG] [Thread-122051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:03:59.317 [DEBUG] [Thread-122051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:03:59.317 [DEBUG] [Thread-122051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] client lang: <none>
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] server lang: <none>
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] kex follows: False
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] Compression: none
2025-12-03T19:03:59.318 [DEBUG] [Thread-122051] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:03:59.376 [DEBUG] [Thread-122051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:03:59.376 [DEBUG] [Thread-122051] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:03:59.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:03:59.377 [DEBUG] [Thread-122051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:03:59.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:03:59.400 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:59.401 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:03:59.432 [DEBUG] [Thread-122051] [transport.py] [_log()] userauth is OK
2025-12-03T19:03:59.432 [DEBUG] [Thread-122051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:03:59.432 [DEBUG] [Thread-122051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:03:59.433 [DEBUG] [Thread-122051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:03:59.433 [DEBUG] [Thread-122051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:03:59.455 [INFO] [Thread-122051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:03:59.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:03:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:04:00.145 [DEBUG] [Thread-122053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:00.270 [DEBUG] [Thread-122051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:04:00.270 [DEBUG] [Thread-122051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:04:00.318 [DEBUG] [Thread-122051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:04:00.318 [DEBUG] [Thread-122051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:04:00.327 [DEBUG] [Thread-122051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:04:00.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:04:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:04:00.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:04:00.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:04:00.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:04:00.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:04:00.363 [DEBUG] [Thread-122051] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:04:01.893 [DEBUG] [Thread-122054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:15.197 [DEBUG] [Thread-122055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:30.227 [DEBUG] [Thread-122056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:04:30.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:04:30.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:04:31.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 4, 24), 20.35, 25.23, 0.0, 29.24, 18.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:04:31.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:04:24
2025-12-03T19:04:31.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:04:31.310 [DEBUG] [Thread-122057] [transport.py] [_log()] starting thread (client mode): 0xa51484c0
2025-12-03T19:04:31.310 [DEBUG] [Thread-122057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:04:31.331 [DEBUG] [Thread-122057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:04:31.331 [INFO] [Thread-122057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:04:31.334 [DEBUG] [Thread-122057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:04:31.334 [DEBUG] [Thread-122057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:04:31.334 [DEBUG] [Thread-122057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] client lang: <none>
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] server lang: <none>
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] kex follows: False
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] Compression: none
2025-12-03T19:04:31.335 [DEBUG] [Thread-122057] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:04:31.352 [DEBUG] [Thread-122057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:04:31.352 [DEBUG] [Thread-122057] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:04:31.353 [DEBUG] [Thread-122057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:04:31.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:04:31.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:04:31.355 [DEBUG] [Thread-122057] [transport.py] [_log()] userauth is OK
2025-12-03T19:04:31.355 [DEBUG] [Thread-122057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:04:31.355 [DEBUG] [Thread-122057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:04:31.355 [DEBUG] [Thread-122057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:04:31.355 [DEBUG] [Thread-122057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:04:31.379 [INFO] [Thread-122057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:04:31.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:04:32.104 [DEBUG] [Thread-122057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:04:32.105 [DEBUG] [Thread-122057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:04:32.105 [DEBUG] [Thread-122057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:04:32.146 [DEBUG] [Thread-122057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:04:32.146 [DEBUG] [Thread-122057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:04:32.149 [DEBUG] [Thread-122057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:04:32.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:04:32.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:04:32.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:04:32.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:04:32.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:04:32.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:04:32.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:04:32.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:04:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:04:32.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.710811 -999.00  +18.80  16.24     31   +1.40 1 1 1 1 1   887    0 16.92 -31.05 ----- 16.2 16.2 163.8 27.9 20.7 -28.2 21.1 -27.4 21.6 -26.5 21.6 -27.4
2025-12-03T19:04:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:04:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:04:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.710811
2025-12-03T19:04:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:04:32.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:04:32.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:04:32.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:04:32.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:04:32.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:04:24', tmtdew=20.35, humidity=25.23, cloud=0.0, wind=29.24, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:03:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:04:32.171 [DEBUG] [Thread-122057] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:04:32.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:04:32.268 [DEBUG] [Thread-122060] [transport.py] [_log()] starting thread (client mode): 0xa2724d30
2025-12-03T19:04:32.268 [DEBUG] [Thread-122060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:04:32.283 [DEBUG] [Thread-122060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:04:32.283 [INFO] [Thread-122060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:04:32.290 [DEBUG] [Thread-122060] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:04:32.290 [DEBUG] [Thread-122060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:04:32.290 [DEBUG] [Thread-122060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:04:32.290 [DEBUG] [Thread-122060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:04:32.290 [DEBUG] [Thread-122060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] client lang: <none>
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] server lang: <none>
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] kex follows: False
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] Compression: none
2025-12-03T19:04:32.291 [DEBUG] [Thread-122060] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:04:32.348 [DEBUG] [Thread-122060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:04:32.349 [DEBUG] [Thread-122060] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:04:32.349 [DEBUG] [Thread-122060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:04:32.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:04:32.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:04:32.404 [DEBUG] [Thread-122060] [transport.py] [_log()] userauth is OK
2025-12-03T19:04:32.404 [DEBUG] [Thread-122060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:04:32.405 [DEBUG] [Thread-122060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:04:32.405 [DEBUG] [Thread-122060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:04:32.405 [DEBUG] [Thread-122060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:04:32.423 [INFO] [Thread-122060] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:04:32.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:04:32.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:04:33.290 [DEBUG] [Thread-122060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:04:33.291 [DEBUG] [Thread-122060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:04:33.342 [DEBUG] [Thread-122060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:04:33.342 [DEBUG] [Thread-122060] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:04:33.355 [DEBUG] [Thread-122060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:04:33.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:04:33.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:04:33.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:04:33.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:04:33.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:04:33.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:04:33.403 [DEBUG] [Thread-122060] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:04:45.255 [DEBUG] [Thread-122062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:59.542 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:04:59.543 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:00.299 [DEBUG] [Thread-122063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:01.935 [DEBUG] [Thread-122064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:03.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:05:03.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:05:03.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:05:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 4, 56), 20.24, 25.27, 0.0, 22.64, 18.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:05:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:04:56
2025-12-03T19:05:04.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:05:04.374 [DEBUG] [Thread-122065] [transport.py] [_log()] starting thread (client mode): 0xa2760ee0
2025-12-03T19:05:04.374 [DEBUG] [Thread-122065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:05:04.395 [DEBUG] [Thread-122065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:05:04.395 [INFO] [Thread-122065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] client lang: <none>
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] server lang: <none>
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] kex follows: False
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:05:04.398 [DEBUG] [Thread-122065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:05:04.399 [DEBUG] [Thread-122065] [transport.py] [_log()] Compression: none
2025-12-03T19:05:04.399 [DEBUG] [Thread-122065] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:05:04.407 [DEBUG] [Thread-122065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:05:04.407 [DEBUG] [Thread-122065] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:05:04.407 [DEBUG] [Thread-122065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:05:04.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:05:04.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:05:04.409 [DEBUG] [Thread-122065] [transport.py] [_log()] userauth is OK
2025-12-03T19:05:04.409 [DEBUG] [Thread-122065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:05:04.409 [DEBUG] [Thread-122065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:05:04.409 [DEBUG] [Thread-122065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:05:04.409 [DEBUG] [Thread-122065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:05:04.433 [INFO] [Thread-122065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:05:04.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:05:05.283 [DEBUG] [Thread-122065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:05:05.283 [DEBUG] [Thread-122065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:05:05.284 [DEBUG] [Thread-122065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:05:05.324 [DEBUG] [Thread-122065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:05:05.324 [DEBUG] [Thread-122065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:05:05.326 [DEBUG] [Thread-122065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:05:05.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:05:05.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:05:05.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:05:05.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:05:05.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:05:05.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:05:05.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:05:05.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.711158 -999.00  +18.80  16.26     31   +1.50 1 1 1 1 1   887    0 16.78 -31.52 ----- 16.3 16.3 164.2 23.4 20.7 -27.8 21.0 -27.9 21.6 -26.0 21.6 -27.4
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.711158
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:05:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:04:56', tmtdew=20.24, humidity=25.27, cloud=0.0, wind=22.64, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:04:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:05:05.357 [DEBUG] [Thread-122065] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:05:05.441 [DEBUG] [Thread-122068] [transport.py] [_log()] starting thread (client mode): 0xa51d2290
2025-12-03T19:05:05.442 [DEBUG] [Thread-122068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:05:05.457 [DEBUG] [Thread-122068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:05:05.457 [INFO] [Thread-122068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:05.465 [DEBUG] [Thread-122068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] client lang: <none>
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] server lang: <none>
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] kex follows: False
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] Compression: none
2025-12-03T19:05:05.466 [DEBUG] [Thread-122068] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:05:05.529 [DEBUG] [Thread-122068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:05:05.530 [DEBUG] [Thread-122068] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:05:05.530 [DEBUG] [Thread-122068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:05:05.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:05:05.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:05:05.585 [DEBUG] [Thread-122068] [transport.py] [_log()] userauth is OK
2025-12-03T19:05:05.585 [DEBUG] [Thread-122068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:05:05.585 [DEBUG] [Thread-122068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:05:05.586 [DEBUG] [Thread-122068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:05:05.586 [DEBUG] [Thread-122068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:05:05.604 [INFO] [Thread-122068] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:05:05.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:05:05.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:05:06.510 [DEBUG] [Thread-122068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:05:06.511 [DEBUG] [Thread-122068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:05:06.559 [DEBUG] [Thread-122068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:05:06.559 [DEBUG] [Thread-122068] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:05:06.568 [DEBUG] [Thread-122068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:05:06.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:05:06.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:05:06.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:05:06.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:05:06.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:05:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:05:06.602 [DEBUG] [Thread-122068] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:05:15.330 [DEBUG] [Thread-122070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:30.372 [DEBUG] [Thread-122071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:05:36.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:05:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:05:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 5, 28), 20.17, 25.38, 0.0, 20.49, 18.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:05:37.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:05:28
2025-12-03T19:05:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:05:37.553 [DEBUG] [Thread-122072] [transport.py] [_log()] starting thread (client mode): 0xa51d1000
2025-12-03T19:05:37.553 [DEBUG] [Thread-122072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:05:37.566 [DEBUG] [Thread-122072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:05:37.566 [INFO] [Thread-122072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] client lang: <none>
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] server lang: <none>
2025-12-03T19:05:37.567 [DEBUG] [Thread-122072] [transport.py] [_log()] kex follows: False
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] Compression: none
2025-12-03T19:05:37.568 [DEBUG] [Thread-122072] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:05:37.575 [DEBUG] [Thread-122072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:05:37.576 [DEBUG] [Thread-122072] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:05:37.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:05:37.577 [DEBUG] [Thread-122072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:05:37.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:05:37.578 [DEBUG] [Thread-122072] [transport.py] [_log()] userauth is OK
2025-12-03T19:05:37.578 [DEBUG] [Thread-122072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:05:37.578 [DEBUG] [Thread-122072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:05:37.578 [DEBUG] [Thread-122072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:05:37.578 [DEBUG] [Thread-122072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:05:37.591 [INFO] [Thread-122072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:05:37.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:05:38.271 [DEBUG] [Thread-122072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:05:38.271 [DEBUG] [Thread-122072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:05:38.272 [DEBUG] [Thread-122072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:05:38.312 [DEBUG] [Thread-122072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:05:38.312 [DEBUG] [Thread-122072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:05:38.315 [DEBUG] [Thread-122072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:05:38.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:05:38.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:05:38.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:05:38.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:05:38.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:05:38.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:05:38.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.711852 -999.00  +18.80  16.47     31   +1.50 1 1 1 1 1   887    0 16.94 -34.48 ----- 16.5 16.5 139.8 21.3 20.7 -27.8 20.9 -27.1 21.5 -25.8 21.6 -27.4
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:05:38.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.711852
2025-12-03T19:05:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:05:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:05:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:05:38.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:05:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:05:38.337 [DEBUG] [Thread-122072] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:05:38.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:05:28', tmtdew=20.17, humidity=25.38, cloud=0.0, wind=20.49, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:05:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:05:38.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:05:38.435 [DEBUG] [Thread-122075] [transport.py] [_log()] starting thread (client mode): 0xa27c8070
2025-12-03T19:05:38.435 [DEBUG] [Thread-122075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:05:38.449 [DEBUG] [Thread-122075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:05:38.450 [INFO] [Thread-122075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:05:38.457 [DEBUG] [Thread-122075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] client lang: <none>
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] server lang: <none>
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] kex follows: False
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] Compression: none
2025-12-03T19:05:38.458 [DEBUG] [Thread-122075] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:05:38.517 [DEBUG] [Thread-122075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:05:38.518 [DEBUG] [Thread-122075] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:05:38.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:05:38.519 [DEBUG] [Thread-122075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:05:38.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:05:38.574 [DEBUG] [Thread-122075] [transport.py] [_log()] userauth is OK
2025-12-03T19:05:38.574 [DEBUG] [Thread-122075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:05:38.574 [DEBUG] [Thread-122075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:05:38.574 [DEBUG] [Thread-122075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:05:38.574 [DEBUG] [Thread-122075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:05:38.592 [INFO] [Thread-122075] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:05:38.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:05:38.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:05:39.436 [DEBUG] [Thread-122075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:05:39.437 [DEBUG] [Thread-122075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:05:39.485 [DEBUG] [Thread-122075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:05:39.485 [DEBUG] [Thread-122075] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:05:39.494 [DEBUG] [Thread-122075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:05:39.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:05:39.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:05:39.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:05:39.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:05:39.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:05:39.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:05:39.528 [DEBUG] [Thread-122075] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:05:45.394 [DEBUG] [Thread-122077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:59.688 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:05:59.689 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:00.433 [DEBUG] [Thread-122078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:01.967 [DEBUG] [Thread-122079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:09.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:06:09.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:06:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:06:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 6), 20.25, 25.32, 0.0, 23.68, 18.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:06:10.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:06:00
2025-12-03T19:06:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:06:10.538 [DEBUG] [Thread-122080] [transport.py] [_log()] starting thread (client mode): 0xa51d3d30
2025-12-03T19:06:10.538 [DEBUG] [Thread-122080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:06:10.557 [DEBUG] [Thread-122080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:06:10.557 [INFO] [Thread-122080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] client lang: <none>
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] server lang: <none>
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] kex follows: False
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:06:10.560 [DEBUG] [Thread-122080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:06:10.561 [DEBUG] [Thread-122080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:06:10.561 [DEBUG] [Thread-122080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:06:10.561 [DEBUG] [Thread-122080] [transport.py] [_log()] Compression: none
2025-12-03T19:06:10.561 [DEBUG] [Thread-122080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:06:10.577 [DEBUG] [Thread-122080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:06:10.577 [DEBUG] [Thread-122080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:06:10.577 [DEBUG] [Thread-122080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:06:10.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:06:10.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:06:10.578 [DEBUG] [Thread-122080] [transport.py] [_log()] userauth is OK
2025-12-03T19:06:10.578 [DEBUG] [Thread-122080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:06:10.578 [DEBUG] [Thread-122080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:06:10.578 [DEBUG] [Thread-122080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:06:10.578 [DEBUG] [Thread-122080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:06:10.588 [INFO] [Thread-122080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:06:10.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:06:11.245 [DEBUG] [Thread-122080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:06:11.245 [DEBUG] [Thread-122080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:06:11.245 [DEBUG] [Thread-122080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:06:11.287 [DEBUG] [Thread-122080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:06:11.287 [DEBUG] [Thread-122080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:06:11.289 [DEBUG] [Thread-122080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:06:11.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:06:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:06:11.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:06:11.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:06:11.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:06:11.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:06:11.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:06:11.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.712200 -999.00  +18.80  18.51     31   +1.40 1 1 1 1 1   887    0 17.04 -36.16 ----- 18.5 18.5 147.2 21.0 20.7 -27.7 20.9 -27.1 21.5 -26.1 21.6 -27.3
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.712200
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:06:11.306 [DEBUG] [Thread-122080] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:06:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:06:00', tmtdew=20.25, humidity=25.32, cloud=0.0, wind=23.68, temperature=18.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:05:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:06:11.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:06:11.396 [DEBUG] [Thread-122083] [transport.py] [_log()] starting thread (client mode): 0xa51d0880
2025-12-03T19:06:11.396 [DEBUG] [Thread-122083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:06:11.410 [DEBUG] [Thread-122083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:06:11.410 [INFO] [Thread-122083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:06:11.417 [DEBUG] [Thread-122083] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:06:11.417 [DEBUG] [Thread-122083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:06:11.417 [DEBUG] [Thread-122083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:06:11.417 [DEBUG] [Thread-122083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:11.417 [DEBUG] [Thread-122083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] client lang: <none>
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] server lang: <none>
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] kex follows: False
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] Compression: none
2025-12-03T19:06:11.418 [DEBUG] [Thread-122083] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:06:11.473 [DEBUG] [Thread-122083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:06:11.473 [DEBUG] [Thread-122083] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:06:11.473 [DEBUG] [Thread-122083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:06:11.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:06:11.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:06:11.530 [DEBUG] [Thread-122083] [transport.py] [_log()] userauth is OK
2025-12-03T19:06:11.530 [DEBUG] [Thread-122083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:06:11.530 [DEBUG] [Thread-122083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:06:11.530 [DEBUG] [Thread-122083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:06:11.530 [DEBUG] [Thread-122083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:06:11.544 [INFO] [Thread-122083] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:06:11.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:06:11.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:06:12.359 [DEBUG] [Thread-122083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:06:12.359 [DEBUG] [Thread-122083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:06:12.406 [DEBUG] [Thread-122083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:06:12.407 [DEBUG] [Thread-122083] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:06:12.417 [DEBUG] [Thread-122083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:06:12.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:06:12.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:06:12.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:06:12.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:06:12.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:06:12.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:06:12.449 [DEBUG] [Thread-122083] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:06:15.463 [DEBUG] [Thread-122085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:30.509 [DEBUG] [Thread-122086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:06:42.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:06:42.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:06:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 6, 32), 20.23, 25.37, 0.0, 25.37, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:06:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:06:32
2025-12-03T19:06:43.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:06:43.419 [DEBUG] [Thread-122087] [transport.py] [_log()] starting thread (client mode): 0xa2750ca0
2025-12-03T19:06:43.419 [DEBUG] [Thread-122087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:06:43.439 [DEBUG] [Thread-122087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:06:43.439 [INFO] [Thread-122087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:06:43.442 [DEBUG] [Thread-122087] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] client lang: <none>
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] server lang: <none>
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] kex follows: False
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] Compression: none
2025-12-03T19:06:43.443 [DEBUG] [Thread-122087] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:06:43.459 [DEBUG] [Thread-122087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:06:43.460 [DEBUG] [Thread-122087] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:06:43.460 [DEBUG] [Thread-122087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:06:43.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:06:43.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:06:43.505 [DEBUG] [Thread-122087] [transport.py] [_log()] userauth is OK
2025-12-03T19:06:43.505 [DEBUG] [Thread-122087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:06:43.505 [DEBUG] [Thread-122087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:06:43.505 [DEBUG] [Thread-122087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:06:43.505 [DEBUG] [Thread-122087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:06:43.519 [INFO] [Thread-122087] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:06:43.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:06:44.214 [DEBUG] [Thread-122087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:06:44.214 [DEBUG] [Thread-122087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:06:44.214 [DEBUG] [Thread-122087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:06:44.255 [DEBUG] [Thread-122087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:06:44.256 [DEBUG] [Thread-122087] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:06:44.259 [DEBUG] [Thread-122087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:06:44.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:06:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:06:44.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:06:44.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:06:44.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:06:44.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:06:44.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:06:44.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:06:44.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:06:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.712547 -999.00  +18.80  18.93     31   +1.40 1 1 1 1 1   887    0 17.04 -40.43 ----- 18.9 18.9 161.2 23.6 20.6 -27.9 21.0 -27.8 21.5 -25.9 21.6 -27.5
2025-12-03T19:06:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:06:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:06:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.712547
2025-12-03T19:06:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:06:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:06:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:06:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:06:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:06:44.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:06:32', tmtdew=20.23, humidity=25.37, cloud=0.0, wind=25.37, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:06:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:06:44.282 [DEBUG] [Thread-122087] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:06:44.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:06:44.378 [DEBUG] [Thread-122090] [transport.py] [_log()] starting thread (client mode): 0xa2753340
2025-12-03T19:06:44.379 [DEBUG] [Thread-122090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:06:44.393 [DEBUG] [Thread-122090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:06:44.393 [INFO] [Thread-122090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:06:44.400 [DEBUG] [Thread-122090] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:06:44.401 [DEBUG] [Thread-122090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] client lang: <none>
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] server lang: <none>
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] kex follows: False
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] Compression: none
2025-12-03T19:06:44.402 [DEBUG] [Thread-122090] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:06:44.458 [DEBUG] [Thread-122090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:06:44.459 [DEBUG] [Thread-122090] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:06:44.459 [DEBUG] [Thread-122090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:06:44.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:06:44.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:06:44.515 [DEBUG] [Thread-122090] [transport.py] [_log()] userauth is OK
2025-12-03T19:06:44.515 [DEBUG] [Thread-122090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:06:44.515 [DEBUG] [Thread-122090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:06:44.515 [DEBUG] [Thread-122090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:06:44.515 [DEBUG] [Thread-122090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:06:44.532 [INFO] [Thread-122090] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:06:44.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:06:44.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:06:45.332 [DEBUG] [Thread-122090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:06:45.332 [DEBUG] [Thread-122090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:06:45.380 [DEBUG] [Thread-122090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:06:45.380 [DEBUG] [Thread-122090] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:06:45.388 [DEBUG] [Thread-122090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:06:45.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:06:45.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:06:45.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:06:45.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:06:45.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:06:45.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:06:45.423 [DEBUG] [Thread-122090] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:06:45.536 [DEBUG] [Thread-122092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:59.838 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:06:59.839 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:00.566 [DEBUG] [Thread-122093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:02.000 [DEBUG] [Thread-122094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:07:15.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:07:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:07:15.595 [DEBUG] [Thread-122095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:16.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 7, 4), 20.3, 25.25, 0.0, 27.42, 18.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:07:16.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:07:04
2025-12-03T19:07:16.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:07:16.403 [DEBUG] [Thread-122096] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T19:07:16.403 [DEBUG] [Thread-122096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:07:16.424 [DEBUG] [Thread-122096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:07:16.424 [INFO] [Thread-122096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:16.427 [DEBUG] [Thread-122096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] client lang: <none>
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] server lang: <none>
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] kex follows: False
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] Compression: none
2025-12-03T19:07:16.428 [DEBUG] [Thread-122096] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:07:16.446 [DEBUG] [Thread-122096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:07:16.447 [DEBUG] [Thread-122096] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:07:16.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:07:16.448 [DEBUG] [Thread-122096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:07:16.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:07:16.489 [DEBUG] [Thread-122096] [transport.py] [_log()] userauth is OK
2025-12-03T19:07:16.489 [DEBUG] [Thread-122096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:07:16.489 [DEBUG] [Thread-122096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:07:16.490 [DEBUG] [Thread-122096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:07:16.490 [DEBUG] [Thread-122096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:07:16.513 [INFO] [Thread-122096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:07:16.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:07:17.151 [DEBUG] [Thread-122096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:07:17.151 [DEBUG] [Thread-122096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:07:17.151 [DEBUG] [Thread-122096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:07:17.192 [DEBUG] [Thread-122096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:07:17.192 [DEBUG] [Thread-122096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:07:17.195 [DEBUG] [Thread-122096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:07:17.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:07:17.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:07:17.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:07:17.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:07:17.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:07:17.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:07:17.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:07:17.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:07:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:07:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.712894 -999.00  +18.80  21.96     31   +1.30 1 1 1 1 1   887    0 16.42 -38.66 ----- 22.0 22.0 156.3 26.2 20.6 -27.7 20.9 -27.7 21.4 -26.1 21.5 -27.3
2025-12-03T19:07:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:07:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:07:17.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.712894
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:07:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:07:04', tmtdew=20.3, humidity=25.25, cloud=0.0, wind=27.42, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:06:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:07:17.220 [DEBUG] [Thread-122096] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:07:17.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:07:17.310 [DEBUG] [Thread-122099] [transport.py] [_log()] starting thread (client mode): 0xa27790c0
2025-12-03T19:07:17.310 [DEBUG] [Thread-122099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:07:17.324 [DEBUG] [Thread-122099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:07:17.325 [INFO] [Thread-122099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:07:17.332 [DEBUG] [Thread-122099] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:07:17.332 [DEBUG] [Thread-122099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:07:17.332 [DEBUG] [Thread-122099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] client lang: <none>
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] server lang: <none>
2025-12-03T19:07:17.333 [DEBUG] [Thread-122099] [transport.py] [_log()] kex follows: False
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] Compression: none
2025-12-03T19:07:17.334 [DEBUG] [Thread-122099] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:07:17.391 [DEBUG] [Thread-122099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:07:17.392 [DEBUG] [Thread-122099] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:07:17.392 [DEBUG] [Thread-122099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:07:17.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:07:17.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:07:17.447 [DEBUG] [Thread-122099] [transport.py] [_log()] userauth is OK
2025-12-03T19:07:17.447 [DEBUG] [Thread-122099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:07:17.448 [DEBUG] [Thread-122099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:07:17.448 [DEBUG] [Thread-122099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:07:17.448 [DEBUG] [Thread-122099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:07:17.468 [INFO] [Thread-122099] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:07:17.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:07:17.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:07:18.273 [DEBUG] [Thread-122099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:07:18.273 [DEBUG] [Thread-122099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:07:18.320 [DEBUG] [Thread-122099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:07:18.321 [DEBUG] [Thread-122099] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:07:18.329 [DEBUG] [Thread-122099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:07:18.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:07:18.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:07:18.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:07:18.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:07:18.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:07:18.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:07:18.364 [DEBUG] [Thread-122099] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:07:30.623 [DEBUG] [Thread-122101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:45.654 [DEBUG] [Thread-122102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:07:48.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:07:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:07:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 7, 36), 20.38, 25.28, 0.0, 25.39, 18.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:07:49.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:07:36
2025-12-03T19:07:49.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:07:49.354 [DEBUG] [Thread-122103] [transport.py] [_log()] starting thread (client mode): 0xa27612a0
2025-12-03T19:07:49.354 [DEBUG] [Thread-122103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:07:49.374 [DEBUG] [Thread-122103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:07:49.374 [INFO] [Thread-122103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] client lang: <none>
2025-12-03T19:07:49.377 [DEBUG] [Thread-122103] [transport.py] [_log()] server lang: <none>
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] kex follows: False
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] Compression: none
2025-12-03T19:07:49.378 [DEBUG] [Thread-122103] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:07:49.393 [DEBUG] [Thread-122103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:07:49.394 [DEBUG] [Thread-122103] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:07:49.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:07:49.394 [DEBUG] [Thread-122103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:07:49.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:07:49.396 [DEBUG] [Thread-122103] [transport.py] [_log()] userauth is OK
2025-12-03T19:07:49.397 [DEBUG] [Thread-122103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:07:49.397 [DEBUG] [Thread-122103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:07:49.397 [DEBUG] [Thread-122103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:07:49.397 [DEBUG] [Thread-122103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:07:49.421 [INFO] [Thread-122103] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:07:49.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:07:50.125 [DEBUG] [Thread-122103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:07:50.125 [DEBUG] [Thread-122103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:07:50.125 [DEBUG] [Thread-122103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:07:50.166 [DEBUG] [Thread-122103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:07:50.166 [DEBUG] [Thread-122103] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:07:50.169 [DEBUG] [Thread-122103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:07:50.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:07:50.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:07:50.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:07:50.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:07:50.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:07:50.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:07:50.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:07:50.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:07:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:07:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.713241 -999.00  +18.80  22.37     31   +1.30 1 1 1 1 1   887    0 16.88 -38.50 ----- 22.4 22.4 152.8 29.8 20.6 -27.8 20.9 -27.2 21.4 -26.0 21.5 -27.6
2025-12-03T19:07:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:07:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:07:50.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.713241
2025-12-03T19:07:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:07:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:07:50.194 [DEBUG] [Thread-122103] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:07:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:07:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:07:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:07:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:07:36', tmtdew=20.38, humidity=25.28, cloud=0.0, wind=25.39, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:07:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:07:50.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:07:50.294 [DEBUG] [Thread-122106] [transport.py] [_log()] starting thread (client mode): 0xa51d3250
2025-12-03T19:07:50.294 [DEBUG] [Thread-122106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:07:50.309 [DEBUG] [Thread-122106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:07:50.310 [INFO] [Thread-122106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:07:50.317 [DEBUG] [Thread-122106] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] client lang: <none>
2025-12-03T19:07:50.318 [DEBUG] [Thread-122106] [transport.py] [_log()] server lang: <none>
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] kex follows: False
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] Compression: none
2025-12-03T19:07:50.319 [DEBUG] [Thread-122106] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:07:50.376 [DEBUG] [Thread-122106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:07:50.376 [DEBUG] [Thread-122106] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:07:50.377 [DEBUG] [Thread-122106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:07:50.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:07:50.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:07:50.436 [DEBUG] [Thread-122106] [transport.py] [_log()] userauth is OK
2025-12-03T19:07:50.436 [DEBUG] [Thread-122106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:07:50.436 [DEBUG] [Thread-122106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:07:50.436 [DEBUG] [Thread-122106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:07:50.436 [DEBUG] [Thread-122106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:07:50.455 [INFO] [Thread-122106] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:07:50.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:07:50.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:07:51.336 [DEBUG] [Thread-122106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:07:51.337 [DEBUG] [Thread-122106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:07:51.384 [DEBUG] [Thread-122106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:07:51.385 [DEBUG] [Thread-122106] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:07:51.393 [DEBUG] [Thread-122106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:07:51.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:07:51.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:07:51.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:07:51.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:07:51.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:07:51.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:07:51.427 [DEBUG] [Thread-122106] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:07:59.986 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:07:59.987 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:00.682 [DEBUG] [Thread-122108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:02.039 [DEBUG] [Thread-122109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:15.724 [DEBUG] [Thread-122110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:21.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:08:21.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:08:21.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:08:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 8, 8), 20.4, 25.23, 0.0, 24.19, 18.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:08:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:08:08
2025-12-03T19:08:22.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:08:22.420 [DEBUG] [Thread-122111] [transport.py] [_log()] starting thread (client mode): 0xa27cb160
2025-12-03T19:08:22.420 [DEBUG] [Thread-122111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:08:22.441 [DEBUG] [Thread-122111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:08:22.441 [INFO] [Thread-122111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] client lang: <none>
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] server lang: <none>
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] kex follows: False
2025-12-03T19:08:22.444 [DEBUG] [Thread-122111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] Compression: none
2025-12-03T19:08:22.445 [DEBUG] [Thread-122111] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:08:22.463 [DEBUG] [Thread-122111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:08:22.463 [DEBUG] [Thread-122111] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:08:22.464 [DEBUG] [Thread-122111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:08:22.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:08:22.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:08:22.467 [DEBUG] [Thread-122111] [transport.py] [_log()] userauth is OK
2025-12-03T19:08:22.467 [DEBUG] [Thread-122111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:08:22.467 [DEBUG] [Thread-122111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:08:22.467 [DEBUG] [Thread-122111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:08:22.467 [DEBUG] [Thread-122111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:08:22.491 [INFO] [Thread-122111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:08:22.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:08:23.120 [DEBUG] [Thread-122111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:08:23.120 [DEBUG] [Thread-122111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:08:23.120 [DEBUG] [Thread-122111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:08:23.161 [DEBUG] [Thread-122111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:08:23.161 [DEBUG] [Thread-122111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:08:23.164 [DEBUG] [Thread-122111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:08:23.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:08:23.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:08:23.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:08:23.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:08:23.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:08:23.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:08:23.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:08:23.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:08:23.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:08:23.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.713589 -999.00  +18.70  18.45     31   +1.30 1 1 1 1 1   887    0 16.70 -37.60 ----- 18.4 18.4 154.8 28.6 20.5 -27.9 20.8 -27.7 21.3 -26.0 21.4 -27.8
2025-12-03T19:08:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:08:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:08:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.713589
2025-12-03T19:08:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:08:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:08:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:08:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:08:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:08:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:08:08', tmtdew=20.4, humidity=25.23, cloud=0.0, wind=24.19, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:07:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:08:23.190 [DEBUG] [Thread-122111] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:08:23.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:08:23.288 [DEBUG] [Thread-122114] [transport.py] [_log()] starting thread (client mode): 0xa51d2290
2025-12-03T19:08:23.288 [DEBUG] [Thread-122114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:08:23.305 [DEBUG] [Thread-122114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:08:23.306 [INFO] [Thread-122114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:08:23.313 [DEBUG] [Thread-122114] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:08:23.313 [DEBUG] [Thread-122114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] client lang: <none>
2025-12-03T19:08:23.314 [DEBUG] [Thread-122114] [transport.py] [_log()] server lang: <none>
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] kex follows: False
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] Compression: none
2025-12-03T19:08:23.315 [DEBUG] [Thread-122114] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:08:23.372 [DEBUG] [Thread-122114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:08:23.372 [DEBUG] [Thread-122114] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:08:23.373 [DEBUG] [Thread-122114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:08:23.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:08:23.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:08:23.428 [DEBUG] [Thread-122114] [transport.py] [_log()] userauth is OK
2025-12-03T19:08:23.428 [DEBUG] [Thread-122114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:08:23.428 [DEBUG] [Thread-122114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:08:23.428 [DEBUG] [Thread-122114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:08:23.429 [DEBUG] [Thread-122114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:08:23.448 [INFO] [Thread-122114] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:08:23.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:08:23.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:08:24.301 [DEBUG] [Thread-122114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:08:24.301 [DEBUG] [Thread-122114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:08:24.349 [DEBUG] [Thread-122114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:08:24.349 [DEBUG] [Thread-122114] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:08:24.358 [DEBUG] [Thread-122114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:08:24.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:08:24.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:08:24.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:08:24.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:08:24.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:08:24.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:08:24.392 [DEBUG] [Thread-122114] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:08:30.756 [DEBUG] [Thread-122116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:45.802 [DEBUG] [Thread-122117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:08:54.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:08:54.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:08:54.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:08:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 8, 40), 20.28, 25.28, 0.0, 24.12, 18.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:08:55.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:08:40
2025-12-03T19:08:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:08:55.372 [DEBUG] [Thread-122118] [transport.py] [_log()] starting thread (client mode): 0xa2750700
2025-12-03T19:08:55.372 [DEBUG] [Thread-122118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:08:55.391 [DEBUG] [Thread-122118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:08:55.392 [INFO] [Thread-122118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] client lang: <none>
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] server lang: <none>
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] kex follows: False
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:08:55.395 [DEBUG] [Thread-122118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:08:55.396 [DEBUG] [Thread-122118] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:08:55.396 [DEBUG] [Thread-122118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:08:55.396 [DEBUG] [Thread-122118] [transport.py] [_log()] Compression: none
2025-12-03T19:08:55.396 [DEBUG] [Thread-122118] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:08:55.414 [DEBUG] [Thread-122118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:08:55.414 [DEBUG] [Thread-122118] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:08:55.415 [DEBUG] [Thread-122118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:08:55.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:08:55.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:08:55.417 [DEBUG] [Thread-122118] [transport.py] [_log()] userauth is OK
2025-12-03T19:08:55.418 [DEBUG] [Thread-122118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:08:55.418 [DEBUG] [Thread-122118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:08:55.418 [DEBUG] [Thread-122118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:08:55.418 [DEBUG] [Thread-122118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:08:55.441 [INFO] [Thread-122118] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:08:55.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:08:56.182 [DEBUG] [Thread-122118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:08:56.182 [DEBUG] [Thread-122118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:08:56.182 [DEBUG] [Thread-122118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:08:56.223 [DEBUG] [Thread-122118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:08:56.223 [DEBUG] [Thread-122118] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:08:56.226 [DEBUG] [Thread-122118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:08:56.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:08:56.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:08:56.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:08:56.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:08:56.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:08:56.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:08:56.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.713936 -999.00  +18.70  21.07     31   +1.40 1 1 1 1 1   887    0 16.70 -39.46 ----- 21.1 21.1 149.4 27.5 20.5 -27.9 20.8 -27.2 21.2 -26.3 21.4 -27.6
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:08:56.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.713936
2025-12-03T19:08:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:08:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:08:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:08:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:08:56.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:08:56.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:08:40', tmtdew=20.28, humidity=25.28, cloud=0.0, wind=24.12, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:08:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:08:56.248 [DEBUG] [Thread-122118] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:08:56.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:08:56.345 [DEBUG] [Thread-122121] [transport.py] [_log()] starting thread (client mode): 0xa2753b20
2025-12-03T19:08:56.345 [DEBUG] [Thread-122121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:08:56.360 [DEBUG] [Thread-122121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:08:56.360 [INFO] [Thread-122121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:08:56.367 [DEBUG] [Thread-122121] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:08:56.367 [DEBUG] [Thread-122121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:08:56.367 [DEBUG] [Thread-122121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] client lang: <none>
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] server lang: <none>
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] kex follows: False
2025-12-03T19:08:56.368 [DEBUG] [Thread-122121] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] Compression: none
2025-12-03T19:08:56.369 [DEBUG] [Thread-122121] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:08:56.427 [DEBUG] [Thread-122121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:08:56.428 [DEBUG] [Thread-122121] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:08:56.428 [DEBUG] [Thread-122121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:08:56.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:08:56.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:08:56.489 [DEBUG] [Thread-122121] [transport.py] [_log()] userauth is OK
2025-12-03T19:08:56.489 [DEBUG] [Thread-122121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:08:56.489 [DEBUG] [Thread-122121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:08:56.489 [DEBUG] [Thread-122121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:08:56.489 [DEBUG] [Thread-122121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:08:56.507 [INFO] [Thread-122121] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:08:56.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:08:56.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:08:57.330 [DEBUG] [Thread-122121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:08:57.330 [DEBUG] [Thread-122121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:08:57.378 [DEBUG] [Thread-122121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:08:57.378 [DEBUG] [Thread-122121] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:08:57.387 [DEBUG] [Thread-122121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:08:57.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:08:57.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:08:57.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:08:57.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:08:57.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:08:57.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:08:57.421 [DEBUG] [Thread-122121] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:09:00.127 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:00.128 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:00.827 [DEBUG] [Thread-122123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:02.072 [DEBUG] [Thread-122124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:15.873 [DEBUG] [Thread-122125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:27.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:09:27.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:09:27.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:09:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 9, 12), 20.28, 25.28, 0.0, 25.32, 18.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:09:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:09:12
2025-12-03T19:09:28.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:09:28.424 [DEBUG] [Thread-122126] [transport.py] [_log()] starting thread (client mode): 0xa51d2f80
2025-12-03T19:09:28.424 [DEBUG] [Thread-122126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:09:28.443 [DEBUG] [Thread-122126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:09:28.443 [INFO] [Thread-122126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] client lang: <none>
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] server lang: <none>
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] kex follows: False
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] Compression: none
2025-12-03T19:09:28.445 [DEBUG] [Thread-122126] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:09:28.454 [DEBUG] [Thread-122126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:09:28.454 [DEBUG] [Thread-122126] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:09:28.455 [DEBUG] [Thread-122126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:09:28.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:09:28.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:09:28.456 [DEBUG] [Thread-122126] [transport.py] [_log()] userauth is OK
2025-12-03T19:09:28.456 [DEBUG] [Thread-122126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:09:28.456 [DEBUG] [Thread-122126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:09:28.456 [DEBUG] [Thread-122126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:09:28.457 [DEBUG] [Thread-122126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:09:28.491 [INFO] [Thread-122126] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:09:28.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:09:29.102 [DEBUG] [Thread-122126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:09:29.102 [DEBUG] [Thread-122126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:09:29.103 [DEBUG] [Thread-122126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:09:29.144 [DEBUG] [Thread-122126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:09:29.144 [DEBUG] [Thread-122126] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:09:29.147 [DEBUG] [Thread-122126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:09:29.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:09:29.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:09:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:09:29.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:09:29.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:09:29.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:09:29.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.714283 -999.00  +18.70  21.54     31   +1.40 1 1 1 1 1   887    0 16.65 -38.31 ----- 21.5 21.5 154.8 25.8 20.5 -27.8 20.7 -27.2 21.2 -26.3 21.3 -27.5
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:09:29.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.714283
2025-12-03T19:09:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:09:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:09:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:09:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:09:29.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:09:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:09:12', tmtdew=20.28, humidity=25.28, cloud=0.0, wind=25.32, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:08:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:09:29.172 [DEBUG] [Thread-122126] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:09:29.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:09:29.266 [DEBUG] [Thread-122129] [transport.py] [_log()] starting thread (client mode): 0xa27cb820
2025-12-03T19:09:29.266 [DEBUG] [Thread-122129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:09:29.281 [DEBUG] [Thread-122129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:09:29.282 [INFO] [Thread-122129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:09:29.289 [DEBUG] [Thread-122129] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:09:29.289 [DEBUG] [Thread-122129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:09:29.289 [DEBUG] [Thread-122129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:09:29.289 [DEBUG] [Thread-122129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] client lang: <none>
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] server lang: <none>
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] kex follows: False
2025-12-03T19:09:29.290 [DEBUG] [Thread-122129] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] Compression: none
2025-12-03T19:09:29.291 [DEBUG] [Thread-122129] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:09:29.350 [DEBUG] [Thread-122129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:09:29.350 [DEBUG] [Thread-122129] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:09:29.350 [DEBUG] [Thread-122129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:09:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:09:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:09:29.409 [DEBUG] [Thread-122129] [transport.py] [_log()] userauth is OK
2025-12-03T19:09:29.409 [DEBUG] [Thread-122129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:09:29.409 [DEBUG] [Thread-122129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:09:29.409 [DEBUG] [Thread-122129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:09:29.410 [DEBUG] [Thread-122129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:09:29.428 [INFO] [Thread-122129] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:09:29.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:09:29.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:09:30.296 [DEBUG] [Thread-122129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:09:30.297 [DEBUG] [Thread-122129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:09:30.344 [DEBUG] [Thread-122129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:09:30.345 [DEBUG] [Thread-122129] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:09:30.353 [DEBUG] [Thread-122129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:09:30.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:09:30.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:09:30.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:09:30.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:09:30.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:09:30.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:09:30.387 [DEBUG] [Thread-122129] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:09:30.907 [DEBUG] [Thread-122131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:09:45.950 [DEBUG] [Thread-122132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:00.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:00.279 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:00.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:10:00.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:10:00.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:10:00.976 [DEBUG] [Thread-122133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:01.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 9, 44), 20.37, 25.18, 0.0, 27.12, 18.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:10:01.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:09:44
2025-12-03T19:10:01.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:10:01.411 [DEBUG] [Thread-122134] [transport.py] [_log()] starting thread (client mode): 0xa27cbb20
2025-12-03T19:10:01.411 [DEBUG] [Thread-122134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:10:01.421 [DEBUG] [Thread-122134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:10:01.421 [INFO] [Thread-122134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] client lang: <none>
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] server lang: <none>
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] kex follows: False
2025-12-03T19:10:01.422 [DEBUG] [Thread-122134] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] Compression: none
2025-12-03T19:10:01.423 [DEBUG] [Thread-122134] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:10:01.430 [DEBUG] [Thread-122134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:10:01.430 [DEBUG] [Thread-122134] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:10:01.430 [DEBUG] [Thread-122134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:10:01.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:10:01.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:10:01.431 [DEBUG] [Thread-122134] [transport.py] [_log()] userauth is OK
2025-12-03T19:10:01.431 [DEBUG] [Thread-122134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:10:01.431 [DEBUG] [Thread-122134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:10:01.431 [DEBUG] [Thread-122134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:10:01.431 [DEBUG] [Thread-122134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:10:01.440 [INFO] [Thread-122134] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:10:01.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:10:02.103 [DEBUG] [Thread-122136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:02.161 [DEBUG] [Thread-122134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:10:02.162 [DEBUG] [Thread-122134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:10:02.162 [DEBUG] [Thread-122134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:10:02.203 [DEBUG] [Thread-122134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:10:02.203 [DEBUG] [Thread-122134] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:10:02.207 [DEBUG] [Thread-122134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:10:02.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:10:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:10:02.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:10:02.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:10:02.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:10:02.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:10:02.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.714630 -999.00  +18.70  21.04     31   +1.30 1 1 1 1 1   887    0 16.29 -41.39 ----- 21.0 21.0 160.6 29.9 20.5 -27.9 20.6 -27.2 21.1 -26.4 21.2 -27.1
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.714630
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:10:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:09:44', tmtdew=20.37, humidity=25.18, cloud=0.0, wind=27.12, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:09:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:10:02.222 [DEBUG] [Thread-122134] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:10:02.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:10:02.306 [DEBUG] [Thread-122138] [transport.py] [_log()] starting thread (client mode): 0xa514a0e0
2025-12-03T19:10:02.306 [DEBUG] [Thread-122138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:10:02.321 [DEBUG] [Thread-122138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:10:02.321 [INFO] [Thread-122138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:10:02.328 [DEBUG] [Thread-122138] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] client lang: <none>
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] server lang: <none>
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] kex follows: False
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] Compression: none
2025-12-03T19:10:02.329 [DEBUG] [Thread-122138] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:10:02.384 [DEBUG] [Thread-122138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:10:02.384 [DEBUG] [Thread-122138] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:10:02.384 [DEBUG] [Thread-122138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:10:02.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:10:02.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:10:02.446 [DEBUG] [Thread-122138] [transport.py] [_log()] userauth is OK
2025-12-03T19:10:02.446 [DEBUG] [Thread-122138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:10:02.446 [DEBUG] [Thread-122138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:10:02.446 [DEBUG] [Thread-122138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:10:02.446 [DEBUG] [Thread-122138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:10:02.460 [INFO] [Thread-122138] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:10:02.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:10:02.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:10:03.309 [DEBUG] [Thread-122138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:10:03.309 [DEBUG] [Thread-122138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:10:03.357 [DEBUG] [Thread-122138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:10:03.357 [DEBUG] [Thread-122138] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:10:03.365 [DEBUG] [Thread-122138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:10:03.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:10:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:10:03.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:10:03.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:10:03.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:10:03.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:10:03.396 [DEBUG] [Thread-122138] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:10:16.006 [DEBUG] [Thread-122140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:31.053 [DEBUG] [Thread-122141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:10:33.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:10:33.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:10:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:10:34.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 10, 16), 20.37, 25.18, 0.0, 28.0, 18.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:10:34.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:10:16
2025-12-03T19:10:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:10:34.370 [DEBUG] [Thread-122142] [transport.py] [_log()] starting thread (client mode): 0xa2728580
2025-12-03T19:10:34.370 [DEBUG] [Thread-122142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:10:34.390 [DEBUG] [Thread-122142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:10:34.391 [INFO] [Thread-122142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] client lang: <none>
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] server lang: <none>
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] kex follows: False
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:10:34.392 [DEBUG] [Thread-122142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:10:34.393 [DEBUG] [Thread-122142] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:10:34.393 [DEBUG] [Thread-122142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:10:34.393 [DEBUG] [Thread-122142] [transport.py] [_log()] Compression: none
2025-12-03T19:10:34.393 [DEBUG] [Thread-122142] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:10:34.409 [DEBUG] [Thread-122142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:10:34.410 [DEBUG] [Thread-122142] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:10:34.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:10:34.411 [DEBUG] [Thread-122142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:10:34.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:10:34.413 [DEBUG] [Thread-122142] [transport.py] [_log()] userauth is OK
2025-12-03T19:10:34.413 [DEBUG] [Thread-122142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:10:34.413 [DEBUG] [Thread-122142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:10:34.413 [DEBUG] [Thread-122142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:10:34.413 [DEBUG] [Thread-122142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:10:34.431 [INFO] [Thread-122142] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:10:34.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:10:35.068 [DEBUG] [Thread-122142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:10:35.068 [DEBUG] [Thread-122142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:10:35.069 [DEBUG] [Thread-122142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:10:35.109 [DEBUG] [Thread-122142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:10:35.109 [DEBUG] [Thread-122142] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:10:35.112 [DEBUG] [Thread-122142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:10:35.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:10:35.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:10:35.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:10:35.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:10:35.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:10:35.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:10:35.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.714977 -999.00  +18.70  18.01     31   +1.30 1 1 1 1 1   887    0 16.51 -40.19 ----- 18.0 18.0 158.2 26.5 20.4 -27.8 20.6 -27.5 21.1 -26.1 21.2 -27.6
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:10:35.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.714977
2025-12-03T19:10:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:10:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:10:35.135 [DEBUG] [Thread-122142] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:10:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:10:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:10:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:10:35.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:10:16', tmtdew=20.37, humidity=25.18, cloud=0.0, wind=28.0, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:09:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:10:35.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:10:35.229 [DEBUG] [Thread-122145] [transport.py] [_log()] starting thread (client mode): 0xa517e140
2025-12-03T19:10:35.229 [DEBUG] [Thread-122145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:10:35.244 [DEBUG] [Thread-122145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:10:35.244 [INFO] [Thread-122145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] client lang: <none>
2025-12-03T19:10:35.252 [DEBUG] [Thread-122145] [transport.py] [_log()] server lang: <none>
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] kex follows: False
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] Compression: none
2025-12-03T19:10:35.253 [DEBUG] [Thread-122145] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:10:35.310 [DEBUG] [Thread-122145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:10:35.310 [DEBUG] [Thread-122145] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:10:35.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:10:35.312 [DEBUG] [Thread-122145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:10:35.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:10:35.369 [DEBUG] [Thread-122145] [transport.py] [_log()] userauth is OK
2025-12-03T19:10:35.369 [DEBUG] [Thread-122145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:10:35.369 [DEBUG] [Thread-122145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:10:35.369 [DEBUG] [Thread-122145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:10:35.369 [DEBUG] [Thread-122145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:10:35.390 [INFO] [Thread-122145] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:10:35.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:10:35.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:10:36.265 [DEBUG] [Thread-122145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:10:36.265 [DEBUG] [Thread-122145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:10:36.312 [DEBUG] [Thread-122145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:10:36.313 [DEBUG] [Thread-122145] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:10:36.322 [DEBUG] [Thread-122145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:10:36.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:10:36.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:10:36.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:10:36.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:10:36.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:10:36.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:10:36.356 [DEBUG] [Thread-122145] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:10:46.083 [DEBUG] [Thread-122147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:00.422 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:00.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:01.126 [DEBUG] [Thread-122148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:02.137 [DEBUG] [Thread-122149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:11:06.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:11:06.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:11:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 10, 48), 20.25, 25.32, 0.0, 30.49, 18.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:11:07.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:10:48
2025-12-03T19:11:07.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:11:07.333 [DEBUG] [Thread-122150] [transport.py] [_log()] starting thread (client mode): 0xa271f2b0
2025-12-03T19:11:07.333 [DEBUG] [Thread-122150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:11:07.353 [DEBUG] [Thread-122150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:11:07.354 [INFO] [Thread-122150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:11:07.356 [DEBUG] [Thread-122150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] client lang: <none>
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] server lang: <none>
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] kex follows: False
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] Compression: none
2025-12-03T19:11:07.357 [DEBUG] [Thread-122150] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:11:07.375 [DEBUG] [Thread-122150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:11:07.376 [DEBUG] [Thread-122150] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:11:07.376 [DEBUG] [Thread-122150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:11:07.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:11:07.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:11:07.379 [DEBUG] [Thread-122150] [transport.py] [_log()] userauth is OK
2025-12-03T19:11:07.380 [DEBUG] [Thread-122150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:11:07.380 [DEBUG] [Thread-122150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:11:07.380 [DEBUG] [Thread-122150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:11:07.380 [DEBUG] [Thread-122150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:11:07.398 [INFO] [Thread-122150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:11:07.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:11:08.147 [DEBUG] [Thread-122150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:11:08.147 [DEBUG] [Thread-122150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:11:08.148 [DEBUG] [Thread-122150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:11:08.189 [DEBUG] [Thread-122150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:11:08.189 [DEBUG] [Thread-122150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:11:08.194 [DEBUG] [Thread-122150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:11:08.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:11:08.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:11:08.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:11:08.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:11:08.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:11:08.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:11:08.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.715672 -999.00  +18.70  15.02     31   +1.30 1 1 1 1 1   887    0 16.28 -42.66 ----- 15.0 15.0 152.7 23.9 20.4 -27.5 20.6 -27.0 21.0 -25.7 21.2 -26.7
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:11:08.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.715672
2025-12-03T19:11:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:11:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:11:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:11:08.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:11:08.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:11:08.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:10:48', tmtdew=20.25, humidity=25.32, cloud=0.0, wind=30.49, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:10:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:11:08.221 [DEBUG] [Thread-122150] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:11:08.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:11:08.317 [DEBUG] [Thread-122153] [transport.py] [_log()] starting thread (client mode): 0xa271d9c0
2025-12-03T19:11:08.317 [DEBUG] [Thread-122153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:11:08.332 [DEBUG] [Thread-122153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:11:08.333 [INFO] [Thread-122153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:11:08.340 [DEBUG] [Thread-122153] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:11:08.340 [DEBUG] [Thread-122153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:11:08.340 [DEBUG] [Thread-122153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] client lang: <none>
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] server lang: <none>
2025-12-03T19:11:08.341 [DEBUG] [Thread-122153] [transport.py] [_log()] kex follows: False
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] Compression: none
2025-12-03T19:11:08.342 [DEBUG] [Thread-122153] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:11:08.398 [DEBUG] [Thread-122153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:11:08.398 [DEBUG] [Thread-122153] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:11:08.399 [DEBUG] [Thread-122153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:11:08.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:11:08.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:11:08.458 [DEBUG] [Thread-122153] [transport.py] [_log()] userauth is OK
2025-12-03T19:11:08.458 [DEBUG] [Thread-122153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:11:08.459 [DEBUG] [Thread-122153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:11:08.459 [DEBUG] [Thread-122153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:11:08.459 [DEBUG] [Thread-122153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:11:08.479 [INFO] [Thread-122153] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:11:08.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:11:08.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:11:09.309 [DEBUG] [Thread-122153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:11:09.309 [DEBUG] [Thread-122153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:11:09.357 [DEBUG] [Thread-122153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:11:09.357 [DEBUG] [Thread-122153] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:11:09.366 [DEBUG] [Thread-122153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:11:09.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:11:09.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:11:09.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:11:09.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:11:09.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:11:09.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:11:09.400 [DEBUG] [Thread-122153] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:11:16.154 [DEBUG] [Thread-122155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:31.195 [DEBUG] [Thread-122156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:11:39.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:11:39.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:11:39.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:11:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 11, 20), 20.21, 25.37, 0.0, 29.03, 18.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:11:40.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:11:20
2025-12-03T19:11:40.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:11:40.381 [DEBUG] [Thread-122157] [transport.py] [_log()] starting thread (client mode): 0xa271c910
2025-12-03T19:11:40.381 [DEBUG] [Thread-122157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:11:40.402 [DEBUG] [Thread-122157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:11:40.402 [INFO] [Thread-122157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] client lang: <none>
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] server lang: <none>
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] kex follows: False
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:11:40.405 [DEBUG] [Thread-122157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:11:40.406 [DEBUG] [Thread-122157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:11:40.406 [DEBUG] [Thread-122157] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:11:40.406 [DEBUG] [Thread-122157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:11:40.406 [DEBUG] [Thread-122157] [transport.py] [_log()] Compression: none
2025-12-03T19:11:40.406 [DEBUG] [Thread-122157] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:11:40.424 [DEBUG] [Thread-122157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:11:40.425 [DEBUG] [Thread-122157] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:11:40.425 [DEBUG] [Thread-122157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:11:40.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:11:40.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:11:40.427 [DEBUG] [Thread-122157] [transport.py] [_log()] userauth is OK
2025-12-03T19:11:40.427 [DEBUG] [Thread-122157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:11:40.427 [DEBUG] [Thread-122157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:11:40.427 [DEBUG] [Thread-122157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:11:40.427 [DEBUG] [Thread-122157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:11:40.449 [INFO] [Thread-122157] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:11:40.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:11:41.001 [DEBUG] [Thread-122157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:11:41.001 [DEBUG] [Thread-122157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:11:41.002 [DEBUG] [Thread-122157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:11:41.042 [DEBUG] [Thread-122157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:11:41.042 [DEBUG] [Thread-122157] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:11:41.045 [DEBUG] [Thread-122157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:11:41.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:11:41.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:11:41.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:11:41.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:11:41.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:11:41.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:11:41.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:11:41.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:11:41.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:11:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.716019 -999.00  +18.70  20.40     31   +1.30 1 1 1 1 1   887    0 16.47 -38.64 ----- 20.4 20.4 162.2 24.2 20.3 -27.7 20.5 -27.3 21.0 -25.6 21.1 -27.0
2025-12-03T19:11:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:11:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:11:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.716019
2025-12-03T19:11:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:11:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:11:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:11:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:11:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:11:41.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:11:20', tmtdew=20.21, humidity=25.37, cloud=0.0, wind=29.03, temperature=18.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:11:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:11:41.078 [DEBUG] [Thread-122157] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:11:41.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:11:46.227 [DEBUG] [Thread-122160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:00.561 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:00.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:01.264 [DEBUG] [Thread-122161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:02.176 [DEBUG] [Thread-122162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:16.289 [DEBUG] [Thread-122163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:31.319 [DEBUG] [Thread-122164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:12:46.348 [DEBUG] [Thread-122165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:00.701 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:00.702 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:01.377 [DEBUG] [Thread-122166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:02.222 [DEBUG] [Thread-122167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:16.404 [DEBUG] [Thread-122168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:31.430 [DEBUG] [Thread-122169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:46.459 [DEBUG] [Thread-122170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:13:56.630 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T19:14:00.842 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:00.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:01.487 [DEBUG] [Thread-122171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:02.264 [DEBUG] [Thread-122172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:16.514 [DEBUG] [Thread-122173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:14:26.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:14:26.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:14:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 14), 20.36, 25.27, 0.0, 26.7, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:14:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:14:00
2025-12-03T19:14:27.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:14:27.618 [DEBUG] [Thread-122174] [transport.py] [_log()] starting thread (client mode): 0xa271c220
2025-12-03T19:14:27.618 [DEBUG] [Thread-122174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:14:27.638 [DEBUG] [Thread-122174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:14:27.638 [INFO] [Thread-122174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:14:27.641 [DEBUG] [Thread-122174] [transport.py] [_log()] client lang: <none>
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] server lang: <none>
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] kex follows: False
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] Compression: none
2025-12-03T19:14:27.642 [DEBUG] [Thread-122174] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:14:27.659 [DEBUG] [Thread-122174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:14:27.659 [DEBUG] [Thread-122174] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:14:27.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:14:27.660 [DEBUG] [Thread-122174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:14:27.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:14:27.662 [DEBUG] [Thread-122174] [transport.py] [_log()] userauth is OK
2025-12-03T19:14:27.662 [DEBUG] [Thread-122174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:14:27.662 [DEBUG] [Thread-122174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:14:27.663 [DEBUG] [Thread-122174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:14:27.663 [DEBUG] [Thread-122174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:14:27.679 [INFO] [Thread-122174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:14:27.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:14:28.341 [DEBUG] [Thread-122174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:14:28.341 [DEBUG] [Thread-122174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:14:28.342 [DEBUG] [Thread-122174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:14:28.382 [DEBUG] [Thread-122174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:14:28.382 [DEBUG] [Thread-122174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:14:28.385 [DEBUG] [Thread-122174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:14:28.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:14:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:14:28.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:14:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:14:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:14:28.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:14:28.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:14:28.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:14:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:14:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.717755 -999.00  +18.50  23.17     30   +1.00 1 1 1 1 1   887    0 16.15 -46.44 ----- 23.2 23.2 142.4 30.9 20.2 -27.8 20.4 -27.1 20.7 -25.7 20.9 -27.4
2025-12-03T19:14:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:14:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:14:28.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.717755
2025-12-03T19:14:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:14:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:14:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:14:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:14:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:14:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:14:00', tmtdew=20.36, humidity=25.27, cloud=0.0, wind=26.7, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:13:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:14:28.411 [DEBUG] [Thread-122174] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:14:28.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:14:28.507 [DEBUG] [Thread-122177] [transport.py] [_log()] starting thread (client mode): 0xa27ca530
2025-12-03T19:14:28.507 [DEBUG] [Thread-122177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:14:28.521 [DEBUG] [Thread-122177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:14:28.521 [INFO] [Thread-122177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:14:28.529 [DEBUG] [Thread-122177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] client lang: <none>
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] server lang: <none>
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] kex follows: False
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:14:28.530 [DEBUG] [Thread-122177] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:14:28.531 [DEBUG] [Thread-122177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:14:28.531 [DEBUG] [Thread-122177] [transport.py] [_log()] Compression: none
2025-12-03T19:14:28.531 [DEBUG] [Thread-122177] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:14:28.588 [DEBUG] [Thread-122177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:14:28.589 [DEBUG] [Thread-122177] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:14:28.590 [DEBUG] [Thread-122177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:14:28.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:14:28.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:14:28.644 [DEBUG] [Thread-122177] [transport.py] [_log()] userauth is OK
2025-12-03T19:14:28.645 [DEBUG] [Thread-122177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:14:28.645 [DEBUG] [Thread-122177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:14:28.645 [DEBUG] [Thread-122177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:14:28.645 [DEBUG] [Thread-122177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:14:28.664 [INFO] [Thread-122177] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:14:28.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:14:28.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:14:29.505 [DEBUG] [Thread-122177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:14:29.505 [DEBUG] [Thread-122177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:14:29.553 [DEBUG] [Thread-122177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:14:29.553 [DEBUG] [Thread-122177] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:14:29.562 [DEBUG] [Thread-122177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:14:29.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:14:29.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:14:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:14:29.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:14:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:14:29.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:14:29.593 [DEBUG] [Thread-122177] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:14:31.542 [DEBUG] [Thread-122179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:46.585 [DEBUG] [Thread-122180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:14:59.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:14:59.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:14:59.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:15:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 14, 32), 20.39, 25.22, 0.0, 26.11, 18.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:15:00.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:14:32
2025-12-03T19:15:00.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:15:00.575 [DEBUG] [Thread-122181] [transport.py] [_log()] starting thread (client mode): 0xa271f160
2025-12-03T19:15:00.575 [DEBUG] [Thread-122181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:15:00.595 [DEBUG] [Thread-122181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:15:00.595 [INFO] [Thread-122181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:15:00.598 [DEBUG] [Thread-122181] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:15:00.598 [DEBUG] [Thread-122181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:15:00.598 [DEBUG] [Thread-122181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:15:00.598 [DEBUG] [Thread-122181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:00.598 [DEBUG] [Thread-122181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] client lang: <none>
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] server lang: <none>
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] kex follows: False
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] Compression: none
2025-12-03T19:15:00.599 [DEBUG] [Thread-122181] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:15:00.618 [DEBUG] [Thread-122181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:15:00.619 [DEBUG] [Thread-122181] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:15:00.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:15:00.620 [DEBUG] [Thread-122181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:15:00.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:15:00.622 [DEBUG] [Thread-122181] [transport.py] [_log()] userauth is OK
2025-12-03T19:15:00.622 [DEBUG] [Thread-122181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:15:00.622 [DEBUG] [Thread-122181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:15:00.622 [DEBUG] [Thread-122181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:15:00.622 [DEBUG] [Thread-122181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:15:00.646 [INFO] [Thread-122181] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:15:00.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:15:00.980 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:00.981 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:01.275 [DEBUG] [Thread-122181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:15:01.275 [DEBUG] [Thread-122181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:15:01.276 [DEBUG] [Thread-122181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:15:01.317 [DEBUG] [Thread-122181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:15:01.317 [DEBUG] [Thread-122181] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:15:01.319 [DEBUG] [Thread-122181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:15:01.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:15:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:15:01.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:15:01.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:15:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:15:01.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:15:01.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:15:01.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.718102 -999.00  +18.50  16.08     30   +1.00 1 1 1 1 1   887    0 16.15 -44.58 ----- 16.1 16.1 150.7 20.1 20.2 -27.5 20.4 -27.0 20.7 -26.1 20.8 -27.0
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.718102
2025-12-03T19:15:01.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:15:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:15:01.334 [DEBUG] [Thread-122181] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:15:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:15:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:15:01.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:15:01.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:14:32', tmtdew=20.39, humidity=25.22, cloud=0.0, wind=26.11, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:14:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:15:01.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:15:01.430 [DEBUG] [Thread-122184] [transport.py] [_log()] starting thread (client mode): 0xa271cd30
2025-12-03T19:15:01.431 [DEBUG] [Thread-122184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:15:01.445 [DEBUG] [Thread-122184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:15:01.445 [INFO] [Thread-122184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:01.453 [DEBUG] [Thread-122184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] client lang: <none>
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] server lang: <none>
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] kex follows: False
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] Compression: none
2025-12-03T19:15:01.454 [DEBUG] [Thread-122184] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:15:01.512 [DEBUG] [Thread-122184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:15:01.513 [DEBUG] [Thread-122184] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:15:01.513 [DEBUG] [Thread-122184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:15:01.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:15:01.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:15:01.569 [DEBUG] [Thread-122184] [transport.py] [_log()] userauth is OK
2025-12-03T19:15:01.569 [DEBUG] [Thread-122184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:15:01.569 [DEBUG] [Thread-122184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:15:01.569 [DEBUG] [Thread-122184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:15:01.569 [DEBUG] [Thread-122184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:15:01.589 [INFO] [Thread-122184] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:15:01.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:15:01.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:15:01.609 [DEBUG] [Thread-122186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:02.308 [DEBUG] [Thread-122187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:02.440 [DEBUG] [Thread-122184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:15:02.441 [DEBUG] [Thread-122184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:15:02.488 [DEBUG] [Thread-122184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:15:02.489 [DEBUG] [Thread-122184] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:15:02.498 [DEBUG] [Thread-122184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:15:02.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:15:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:15:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:15:02.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:15:02.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:15:02.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:15:02.532 [DEBUG] [Thread-122184] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:15:16.655 [DEBUG] [Thread-122188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:31.688 [DEBUG] [Thread-122189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:15:32.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:15:32.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:15:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:15:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 15, 5), 20.46, 25.1, 0.0, 26.18, 18.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:15:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:15:05
2025-12-03T19:15:33.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:15:33.484 [DEBUG] [Thread-122190] [transport.py] [_log()] starting thread (client mode): 0xa271c0a0
2025-12-03T19:15:33.484 [DEBUG] [Thread-122190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:15:33.504 [DEBUG] [Thread-122190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:15:33.504 [INFO] [Thread-122190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] client lang: <none>
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] server lang: <none>
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] kex follows: False
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] Compression: none
2025-12-03T19:15:33.508 [DEBUG] [Thread-122190] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:15:33.525 [DEBUG] [Thread-122190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:15:33.526 [DEBUG] [Thread-122190] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:15:33.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:15:33.527 [DEBUG] [Thread-122190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:15:33.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:15:33.529 [DEBUG] [Thread-122190] [transport.py] [_log()] userauth is OK
2025-12-03T19:15:33.529 [DEBUG] [Thread-122190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:15:33.529 [DEBUG] [Thread-122190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:15:33.529 [DEBUG] [Thread-122190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:15:33.529 [DEBUG] [Thread-122190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:15:33.553 [INFO] [Thread-122190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:15:33.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:15:34.183 [DEBUG] [Thread-122190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:15:34.183 [DEBUG] [Thread-122190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:15:34.183 [DEBUG] [Thread-122190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:15:34.224 [DEBUG] [Thread-122190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:15:34.224 [DEBUG] [Thread-122190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:15:34.227 [DEBUG] [Thread-122190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:15:34.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:15:34.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:15:34.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:15:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:15:34.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:15:34.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:15:34.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:15:34.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.718450 -999.00  +18.60  12.75     30   +1.00 1 1 1 1 1   887    0 16.43 -43.08 ----- 12.8 12.8 158.6 26.3 20.1 -27.7 20.3 -27.3 20.7 -25.5 20.9 -27.1
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.718450
2025-12-03T19:15:34.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:15:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:15:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:15:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:15:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:15:34.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:15:05', tmtdew=20.46, humidity=25.1, cloud=0.0, wind=26.18, temperature=18.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:14:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:15:34.250 [DEBUG] [Thread-122190] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:15:34.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:15:34.347 [DEBUG] [Thread-122193] [transport.py] [_log()] starting thread (client mode): 0xa517ca60
2025-12-03T19:15:34.347 [DEBUG] [Thread-122193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:15:34.362 [DEBUG] [Thread-122193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:15:34.362 [INFO] [Thread-122193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:15:34.369 [DEBUG] [Thread-122193] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:15:34.369 [DEBUG] [Thread-122193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:15:34.369 [DEBUG] [Thread-122193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:15:34.369 [DEBUG] [Thread-122193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] client lang: <none>
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] server lang: <none>
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] kex follows: False
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] Compression: none
2025-12-03T19:15:34.370 [DEBUG] [Thread-122193] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:15:34.428 [DEBUG] [Thread-122193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:15:34.429 [DEBUG] [Thread-122193] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:15:34.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:15:34.430 [DEBUG] [Thread-122193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:15:34.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:15:34.485 [DEBUG] [Thread-122193] [transport.py] [_log()] userauth is OK
2025-12-03T19:15:34.485 [DEBUG] [Thread-122193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:15:34.485 [DEBUG] [Thread-122193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:15:34.486 [DEBUG] [Thread-122193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:15:34.486 [DEBUG] [Thread-122193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:15:34.504 [INFO] [Thread-122193] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:15:34.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:15:34.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:15:35.357 [DEBUG] [Thread-122193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:15:35.358 [DEBUG] [Thread-122193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:15:35.406 [DEBUG] [Thread-122193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:15:35.406 [DEBUG] [Thread-122193] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:15:35.415 [DEBUG] [Thread-122193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:15:35.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:15:35.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:15:35.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:15:35.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:15:35.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:15:35.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:15:35.449 [DEBUG] [Thread-122193] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:15:46.718 [DEBUG] [Thread-122195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:01.121 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:01.123 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:01.771 [DEBUG] [Thread-122196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:02.353 [DEBUG] [Thread-122197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:05.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:16:05.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:16:05.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:16:06.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 15, 37), 20.46, 25.09, 0.0, 24.72, 18.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:16:06.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:15:37
2025-12-03T19:16:06.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:16:06.437 [DEBUG] [Thread-122198] [transport.py] [_log()] starting thread (client mode): 0xa271fd00
2025-12-03T19:16:06.437 [DEBUG] [Thread-122198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:16:06.457 [DEBUG] [Thread-122198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:16:06.458 [INFO] [Thread-122198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] client lang: <none>
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] server lang: <none>
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] kex follows: False
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] Compression: none
2025-12-03T19:16:06.461 [DEBUG] [Thread-122198] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:16:06.478 [DEBUG] [Thread-122198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:16:06.478 [DEBUG] [Thread-122198] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:16:06.479 [DEBUG] [Thread-122198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:16:06.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:16:06.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:16:06.480 [DEBUG] [Thread-122198] [transport.py] [_log()] userauth is OK
2025-12-03T19:16:06.481 [DEBUG] [Thread-122198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:16:06.481 [DEBUG] [Thread-122198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:16:06.481 [DEBUG] [Thread-122198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:16:06.481 [DEBUG] [Thread-122198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:16:06.504 [INFO] [Thread-122198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:16:06.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:16:07.146 [DEBUG] [Thread-122198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:16:07.146 [DEBUG] [Thread-122198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:16:07.147 [DEBUG] [Thread-122198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:16:07.187 [DEBUG] [Thread-122198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:16:07.187 [DEBUG] [Thread-122198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:16:07.190 [DEBUG] [Thread-122198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:16:07.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:16:07.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:16:07.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:16:07.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:16:07.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:16:07.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:16:07.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:16:07.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.719144 -999.00  +18.50  19.48     30   +1.00 1 1 1 1 1   887    0 16.73 -40.45 ----- 19.5 19.5 149.7 25.4 20.1 -27.4 20.3 -27.1 20.6 -25.8 20.8 -27.0
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.719144
2025-12-03T19:16:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:16:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:16:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:16:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:16:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:16:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:15:37', tmtdew=20.46, humidity=25.09, cloud=0.0, wind=24.72, temperature=18.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:15:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:16:07.213 [DEBUG] [Thread-122198] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:16:07.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:16:07.300 [DEBUG] [Thread-122201] [transport.py] [_log()] starting thread (client mode): 0xa271f730
2025-12-03T19:16:07.300 [DEBUG] [Thread-122201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:16:07.315 [DEBUG] [Thread-122201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:16:07.315 [INFO] [Thread-122201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:16:07.322 [DEBUG] [Thread-122201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:16:07.323 [DEBUG] [Thread-122201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] client lang: <none>
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] server lang: <none>
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] kex follows: False
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:16:07.324 [DEBUG] [Thread-122201] [transport.py] [_log()] Compression: none
2025-12-03T19:16:07.325 [DEBUG] [Thread-122201] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:16:07.385 [DEBUG] [Thread-122201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:16:07.386 [DEBUG] [Thread-122201] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:16:07.386 [DEBUG] [Thread-122201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:16:07.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:16:07.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:16:07.441 [DEBUG] [Thread-122201] [transport.py] [_log()] userauth is OK
2025-12-03T19:16:07.442 [DEBUG] [Thread-122201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:16:07.442 [DEBUG] [Thread-122201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:16:07.442 [DEBUG] [Thread-122201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:16:07.442 [DEBUG] [Thread-122201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:16:07.460 [INFO] [Thread-122201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:16:07.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:16:07.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:16:08.333 [DEBUG] [Thread-122201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:16:08.333 [DEBUG] [Thread-122201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:16:08.381 [DEBUG] [Thread-122201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:16:08.381 [DEBUG] [Thread-122201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:16:08.390 [DEBUG] [Thread-122201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:16:08.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:16:08.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:16:08.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:16:08.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:16:08.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:16:08.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:16:08.428 [DEBUG] [Thread-122201] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:16:16.798 [DEBUG] [Thread-122203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:31.841 [DEBUG] [Thread-122204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:16:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:16:38.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:16:38.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:16:39.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 16, 9), 20.41, 25.19, 0.0, 24.14, 18.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:16:39.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:16:09
2025-12-03T19:16:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:16:39.396 [DEBUG] [Thread-122205] [transport.py] [_log()] starting thread (client mode): 0xa27c9ea0
2025-12-03T19:16:39.396 [DEBUG] [Thread-122205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:16:39.416 [DEBUG] [Thread-122205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:16:39.416 [INFO] [Thread-122205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:16:39.418 [DEBUG] [Thread-122205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] client lang: <none>
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] server lang: <none>
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] kex follows: False
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] Compression: none
2025-12-03T19:16:39.419 [DEBUG] [Thread-122205] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:16:39.435 [DEBUG] [Thread-122205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:16:39.435 [DEBUG] [Thread-122205] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:16:39.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:16:39.436 [DEBUG] [Thread-122205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:16:39.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:16:39.438 [DEBUG] [Thread-122205] [transport.py] [_log()] userauth is OK
2025-12-03T19:16:39.438 [DEBUG] [Thread-122205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:16:39.439 [DEBUG] [Thread-122205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:16:39.439 [DEBUG] [Thread-122205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:16:39.439 [DEBUG] [Thread-122205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:16:39.474 [INFO] [Thread-122205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:16:39.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:16:40.101 [DEBUG] [Thread-122205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:16:40.101 [DEBUG] [Thread-122205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:16:40.101 [DEBUG] [Thread-122205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:16:40.142 [DEBUG] [Thread-122205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:16:40.142 [DEBUG] [Thread-122205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:16:40.145 [DEBUG] [Thread-122205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:16:40.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:16:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:16:40.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:16:40.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:16:40.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:16:40.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:16:40.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:16:40.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.719491 -999.00  +18.50  21.77     30   +0.90 1 1 1 1 1   887    0 16.78 -38.19 ----- 21.8 21.8 155.4 28.3 20.1 -27.5 20.2 -26.9 20.5 -25.7 20.7 -26.9
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.719491
2025-12-03T19:16:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:16:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:16:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:16:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:16:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:16:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:16:09', tmtdew=20.41, humidity=25.19, cloud=0.0, wind=24.14, temperature=18.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:16:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:16:40.168 [DEBUG] [Thread-122205] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:16:40.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:16:40.262 [DEBUG] [Thread-122208] [transport.py] [_log()] starting thread (client mode): 0xa271fe80
2025-12-03T19:16:40.263 [DEBUG] [Thread-122208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:16:40.278 [DEBUG] [Thread-122208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:16:40.278 [INFO] [Thread-122208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:16:40.285 [DEBUG] [Thread-122208] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:16:40.285 [DEBUG] [Thread-122208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:16:40.285 [DEBUG] [Thread-122208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:16:40.285 [DEBUG] [Thread-122208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:40.285 [DEBUG] [Thread-122208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] client lang: <none>
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] server lang: <none>
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] kex follows: False
2025-12-03T19:16:40.286 [DEBUG] [Thread-122208] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:16:40.294 [DEBUG] [Thread-122208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:16:40.295 [DEBUG] [Thread-122208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:16:40.295 [DEBUG] [Thread-122208] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:16:40.295 [DEBUG] [Thread-122208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:16:40.295 [DEBUG] [Thread-122208] [transport.py] [_log()] Compression: none
2025-12-03T19:16:40.295 [DEBUG] [Thread-122208] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:16:40.341 [DEBUG] [Thread-122208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:16:40.342 [DEBUG] [Thread-122208] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:16:40.343 [DEBUG] [Thread-122208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:16:40.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:16:40.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:16:40.398 [DEBUG] [Thread-122208] [transport.py] [_log()] userauth is OK
2025-12-03T19:16:40.398 [DEBUG] [Thread-122208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:16:40.398 [DEBUG] [Thread-122208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:16:40.398 [DEBUG] [Thread-122208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:16:40.399 [DEBUG] [Thread-122208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:16:40.417 [INFO] [Thread-122208] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:16:40.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:16:40.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:16:41.260 [DEBUG] [Thread-122208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:16:41.260 [DEBUG] [Thread-122208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:16:41.307 [DEBUG] [Thread-122208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:16:41.307 [DEBUG] [Thread-122208] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:16:41.315 [DEBUG] [Thread-122208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:16:41.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:16:41.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:16:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:16:41.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:16:41.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:16:41.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:16:41.346 [DEBUG] [Thread-122208] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:16:46.869 [DEBUG] [Thread-122210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:01.263 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:01.265 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:01.913 [DEBUG] [Thread-122211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:02.387 [DEBUG] [Thread-122212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:17:11.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:17:11.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:17:12.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 16, 41), 20.46, 24.67, 0.0, 25.55, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:17:12.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:16:41
2025-12-03T19:17:12.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:17:12.326 [DEBUG] [Thread-122213] [transport.py] [_log()] starting thread (client mode): 0xa517d570
2025-12-03T19:17:12.326 [DEBUG] [Thread-122213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:17:12.341 [DEBUG] [Thread-122213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:17:12.341 [INFO] [Thread-122213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] client lang: <none>
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] server lang: <none>
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] kex follows: False
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] Compression: none
2025-12-03T19:17:12.345 [DEBUG] [Thread-122213] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:17:12.362 [DEBUG] [Thread-122213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:17:12.363 [DEBUG] [Thread-122213] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:17:12.363 [DEBUG] [Thread-122213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:17:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:17:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:17:12.365 [DEBUG] [Thread-122213] [transport.py] [_log()] userauth is OK
2025-12-03T19:17:12.365 [DEBUG] [Thread-122213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:17:12.365 [DEBUG] [Thread-122213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:17:12.365 [DEBUG] [Thread-122213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:17:12.366 [DEBUG] [Thread-122213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:17:12.390 [INFO] [Thread-122213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:17:12.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:17:13.050 [DEBUG] [Thread-122213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:17:13.050 [DEBUG] [Thread-122213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:17:13.050 [DEBUG] [Thread-122213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:17:13.091 [DEBUG] [Thread-122213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:17:13.091 [DEBUG] [Thread-122213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:17:13.094 [DEBUG] [Thread-122213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:17:13.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:17:13.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:17:13.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:17:13.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:17:13.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:17:13.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:17:13.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:17:13.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:17:13.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:17:13.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.719839 -999.00  +18.50  19.61     30   +1.00 1 1 1 1 1   887    0 16.55 -38.20 ----- 19.6 19.6 162.6 26.4 20.0 -27.6 20.2 -27.0 20.5 -25.7 20.7 -26.9
2025-12-03T19:17:13.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:17:13.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:17:13.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.719839
2025-12-03T19:17:13.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:17:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:17:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:17:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:17:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:17:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:16:41', tmtdew=20.46, humidity=24.67, cloud=0.0, wind=25.55, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:16:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:17:13.118 [DEBUG] [Thread-122213] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:17:13.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:17:13.214 [DEBUG] [Thread-122216] [transport.py] [_log()] starting thread (client mode): 0xa2751cf0
2025-12-03T19:17:13.214 [DEBUG] [Thread-122216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:17:13.228 [DEBUG] [Thread-122216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:17:13.228 [INFO] [Thread-122216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:17:13.236 [DEBUG] [Thread-122216] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:17:13.236 [DEBUG] [Thread-122216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:17:13.236 [DEBUG] [Thread-122216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:17:13.236 [DEBUG] [Thread-122216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:13.236 [DEBUG] [Thread-122216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] client lang: <none>
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] server lang: <none>
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] kex follows: False
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] Compression: none
2025-12-03T19:17:13.237 [DEBUG] [Thread-122216] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:17:13.294 [DEBUG] [Thread-122216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:17:13.294 [DEBUG] [Thread-122216] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:17:13.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:17:13.295 [DEBUG] [Thread-122216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:17:13.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:17:13.354 [DEBUG] [Thread-122216] [transport.py] [_log()] userauth is OK
2025-12-03T19:17:13.354 [DEBUG] [Thread-122216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:17:13.354 [DEBUG] [Thread-122216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:17:13.354 [DEBUG] [Thread-122216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:17:13.354 [DEBUG] [Thread-122216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:17:13.368 [INFO] [Thread-122216] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:17:13.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:17:13.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:17:14.209 [DEBUG] [Thread-122216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:17:14.209 [DEBUG] [Thread-122216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:17:14.257 [DEBUG] [Thread-122216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:17:14.258 [DEBUG] [Thread-122216] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:17:14.265 [DEBUG] [Thread-122216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:17:14.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:17:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:17:14.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:17:14.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:17:14.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:17:14.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:17:14.300 [DEBUG] [Thread-122216] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:17:16.941 [DEBUG] [Thread-122218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:31.986 [DEBUG] [Thread-122219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:44.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:17:44.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:17:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:17:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 17, 13), 20.45, 24.69, 0.0, 26.7, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:17:45.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:17:13
2025-12-03T19:17:45.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:17:45.318 [DEBUG] [Thread-122220] [transport.py] [_log()] starting thread (client mode): 0xa517d2d0
2025-12-03T19:17:45.318 [DEBUG] [Thread-122220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:17:45.338 [DEBUG] [Thread-122220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:17:45.338 [INFO] [Thread-122220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] client lang: <none>
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] server lang: <none>
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] kex follows: False
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] Compression: none
2025-12-03T19:17:45.341 [DEBUG] [Thread-122220] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:17:45.358 [DEBUG] [Thread-122220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:17:45.358 [DEBUG] [Thread-122220] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:17:45.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:17:45.358 [DEBUG] [Thread-122220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:17:45.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:17:45.359 [DEBUG] [Thread-122220] [transport.py] [_log()] userauth is OK
2025-12-03T19:17:45.359 [DEBUG] [Thread-122220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:17:45.359 [DEBUG] [Thread-122220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:17:45.359 [DEBUG] [Thread-122220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:17:45.359 [DEBUG] [Thread-122220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:17:45.370 [INFO] [Thread-122220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:17:45.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:17:46.026 [DEBUG] [Thread-122220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:17:46.026 [DEBUG] [Thread-122220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:17:46.026 [DEBUG] [Thread-122220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:17:46.068 [DEBUG] [Thread-122220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:17:46.068 [DEBUG] [Thread-122220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:17:46.070 [DEBUG] [Thread-122220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:17:46.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:17:46.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:17:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:17:46.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:17:46.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:17:46.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:17:46.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.720186 -999.00  +18.50  19.14     30   +0.90 1 1 1 1 1   887    0 16.39 -35.63 ----- 19.1 19.1 162.6 25.4 20.0 -27.3 20.2 -26.9 20.5 -25.7 20.6 -27.0
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.720186
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:17:46.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:17:13', tmtdew=20.45, humidity=24.69, cloud=0.0, wind=26.7, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:17:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:17:46.088 [DEBUG] [Thread-122220] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:17:46.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:17:46.175 [DEBUG] [Thread-122223] [transport.py] [_log()] starting thread (client mode): 0xa517fb50
2025-12-03T19:17:46.175 [DEBUG] [Thread-122223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:17:46.190 [DEBUG] [Thread-122223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:17:46.190 [INFO] [Thread-122223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] client lang: <none>
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] server lang: <none>
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] kex follows: False
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] Compression: none
2025-12-03T19:17:46.197 [DEBUG] [Thread-122223] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:17:46.253 [DEBUG] [Thread-122223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:17:46.253 [DEBUG] [Thread-122223] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:17:46.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:17:46.253 [DEBUG] [Thread-122223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:17:46.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:17:46.310 [DEBUG] [Thread-122223] [transport.py] [_log()] userauth is OK
2025-12-03T19:17:46.310 [DEBUG] [Thread-122223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:17:46.310 [DEBUG] [Thread-122223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:17:46.310 [DEBUG] [Thread-122223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:17:46.310 [DEBUG] [Thread-122223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:17:46.323 [INFO] [Thread-122223] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:17:46.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:17:46.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:17:47.015 [DEBUG] [Thread-122225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:17:47.176 [DEBUG] [Thread-122223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:17:47.176 [DEBUG] [Thread-122223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:17:47.224 [DEBUG] [Thread-122223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:17:47.224 [DEBUG] [Thread-122223] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:17:47.232 [DEBUG] [Thread-122223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:17:47.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:17:47.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:17:47.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:17:47.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:17:47.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:17:47.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:17:47.263 [DEBUG] [Thread-122223] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:18:01.404 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:01.405 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:02.052 [DEBUG] [Thread-122226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:02.440 [DEBUG] [Thread-122227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:17.080 [DEBUG] [Thread-122228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:17.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:18:17.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:18:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:18:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 17, 45), 20.42, 24.73, 0.0, 25.02, 18.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:18:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:17:45
2025-12-03T19:18:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:18:18.298 [DEBUG] [Thread-122229] [transport.py] [_log()] starting thread (client mode): 0xa27caf20
2025-12-03T19:18:18.298 [DEBUG] [Thread-122229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:18:18.317 [DEBUG] [Thread-122229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:18:18.317 [INFO] [Thread-122229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] client lang: <none>
2025-12-03T19:18:18.320 [DEBUG] [Thread-122229] [transport.py] [_log()] server lang: <none>
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] kex follows: False
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] Compression: none
2025-12-03T19:18:18.321 [DEBUG] [Thread-122229] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:18:18.335 [DEBUG] [Thread-122229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:18:18.335 [DEBUG] [Thread-122229] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:18:18.335 [DEBUG] [Thread-122229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:18:18.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:18:18.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:18:18.336 [DEBUG] [Thread-122229] [transport.py] [_log()] userauth is OK
2025-12-03T19:18:18.336 [DEBUG] [Thread-122229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:18:18.336 [DEBUG] [Thread-122229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:18:18.336 [DEBUG] [Thread-122229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:18:18.336 [DEBUG] [Thread-122229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:18:18.345 [INFO] [Thread-122229] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:18:18.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:18:18.976 [DEBUG] [Thread-122229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:18:18.976 [DEBUG] [Thread-122229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:18:18.976 [DEBUG] [Thread-122229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:18:19.017 [DEBUG] [Thread-122229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:18:19.018 [DEBUG] [Thread-122229] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:18:19.020 [DEBUG] [Thread-122229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:18:19.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:18:19.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:18:19.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:18:19.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:18:19.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:18:19.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:18:19.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.720533 -999.00  +18.50  20.83     30   +0.90 1 1 1 1 1   886    0 16.48 -32.32 ----- 20.8 20.8 157.4 25.6 20.0 -27.5 20.1 -26.9 20.5 -25.7 20.6 -26.8
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.720533
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:18:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:17:45', tmtdew=20.42, humidity=24.73, cloud=0.0, wind=25.02, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:17:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:18:19.039 [DEBUG] [Thread-122229] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:18:19.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:18:19.124 [DEBUG] [Thread-122232] [transport.py] [_log()] starting thread (client mode): 0xa2724d60
2025-12-03T19:18:19.124 [DEBUG] [Thread-122232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:18:19.138 [DEBUG] [Thread-122232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:18:19.139 [INFO] [Thread-122232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] client lang: <none>
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] server lang: <none>
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] kex follows: False
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:18:19.146 [DEBUG] [Thread-122232] [transport.py] [_log()] Compression: none
2025-12-03T19:18:19.147 [DEBUG] [Thread-122232] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:18:19.201 [DEBUG] [Thread-122232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:18:19.201 [DEBUG] [Thread-122232] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:18:19.201 [DEBUG] [Thread-122232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:18:19.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:18:19.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:18:19.259 [DEBUG] [Thread-122232] [transport.py] [_log()] userauth is OK
2025-12-03T19:18:19.259 [DEBUG] [Thread-122232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:18:19.259 [DEBUG] [Thread-122232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:18:19.259 [DEBUG] [Thread-122232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:18:19.259 [DEBUG] [Thread-122232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:18:19.274 [INFO] [Thread-122232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:18:19.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:18:19.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:18:20.097 [DEBUG] [Thread-122232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:18:20.097 [DEBUG] [Thread-122232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:18:20.145 [DEBUG] [Thread-122232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:18:20.145 [DEBUG] [Thread-122232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:18:20.154 [DEBUG] [Thread-122232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:18:20.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:18:20.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:18:20.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:18:20.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:18:20.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:18:20.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:18:20.189 [DEBUG] [Thread-122232] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:18:32.113 [DEBUG] [Thread-122234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:47.156 [DEBUG] [Thread-122235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:18:50.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:18:50.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:18:50.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:18:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 18, 17), 20.43, 24.74, 0.0, 22.97, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:18:50.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:18:17
2025-12-03T19:18:51.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:18:51.212 [DEBUG] [Thread-122236] [transport.py] [_log()] starting thread (client mode): 0xa2724f10
2025-12-03T19:18:51.212 [DEBUG] [Thread-122236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:18:51.230 [DEBUG] [Thread-122236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:18:51.231 [INFO] [Thread-122236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] client lang: <none>
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] server lang: <none>
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] kex follows: False
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] Compression: none
2025-12-03T19:18:51.233 [DEBUG] [Thread-122236] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:18:51.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:18:51.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] userauth is OK
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:18:51.246 [DEBUG] [Thread-122236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:18:51.247 [DEBUG] [Thread-122236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:18:51.256 [INFO] [Thread-122236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:18:51.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:18:51.903 [DEBUG] [Thread-122236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:18:51.903 [DEBUG] [Thread-122236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:18:51.904 [DEBUG] [Thread-122236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:18:51.945 [DEBUG] [Thread-122236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:18:51.945 [DEBUG] [Thread-122236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:18:51.948 [DEBUG] [Thread-122236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:18:51.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:18:51.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:18:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:18:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:18:51.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:18:51.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:18:51.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:18:51.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:18:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:18:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.720880 -999.00  +18.50  18.56     30   +1.00 1 1 1 1 1   886    0 16.57 -32.76 ----- 18.6 18.6 161.6 24.8 19.9 -27.4 20.1 -26.9 20.4 -25.5 20.6 -26.7
2025-12-03T19:18:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:18:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:18:51.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.720880
2025-12-03T19:18:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:18:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:18:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:18:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:18:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:18:51.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:18:17', tmtdew=20.43, humidity=24.74, cloud=0.0, wind=22.97, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:18:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:18:51.971 [DEBUG] [Thread-122236] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:18:52.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:18:52.065 [DEBUG] [Thread-122239] [transport.py] [_log()] starting thread (client mode): 0xa517cdf0
2025-12-03T19:18:52.065 [DEBUG] [Thread-122239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:18:52.080 [DEBUG] [Thread-122239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:18:52.081 [INFO] [Thread-122239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:18:52.088 [DEBUG] [Thread-122239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:18:52.088 [DEBUG] [Thread-122239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:18:52.088 [DEBUG] [Thread-122239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:18:52.088 [DEBUG] [Thread-122239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:52.088 [DEBUG] [Thread-122239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] client lang: <none>
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] server lang: <none>
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] kex follows: False
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:18:52.089 [DEBUG] [Thread-122239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:18:52.090 [DEBUG] [Thread-122239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:18:52.090 [DEBUG] [Thread-122239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:18:52.090 [DEBUG] [Thread-122239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:18:52.090 [DEBUG] [Thread-122239] [transport.py] [_log()] Compression: none
2025-12-03T19:18:52.090 [DEBUG] [Thread-122239] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:18:52.146 [DEBUG] [Thread-122239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:18:52.147 [DEBUG] [Thread-122239] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:18:52.147 [DEBUG] [Thread-122239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:18:52.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:18:52.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:18:52.203 [DEBUG] [Thread-122239] [transport.py] [_log()] userauth is OK
2025-12-03T19:18:52.203 [DEBUG] [Thread-122239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:18:52.203 [DEBUG] [Thread-122239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:18:52.203 [DEBUG] [Thread-122239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:18:52.203 [DEBUG] [Thread-122239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:18:52.222 [INFO] [Thread-122239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:18:52.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:18:52.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:18:53.062 [DEBUG] [Thread-122239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:18:53.062 [DEBUG] [Thread-122239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:18:53.110 [DEBUG] [Thread-122239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:18:53.110 [DEBUG] [Thread-122239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:18:53.119 [DEBUG] [Thread-122239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:18:53.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:18:53.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:18:53.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:18:53.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:18:53.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:18:53.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:18:53.153 [DEBUG] [Thread-122239] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:19:01.547 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:01.548 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:02.186 [DEBUG] [Thread-122241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:02.474 [DEBUG] [Thread-122242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:17.221 [DEBUG] [Thread-122243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:23.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:19:23.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:19:23.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:19:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 18, 49), 20.28, 25.32, 0.0, 25.57, 18.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:19:23.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:18:49
2025-12-03T19:19:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:19:24.132 [DEBUG] [Thread-122244] [transport.py] [_log()] starting thread (client mode): 0xa517edd0
2025-12-03T19:19:24.132 [DEBUG] [Thread-122244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:19:24.152 [DEBUG] [Thread-122244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:19:24.152 [INFO] [Thread-122244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:19:24.155 [DEBUG] [Thread-122244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:19:24.155 [DEBUG] [Thread-122244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:19:24.155 [DEBUG] [Thread-122244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:19:24.155 [DEBUG] [Thread-122244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] client lang: <none>
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] server lang: <none>
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] kex follows: False
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:19:24.156 [DEBUG] [Thread-122244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:19:24.157 [DEBUG] [Thread-122244] [transport.py] [_log()] Compression: none
2025-12-03T19:19:24.157 [DEBUG] [Thread-122244] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:19:24.174 [DEBUG] [Thread-122244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:19:24.175 [DEBUG] [Thread-122244] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:19:24.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:19:24.176 [DEBUG] [Thread-122244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:19:24.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:19:24.178 [DEBUG] [Thread-122244] [transport.py] [_log()] userauth is OK
2025-12-03T19:19:24.178 [DEBUG] [Thread-122244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:19:24.178 [DEBUG] [Thread-122244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:19:24.178 [DEBUG] [Thread-122244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:19:24.178 [DEBUG] [Thread-122244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:19:24.202 [INFO] [Thread-122244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:19:24.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:19:24.804 [DEBUG] [Thread-122244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:19:24.804 [DEBUG] [Thread-122244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:19:24.805 [DEBUG] [Thread-122244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:19:24.845 [DEBUG] [Thread-122244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:19:24.845 [DEBUG] [Thread-122244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:19:24.848 [DEBUG] [Thread-122244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:19:24.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:19:24.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:19:24.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:19:24.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:19:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:19:24.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:19:24.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:19:24.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.721227 -999.00  +18.50  17.44     31   +1.10 1 1 1 1 1   886    0 16.88 -33.83 ----- 17.4 17.4 157.8 25.4 19.9 -27.4 20.1 -26.9 20.3 -25.5 20.5 -26.5
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.721227
2025-12-03T19:19:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:19:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:19:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:19:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:19:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:19:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:18:49', tmtdew=20.28, humidity=25.32, cloud=0.0, wind=25.57, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:18:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:19:24.872 [DEBUG] [Thread-122244] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:19:24.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:19:24.966 [DEBUG] [Thread-122247] [transport.py] [_log()] starting thread (client mode): 0xa2751690
2025-12-03T19:19:24.966 [DEBUG] [Thread-122247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:19:24.982 [DEBUG] [Thread-122247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:19:24.982 [INFO] [Thread-122247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:19:24.989 [DEBUG] [Thread-122247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:19:24.990 [DEBUG] [Thread-122247] [transport.py] [_log()] client lang: <none>
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] server lang: <none>
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] kex follows: False
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] Compression: none
2025-12-03T19:19:24.991 [DEBUG] [Thread-122247] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:19:25.048 [DEBUG] [Thread-122247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:19:25.048 [DEBUG] [Thread-122247] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:19:25.048 [DEBUG] [Thread-122247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:19:25.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:19:25.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:19:25.103 [DEBUG] [Thread-122247] [transport.py] [_log()] userauth is OK
2025-12-03T19:19:25.103 [DEBUG] [Thread-122247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:19:25.103 [DEBUG] [Thread-122247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:19:25.104 [DEBUG] [Thread-122247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:19:25.104 [DEBUG] [Thread-122247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:19:25.123 [INFO] [Thread-122247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:19:25.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:19:25.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:19:25.961 [DEBUG] [Thread-122247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:19:25.961 [DEBUG] [Thread-122247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:19:26.009 [DEBUG] [Thread-122247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:19:26.009 [DEBUG] [Thread-122247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:19:26.018 [DEBUG] [Thread-122247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:19:26.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:19:26.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:19:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:19:26.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:19:26.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:19:26.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:19:26.051 [DEBUG] [Thread-122247] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:19:32.255 [DEBUG] [Thread-122249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:47.306 [DEBUG] [Thread-122250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:19:56.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:19:56.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:19:56.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:19:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 19, 53), 20.25, 25.47, 0.0, 27.74, 18.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:19:56.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:19:53
2025-12-03T19:19:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:19:57.027 [DEBUG] [Thread-122251] [transport.py] [_log()] starting thread (client mode): 0xa27535b0
2025-12-03T19:19:57.027 [DEBUG] [Thread-122251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:19:57.037 [DEBUG] [Thread-122251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:19:57.037 [INFO] [Thread-122251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] client lang: <none>
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] server lang: <none>
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] kex follows: False
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] Compression: none
2025-12-03T19:19:57.040 [DEBUG] [Thread-122251] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:19:57.055 [DEBUG] [Thread-122251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:19:57.055 [DEBUG] [Thread-122251] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:19:57.055 [DEBUG] [Thread-122251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:19:57.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:19:57.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:19:57.056 [DEBUG] [Thread-122251] [transport.py] [_log()] userauth is OK
2025-12-03T19:19:57.056 [DEBUG] [Thread-122251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:19:57.056 [DEBUG] [Thread-122251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:19:57.056 [DEBUG] [Thread-122251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:19:57.056 [DEBUG] [Thread-122251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:19:57.074 [INFO] [Thread-122251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:19:57.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:19:57.695 [DEBUG] [Thread-122251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:19:57.696 [DEBUG] [Thread-122251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:19:57.696 [DEBUG] [Thread-122251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:19:57.737 [DEBUG] [Thread-122251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:19:57.737 [DEBUG] [Thread-122251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:19:57.740 [DEBUG] [Thread-122251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:19:57.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:19:57.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:19:57.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:19:57.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:19:57.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:19:57.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:19:57.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:19:57.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:19:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:19:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.721575 -999.00  +18.50  14.32     31   +1.10 1 1 1 1 1   886    0 16.97 -31.22 ----- 14.3 14.3 149.4 27.0 19.9 -27.5 20.0 -26.8 20.3 -25.6 20.5 -26.4
2025-12-03T19:19:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:19:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:19:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.721575
2025-12-03T19:19:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:19:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:19:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:19:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:19:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:19:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:19:53', tmtdew=20.25, humidity=25.47, cloud=0.0, wind=27.74, temperature=18.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:19:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:19:57.764 [DEBUG] [Thread-122251] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:19:57.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:19:57.859 [DEBUG] [Thread-122254] [transport.py] [_log()] starting thread (client mode): 0xa517fa90
2025-12-03T19:19:57.859 [DEBUG] [Thread-122254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:19:57.874 [DEBUG] [Thread-122254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:19:57.874 [INFO] [Thread-122254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:19:57.882 [DEBUG] [Thread-122254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] client lang: <none>
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] server lang: <none>
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] kex follows: False
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:19:57.883 [DEBUG] [Thread-122254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:19:57.884 [DEBUG] [Thread-122254] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:19:57.884 [DEBUG] [Thread-122254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:19:57.884 [DEBUG] [Thread-122254] [transport.py] [_log()] Compression: none
2025-12-03T19:19:57.884 [DEBUG] [Thread-122254] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:19:57.940 [DEBUG] [Thread-122254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:19:57.940 [DEBUG] [Thread-122254] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:19:57.941 [DEBUG] [Thread-122254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:19:57.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:19:57.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:19:57.996 [DEBUG] [Thread-122254] [transport.py] [_log()] userauth is OK
2025-12-03T19:19:57.996 [DEBUG] [Thread-122254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:19:57.996 [DEBUG] [Thread-122254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:19:57.996 [DEBUG] [Thread-122254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:19:57.996 [DEBUG] [Thread-122254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:19:58.014 [INFO] [Thread-122254] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:19:58.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:19:58.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:19:58.849 [DEBUG] [Thread-122254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:19:58.849 [DEBUG] [Thread-122254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:19:58.897 [DEBUG] [Thread-122254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:19:58.897 [DEBUG] [Thread-122254] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:19:58.906 [DEBUG] [Thread-122254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:19:58.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:19:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:19:58.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:19:58.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:19:58.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:19:58.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:19:58.941 [DEBUG] [Thread-122254] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:20:01.692 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:01.693 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:02.333 [DEBUG] [Thread-122256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:02.508 [DEBUG] [Thread-122257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:17.375 [DEBUG] [Thread-122258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:20:28.964 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:20:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:20:29.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 20, 25), 20.25, 25.47, 0.0, 27.47, 18.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:20:29.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:20:25
2025-12-03T19:20:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:20:29.916 [DEBUG] [Thread-122259] [transport.py] [_log()] starting thread (client mode): 0xa51d1b70
2025-12-03T19:20:29.916 [DEBUG] [Thread-122259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:20:29.938 [DEBUG] [Thread-122259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:20:29.938 [INFO] [Thread-122259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] client lang: <none>
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] server lang: <none>
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] kex follows: False
2025-12-03T19:20:29.941 [DEBUG] [Thread-122259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] Compression: none
2025-12-03T19:20:29.942 [DEBUG] [Thread-122259] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:20:29.959 [DEBUG] [Thread-122259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:20:29.959 [DEBUG] [Thread-122259] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:20:29.960 [DEBUG] [Thread-122259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:20:29.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:20:29.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:20:29.962 [DEBUG] [Thread-122259] [transport.py] [_log()] userauth is OK
2025-12-03T19:20:29.962 [DEBUG] [Thread-122259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:20:29.962 [DEBUG] [Thread-122259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:20:29.962 [DEBUG] [Thread-122259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:20:29.962 [DEBUG] [Thread-122259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:20:29.997 [INFO] [Thread-122259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:20:29.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:20:30.642 [DEBUG] [Thread-122259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:20:30.642 [DEBUG] [Thread-122259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:20:30.643 [DEBUG] [Thread-122259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:20:30.683 [DEBUG] [Thread-122259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:20:30.683 [DEBUG] [Thread-122259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:20:30.686 [DEBUG] [Thread-122259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:20:30.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:20:30.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:20:30.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:20:30.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:20:30.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:20:30.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:20:30.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:20:30.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:20:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:20:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.721922 -999.00  +18.50  16.57     31   +1.10 1 1 1 1 1   886    0 16.58 -31.70 ----- 16.6 16.6 142.4 21.6 19.9 -27.2 20.0 -26.7 20.3 -25.4 20.4 -26.5
2025-12-03T19:20:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:20:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:20:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.721922
2025-12-03T19:20:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:20:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:20:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:20:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:20:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:20:30.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:20:25', tmtdew=20.25, humidity=25.47, cloud=0.0, wind=27.47, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:19:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:20:30.712 [DEBUG] [Thread-122259] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:20:30.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:20:30.813 [DEBUG] [Thread-122262] [transport.py] [_log()] starting thread (client mode): 0xa27520e0
2025-12-03T19:20:30.814 [DEBUG] [Thread-122262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:20:30.829 [DEBUG] [Thread-122262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:20:30.829 [INFO] [Thread-122262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:20:30.836 [DEBUG] [Thread-122262] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:20:30.836 [DEBUG] [Thread-122262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] client lang: <none>
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] server lang: <none>
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] kex follows: False
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] Compression: none
2025-12-03T19:20:30.837 [DEBUG] [Thread-122262] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:20:30.895 [DEBUG] [Thread-122262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:20:30.896 [DEBUG] [Thread-122262] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:20:30.896 [DEBUG] [Thread-122262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:20:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:20:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:20:30.955 [DEBUG] [Thread-122262] [transport.py] [_log()] userauth is OK
2025-12-03T19:20:30.956 [DEBUG] [Thread-122262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:20:30.956 [DEBUG] [Thread-122262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:20:30.956 [DEBUG] [Thread-122262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:20:30.956 [DEBUG] [Thread-122262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:20:30.975 [INFO] [Thread-122262] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:20:30.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:20:30.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:20:31.859 [DEBUG] [Thread-122262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:20:31.859 [DEBUG] [Thread-122262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:20:31.908 [DEBUG] [Thread-122262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:20:31.908 [DEBUG] [Thread-122262] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:20:31.917 [DEBUG] [Thread-122262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:20:31.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:20:31.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:20:31.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:20:31.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:20:31.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:20:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:20:31.951 [DEBUG] [Thread-122262] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:20:32.402 [DEBUG] [Thread-122264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:20:47.447 [DEBUG] [Thread-122265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:01.837 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:01.838 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:01.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:21:01.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:21:01.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:21:02.478 [DEBUG] [Thread-122266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:02.537 [DEBUG] [Thread-122267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:02.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 20, 57), 20.07, 25.52, 0.0, 26.57, 18.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:21:02.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:20:57
2025-12-03T19:21:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:21:02.960 [DEBUG] [Thread-122268] [transport.py] [_log()] starting thread (client mode): 0xa2752980
2025-12-03T19:21:02.960 [DEBUG] [Thread-122268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:21:02.974 [DEBUG] [Thread-122268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:21:02.975 [INFO] [Thread-122268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] client lang: <none>
2025-12-03T19:21:02.976 [DEBUG] [Thread-122268] [transport.py] [_log()] server lang: <none>
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] kex follows: False
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] Compression: none
2025-12-03T19:21:02.977 [DEBUG] [Thread-122268] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:21:02.987 [DEBUG] [Thread-122268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:21:02.987 [DEBUG] [Thread-122268] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:21:02.987 [DEBUG] [Thread-122268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:21:02.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:21:02.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:21:02.988 [DEBUG] [Thread-122268] [transport.py] [_log()] userauth is OK
2025-12-03T19:21:02.988 [DEBUG] [Thread-122268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:21:02.988 [DEBUG] [Thread-122268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:21:02.988 [DEBUG] [Thread-122268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:21:02.988 [DEBUG] [Thread-122268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:21:03.005 [INFO] [Thread-122268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:21:03.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:21:03.636 [DEBUG] [Thread-122268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:21:03.636 [DEBUG] [Thread-122268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:21:03.636 [DEBUG] [Thread-122268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:21:03.677 [DEBUG] [Thread-122268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:21:03.677 [DEBUG] [Thread-122268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:21:03.680 [DEBUG] [Thread-122268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:21:03.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:21:03.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:21:03.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:21:03.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:21:03.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:21:03.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:21:03.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:21:03.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.722269 -999.00  +18.40  22.72     31   +1.20 1 1 1 1 1   886    0 16.29 -30.54 ----- 22.7 22.7 137.0 28.4 19.9 -27.4 20.0 -27.0 20.2 -25.6 20.4 -26.7
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.722269
2025-12-03T19:21:03.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:21:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:21:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:21:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:21:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:21:03.704 [DEBUG] [Thread-122268] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:21:03.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:20:57', tmtdew=20.07, humidity=25.52, cloud=0.0, wind=26.57, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:20:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:21:03.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:21:03.800 [DEBUG] [Thread-122271] [transport.py] [_log()] starting thread (client mode): 0xa2729c00
2025-12-03T19:21:03.800 [DEBUG] [Thread-122271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:21:03.815 [DEBUG] [Thread-122271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:21:03.815 [INFO] [Thread-122271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:21:03.822 [DEBUG] [Thread-122271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:21:03.822 [DEBUG] [Thread-122271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:21:03.822 [DEBUG] [Thread-122271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] client lang: <none>
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] server lang: <none>
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] kex follows: False
2025-12-03T19:21:03.823 [DEBUG] [Thread-122271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] Compression: none
2025-12-03T19:21:03.824 [DEBUG] [Thread-122271] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:21:03.883 [DEBUG] [Thread-122271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:21:03.884 [DEBUG] [Thread-122271] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:21:03.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:21:03.885 [DEBUG] [Thread-122271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:21:03.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:21:03.940 [DEBUG] [Thread-122271] [transport.py] [_log()] userauth is OK
2025-12-03T19:21:03.940 [DEBUG] [Thread-122271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:21:03.941 [DEBUG] [Thread-122271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:21:03.941 [DEBUG] [Thread-122271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:21:03.941 [DEBUG] [Thread-122271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:21:03.959 [INFO] [Thread-122271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:21:03.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:21:03.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:21:04.800 [DEBUG] [Thread-122271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:21:04.801 [DEBUG] [Thread-122271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:21:04.849 [DEBUG] [Thread-122271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:21:04.849 [DEBUG] [Thread-122271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:21:04.858 [DEBUG] [Thread-122271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:21:04.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:21:04.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:21:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:21:04.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:21:04.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:21:04.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:21:04.893 [DEBUG] [Thread-122271] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:21:17.505 [DEBUG] [Thread-122273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:32.545 [DEBUG] [Thread-122274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:21:34.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:21:34.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:21:34.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 21, 29), 20.02, 25.6, 0.0, 25.2, 18.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:21:29
2025-12-03T19:21:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:21:35.870 [DEBUG] [Thread-122275] [transport.py] [_log()] starting thread (client mode): 0xa271e860
2025-12-03T19:21:35.870 [DEBUG] [Thread-122275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:21:35.890 [DEBUG] [Thread-122275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:21:35.890 [INFO] [Thread-122275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:35.893 [DEBUG] [Thread-122275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] client lang: <none>
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] server lang: <none>
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] kex follows: False
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] Compression: none
2025-12-03T19:21:35.894 [DEBUG] [Thread-122275] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:21:35.912 [DEBUG] [Thread-122275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:21:35.913 [DEBUG] [Thread-122275] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:21:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:21:35.914 [DEBUG] [Thread-122275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:21:35.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:21:35.916 [DEBUG] [Thread-122275] [transport.py] [_log()] userauth is OK
2025-12-03T19:21:35.916 [DEBUG] [Thread-122275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:21:35.916 [DEBUG] [Thread-122275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:21:35.916 [DEBUG] [Thread-122275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:21:35.916 [DEBUG] [Thread-122275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:21:35.942 [INFO] [Thread-122275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:21:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:21:36.567 [DEBUG] [Thread-122275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:21:36.567 [DEBUG] [Thread-122275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:21:36.567 [DEBUG] [Thread-122275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:21:36.608 [DEBUG] [Thread-122275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:21:36.608 [DEBUG] [Thread-122275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:21:36.610 [DEBUG] [Thread-122275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:21:36.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:21:36.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:21:36.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:21:36.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:21:36.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:21:36.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:21:36.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.722963 -999.00  +18.40  17.84     31   +1.20 1 1 1 1 1   885    0 16.73 -27.70 ----- 17.8 17.8 157.6 27.8 19.8 -27.2 19.9 -26.8 20.1 -25.4 20.3 -26.4
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.722963
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:21:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:21:29', tmtdew=20.02, humidity=25.6, cloud=0.0, wind=25.2, temperature=18.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:21:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:21:36.628 [DEBUG] [Thread-122275] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:21:36.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:21:36.712 [DEBUG] [Thread-122278] [transport.py] [_log()] starting thread (client mode): 0xa271e500
2025-12-03T19:21:36.712 [DEBUG] [Thread-122278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:21:36.727 [DEBUG] [Thread-122278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:21:36.727 [INFO] [Thread-122278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] client lang: <none>
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] server lang: <none>
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] kex follows: False
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] Compression: none
2025-12-03T19:21:36.735 [DEBUG] [Thread-122278] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:21:36.792 [DEBUG] [Thread-122278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:21:36.792 [DEBUG] [Thread-122278] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:21:36.792 [DEBUG] [Thread-122278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:21:36.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:21:36.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:21:36.848 [DEBUG] [Thread-122278] [transport.py] [_log()] userauth is OK
2025-12-03T19:21:36.848 [DEBUG] [Thread-122278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:21:36.848 [DEBUG] [Thread-122278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:21:36.848 [DEBUG] [Thread-122278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:21:36.848 [DEBUG] [Thread-122278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:21:36.862 [INFO] [Thread-122278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:21:36.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:21:36.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:21:37.706 [DEBUG] [Thread-122278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:21:37.706 [DEBUG] [Thread-122278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:21:37.755 [DEBUG] [Thread-122278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:21:37.755 [DEBUG] [Thread-122278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:21:37.764 [DEBUG] [Thread-122278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:21:37.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:21:37.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:21:37.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:21:37.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:21:37.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:21:37.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:21:37.795 [DEBUG] [Thread-122278] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:21:47.572 [DEBUG] [Thread-122280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:01.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:01.979 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:02.566 [DEBUG] [Thread-122281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:02.613 [DEBUG] [Thread-122282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:22:07.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:22:07.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:22:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 22, 1), 19.95, 25.72, 0.0, 27.17, 18.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:22:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:22:01
2025-12-03T19:22:08.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:22:08.767 [DEBUG] [Thread-122283] [transport.py] [_log()] starting thread (client mode): 0xa517d8a0
2025-12-03T19:22:08.767 [DEBUG] [Thread-122283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:22:08.780 [DEBUG] [Thread-122283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:22:08.780 [INFO] [Thread-122283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] client lang: <none>
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] server lang: <none>
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] kex follows: False
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] Compression: none
2025-12-03T19:22:08.781 [DEBUG] [Thread-122283] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:22:08.788 [DEBUG] [Thread-122283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:22:08.788 [DEBUG] [Thread-122283] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:22:08.789 [DEBUG] [Thread-122283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:22:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:22:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:22:08.790 [DEBUG] [Thread-122283] [transport.py] [_log()] userauth is OK
2025-12-03T19:22:08.790 [DEBUG] [Thread-122283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:22:08.790 [DEBUG] [Thread-122283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:22:08.790 [DEBUG] [Thread-122283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:22:08.790 [DEBUG] [Thread-122283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:22:08.801 [INFO] [Thread-122283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:22:08.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:22:09.411 [DEBUG] [Thread-122283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:22:09.411 [DEBUG] [Thread-122283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:22:09.411 [DEBUG] [Thread-122283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:22:09.453 [DEBUG] [Thread-122283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:22:09.453 [DEBUG] [Thread-122283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:22:09.456 [DEBUG] [Thread-122283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:22:09.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:22:09.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:22:09.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:22:09.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:22:09.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:22:09.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:22:09.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:22:09.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:22:09.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:22:09.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.723311 -999.00  +18.40  25.35     31   +1.20 1 1 1 1 1   885    0 16.97 -28.52 ----- 25.4 25.4 140.0 29.9 19.7 -27.2 19.8 -26.8 20.1 -25.3 20.2 -26.6
2025-12-03T19:22:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:22:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:22:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.723311
2025-12-03T19:22:09.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:22:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:22:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:22:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:22:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:22:09.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:22:01', tmtdew=19.95, humidity=25.72, cloud=0.0, wind=27.17, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:21:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:22:09.481 [DEBUG] [Thread-122283] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:22:09.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:22:09.578 [DEBUG] [Thread-122286] [transport.py] [_log()] starting thread (client mode): 0xa51d02b0
2025-12-03T19:22:09.578 [DEBUG] [Thread-122286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:22:09.593 [DEBUG] [Thread-122286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:22:09.593 [INFO] [Thread-122286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:22:09.600 [DEBUG] [Thread-122286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] client lang: <none>
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] server lang: <none>
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] kex follows: False
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] Compression: none
2025-12-03T19:22:09.601 [DEBUG] [Thread-122286] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:22:09.661 [DEBUG] [Thread-122286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:22:09.661 [DEBUG] [Thread-122286] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:22:09.662 [DEBUG] [Thread-122286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:22:09.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:22:09.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:22:09.719 [DEBUG] [Thread-122286] [transport.py] [_log()] userauth is OK
2025-12-03T19:22:09.719 [DEBUG] [Thread-122286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:22:09.719 [DEBUG] [Thread-122286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:22:09.720 [DEBUG] [Thread-122286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:22:09.720 [DEBUG] [Thread-122286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:22:09.746 [INFO] [Thread-122286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:22:09.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:22:09.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:22:10.595 [DEBUG] [Thread-122286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:22:10.595 [DEBUG] [Thread-122286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:22:10.643 [DEBUG] [Thread-122286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:22:10.643 [DEBUG] [Thread-122286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:22:10.652 [DEBUG] [Thread-122286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:22:10.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:22:10.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:22:10.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:22:10.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:22:10.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:22:10.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:22:10.685 [DEBUG] [Thread-122286] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:22:17.638 [DEBUG] [Thread-122288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:32.673 [DEBUG] [Thread-122289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:22:40.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:22:40.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:22:40.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:22:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 22, 33), 19.92, 25.77, 0.0, 24.7, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:22:41.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:22:33
2025-12-03T19:22:41.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:22:41.646 [DEBUG] [Thread-122290] [transport.py] [_log()] starting thread (client mode): 0xa51d3670
2025-12-03T19:22:41.646 [DEBUG] [Thread-122290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:22:41.666 [DEBUG] [Thread-122290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:22:41.666 [INFO] [Thread-122290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] client lang: <none>
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] server lang: <none>
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] kex follows: False
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] Compression: none
2025-12-03T19:22:41.669 [DEBUG] [Thread-122290] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:22:41.686 [DEBUG] [Thread-122290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:22:41.687 [DEBUG] [Thread-122290] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:22:41.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:22:41.688 [DEBUG] [Thread-122290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:22:41.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:22:41.690 [DEBUG] [Thread-122290] [transport.py] [_log()] userauth is OK
2025-12-03T19:22:41.690 [DEBUG] [Thread-122290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:22:41.690 [DEBUG] [Thread-122290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:22:41.690 [DEBUG] [Thread-122290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:22:41.690 [DEBUG] [Thread-122290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:22:41.725 [INFO] [Thread-122290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:22:41.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:22:42.354 [DEBUG] [Thread-122290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:22:42.354 [DEBUG] [Thread-122290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:22:42.355 [DEBUG] [Thread-122290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:22:42.395 [DEBUG] [Thread-122290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:22:42.395 [DEBUG] [Thread-122290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:22:42.398 [DEBUG] [Thread-122290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:22:42.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:22:42.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:22:42.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:22:42.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:22:42.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:22:42.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:22:42.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:22:42.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.723658 -999.00  +18.40  18.81     31   +1.30 1 1 1 1 1   885    0 16.43 -28.47 ----- 18.8 18.8 140.0 27.9 19.7 -27.2 19.9 -26.8 20.1 -25.7 20.2 -26.4
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.723658
2025-12-03T19:22:42.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:22:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:22:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:22:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:22:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:22:42.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:22:33', tmtdew=19.92, humidity=25.77, cloud=0.0, wind=24.7, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:22:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:22:42.424 [DEBUG] [Thread-122290] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:22:42.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:22:42.520 [DEBUG] [Thread-122293] [transport.py] [_log()] starting thread (client mode): 0xa514a0e0
2025-12-03T19:22:42.520 [DEBUG] [Thread-122293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:22:42.535 [DEBUG] [Thread-122293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:22:42.535 [INFO] [Thread-122293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:22:42.543 [DEBUG] [Thread-122293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] client lang: <none>
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] server lang: <none>
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] kex follows: False
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] Compression: none
2025-12-03T19:22:42.544 [DEBUG] [Thread-122293] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:22:42.601 [DEBUG] [Thread-122293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:22:42.601 [DEBUG] [Thread-122293] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:22:42.602 [DEBUG] [Thread-122293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:22:42.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:22:42.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:22:42.661 [DEBUG] [Thread-122293] [transport.py] [_log()] userauth is OK
2025-12-03T19:22:42.661 [DEBUG] [Thread-122293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:22:42.661 [DEBUG] [Thread-122293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:22:42.661 [DEBUG] [Thread-122293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:22:42.661 [DEBUG] [Thread-122293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:22:42.684 [INFO] [Thread-122293] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:22:42.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:22:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:22:43.560 [DEBUG] [Thread-122293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:22:43.560 [DEBUG] [Thread-122293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:22:43.608 [DEBUG] [Thread-122293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:22:43.609 [DEBUG] [Thread-122293] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:22:43.617 [DEBUG] [Thread-122293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:22:43.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:22:43.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:22:43.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:22:43.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:22:43.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:22:43.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:22:43.652 [DEBUG] [Thread-122293] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:22:47.705 [DEBUG] [Thread-122295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:02.130 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:02.131 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:02.631 [DEBUG] [Thread-122296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:02.755 [DEBUG] [Thread-122297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:23:13.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:23:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:23:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 23, 5), 19.93, 25.77, 0.0, 26.45, 18.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:23:14.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:23:05
2025-12-03T19:23:14.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:23:14.631 [DEBUG] [Thread-122298] [transport.py] [_log()] starting thread (client mode): 0xa517ea10
2025-12-03T19:23:14.631 [DEBUG] [Thread-122298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:23:14.651 [DEBUG] [Thread-122298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:23:14.651 [INFO] [Thread-122298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:14.654 [DEBUG] [Thread-122298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] client lang: <none>
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] server lang: <none>
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] kex follows: False
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] Compression: none
2025-12-03T19:23:14.655 [DEBUG] [Thread-122298] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:23:14.670 [DEBUG] [Thread-122298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:23:14.671 [DEBUG] [Thread-122298] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:23:14.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:23:14.671 [DEBUG] [Thread-122298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:23:14.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:23:14.673 [DEBUG] [Thread-122298] [transport.py] [_log()] userauth is OK
2025-12-03T19:23:14.674 [DEBUG] [Thread-122298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:23:14.674 [DEBUG] [Thread-122298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:23:14.674 [DEBUG] [Thread-122298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:23:14.674 [DEBUG] [Thread-122298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:23:14.694 [INFO] [Thread-122298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:23:14.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:23:15.323 [DEBUG] [Thread-122298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:23:15.323 [DEBUG] [Thread-122298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:23:15.324 [DEBUG] [Thread-122298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:23:15.364 [DEBUG] [Thread-122298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:23:15.364 [DEBUG] [Thread-122298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:23:15.367 [DEBUG] [Thread-122298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:23:15.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:23:15.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:23:15.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:23:15.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:23:15.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:23:15.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:23:15.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.724005 -999.00  +18.40  14.36     32   +1.40 1 1 1 1 1   885    0 16.56 -27.31 ----- 14.4 14.4 149.8 28.4 19.7 -27.2 19.8 -26.6 20.0 -25.4 20.1 -26.3
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:23:15.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.724005
2025-12-03T19:23:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:23:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:23:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:23:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:23:15.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:23:15.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:23:05', tmtdew=19.93, humidity=25.77, cloud=0.0, wind=26.45, temperature=18.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:22:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:23:15.392 [DEBUG] [Thread-122298] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:23:15.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:23:15.486 [DEBUG] [Thread-122301] [transport.py] [_log()] starting thread (client mode): 0xa2726ad0
2025-12-03T19:23:15.486 [DEBUG] [Thread-122301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:23:15.501 [DEBUG] [Thread-122301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:23:15.501 [INFO] [Thread-122301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:23:15.508 [DEBUG] [Thread-122301] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:23:15.508 [DEBUG] [Thread-122301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] client lang: <none>
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] server lang: <none>
2025-12-03T19:23:15.509 [DEBUG] [Thread-122301] [transport.py] [_log()] kex follows: False
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] Compression: none
2025-12-03T19:23:15.510 [DEBUG] [Thread-122301] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:23:15.566 [DEBUG] [Thread-122301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:23:15.566 [DEBUG] [Thread-122301] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:23:15.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:23:15.567 [DEBUG] [Thread-122301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:23:15.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:23:15.623 [DEBUG] [Thread-122301] [transport.py] [_log()] userauth is OK
2025-12-03T19:23:15.623 [DEBUG] [Thread-122301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:23:15.623 [DEBUG] [Thread-122301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:23:15.624 [DEBUG] [Thread-122301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:23:15.624 [DEBUG] [Thread-122301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:23:15.642 [INFO] [Thread-122301] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:23:15.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:23:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:23:16.474 [DEBUG] [Thread-122301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:23:16.474 [DEBUG] [Thread-122301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:23:16.522 [DEBUG] [Thread-122301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:23:16.522 [DEBUG] [Thread-122301] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:23:16.531 [DEBUG] [Thread-122301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:23:16.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:23:16.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:23:16.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:23:16.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:23:16.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:23:16.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:23:16.566 [DEBUG] [Thread-122301] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:23:17.784 [DEBUG] [Thread-122303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:32.834 [DEBUG] [Thread-122304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:46.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:23:46.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:23:46.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:23:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 23, 37), 19.85, 25.72, 0.0, 26.85, 18.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:23:47.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:23:37
2025-12-03T19:23:47.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:23:47.547 [DEBUG] [Thread-122305] [transport.py] [_log()] starting thread (client mode): 0xa2762410
2025-12-03T19:23:47.548 [DEBUG] [Thread-122305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:23:47.567 [DEBUG] [Thread-122305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:23:47.568 [INFO] [Thread-122305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] client lang: <none>
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] server lang: <none>
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] kex follows: False
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:23:47.571 [DEBUG] [Thread-122305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:23:47.572 [DEBUG] [Thread-122305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:23:47.572 [DEBUG] [Thread-122305] [transport.py] [_log()] Compression: none
2025-12-03T19:23:47.572 [DEBUG] [Thread-122305] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:23:47.580 [DEBUG] [Thread-122305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:23:47.580 [DEBUG] [Thread-122305] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:23:47.580 [DEBUG] [Thread-122305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:23:47.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:23:47.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:23:47.625 [DEBUG] [Thread-122305] [transport.py] [_log()] userauth is OK
2025-12-03T19:23:47.625 [DEBUG] [Thread-122305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:23:47.625 [DEBUG] [Thread-122305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:23:47.625 [DEBUG] [Thread-122305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:23:47.626 [DEBUG] [Thread-122305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:23:47.648 [INFO] [Thread-122305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:23:47.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:23:47.856 [DEBUG] [Thread-122307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:23:48.271 [DEBUG] [Thread-122305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:23:48.271 [DEBUG] [Thread-122305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:23:48.271 [DEBUG] [Thread-122305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:23:48.312 [DEBUG] [Thread-122305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:23:48.312 [DEBUG] [Thread-122305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:23:48.315 [DEBUG] [Thread-122305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:23:48.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:23:48.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:23:48.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:23:48.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:23:48.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:23:48.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:23:48.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:23:48.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:23:48.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:23:48.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.724352 -999.00  +18.30  14.40     32   +1.40 1 1 1 1 1   885    0 16.33 -29.01 ----- 14.4 14.4 142.3 23.4 19.7 -27.2 19.8 -26.6 20.0 -25.3 20.1 -26.3
2025-12-03T19:23:48.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:23:48.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:23:48.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.724352
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:23:48.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:23:37', tmtdew=19.85, humidity=25.72, cloud=0.0, wind=26.85, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:23:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:23:48.339 [DEBUG] [Thread-122305] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:23:48.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:23:48.436 [DEBUG] [Thread-122309] [transport.py] [_log()] starting thread (client mode): 0xa27ca7d0
2025-12-03T19:23:48.436 [DEBUG] [Thread-122309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:23:48.451 [DEBUG] [Thread-122309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:23:48.451 [INFO] [Thread-122309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:23:48.458 [DEBUG] [Thread-122309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:23:48.458 [DEBUG] [Thread-122309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:23:48.458 [DEBUG] [Thread-122309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:23:48.458 [DEBUG] [Thread-122309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] client lang: <none>
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] server lang: <none>
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] kex follows: False
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] Compression: none
2025-12-03T19:23:48.459 [DEBUG] [Thread-122309] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:23:48.517 [DEBUG] [Thread-122309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:23:48.517 [DEBUG] [Thread-122309] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:23:48.518 [DEBUG] [Thread-122309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:23:48.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:23:48.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:23:48.573 [DEBUG] [Thread-122309] [transport.py] [_log()] userauth is OK
2025-12-03T19:23:48.574 [DEBUG] [Thread-122309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:23:48.574 [DEBUG] [Thread-122309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:23:48.574 [DEBUG] [Thread-122309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:23:48.574 [DEBUG] [Thread-122309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:23:48.594 [INFO] [Thread-122309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:23:48.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:23:48.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:23:49.440 [DEBUG] [Thread-122309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:23:49.441 [DEBUG] [Thread-122309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:23:49.489 [DEBUG] [Thread-122309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:23:49.489 [DEBUG] [Thread-122309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:23:49.498 [DEBUG] [Thread-122309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:23:49.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:23:49.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:23:49.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:23:49.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:23:49.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:23:49.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:23:49.532 [DEBUG] [Thread-122309] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:24:02.269 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:02.270 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:02.695 [DEBUG] [Thread-122311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:02.885 [DEBUG] [Thread-122312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:17.927 [DEBUG] [Thread-122313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:24:19.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:24:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:24:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 24, 9), 19.8, 25.81, 0.0, 26.94, 18.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:24:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:24:09
2025-12-03T19:24:20.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:24:20.484 [DEBUG] [Thread-122314] [transport.py] [_log()] starting thread (client mode): 0xa51d2fb0
2025-12-03T19:24:20.484 [DEBUG] [Thread-122314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:24:20.504 [DEBUG] [Thread-122314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:24:20.505 [INFO] [Thread-122314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] client lang: <none>
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] server lang: <none>
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] kex follows: False
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:24:20.506 [DEBUG] [Thread-122314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:24:20.507 [DEBUG] [Thread-122314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:24:20.507 [DEBUG] [Thread-122314] [transport.py] [_log()] Compression: none
2025-12-03T19:24:20.507 [DEBUG] [Thread-122314] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:24:20.514 [DEBUG] [Thread-122314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:24:20.515 [DEBUG] [Thread-122314] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:24:20.515 [DEBUG] [Thread-122314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:24:20.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:24:20.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:24:20.516 [DEBUG] [Thread-122314] [transport.py] [_log()] userauth is OK
2025-12-03T19:24:20.517 [DEBUG] [Thread-122314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:24:20.517 [DEBUG] [Thread-122314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:24:20.517 [DEBUG] [Thread-122314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:24:20.517 [DEBUG] [Thread-122314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:24:20.539 [INFO] [Thread-122314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:24:20.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:24:21.138 [DEBUG] [Thread-122314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:24:21.139 [DEBUG] [Thread-122314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:24:21.139 [DEBUG] [Thread-122314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:24:21.180 [DEBUG] [Thread-122314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:24:21.180 [DEBUG] [Thread-122314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:24:21.183 [DEBUG] [Thread-122314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:24:21.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:24:21.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:24:21.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:24:21.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:24:21.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:24:21.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:24:21.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.724700 -999.00  +18.30  15.96     32   +1.30 1 1 1 1 1   884    0 16.74 -27.97 ----- 16.0 16.0 158.5 24.0 19.6 -27.0 19.8 -27.0 20.0 -25.1 20.1 -26.3
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.724700
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:24:21.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:24:09', tmtdew=19.8, humidity=25.81, cloud=0.0, wind=26.94, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:23:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:24:21.205 [DEBUG] [Thread-122314] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:24:21.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:24:21.288 [DEBUG] [Thread-122317] [transport.py] [_log()] starting thread (client mode): 0xa271ee30
2025-12-03T19:24:21.288 [DEBUG] [Thread-122317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:24:21.304 [DEBUG] [Thread-122317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:24:21.304 [INFO] [Thread-122317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:21.311 [DEBUG] [Thread-122317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] client lang: <none>
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] server lang: <none>
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] kex follows: False
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] Compression: none
2025-12-03T19:24:21.312 [DEBUG] [Thread-122317] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:24:21.368 [DEBUG] [Thread-122317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:24:21.369 [DEBUG] [Thread-122317] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:24:21.369 [DEBUG] [Thread-122317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:24:21.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:24:21.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:24:21.425 [DEBUG] [Thread-122317] [transport.py] [_log()] userauth is OK
2025-12-03T19:24:21.425 [DEBUG] [Thread-122317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:24:21.426 [DEBUG] [Thread-122317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:24:21.426 [DEBUG] [Thread-122317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:24:21.426 [DEBUG] [Thread-122317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:24:21.445 [INFO] [Thread-122317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:24:21.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:24:21.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:24:22.307 [DEBUG] [Thread-122317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:24:22.307 [DEBUG] [Thread-122317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:24:22.355 [DEBUG] [Thread-122317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:24:22.355 [DEBUG] [Thread-122317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:24:22.364 [DEBUG] [Thread-122317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:24:22.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:24:22.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:24:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:24:22.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:24:22.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:24:22.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:24:22.398 [DEBUG] [Thread-122317] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:24:32.955 [DEBUG] [Thread-122319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:48.008 [DEBUG] [Thread-122320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:24:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:24:52.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:24:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:24:53.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 24, 41), 19.69, 26.41, 0.0, 24.12, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:24:53.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:24:41
2025-12-03T19:24:53.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:24:53.415 [DEBUG] [Thread-122321] [transport.py] [_log()] starting thread (client mode): 0xa2726800
2025-12-03T19:24:53.415 [DEBUG] [Thread-122321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:24:53.436 [DEBUG] [Thread-122321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:24:53.436 [INFO] [Thread-122321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] client lang: <none>
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] server lang: <none>
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] kex follows: False
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:24:53.439 [DEBUG] [Thread-122321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:24:53.440 [DEBUG] [Thread-122321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:24:53.440 [DEBUG] [Thread-122321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:24:53.440 [DEBUG] [Thread-122321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:24:53.440 [DEBUG] [Thread-122321] [transport.py] [_log()] Compression: none
2025-12-03T19:24:53.440 [DEBUG] [Thread-122321] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:24:53.456 [DEBUG] [Thread-122321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:24:53.456 [DEBUG] [Thread-122321] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:24:53.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:24:53.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] userauth is OK
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:24:53.457 [DEBUG] [Thread-122321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:24:53.472 [INFO] [Thread-122321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:24:53.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:24:54.144 [DEBUG] [Thread-122321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:24:54.144 [DEBUG] [Thread-122321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:24:54.144 [DEBUG] [Thread-122321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:24:54.184 [DEBUG] [Thread-122321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:24:54.185 [DEBUG] [Thread-122321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:24:54.187 [DEBUG] [Thread-122321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:24:54.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:24:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:24:54.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:24:54.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:24:54.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:24:54.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:24:54.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.725047 -999.00  +18.30  17.56     32   +1.40 1 1 1 1 1   884    0 16.53 -29.04 ----- 17.6 17.6 143.4 31.1 19.6 -27.1 19.8 -27.3 19.9 -25.3 20.1 -26.3
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.725047
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:24:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:24:54.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:24:41', tmtdew=19.69, humidity=26.41, cloud=0.0, wind=24.12, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:24:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:24:54.206 [DEBUG] [Thread-122321] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:24:54.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:24:54.292 [DEBUG] [Thread-122324] [transport.py] [_log()] starting thread (client mode): 0xa2726860
2025-12-03T19:24:54.292 [DEBUG] [Thread-122324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:24:54.308 [DEBUG] [Thread-122324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:24:54.308 [INFO] [Thread-122324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] client lang: <none>
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] server lang: <none>
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] kex follows: False
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:24:54.319 [DEBUG] [Thread-122324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:24:54.320 [DEBUG] [Thread-122324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:24:54.320 [DEBUG] [Thread-122324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:24:54.320 [DEBUG] [Thread-122324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:24:54.320 [DEBUG] [Thread-122324] [transport.py] [_log()] Compression: none
2025-12-03T19:24:54.320 [DEBUG] [Thread-122324] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:24:54.378 [DEBUG] [Thread-122324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:24:54.378 [DEBUG] [Thread-122324] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:24:54.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:24:54.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:24:54.378 [DEBUG] [Thread-122324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:24:54.446 [DEBUG] [Thread-122324] [transport.py] [_log()] userauth is OK
2025-12-03T19:24:54.446 [DEBUG] [Thread-122324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:24:54.446 [DEBUG] [Thread-122324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:24:54.446 [DEBUG] [Thread-122324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:24:54.446 [DEBUG] [Thread-122324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:24:54.469 [INFO] [Thread-122324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:24:54.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:24:54.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:24:55.319 [DEBUG] [Thread-122324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:24:55.319 [DEBUG] [Thread-122324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:24:55.367 [DEBUG] [Thread-122324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:24:55.368 [DEBUG] [Thread-122324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:24:55.376 [DEBUG] [Thread-122324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:24:55.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:24:55.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:24:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:24:55.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:24:55.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:24:55.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:24:55.408 [DEBUG] [Thread-122324] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:25:02.410 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:02.411 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:02.739 [DEBUG] [Thread-122326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:03.034 [DEBUG] [Thread-122327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:18.075 [DEBUG] [Thread-122328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:25.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:25:25.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:25:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:25:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 25, 13), 19.68, 26.43, 0.0, 23.8, 18.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:25:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:25:13
2025-12-03T19:25:26.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:25:26.380 [DEBUG] [Thread-122329] [transport.py] [_log()] starting thread (client mode): 0xa51b8e80
2025-12-03T19:25:26.380 [DEBUG] [Thread-122329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:25:26.395 [DEBUG] [Thread-122329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:25:26.395 [INFO] [Thread-122329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] client lang: <none>
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] server lang: <none>
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] kex follows: False
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] Compression: none
2025-12-03T19:25:26.399 [DEBUG] [Thread-122329] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:25:26.415 [DEBUG] [Thread-122329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:25:26.416 [DEBUG] [Thread-122329] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:25:26.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:25:26.417 [DEBUG] [Thread-122329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:25:26.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:25:26.418 [DEBUG] [Thread-122329] [transport.py] [_log()] userauth is OK
2025-12-03T19:25:26.419 [DEBUG] [Thread-122329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:25:26.419 [DEBUG] [Thread-122329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:25:26.419 [DEBUG] [Thread-122329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:25:26.419 [DEBUG] [Thread-122329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:25:26.454 [INFO] [Thread-122329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:25:26.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:25:27.226 [DEBUG] [Thread-122329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:25:27.226 [DEBUG] [Thread-122329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:25:27.227 [DEBUG] [Thread-122329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:25:27.267 [DEBUG] [Thread-122329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:25:27.267 [DEBUG] [Thread-122329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:25:27.270 [DEBUG] [Thread-122329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:25:27.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:25:27.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:25:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:25:27.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:25:27.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:25:27.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:25:27.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:25:27.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:25:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:25:27.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.725394 -999.00  +18.30  22.08     32   +1.30 1 1 1 1 1   884    0 16.49 -30.76 ----- 22.1 22.1 155.8 26.4 19.6 -27.2 19.7 -26.5 19.9 -25.2 20.0 -26.5
2025-12-03T19:25:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:25:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:25:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.725394
2025-12-03T19:25:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:25:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:25:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:25:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:25:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:25:27.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:25:13', tmtdew=19.68, humidity=26.43, cloud=0.0, wind=23.8, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:24:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:25:27.294 [DEBUG] [Thread-122329] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:25:27.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:25:27.389 [DEBUG] [Thread-122332] [transport.py] [_log()] starting thread (client mode): 0xa2727700
2025-12-03T19:25:27.389 [DEBUG] [Thread-122332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:25:27.407 [DEBUG] [Thread-122332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:25:27.407 [INFO] [Thread-122332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:27.414 [DEBUG] [Thread-122332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] client lang: <none>
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] server lang: <none>
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] kex follows: False
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] Compression: none
2025-12-03T19:25:27.415 [DEBUG] [Thread-122332] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:25:27.472 [DEBUG] [Thread-122332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:25:27.473 [DEBUG] [Thread-122332] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:25:27.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:25:27.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:25:27.474 [DEBUG] [Thread-122332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:25:27.530 [DEBUG] [Thread-122332] [transport.py] [_log()] userauth is OK
2025-12-03T19:25:27.530 [DEBUG] [Thread-122332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:25:27.531 [DEBUG] [Thread-122332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:25:27.531 [DEBUG] [Thread-122332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:25:27.531 [DEBUG] [Thread-122332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:25:27.549 [INFO] [Thread-122332] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:25:27.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:25:27.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:25:28.414 [DEBUG] [Thread-122332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:25:28.414 [DEBUG] [Thread-122332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:25:28.463 [DEBUG] [Thread-122332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:25:28.463 [DEBUG] [Thread-122332] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:25:28.471 [DEBUG] [Thread-122332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:25:28.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:25:28.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:25:28.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:25:28.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:25:28.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:25:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:25:28.506 [DEBUG] [Thread-122332] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:25:33.103 [DEBUG] [Thread-122334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:48.136 [DEBUG] [Thread-122335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:25:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:25:58.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:25:58.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:25:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 25, 45), 19.64, 26.51, 0.0, 25.51, 18.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:25:59.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:25:45
2025-12-03T19:25:59.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:25:59.465 [DEBUG] [Thread-122336] [transport.py] [_log()] starting thread (client mode): 0xa514be80
2025-12-03T19:25:59.465 [DEBUG] [Thread-122336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:25:59.486 [DEBUG] [Thread-122336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:25:59.486 [INFO] [Thread-122336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:25:59.489 [DEBUG] [Thread-122336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] client lang: <none>
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] server lang: <none>
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] kex follows: False
2025-12-03T19:25:59.490 [DEBUG] [Thread-122336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] Compression: none
2025-12-03T19:25:59.491 [DEBUG] [Thread-122336] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:25:59.511 [DEBUG] [Thread-122336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:25:59.512 [DEBUG] [Thread-122336] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:25:59.513 [DEBUG] [Thread-122336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:25:59.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:25:59.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:25:59.515 [DEBUG] [Thread-122336] [transport.py] [_log()] userauth is OK
2025-12-03T19:25:59.515 [DEBUG] [Thread-122336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:25:59.515 [DEBUG] [Thread-122336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:25:59.515 [DEBUG] [Thread-122336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:25:59.515 [DEBUG] [Thread-122336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:25:59.538 [INFO] [Thread-122336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:25:59.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:26:00.213 [DEBUG] [Thread-122336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:26:00.213 [DEBUG] [Thread-122336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:26:00.214 [DEBUG] [Thread-122336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:26:00.254 [DEBUG] [Thread-122336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:26:00.254 [DEBUG] [Thread-122336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:26:00.256 [DEBUG] [Thread-122336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:26:00.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:26:00.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:26:00.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:26:00.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:26:00.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:26:00.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:26:00.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:26:00.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:26:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:26:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.725741 -999.00  +18.30  23.90     32   +1.40 1 1 1 1 1   883    0 16.43 -27.46 ----- 23.9 23.9 144.2 32.9 19.5 -26.9 19.6 -26.7 19.8 -25.1 20.0 -26.5
2025-12-03T19:26:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:26:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:26:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.725741
2025-12-03T19:26:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:26:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:26:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:26:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:26:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:26:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:25:45', tmtdew=19.64, humidity=26.51, cloud=0.0, wind=25.51, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:25:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:26:00.280 [DEBUG] [Thread-122336] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:26:00.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:26:00.378 [DEBUG] [Thread-122339] [transport.py] [_log()] starting thread (client mode): 0xa514bbb0
2025-12-03T19:26:00.378 [DEBUG] [Thread-122339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:26:00.392 [DEBUG] [Thread-122339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:26:00.392 [INFO] [Thread-122339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:26:00.399 [DEBUG] [Thread-122339] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] client lang: <none>
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] server lang: <none>
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] kex follows: False
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] Compression: none
2025-12-03T19:26:00.400 [DEBUG] [Thread-122339] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:26:00.458 [DEBUG] [Thread-122339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:26:00.459 [DEBUG] [Thread-122339] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:26:00.459 [DEBUG] [Thread-122339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:26:00.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:26:00.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:26:00.515 [DEBUG] [Thread-122339] [transport.py] [_log()] userauth is OK
2025-12-03T19:26:00.515 [DEBUG] [Thread-122339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:26:00.515 [DEBUG] [Thread-122339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:26:00.516 [DEBUG] [Thread-122339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:26:00.516 [DEBUG] [Thread-122339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:26:00.534 [INFO] [Thread-122339] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:26:00.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:26:00.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:26:01.367 [DEBUG] [Thread-122339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:26:01.367 [DEBUG] [Thread-122339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:26:01.415 [DEBUG] [Thread-122339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:26:01.415 [DEBUG] [Thread-122339] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:26:01.423 [DEBUG] [Thread-122339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:26:01.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:26:01.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:26:01.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:26:01.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:26:01.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:26:01.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:26:01.457 [DEBUG] [Thread-122339] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:26:02.554 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:02.555 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:02.783 [DEBUG] [Thread-122341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:03.165 [DEBUG] [Thread-122342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:18.205 [DEBUG] [Thread-122343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:31.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:26:31.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:26:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:26:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 26, 17), 19.64, 26.51, 0.0, 24.72, 18.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:26:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:26:17
2025-12-03T19:26:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:26:32.426 [DEBUG] [Thread-122344] [transport.py] [_log()] starting thread (client mode): 0xa272ba90
2025-12-03T19:26:32.426 [DEBUG] [Thread-122344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:26:32.437 [DEBUG] [Thread-122344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:26:32.437 [INFO] [Thread-122344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] client lang: <none>
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] server lang: <none>
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] kex follows: False
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] Compression: none
2025-12-03T19:26:32.439 [DEBUG] [Thread-122344] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:26:32.449 [DEBUG] [Thread-122344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:26:32.449 [DEBUG] [Thread-122344] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:26:32.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:26:32.449 [DEBUG] [Thread-122344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:26:32.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:26:32.450 [DEBUG] [Thread-122344] [transport.py] [_log()] userauth is OK
2025-12-03T19:26:32.451 [DEBUG] [Thread-122344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:26:32.451 [DEBUG] [Thread-122344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:26:32.451 [DEBUG] [Thread-122344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:26:32.451 [DEBUG] [Thread-122344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:26:32.464 [INFO] [Thread-122344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:26:32.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:26:33.065 [DEBUG] [Thread-122344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:26:33.065 [DEBUG] [Thread-122344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:26:33.066 [DEBUG] [Thread-122344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:26:33.106 [DEBUG] [Thread-122344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:26:33.106 [DEBUG] [Thread-122344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:26:33.109 [DEBUG] [Thread-122344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:26:33.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:26:33.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:26:33.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:26:33.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:26:33.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:26:33.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:26:33.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:26:33.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:26:33.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:26:33.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.726435 -999.00  +18.30  26.01     32   +1.40 1 1 1 1 1   882    0 16.70 -28.63 ----- 26.0 26.0 163.6 32.1 19.5 -27.1 19.5 -26.5 19.7 -25.1 19.9 -26.1
2025-12-03T19:26:33.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:26:33.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:26:33.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.726435
2025-12-03T19:26:33.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:26:33.129 [DEBUG] [Thread-122344] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:26:33.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:26:33.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:26:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:26:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:26:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:26:17', tmtdew=19.64, humidity=26.51, cloud=0.0, wind=24.72, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:26:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:26:33.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:26:33.220 [DEBUG] [Thread-122347] [transport.py] [_log()] starting thread (client mode): 0xa2728d30
2025-12-03T19:26:33.220 [DEBUG] [Thread-122347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:26:33.229 [DEBUG] [Thread-122348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:26:33.240 [DEBUG] [Thread-122347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:26:33.240 [INFO] [Thread-122347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:26:33.251 [DEBUG] [Thread-122347] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:26:33.251 [DEBUG] [Thread-122347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:26:33.251 [DEBUG] [Thread-122347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:26:33.251 [DEBUG] [Thread-122347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:33.251 [DEBUG] [Thread-122347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] client lang: <none>
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] server lang: <none>
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] kex follows: False
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] Compression: none
2025-12-03T19:26:33.252 [DEBUG] [Thread-122347] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:26:33.306 [DEBUG] [Thread-122347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:26:33.306 [DEBUG] [Thread-122347] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:26:33.307 [DEBUG] [Thread-122347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:26:33.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:26:33.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:26:33.362 [DEBUG] [Thread-122347] [transport.py] [_log()] userauth is OK
2025-12-03T19:26:33.363 [DEBUG] [Thread-122347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:26:33.363 [DEBUG] [Thread-122347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:26:33.363 [DEBUG] [Thread-122347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:26:33.363 [DEBUG] [Thread-122347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:26:33.381 [INFO] [Thread-122347] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:26:33.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:26:33.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:26:34.214 [DEBUG] [Thread-122347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:26:34.215 [DEBUG] [Thread-122347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:26:34.263 [DEBUG] [Thread-122347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:26:34.263 [DEBUG] [Thread-122347] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:26:34.271 [DEBUG] [Thread-122347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:26:34.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:26:34.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:26:34.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:26:34.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:26:34.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:26:34.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:26:34.305 [DEBUG] [Thread-122347] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:26:48.263 [DEBUG] [Thread-122350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:02.692 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:02.693 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:02.876 [DEBUG] [Thread-122351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:03.293 [DEBUG] [Thread-122352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:27:04.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:27:04.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:27:04.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 26, 49), 19.6, 26.48, 0.0, 27.47, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:27:04.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:26:49
2025-12-03T19:27:05.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:27:05.271 [DEBUG] [Thread-122353] [transport.py] [_log()] starting thread (client mode): 0xa272b2e0
2025-12-03T19:27:05.271 [DEBUG] [Thread-122353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:27:05.298 [DEBUG] [Thread-122353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:27:05.298 [INFO] [Thread-122353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:27:05.301 [DEBUG] [Thread-122353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] client lang: <none>
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] server lang: <none>
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] kex follows: False
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:27:05.302 [DEBUG] [Thread-122353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:27:05.303 [DEBUG] [Thread-122353] [transport.py] [_log()] Compression: none
2025-12-03T19:27:05.303 [DEBUG] [Thread-122353] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:27:05.320 [DEBUG] [Thread-122353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:27:05.321 [DEBUG] [Thread-122353] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:27:05.321 [DEBUG] [Thread-122353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:27:05.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:27:05.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:27:05.323 [DEBUG] [Thread-122353] [transport.py] [_log()] userauth is OK
2025-12-03T19:27:05.323 [DEBUG] [Thread-122353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:27:05.323 [DEBUG] [Thread-122353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:27:05.323 [DEBUG] [Thread-122353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:27:05.323 [DEBUG] [Thread-122353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:27:05.358 [INFO] [Thread-122353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:27:05.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:27:05.973 [DEBUG] [Thread-122353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:27:05.973 [DEBUG] [Thread-122353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:27:05.973 [DEBUG] [Thread-122353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:27:06.014 [DEBUG] [Thread-122353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:27:06.014 [DEBUG] [Thread-122353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:27:06.017 [DEBUG] [Thread-122353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:27:06.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:27:06.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:27:06.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:27:06.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:27:06.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:27:06.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:27:06.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:27:06.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:27:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:27:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.726783 -999.00  +18.20  13.85     32   +1.40 1 1 1 1 1   882    0 16.39 -29.43 ----- 13.8 13.8 154.1 21.0 19.4 -27.0 19.5 -26.4 19.6 -25.2 19.9 -26.1
2025-12-03T19:27:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:27:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:27:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.726783
2025-12-03T19:27:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:27:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:27:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:27:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:27:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:27:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:26:49', tmtdew=19.6, humidity=26.48, cloud=0.0, wind=27.47, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:26:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:27:06.041 [DEBUG] [Thread-122353] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:27:06.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:27:06.135 [DEBUG] [Thread-122356] [transport.py] [_log()] starting thread (client mode): 0xa514be80
2025-12-03T19:27:06.135 [DEBUG] [Thread-122356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:27:06.149 [DEBUG] [Thread-122356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:27:06.150 [INFO] [Thread-122356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:06.157 [DEBUG] [Thread-122356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] client lang: <none>
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] server lang: <none>
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] kex follows: False
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:27:06.158 [DEBUG] [Thread-122356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:27:06.159 [DEBUG] [Thread-122356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:27:06.159 [DEBUG] [Thread-122356] [transport.py] [_log()] Compression: none
2025-12-03T19:27:06.159 [DEBUG] [Thread-122356] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:27:06.214 [DEBUG] [Thread-122356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:27:06.215 [DEBUG] [Thread-122356] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:27:06.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:27:06.216 [DEBUG] [Thread-122356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:27:06.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:27:06.270 [DEBUG] [Thread-122356] [transport.py] [_log()] userauth is OK
2025-12-03T19:27:06.270 [DEBUG] [Thread-122356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:27:06.270 [DEBUG] [Thread-122356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:27:06.270 [DEBUG] [Thread-122356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:27:06.270 [DEBUG] [Thread-122356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:27:06.290 [INFO] [Thread-122356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:27:06.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:27:06.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:27:07.152 [DEBUG] [Thread-122356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:27:07.152 [DEBUG] [Thread-122356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:27:07.200 [DEBUG] [Thread-122356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:27:07.200 [DEBUG] [Thread-122356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:27:07.208 [DEBUG] [Thread-122356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:27:07.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:27:07.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:27:07.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:27:07.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:27:07.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:27:07.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:27:07.242 [DEBUG] [Thread-122356] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:27:18.321 [DEBUG] [Thread-122358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:33.360 [DEBUG] [Thread-122359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:27:37.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:27:37.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:27:37.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:27:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 27, 21), 19.57, 26.55, 0.0, 26.98, 18.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:27:37.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:27:21
2025-12-03T19:27:38.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:27:38.218 [DEBUG] [Thread-122360] [transport.py] [_log()] starting thread (client mode): 0xa2726170
2025-12-03T19:27:38.219 [DEBUG] [Thread-122360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:27:38.238 [DEBUG] [Thread-122360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:27:38.238 [INFO] [Thread-122360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] client lang: <none>
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] server lang: <none>
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] kex follows: False
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] Compression: none
2025-12-03T19:27:38.242 [DEBUG] [Thread-122360] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:27:38.261 [DEBUG] [Thread-122360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:27:38.261 [DEBUG] [Thread-122360] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:27:38.262 [DEBUG] [Thread-122360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:27:38.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:27:38.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:27:38.264 [DEBUG] [Thread-122360] [transport.py] [_log()] userauth is OK
2025-12-03T19:27:38.264 [DEBUG] [Thread-122360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:27:38.265 [DEBUG] [Thread-122360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:27:38.265 [DEBUG] [Thread-122360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:27:38.265 [DEBUG] [Thread-122360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:27:38.282 [INFO] [Thread-122360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:27:38.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:27:39.035 [DEBUG] [Thread-122360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:27:39.035 [DEBUG] [Thread-122360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:27:39.036 [DEBUG] [Thread-122360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:27:39.077 [DEBUG] [Thread-122360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:27:39.077 [DEBUG] [Thread-122360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:27:39.079 [DEBUG] [Thread-122360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:27:39.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:27:39.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:27:39.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:27:39.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:27:39.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:27:39.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:27:39.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:27:39.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:27:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:27:39.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.727130 -999.00  +18.20  16.51     32   +1.40 1 1 1 1 1   881    0 16.30 -31.73 ----- 16.5 16.5 153.8 25.0 19.4 -27.0 19.5 -26.5 19.6 -25.2 19.8 -26.3
2025-12-03T19:27:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:27:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:27:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.727130
2025-12-03T19:27:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:27:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:27:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:27:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:27:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:27:39.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:27:21', tmtdew=19.57, humidity=26.55, cloud=0.0, wind=26.98, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:27:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:27:39.106 [DEBUG] [Thread-122360] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:27:39.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:27:39.201 [DEBUG] [Thread-122363] [transport.py] [_log()] starting thread (client mode): 0xa514a710
2025-12-03T19:27:39.201 [DEBUG] [Thread-122363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:27:39.216 [DEBUG] [Thread-122363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:27:39.216 [INFO] [Thread-122363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:27:39.223 [DEBUG] [Thread-122363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] client lang: <none>
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] server lang: <none>
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] kex follows: False
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] Compression: none
2025-12-03T19:27:39.224 [DEBUG] [Thread-122363] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:27:39.285 [DEBUG] [Thread-122363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:27:39.285 [DEBUG] [Thread-122363] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:27:39.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:27:39.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:27:39.287 [DEBUG] [Thread-122363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:27:39.341 [DEBUG] [Thread-122363] [transport.py] [_log()] userauth is OK
2025-12-03T19:27:39.342 [DEBUG] [Thread-122363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:27:39.342 [DEBUG] [Thread-122363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:27:39.342 [DEBUG] [Thread-122363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:27:39.342 [DEBUG] [Thread-122363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:27:39.361 [INFO] [Thread-122363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:27:39.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:27:39.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:27:40.181 [DEBUG] [Thread-122363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:27:40.181 [DEBUG] [Thread-122363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:27:40.229 [DEBUG] [Thread-122363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:27:40.229 [DEBUG] [Thread-122363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:27:40.238 [DEBUG] [Thread-122363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:27:40.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:27:40.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:27:40.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:27:40.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:27:40.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:27:40.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:27:40.271 [DEBUG] [Thread-122363] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:27:48.387 [DEBUG] [Thread-122365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:02.941 [DEBUG] [Thread-122366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:03.427 [DEBUG] [Thread-122367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:09.354 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:09.356 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:10.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:28:10.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:28:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:28:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 27, 53), 19.57, 26.55, 0.0, 25.64, 18.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:28:10.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:27:53
2025-12-03T19:28:11.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:28:11.232 [DEBUG] [Thread-122368] [transport.py] [_log()] starting thread (client mode): 0xa2726920
2025-12-03T19:28:11.232 [DEBUG] [Thread-122368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:28:11.251 [DEBUG] [Thread-122368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:28:11.251 [INFO] [Thread-122368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:28:11.254 [DEBUG] [Thread-122368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:28:11.254 [DEBUG] [Thread-122368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:28:11.254 [DEBUG] [Thread-122368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:28:11.254 [DEBUG] [Thread-122368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] client lang: <none>
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] server lang: <none>
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] kex follows: False
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] Compression: none
2025-12-03T19:28:11.255 [DEBUG] [Thread-122368] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:28:11.272 [DEBUG] [Thread-122368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:28:11.272 [DEBUG] [Thread-122368] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:28:11.273 [DEBUG] [Thread-122368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:28:11.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:28:11.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:28:11.274 [DEBUG] [Thread-122368] [transport.py] [_log()] userauth is OK
2025-12-03T19:28:11.275 [DEBUG] [Thread-122368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:28:11.275 [DEBUG] [Thread-122368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:28:11.275 [DEBUG] [Thread-122368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:28:11.275 [DEBUG] [Thread-122368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:28:11.292 [INFO] [Thread-122368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:28:11.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:28:11.914 [DEBUG] [Thread-122368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:28:11.914 [DEBUG] [Thread-122368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:28:11.914 [DEBUG] [Thread-122368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:28:11.955 [DEBUG] [Thread-122368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:28:11.955 [DEBUG] [Thread-122368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:28:11.958 [DEBUG] [Thread-122368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:28:11.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:28:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:28:11.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:28:11.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:28:11.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:28:11.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:28:11.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:28:11.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:28:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:28:11.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.727477 -999.00  +18.20  11.75     32   +1.40 1 1 1 1 1   881    0 16.46 -29.94 ----- 11.8 11.8 161.2 21.8 19.4 -27.0 19.4 -26.3 19.5 -25.2 19.7 -25.8
2025-12-03T19:28:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:28:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:28:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.727477
2025-12-03T19:28:11.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:28:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:28:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:28:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:28:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:28:11.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:27:53', tmtdew=19.57, humidity=26.55, cloud=0.0, wind=25.64, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:27:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:28:11.980 [DEBUG] [Thread-122368] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:28:12.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:28:12.076 [DEBUG] [Thread-122371] [transport.py] [_log()] starting thread (client mode): 0xa2779ff0
2025-12-03T19:28:12.076 [DEBUG] [Thread-122371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:28:12.091 [DEBUG] [Thread-122371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:28:12.091 [INFO] [Thread-122371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:12.098 [DEBUG] [Thread-122371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] client lang: <none>
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] server lang: <none>
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] kex follows: False
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] Compression: none
2025-12-03T19:28:12.099 [DEBUG] [Thread-122371] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:28:12.156 [DEBUG] [Thread-122371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:28:12.157 [DEBUG] [Thread-122371] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:28:12.157 [DEBUG] [Thread-122371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:28:12.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:28:12.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:28:12.213 [DEBUG] [Thread-122371] [transport.py] [_log()] userauth is OK
2025-12-03T19:28:12.213 [DEBUG] [Thread-122371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:28:12.213 [DEBUG] [Thread-122371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:28:12.213 [DEBUG] [Thread-122371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:28:12.213 [DEBUG] [Thread-122371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:28:12.228 [INFO] [Thread-122371] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:28:12.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:28:12.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:28:13.055 [DEBUG] [Thread-122371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:28:13.055 [DEBUG] [Thread-122371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:28:13.103 [DEBUG] [Thread-122371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:28:13.103 [DEBUG] [Thread-122371] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:28:13.112 [DEBUG] [Thread-122371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:28:13.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:28:13.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:28:13.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:28:13.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:28:13.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:28:13.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:28:13.148 [DEBUG] [Thread-122371] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:28:18.451 [DEBUG] [Thread-122373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:33.493 [DEBUG] [Thread-122374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:28:43.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:28:43.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:28:43.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:28:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 28, 25), 19.59, 26.48, 0.0, 24.79, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:28:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:28:25
2025-12-03T19:28:43.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:28:44.134 [DEBUG] [Thread-122375] [transport.py] [_log()] starting thread (client mode): 0xa27271c0
2025-12-03T19:28:44.134 [DEBUG] [Thread-122375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:28:44.153 [DEBUG] [Thread-122375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:28:44.153 [INFO] [Thread-122375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] client lang: <none>
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] server lang: <none>
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] kex follows: False
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:28:44.157 [DEBUG] [Thread-122375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:28:44.158 [DEBUG] [Thread-122375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:28:44.158 [DEBUG] [Thread-122375] [transport.py] [_log()] Compression: none
2025-12-03T19:28:44.158 [DEBUG] [Thread-122375] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:28:44.174 [DEBUG] [Thread-122375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:28:44.174 [DEBUG] [Thread-122375] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:28:44.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:28:44.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] userauth is OK
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:28:44.175 [DEBUG] [Thread-122375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:28:44.202 [INFO] [Thread-122375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:28:44.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:28:44.952 [DEBUG] [Thread-122375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:28:44.953 [DEBUG] [Thread-122375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:28:44.953 [DEBUG] [Thread-122375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:28:44.994 [DEBUG] [Thread-122375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:28:44.994 [DEBUG] [Thread-122375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:28:44.996 [DEBUG] [Thread-122375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:28:45.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:28:45.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:28:45.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:28:45.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:28:45.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:28:45.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:28:45.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.727825 -999.00  +18.20  20.00     32   +1.40 1 1 1 1 1   880    0 16.28 -31.81 ----- 20.0 20.0 151.0 24.4 19.4 -26.9 19.4 -26.7 19.4 -25.1 19.6 -26.1
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.727825
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:28:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:28:25', tmtdew=19.59, humidity=26.48, cloud=0.0, wind=24.79, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:28:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:28:45.014 [DEBUG] [Thread-122375] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:28:45.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:28:45.101 [DEBUG] [Thread-122378] [transport.py] [_log()] starting thread (client mode): 0xa2726800
2025-12-03T19:28:45.101 [DEBUG] [Thread-122378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:28:45.115 [DEBUG] [Thread-122378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:28:45.116 [INFO] [Thread-122378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] client lang: <none>
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] server lang: <none>
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] kex follows: False
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] Compression: none
2025-12-03T19:28:45.123 [DEBUG] [Thread-122378] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:28:45.183 [DEBUG] [Thread-122378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:28:45.183 [DEBUG] [Thread-122378] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:28:45.183 [DEBUG] [Thread-122378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:28:45.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:28:45.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:28:45.240 [DEBUG] [Thread-122378] [transport.py] [_log()] userauth is OK
2025-12-03T19:28:45.240 [DEBUG] [Thread-122378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:28:45.240 [DEBUG] [Thread-122378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:28:45.240 [DEBUG] [Thread-122378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:28:45.240 [DEBUG] [Thread-122378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:28:45.257 [INFO] [Thread-122378] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:28:45.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:28:45.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:28:46.089 [DEBUG] [Thread-122378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:28:46.089 [DEBUG] [Thread-122378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:28:46.136 [DEBUG] [Thread-122378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:28:46.136 [DEBUG] [Thread-122378] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:28:46.144 [DEBUG] [Thread-122378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:28:46.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:28:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:28:46.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:28:46.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:28:46.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:28:46.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:28:46.175 [DEBUG] [Thread-122378] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:28:48.521 [DEBUG] [Thread-122380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:03.011 [DEBUG] [Thread-122381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:03.565 [DEBUG] [Thread-122382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:13.908 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:13.908 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:16.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:29:16.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:29:16.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:29:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 28, 57), 19.56, 26.55, 0.0, 21.72, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:29:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:28:57
2025-12-03T19:29:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:29:17.158 [DEBUG] [Thread-122383] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T19:29:17.158 [DEBUG] [Thread-122383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:29:17.182 [DEBUG] [Thread-122383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:29:17.182 [INFO] [Thread-122383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:29:17.184 [DEBUG] [Thread-122383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] client lang: <none>
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] server lang: <none>
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] kex follows: False
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] Compression: none
2025-12-03T19:29:17.185 [DEBUG] [Thread-122383] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:29:17.203 [DEBUG] [Thread-122383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:29:17.203 [DEBUG] [Thread-122383] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:29:17.204 [DEBUG] [Thread-122383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:29:17.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:29:17.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:29:17.205 [DEBUG] [Thread-122383] [transport.py] [_log()] userauth is OK
2025-12-03T19:29:17.206 [DEBUG] [Thread-122383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:29:17.206 [DEBUG] [Thread-122383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:29:17.206 [DEBUG] [Thread-122383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:29:17.206 [DEBUG] [Thread-122383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:29:17.241 [INFO] [Thread-122383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:29:17.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:29:17.904 [DEBUG] [Thread-122383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:29:17.904 [DEBUG] [Thread-122383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:29:17.904 [DEBUG] [Thread-122383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:29:17.945 [DEBUG] [Thread-122383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:29:17.946 [DEBUG] [Thread-122383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:29:17.948 [DEBUG] [Thread-122383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:29:17.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:29:17.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:29:17.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:29:17.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:29:17.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:29:17.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:29:17.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:29:17.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:29:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:29:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.728172 -999.00  +18.20  16.55     32   +1.40 1 1 1 1 1   879    0 16.59 -33.50 ----- 16.6 16.6 166.0 20.9 19.4 -26.8 19.4 -26.3 19.3 -25.0 19.6 -26.0
2025-12-03T19:29:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:29:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:29:17.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.728172
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:29:17.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:28:57', tmtdew=19.56, humidity=26.55, cloud=0.0, wind=21.72, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:28:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:29:17.972 [DEBUG] [Thread-122383] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:29:18.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:29:18.068 [DEBUG] [Thread-122386] [transport.py] [_log()] starting thread (client mode): 0xa2760c70
2025-12-03T19:29:18.068 [DEBUG] [Thread-122386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:29:18.083 [DEBUG] [Thread-122386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:29:18.083 [INFO] [Thread-122386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:29:18.090 [DEBUG] [Thread-122386] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] client lang: <none>
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] server lang: <none>
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] kex follows: False
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:29:18.091 [DEBUG] [Thread-122386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:29:18.092 [DEBUG] [Thread-122386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:29:18.092 [DEBUG] [Thread-122386] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:29:18.092 [DEBUG] [Thread-122386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:29:18.092 [DEBUG] [Thread-122386] [transport.py] [_log()] Compression: none
2025-12-03T19:29:18.092 [DEBUG] [Thread-122386] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:29:18.147 [DEBUG] [Thread-122386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:29:18.148 [DEBUG] [Thread-122386] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:29:18.148 [DEBUG] [Thread-122386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:29:18.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:29:18.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:29:18.204 [DEBUG] [Thread-122386] [transport.py] [_log()] userauth is OK
2025-12-03T19:29:18.204 [DEBUG] [Thread-122386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:29:18.205 [DEBUG] [Thread-122386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:29:18.205 [DEBUG] [Thread-122386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:29:18.205 [DEBUG] [Thread-122386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:29:18.223 [INFO] [Thread-122386] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:29:18.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:29:18.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:29:18.593 [DEBUG] [Thread-122388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:19.055 [DEBUG] [Thread-122386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:29:19.055 [DEBUG] [Thread-122386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:29:19.103 [DEBUG] [Thread-122386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:29:19.103 [DEBUG] [Thread-122386] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:29:19.112 [DEBUG] [Thread-122386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:29:19.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:29:19.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:29:19.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:29:19.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:29:19.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:29:19.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:29:19.152 [DEBUG] [Thread-122386] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:29:33.639 [DEBUG] [Thread-122389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:48.672 [DEBUG] [Thread-122390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:29:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:29:49.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:29:49.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:29:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 29, 30), 19.54, 26.6, 0.0, 22.92, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:29:49.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:29:30
2025-12-03T19:29:49.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:29:50.129 [DEBUG] [Thread-122391] [transport.py] [_log()] starting thread (client mode): 0xa51d2290
2025-12-03T19:29:50.129 [DEBUG] [Thread-122391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:29:50.150 [DEBUG] [Thread-122391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:29:50.150 [INFO] [Thread-122391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:50.153 [DEBUG] [Thread-122391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] client lang: <none>
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] server lang: <none>
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] kex follows: False
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] Compression: none
2025-12-03T19:29:50.154 [DEBUG] [Thread-122391] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:29:50.172 [DEBUG] [Thread-122391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:29:50.173 [DEBUG] [Thread-122391] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:29:50.173 [DEBUG] [Thread-122391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:29:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:29:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:29:50.175 [DEBUG] [Thread-122391] [transport.py] [_log()] userauth is OK
2025-12-03T19:29:50.175 [DEBUG] [Thread-122391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:29:50.175 [DEBUG] [Thread-122391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:29:50.176 [DEBUG] [Thread-122391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:29:50.176 [DEBUG] [Thread-122391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:29:50.199 [INFO] [Thread-122391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:29:50.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:29:50.930 [DEBUG] [Thread-122391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:29:50.930 [DEBUG] [Thread-122391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:29:50.931 [DEBUG] [Thread-122391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:29:50.972 [DEBUG] [Thread-122391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:29:50.972 [DEBUG] [Thread-122391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:29:50.975 [DEBUG] [Thread-122391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:29:50.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:29:50.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:29:50.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:29:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:29:50.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:29:50.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:29:50.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:29:50.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.728519 -999.00  +18.20  18.37     32   +1.50 1 1 1 1 1   878    0 16.12 -33.02 ----- 18.4 18.4 160.2 23.6 19.3 -26.8 19.3 -26.2 19.2 -24.9 19.5 -25.8
2025-12-03T19:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:29:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.728519
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:29:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:29:30', tmtdew=19.54, humidity=26.6, cloud=0.0, wind=22.92, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:29:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:29:50.994 [DEBUG] [Thread-122391] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:29:51.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:29:51.091 [DEBUG] [Thread-122394] [transport.py] [_log()] starting thread (client mode): 0xa51d34c0
2025-12-03T19:29:51.091 [DEBUG] [Thread-122394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:29:51.106 [DEBUG] [Thread-122394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:29:51.106 [INFO] [Thread-122394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:29:51.113 [DEBUG] [Thread-122394] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] client lang: <none>
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] server lang: <none>
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] kex follows: False
2025-12-03T19:29:51.114 [DEBUG] [Thread-122394] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] Compression: none
2025-12-03T19:29:51.115 [DEBUG] [Thread-122394] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:29:51.171 [DEBUG] [Thread-122394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:29:51.172 [DEBUG] [Thread-122394] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:29:51.172 [DEBUG] [Thread-122394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:29:51.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:29:51.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:29:51.228 [DEBUG] [Thread-122394] [transport.py] [_log()] userauth is OK
2025-12-03T19:29:51.228 [DEBUG] [Thread-122394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:29:51.228 [DEBUG] [Thread-122394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:29:51.228 [DEBUG] [Thread-122394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:29:51.228 [DEBUG] [Thread-122394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:29:51.247 [INFO] [Thread-122394] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:29:51.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:29:51.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:29:52.117 [DEBUG] [Thread-122394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:29:52.117 [DEBUG] [Thread-122394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:29:52.165 [DEBUG] [Thread-122394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:29:52.165 [DEBUG] [Thread-122394] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:29:52.174 [DEBUG] [Thread-122394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:29:52.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:29:52.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:29:52.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:29:52.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:29:52.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:29:52.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:29:52.207 [DEBUG] [Thread-122394] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:30:03.071 [DEBUG] [Thread-122396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:03.701 [DEBUG] [Thread-122397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:18.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:18.148 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:18.747 [DEBUG] [Thread-122398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:22.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:30:22.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:30:22.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:30:22.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 30, 2), 19.44, 26.78, 0.0, 22.78, 18.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:30:22.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:30:02
2025-12-03T19:30:23.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:30:23.173 [DEBUG] [Thread-122399] [transport.py] [_log()] starting thread (client mode): 0xa51d2fb0
2025-12-03T19:30:23.173 [DEBUG] [Thread-122399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:30:23.194 [DEBUG] [Thread-122399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:30:23.194 [INFO] [Thread-122399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:30:23.197 [DEBUG] [Thread-122399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:30:23.197 [DEBUG] [Thread-122399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:30:23.197 [DEBUG] [Thread-122399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] client lang: <none>
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] server lang: <none>
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] kex follows: False
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:30:23.198 [DEBUG] [Thread-122399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:30:23.199 [DEBUG] [Thread-122399] [transport.py] [_log()] Compression: none
2025-12-03T19:30:23.199 [DEBUG] [Thread-122399] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:30:23.214 [DEBUG] [Thread-122399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:30:23.215 [DEBUG] [Thread-122399] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:30:23.215 [DEBUG] [Thread-122399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:30:23.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:30:23.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:30:23.217 [DEBUG] [Thread-122399] [transport.py] [_log()] userauth is OK
2025-12-03T19:30:23.217 [DEBUG] [Thread-122399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:30:23.218 [DEBUG] [Thread-122399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:30:23.218 [DEBUG] [Thread-122399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:30:23.218 [DEBUG] [Thread-122399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:30:23.241 [INFO] [Thread-122399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:30:23.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:30:23.882 [DEBUG] [Thread-122399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:30:23.882 [DEBUG] [Thread-122399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:30:23.882 [DEBUG] [Thread-122399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:30:23.923 [DEBUG] [Thread-122399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:30:23.923 [DEBUG] [Thread-122399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:30:23.926 [DEBUG] [Thread-122399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:30:23.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:30:23.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:30:23.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:30:23.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:30:23.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:30:23.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:30:23.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:30:23.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:30:23.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:30:23.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.728866 -999.00  +18.20  19.89     32   +1.60 1 1 1 1 1   877    0 16.13 -32.32 ----- 19.9 19.9 158.8 26.9 19.3 -26.7 19.3 -26.4 19.2 -24.9 19.4 -25.7
2025-12-03T19:30:23.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:30:23.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:30:23.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.728866
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:30:23.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:30:02', tmtdew=19.44, humidity=26.78, cloud=0.0, wind=22.78, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:29:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:30:23.950 [DEBUG] [Thread-122399] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:30:24.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:30:24.045 [DEBUG] [Thread-122402] [transport.py] [_log()] starting thread (client mode): 0xa2726e90
2025-12-03T19:30:24.045 [DEBUG] [Thread-122402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:30:24.059 [DEBUG] [Thread-122402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:30:24.059 [INFO] [Thread-122402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:24.067 [DEBUG] [Thread-122402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] client lang: <none>
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] server lang: <none>
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] kex follows: False
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:30:24.068 [DEBUG] [Thread-122402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:30:24.069 [DEBUG] [Thread-122402] [transport.py] [_log()] Compression: none
2025-12-03T19:30:24.069 [DEBUG] [Thread-122402] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:30:24.123 [DEBUG] [Thread-122402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:30:24.124 [DEBUG] [Thread-122402] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:30:24.124 [DEBUG] [Thread-122402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:30:24.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:30:24.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:30:24.179 [DEBUG] [Thread-122402] [transport.py] [_log()] userauth is OK
2025-12-03T19:30:24.179 [DEBUG] [Thread-122402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:30:24.180 [DEBUG] [Thread-122402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:30:24.180 [DEBUG] [Thread-122402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:30:24.180 [DEBUG] [Thread-122402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:30:24.198 [INFO] [Thread-122402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:30:24.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:30:24.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:30:25.021 [DEBUG] [Thread-122402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:30:25.021 [DEBUG] [Thread-122402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:30:25.069 [DEBUG] [Thread-122402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:30:25.069 [DEBUG] [Thread-122402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:30:25.077 [DEBUG] [Thread-122402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:30:25.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:30:25.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:30:25.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:30:25.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:30:25.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:30:25.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:30:25.112 [DEBUG] [Thread-122402] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:30:33.775 [DEBUG] [Thread-122404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:48.827 [DEBUG] [Thread-122405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:30:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:30:55.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:30:55.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:30:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 30, 34), 19.53, 26.66, 0.0, 30.2, 18.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:30:55.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:30:34
2025-12-03T19:30:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:30:56.079 [DEBUG] [Thread-122406] [transport.py] [_log()] starting thread (client mode): 0xa2727700
2025-12-03T19:30:56.079 [DEBUG] [Thread-122406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:30:56.097 [DEBUG] [Thread-122406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:30:56.097 [INFO] [Thread-122406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] client lang: <none>
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] server lang: <none>
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] kex follows: False
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:30:56.100 [DEBUG] [Thread-122406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:30:56.101 [DEBUG] [Thread-122406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:30:56.101 [DEBUG] [Thread-122406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:30:56.101 [DEBUG] [Thread-122406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:30:56.101 [DEBUG] [Thread-122406] [transport.py] [_log()] Compression: none
2025-12-03T19:30:56.101 [DEBUG] [Thread-122406] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:30:56.116 [DEBUG] [Thread-122406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:30:56.117 [DEBUG] [Thread-122406] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:30:56.117 [DEBUG] [Thread-122406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:30:56.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:30:56.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:30:56.119 [DEBUG] [Thread-122406] [transport.py] [_log()] userauth is OK
2025-12-03T19:30:56.119 [DEBUG] [Thread-122406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:30:56.119 [DEBUG] [Thread-122406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:30:56.119 [DEBUG] [Thread-122406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:30:56.119 [DEBUG] [Thread-122406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:30:56.140 [INFO] [Thread-122406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:30:56.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:30:56.783 [DEBUG] [Thread-122406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:30:56.783 [DEBUG] [Thread-122406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:30:56.784 [DEBUG] [Thread-122406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:30:56.824 [DEBUG] [Thread-122406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:30:56.824 [DEBUG] [Thread-122406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:30:56.826 [DEBUG] [Thread-122406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:30:56.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:30:56.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:30:56.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:30:56.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:30:56.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:30:56.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:30:56.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:30:56.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:30:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:30:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.729213 -999.00  +18.20  16.79     33   +1.70 1 1 1 1 1   876    0 16.15 -35.59 ----- 16.8 16.8 172.4 22.6 19.2 -26.5 19.2 -26.1 19.1 -24.8 19.4 -25.6
2025-12-03T19:30:56.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:30:56.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:30:56.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.729213
2025-12-03T19:30:56.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:30:56.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:30:56.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:30:56.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:30:56.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:30:56.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:30:34', tmtdew=19.53, humidity=26.66, cloud=0.0, wind=30.2, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:30:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:30:56.850 [DEBUG] [Thread-122406] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:30:56.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:30:56.949 [DEBUG] [Thread-122409] [transport.py] [_log()] starting thread (client mode): 0xa27510f0
2025-12-03T19:30:56.949 [DEBUG] [Thread-122409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:30:56.963 [DEBUG] [Thread-122409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:30:56.963 [INFO] [Thread-122409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] client lang: <none>
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] server lang: <none>
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] kex follows: False
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:30:56.971 [DEBUG] [Thread-122409] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:30:56.972 [DEBUG] [Thread-122409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:30:56.972 [DEBUG] [Thread-122409] [transport.py] [_log()] Compression: none
2025-12-03T19:30:56.972 [DEBUG] [Thread-122409] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:30:57.030 [DEBUG] [Thread-122409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:30:57.031 [DEBUG] [Thread-122409] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:30:57.031 [DEBUG] [Thread-122409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:30:57.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:30:57.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:30:57.087 [DEBUG] [Thread-122409] [transport.py] [_log()] userauth is OK
2025-12-03T19:30:57.087 [DEBUG] [Thread-122409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:30:57.087 [DEBUG] [Thread-122409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:30:57.087 [DEBUG] [Thread-122409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:30:57.087 [DEBUG] [Thread-122409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:30:57.106 [INFO] [Thread-122409] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:30:57.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:30:57.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:30:57.932 [DEBUG] [Thread-122409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:30:57.932 [DEBUG] [Thread-122409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:30:57.980 [DEBUG] [Thread-122409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:30:57.980 [DEBUG] [Thread-122409] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:30:57.989 [DEBUG] [Thread-122409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:30:57.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:30:57.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:30:58.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:30:58.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:30:58.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:30:58.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:30:58.024 [DEBUG] [Thread-122409] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:31:03.136 [DEBUG] [Thread-122411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:03.859 [DEBUG] [Thread-122412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:18.903 [DEBUG] [Thread-122413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:22.155 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:22.156 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:28.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:31:28.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:31:28.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:31:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 31, 6), 19.17, 27.41, 0.0, 26.34, 18.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:31:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:31:06
2025-12-03T19:31:28.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:31:29.001 [DEBUG] [Thread-122414] [transport.py] [_log()] starting thread (client mode): 0xa51d1300
2025-12-03T19:31:29.002 [DEBUG] [Thread-122414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:31:29.023 [DEBUG] [Thread-122414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:31:29.023 [INFO] [Thread-122414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:31:29.026 [DEBUG] [Thread-122414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:31:29.026 [DEBUG] [Thread-122414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] client lang: <none>
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] server lang: <none>
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] kex follows: False
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:31:29.027 [DEBUG] [Thread-122414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:31:29.028 [DEBUG] [Thread-122414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:31:29.028 [DEBUG] [Thread-122414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:31:29.028 [DEBUG] [Thread-122414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:31:29.028 [DEBUG] [Thread-122414] [transport.py] [_log()] Compression: none
2025-12-03T19:31:29.028 [DEBUG] [Thread-122414] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:31:29.047 [DEBUG] [Thread-122414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:31:29.047 [DEBUG] [Thread-122414] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:31:29.048 [DEBUG] [Thread-122414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:31:29.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:31:29.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:31:29.050 [DEBUG] [Thread-122414] [transport.py] [_log()] userauth is OK
2025-12-03T19:31:29.050 [DEBUG] [Thread-122414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:31:29.050 [DEBUG] [Thread-122414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:31:29.050 [DEBUG] [Thread-122414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:31:29.050 [DEBUG] [Thread-122414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:31:29.088 [INFO] [Thread-122414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:31:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:31:29.763 [DEBUG] [Thread-122414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:31:29.763 [DEBUG] [Thread-122414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:31:29.763 [DEBUG] [Thread-122414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:31:29.804 [DEBUG] [Thread-122414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:31:29.804 [DEBUG] [Thread-122414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:31:29.806 [DEBUG] [Thread-122414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:31:29.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:31:29.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:31:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:31:29.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:31:29.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:31:29.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:31:29.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:31:29.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:31:29.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.729561 -999.00  +18.10  18.20     33   +1.80 1 1 1 1 1   875    0 15.95 -37.46 ----- 18.2 18.2 169.8 27.4 19.2 -26.6 19.2 -26.2 19.1 -24.9 19.4 -25.7
2025-12-03T19:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:31:29.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.729561
2025-12-03T19:31:29.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:31:29.831 [DEBUG] [Thread-122414] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:31:29.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:31:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:31:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:31:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:31:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:31:06', tmtdew=19.17, humidity=27.41, cloud=0.0, wind=26.34, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:30:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:31:29.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:31:33.930 [DEBUG] [Thread-122417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:31:48.969 [DEBUG] [Thread-122418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:03.203 [DEBUG] [Thread-122419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:03.996 [DEBUG] [Thread-122420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:19.024 [DEBUG] [Thread-122421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:26.755 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:26.756 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:34.051 [DEBUG] [Thread-122422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:32:49.076 [DEBUG] [Thread-122423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:03.278 [DEBUG] [Thread-122424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:04.105 [DEBUG] [Thread-122425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:19.132 [DEBUG] [Thread-122426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:34.161 [DEBUG] [Thread-122427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:35.342 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:35.343 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:33:44.470 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T19:33:49.194 [DEBUG] [Thread-122428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:03.331 [DEBUG] [Thread-122429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:04.223 [DEBUG] [Thread-122430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:34:14.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:34:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:34:15.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 33, 46), 19.05, 27.43, 0.0, 24.49, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:34:15.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:33:46
2025-12-03T19:34:15.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:34:15.468 [DEBUG] [Thread-122431] [transport.py] [_log()] starting thread (client mode): 0xa27533a0
2025-12-03T19:34:15.468 [DEBUG] [Thread-122431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:34:15.478 [DEBUG] [Thread-122431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:34:15.478 [INFO] [Thread-122431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] client lang: <none>
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] server lang: <none>
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] kex follows: False
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] Compression: none
2025-12-03T19:34:15.480 [DEBUG] [Thread-122431] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:34:15.487 [DEBUG] [Thread-122431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:34:15.487 [DEBUG] [Thread-122431] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:34:15.487 [DEBUG] [Thread-122431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:34:15.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:34:15.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:34:15.488 [DEBUG] [Thread-122431] [transport.py] [_log()] userauth is OK
2025-12-03T19:34:15.488 [DEBUG] [Thread-122431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:34:15.488 [DEBUG] [Thread-122431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:34:15.488 [DEBUG] [Thread-122431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:34:15.488 [DEBUG] [Thread-122431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:34:15.497 [INFO] [Thread-122431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:34:15.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:34:16.279 [DEBUG] [Thread-122431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:34:16.280 [DEBUG] [Thread-122431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:34:16.280 [DEBUG] [Thread-122431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:34:16.321 [DEBUG] [Thread-122431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:34:16.321 [DEBUG] [Thread-122431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:34:16.324 [DEBUG] [Thread-122431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:34:16.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:34:16.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:34:16.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:34:16.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:34:16.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:34:16.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:34:16.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.731644 -999.00  +18.10  22.08     33   +1.70 1 1 1 1 1   866    0 15.40 -50.63 ----- 22.1 22.1 155.3 29.7 19.0 -26.5 18.9 -26.0 18.8 -24.6 19.1 -25.2
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:34:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.731644
2025-12-03T19:34:16.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:34:16.347 [DEBUG] [Thread-122431] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:34:16.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:34:16.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:34:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:34:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:34:16.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:33:46', tmtdew=19.05, humidity=27.43, cloud=0.0, wind=24.49, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:33:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:34:16.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:34:16.438 [DEBUG] [Thread-122434] [transport.py] [_log()] starting thread (client mode): 0xa2726710
2025-12-03T19:34:16.438 [DEBUG] [Thread-122434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:34:16.452 [DEBUG] [Thread-122434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:34:16.452 [INFO] [Thread-122434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:34:16.459 [DEBUG] [Thread-122434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] client lang: <none>
2025-12-03T19:34:16.460 [DEBUG] [Thread-122434] [transport.py] [_log()] server lang: <none>
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] kex follows: False
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] Compression: none
2025-12-03T19:34:16.461 [DEBUG] [Thread-122434] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:34:16.517 [DEBUG] [Thread-122434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:34:16.517 [DEBUG] [Thread-122434] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:34:16.518 [DEBUG] [Thread-122434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:34:16.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:34:16.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:34:16.573 [DEBUG] [Thread-122434] [transport.py] [_log()] userauth is OK
2025-12-03T19:34:16.573 [DEBUG] [Thread-122434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:34:16.573 [DEBUG] [Thread-122434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:34:16.573 [DEBUG] [Thread-122434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:34:16.573 [DEBUG] [Thread-122434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:34:16.595 [INFO] [Thread-122434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:34:16.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:34:16.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:34:17.443 [DEBUG] [Thread-122434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:34:17.443 [DEBUG] [Thread-122434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:34:17.491 [DEBUG] [Thread-122434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:34:17.491 [DEBUG] [Thread-122434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:34:17.500 [DEBUG] [Thread-122434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:34:17.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:34:17.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:34:17.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:34:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:34:17.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:34:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:34:17.539 [DEBUG] [Thread-122434] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:34:19.248 [DEBUG] [Thread-122436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:34.287 [DEBUG] [Thread-122437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:39.322 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:39.323 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:47.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:34:47.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:34:47.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:34:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 34, 18), 19.04, 27.45, 0.0, 25.41, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:34:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:34:18
2025-12-03T19:34:48.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:34:48.531 [DEBUG] [Thread-122438] [transport.py] [_log()] starting thread (client mode): 0xa27271c0
2025-12-03T19:34:48.531 [DEBUG] [Thread-122438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:34:48.551 [DEBUG] [Thread-122438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:34:48.551 [INFO] [Thread-122438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] client lang: <none>
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] server lang: <none>
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] kex follows: False
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:34:48.553 [DEBUG] [Thread-122438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:34:48.554 [DEBUG] [Thread-122438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:34:48.554 [DEBUG] [Thread-122438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:34:48.554 [DEBUG] [Thread-122438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:34:48.554 [DEBUG] [Thread-122438] [transport.py] [_log()] Compression: none
2025-12-03T19:34:48.554 [DEBUG] [Thread-122438] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:34:48.563 [DEBUG] [Thread-122438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:34:48.564 [DEBUG] [Thread-122438] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:34:48.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:34:48.565 [DEBUG] [Thread-122438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:34:48.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:34:48.567 [DEBUG] [Thread-122438] [transport.py] [_log()] userauth is OK
2025-12-03T19:34:48.567 [DEBUG] [Thread-122438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:34:48.567 [DEBUG] [Thread-122438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:34:48.568 [DEBUG] [Thread-122438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:34:48.568 [DEBUG] [Thread-122438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:34:48.585 [INFO] [Thread-122438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:34:48.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:34:49.233 [DEBUG] [Thread-122438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:34:49.233 [DEBUG] [Thread-122438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:34:49.233 [DEBUG] [Thread-122438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:34:49.274 [DEBUG] [Thread-122438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:34:49.274 [DEBUG] [Thread-122438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:34:49.276 [DEBUG] [Thread-122438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:34:49.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:34:49.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:34:49.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:34:49.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:34:49.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:34:49.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:34:49.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:34:49.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:34:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:34:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.731991 -999.00  +18.00  19.07     33   +1.70 1 1 1 1 1   864    0 15.44 -59.07 ----- 19.1 19.1 156.3 28.3 19.0 -26.6 18.9 -26.0 18.8 -24.4 19.1 -25.4
2025-12-03T19:34:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:34:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:34:49.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.731991
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:34:49.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:34:18', tmtdew=19.04, humidity=27.45, cloud=0.0, wind=25.41, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:34:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:34:49.300 [DEBUG] [Thread-122438] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:34:49.314 [DEBUG] [Thread-122441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:34:49.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:34:49.402 [DEBUG] [Thread-122442] [transport.py] [_log()] starting thread (client mode): 0xa2760040
2025-12-03T19:34:49.402 [DEBUG] [Thread-122442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:34:49.417 [DEBUG] [Thread-122442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:34:49.417 [INFO] [Thread-122442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:49.425 [DEBUG] [Thread-122442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] client lang: <none>
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] server lang: <none>
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] kex follows: False
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] Compression: none
2025-12-03T19:34:49.426 [DEBUG] [Thread-122442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:34:49.484 [DEBUG] [Thread-122442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:34:49.484 [DEBUG] [Thread-122442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:34:49.484 [DEBUG] [Thread-122442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:34:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:34:49.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:34:49.541 [DEBUG] [Thread-122442] [transport.py] [_log()] userauth is OK
2025-12-03T19:34:49.541 [DEBUG] [Thread-122442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:34:49.541 [DEBUG] [Thread-122442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:34:49.542 [DEBUG] [Thread-122442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:34:49.542 [DEBUG] [Thread-122442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:34:49.560 [INFO] [Thread-122442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:34:49.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:34:49.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:34:50.426 [DEBUG] [Thread-122442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:34:50.426 [DEBUG] [Thread-122442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:34:50.473 [DEBUG] [Thread-122442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:34:50.474 [DEBUG] [Thread-122442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:34:50.482 [DEBUG] [Thread-122442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:34:50.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:34:50.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:34:50.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:34:50.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:34:50.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:34:50.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:34:50.514 [DEBUG] [Thread-122442] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:35:03.403 [DEBUG] [Thread-122444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:04.349 [DEBUG] [Thread-122445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:19.378 [DEBUG] [Thread-122446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:20.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:35:20.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:35:20.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:35:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 34, 50), 18.98, 27.56, 0.0, 26.01, 18.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:35:21.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:34:50
2025-12-03T19:35:21.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:35:21.459 [DEBUG] [Thread-122447] [transport.py] [_log()] starting thread (client mode): 0xa27514b0
2025-12-03T19:35:21.459 [DEBUG] [Thread-122447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:35:21.481 [DEBUG] [Thread-122447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:35:21.481 [INFO] [Thread-122447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:35:21.484 [DEBUG] [Thread-122447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:35:21.484 [DEBUG] [Thread-122447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:35:21.484 [DEBUG] [Thread-122447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:35:21.484 [DEBUG] [Thread-122447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] client lang: <none>
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] server lang: <none>
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] kex follows: False
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:35:21.485 [DEBUG] [Thread-122447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:35:21.486 [DEBUG] [Thread-122447] [transport.py] [_log()] Compression: none
2025-12-03T19:35:21.486 [DEBUG] [Thread-122447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:35:21.503 [DEBUG] [Thread-122447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:35:21.503 [DEBUG] [Thread-122447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:35:21.504 [DEBUG] [Thread-122447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:35:21.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:35:21.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:35:21.506 [DEBUG] [Thread-122447] [transport.py] [_log()] userauth is OK
2025-12-03T19:35:21.506 [DEBUG] [Thread-122447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:35:21.506 [DEBUG] [Thread-122447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:35:21.506 [DEBUG] [Thread-122447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:35:21.506 [DEBUG] [Thread-122447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:35:21.541 [INFO] [Thread-122447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:35:21.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:35:22.206 [DEBUG] [Thread-122447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:35:22.206 [DEBUG] [Thread-122447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:35:22.206 [DEBUG] [Thread-122447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:35:22.247 [DEBUG] [Thread-122447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:35:22.247 [DEBUG] [Thread-122447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:35:22.249 [DEBUG] [Thread-122447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:35:22.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:35:22.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:35:22.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:35:22.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:35:22.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:35:22.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:35:22.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:35:22.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.732338 -999.00  +18.00  17.33     33   +1.70 1 1 1 1 1   862    0 15.12 -61.44 ----- 17.3 17.3 143.8 27.0 18.9 -26.5 18.9 -25.9 18.7 -24.4 19.0 -25.4
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.732338
2025-12-03T19:35:22.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:35:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:35:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:35:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:35:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:35:22.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:34:50', tmtdew=18.98, humidity=27.56, cloud=0.0, wind=26.01, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:34:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:35:22.272 [DEBUG] [Thread-122447] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:35:22.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:35:34.404 [DEBUG] [Thread-122450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:49.436 [DEBUG] [Thread-122451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:51.065 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:35:51.066 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:36:03.480 [DEBUG] [Thread-122452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:36:04.467 [DEBUG] [Thread-122453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:36:19.496 [DEBUG] [Thread-122454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:36:34.525 [DEBUG] [Thread-122455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:36:49.552 [DEBUG] [Thread-122456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:01.729 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:01.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:03.537 [DEBUG] [Thread-122457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:04.579 [DEBUG] [Thread-122458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:19.607 [DEBUG] [Thread-122459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:33.846 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T19:37:34.637 [DEBUG] [Thread-122460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:37:49.663 [DEBUG] [Thread-122461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:03.591 [DEBUG] [Thread-122462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:03.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:38:03.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:38:03.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:38:04.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 37, 30), 18.71, 28.41, 0.0, 22.88, 18.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:38:04.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:37:30
2025-12-03T19:38:04.694 [DEBUG] [Thread-122463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:04.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:38:04.913 [DEBUG] [Thread-122464] [transport.py] [_log()] starting thread (client mode): 0xa51bae30
2025-12-03T19:38:04.913 [DEBUG] [Thread-122464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:38:04.926 [DEBUG] [Thread-122464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:38:04.926 [INFO] [Thread-122464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] client lang: <none>
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] server lang: <none>
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] kex follows: False
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] Compression: none
2025-12-03T19:38:04.930 [DEBUG] [Thread-122464] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:38:04.938 [DEBUG] [Thread-122464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:38:04.938 [DEBUG] [Thread-122464] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:38:04.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:38:04.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] userauth is OK
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:38:04.939 [DEBUG] [Thread-122464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:38:04.969 [INFO] [Thread-122464] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:38:04.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:38:05.624 [DEBUG] [Thread-122464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:38:05.624 [DEBUG] [Thread-122464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:38:05.624 [DEBUG] [Thread-122464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:38:05.665 [DEBUG] [Thread-122464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:38:05.665 [DEBUG] [Thread-122464] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:38:05.667 [DEBUG] [Thread-122464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:38:05.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:38:05.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:38:05.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:38:05.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:38:05.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:38:05.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:38:05.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.734422 -999.00  +17.90  18.58     34   +1.90 1 1 1 1 1   844    0 14.74 -73.01 ----- 18.6 18.6 154.8 24.5 18.8 -26.1 18.7 -25.6 18.5 -24.2 18.8 -25.1
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.734422
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:38:05.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:37:30', tmtdew=18.71, humidity=28.41, cloud=0.0, wind=22.88, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:37:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:38:05.686 [DEBUG] [Thread-122464] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:38:05.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:38:05.771 [DEBUG] [Thread-122467] [transport.py] [_log()] starting thread (client mode): 0xa2750ca0
2025-12-03T19:38:05.771 [DEBUG] [Thread-122467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:38:05.786 [DEBUG] [Thread-122467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:38:05.786 [INFO] [Thread-122467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] client lang: <none>
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] server lang: <none>
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] kex follows: False
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:38:05.795 [DEBUG] [Thread-122467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:38:05.796 [DEBUG] [Thread-122467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:38:05.796 [DEBUG] [Thread-122467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:38:05.796 [DEBUG] [Thread-122467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:38:05.796 [DEBUG] [Thread-122467] [transport.py] [_log()] Compression: none
2025-12-03T19:38:05.796 [DEBUG] [Thread-122467] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:38:05.851 [DEBUG] [Thread-122467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:38:05.851 [DEBUG] [Thread-122467] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:38:05.851 [DEBUG] [Thread-122467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:38:05.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:38:05.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:38:05.908 [DEBUG] [Thread-122467] [transport.py] [_log()] userauth is OK
2025-12-03T19:38:05.908 [DEBUG] [Thread-122467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:38:05.908 [DEBUG] [Thread-122467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:38:05.908 [DEBUG] [Thread-122467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:38:05.908 [DEBUG] [Thread-122467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:38:05.922 [INFO] [Thread-122467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:38:05.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:38:05.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:38:06.835 [DEBUG] [Thread-122467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:38:06.835 [DEBUG] [Thread-122467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:38:06.883 [DEBUG] [Thread-122467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:38:06.883 [DEBUG] [Thread-122467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:38:06.891 [DEBUG] [Thread-122467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:38:06.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:38:06.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:38:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:38:06.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:38:06.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:38:06.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:38:06.923 [DEBUG] [Thread-122467] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:38:09.214 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:09.215 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:19.721 [DEBUG] [Thread-122469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:34.763 [DEBUG] [Thread-122470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:38:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:38:36.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:38:36.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:38:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 38, 34), 18.6, 28.43, 0.0, 25.04, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:38:37.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:38:34
2025-12-03T19:38:37.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:38:37.895 [DEBUG] [Thread-122471] [transport.py] [_log()] starting thread (client mode): 0xa271d870
2025-12-03T19:38:37.895 [DEBUG] [Thread-122471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:38:37.915 [DEBUG] [Thread-122471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:38:37.915 [INFO] [Thread-122471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] client lang: <none>
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] server lang: <none>
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] kex follows: False
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:38:37.918 [DEBUG] [Thread-122471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:38:37.919 [DEBUG] [Thread-122471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:38:37.919 [DEBUG] [Thread-122471] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:38:37.919 [DEBUG] [Thread-122471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:38:37.919 [DEBUG] [Thread-122471] [transport.py] [_log()] Compression: none
2025-12-03T19:38:37.919 [DEBUG] [Thread-122471] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:38:37.937 [DEBUG] [Thread-122471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:38:37.937 [DEBUG] [Thread-122471] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:38:37.938 [DEBUG] [Thread-122471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:38:37.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:38:37.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:38:37.980 [DEBUG] [Thread-122471] [transport.py] [_log()] userauth is OK
2025-12-03T19:38:37.980 [DEBUG] [Thread-122471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:38:37.981 [DEBUG] [Thread-122471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:38:37.981 [DEBUG] [Thread-122471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:38:37.981 [DEBUG] [Thread-122471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:38:38.001 [INFO] [Thread-122471] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:38:38.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:38:38.640 [DEBUG] [Thread-122471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:38:38.641 [DEBUG] [Thread-122471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:38:38.641 [DEBUG] [Thread-122471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:38:38.682 [DEBUG] [Thread-122471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:38:38.682 [DEBUG] [Thread-122471] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:38:38.684 [DEBUG] [Thread-122471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:38:38.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:38:38.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:38:38.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:38:38.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:38:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:38:38.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:38:38.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:38:38.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:38:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:38:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.734769 -999.00  +17.90  18.91     34   +2.00 1 1 1 1 1   840    0 14.31 -82.38 ----- 18.9 18.9 155.0 27.9 18.7 -26.2 18.6 -25.7 18.5 -24.2 18.8 -25.0
2025-12-03T19:38:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:38:38.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:38:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.734769
2025-12-03T19:38:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:38:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:38:38.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:38:38.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:38:38.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:38:38.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:38:34', tmtdew=18.6, humidity=28.43, cloud=0.0, wind=25.04, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:38:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:38:38.709 [DEBUG] [Thread-122471] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:38:38.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:38:38.807 [DEBUG] [Thread-122474] [transport.py] [_log()] starting thread (client mode): 0xa517cc70
2025-12-03T19:38:38.807 [DEBUG] [Thread-122474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:38:38.821 [DEBUG] [Thread-122474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:38:38.821 [INFO] [Thread-122474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:38:38.828 [DEBUG] [Thread-122474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] client lang: <none>
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] server lang: <none>
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] kex follows: False
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] Compression: none
2025-12-03T19:38:38.829 [DEBUG] [Thread-122474] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:38:38.888 [DEBUG] [Thread-122474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:38:38.888 [DEBUG] [Thread-122474] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:38:38.889 [DEBUG] [Thread-122474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:38:38.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:38:38.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:38:38.945 [DEBUG] [Thread-122474] [transport.py] [_log()] userauth is OK
2025-12-03T19:38:38.945 [DEBUG] [Thread-122474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:38:38.945 [DEBUG] [Thread-122474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:38:38.945 [DEBUG] [Thread-122474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:38:38.945 [DEBUG] [Thread-122474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:38:38.963 [INFO] [Thread-122474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:38:38.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:38:38.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:38:39.783 [DEBUG] [Thread-122474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:38:39.783 [DEBUG] [Thread-122474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:38:39.832 [DEBUG] [Thread-122474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:38:39.832 [DEBUG] [Thread-122474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:38:39.840 [DEBUG] [Thread-122474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:38:39.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:38:39.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:38:39.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:38:39.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:38:39.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:38:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:38:39.874 [DEBUG] [Thread-122474] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:38:49.786 [DEBUG] [Thread-122476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:03.658 [DEBUG] [Thread-122477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:04.829 [DEBUG] [Thread-122478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:09.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:39:09.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:39:09.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:39:10.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 39, 6), 18.58, 28.46, 0.0, 23.89, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:39:10.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:39:06
2025-12-03T19:39:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:39:10.827 [DEBUG] [Thread-122479] [transport.py] [_log()] starting thread (client mode): 0xa27506d0
2025-12-03T19:39:10.827 [DEBUG] [Thread-122479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:39:10.849 [DEBUG] [Thread-122479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:39:10.849 [INFO] [Thread-122479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] client lang: <none>
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] server lang: <none>
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] kex follows: False
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] Compression: none
2025-12-03T19:39:10.850 [DEBUG] [Thread-122479] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:39:10.862 [DEBUG] [Thread-122479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:39:10.862 [DEBUG] [Thread-122479] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:39:10.863 [DEBUG] [Thread-122479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:39:10.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:39:10.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:39:10.865 [DEBUG] [Thread-122479] [transport.py] [_log()] userauth is OK
2025-12-03T19:39:10.865 [DEBUG] [Thread-122479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:39:10.865 [DEBUG] [Thread-122479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:39:10.865 [DEBUG] [Thread-122479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:39:10.865 [DEBUG] [Thread-122479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:39:10.883 [INFO] [Thread-122479] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:39:10.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:39:11.524 [DEBUG] [Thread-122479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:39:11.524 [DEBUG] [Thread-122479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:39:11.525 [DEBUG] [Thread-122479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:39:11.566 [DEBUG] [Thread-122479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:39:11.566 [DEBUG] [Thread-122479] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:39:11.568 [DEBUG] [Thread-122479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:39:11.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:39:11.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:39:11.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:39:11.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:39:11.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:39:11.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:39:11.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:39:11.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:39:11.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:39:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.735116 -999.00  +17.90  16.89     34   +1.90 1 1 1 1 1   836    0 14.14 -87.03 ----- 16.9 16.9 160.0 32.2 18.7 -26.1 18.6 -25.8 18.5 -24.2 18.8 -25.0
2025-12-03T19:39:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:39:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:39:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.735116
2025-12-03T19:39:11.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:39:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:39:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:39:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:39:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:39:11.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:39:06', tmtdew=18.58, humidity=28.46, cloud=0.0, wind=23.89, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:38:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:39:11.592 [DEBUG] [Thread-122479] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:39:11.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:39:11.688 [DEBUG] [Thread-122482] [transport.py] [_log()] starting thread (client mode): 0xa514aad0
2025-12-03T19:39:11.688 [DEBUG] [Thread-122482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:39:11.703 [DEBUG] [Thread-122482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:39:11.703 [INFO] [Thread-122482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:39:11.710 [DEBUG] [Thread-122482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:39:11.710 [DEBUG] [Thread-122482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] client lang: <none>
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] server lang: <none>
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] kex follows: False
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] Compression: none
2025-12-03T19:39:11.711 [DEBUG] [Thread-122482] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:39:11.767 [DEBUG] [Thread-122482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:39:11.768 [DEBUG] [Thread-122482] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:39:11.768 [DEBUG] [Thread-122482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:39:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:39:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:39:11.824 [DEBUG] [Thread-122482] [transport.py] [_log()] userauth is OK
2025-12-03T19:39:11.825 [DEBUG] [Thread-122482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:39:11.825 [DEBUG] [Thread-122482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:39:11.825 [DEBUG] [Thread-122482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:39:11.825 [DEBUG] [Thread-122482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:39:11.843 [INFO] [Thread-122482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:39:11.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:39:11.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:39:12.654 [DEBUG] [Thread-122482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:39:12.655 [DEBUG] [Thread-122482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:39:12.702 [DEBUG] [Thread-122482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:39:12.703 [DEBUG] [Thread-122482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:39:12.711 [DEBUG] [Thread-122482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:39:12.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:39:12.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:39:12.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:39:12.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:39:12.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:39:12.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:39:12.746 [DEBUG] [Thread-122482] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:39:18.383 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:18.384 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:19.859 [DEBUG] [Thread-122484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:34.899 [DEBUG] [Thread-122485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:39:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:39:42.768 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:39:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:39:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 39, 38), 18.56, 28.49, 0.0, 24.33, 17.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:39:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:39:38
2025-12-03T19:39:43.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:39:43.725 [DEBUG] [Thread-122486] [transport.py] [_log()] starting thread (client mode): 0xa271dfc0
2025-12-03T19:39:43.725 [DEBUG] [Thread-122486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:39:43.745 [DEBUG] [Thread-122486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:39:43.745 [INFO] [Thread-122486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:39:43.747 [DEBUG] [Thread-122486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] client lang: <none>
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] server lang: <none>
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] kex follows: False
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:39:43.748 [DEBUG] [Thread-122486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:39:43.749 [DEBUG] [Thread-122486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:39:43.749 [DEBUG] [Thread-122486] [transport.py] [_log()] Compression: none
2025-12-03T19:39:43.749 [DEBUG] [Thread-122486] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:39:43.764 [DEBUG] [Thread-122486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:39:43.765 [DEBUG] [Thread-122486] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:39:43.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:39:43.766 [DEBUG] [Thread-122486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:39:43.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:39:43.768 [DEBUG] [Thread-122486] [transport.py] [_log()] userauth is OK
2025-12-03T19:39:43.768 [DEBUG] [Thread-122486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:39:43.768 [DEBUG] [Thread-122486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:39:43.768 [DEBUG] [Thread-122486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:39:43.768 [DEBUG] [Thread-122486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:39:43.786 [INFO] [Thread-122486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:39:43.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:39:44.393 [DEBUG] [Thread-122486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:39:44.393 [DEBUG] [Thread-122486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:39:44.393 [DEBUG] [Thread-122486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:39:44.434 [DEBUG] [Thread-122486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:39:44.434 [DEBUG] [Thread-122486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:39:44.437 [DEBUG] [Thread-122486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:39:44.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:39:44.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:39:44.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:39:44.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:39:44.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:39:44.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:39:44.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:39:44.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:39:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:39:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.735463 -999.00  +17.90  22.85     34   +1.90 1 1 1 1 1   831    0 14.51 -87.03 ----- 22.9 22.9 143.6 25.1 18.7 -26.1 18.6 -25.7 18.4 -24.2 18.7 -25.0
2025-12-03T19:39:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:39:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:39:44.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.735463
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:39:44.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:39:38', tmtdew=18.56, humidity=28.49, cloud=0.0, wind=24.33, temperature=17.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:39:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:39:44.462 [DEBUG] [Thread-122486] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:39:44.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:39:44.560 [DEBUG] [Thread-122489] [transport.py] [_log()] starting thread (client mode): 0xa514aa70
2025-12-03T19:39:44.560 [DEBUG] [Thread-122489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:39:44.575 [DEBUG] [Thread-122489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:39:44.575 [INFO] [Thread-122489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:39:44.582 [DEBUG] [Thread-122489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:39:44.582 [DEBUG] [Thread-122489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:39:44.582 [DEBUG] [Thread-122489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] client lang: <none>
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] server lang: <none>
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] kex follows: False
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] Compression: none
2025-12-03T19:39:44.583 [DEBUG] [Thread-122489] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:39:44.640 [DEBUG] [Thread-122489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:39:44.640 [DEBUG] [Thread-122489] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:39:44.641 [DEBUG] [Thread-122489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:39:44.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:39:44.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:39:44.696 [DEBUG] [Thread-122489] [transport.py] [_log()] userauth is OK
2025-12-03T19:39:44.696 [DEBUG] [Thread-122489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:39:44.696 [DEBUG] [Thread-122489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:39:44.696 [DEBUG] [Thread-122489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:39:44.697 [DEBUG] [Thread-122489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:39:44.715 [INFO] [Thread-122489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:39:44.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:39:44.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:39:45.558 [DEBUG] [Thread-122489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:39:45.558 [DEBUG] [Thread-122489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:39:45.605 [DEBUG] [Thread-122489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:39:45.606 [DEBUG] [Thread-122489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:39:45.614 [DEBUG] [Thread-122489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:39:45.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:39:45.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:39:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:39:45.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:39:45.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:39:45.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:39:45.648 [DEBUG] [Thread-122489] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:39:49.927 [DEBUG] [Thread-122491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:03.711 [DEBUG] [Thread-122492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:04.967 [DEBUG] [Thread-122493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:15.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:40:15.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:40:15.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:40:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 40, 10), 18.49, 28.64, 0.0, 25.85, 18.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:40:16.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:40:10
2025-12-03T19:40:16.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:40:16.634 [DEBUG] [Thread-122494] [transport.py] [_log()] starting thread (client mode): 0xa517e530
2025-12-03T19:40:16.634 [DEBUG] [Thread-122494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:40:16.654 [DEBUG] [Thread-122494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:40:16.654 [INFO] [Thread-122494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] client lang: <none>
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] server lang: <none>
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] kex follows: False
2025-12-03T19:40:16.657 [DEBUG] [Thread-122494] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] Compression: none
2025-12-03T19:40:16.658 [DEBUG] [Thread-122494] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:40:16.674 [DEBUG] [Thread-122494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:40:16.674 [DEBUG] [Thread-122494] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:40:16.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:40:16.675 [DEBUG] [Thread-122494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:40:16.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:40:16.677 [DEBUG] [Thread-122494] [transport.py] [_log()] userauth is OK
2025-12-03T19:40:16.677 [DEBUG] [Thread-122494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:40:16.677 [DEBUG] [Thread-122494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:40:16.677 [DEBUG] [Thread-122494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:40:16.677 [DEBUG] [Thread-122494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:40:16.696 [INFO] [Thread-122494] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:40:16.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:40:19.485 [DEBUG] [Thread-122494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:40:19.486 [DEBUG] [Thread-122494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:40:19.486 [DEBUG] [Thread-122494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:40:19.527 [DEBUG] [Thread-122494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:40:19.527 [DEBUG] [Thread-122494] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:40:19.529 [DEBUG] [Thread-122494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:40:19.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:40:19.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:40:19.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:40:19.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:40:19.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:40:19.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:40:19.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:40:19.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:40:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:40:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.735811 -999.00  +17.90  17.60     34   +2.00 1 1 1 1 1   826    0 13.96 -90.68 ----- 17.6 17.6 155.0 27.3 18.6 -26.2 18.6 -25.7 18.4 -24.0 18.7 -25.0
2025-12-03T19:40:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:40:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:40:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.735811
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:40:19.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:40:10', tmtdew=18.49, humidity=28.64, cloud=0.0, wind=25.85, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:39:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:40:19.585 [DEBUG] [Thread-122494] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:40:19.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:40:19.681 [DEBUG] [Thread-122497] [transport.py] [_log()] starting thread (client mode): 0xa517d750
2025-12-03T19:40:19.681 [DEBUG] [Thread-122497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:40:19.697 [DEBUG] [Thread-122497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:40:19.697 [INFO] [Thread-122497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:40:19.704 [DEBUG] [Thread-122497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:40:19.704 [DEBUG] [Thread-122497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:40:19.704 [DEBUG] [Thread-122497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] client lang: <none>
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] server lang: <none>
2025-12-03T19:40:19.705 [DEBUG] [Thread-122497] [transport.py] [_log()] kex follows: False
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] Compression: none
2025-12-03T19:40:19.706 [DEBUG] [Thread-122497] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:40:19.764 [DEBUG] [Thread-122497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:40:19.765 [DEBUG] [Thread-122497] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:40:19.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:40:19.766 [DEBUG] [Thread-122497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:40:19.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:40:19.820 [DEBUG] [Thread-122497] [transport.py] [_log()] userauth is OK
2025-12-03T19:40:19.820 [DEBUG] [Thread-122497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:40:19.821 [DEBUG] [Thread-122497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:40:19.821 [DEBUG] [Thread-122497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:40:19.821 [DEBUG] [Thread-122497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:40:19.839 [INFO] [Thread-122497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:40:19.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:40:19.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:40:19.994 [DEBUG] [Thread-122499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:20.696 [DEBUG] [Thread-122497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:40:20.697 [DEBUG] [Thread-122497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:40:20.745 [DEBUG] [Thread-122497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:40:20.745 [DEBUG] [Thread-122497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:40:20.754 [DEBUG] [Thread-122497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:40:20.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:40:20.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:40:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:40:20.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:40:20.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:40:20.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:40:20.788 [DEBUG] [Thread-122497] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:40:23.870 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:23.871 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:35.043 [DEBUG] [Thread-122500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:50.071 [DEBUG] [Thread-122501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:40:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:40:50.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:40:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:40:51.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 40, 42), 18.4, 28.72, 0.0, 23.63, 17.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:40:51.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:40:42
2025-12-03T19:40:51.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:40:51.763 [DEBUG] [Thread-122502] [transport.py] [_log()] starting thread (client mode): 0xa517c070
2025-12-03T19:40:51.763 [DEBUG] [Thread-122502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:40:51.783 [DEBUG] [Thread-122502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:40:51.783 [INFO] [Thread-122502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] client lang: <none>
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] server lang: <none>
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] kex follows: False
2025-12-03T19:40:51.787 [DEBUG] [Thread-122502] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] Compression: none
2025-12-03T19:40:51.788 [DEBUG] [Thread-122502] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:40:51.808 [DEBUG] [Thread-122502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:40:51.809 [DEBUG] [Thread-122502] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:40:51.810 [DEBUG] [Thread-122502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:40:51.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:40:51.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:40:51.812 [DEBUG] [Thread-122502] [transport.py] [_log()] userauth is OK
2025-12-03T19:40:51.813 [DEBUG] [Thread-122502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:40:51.813 [DEBUG] [Thread-122502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:40:51.813 [DEBUG] [Thread-122502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:40:51.813 [DEBUG] [Thread-122502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:40:51.855 [INFO] [Thread-122502] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:40:51.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:40:52.484 [DEBUG] [Thread-122502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:40:52.485 [DEBUG] [Thread-122502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:40:52.485 [DEBUG] [Thread-122502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:40:52.526 [DEBUG] [Thread-122502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:40:52.526 [DEBUG] [Thread-122502] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:40:52.529 [DEBUG] [Thread-122502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:40:52.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:40:52.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:40:52.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:40:52.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:40:52.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:40:52.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:40:52.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.736158 -999.00  +17.90  18.40     34   +1.90 1 1 1 1 1   820    0 13.92 -105.21 ----- 18.4 18.4 146.2 23.4 18.6 -26.0 18.6 -25.6 18.4 -24.1 18.7 -24.9
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:40:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.736158
2025-12-03T19:40:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:40:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:40:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:40:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:40:52.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:40:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:40:42', tmtdew=18.4, humidity=28.72, cloud=0.0, wind=23.63, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:40:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:40:52.554 [DEBUG] [Thread-122502] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:40:52.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:40:52.653 [DEBUG] [Thread-122505] [transport.py] [_log()] starting thread (client mode): 0xa517f0d0
2025-12-03T19:40:52.653 [DEBUG] [Thread-122505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:40:52.667 [DEBUG] [Thread-122505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:40:52.667 [INFO] [Thread-122505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:52.675 [DEBUG] [Thread-122505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] client lang: <none>
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] server lang: <none>
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] kex follows: False
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:40:52.676 [DEBUG] [Thread-122505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:40:52.677 [DEBUG] [Thread-122505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:40:52.677 [DEBUG] [Thread-122505] [transport.py] [_log()] Compression: none
2025-12-03T19:40:52.677 [DEBUG] [Thread-122505] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:40:52.731 [DEBUG] [Thread-122505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:40:52.732 [DEBUG] [Thread-122505] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:40:52.732 [DEBUG] [Thread-122505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:40:52.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:40:52.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:40:52.788 [DEBUG] [Thread-122505] [transport.py] [_log()] userauth is OK
2025-12-03T19:40:52.788 [DEBUG] [Thread-122505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:40:52.788 [DEBUG] [Thread-122505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:40:52.789 [DEBUG] [Thread-122505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:40:52.789 [DEBUG] [Thread-122505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:40:52.811 [INFO] [Thread-122505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:40:52.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:40:52.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:40:53.695 [DEBUG] [Thread-122505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:40:53.695 [DEBUG] [Thread-122505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:40:53.744 [DEBUG] [Thread-122505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:40:53.744 [DEBUG] [Thread-122505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:40:53.753 [DEBUG] [Thread-122505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:40:53.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:40:53.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:40:53.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:40:53.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:40:53.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:40:53.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:40:53.785 [DEBUG] [Thread-122505] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:41:03.768 [DEBUG] [Thread-122507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:05.099 [DEBUG] [Thread-122508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:20.152 [DEBUG] [Thread-122509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:41:23.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:41:23.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:41:24.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 41, 14), 18.39, 28.72, 0.0, 22.67, 17.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:41:24.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:41:14
2025-12-03T19:41:24.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:41:24.777 [DEBUG] [Thread-122510] [transport.py] [_log()] starting thread (client mode): 0xa517f6a0
2025-12-03T19:41:24.777 [DEBUG] [Thread-122510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:41:24.796 [DEBUG] [Thread-122510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:41:24.796 [INFO] [Thread-122510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:41:24.799 [DEBUG] [Thread-122510] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] client lang: <none>
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] server lang: <none>
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] kex follows: False
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] Compression: none
2025-12-03T19:41:24.800 [DEBUG] [Thread-122510] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:41:24.817 [DEBUG] [Thread-122510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:41:24.818 [DEBUG] [Thread-122510] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:41:24.818 [DEBUG] [Thread-122510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:41:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:41:24.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:41:24.820 [DEBUG] [Thread-122510] [transport.py] [_log()] userauth is OK
2025-12-03T19:41:24.820 [DEBUG] [Thread-122510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:41:24.820 [DEBUG] [Thread-122510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:41:24.820 [DEBUG] [Thread-122510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:41:24.821 [DEBUG] [Thread-122510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:41:24.838 [INFO] [Thread-122510] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:41:24.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:41:25.423 [DEBUG] [Thread-122510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:41:25.423 [DEBUG] [Thread-122510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:41:25.423 [DEBUG] [Thread-122510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:41:25.464 [DEBUG] [Thread-122510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:41:25.464 [DEBUG] [Thread-122510] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:41:25.466 [DEBUG] [Thread-122510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:41:25.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:41:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:41:25.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:41:25.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:41:25.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:41:25.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:41:25.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:41:25.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.736505 -999.00  +17.90  14.75     34   +1.90 1 1 1 1 1   814    0 13.58 -116.47 ----- 14.8 14.8 155.8 25.2 18.6 -26.1 18.6 -25.5 18.4 -24.0 18.6 -24.7
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.736505
2025-12-03T19:41:25.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:41:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:41:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:41:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:41:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:41:25.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:41:14', tmtdew=18.39, humidity=28.72, cloud=0.0, wind=22.67, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:40:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:41:25.491 [DEBUG] [Thread-122510] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:41:25.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:41:25.584 [DEBUG] [Thread-122513] [transport.py] [_log()] starting thread (client mode): 0xa27519f0
2025-12-03T19:41:25.584 [DEBUG] [Thread-122513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:41:25.600 [DEBUG] [Thread-122513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:41:25.600 [INFO] [Thread-122513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] client lang: <none>
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] server lang: <none>
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] kex follows: False
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:41:25.608 [DEBUG] [Thread-122513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:41:25.609 [DEBUG] [Thread-122513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:41:25.609 [DEBUG] [Thread-122513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:41:25.609 [DEBUG] [Thread-122513] [transport.py] [_log()] Compression: none
2025-12-03T19:41:25.609 [DEBUG] [Thread-122513] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:41:25.670 [DEBUG] [Thread-122513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:41:25.671 [DEBUG] [Thread-122513] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:41:25.671 [DEBUG] [Thread-122513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:41:25.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:41:25.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:41:25.728 [DEBUG] [Thread-122513] [transport.py] [_log()] userauth is OK
2025-12-03T19:41:25.728 [DEBUG] [Thread-122513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:41:25.728 [DEBUG] [Thread-122513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:41:25.729 [DEBUG] [Thread-122513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:41:25.729 [DEBUG] [Thread-122513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:41:25.748 [INFO] [Thread-122513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:41:25.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:41:25.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:41:26.590 [DEBUG] [Thread-122513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:41:26.590 [DEBUG] [Thread-122513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:41:26.638 [DEBUG] [Thread-122513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:41:26.638 [DEBUG] [Thread-122513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:41:26.647 [DEBUG] [Thread-122513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:41:26.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:41:26.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:41:26.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:41:26.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:41:26.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:41:26.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:41:26.681 [DEBUG] [Thread-122513] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:41:33.031 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:33.032 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:35.180 [DEBUG] [Thread-122515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:50.221 [DEBUG] [Thread-122516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:41:56.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:41:56.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:41:56.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:41:57.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 41, 46), 18.35, 28.82, 0.0, 27.35, 17.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:41:57.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:41:46
2025-12-03T19:41:57.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:41:57.691 [DEBUG] [Thread-122517] [transport.py] [_log()] starting thread (client mode): 0xa27ca530
2025-12-03T19:41:57.691 [DEBUG] [Thread-122517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:41:57.712 [DEBUG] [Thread-122517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:41:57.712 [INFO] [Thread-122517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] client lang: <none>
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] server lang: <none>
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] kex follows: False
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] Compression: none
2025-12-03T19:41:57.714 [DEBUG] [Thread-122517] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:41:57.725 [DEBUG] [Thread-122517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:41:57.725 [DEBUG] [Thread-122517] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:41:57.725 [DEBUG] [Thread-122517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:41:57.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:41:57.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:41:57.726 [DEBUG] [Thread-122517] [transport.py] [_log()] userauth is OK
2025-12-03T19:41:57.726 [DEBUG] [Thread-122517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:41:57.726 [DEBUG] [Thread-122517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:41:57.726 [DEBUG] [Thread-122517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:41:57.726 [DEBUG] [Thread-122517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:41:57.736 [INFO] [Thread-122517] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:41:57.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:41:58.320 [DEBUG] [Thread-122517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:41:58.320 [DEBUG] [Thread-122517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:41:58.321 [DEBUG] [Thread-122517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:41:58.362 [DEBUG] [Thread-122517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:41:58.362 [DEBUG] [Thread-122517] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:41:58.364 [DEBUG] [Thread-122517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:41:58.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:41:58.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:41:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:41:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:41:58.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:41:58.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:41:58.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.736852 -999.00  +17.90  20.26     34   +2.00 1 1 1 1 1   808    0 13.69 -103.93 ----- 20.3 20.3 159.6 26.9 18.6 -26.1 18.6 -25.6 18.4 -23.9 18.6 -25.0
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.736852
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:41:58.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:41:46', tmtdew=18.35, humidity=28.82, cloud=0.0, wind=27.35, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:41:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:41:58.383 [DEBUG] [Thread-122517] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:41:58.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:41:58.468 [DEBUG] [Thread-122520] [transport.py] [_log()] starting thread (client mode): 0xa27c9a50
2025-12-03T19:41:58.468 [DEBUG] [Thread-122520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:41:58.483 [DEBUG] [Thread-122520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:41:58.483 [INFO] [Thread-122520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:41:58.490 [DEBUG] [Thread-122520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:41:58.490 [DEBUG] [Thread-122520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:41:58.490 [DEBUG] [Thread-122520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:41:58.490 [DEBUG] [Thread-122520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:58.490 [DEBUG] [Thread-122520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] client lang: <none>
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] server lang: <none>
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] kex follows: False
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] Compression: none
2025-12-03T19:41:58.491 [DEBUG] [Thread-122520] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:41:58.551 [DEBUG] [Thread-122520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:41:58.551 [DEBUG] [Thread-122520] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:41:58.551 [DEBUG] [Thread-122520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:41:58.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:41:58.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:41:58.608 [DEBUG] [Thread-122520] [transport.py] [_log()] userauth is OK
2025-12-03T19:41:58.608 [DEBUG] [Thread-122520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:41:58.608 [DEBUG] [Thread-122520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:41:58.608 [DEBUG] [Thread-122520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:41:58.608 [DEBUG] [Thread-122520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:41:58.622 [INFO] [Thread-122520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:41:58.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:41:58.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:41:59.463 [DEBUG] [Thread-122520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:41:59.464 [DEBUG] [Thread-122520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:41:59.512 [DEBUG] [Thread-122520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:41:59.512 [DEBUG] [Thread-122520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:41:59.520 [DEBUG] [Thread-122520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:41:59.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:41:59.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:41:59.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:41:59.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:41:59.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:41:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:41:59.556 [DEBUG] [Thread-122520] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:42:03.850 [DEBUG] [Thread-122522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:05.248 [DEBUG] [Thread-122523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:20.293 [DEBUG] [Thread-122524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:29.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:42:29.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:42:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:42:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 42, 18), 18.33, 28.86, 0.0, 28.35, 17.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:42:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:42:18
2025-12-03T19:42:30.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:42:30.507 [DEBUG] [Thread-122525] [transport.py] [_log()] starting thread (client mode): 0xa517d390
2025-12-03T19:42:30.507 [DEBUG] [Thread-122525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:42:30.528 [DEBUG] [Thread-122525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:42:30.528 [INFO] [Thread-122525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] client lang: <none>
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] server lang: <none>
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] kex follows: False
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:42:30.531 [DEBUG] [Thread-122525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:42:30.532 [DEBUG] [Thread-122525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:42:30.532 [DEBUG] [Thread-122525] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:42:30.532 [DEBUG] [Thread-122525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:42:30.532 [DEBUG] [Thread-122525] [transport.py] [_log()] Compression: none
2025-12-03T19:42:30.532 [DEBUG] [Thread-122525] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:42:30.550 [DEBUG] [Thread-122525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:42:30.550 [DEBUG] [Thread-122525] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:42:30.551 [DEBUG] [Thread-122525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:42:30.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:42:30.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:42:30.552 [DEBUG] [Thread-122525] [transport.py] [_log()] userauth is OK
2025-12-03T19:42:30.553 [DEBUG] [Thread-122525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:42:30.553 [DEBUG] [Thread-122525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:42:30.553 [DEBUG] [Thread-122525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:42:30.553 [DEBUG] [Thread-122525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:42:30.576 [INFO] [Thread-122525] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:42:30.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:42:31.291 [DEBUG] [Thread-122525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:42:31.291 [DEBUG] [Thread-122525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:42:31.291 [DEBUG] [Thread-122525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:42:31.332 [DEBUG] [Thread-122525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:42:31.332 [DEBUG] [Thread-122525] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:42:31.335 [DEBUG] [Thread-122525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:42:31.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:42:31.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:42:31.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:42:31.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:42:31.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:42:31.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:42:31.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:42:31.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.737547 -999.00  +17.90  18.54     34   +2.10 1 1 1 1 1   793    0 13.79 -99.95 ----- 18.5 18.5 151.4 26.1 18.6 -26.1 18.5 -25.5 18.3 -24.1 18.6 -24.8
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.737547
2025-12-03T19:42:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:42:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:42:31.358 [DEBUG] [Thread-122525] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:42:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:42:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:42:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:42:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:42:18', tmtdew=18.33, humidity=28.86, cloud=0.0, wind=28.35, temperature=17.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:42:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:42:31.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:42:31.449 [DEBUG] [Thread-122528] [transport.py] [_log()] starting thread (client mode): 0xa27c8b80
2025-12-03T19:42:31.449 [DEBUG] [Thread-122528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:42:31.463 [DEBUG] [Thread-122528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:42:31.464 [INFO] [Thread-122528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:42:31.471 [DEBUG] [Thread-122528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:42:31.472 [DEBUG] [Thread-122528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:42:31.472 [DEBUG] [Thread-122528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:42:31.472 [DEBUG] [Thread-122528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:42:31.472 [DEBUG] [Thread-122528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:42:31.472 [DEBUG] [Thread-122528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] client lang: <none>
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] server lang: <none>
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] kex follows: False
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:42:31.473 [DEBUG] [Thread-122528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:42:31.474 [DEBUG] [Thread-122528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:42:31.474 [DEBUG] [Thread-122528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:42:31.474 [DEBUG] [Thread-122528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:42:31.474 [DEBUG] [Thread-122528] [transport.py] [_log()] Compression: none
2025-12-03T19:42:31.474 [DEBUG] [Thread-122528] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:42:31.528 [DEBUG] [Thread-122528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:42:31.529 [DEBUG] [Thread-122528] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:42:31.529 [DEBUG] [Thread-122528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:42:31.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:42:31.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:42:31.585 [DEBUG] [Thread-122528] [transport.py] [_log()] userauth is OK
2025-12-03T19:42:31.585 [DEBUG] [Thread-122528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:42:31.585 [DEBUG] [Thread-122528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:42:31.585 [DEBUG] [Thread-122528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:42:31.585 [DEBUG] [Thread-122528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:42:31.604 [INFO] [Thread-122528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:42:31.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:42:31.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:42:32.480 [DEBUG] [Thread-122528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:42:32.480 [DEBUG] [Thread-122528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:42:32.528 [DEBUG] [Thread-122528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:42:32.528 [DEBUG] [Thread-122528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:42:32.537 [DEBUG] [Thread-122528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:42:32.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:42:32.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:42:32.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:42:32.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:42:32.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:42:32.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:42:32.571 [DEBUG] [Thread-122528] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:42:35.319 [DEBUG] [Thread-122530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:43.075 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:43.077 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:42:50.355 [DEBUG] [Thread-122531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:02.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:43:02.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:43:02.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:43:03.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 42, 50), 18.21, 29.39, 0.0, 25.14, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:43:03.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:42:50
2025-12-03T19:43:03.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:43:03.539 [DEBUG] [Thread-122532] [transport.py] [_log()] starting thread (client mode): 0xa517fa30
2025-12-03T19:43:03.539 [DEBUG] [Thread-122532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:43:03.558 [DEBUG] [Thread-122532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:43:03.558 [INFO] [Thread-122532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] client lang: <none>
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] server lang: <none>
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] kex follows: False
2025-12-03T19:43:03.562 [DEBUG] [Thread-122532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] Compression: none
2025-12-03T19:43:03.563 [DEBUG] [Thread-122532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:43:03.580 [DEBUG] [Thread-122532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:43:03.581 [DEBUG] [Thread-122532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:43:03.581 [DEBUG] [Thread-122532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:43:03.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:43:03.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:43:03.584 [DEBUG] [Thread-122532] [transport.py] [_log()] userauth is OK
2025-12-03T19:43:03.584 [DEBUG] [Thread-122532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:43:03.584 [DEBUG] [Thread-122532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:43:03.584 [DEBUG] [Thread-122532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:43:03.584 [DEBUG] [Thread-122532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:43:03.605 [INFO] [Thread-122532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:43:03.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:43:03.915 [DEBUG] [Thread-122534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:04.236 [DEBUG] [Thread-122532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:43:04.236 [DEBUG] [Thread-122532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:43:04.237 [DEBUG] [Thread-122532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:43:04.277 [DEBUG] [Thread-122532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:43:04.277 [DEBUG] [Thread-122532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:43:04.280 [DEBUG] [Thread-122532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:43:04.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:43:04.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:43:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:43:04.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:43:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:43:04.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:43:04.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:43:04.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.737894 -999.00  +17.90  17.97     34   +2.10 1 1 1 1 1   785    0 13.66 -106.18 ----- 18.0 18.0 154.8 23.0 18.5 -26.0 18.5 -25.7 18.3 -24.0 18.6 -24.8
2025-12-03T19:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.737894
2025-12-03T19:43:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:43:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:43:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:43:04.303 [DEBUG] [Thread-122532] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:43:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:43:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:43:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:42:50', tmtdew=18.21, humidity=29.39, cloud=0.0, wind=25.14, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:42:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:43:04.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:43:04.400 [DEBUG] [Thread-122536] [transport.py] [_log()] starting thread (client mode): 0xa2752d40
2025-12-03T19:43:04.400 [DEBUG] [Thread-122536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:43:04.419 [DEBUG] [Thread-122536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:43:04.419 [INFO] [Thread-122536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:43:04.426 [DEBUG] [Thread-122536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] client lang: <none>
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] server lang: <none>
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] kex follows: False
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:43:04.427 [DEBUG] [Thread-122536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:43:04.428 [DEBUG] [Thread-122536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:43:04.428 [DEBUG] [Thread-122536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:43:04.428 [DEBUG] [Thread-122536] [transport.py] [_log()] Compression: none
2025-12-03T19:43:04.428 [DEBUG] [Thread-122536] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:43:04.487 [DEBUG] [Thread-122536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:43:04.488 [DEBUG] [Thread-122536] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:43:04.488 [DEBUG] [Thread-122536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:43:04.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:43:04.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:43:04.545 [DEBUG] [Thread-122536] [transport.py] [_log()] userauth is OK
2025-12-03T19:43:04.545 [DEBUG] [Thread-122536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:43:04.545 [DEBUG] [Thread-122536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:43:04.545 [DEBUG] [Thread-122536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:43:04.545 [DEBUG] [Thread-122536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:43:04.567 [INFO] [Thread-122536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:43:04.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:43:04.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:43:05.387 [DEBUG] [Thread-122538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:05.406 [DEBUG] [Thread-122536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:43:05.406 [DEBUG] [Thread-122536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:43:05.454 [DEBUG] [Thread-122536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:43:05.454 [DEBUG] [Thread-122536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:43:05.469 [DEBUG] [Thread-122536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:43:05.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:43:05.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:43:05.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:43:05.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:43:05.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:43:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:43:05.510 [DEBUG] [Thread-122536] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:43:20.433 [DEBUG] [Thread-122539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:35.466 [DEBUG] [Thread-122540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:43:35.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:43:35.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:43:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 43, 22), 18.18, 29.46, 0.0, 24.76, 17.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:43:36.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:43:22
2025-12-03T19:43:36.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:43:36.462 [DEBUG] [Thread-122541] [transport.py] [_log()] starting thread (client mode): 0xa27532b0
2025-12-03T19:43:36.462 [DEBUG] [Thread-122541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:43:36.483 [DEBUG] [Thread-122541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:43:36.483 [INFO] [Thread-122541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] client lang: <none>
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] server lang: <none>
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] kex follows: False
2025-12-03T19:43:36.486 [DEBUG] [Thread-122541] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] Compression: none
2025-12-03T19:43:36.487 [DEBUG] [Thread-122541] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:43:36.505 [DEBUG] [Thread-122541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:43:36.506 [DEBUG] [Thread-122541] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:43:36.506 [DEBUG] [Thread-122541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:43:36.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:43:36.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:43:36.508 [DEBUG] [Thread-122541] [transport.py] [_log()] userauth is OK
2025-12-03T19:43:36.508 [DEBUG] [Thread-122541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:43:36.508 [DEBUG] [Thread-122541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:43:36.509 [DEBUG] [Thread-122541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:43:36.509 [DEBUG] [Thread-122541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:43:36.530 [INFO] [Thread-122541] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:43:36.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:43:37.251 [DEBUG] [Thread-122541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:43:37.252 [DEBUG] [Thread-122541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:43:37.252 [DEBUG] [Thread-122541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:43:37.294 [DEBUG] [Thread-122541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:43:37.294 [DEBUG] [Thread-122541] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:43:37.297 [DEBUG] [Thread-122541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:43:37.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:43:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:43:37.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:43:37.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:43:37.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:43:37.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:43:37.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.738246 -999.00  +17.90  18.08     34   +2.20 1 1 1 1 1   777    0 12.68 -123.39 ----- 18.1 18.1 157.2 24.0 18.5 -26.1 18.4 -25.4 18.3 -24.0 18.5 -24.9
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:43:37.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.738246
2025-12-03T19:43:37.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:43:37.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:43:37.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:43:37.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:43:37.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:43:37.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:43:22', tmtdew=18.18, humidity=29.46, cloud=0.0, wind=24.76, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:43:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:43:37.323 [DEBUG] [Thread-122541] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:43:37.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:43:37.419 [DEBUG] [Thread-122544] [transport.py] [_log()] starting thread (client mode): 0xa517f190
2025-12-03T19:43:37.419 [DEBUG] [Thread-122544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:43:37.435 [DEBUG] [Thread-122544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:43:37.435 [INFO] [Thread-122544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:43:37.442 [DEBUG] [Thread-122544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:43:37.442 [DEBUG] [Thread-122544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:43:37.442 [DEBUG] [Thread-122544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] client lang: <none>
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] server lang: <none>
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] kex follows: False
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] Compression: none
2025-12-03T19:43:37.443 [DEBUG] [Thread-122544] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:43:37.500 [DEBUG] [Thread-122544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:43:37.500 [DEBUG] [Thread-122544] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:43:37.501 [DEBUG] [Thread-122544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:43:37.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:43:37.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:43:37.556 [DEBUG] [Thread-122544] [transport.py] [_log()] userauth is OK
2025-12-03T19:43:37.556 [DEBUG] [Thread-122544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:43:37.556 [DEBUG] [Thread-122544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:43:37.556 [DEBUG] [Thread-122544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:43:37.556 [DEBUG] [Thread-122544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:43:37.576 [INFO] [Thread-122544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:43:37.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:43:37.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:43:38.418 [DEBUG] [Thread-122544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:43:38.419 [DEBUG] [Thread-122544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:43:38.466 [DEBUG] [Thread-122544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:43:38.467 [DEBUG] [Thread-122544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:43:38.476 [DEBUG] [Thread-122544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:43:38.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:43:38.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:43:38.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:43:38.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:43:38.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:43:38.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:43:38.509 [DEBUG] [Thread-122544] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:43:49.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:49.705 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:43:50.494 [DEBUG] [Thread-122546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:03.984 [DEBUG] [Thread-122547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:05.539 [DEBUG] [Thread-122548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:08.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:44:08.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:44:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:44:09.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 43, 54), 18.16, 29.51, 0.0, 22.23, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:44:09.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:43:54
2025-12-03T19:44:09.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:44:09.489 [DEBUG] [Thread-122549] [transport.py] [_log()] starting thread (client mode): 0xa271ebc0
2025-12-03T19:44:09.489 [DEBUG] [Thread-122549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:44:09.509 [DEBUG] [Thread-122549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:44:09.509 [INFO] [Thread-122549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] client lang: <none>
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] server lang: <none>
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] kex follows: False
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:44:09.512 [DEBUG] [Thread-122549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:44:09.513 [DEBUG] [Thread-122549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:44:09.513 [DEBUG] [Thread-122549] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:44:09.513 [DEBUG] [Thread-122549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:44:09.513 [DEBUG] [Thread-122549] [transport.py] [_log()] Compression: none
2025-12-03T19:44:09.513 [DEBUG] [Thread-122549] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:44:09.535 [DEBUG] [Thread-122549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:44:09.535 [DEBUG] [Thread-122549] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:44:09.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:44:09.536 [DEBUG] [Thread-122549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:44:09.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:44:09.538 [DEBUG] [Thread-122549] [transport.py] [_log()] userauth is OK
2025-12-03T19:44:09.538 [DEBUG] [Thread-122549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:44:09.539 [DEBUG] [Thread-122549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:44:09.539 [DEBUG] [Thread-122549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:44:09.539 [DEBUG] [Thread-122549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:44:09.563 [INFO] [Thread-122549] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:44:09.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:44:10.189 [DEBUG] [Thread-122549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:44:10.190 [DEBUG] [Thread-122549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:44:10.190 [DEBUG] [Thread-122549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:44:10.231 [DEBUG] [Thread-122549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:44:10.231 [DEBUG] [Thread-122549] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:44:10.235 [DEBUG] [Thread-122549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:44:10.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:44:10.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:44:10.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:44:10.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:44:10.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:44:10.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:44:10.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:44:10.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:44:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:44:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.738589 -999.00  +17.90  17.19     34   +2.10 1 1 1 1 1   767    0 13.24 -109.11 ----- 17.2 17.2 159.8 24.2 18.5 -26.1 18.4 -25.5 18.2 -23.9 18.5 -24.8
2025-12-03T19:44:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:44:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:44:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.738589
2025-12-03T19:44:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:44:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:44:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:44:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:44:10.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:44:10.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:43:54', tmtdew=18.16, humidity=29.51, cloud=0.0, wind=22.23, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:43:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:44:10.260 [DEBUG] [Thread-122549] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:44:10.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:44:10.355 [DEBUG] [Thread-122552] [transport.py] [_log()] starting thread (client mode): 0xa2779a50
2025-12-03T19:44:10.355 [DEBUG] [Thread-122552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:44:10.371 [DEBUG] [Thread-122552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:44:10.371 [INFO] [Thread-122552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:44:10.378 [DEBUG] [Thread-122552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:44:10.378 [DEBUG] [Thread-122552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] client lang: <none>
2025-12-03T19:44:10.379 [DEBUG] [Thread-122552] [transport.py] [_log()] server lang: <none>
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] kex follows: False
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] Compression: none
2025-12-03T19:44:10.380 [DEBUG] [Thread-122552] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:44:10.434 [DEBUG] [Thread-122552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:44:10.435 [DEBUG] [Thread-122552] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:44:10.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:44:10.435 [DEBUG] [Thread-122552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:44:10.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:44:10.492 [DEBUG] [Thread-122552] [transport.py] [_log()] userauth is OK
2025-12-03T19:44:10.492 [DEBUG] [Thread-122552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:44:10.492 [DEBUG] [Thread-122552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:44:10.492 [DEBUG] [Thread-122552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:44:10.493 [DEBUG] [Thread-122552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:44:10.511 [INFO] [Thread-122552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:44:10.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:44:10.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:44:11.376 [DEBUG] [Thread-122552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:44:11.377 [DEBUG] [Thread-122552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:44:11.424 [DEBUG] [Thread-122552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:44:11.425 [DEBUG] [Thread-122552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:44:11.433 [DEBUG] [Thread-122552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:44:11.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:44:11.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:44:11.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:44:11.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:44:11.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:44:11.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:44:11.467 [DEBUG] [Thread-122552] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:44:20.565 [DEBUG] [Thread-122554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:35.610 [DEBUG] [Thread-122555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:44:41.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:44:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:44:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 44, 26), 18.12, 29.57, 0.0, 23.45, 17.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:44:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:44:26
2025-12-03T19:44:42.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:44:42.440 [DEBUG] [Thread-122556] [transport.py] [_log()] starting thread (client mode): 0xa2778850
2025-12-03T19:44:42.440 [DEBUG] [Thread-122556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:44:42.457 [DEBUG] [Thread-122556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:44:42.457 [INFO] [Thread-122556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:44:42.459 [DEBUG] [Thread-122556] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] client lang: <none>
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] server lang: <none>
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] kex follows: False
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] Compression: none
2025-12-03T19:44:42.460 [DEBUG] [Thread-122556] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:44:42.468 [DEBUG] [Thread-122556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:44:42.468 [DEBUG] [Thread-122556] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:44:42.468 [DEBUG] [Thread-122556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:44:42.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:44:42.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:44:42.470 [DEBUG] [Thread-122556] [transport.py] [_log()] userauth is OK
2025-12-03T19:44:42.470 [DEBUG] [Thread-122556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:44:42.470 [DEBUG] [Thread-122556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:44:42.470 [DEBUG] [Thread-122556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:44:42.470 [DEBUG] [Thread-122556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:44:42.486 [INFO] [Thread-122556] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:44:42.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:44:43.116 [DEBUG] [Thread-122556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:44:43.117 [DEBUG] [Thread-122556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:44:43.117 [DEBUG] [Thread-122556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:44:43.158 [DEBUG] [Thread-122556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:44:43.158 [DEBUG] [Thread-122556] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:44:43.161 [DEBUG] [Thread-122556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:44:43.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:44:43.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:44:43.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:44:43.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:44:43.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:44:43.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:44:43.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:44:43.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.738935 -999.00  +17.90  15.27     35   +2.20 1 1 1 1 1   757    0 13.53 -112.70 ----- 15.3 15.3 154.6 23.4 18.4 -25.9 18.4 -25.5 18.2 -23.9 18.5 -24.8
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.738935
2025-12-03T19:44:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:44:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:44:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:44:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:44:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:44:43.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:44:26', tmtdew=18.12, humidity=29.57, cloud=0.0, wind=23.45, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:44:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:44:43.184 [DEBUG] [Thread-122556] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:44:43.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:44:43.281 [DEBUG] [Thread-122559] [transport.py] [_log()] starting thread (client mode): 0xa271cd60
2025-12-03T19:44:43.281 [DEBUG] [Thread-122559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:44:43.296 [DEBUG] [Thread-122559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:44:43.297 [INFO] [Thread-122559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:44:43.304 [DEBUG] [Thread-122559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:44:43.304 [DEBUG] [Thread-122559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] client lang: <none>
2025-12-03T19:44:43.305 [DEBUG] [Thread-122559] [transport.py] [_log()] server lang: <none>
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] kex follows: False
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] Compression: none
2025-12-03T19:44:43.306 [DEBUG] [Thread-122559] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:44:43.364 [DEBUG] [Thread-122559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:44:43.364 [DEBUG] [Thread-122559] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:44:43.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:44:43.365 [DEBUG] [Thread-122559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:44:43.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:44:43.424 [DEBUG] [Thread-122559] [transport.py] [_log()] userauth is OK
2025-12-03T19:44:43.424 [DEBUG] [Thread-122559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:44:43.424 [DEBUG] [Thread-122559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:44:43.424 [DEBUG] [Thread-122559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:44:43.424 [DEBUG] [Thread-122559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:44:43.442 [INFO] [Thread-122559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:44:43.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:44:43.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:44:44.288 [DEBUG] [Thread-122559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:44:44.288 [DEBUG] [Thread-122559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:44:44.336 [DEBUG] [Thread-122559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:44:44.336 [DEBUG] [Thread-122559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:44:44.345 [DEBUG] [Thread-122559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:44:44.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:44:44.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:44:44.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:44:44.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:44:44.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:44:44.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:44:44.381 [DEBUG] [Thread-122559] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:44:50.641 [DEBUG] [Thread-122561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:54.078 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:44:54.079 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:04.053 [DEBUG] [Thread-122562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:05.688 [DEBUG] [Thread-122563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:14.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:45:14.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:45:14.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:45:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 44, 58), 18.01, 29.61, 0.0, 24.88, 17.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:45:15.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:44:58
2025-12-03T19:45:15.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:45:15.342 [DEBUG] [Thread-122564] [transport.py] [_log()] starting thread (client mode): 0xa27520b0
2025-12-03T19:45:15.342 [DEBUG] [Thread-122564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:45:15.363 [DEBUG] [Thread-122564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:45:15.364 [INFO] [Thread-122564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] client lang: <none>
2025-12-03T19:45:15.367 [DEBUG] [Thread-122564] [transport.py] [_log()] server lang: <none>
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] kex follows: False
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] Compression: none
2025-12-03T19:45:15.368 [DEBUG] [Thread-122564] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:45:15.387 [DEBUG] [Thread-122564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:45:15.387 [DEBUG] [Thread-122564] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:45:15.388 [DEBUG] [Thread-122564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:45:15.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:45:15.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:45:15.390 [DEBUG] [Thread-122564] [transport.py] [_log()] userauth is OK
2025-12-03T19:45:15.390 [DEBUG] [Thread-122564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:45:15.390 [DEBUG] [Thread-122564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:45:15.390 [DEBUG] [Thread-122564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:45:15.390 [DEBUG] [Thread-122564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:45:15.427 [INFO] [Thread-122564] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:45:15.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:45:16.088 [DEBUG] [Thread-122564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:45:16.089 [DEBUG] [Thread-122564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:45:16.089 [DEBUG] [Thread-122564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:45:16.130 [DEBUG] [Thread-122564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:45:16.130 [DEBUG] [Thread-122564] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:45:16.133 [DEBUG] [Thread-122564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:45:16.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:45:16.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:45:16.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:45:16.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:45:16.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:45:16.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:45:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:45:16.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:45:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:45:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.739283 -999.00  +17.80  18.56     35   +2.20 1 1 1 1 1   747    0 13.15 -109.92 ----- 18.6 18.6 151.0 24.5 18.5 -26.0 18.4 -25.6 18.2 -24.0 18.5 -24.7
2025-12-03T19:45:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:45:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:45:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.739283
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:45:16.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:44:58', tmtdew=18.01, humidity=29.61, cloud=0.0, wind=24.88, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:44:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:45:16.157 [DEBUG] [Thread-122564] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:45:16.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:45:16.252 [DEBUG] [Thread-122567] [transport.py] [_log()] starting thread (client mode): 0xa2762470
2025-12-03T19:45:16.252 [DEBUG] [Thread-122567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:45:16.268 [DEBUG] [Thread-122567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:45:16.268 [INFO] [Thread-122567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:45:16.275 [DEBUG] [Thread-122567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:45:16.276 [DEBUG] [Thread-122567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:45:16.276 [DEBUG] [Thread-122567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:45:16.276 [DEBUG] [Thread-122567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:16.276 [DEBUG] [Thread-122567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] client lang: <none>
2025-12-03T19:45:16.277 [DEBUG] [Thread-122567] [transport.py] [_log()] server lang: <none>
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] kex follows: False
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:45:16.278 [DEBUG] [Thread-122567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:45:16.279 [DEBUG] [Thread-122567] [transport.py] [_log()] Compression: none
2025-12-03T19:45:16.279 [DEBUG] [Thread-122567] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:45:16.331 [DEBUG] [Thread-122567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:45:16.332 [DEBUG] [Thread-122567] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:45:16.333 [DEBUG] [Thread-122567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:45:16.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:45:16.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:45:16.388 [DEBUG] [Thread-122567] [transport.py] [_log()] userauth is OK
2025-12-03T19:45:16.388 [DEBUG] [Thread-122567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:45:16.388 [DEBUG] [Thread-122567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:45:16.388 [DEBUG] [Thread-122567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:45:16.388 [DEBUG] [Thread-122567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:45:16.409 [INFO] [Thread-122567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:45:16.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:45:16.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:45:17.252 [DEBUG] [Thread-122567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:45:17.252 [DEBUG] [Thread-122567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:45:17.300 [DEBUG] [Thread-122567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:45:17.300 [DEBUG] [Thread-122567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:45:17.309 [DEBUG] [Thread-122567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:45:17.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:45:17.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:45:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:45:17.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:45:17.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:45:17.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:45:17.347 [DEBUG] [Thread-122567] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:45:20.720 [DEBUG] [Thread-122569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:35.773 [DEBUG] [Thread-122570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:47.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:45:47.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:45:47.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:45:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 45, 30), 18.02, 29.57, 0.0, 24.72, 17.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:45:48.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:45:30
2025-12-03T19:45:48.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:45:48.372 [DEBUG] [Thread-122571] [transport.py] [_log()] starting thread (client mode): 0xa271e650
2025-12-03T19:45:48.372 [DEBUG] [Thread-122571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:45:48.391 [DEBUG] [Thread-122571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:45:48.391 [INFO] [Thread-122571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] client lang: <none>
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] server lang: <none>
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] kex follows: False
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] Compression: none
2025-12-03T19:45:48.394 [DEBUG] [Thread-122571] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:45:48.409 [DEBUG] [Thread-122571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:45:48.409 [DEBUG] [Thread-122571] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:45:48.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:45:48.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] userauth is OK
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:45:48.410 [DEBUG] [Thread-122571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:45:48.419 [INFO] [Thread-122571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:45:48.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:45:49.248 [DEBUG] [Thread-122571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:45:49.248 [DEBUG] [Thread-122571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:45:49.248 [DEBUG] [Thread-122571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:45:49.288 [DEBUG] [Thread-122571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:45:49.288 [DEBUG] [Thread-122571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:45:49.290 [DEBUG] [Thread-122571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:45:49.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:45:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:45:49.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:45:49.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:45:49.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:45:49.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:45:49.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.739630 -999.00  +17.80  19.49     35   +2.20 1 1 1 1 1   736    0 12.36 -128.60 ----- 19.5 19.5 154.9 24.1 18.4 -26.0 18.4 -25.5 18.2 -24.0 18.4 -24.8
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.739630
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:45:49.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:45:30', tmtdew=18.02, humidity=29.57, cloud=0.0, wind=24.72, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:45:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:45:49.307 [DEBUG] [Thread-122571] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:45:49.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:45:49.393 [DEBUG] [Thread-122574] [transport.py] [_log()] starting thread (client mode): 0xa2750e80
2025-12-03T19:45:49.393 [DEBUG] [Thread-122574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:45:49.408 [DEBUG] [Thread-122574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:45:49.408 [INFO] [Thread-122574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] client lang: <none>
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] server lang: <none>
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] kex follows: False
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] Compression: none
2025-12-03T19:45:49.416 [DEBUG] [Thread-122574] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:45:49.470 [DEBUG] [Thread-122574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:45:49.471 [DEBUG] [Thread-122574] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:45:49.471 [DEBUG] [Thread-122574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:45:49.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:45:49.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:45:49.527 [DEBUG] [Thread-122574] [transport.py] [_log()] userauth is OK
2025-12-03T19:45:49.527 [DEBUG] [Thread-122574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:45:49.527 [DEBUG] [Thread-122574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:45:49.527 [DEBUG] [Thread-122574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:45:49.528 [DEBUG] [Thread-122574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:45:49.542 [INFO] [Thread-122574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:45:49.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:45:49.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:45:50.384 [DEBUG] [Thread-122574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:45:50.384 [DEBUG] [Thread-122574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:45:50.432 [DEBUG] [Thread-122574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:45:50.432 [DEBUG] [Thread-122574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:45:50.440 [DEBUG] [Thread-122574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:45:50.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:45:50.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:45:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:45:50.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:45:50.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:45:50.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:45:50.471 [DEBUG] [Thread-122574] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:45:50.803 [DEBUG] [Thread-122576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:58.485 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:45:58.486 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:04.112 [DEBUG] [Thread-122577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:05.840 [DEBUG] [Thread-122578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:20.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:46:20.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:46:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:46:20.865 [DEBUG] [Thread-122579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:21.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 46, 2), 17.99, 29.66, 0.0, 24.23, 17.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:46:21.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:46:02
2025-12-03T19:46:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:46:21.472 [DEBUG] [Thread-122580] [transport.py] [_log()] starting thread (client mode): 0xa271ca60
2025-12-03T19:46:21.472 [DEBUG] [Thread-122580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:46:21.493 [DEBUG] [Thread-122580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:46:21.493 [INFO] [Thread-122580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] client lang: <none>
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] server lang: <none>
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] kex follows: False
2025-12-03T19:46:21.495 [DEBUG] [Thread-122580] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] Compression: none
2025-12-03T19:46:21.496 [DEBUG] [Thread-122580] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:46:21.506 [DEBUG] [Thread-122580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:46:21.507 [DEBUG] [Thread-122580] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:46:21.507 [DEBUG] [Thread-122580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:46:21.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:46:21.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:46:21.509 [DEBUG] [Thread-122580] [transport.py] [_log()] userauth is OK
2025-12-03T19:46:21.509 [DEBUG] [Thread-122580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:46:21.509 [DEBUG] [Thread-122580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:46:21.509 [DEBUG] [Thread-122580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:46:21.509 [DEBUG] [Thread-122580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:46:21.533 [INFO] [Thread-122580] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:46:21.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:46:22.152 [DEBUG] [Thread-122580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:46:22.152 [DEBUG] [Thread-122580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:46:22.152 [DEBUG] [Thread-122580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:46:22.194 [DEBUG] [Thread-122580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:46:22.194 [DEBUG] [Thread-122580] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:46:22.196 [DEBUG] [Thread-122580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:46:22.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:46:22.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:46:22.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:46:22.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:46:22.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:46:22.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:46:22.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:46:22.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:46:22.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:46:22.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.739977 -999.00  +17.80  16.50     35   +2.20 1 1 1 1 1   724    0 12.43 -124.39 ----- 16.5 16.5 145.6 26.4 18.4 -26.0 18.4 -25.4 18.2 -23.8 18.4 -24.8
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.739977
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:46:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:46:02', tmtdew=17.99, humidity=29.66, cloud=0.0, wind=24.23, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:45:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:46:22.216 [DEBUG] [Thread-122580] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:46:22.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:46:22.298 [DEBUG] [Thread-122583] [transport.py] [_log()] starting thread (client mode): 0xa277b2e0
2025-12-03T19:46:22.299 [DEBUG] [Thread-122583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:46:22.313 [DEBUG] [Thread-122583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:46:22.313 [INFO] [Thread-122583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] client lang: <none>
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] server lang: <none>
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] kex follows: False
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] Compression: none
2025-12-03T19:46:22.321 [DEBUG] [Thread-122583] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:46:22.378 [DEBUG] [Thread-122583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:46:22.380 [DEBUG] [Thread-122583] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:46:22.381 [DEBUG] [Thread-122583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:46:22.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:46:22.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:46:22.436 [DEBUG] [Thread-122583] [transport.py] [_log()] userauth is OK
2025-12-03T19:46:22.436 [DEBUG] [Thread-122583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:46:22.436 [DEBUG] [Thread-122583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:46:22.436 [DEBUG] [Thread-122583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:46:22.436 [DEBUG] [Thread-122583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:46:22.450 [INFO] [Thread-122583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:46:22.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:46:22.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:46:23.273 [DEBUG] [Thread-122583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:46:23.274 [DEBUG] [Thread-122583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:46:23.322 [DEBUG] [Thread-122583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:46:23.322 [DEBUG] [Thread-122583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:46:23.330 [DEBUG] [Thread-122583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:46:23.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:46:23.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:46:23.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:46:23.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:46:23.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:46:23.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:46:23.365 [DEBUG] [Thread-122583] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:46:35.889 [DEBUG] [Thread-122585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:50.927 [DEBUG] [Thread-122586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:46:53.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:46:53.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:46:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:46:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 46, 34), 17.98, 29.66, 0.0, 25.53, 17.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:46:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:46:34
2025-12-03T19:46:54.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:46:54.350 [DEBUG] [Thread-122587] [transport.py] [_log()] starting thread (client mode): 0xa277aad0
2025-12-03T19:46:54.350 [DEBUG] [Thread-122587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:46:54.370 [DEBUG] [Thread-122587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:46:54.370 [INFO] [Thread-122587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:46:54.373 [DEBUG] [Thread-122587] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] client lang: <none>
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] server lang: <none>
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] kex follows: False
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:46:54.374 [DEBUG] [Thread-122587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:46:54.375 [DEBUG] [Thread-122587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:46:54.375 [DEBUG] [Thread-122587] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:46:54.375 [DEBUG] [Thread-122587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:46:54.375 [DEBUG] [Thread-122587] [transport.py] [_log()] Compression: none
2025-12-03T19:46:54.375 [DEBUG] [Thread-122587] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:46:54.392 [DEBUG] [Thread-122587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:46:54.392 [DEBUG] [Thread-122587] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:46:54.392 [DEBUG] [Thread-122587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:46:54.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:46:54.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:46:54.394 [DEBUG] [Thread-122587] [transport.py] [_log()] userauth is OK
2025-12-03T19:46:54.394 [DEBUG] [Thread-122587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:46:54.395 [DEBUG] [Thread-122587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:46:54.395 [DEBUG] [Thread-122587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:46:54.395 [DEBUG] [Thread-122587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:46:54.429 [INFO] [Thread-122587] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:46:54.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:46:55.212 [DEBUG] [Thread-122587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:46:55.212 [DEBUG] [Thread-122587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:46:55.213 [DEBUG] [Thread-122587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:46:55.253 [DEBUG] [Thread-122587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:46:55.253 [DEBUG] [Thread-122587] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:46:55.256 [DEBUG] [Thread-122587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:46:55.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:46:55.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:46:55.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:46:55.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:46:55.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:46:55.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:46:55.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:46:55.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:46:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:46:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.740324 -999.00  +17.80  17.23     35   +2.20 1 1 1 1 1   711    0 12.39 -113.72 ----- 17.2 17.2 145.2 24.8 18.4 -25.9 18.4 -25.4 18.2 -23.9 18.4 -24.8
2025-12-03T19:46:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:46:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:46:55.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.740324
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:46:55.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:46:34', tmtdew=17.98, humidity=29.66, cloud=0.0, wind=25.53, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:46:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:46:55.283 [DEBUG] [Thread-122587] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:46:55.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:46:55.372 [DEBUG] [Thread-122590] [transport.py] [_log()] starting thread (client mode): 0xa514b8b0
2025-12-03T19:46:55.372 [DEBUG] [Thread-122590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:46:55.387 [DEBUG] [Thread-122590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:46:55.387 [INFO] [Thread-122590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:46:55.394 [DEBUG] [Thread-122590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:46:55.394 [DEBUG] [Thread-122590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:46:55.394 [DEBUG] [Thread-122590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] client lang: <none>
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] server lang: <none>
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] kex follows: False
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] Compression: none
2025-12-03T19:46:55.395 [DEBUG] [Thread-122590] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:46:55.451 [DEBUG] [Thread-122590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:46:55.451 [DEBUG] [Thread-122590] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:46:55.452 [DEBUG] [Thread-122590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:46:55.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:46:55.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:46:55.508 [DEBUG] [Thread-122590] [transport.py] [_log()] userauth is OK
2025-12-03T19:46:55.508 [DEBUG] [Thread-122590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:46:55.508 [DEBUG] [Thread-122590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:46:55.508 [DEBUG] [Thread-122590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:46:55.508 [DEBUG] [Thread-122590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:46:55.527 [INFO] [Thread-122590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:46:55.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:46:55.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:46:56.384 [DEBUG] [Thread-122590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:46:56.384 [DEBUG] [Thread-122590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:46:56.431 [DEBUG] [Thread-122590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:46:56.431 [DEBUG] [Thread-122590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:46:56.440 [DEBUG] [Thread-122590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:46:56.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:46:56.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:46:56.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:46:56.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:46:56.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:46:56.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:46:56.473 [DEBUG] [Thread-122590] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:47:02.686 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:02.687 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:04.179 [DEBUG] [Thread-122592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:05.957 [DEBUG] [Thread-122593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:20.996 [DEBUG] [Thread-122594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:47:26.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:47:26.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:47:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 47, 6), 17.97, 29.67, 0.0, 24.23, 17.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:47:27.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:47:06
2025-12-03T19:47:27.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:47:27.457 [DEBUG] [Thread-122595] [transport.py] [_log()] starting thread (client mode): 0xa271e6e0
2025-12-03T19:47:27.457 [DEBUG] [Thread-122595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:47:27.478 [DEBUG] [Thread-122595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:47:27.479 [INFO] [Thread-122595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:47:27.482 [DEBUG] [Thread-122595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] client lang: <none>
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] server lang: <none>
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] kex follows: False
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:47:27.483 [DEBUG] [Thread-122595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:47:27.484 [DEBUG] [Thread-122595] [transport.py] [_log()] Compression: none
2025-12-03T19:47:27.484 [DEBUG] [Thread-122595] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:47:27.492 [DEBUG] [Thread-122595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:47:27.493 [DEBUG] [Thread-122595] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:47:27.493 [DEBUG] [Thread-122595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:47:27.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:47:27.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:47:27.495 [DEBUG] [Thread-122595] [transport.py] [_log()] userauth is OK
2025-12-03T19:47:27.495 [DEBUG] [Thread-122595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:47:27.495 [DEBUG] [Thread-122595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:47:27.496 [DEBUG] [Thread-122595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:47:27.496 [DEBUG] [Thread-122595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:47:27.519 [INFO] [Thread-122595] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:47:27.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:47:28.146 [DEBUG] [Thread-122595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:47:28.147 [DEBUG] [Thread-122595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:47:28.147 [DEBUG] [Thread-122595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:47:28.188 [DEBUG] [Thread-122595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:47:28.188 [DEBUG] [Thread-122595] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:47:28.191 [DEBUG] [Thread-122595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:47:28.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:47:28.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:47:28.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:47:28.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:47:28.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:47:28.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:47:28.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:47:28.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:47:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:47:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.740672 -999.00  +17.80  21.00     35   +2.20 1 1 1 1 1   697    0 13.14 -111.36 ----- 21.0 21.0 152.4 25.4 18.4 -25.9 18.3 -25.4 18.1 -23.9 18.4 -24.6
2025-12-03T19:47:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:47:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:47:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.740672
2025-12-03T19:47:28.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:47:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:47:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:47:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:47:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:47:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:47:06', tmtdew=17.97, humidity=29.67, cloud=0.0, wind=24.23, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:46:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:47:28.215 [DEBUG] [Thread-122595] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:47:28.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:47:28.312 [DEBUG] [Thread-122598] [transport.py] [_log()] starting thread (client mode): 0xa277a380
2025-12-03T19:47:28.312 [DEBUG] [Thread-122598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:47:28.331 [DEBUG] [Thread-122598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:47:28.331 [INFO] [Thread-122598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:47:28.339 [DEBUG] [Thread-122598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:47:28.339 [DEBUG] [Thread-122598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:47:28.339 [DEBUG] [Thread-122598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:47:28.339 [DEBUG] [Thread-122598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] client lang: <none>
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] server lang: <none>
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] kex follows: False
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] Compression: none
2025-12-03T19:47:28.340 [DEBUG] [Thread-122598] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:47:28.400 [DEBUG] [Thread-122598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:47:28.400 [DEBUG] [Thread-122598] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:47:28.401 [DEBUG] [Thread-122598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:47:28.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:47:28.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:47:28.457 [DEBUG] [Thread-122598] [transport.py] [_log()] userauth is OK
2025-12-03T19:47:28.458 [DEBUG] [Thread-122598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:47:28.458 [DEBUG] [Thread-122598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:47:28.458 [DEBUG] [Thread-122598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:47:28.458 [DEBUG] [Thread-122598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:47:28.479 [INFO] [Thread-122598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:47:28.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:47:28.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:47:29.350 [DEBUG] [Thread-122598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:47:29.351 [DEBUG] [Thread-122598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:47:29.398 [DEBUG] [Thread-122598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:47:29.399 [DEBUG] [Thread-122598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:47:29.407 [DEBUG] [Thread-122598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:47:29.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:47:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:47:29.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:47:29.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:47:29.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:47:29.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:47:29.443 [DEBUG] [Thread-122598] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:47:36.027 [DEBUG] [Thread-122600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:51.071 [DEBUG] [Thread-122601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:47:59.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:47:59.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:47:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:48:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 47, 38), 17.97, 29.67, 0.0, 26.5, 17.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:48:00.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:47:38
2025-12-03T19:48:00.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:48:00.398 [DEBUG] [Thread-122602] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T19:48:00.398 [DEBUG] [Thread-122602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:48:00.417 [DEBUG] [Thread-122602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:48:00.418 [INFO] [Thread-122602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] client lang: <none>
2025-12-03T19:48:00.421 [DEBUG] [Thread-122602] [transport.py] [_log()] server lang: <none>
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] kex follows: False
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] Compression: none
2025-12-03T19:48:00.422 [DEBUG] [Thread-122602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:48:00.438 [DEBUG] [Thread-122602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:48:00.439 [DEBUG] [Thread-122602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:48:00.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:48:00.439 [DEBUG] [Thread-122602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:48:00.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:48:00.441 [DEBUG] [Thread-122602] [transport.py] [_log()] userauth is OK
2025-12-03T19:48:00.441 [DEBUG] [Thread-122602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:48:00.441 [DEBUG] [Thread-122602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:48:00.441 [DEBUG] [Thread-122602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:48:00.441 [DEBUG] [Thread-122602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:48:00.458 [INFO] [Thread-122602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:48:00.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:48:01.225 [DEBUG] [Thread-122602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:48:01.225 [DEBUG] [Thread-122602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:48:01.226 [DEBUG] [Thread-122602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:48:01.267 [DEBUG] [Thread-122602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:48:01.267 [DEBUG] [Thread-122602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:48:01.270 [DEBUG] [Thread-122602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:48:01.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:48:01.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:48:01.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:48:01.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:48:01.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:48:01.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:48:01.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:48:01.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.741366 -999.00  +17.80  18.48     35   +2.20 1 1 1 1 1   669    0 13.07 -99.50 ----- 18.5 18.5 167.2 27.0 18.3 -25.8 18.3 -25.5 18.1 -23.9 18.4 -24.7
2025-12-03T19:48:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:48:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:48:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.741366
2025-12-03T19:48:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:48:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:48:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:48:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:48:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:48:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:47:38', tmtdew=17.97, humidity=29.67, cloud=0.0, wind=26.5, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:47:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:48:01.295 [DEBUG] [Thread-122602] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:48:01.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:48:01.390 [DEBUG] [Thread-122605] [transport.py] [_log()] starting thread (client mode): 0xa277b640
2025-12-03T19:48:01.390 [DEBUG] [Thread-122605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:48:01.405 [DEBUG] [Thread-122605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:48:01.405 [INFO] [Thread-122605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:48:01.413 [DEBUG] [Thread-122605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:48:01.413 [DEBUG] [Thread-122605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:48:01.413 [DEBUG] [Thread-122605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] client lang: <none>
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] server lang: <none>
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] kex follows: False
2025-12-03T19:48:01.414 [DEBUG] [Thread-122605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] Compression: none
2025-12-03T19:48:01.415 [DEBUG] [Thread-122605] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:48:01.471 [DEBUG] [Thread-122605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:48:01.472 [DEBUG] [Thread-122605] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:48:01.472 [DEBUG] [Thread-122605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:48:01.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:48:01.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:48:01.528 [DEBUG] [Thread-122605] [transport.py] [_log()] userauth is OK
2025-12-03T19:48:01.528 [DEBUG] [Thread-122605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:48:01.528 [DEBUG] [Thread-122605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:48:01.528 [DEBUG] [Thread-122605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:48:01.529 [DEBUG] [Thread-122605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:48:01.547 [INFO] [Thread-122605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:48:01.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:48:01.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:48:02.423 [DEBUG] [Thread-122605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:48:02.423 [DEBUG] [Thread-122605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:48:02.471 [DEBUG] [Thread-122605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:48:02.471 [DEBUG] [Thread-122605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:48:02.480 [DEBUG] [Thread-122605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:48:02.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:48:02.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:48:02.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:48:02.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:48:02.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:48:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:48:02.515 [DEBUG] [Thread-122605] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:48:04.252 [DEBUG] [Thread-122607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:06.101 [DEBUG] [Thread-122608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:16.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:16.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:21.140 [DEBUG] [Thread-122609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:32.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:48:32.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:48:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:48:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 48, 11), 17.95, 29.71, 0.0, 27.88, 17.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:48:33.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:48:11
2025-12-03T19:48:33.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:48:33.489 [DEBUG] [Thread-122610] [transport.py] [_log()] starting thread (client mode): 0xa2761d80
2025-12-03T19:48:33.489 [DEBUG] [Thread-122610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:48:33.509 [DEBUG] [Thread-122610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:48:33.509 [INFO] [Thread-122610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] client lang: <none>
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] server lang: <none>
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] kex follows: False
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] Compression: none
2025-12-03T19:48:33.513 [DEBUG] [Thread-122610] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:48:33.530 [DEBUG] [Thread-122610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:48:33.530 [DEBUG] [Thread-122610] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:48:33.531 [DEBUG] [Thread-122610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:48:33.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:48:33.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:48:33.533 [DEBUG] [Thread-122610] [transport.py] [_log()] userauth is OK
2025-12-03T19:48:33.533 [DEBUG] [Thread-122610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:48:33.533 [DEBUG] [Thread-122610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:48:33.533 [DEBUG] [Thread-122610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:48:33.533 [DEBUG] [Thread-122610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:48:33.558 [INFO] [Thread-122610] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:48:33.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:48:34.180 [DEBUG] [Thread-122610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:48:34.180 [DEBUG] [Thread-122610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:48:34.180 [DEBUG] [Thread-122610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:48:34.221 [DEBUG] [Thread-122610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:48:34.221 [DEBUG] [Thread-122610] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:48:34.224 [DEBUG] [Thread-122610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:48:34.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:48:34.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:48:34.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:48:34.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:48:34.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:48:34.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:48:34.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:48:34.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:48:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:48:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.741713 -999.00  +17.70  17.71     35   +2.20 1 1 1 1 1   653    0 13.21 -108.74 ----- 17.7 17.7 153.3 27.1 18.3 -25.9 18.2 -25.4 18.1 -23.6 18.3 -24.6
2025-12-03T19:48:34.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:48:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:48:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.741713
2025-12-03T19:48:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:48:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:48:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:48:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:48:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:48:34.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:48:11', tmtdew=17.95, humidity=29.71, cloud=0.0, wind=27.88, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:48:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:48:34.246 [DEBUG] [Thread-122610] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:48:34.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:48:34.345 [DEBUG] [Thread-122613] [transport.py] [_log()] starting thread (client mode): 0xa271f370
2025-12-03T19:48:34.345 [DEBUG] [Thread-122613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:48:34.359 [DEBUG] [Thread-122613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:48:34.359 [INFO] [Thread-122613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:48:34.367 [DEBUG] [Thread-122613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:48:34.367 [DEBUG] [Thread-122613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:48:34.367 [DEBUG] [Thread-122613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] client lang: <none>
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] server lang: <none>
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] kex follows: False
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] Compression: none
2025-12-03T19:48:34.368 [DEBUG] [Thread-122613] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:48:34.423 [DEBUG] [Thread-122613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:48:34.423 [DEBUG] [Thread-122613] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:48:34.424 [DEBUG] [Thread-122613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:48:34.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:48:34.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:48:34.480 [DEBUG] [Thread-122613] [transport.py] [_log()] userauth is OK
2025-12-03T19:48:34.480 [DEBUG] [Thread-122613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:48:34.480 [DEBUG] [Thread-122613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:48:34.480 [DEBUG] [Thread-122613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:48:34.480 [DEBUG] [Thread-122613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:48:34.499 [INFO] [Thread-122613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:48:34.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:48:34.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:48:35.342 [DEBUG] [Thread-122613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:48:35.343 [DEBUG] [Thread-122613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:48:35.391 [DEBUG] [Thread-122613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:48:35.391 [DEBUG] [Thread-122613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:48:35.399 [DEBUG] [Thread-122613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:48:35.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:48:35.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:48:35.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:48:35.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:48:35.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:48:35.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:48:35.433 [DEBUG] [Thread-122613] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:48:36.165 [DEBUG] [Thread-122615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:48:51.210 [DEBUG] [Thread-122616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:04.313 [DEBUG] [Thread-122617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:05.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:49:05.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:49:05.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:49:06.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 48, 43), 17.95, 29.72, 0.0, 24.84, 17.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:49:06.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:48:43
2025-12-03T19:49:06.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:49:06.240 [DEBUG] [Thread-122618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:06.385 [DEBUG] [Thread-122619] [transport.py] [_log()] starting thread (client mode): 0xa27c99f0
2025-12-03T19:49:06.385 [DEBUG] [Thread-122619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:49:06.405 [DEBUG] [Thread-122619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:49:06.406 [INFO] [Thread-122619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] client lang: <none>
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] server lang: <none>
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] kex follows: False
2025-12-03T19:49:06.409 [DEBUG] [Thread-122619] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] Compression: none
2025-12-03T19:49:06.410 [DEBUG] [Thread-122619] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:49:06.428 [DEBUG] [Thread-122619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:49:06.428 [DEBUG] [Thread-122619] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:49:06.429 [DEBUG] [Thread-122619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:49:06.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:49:06.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:49:06.431 [DEBUG] [Thread-122619] [transport.py] [_log()] userauth is OK
2025-12-03T19:49:06.431 [DEBUG] [Thread-122619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:49:06.431 [DEBUG] [Thread-122619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:49:06.431 [DEBUG] [Thread-122619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:49:06.431 [DEBUG] [Thread-122619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:49:06.449 [INFO] [Thread-122619] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:49:06.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:49:07.207 [DEBUG] [Thread-122619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:49:07.207 [DEBUG] [Thread-122619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:49:07.207 [DEBUG] [Thread-122619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:49:07.248 [DEBUG] [Thread-122619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:49:07.248 [DEBUG] [Thread-122619] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:49:07.252 [DEBUG] [Thread-122619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:49:07.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:49:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:49:07.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:49:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:49:07.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:49:07.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:49:07.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:49:07.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:49:07.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.742060 -999.00  +17.70  15.07     35   +2.20 1 1 1 1 1   637    0 13.54 -95.76 ----- 15.1 15.1 154.1 25.4 18.3 -25.7 18.2 -25.4 18.0 -23.8 18.3 -24.6
2025-12-03T19:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.742060
2025-12-03T19:49:07.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:49:07.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:48:43', tmtdew=17.95, humidity=29.72, cloud=0.0, wind=24.84, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:48:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:49:07.276 [DEBUG] [Thread-122619] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:49:07.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:49:07.369 [DEBUG] [Thread-122622] [transport.py] [_log()] starting thread (client mode): 0xa271ed70
2025-12-03T19:49:07.369 [DEBUG] [Thread-122622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:49:07.384 [DEBUG] [Thread-122622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:49:07.384 [INFO] [Thread-122622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:49:07.391 [DEBUG] [Thread-122622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:49:07.391 [DEBUG] [Thread-122622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:49:07.391 [DEBUG] [Thread-122622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:49:07.391 [DEBUG] [Thread-122622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:07.391 [DEBUG] [Thread-122622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] client lang: <none>
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] server lang: <none>
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] kex follows: False
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:49:07.392 [DEBUG] [Thread-122622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:49:07.393 [DEBUG] [Thread-122622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:49:07.393 [DEBUG] [Thread-122622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:49:07.393 [DEBUG] [Thread-122622] [transport.py] [_log()] Compression: none
2025-12-03T19:49:07.393 [DEBUG] [Thread-122622] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:49:07.453 [DEBUG] [Thread-122622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:49:07.453 [DEBUG] [Thread-122622] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:49:07.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:49:07.455 [DEBUG] [Thread-122622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:49:07.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:49:07.512 [DEBUG] [Thread-122622] [transport.py] [_log()] userauth is OK
2025-12-03T19:49:07.512 [DEBUG] [Thread-122622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:49:07.512 [DEBUG] [Thread-122622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:49:07.512 [DEBUG] [Thread-122622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:49:07.512 [DEBUG] [Thread-122622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:49:07.534 [INFO] [Thread-122622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:49:07.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:49:07.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:49:08.393 [DEBUG] [Thread-122622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:49:08.393 [DEBUG] [Thread-122622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:49:08.441 [DEBUG] [Thread-122622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:49:08.441 [DEBUG] [Thread-122622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:49:08.449 [DEBUG] [Thread-122622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:49:08.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:49:08.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:49:08.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:49:08.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:49:08.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:49:08.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:49:08.484 [DEBUG] [Thread-122622] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:49:21.265 [DEBUG] [Thread-122624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:23.340 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:23.342 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:36.298 [DEBUG] [Thread-122625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:49:38.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:49:38.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:49:38.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:49:39.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 49, 15), 17.94, 29.74, 0.0, 24.88, 17.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:49:39.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:49:15
2025-12-03T19:49:39.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:49:39.498 [DEBUG] [Thread-122626] [transport.py] [_log()] starting thread (client mode): 0xa272a290
2025-12-03T19:49:39.498 [DEBUG] [Thread-122626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:49:39.518 [DEBUG] [Thread-122626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:49:39.518 [INFO] [Thread-122626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] client lang: <none>
2025-12-03T19:49:39.521 [DEBUG] [Thread-122626] [transport.py] [_log()] server lang: <none>
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] kex follows: False
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] Compression: none
2025-12-03T19:49:39.522 [DEBUG] [Thread-122626] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:49:39.529 [DEBUG] [Thread-122626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:49:39.529 [DEBUG] [Thread-122626] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:49:39.529 [DEBUG] [Thread-122626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:49:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:49:39.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:49:39.530 [DEBUG] [Thread-122626] [transport.py] [_log()] userauth is OK
2025-12-03T19:49:39.530 [DEBUG] [Thread-122626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:49:39.530 [DEBUG] [Thread-122626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:49:39.530 [DEBUG] [Thread-122626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:49:39.530 [DEBUG] [Thread-122626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:49:39.540 [INFO] [Thread-122626] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:49:39.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:49:40.193 [DEBUG] [Thread-122626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:49:40.193 [DEBUG] [Thread-122626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:49:40.193 [DEBUG] [Thread-122626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:49:40.234 [DEBUG] [Thread-122626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:49:40.234 [DEBUG] [Thread-122626] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:49:40.237 [DEBUG] [Thread-122626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:49:40.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:49:40.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:49:40.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:49:40.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:49:40.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:49:40.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:49:40.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.742408 -999.00  +17.70  12.15     35   +2.20 1 1 1 1 1   620    0 13.25 -103.27 ----- 12.2 12.2 158.4 24.7 18.3 -25.9 18.2 -25.3 18.0 -23.8 18.3 -24.6
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.742408
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:49:40.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:49:15', tmtdew=17.94, humidity=29.74, cloud=0.0, wind=24.88, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:49:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:49:40.254 [DEBUG] [Thread-122626] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:49:40.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:49:40.340 [DEBUG] [Thread-122629] [transport.py] [_log()] starting thread (client mode): 0xa51d3640
2025-12-03T19:49:40.340 [DEBUG] [Thread-122629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:49:40.356 [DEBUG] [Thread-122629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:49:40.356 [INFO] [Thread-122629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] client lang: <none>
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] server lang: <none>
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] kex follows: False
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] Compression: none
2025-12-03T19:49:40.364 [DEBUG] [Thread-122629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:49:40.419 [DEBUG] [Thread-122629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:49:40.419 [DEBUG] [Thread-122629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:49:40.419 [DEBUG] [Thread-122629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:49:40.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:49:40.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:49:40.476 [DEBUG] [Thread-122629] [transport.py] [_log()] userauth is OK
2025-12-03T19:49:40.476 [DEBUG] [Thread-122629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:49:40.476 [DEBUG] [Thread-122629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:49:40.476 [DEBUG] [Thread-122629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:49:40.476 [DEBUG] [Thread-122629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:49:40.490 [INFO] [Thread-122629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:49:40.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:49:40.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:49:41.368 [DEBUG] [Thread-122629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:49:41.368 [DEBUG] [Thread-122629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:49:41.416 [DEBUG] [Thread-122629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:49:41.416 [DEBUG] [Thread-122629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:49:41.424 [DEBUG] [Thread-122629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:49:41.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:49:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:49:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:49:41.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:49:41.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:49:41.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:49:41.457 [DEBUG] [Thread-122629] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:49:51.326 [DEBUG] [Thread-122631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:04.377 [DEBUG] [Thread-122632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:06.371 [DEBUG] [Thread-122633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:50:11.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:50:11.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:50:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 49, 47), 17.95, 29.71, 0.0, 27.86, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:50:12.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:49:47
2025-12-03T19:50:12.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:50:12.425 [DEBUG] [Thread-122634] [transport.py] [_log()] starting thread (client mode): 0xa2762170
2025-12-03T19:50:12.425 [DEBUG] [Thread-122634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:50:12.445 [DEBUG] [Thread-122634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:50:12.445 [INFO] [Thread-122634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] client lang: <none>
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] server lang: <none>
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] kex follows: False
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] Compression: none
2025-12-03T19:50:12.447 [DEBUG] [Thread-122634] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:50:12.471 [DEBUG] [Thread-122634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:50:12.471 [DEBUG] [Thread-122634] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:50:12.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:50:12.472 [DEBUG] [Thread-122634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:50:12.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:50:12.474 [DEBUG] [Thread-122634] [transport.py] [_log()] userauth is OK
2025-12-03T19:50:12.474 [DEBUG] [Thread-122634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:50:12.474 [DEBUG] [Thread-122634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:50:12.474 [DEBUG] [Thread-122634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:50:12.474 [DEBUG] [Thread-122634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:50:12.498 [INFO] [Thread-122634] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:50:12.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:50:13.490 [DEBUG] [Thread-122634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:50:13.490 [DEBUG] [Thread-122634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:50:13.491 [DEBUG] [Thread-122634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:50:13.531 [DEBUG] [Thread-122634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:50:13.531 [DEBUG] [Thread-122634] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:50:13.533 [DEBUG] [Thread-122634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:50:13.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:50:13.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:50:13.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:50:13.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:50:13.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:50:13.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:50:13.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:50:13.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:50:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:50:13.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.742755 -999.00  +17.70  17.16     35   +2.20 1 1 1 1 1   603    0 13.11 -97.67 ----- 17.2 17.2 159.0 25.2 18.2 -25.7 18.2 -25.5 18.0 -23.7 18.3 -24.6
2025-12-03T19:50:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:50:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:50:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.742755
2025-12-03T19:50:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:50:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:50:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:50:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:50:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:50:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:49:47', tmtdew=17.95, humidity=29.71, cloud=0.0, wind=27.86, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:49:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:50:13.565 [DEBUG] [Thread-122634] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:50:13.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:50:13.660 [DEBUG] [Thread-122637] [transport.py] [_log()] starting thread (client mode): 0xa27298a0
2025-12-03T19:50:13.661 [DEBUG] [Thread-122637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:50:13.676 [DEBUG] [Thread-122637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:50:13.676 [INFO] [Thread-122637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:50:13.683 [DEBUG] [Thread-122637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] client lang: <none>
2025-12-03T19:50:13.684 [DEBUG] [Thread-122637] [transport.py] [_log()] server lang: <none>
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] kex follows: False
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] Compression: none
2025-12-03T19:50:13.685 [DEBUG] [Thread-122637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:50:13.740 [DEBUG] [Thread-122637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:50:13.741 [DEBUG] [Thread-122637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:50:13.741 [DEBUG] [Thread-122637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:50:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:50:13.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:50:13.801 [DEBUG] [Thread-122637] [transport.py] [_log()] userauth is OK
2025-12-03T19:50:13.802 [DEBUG] [Thread-122637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:50:13.802 [DEBUG] [Thread-122637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:50:13.802 [DEBUG] [Thread-122637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:50:13.802 [DEBUG] [Thread-122637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:50:13.822 [INFO] [Thread-122637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:50:13.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:50:13.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:50:14.650 [DEBUG] [Thread-122637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:50:14.650 [DEBUG] [Thread-122637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:50:14.699 [DEBUG] [Thread-122637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:50:14.699 [DEBUG] [Thread-122637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:50:14.707 [DEBUG] [Thread-122637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:50:14.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:50:14.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:50:14.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:50:14.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:50:14.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:50:14.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:50:14.739 [DEBUG] [Thread-122637] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:50:21.398 [DEBUG] [Thread-122639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:27.370 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:27.371 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:36.436 [DEBUG] [Thread-122640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:50:44.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:50:44.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:50:44.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:50:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 50, 19), 17.94, 29.72, 0.0, 26.77, 17.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:50:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:50:19
2025-12-03T19:50:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:50:45.713 [DEBUG] [Thread-122641] [transport.py] [_log()] starting thread (client mode): 0xa2729ba0
2025-12-03T19:50:45.713 [DEBUG] [Thread-122641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:50:45.735 [DEBUG] [Thread-122641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:50:45.735 [INFO] [Thread-122641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:50:45.738 [DEBUG] [Thread-122641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:50:45.738 [DEBUG] [Thread-122641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:50:45.738 [DEBUG] [Thread-122641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:50:45.738 [DEBUG] [Thread-122641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] client lang: <none>
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] server lang: <none>
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] kex follows: False
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:50:45.739 [DEBUG] [Thread-122641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:50:45.740 [DEBUG] [Thread-122641] [transport.py] [_log()] Compression: none
2025-12-03T19:50:45.740 [DEBUG] [Thread-122641] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:50:45.759 [DEBUG] [Thread-122641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:50:45.760 [DEBUG] [Thread-122641] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:50:45.761 [DEBUG] [Thread-122641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:50:45.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:50:45.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:50:45.763 [DEBUG] [Thread-122641] [transport.py] [_log()] userauth is OK
2025-12-03T19:50:45.763 [DEBUG] [Thread-122641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:50:45.763 [DEBUG] [Thread-122641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:50:45.764 [DEBUG] [Thread-122641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:50:45.764 [DEBUG] [Thread-122641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:50:45.787 [INFO] [Thread-122641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:50:45.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:50:46.375 [DEBUG] [Thread-122641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:50:46.375 [DEBUG] [Thread-122641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:50:46.375 [DEBUG] [Thread-122641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:50:46.416 [DEBUG] [Thread-122641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:50:46.416 [DEBUG] [Thread-122641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:50:46.419 [DEBUG] [Thread-122641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:50:46.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:50:46.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:50:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:50:46.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:50:46.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:50:46.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:50:46.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:50:46.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:50:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:50:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.743102 -999.00  +17.70  17.77     35   +2.20 1 1 1 1 1   585    0 13.54 -92.31 ----- 17.8 17.8 147.0 28.2 18.2 -25.9 18.2 -25.4 18.0 -23.7 18.3 -24.7
2025-12-03T19:50:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:50:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:50:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.743102
2025-12-03T19:50:46.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:50:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:50:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:50:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:50:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:50:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:50:19', tmtdew=17.94, humidity=29.72, cloud=0.0, wind=26.77, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:50:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:50:46.441 [DEBUG] [Thread-122641] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:50:46.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:50:46.538 [DEBUG] [Thread-122644] [transport.py] [_log()] starting thread (client mode): 0xa277bf10
2025-12-03T19:50:46.538 [DEBUG] [Thread-122644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:50:46.552 [DEBUG] [Thread-122644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:50:46.552 [INFO] [Thread-122644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] client lang: <none>
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] server lang: <none>
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] kex follows: False
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:50:46.560 [DEBUG] [Thread-122644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:50:46.561 [DEBUG] [Thread-122644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:50:46.561 [DEBUG] [Thread-122644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:50:46.561 [DEBUG] [Thread-122644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:50:46.561 [DEBUG] [Thread-122644] [transport.py] [_log()] Compression: none
2025-12-03T19:50:46.561 [DEBUG] [Thread-122644] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:50:46.623 [DEBUG] [Thread-122644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:50:46.623 [DEBUG] [Thread-122644] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:50:46.624 [DEBUG] [Thread-122644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:50:46.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:50:46.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:50:46.680 [DEBUG] [Thread-122644] [transport.py] [_log()] userauth is OK
2025-12-03T19:50:46.680 [DEBUG] [Thread-122644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:50:46.680 [DEBUG] [Thread-122644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:50:46.681 [DEBUG] [Thread-122644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:50:46.681 [DEBUG] [Thread-122644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:50:46.704 [INFO] [Thread-122644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:50:46.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:50:46.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:50:47.573 [DEBUG] [Thread-122644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:50:47.573 [DEBUG] [Thread-122644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:50:47.620 [DEBUG] [Thread-122644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:50:47.621 [DEBUG] [Thread-122644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:50:47.629 [DEBUG] [Thread-122644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:50:47.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:50:47.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:50:47.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:50:47.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:50:47.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:50:47.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:50:47.663 [DEBUG] [Thread-122644] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:50:51.466 [DEBUG] [Thread-122646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:04.447 [DEBUG] [Thread-122647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:06.515 [DEBUG] [Thread-122648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:51:17.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:51:17.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:51:18.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 50, 51), 17.91, 29.69, 0.0, 24.56, 17.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:51:18.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:50:51
2025-12-03T19:51:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:51:18.630 [DEBUG] [Thread-122649] [transport.py] [_log()] starting thread (client mode): 0xa272bee0
2025-12-03T19:51:18.630 [DEBUG] [Thread-122649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:51:18.651 [DEBUG] [Thread-122649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:51:18.651 [INFO] [Thread-122649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:51:18.654 [DEBUG] [Thread-122649] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] client lang: <none>
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] server lang: <none>
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] kex follows: False
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:51:18.655 [DEBUG] [Thread-122649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:51:18.656 [DEBUG] [Thread-122649] [transport.py] [_log()] Compression: none
2025-12-03T19:51:18.656 [DEBUG] [Thread-122649] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:51:18.674 [DEBUG] [Thread-122649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:51:18.675 [DEBUG] [Thread-122649] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:51:18.675 [DEBUG] [Thread-122649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:51:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:51:18.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:51:18.679 [DEBUG] [Thread-122649] [transport.py] [_log()] userauth is OK
2025-12-03T19:51:18.679 [DEBUG] [Thread-122649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:51:18.679 [DEBUG] [Thread-122649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:51:18.679 [DEBUG] [Thread-122649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:51:18.679 [DEBUG] [Thread-122649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:51:18.703 [INFO] [Thread-122649] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:51:18.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:51:19.418 [DEBUG] [Thread-122649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:51:19.418 [DEBUG] [Thread-122649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:51:19.419 [DEBUG] [Thread-122649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:51:19.459 [DEBUG] [Thread-122649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:51:19.459 [DEBUG] [Thread-122649] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:51:19.462 [DEBUG] [Thread-122649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:51:19.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:51:19.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:51:19.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:51:19.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:51:19.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:51:19.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:51:19.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.743449 -999.00  +17.70  21.72     35   +2.10 1 1 1 1 1   566    0 13.43 -93.23 ----- 21.7 21.7 164.1 28.1 18.2 -25.8 18.2 -25.4 18.0 -23.6 18.2 -24.6
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:51:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.743449
2025-12-03T19:51:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:51:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:51:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:51:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:51:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:51:19.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:50:51', tmtdew=17.91, humidity=29.69, cloud=0.0, wind=24.56, temperature=17.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:50:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:51:19.487 [DEBUG] [Thread-122649] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:51:19.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:51:19.589 [DEBUG] [Thread-122652] [transport.py] [_log()] starting thread (client mode): 0xa514ba30
2025-12-03T19:51:19.590 [DEBUG] [Thread-122652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:51:19.605 [DEBUG] [Thread-122652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:51:19.605 [INFO] [Thread-122652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:51:19.612 [DEBUG] [Thread-122652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:51:19.613 [DEBUG] [Thread-122652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] client lang: <none>
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] server lang: <none>
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] kex follows: False
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] Compression: none
2025-12-03T19:51:19.614 [DEBUG] [Thread-122652] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:51:19.671 [DEBUG] [Thread-122652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:51:19.671 [DEBUG] [Thread-122652] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:51:19.672 [DEBUG] [Thread-122652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:51:19.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:51:19.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:51:19.728 [DEBUG] [Thread-122652] [transport.py] [_log()] userauth is OK
2025-12-03T19:51:19.728 [DEBUG] [Thread-122652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:51:19.728 [DEBUG] [Thread-122652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:51:19.728 [DEBUG] [Thread-122652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:51:19.728 [DEBUG] [Thread-122652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:51:19.747 [INFO] [Thread-122652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:51:19.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:51:19.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:51:20.589 [DEBUG] [Thread-122652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:51:20.589 [DEBUG] [Thread-122652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:51:20.638 [DEBUG] [Thread-122652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:51:20.638 [DEBUG] [Thread-122652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:51:20.647 [DEBUG] [Thread-122652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:51:20.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:51:20.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:51:20.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:51:20.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:51:20.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:51:20.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:51:20.686 [DEBUG] [Thread-122652] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:51:21.545 [DEBUG] [Thread-122654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:33.726 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:33.727 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:36.585 [DEBUG] [Thread-122655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:50.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:51:50.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:51:50.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:51:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 51, 23), 17.9, 29.72, 0.0, 23.87, 17.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:51:51.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:51:23
2025-12-03T19:51:51.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:51:51.612 [DEBUG] [Thread-122656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:51:51.679 [DEBUG] [Thread-122657] [transport.py] [_log()] starting thread (client mode): 0xa272a830
2025-12-03T19:51:51.679 [DEBUG] [Thread-122657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:51:51.700 [DEBUG] [Thread-122657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:51:51.700 [INFO] [Thread-122657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:51.703 [DEBUG] [Thread-122657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] client lang: <none>
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] server lang: <none>
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] kex follows: False
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] Compression: none
2025-12-03T19:51:51.704 [DEBUG] [Thread-122657] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:51:51.721 [DEBUG] [Thread-122657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:51:51.721 [DEBUG] [Thread-122657] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:51:51.722 [DEBUG] [Thread-122657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:51:51.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:51:51.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:51:51.723 [DEBUG] [Thread-122657] [transport.py] [_log()] userauth is OK
2025-12-03T19:51:51.723 [DEBUG] [Thread-122657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:51:51.724 [DEBUG] [Thread-122657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:51:51.724 [DEBUG] [Thread-122657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:51:51.724 [DEBUG] [Thread-122657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:51:51.756 [INFO] [Thread-122657] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:51:51.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:51:52.358 [DEBUG] [Thread-122657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:51:52.358 [DEBUG] [Thread-122657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:51:52.359 [DEBUG] [Thread-122657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:51:52.404 [DEBUG] [Thread-122657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:51:52.404 [DEBUG] [Thread-122657] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:51:52.408 [DEBUG] [Thread-122657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:51:52.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:51:52.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:51:52.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:51:52.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:51:52.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:51:52.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:51:52.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:51:52.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:51:52.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:51:52.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.743802 -999.00  +17.70  13.95     35   +2.10 1 1 1 1 1   547    0 13.67 -85.63 ----- 13.9 13.9 174.2 22.5 18.2 -25.7 18.2 -25.4 17.9 -23.6 18.2 -24.6
2025-12-03T19:51:52.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:51:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:51:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.743802
2025-12-03T19:51:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:51:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:51:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:51:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:51:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:51:52.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:51:23', tmtdew=17.9, humidity=29.72, cloud=0.0, wind=23.87, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:51:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:51:52.431 [DEBUG] [Thread-122657] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:51:52.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:51:52.528 [DEBUG] [Thread-122660] [transport.py] [_log()] starting thread (client mode): 0xa272a8c0
2025-12-03T19:51:52.528 [DEBUG] [Thread-122660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:51:52.543 [DEBUG] [Thread-122660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:51:52.544 [INFO] [Thread-122660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:51:52.551 [DEBUG] [Thread-122660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:51:52.551 [DEBUG] [Thread-122660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] client lang: <none>
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] server lang: <none>
2025-12-03T19:51:52.552 [DEBUG] [Thread-122660] [transport.py] [_log()] kex follows: False
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] Compression: none
2025-12-03T19:51:52.553 [DEBUG] [Thread-122660] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:51:52.607 [DEBUG] [Thread-122660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:51:52.608 [DEBUG] [Thread-122660] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:51:52.608 [DEBUG] [Thread-122660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:51:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:51:52.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:51:52.665 [DEBUG] [Thread-122660] [transport.py] [_log()] userauth is OK
2025-12-03T19:51:52.665 [DEBUG] [Thread-122660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:51:52.665 [DEBUG] [Thread-122660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:51:52.665 [DEBUG] [Thread-122660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:51:52.665 [DEBUG] [Thread-122660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:51:52.679 [INFO] [Thread-122660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:51:52.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:51:52.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:51:53.541 [DEBUG] [Thread-122660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:51:53.541 [DEBUG] [Thread-122660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:51:53.589 [DEBUG] [Thread-122660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:51:53.589 [DEBUG] [Thread-122660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:51:53.598 [DEBUG] [Thread-122660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:51:53.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:51:53.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:51:53.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:51:53.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:51:53.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:51:53.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:51:53.632 [DEBUG] [Thread-122660] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:52:04.506 [DEBUG] [Thread-122662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:06.639 [DEBUG] [Thread-122663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:21.682 [DEBUG] [Thread-122664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:23.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:52:23.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:52:23.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:52:24.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 51, 55), 17.91, 29.69, 0.0, 25.97, 17.76, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:52:24.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:51:55
2025-12-03T19:52:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:52:24.623 [DEBUG] [Thread-122665] [transport.py] [_log()] starting thread (client mode): 0xa2728b50
2025-12-03T19:52:24.623 [DEBUG] [Thread-122665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:52:24.643 [DEBUG] [Thread-122665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:52:24.643 [INFO] [Thread-122665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] client lang: <none>
2025-12-03T19:52:24.646 [DEBUG] [Thread-122665] [transport.py] [_log()] server lang: <none>
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] kex follows: False
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] Compression: none
2025-12-03T19:52:24.647 [DEBUG] [Thread-122665] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:52:24.665 [DEBUG] [Thread-122665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:52:24.665 [DEBUG] [Thread-122665] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:52:24.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:52:24.666 [DEBUG] [Thread-122665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:52:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:52:24.708 [DEBUG] [Thread-122665] [transport.py] [_log()] userauth is OK
2025-12-03T19:52:24.708 [DEBUG] [Thread-122665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:52:24.709 [DEBUG] [Thread-122665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:52:24.709 [DEBUG] [Thread-122665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:52:24.709 [DEBUG] [Thread-122665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:52:24.746 [INFO] [Thread-122665] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:52:24.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:52:25.466 [DEBUG] [Thread-122665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:52:25.466 [DEBUG] [Thread-122665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:52:25.466 [DEBUG] [Thread-122665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:52:25.507 [DEBUG] [Thread-122665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:52:25.507 [DEBUG] [Thread-122665] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:52:25.509 [DEBUG] [Thread-122665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:52:25.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:52:25.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:52:25.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:52:25.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:52:25.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:52:25.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:52:25.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.744144 -999.00  +17.70  21.15     35   +2.10 1 1 1 1 1   528    0 13.37 -81.53 ----- 21.1 21.1 151.4 28.7 18.2 -25.9 18.1 -25.3 17.9 -23.7 18.2 -24.5
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.744144
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:52:25.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:51:55', tmtdew=17.91, humidity=29.69, cloud=0.0, wind=25.97, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:51:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:52:25.531 [DEBUG] [Thread-122665] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:52:25.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:52:25.614 [DEBUG] [Thread-122668] [transport.py] [_log()] starting thread (client mode): 0xa514bc10
2025-12-03T19:52:25.614 [DEBUG] [Thread-122668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:52:25.628 [DEBUG] [Thread-122668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:52:25.628 [INFO] [Thread-122668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] client lang: <none>
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] server lang: <none>
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] kex follows: False
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:52:25.636 [DEBUG] [Thread-122668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:52:25.637 [DEBUG] [Thread-122668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:52:25.637 [DEBUG] [Thread-122668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:52:25.637 [DEBUG] [Thread-122668] [transport.py] [_log()] Compression: none
2025-12-03T19:52:25.637 [DEBUG] [Thread-122668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:52:25.699 [DEBUG] [Thread-122668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:52:25.700 [DEBUG] [Thread-122668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:52:25.700 [DEBUG] [Thread-122668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:52:25.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:52:25.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:52:25.756 [DEBUG] [Thread-122668] [transport.py] [_log()] userauth is OK
2025-12-03T19:52:25.756 [DEBUG] [Thread-122668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:52:25.756 [DEBUG] [Thread-122668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:52:25.756 [DEBUG] [Thread-122668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:52:25.756 [DEBUG] [Thread-122668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:52:25.775 [INFO] [Thread-122668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:52:25.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:52:25.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:52:26.616 [DEBUG] [Thread-122668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:52:26.616 [DEBUG] [Thread-122668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:52:26.665 [DEBUG] [Thread-122668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:52:26.666 [DEBUG] [Thread-122668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:52:26.674 [DEBUG] [Thread-122668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:52:26.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:52:26.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:52:26.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:52:26.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:52:26.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:52:26.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:52:26.724 [DEBUG] [Thread-122668] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:52:36.714 [DEBUG] [Thread-122670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:37.811 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:37.812 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:51.754 [DEBUG] [Thread-122671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:52:56.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:52:56.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:52:56.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:52:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 52, 27), 17.89, 29.72, 0.0, 27.86, 17.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:52:57.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:52:27
2025-12-03T19:52:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:52:57.728 [DEBUG] [Thread-122672] [transport.py] [_log()] starting thread (client mode): 0xa51d1b70
2025-12-03T19:52:57.728 [DEBUG] [Thread-122672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:52:57.748 [DEBUG] [Thread-122672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:52:57.749 [INFO] [Thread-122672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] client lang: <none>
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] server lang: <none>
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] kex follows: False
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:52:57.752 [DEBUG] [Thread-122672] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:52:57.753 [DEBUG] [Thread-122672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:52:57.753 [DEBUG] [Thread-122672] [transport.py] [_log()] Compression: none
2025-12-03T19:52:57.753 [DEBUG] [Thread-122672] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:52:57.769 [DEBUG] [Thread-122672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:52:57.770 [DEBUG] [Thread-122672] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:52:57.770 [DEBUG] [Thread-122672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:52:57.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:52:57.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:52:57.772 [DEBUG] [Thread-122672] [transport.py] [_log()] userauth is OK
2025-12-03T19:52:57.772 [DEBUG] [Thread-122672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:52:57.772 [DEBUG] [Thread-122672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:52:57.772 [DEBUG] [Thread-122672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:52:57.772 [DEBUG] [Thread-122672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:52:57.795 [INFO] [Thread-122672] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:52:57.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:52:58.440 [DEBUG] [Thread-122672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:52:58.440 [DEBUG] [Thread-122672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:52:58.441 [DEBUG] [Thread-122672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:52:58.482 [DEBUG] [Thread-122672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:52:58.482 [DEBUG] [Thread-122672] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:52:58.485 [DEBUG] [Thread-122672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:52:58.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:52:58.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:52:58.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:52:58.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:52:58.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:52:58.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:52:58.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.744838 -999.00  +17.60  17.16     35   +2.10 1 1 1 1 1   488    0 13.94 -70.14 ----- 17.2 17.2 159.4 23.6 18.2 -25.7 18.1 -25.3 17.9 -23.6 18.2 -24.6
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:52:58.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.744838
2025-12-03T19:52:58.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:52:58.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:52:58.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:52:58.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:52:58.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:52:58.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:52:27', tmtdew=17.89, humidity=29.72, cloud=0.0, wind=27.86, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:52:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:52:58.509 [DEBUG] [Thread-122672] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:52:58.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:52:58.605 [DEBUG] [Thread-122675] [transport.py] [_log()] starting thread (client mode): 0xa51d1270
2025-12-03T19:52:58.605 [DEBUG] [Thread-122675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:52:58.620 [DEBUG] [Thread-122675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:52:58.620 [INFO] [Thread-122675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:52:58.628 [DEBUG] [Thread-122675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] client lang: <none>
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] server lang: <none>
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] kex follows: False
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:52:58.629 [DEBUG] [Thread-122675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:52:58.630 [DEBUG] [Thread-122675] [transport.py] [_log()] Compression: none
2025-12-03T19:52:58.630 [DEBUG] [Thread-122675] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:52:58.687 [DEBUG] [Thread-122675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:52:58.688 [DEBUG] [Thread-122675] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:52:58.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:52:58.689 [DEBUG] [Thread-122675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:52:58.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:52:58.744 [DEBUG] [Thread-122675] [transport.py] [_log()] userauth is OK
2025-12-03T19:52:58.744 [DEBUG] [Thread-122675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:52:58.744 [DEBUG] [Thread-122675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:52:58.744 [DEBUG] [Thread-122675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:52:58.745 [DEBUG] [Thread-122675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:52:58.764 [INFO] [Thread-122675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:52:58.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:52:58.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:52:59.585 [DEBUG] [Thread-122675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:52:59.585 [DEBUG] [Thread-122675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:52:59.632 [DEBUG] [Thread-122675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:52:59.632 [DEBUG] [Thread-122675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:52:59.641 [DEBUG] [Thread-122675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:52:59.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:52:59.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:52:59.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:52:59.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:52:59.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:52:59.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:52:59.672 [DEBUG] [Thread-122675] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:53:04.570 [DEBUG] [Thread-122677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:06.780 [DEBUG] [Thread-122678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:21.823 [DEBUG] [Thread-122679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:29.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:53:29.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:53:29.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:53:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 52, 59), 17.91, 29.67, 0.0, 25.18, 17.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:53:30.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:52:59
2025-12-03T19:53:30.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:53:30.651 [DEBUG] [Thread-122680] [transport.py] [_log()] starting thread (client mode): 0xa2761b70
2025-12-03T19:53:30.651 [DEBUG] [Thread-122680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:53:30.670 [DEBUG] [Thread-122680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:53:30.670 [INFO] [Thread-122680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] client lang: <none>
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] server lang: <none>
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] kex follows: False
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] Compression: none
2025-12-03T19:53:30.674 [DEBUG] [Thread-122680] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:53:30.693 [DEBUG] [Thread-122680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:53:30.693 [DEBUG] [Thread-122680] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:53:30.694 [DEBUG] [Thread-122680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:53:30.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:53:30.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:53:30.696 [DEBUG] [Thread-122680] [transport.py] [_log()] userauth is OK
2025-12-03T19:53:30.696 [DEBUG] [Thread-122680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:53:30.696 [DEBUG] [Thread-122680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:53:30.696 [DEBUG] [Thread-122680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:53:30.696 [DEBUG] [Thread-122680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:53:30.731 [INFO] [Thread-122680] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:53:30.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:53:31.474 [DEBUG] [Thread-122680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:53:31.474 [DEBUG] [Thread-122680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:53:31.474 [DEBUG] [Thread-122680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:53:31.515 [DEBUG] [Thread-122680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:53:31.516 [DEBUG] [Thread-122680] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:53:31.519 [DEBUG] [Thread-122680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:53:31.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:53:31.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:53:31.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:53:31.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:53:31.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:53:31.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:53:31.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:53:31.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:53:31.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:53:31.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.745185 -999.00  +17.60  18.56     35   +2.10 1 1 1 1 1   468    0 14.00 -71.82 ----- 18.6 18.6 147.2 24.2 18.1 -25.8 18.1 -25.3 17.9 -23.6 18.2 -24.5
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.745185
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:53:31.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:52:59', tmtdew=17.91, humidity=29.67, cloud=0.0, wind=25.18, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:53:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:53:31.537 [DEBUG] [Thread-122680] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:53:31.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:53:31.624 [DEBUG] [Thread-122683] [transport.py] [_log()] starting thread (client mode): 0xa2762860
2025-12-03T19:53:31.624 [DEBUG] [Thread-122683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:53:31.640 [DEBUG] [Thread-122683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:53:31.640 [INFO] [Thread-122683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] client lang: <none>
2025-12-03T19:53:31.647 [DEBUG] [Thread-122683] [transport.py] [_log()] server lang: <none>
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] kex follows: False
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] Compression: none
2025-12-03T19:53:31.648 [DEBUG] [Thread-122683] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:53:31.703 [DEBUG] [Thread-122683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:53:31.703 [DEBUG] [Thread-122683] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:53:31.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:53:31.703 [DEBUG] [Thread-122683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:53:31.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:53:31.760 [DEBUG] [Thread-122683] [transport.py] [_log()] userauth is OK
2025-12-03T19:53:31.760 [DEBUG] [Thread-122683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:53:31.760 [DEBUG] [Thread-122683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:53:31.760 [DEBUG] [Thread-122683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:53:31.760 [DEBUG] [Thread-122683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:53:31.778 [INFO] [Thread-122683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:53:31.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:53:31.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:53:32.599 [DEBUG] [Thread-122683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:53:32.599 [DEBUG] [Thread-122683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:53:32.646 [DEBUG] [Thread-122683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:53:32.646 [DEBUG] [Thread-122683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:53:32.655 [DEBUG] [Thread-122683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:53:32.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:53:32.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:53:32.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:53:32.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:53:32.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:53:32.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:53:32.686 [DEBUG] [Thread-122683] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:53:36.852 [DEBUG] [Thread-122685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:47.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:47.456 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:53:51.887 [DEBUG] [Thread-122686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:02.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:54:02.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:54:02.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:54:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 53, 31), 17.91, 29.69, 0.0, 24.77, 17.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:54:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:53:31
2025-12-03T19:54:03.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:54:03.668 [DEBUG] [Thread-122687] [transport.py] [_log()] starting thread (client mode): 0xa27631c0
2025-12-03T19:54:03.669 [DEBUG] [Thread-122687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:54:03.691 [DEBUG] [Thread-122687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:54:03.691 [INFO] [Thread-122687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] client lang: <none>
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] server lang: <none>
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] kex follows: False
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] Compression: none
2025-12-03T19:54:03.695 [DEBUG] [Thread-122687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:54:03.711 [DEBUG] [Thread-122687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:54:03.712 [DEBUG] [Thread-122687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:54:03.712 [DEBUG] [Thread-122687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:54:03.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:54:03.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:54:03.714 [DEBUG] [Thread-122687] [transport.py] [_log()] userauth is OK
2025-12-03T19:54:03.714 [DEBUG] [Thread-122687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:54:03.714 [DEBUG] [Thread-122687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:54:03.714 [DEBUG] [Thread-122687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:54:03.714 [DEBUG] [Thread-122687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:54:03.736 [INFO] [Thread-122687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:54:03.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:54:04.354 [DEBUG] [Thread-122687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:54:04.354 [DEBUG] [Thread-122687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:54:04.354 [DEBUG] [Thread-122687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:54:04.396 [DEBUG] [Thread-122687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:54:04.397 [DEBUG] [Thread-122687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:54:04.399 [DEBUG] [Thread-122687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:54:04.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:54:04.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:54:04.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:54:04.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:54:04.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:54:04.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:54:04.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.745533 -999.00  +17.60  17.28     35   +2.10 1 1 1 1 1   448    0 13.78 -75.12 ----- 17.3 17.3 165.8 22.5 18.1 -25.6 18.1 -25.4 17.9 -23.6 18.1 -24.6
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.745533
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:54:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:53:31', tmtdew=17.91, humidity=29.69, cloud=0.0, wind=24.77, temperature=17.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:53:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:54:04.416 [DEBUG] [Thread-122687] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:54:04.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:54:04.506 [DEBUG] [Thread-122690] [transport.py] [_log()] starting thread (client mode): 0xa2729660
2025-12-03T19:54:04.506 [DEBUG] [Thread-122690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:54:04.521 [DEBUG] [Thread-122690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:54:04.521 [INFO] [Thread-122690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:54:04.528 [DEBUG] [Thread-122690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] client lang: <none>
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] server lang: <none>
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] kex follows: False
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] Compression: none
2025-12-03T19:54:04.529 [DEBUG] [Thread-122690] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:54:04.587 [DEBUG] [Thread-122690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:54:04.587 [DEBUG] [Thread-122690] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:54:04.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:54:04.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:54:04.588 [DEBUG] [Thread-122690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:54:04.628 [DEBUG] [Thread-122692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:04.644 [DEBUG] [Thread-122690] [transport.py] [_log()] userauth is OK
2025-12-03T19:54:04.644 [DEBUG] [Thread-122690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:54:04.644 [DEBUG] [Thread-122690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:54:04.644 [DEBUG] [Thread-122690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:54:04.644 [DEBUG] [Thread-122690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:54:04.658 [INFO] [Thread-122690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:54:04.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:54:04.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:54:05.499 [DEBUG] [Thread-122690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:54:05.499 [DEBUG] [Thread-122690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:54:05.547 [DEBUG] [Thread-122690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:54:05.547 [DEBUG] [Thread-122690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:54:05.555 [DEBUG] [Thread-122690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:54:05.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:54:05.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:54:05.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:54:05.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:54:05.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:54:05.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:54:05.586 [DEBUG] [Thread-122690] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:54:06.921 [DEBUG] [Thread-122693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:21.961 [DEBUG] [Thread-122694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:54:35.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:54:35.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:54:36.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 54, 3), 17.9, 29.71, 0.0, 24.61, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:54:36.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:54:03
2025-12-03T19:54:36.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:54:36.567 [DEBUG] [Thread-122695] [transport.py] [_log()] starting thread (client mode): 0xa5149720
2025-12-03T19:54:36.567 [DEBUG] [Thread-122695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:54:36.587 [DEBUG] [Thread-122695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:54:36.587 [INFO] [Thread-122695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:54:36.590 [DEBUG] [Thread-122695] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] client lang: <none>
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] server lang: <none>
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] kex follows: False
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] Compression: none
2025-12-03T19:54:36.591 [DEBUG] [Thread-122695] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:54:36.605 [DEBUG] [Thread-122695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:54:36.606 [DEBUG] [Thread-122695] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:54:36.606 [DEBUG] [Thread-122695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:54:36.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:54:36.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:54:36.648 [DEBUG] [Thread-122695] [transport.py] [_log()] userauth is OK
2025-12-03T19:54:36.648 [DEBUG] [Thread-122695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:54:36.648 [DEBUG] [Thread-122695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:54:36.648 [DEBUG] [Thread-122695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:54:36.648 [DEBUG] [Thread-122695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:54:36.677 [INFO] [Thread-122695] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:54:36.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:54:36.987 [DEBUG] [Thread-122697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:37.348 [DEBUG] [Thread-122695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:54:37.348 [DEBUG] [Thread-122695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:54:37.348 [DEBUG] [Thread-122695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:54:37.388 [DEBUG] [Thread-122695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:54:37.388 [DEBUG] [Thread-122695] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:54:37.391 [DEBUG] [Thread-122695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:54:37.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:54:37.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:54:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:54:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:54:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:54:37.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:54:37.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.745880 -999.00  +17.60  15.42     35   +2.10 1 1 1 1 1   428    0 13.64 -75.64 ----- 15.4 15.4 157.6 29.7 18.1 -25.8 18.1 -25.3 17.9 -23.7 18.1 -24.6
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.745880
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:54:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:54:03', tmtdew=17.9, humidity=29.71, cloud=0.0, wind=24.61, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:54:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:54:37.409 [DEBUG] [Thread-122695] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:54:37.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:54:37.495 [DEBUG] [Thread-122699] [transport.py] [_log()] starting thread (client mode): 0xa51d0700
2025-12-03T19:54:37.495 [DEBUG] [Thread-122699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:54:37.511 [DEBUG] [Thread-122699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:54:37.511 [INFO] [Thread-122699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:54:37.518 [DEBUG] [Thread-122699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:54:37.518 [DEBUG] [Thread-122699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:54:37.518 [DEBUG] [Thread-122699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] client lang: <none>
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] server lang: <none>
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] kex follows: False
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] Compression: none
2025-12-03T19:54:37.519 [DEBUG] [Thread-122699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:54:37.582 [DEBUG] [Thread-122699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:54:37.582 [DEBUG] [Thread-122699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:54:37.582 [DEBUG] [Thread-122699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:54:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:54:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:54:37.640 [DEBUG] [Thread-122699] [transport.py] [_log()] userauth is OK
2025-12-03T19:54:37.640 [DEBUG] [Thread-122699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:54:37.640 [DEBUG] [Thread-122699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:54:37.640 [DEBUG] [Thread-122699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:54:37.640 [DEBUG] [Thread-122699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:54:37.654 [INFO] [Thread-122699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:54:37.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:54:37.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:54:38.474 [DEBUG] [Thread-122699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:54:38.474 [DEBUG] [Thread-122699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:54:38.522 [DEBUG] [Thread-122699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:54:38.522 [DEBUG] [Thread-122699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:54:38.530 [DEBUG] [Thread-122699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:54:38.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:54:38.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:54:38.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:54:38.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:54:38.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:54:38.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:54:38.564 [DEBUG] [Thread-122699] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:54:52.011 [DEBUG] [Thread-122701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:55.509 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:54:55.510 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:04.699 [DEBUG] [Thread-122702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:07.048 [DEBUG] [Thread-122703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:08.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:55:08.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:55:08.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:55:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 54, 36), 17.9, 29.71, 0.0, 23.47, 17.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:55:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:54:36
2025-12-03T19:55:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:55:09.606 [DEBUG] [Thread-122704] [transport.py] [_log()] starting thread (client mode): 0xa2762860
2025-12-03T19:55:09.606 [DEBUG] [Thread-122704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:55:09.626 [DEBUG] [Thread-122704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:55:09.626 [INFO] [Thread-122704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:55:09.627 [DEBUG] [Thread-122704] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:55:09.627 [DEBUG] [Thread-122704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:55:09.627 [DEBUG] [Thread-122704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:55:09.627 [DEBUG] [Thread-122704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] client lang: <none>
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] server lang: <none>
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] kex follows: False
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] Compression: none
2025-12-03T19:55:09.628 [DEBUG] [Thread-122704] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:55:09.638 [DEBUG] [Thread-122704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:55:09.638 [DEBUG] [Thread-122704] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:55:09.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:55:09.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] userauth is OK
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:55:09.639 [DEBUG] [Thread-122704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:55:09.650 [INFO] [Thread-122704] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:55:09.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:55:10.506 [DEBUG] [Thread-122704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:55:10.506 [DEBUG] [Thread-122704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:55:10.506 [DEBUG] [Thread-122704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:55:10.547 [DEBUG] [Thread-122704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:55:10.547 [DEBUG] [Thread-122704] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:55:10.550 [DEBUG] [Thread-122704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:55:10.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:55:10.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:55:10.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:55:10.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:55:10.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:55:10.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:55:10.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:55:10.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.746227 -999.00  +17.60  17.33     35   +2.10 1 1 1 1 1   407    0 13.82 -73.35 ----- 17.3 17.3 153.4 21.3 18.1 -25.7 18.0 -25.2 17.9 -23.6 18.1 -24.6
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.746227
2025-12-03T19:55:10.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:55:10.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:55:10.574 [DEBUG] [Thread-122704] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:55:10.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:55:10.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:55:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:55:10.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:54:36', tmtdew=17.9, humidity=29.71, cloud=0.0, wind=23.47, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:54:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:55:10.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:55:10.669 [DEBUG] [Thread-122707] [transport.py] [_log()] starting thread (client mode): 0xa277a530
2025-12-03T19:55:10.669 [DEBUG] [Thread-122707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:55:10.684 [DEBUG] [Thread-122707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:55:10.684 [INFO] [Thread-122707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:10.692 [DEBUG] [Thread-122707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] client lang: <none>
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] server lang: <none>
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] kex follows: False
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:55:10.693 [DEBUG] [Thread-122707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:55:10.694 [DEBUG] [Thread-122707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:55:10.694 [DEBUG] [Thread-122707] [transport.py] [_log()] Compression: none
2025-12-03T19:55:10.694 [DEBUG] [Thread-122707] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:55:10.748 [DEBUG] [Thread-122707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:55:10.749 [DEBUG] [Thread-122707] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:55:10.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:55:10.750 [DEBUG] [Thread-122707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:55:10.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:55:10.804 [DEBUG] [Thread-122707] [transport.py] [_log()] userauth is OK
2025-12-03T19:55:10.805 [DEBUG] [Thread-122707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:55:10.805 [DEBUG] [Thread-122707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:55:10.805 [DEBUG] [Thread-122707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:55:10.805 [DEBUG] [Thread-122707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:55:10.823 [INFO] [Thread-122707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:55:10.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:55:10.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:55:11.660 [DEBUG] [Thread-122707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:55:11.660 [DEBUG] [Thread-122707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:55:11.711 [DEBUG] [Thread-122707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:55:11.711 [DEBUG] [Thread-122707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:55:11.720 [DEBUG] [Thread-122707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:55:11.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:55:11.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:55:11.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:55:11.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:55:11.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:55:11.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:55:11.753 [DEBUG] [Thread-122707] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:55:22.076 [DEBUG] [Thread-122709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:37.116 [DEBUG] [Thread-122710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:41.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:55:41.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:55:41.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:55:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 55, 8), 17.86, 29.79, 0.0, 23.87, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:55:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:55:08
2025-12-03T19:55:42.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:55:42.759 [DEBUG] [Thread-122711] [transport.py] [_log()] starting thread (client mode): 0xa514a2c0
2025-12-03T19:55:42.759 [DEBUG] [Thread-122711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:55:42.781 [DEBUG] [Thread-122711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:55:42.781 [INFO] [Thread-122711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:42.783 [DEBUG] [Thread-122711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] client lang: <none>
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] server lang: <none>
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] kex follows: False
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] Compression: none
2025-12-03T19:55:42.784 [DEBUG] [Thread-122711] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:55:42.798 [DEBUG] [Thread-122711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:55:42.799 [DEBUG] [Thread-122711] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:55:42.799 [DEBUG] [Thread-122711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:55:42.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:55:42.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:55:42.801 [DEBUG] [Thread-122711] [transport.py] [_log()] userauth is OK
2025-12-03T19:55:42.802 [DEBUG] [Thread-122711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:55:42.802 [DEBUG] [Thread-122711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:55:42.802 [DEBUG] [Thread-122711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:55:42.802 [DEBUG] [Thread-122711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:55:42.829 [INFO] [Thread-122711] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:55:42.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:55:43.385 [DEBUG] [Thread-122711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:55:43.386 [DEBUG] [Thread-122711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:55:43.386 [DEBUG] [Thread-122711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:55:43.427 [DEBUG] [Thread-122711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:55:43.427 [DEBUG] [Thread-122711] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:55:43.439 [DEBUG] [Thread-122711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:55:43.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:55:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:55:43.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:55:43.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:55:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:55:43.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:55:43.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.746574 -999.00  +17.60  20.12     35   +2.10 1 1 1 1 1   388    0 13.52 -69.78 ----- 20.1 20.1 154.0 25.6 18.1 -25.8 18.0 -25.3 17.8 -23.6 18.1 -24.6
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:55:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.746574
2025-12-03T19:55:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:55:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:55:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:55:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:55:43.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:55:43.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:55:08', tmtdew=17.86, humidity=29.79, cloud=0.0, wind=23.87, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:55:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:55:43.457 [DEBUG] [Thread-122711] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:55:43.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:55:43.550 [DEBUG] [Thread-122714] [transport.py] [_log()] starting thread (client mode): 0xa51d0730
2025-12-03T19:55:43.550 [DEBUG] [Thread-122714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:55:43.570 [DEBUG] [Thread-122714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:55:43.570 [INFO] [Thread-122714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:55:43.578 [DEBUG] [Thread-122714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] client lang: <none>
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] server lang: <none>
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] kex follows: False
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:55:43.579 [DEBUG] [Thread-122714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:55:43.580 [DEBUG] [Thread-122714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:55:43.580 [DEBUG] [Thread-122714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:55:43.580 [DEBUG] [Thread-122714] [transport.py] [_log()] Compression: none
2025-12-03T19:55:43.580 [DEBUG] [Thread-122714] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:55:43.636 [DEBUG] [Thread-122714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:55:43.637 [DEBUG] [Thread-122714] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:55:43.638 [DEBUG] [Thread-122714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:55:43.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:55:43.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:55:43.693 [DEBUG] [Thread-122714] [transport.py] [_log()] userauth is OK
2025-12-03T19:55:43.693 [DEBUG] [Thread-122714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:55:43.694 [DEBUG] [Thread-122714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:55:43.694 [DEBUG] [Thread-122714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:55:43.694 [DEBUG] [Thread-122714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:55:43.714 [INFO] [Thread-122714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:55:43.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:55:43.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:55:44.576 [DEBUG] [Thread-122714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:55:44.576 [DEBUG] [Thread-122714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:55:44.624 [DEBUG] [Thread-122714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:55:44.624 [DEBUG] [Thread-122714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:55:44.633 [DEBUG] [Thread-122714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:55:44.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:55:44.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:55:44.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:55:44.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:55:44.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:55:44.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:55:44.667 [DEBUG] [Thread-122714] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:55:52.148 [DEBUG] [Thread-122716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:59.672 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:55:59.673 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:04.767 [DEBUG] [Thread-122717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:07.191 [DEBUG] [Thread-122718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:14.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:56:14.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:56:14.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:56:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 56, 12), 17.89, 29.71, 0.0, 26.03, 17.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:56:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:56:12
2025-12-03T19:56:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:56:15.668 [DEBUG] [Thread-122719] [transport.py] [_log()] starting thread (client mode): 0xa51d2ef0
2025-12-03T19:56:15.668 [DEBUG] [Thread-122719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:56:15.688 [DEBUG] [Thread-122719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:56:15.688 [INFO] [Thread-122719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] client lang: <none>
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] server lang: <none>
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] kex follows: False
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:56:15.691 [DEBUG] [Thread-122719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:56:15.692 [DEBUG] [Thread-122719] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:56:15.692 [DEBUG] [Thread-122719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:56:15.692 [DEBUG] [Thread-122719] [transport.py] [_log()] Compression: none
2025-12-03T19:56:15.692 [DEBUG] [Thread-122719] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:56:15.711 [DEBUG] [Thread-122719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:56:15.711 [DEBUG] [Thread-122719] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:56:15.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:56:15.712 [DEBUG] [Thread-122719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:56:15.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:56:15.714 [DEBUG] [Thread-122719] [transport.py] [_log()] userauth is OK
2025-12-03T19:56:15.714 [DEBUG] [Thread-122719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:56:15.714 [DEBUG] [Thread-122719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:56:15.714 [DEBUG] [Thread-122719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:56:15.714 [DEBUG] [Thread-122719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:56:15.738 [INFO] [Thread-122719] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:56:15.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:56:16.380 [DEBUG] [Thread-122719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:56:16.380 [DEBUG] [Thread-122719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:56:16.380 [DEBUG] [Thread-122719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:56:16.421 [DEBUG] [Thread-122719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:56:16.421 [DEBUG] [Thread-122719] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:56:16.424 [DEBUG] [Thread-122719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:56:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:56:16.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:56:16.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:56:16.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:56:16.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:56:16.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:56:16.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.746921 -999.00  +17.60  19.56     35   +2.10 1 1 1 1 1   368    0 13.53 -71.57 ----- 19.6 19.6 164.8 23.5 18.1 -25.7 18.0 -25.2 17.8 -23.6 18.1 -24.4
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:56:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.746921
2025-12-03T19:56:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:56:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:56:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:56:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:56:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:56:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:56:12', tmtdew=17.89, humidity=29.71, cloud=0.0, wind=26.03, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:55:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:56:16.448 [DEBUG] [Thread-122719] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:56:16.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:56:16.543 [DEBUG] [Thread-122722] [transport.py] [_log()] starting thread (client mode): 0xa27c9390
2025-12-03T19:56:16.544 [DEBUG] [Thread-122722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:56:16.558 [DEBUG] [Thread-122722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:56:16.559 [INFO] [Thread-122722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:56:16.566 [DEBUG] [Thread-122722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:56:16.566 [DEBUG] [Thread-122722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:56:16.566 [DEBUG] [Thread-122722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] client lang: <none>
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] server lang: <none>
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] kex follows: False
2025-12-03T19:56:16.567 [DEBUG] [Thread-122722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] Compression: none
2025-12-03T19:56:16.568 [DEBUG] [Thread-122722] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:56:16.624 [DEBUG] [Thread-122722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:56:16.624 [DEBUG] [Thread-122722] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:56:16.625 [DEBUG] [Thread-122722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:56:16.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:56:16.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:56:16.681 [DEBUG] [Thread-122722] [transport.py] [_log()] userauth is OK
2025-12-03T19:56:16.681 [DEBUG] [Thread-122722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:56:16.681 [DEBUG] [Thread-122722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:56:16.681 [DEBUG] [Thread-122722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:56:16.681 [DEBUG] [Thread-122722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:56:16.700 [INFO] [Thread-122722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:56:16.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:56:16.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:56:17.564 [DEBUG] [Thread-122722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:56:17.565 [DEBUG] [Thread-122722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:56:17.613 [DEBUG] [Thread-122722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:56:17.613 [DEBUG] [Thread-122722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:56:17.622 [DEBUG] [Thread-122722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:56:17.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:56:17.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:56:17.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:56:17.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:56:17.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:56:17.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:56:17.656 [DEBUG] [Thread-122722] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:56:22.214 [DEBUG] [Thread-122724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:24.827 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:30.947 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:37.261 [DEBUG] [Thread-122725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:56:47.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:56:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:56:48.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 56, 44), 17.91, 29.67, 0.0, 29.45, 17.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:56:48.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:56:44
2025-12-03T19:56:48.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:56:48.679 [DEBUG] [Thread-122726] [transport.py] [_log()] starting thread (client mode): 0xa27284c0
2025-12-03T19:56:48.679 [DEBUG] [Thread-122726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:56:48.699 [DEBUG] [Thread-122726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:56:48.699 [INFO] [Thread-122726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] client lang: <none>
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] server lang: <none>
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] kex follows: False
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:56:48.702 [DEBUG] [Thread-122726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:56:48.703 [DEBUG] [Thread-122726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:56:48.703 [DEBUG] [Thread-122726] [transport.py] [_log()] Compression: none
2025-12-03T19:56:48.703 [DEBUG] [Thread-122726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:56:48.718 [DEBUG] [Thread-122726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:56:48.718 [DEBUG] [Thread-122726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:56:48.718 [DEBUG] [Thread-122726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:56:48.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:56:48.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:56:48.719 [DEBUG] [Thread-122726] [transport.py] [_log()] userauth is OK
2025-12-03T19:56:48.719 [DEBUG] [Thread-122726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:56:48.719 [DEBUG] [Thread-122726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:56:48.719 [DEBUG] [Thread-122726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:56:48.719 [DEBUG] [Thread-122726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:56:48.731 [INFO] [Thread-122726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:56:48.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:56:49.363 [DEBUG] [Thread-122726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:56:49.363 [DEBUG] [Thread-122726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:56:49.363 [DEBUG] [Thread-122726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:56:49.405 [DEBUG] [Thread-122726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:56:49.405 [DEBUG] [Thread-122726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:56:49.407 [DEBUG] [Thread-122726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:56:49.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:56:49.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:56:49.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:56:49.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:56:49.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:56:49.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:56:49.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.747269 -999.00  +17.60  20.54     35   +2.10 1 1 1 1 1   348    0 13.54 -75.31 ----- 20.5 20.5 158.0 25.3 18.1 -25.7 17.9 -25.2 17.8 -23.6 18.1 -24.6
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.747269
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:56:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:56:44', tmtdew=17.91, humidity=29.67, cloud=0.0, wind=29.45, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:56:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:56:49.425 [DEBUG] [Thread-122726] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:56:49.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:56:49.510 [DEBUG] [Thread-122729] [transport.py] [_log()] starting thread (client mode): 0xa2729300
2025-12-03T19:56:49.510 [DEBUG] [Thread-122729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:56:49.526 [DEBUG] [Thread-122729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:56:49.526 [INFO] [Thread-122729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] client lang: <none>
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] server lang: <none>
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] kex follows: False
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:56:49.533 [DEBUG] [Thread-122729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:56:49.534 [DEBUG] [Thread-122729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:56:49.534 [DEBUG] [Thread-122729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:56:49.534 [DEBUG] [Thread-122729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:56:49.534 [DEBUG] [Thread-122729] [transport.py] [_log()] Compression: none
2025-12-03T19:56:49.534 [DEBUG] [Thread-122729] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:56:49.591 [DEBUG] [Thread-122729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:56:49.591 [DEBUG] [Thread-122729] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:56:49.591 [DEBUG] [Thread-122729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:56:49.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:56:49.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:56:49.648 [DEBUG] [Thread-122729] [transport.py] [_log()] userauth is OK
2025-12-03T19:56:49.648 [DEBUG] [Thread-122729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:56:49.648 [DEBUG] [Thread-122729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:56:49.648 [DEBUG] [Thread-122729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:56:49.648 [DEBUG] [Thread-122729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:56:49.663 [INFO] [Thread-122729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:56:49.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:56:49.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:56:50.548 [DEBUG] [Thread-122729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:56:50.549 [DEBUG] [Thread-122729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:56:50.597 [DEBUG] [Thread-122729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:56:50.597 [DEBUG] [Thread-122729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:56:50.605 [DEBUG] [Thread-122729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:56:50.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:56:50.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:56:50.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:56:50.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:56:50.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:56:50.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:56:50.636 [DEBUG] [Thread-122729] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:56:52.289 [DEBUG] [Thread-122731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:56:58.494 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:04.836 [DEBUG] [Thread-122732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:07.332 [DEBUG] [Thread-122733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:08.827 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:08.828 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:20.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:57:20.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:57:20.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:57:21.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 57, 16), 17.91, 29.66, 0.0, 30.24, 17.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:57:21.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:57:16
2025-12-03T19:57:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:57:21.625 [DEBUG] [Thread-122734] [transport.py] [_log()] starting thread (client mode): 0xa514a7a0
2025-12-03T19:57:21.625 [DEBUG] [Thread-122734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:57:21.645 [DEBUG] [Thread-122734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:57:21.645 [INFO] [Thread-122734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:57:21.648 [DEBUG] [Thread-122734] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:57:21.648 [DEBUG] [Thread-122734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:57:21.648 [DEBUG] [Thread-122734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:57:21.648 [DEBUG] [Thread-122734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] client lang: <none>
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] server lang: <none>
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] kex follows: False
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] Compression: none
2025-12-03T19:57:21.649 [DEBUG] [Thread-122734] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:57:21.666 [DEBUG] [Thread-122734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:57:21.666 [DEBUG] [Thread-122734] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:57:21.667 [DEBUG] [Thread-122734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:57:21.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:57:21.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:57:21.669 [DEBUG] [Thread-122734] [transport.py] [_log()] userauth is OK
2025-12-03T19:57:21.669 [DEBUG] [Thread-122734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:57:21.669 [DEBUG] [Thread-122734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:57:21.669 [DEBUG] [Thread-122734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:57:21.669 [DEBUG] [Thread-122734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:57:21.690 [INFO] [Thread-122734] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:57:21.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:57:22.325 [DEBUG] [Thread-122734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:57:22.325 [DEBUG] [Thread-122734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:57:22.326 [DEBUG] [Thread-122734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:57:22.359 [DEBUG] [Thread-122736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:22.366 [DEBUG] [Thread-122734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:57:22.366 [DEBUG] [Thread-122734] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:57:22.369 [DEBUG] [Thread-122734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:57:22.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:57:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:57:22.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:57:22.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:57:22.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:57:22.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:57:22.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.747616 -999.00  +17.60  20.48     35   +2.00 1 1 1 1 1   329    0 13.92 -69.25 ----- 20.5 20.5 165.6 23.9 18.1 -25.7 17.9 -25.3 17.8 -23.4 18.1 -24.4
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.747616
2025-12-03T19:57:22.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:57:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:57:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:57:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:57:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:57:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:57:16', tmtdew=17.91, humidity=29.66, cloud=0.0, wind=30.24, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:56:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:57:22.390 [DEBUG] [Thread-122734] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:57:22.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:57:22.473 [DEBUG] [Thread-122738] [transport.py] [_log()] starting thread (client mode): 0xa277b640
2025-12-03T19:57:22.473 [DEBUG] [Thread-122738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:57:22.488 [DEBUG] [Thread-122738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:57:22.488 [INFO] [Thread-122738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:22.496 [DEBUG] [Thread-122738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] client lang: <none>
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] server lang: <none>
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] kex follows: False
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] Compression: none
2025-12-03T19:57:22.497 [DEBUG] [Thread-122738] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:57:22.555 [DEBUG] [Thread-122738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:57:22.556 [DEBUG] [Thread-122738] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:57:22.556 [DEBUG] [Thread-122738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:57:22.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:57:22.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:57:22.612 [DEBUG] [Thread-122738] [transport.py] [_log()] userauth is OK
2025-12-03T19:57:22.613 [DEBUG] [Thread-122738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:57:22.613 [DEBUG] [Thread-122738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:57:22.613 [DEBUG] [Thread-122738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:57:22.613 [DEBUG] [Thread-122738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:57:22.636 [INFO] [Thread-122738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:57:22.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:57:22.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:57:23.459 [DEBUG] [Thread-122738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:57:23.460 [DEBUG] [Thread-122738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:57:23.508 [DEBUG] [Thread-122738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:57:23.508 [DEBUG] [Thread-122738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:57:23.516 [DEBUG] [Thread-122738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:57:23.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:57:23.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:57:23.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:57:23.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:57:23.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:57:23.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:57:23.548 [DEBUG] [Thread-122738] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:57:23.921 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:34.335 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:37.392 [DEBUG] [Thread-122740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:40.432 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:52.437 [DEBUG] [Thread-122741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:57:53.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:57:53.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:57:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:57:54.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 57, 48), 17.98, 29.64, 0.0, 25.28, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:57:54.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:57:48
2025-12-03T19:57:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:57:54.525 [DEBUG] [Thread-122742] [transport.py] [_log()] starting thread (client mode): 0xa27cb6a0
2025-12-03T19:57:54.525 [DEBUG] [Thread-122742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:57:54.541 [DEBUG] [Thread-122742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:57:54.541 [INFO] [Thread-122742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:54.542 [DEBUG] [Thread-122742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] client lang: <none>
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] server lang: <none>
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] kex follows: False
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] Compression: none
2025-12-03T19:57:54.543 [DEBUG] [Thread-122742] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:57:54.553 [DEBUG] [Thread-122742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:57:54.553 [DEBUG] [Thread-122742] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:57:54.553 [DEBUG] [Thread-122742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:57:54.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:57:54.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:57:54.554 [DEBUG] [Thread-122742] [transport.py] [_log()] userauth is OK
2025-12-03T19:57:54.555 [DEBUG] [Thread-122742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:57:54.555 [DEBUG] [Thread-122742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:57:54.555 [DEBUG] [Thread-122742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:57:54.555 [DEBUG] [Thread-122742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:57:54.568 [INFO] [Thread-122742] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:57:54.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:57:55.239 [DEBUG] [Thread-122742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:57:55.239 [DEBUG] [Thread-122742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:57:55.240 [DEBUG] [Thread-122742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:57:55.280 [DEBUG] [Thread-122742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:57:55.280 [DEBUG] [Thread-122742] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:57:55.283 [DEBUG] [Thread-122742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:57:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:57:55.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:57:55.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:57:55.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:57:55.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:57:55.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:57:55.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:57:55.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:57:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:57:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.747963 -999.00  +17.60  20.78     35   +2.10 1 1 1 1 1   311    0 13.92 -65.45 ----- 20.8 20.8 165.7 27.1 18.0 -25.7 18.0 -25.2 17.8 -23.5 18.1 -24.6
2025-12-03T19:57:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:57:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:57:55.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.747963
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:57:55.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:57:48', tmtdew=17.98, humidity=29.64, cloud=0.0, wind=25.28, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:57:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:57:55.313 [DEBUG] [Thread-122742] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:57:55.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:57:55.402 [DEBUG] [Thread-122745] [transport.py] [_log()] starting thread (client mode): 0xa271f2e0
2025-12-03T19:57:55.403 [DEBUG] [Thread-122745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:57:55.421 [DEBUG] [Thread-122745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:57:55.421 [INFO] [Thread-122745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:57:55.430 [DEBUG] [Thread-122745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:57:55.430 [DEBUG] [Thread-122745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:57:55.431 [DEBUG] [Thread-122745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] client lang: <none>
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] server lang: <none>
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] kex follows: False
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] Compression: none
2025-12-03T19:57:55.432 [DEBUG] [Thread-122745] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:57:55.490 [DEBUG] [Thread-122745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:57:55.490 [DEBUG] [Thread-122745] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:57:55.491 [DEBUG] [Thread-122745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:57:55.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:57:55.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:57:55.550 [DEBUG] [Thread-122745] [transport.py] [_log()] userauth is OK
2025-12-03T19:57:55.550 [DEBUG] [Thread-122745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:57:55.550 [DEBUG] [Thread-122745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:57:55.550 [DEBUG] [Thread-122745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:57:55.550 [DEBUG] [Thread-122745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:57:55.569 [INFO] [Thread-122745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:57:55.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:57:55.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:57:56.420 [DEBUG] [Thread-122745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:57:56.421 [DEBUG] [Thread-122745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:57:56.472 [DEBUG] [Thread-122745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:57:56.472 [DEBUG] [Thread-122745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:57:56.481 [DEBUG] [Thread-122745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:57:56.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:57:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:57:56.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:57:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:57:56.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:57:56.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:57:56.524 [DEBUG] [Thread-122745] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:58:04.912 [DEBUG] [Thread-122747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:04.923 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:07.463 [DEBUG] [Thread-122748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:14.473 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:14.474 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:22.495 [DEBUG] [Thread-122749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:26.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:58:26.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:58:26.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:58:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 58, 20), 17.97, 29.66, 0.0, 24.72, 17.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:58:27.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:58:20
2025-12-03T19:58:27.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:58:27.479 [DEBUG] [Thread-122750] [transport.py] [_log()] starting thread (client mode): 0xa277af80
2025-12-03T19:58:27.480 [DEBUG] [Thread-122750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:58:27.500 [DEBUG] [Thread-122750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:58:27.500 [INFO] [Thread-122750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:58:27.503 [DEBUG] [Thread-122750] [transport.py] [_log()] client lang: <none>
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] server lang: <none>
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] kex follows: False
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] Compression: none
2025-12-03T19:58:27.504 [DEBUG] [Thread-122750] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:58:27.514 [DEBUG] [Thread-122750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:58:27.514 [DEBUG] [Thread-122750] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:58:27.515 [DEBUG] [Thread-122750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:58:27.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:58:27.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:58:27.516 [DEBUG] [Thread-122750] [transport.py] [_log()] userauth is OK
2025-12-03T19:58:27.516 [DEBUG] [Thread-122750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:58:27.516 [DEBUG] [Thread-122750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:58:27.517 [DEBUG] [Thread-122750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:58:27.517 [DEBUG] [Thread-122750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:58:27.534 [INFO] [Thread-122750] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:58:27.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:58:28.179 [DEBUG] [Thread-122750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:58:28.179 [DEBUG] [Thread-122750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:58:28.179 [DEBUG] [Thread-122750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:58:28.220 [DEBUG] [Thread-122750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:58:28.220 [DEBUG] [Thread-122750] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:58:28.223 [DEBUG] [Thread-122750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:58:28.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:58:28.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:58:28.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:58:28.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:58:28.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:58:28.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:58:28.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:58:28.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:58:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:58:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.748658 -999.00  +17.60  15.76     35   +2.00 1 1 1 1 1   275    0 13.85 -59.39 ----- 15.8 15.8 160.2 25.6 18.0 -25.7 17.9 -25.3 17.8 -23.6 -999.0 -999.0
2025-12-03T19:58:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:58:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:58:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.748658
2025-12-03T19:58:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:58:28.248 [DEBUG] [Thread-122750] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:58:28.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:58:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:58:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:58:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:58:28.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:58:20', tmtdew=17.97, humidity=29.66, cloud=0.0, wind=24.72, temperature=17.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:58:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:58:28.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:58:28.346 [DEBUG] [Thread-122753] [transport.py] [_log()] starting thread (client mode): 0xa51d0d90
2025-12-03T19:58:28.346 [DEBUG] [Thread-122753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:58:28.361 [DEBUG] [Thread-122753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:58:28.361 [INFO] [Thread-122753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:58:28.368 [DEBUG] [Thread-122753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:58:28.369 [DEBUG] [Thread-122753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] client lang: <none>
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] server lang: <none>
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] kex follows: False
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] Compression: none
2025-12-03T19:58:28.370 [DEBUG] [Thread-122753] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:58:28.411 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:28.428 [DEBUG] [Thread-122753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:58:28.429 [DEBUG] [Thread-122753] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:58:28.429 [DEBUG] [Thread-122753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:58:28.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:58:28.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:58:28.488 [DEBUG] [Thread-122753] [transport.py] [_log()] userauth is OK
2025-12-03T19:58:28.488 [DEBUG] [Thread-122753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:58:28.488 [DEBUG] [Thread-122753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:58:28.488 [DEBUG] [Thread-122753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:58:28.488 [DEBUG] [Thread-122753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:58:28.507 [INFO] [Thread-122753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:58:28.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:58:28.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:58:29.367 [DEBUG] [Thread-122753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:58:29.367 [DEBUG] [Thread-122753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:58:29.414 [DEBUG] [Thread-122753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:58:29.415 [DEBUG] [Thread-122753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:58:29.423 [DEBUG] [Thread-122753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:58:29.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:58:29.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:58:29.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:58:29.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:58:29.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:58:29.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:58:29.457 [DEBUG] [Thread-122753] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:58:36.927 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:37.522 [DEBUG] [Thread-122755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:43.041 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:52.565 [DEBUG] [Thread-122756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:58:59.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:58:59.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:58:59.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:59:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 58, 52), 17.92, 29.66, 0.0, 25.02, 17.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:59:00.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:58:52
2025-12-03T19:59:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:59:00.446 [DEBUG] [Thread-122757] [transport.py] [_log()] starting thread (client mode): 0xa51d3250
2025-12-03T19:59:00.447 [DEBUG] [Thread-122757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:59:00.467 [DEBUG] [Thread-122757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:59:00.468 [INFO] [Thread-122757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:59:00.471 [DEBUG] [Thread-122757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] client lang: <none>
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] server lang: <none>
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] kex follows: False
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] Compression: none
2025-12-03T19:59:00.472 [DEBUG] [Thread-122757] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:59:00.494 [DEBUG] [Thread-122757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:59:00.495 [DEBUG] [Thread-122757] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:59:00.496 [DEBUG] [Thread-122757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:59:00.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:59:00.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:59:00.498 [DEBUG] [Thread-122757] [transport.py] [_log()] userauth is OK
2025-12-03T19:59:00.498 [DEBUG] [Thread-122757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:59:00.498 [DEBUG] [Thread-122757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:59:00.498 [DEBUG] [Thread-122757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:59:00.499 [DEBUG] [Thread-122757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:59:00.524 [INFO] [Thread-122757] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:59:00.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:59:01.283 [DEBUG] [Thread-122757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:59:01.284 [DEBUG] [Thread-122757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:59:01.284 [DEBUG] [Thread-122757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:59:01.325 [DEBUG] [Thread-122757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:59:01.325 [DEBUG] [Thread-122757] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:59:01.328 [DEBUG] [Thread-122757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:59:01.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:59:01.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:59:01.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:59:01.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:59:01.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:59:01.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:59:01.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.749005 -999.00  +17.60  23.93     35   +2.00 1 1 1 1 1   258    0 14.17 -57.88 ----- 23.9 23.9 163.0 28.8 18.0 -25.7 17.9 -25.3 17.7 -23.5 18.0 -24.3
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:59:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.749005
2025-12-03T19:59:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:59:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:59:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:59:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:59:01.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:59:01.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:58:52', tmtdew=17.92, humidity=29.66, cloud=0.0, wind=25.02, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:58:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:59:01.350 [DEBUG] [Thread-122757] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:59:01.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:59:01.446 [DEBUG] [Thread-122760] [transport.py] [_log()] starting thread (client mode): 0xa2779540
2025-12-03T19:59:01.446 [DEBUG] [Thread-122760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:59:01.467 [DEBUG] [Thread-122760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:59:01.468 [INFO] [Thread-122760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:59:01.475 [DEBUG] [Thread-122760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:59:01.475 [DEBUG] [Thread-122760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:59:01.475 [DEBUG] [Thread-122760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] client lang: <none>
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] server lang: <none>
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] kex follows: False
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] Compression: none
2025-12-03T19:59:01.476 [DEBUG] [Thread-122760] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:59:01.541 [DEBUG] [Thread-122760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:59:01.541 [DEBUG] [Thread-122760] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:59:01.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:59:01.542 [DEBUG] [Thread-122760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:59:01.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:59:01.598 [DEBUG] [Thread-122760] [transport.py] [_log()] userauth is OK
2025-12-03T19:59:01.598 [DEBUG] [Thread-122760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:59:01.598 [DEBUG] [Thread-122760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:59:01.598 [DEBUG] [Thread-122760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:59:01.598 [DEBUG] [Thread-122760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:59:01.617 [INFO] [Thread-122760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:59:01.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:59:01.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:59:02.495 [DEBUG] [Thread-122760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:59:02.495 [DEBUG] [Thread-122760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:59:02.547 [DEBUG] [Thread-122760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:59:02.547 [DEBUG] [Thread-122760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:59:02.559 [DEBUG] [Thread-122760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:59:02.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:59:02.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:59:02.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:59:02.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:59:02.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:59:02.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:59:02.593 [DEBUG] [Thread-122760] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:59:04.979 [DEBUG] [Thread-122762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:06.472 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:07.590 [DEBUG] [Thread-122763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:22.636 [DEBUG] [Thread-122764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:23.365 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:23.366 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:29.930 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T19:59:32.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T19:59:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T19:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 59, 24), 17.9, 29.69, 0.0, 24.53, 17.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T19:59:33.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:59:24
2025-12-03T19:59:33.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T19:59:33.577 [DEBUG] [Thread-122765] [transport.py] [_log()] starting thread (client mode): 0xa514ae90
2025-12-03T19:59:33.578 [DEBUG] [Thread-122765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:59:33.597 [DEBUG] [Thread-122765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T19:59:33.597 [INFO] [Thread-122765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T19:59:33.600 [DEBUG] [Thread-122765] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:59:33.600 [DEBUG] [Thread-122765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T19:59:33.600 [DEBUG] [Thread-122765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:59:33.600 [DEBUG] [Thread-122765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:33.600 [DEBUG] [Thread-122765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] client lang: <none>
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] server lang: <none>
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] kex follows: False
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] Compression: none
2025-12-03T19:59:33.601 [DEBUG] [Thread-122765] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:59:33.618 [DEBUG] [Thread-122765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:59:33.618 [DEBUG] [Thread-122765] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:59:33.619 [DEBUG] [Thread-122765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T19:59:33.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T19:59:33.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:59:33.620 [DEBUG] [Thread-122765] [transport.py] [_log()] userauth is OK
2025-12-03T19:59:33.621 [DEBUG] [Thread-122765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:59:33.621 [DEBUG] [Thread-122765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:59:33.621 [DEBUG] [Thread-122765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T19:59:33.621 [DEBUG] [Thread-122765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:59:33.639 [INFO] [Thread-122765] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:59:33.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:59:34.240 [DEBUG] [Thread-122765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:59:34.240 [DEBUG] [Thread-122765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:59:34.240 [DEBUG] [Thread-122765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T19:59:34.281 [DEBUG] [Thread-122765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:59:34.281 [DEBUG] [Thread-122765] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:59:34.284 [DEBUG] [Thread-122765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:59:34.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:59:34.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T19:59:34.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T19:59:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T19:59:34.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:59:34.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T19:59:34.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.749352 -999.00  +17.60  20.77     35   +2.00 1 1 1 1 1   242    0 14.30 -52.50 ----- 20.8 20.8 158.8 24.8 18.0 -25.7 17.9 -25.2 17.7 -23.6 18.0 -24.5
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T19:59:34.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.749352
2025-12-03T19:59:34.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T19:59:34.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T19:59:34.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T19:59:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T19:59:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T19:59:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:59:24', tmtdew=17.9, humidity=29.69, cloud=0.0, wind=24.53, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:59:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T19:59:34.308 [DEBUG] [Thread-122765] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:59:34.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T19:59:34.406 [DEBUG] [Thread-122768] [transport.py] [_log()] starting thread (client mode): 0xa27c8d00
2025-12-03T19:59:34.406 [DEBUG] [Thread-122768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T19:59:34.420 [DEBUG] [Thread-122768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T19:59:34.420 [INFO] [Thread-122768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T19:59:34.428 [DEBUG] [Thread-122768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] client lang: <none>
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] server lang: <none>
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] kex follows: False
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] Compression: none
2025-12-03T19:59:34.429 [DEBUG] [Thread-122768] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T19:59:34.487 [DEBUG] [Thread-122768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T19:59:34.488 [DEBUG] [Thread-122768] [transport.py] [_log()] Switch to new keys ...
2025-12-03T19:59:34.488 [DEBUG] [Thread-122768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T19:59:34.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T19:59:34.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T19:59:34.543 [DEBUG] [Thread-122768] [transport.py] [_log()] userauth is OK
2025-12-03T19:59:34.543 [DEBUG] [Thread-122768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T19:59:34.543 [DEBUG] [Thread-122768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T19:59:34.543 [DEBUG] [Thread-122768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T19:59:34.544 [DEBUG] [Thread-122768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T19:59:34.558 [INFO] [Thread-122768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T19:59:34.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T19:59:34.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T19:59:35.398 [DEBUG] [Thread-122768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T19:59:35.398 [DEBUG] [Thread-122768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T19:59:35.447 [DEBUG] [Thread-122768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T19:59:35.447 [DEBUG] [Thread-122768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T19:59:35.456 [DEBUG] [Thread-122768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T19:59:35.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T19:59:35.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T19:59:35.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T19:59:35.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T19:59:35.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T19:59:35.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T19:59:35.491 [DEBUG] [Thread-122768] [transport.py] [_log()] EOF in transport thread
2025-12-03T19:59:37.658 [DEBUG] [Thread-122770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:38.482 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:44.598 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T19:59:52.700 [DEBUG] [Thread-122771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:05.058 [DEBUG] [Thread-122772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:00:05.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:00:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:00:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 19, 59, 56), 17.91, 29.66, 0.0, 23.89, 17.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:00:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 19:59:56
2025-12-03T20:00:06.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:00:06.454 [DEBUG] [Thread-122773] [transport.py] [_log()] starting thread (client mode): 0xa517e380
2025-12-03T20:00:06.454 [DEBUG] [Thread-122773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:00:06.475 [DEBUG] [Thread-122773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:00:06.476 [INFO] [Thread-122773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] client lang: <none>
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] server lang: <none>
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] kex follows: False
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:00:06.477 [DEBUG] [Thread-122773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:00:06.478 [DEBUG] [Thread-122773] [transport.py] [_log()] Compression: none
2025-12-03T20:00:06.478 [DEBUG] [Thread-122773] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:00:06.492 [DEBUG] [Thread-122773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:00:06.493 [DEBUG] [Thread-122773] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:00:06.493 [DEBUG] [Thread-122773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:00:06.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:00:06.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:00:06.495 [DEBUG] [Thread-122773] [transport.py] [_log()] userauth is OK
2025-12-03T20:00:06.495 [DEBUG] [Thread-122773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:00:06.495 [DEBUG] [Thread-122773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:00:06.495 [DEBUG] [Thread-122773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:00:06.495 [DEBUG] [Thread-122773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:00:06.531 [INFO] [Thread-122773] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:00:06.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:00:07.409 [DEBUG] [Thread-122773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:00:07.410 [DEBUG] [Thread-122773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:00:07.410 [DEBUG] [Thread-122773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:00:07.451 [DEBUG] [Thread-122773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:00:07.451 [DEBUG] [Thread-122773] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:00:07.453 [DEBUG] [Thread-122773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:00:07.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:00:07.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:00:07.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:00:07.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:00:07.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:00:07.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:00:07.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:00:07.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:00:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:00:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.749699 -999.00  +17.50  15.11     35   +2.00 1 1 1 1 1   226    0 14.14 -52.40 ----- 15.1 15.1 157.6 20.8 18.0 -25.7 17.9 -25.2 17.7 -23.5 17.9 -24.4
2025-12-03T20:00:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:00:07.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:00:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.749699
2025-12-03T20:00:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:00:07.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:00:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:00:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:00:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:00:07.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T19:59:56', tmtdew=17.91, humidity=29.66, cloud=0.0, wind=23.89, temperature=17.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T17:59:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:00:07.488 [DEBUG] [Thread-122773] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:00:07.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:00:07.586 [DEBUG] [Thread-122776] [transport.py] [_log()] starting thread (client mode): 0xa2725b10
2025-12-03T20:00:07.586 [DEBUG] [Thread-122776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:00:07.601 [DEBUG] [Thread-122776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:00:07.601 [INFO] [Thread-122776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:00:07.608 [DEBUG] [Thread-122776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:00:07.608 [DEBUG] [Thread-122776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:00:07.608 [DEBUG] [Thread-122776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] client lang: <none>
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] server lang: <none>
2025-12-03T20:00:07.609 [DEBUG] [Thread-122776] [transport.py] [_log()] kex follows: False
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] Compression: none
2025-12-03T20:00:07.610 [DEBUG] [Thread-122776] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:00:07.666 [DEBUG] [Thread-122776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:00:07.666 [DEBUG] [Thread-122776] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:00:07.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:00:07.667 [DEBUG] [Thread-122776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:00:07.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:00:07.721 [DEBUG] [Thread-122776] [transport.py] [_log()] userauth is OK
2025-12-03T20:00:07.722 [DEBUG] [Thread-122776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:00:07.722 [DEBUG] [Thread-122776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:00:07.722 [DEBUG] [Thread-122776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:00:07.722 [DEBUG] [Thread-122776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:00:07.729 [DEBUG] [Thread-122778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:07.744 [INFO] [Thread-122776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:00:07.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:00:07.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:00:08.069 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:08.581 [DEBUG] [Thread-122776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:00:08.582 [DEBUG] [Thread-122776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:00:08.629 [DEBUG] [Thread-122776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:00:08.629 [DEBUG] [Thread-122776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:00:08.637 [DEBUG] [Thread-122776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:00:08.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:00:08.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:00:08.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:00:08.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:00:08.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:00:08.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:00:08.672 [DEBUG] [Thread-122776] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:00:22.777 [DEBUG] [Thread-122779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:31.472 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:35.231 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:35.232 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:37.806 [DEBUG] [Thread-122780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:00:38.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:00:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:00:39.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 0, 28), 17.92, 29.64, 0.0, 23.96, 17.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:00:39.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:00:28
2025-12-03T20:00:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:00:39.701 [DEBUG] [Thread-122781] [transport.py] [_log()] starting thread (client mode): 0xa2778e80
2025-12-03T20:00:39.701 [DEBUG] [Thread-122781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:00:39.719 [DEBUG] [Thread-122781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:00:39.719 [INFO] [Thread-122781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:00:39.722 [DEBUG] [Thread-122781] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:00:39.722 [DEBUG] [Thread-122781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] client lang: <none>
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] server lang: <none>
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] kex follows: False
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] Compression: none
2025-12-03T20:00:39.723 [DEBUG] [Thread-122781] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:00:39.737 [DEBUG] [Thread-122781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:00:39.738 [DEBUG] [Thread-122781] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:00:39.738 [DEBUG] [Thread-122781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:00:39.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:00:39.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:00:39.739 [DEBUG] [Thread-122781] [transport.py] [_log()] userauth is OK
2025-12-03T20:00:39.739 [DEBUG] [Thread-122781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:00:39.739 [DEBUG] [Thread-122781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:00:39.739 [DEBUG] [Thread-122781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:00:39.739 [DEBUG] [Thread-122781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:00:39.752 [INFO] [Thread-122781] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:00:39.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:00:39.944 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:40.348 [DEBUG] [Thread-122781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:00:40.348 [DEBUG] [Thread-122781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:00:40.348 [DEBUG] [Thread-122781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:00:40.388 [DEBUG] [Thread-122781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:00:40.389 [DEBUG] [Thread-122781] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:00:40.391 [DEBUG] [Thread-122781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:00:40.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:00:40.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:00:40.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:00:40.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:00:40.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:00:40.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:00:40.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.750047 -999.00  +17.50  18.01     35   +2.00 1 1 1 1 1   212    0 14.13 -50.24 ----- 18.0 18.0 154.6 20.7 18.0 -25.7 17.9 -25.2 17.7 -23.6 17.9 -24.3
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.750047
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:00:40.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:00:28', tmtdew=17.92, humidity=29.64, cloud=0.0, wind=23.96, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:00:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:00:40.409 [DEBUG] [Thread-122781] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:00:40.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:00:40.494 [DEBUG] [Thread-122784] [transport.py] [_log()] starting thread (client mode): 0xa2779720
2025-12-03T20:00:40.494 [DEBUG] [Thread-122784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:00:40.508 [DEBUG] [Thread-122784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:00:40.508 [INFO] [Thread-122784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:00:40.515 [DEBUG] [Thread-122784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] client lang: <none>
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] server lang: <none>
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] kex follows: False
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] Compression: none
2025-12-03T20:00:40.516 [DEBUG] [Thread-122784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:00:40.573 [DEBUG] [Thread-122784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:00:40.574 [DEBUG] [Thread-122784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:00:40.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:00:40.574 [DEBUG] [Thread-122784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:00:40.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:00:40.631 [DEBUG] [Thread-122784] [transport.py] [_log()] userauth is OK
2025-12-03T20:00:40.631 [DEBUG] [Thread-122784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:00:40.631 [DEBUG] [Thread-122784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:00:40.631 [DEBUG] [Thread-122784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:00:40.631 [DEBUG] [Thread-122784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:00:40.646 [INFO] [Thread-122784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:00:40.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:00:40.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:00:41.469 [DEBUG] [Thread-122784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:00:41.469 [DEBUG] [Thread-122784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:00:41.517 [DEBUG] [Thread-122784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:00:41.517 [DEBUG] [Thread-122784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:00:41.525 [DEBUG] [Thread-122784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:00:41.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:00:41.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:00:41.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:00:41.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:00:41.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:00:41.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:00:41.559 [DEBUG] [Thread-122784] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:00:46.056 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:00:52.834 [DEBUG] [Thread-122786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:05.138 [DEBUG] [Thread-122787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:07.884 [DEBUG] [Thread-122788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:09.472 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:11.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:01:11.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:01:11.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:01:12.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 0, 28), 17.92, 29.64, 0.0, 23.96, 17.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:01:12.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:00:28
2025-12-03T20:01:12.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:01:12.529 [DEBUG] [Thread-122789] [transport.py] [_log()] starting thread (client mode): 0xa517e260
2025-12-03T20:01:12.529 [DEBUG] [Thread-122789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:01:12.549 [DEBUG] [Thread-122789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:01:12.549 [INFO] [Thread-122789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:01:12.552 [DEBUG] [Thread-122789] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:01:12.552 [DEBUG] [Thread-122789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] client lang: <none>
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] server lang: <none>
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] kex follows: False
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] Compression: none
2025-12-03T20:01:12.553 [DEBUG] [Thread-122789] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:01:12.571 [DEBUG] [Thread-122789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:01:12.572 [DEBUG] [Thread-122789] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:01:12.572 [DEBUG] [Thread-122789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:01:12.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:01:12.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:01:12.574 [DEBUG] [Thread-122789] [transport.py] [_log()] userauth is OK
2025-12-03T20:01:12.574 [DEBUG] [Thread-122789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:01:12.574 [DEBUG] [Thread-122789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:01:12.574 [DEBUG] [Thread-122789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:01:12.574 [DEBUG] [Thread-122789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:01:12.592 [INFO] [Thread-122789] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:01:12.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:01:13.321 [DEBUG] [Thread-122789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:01:13.321 [DEBUG] [Thread-122789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:01:13.322 [DEBUG] [Thread-122789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:01:13.362 [DEBUG] [Thread-122789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:01:13.362 [DEBUG] [Thread-122789] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:01:13.364 [DEBUG] [Thread-122789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:01:13.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:01:13.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:01:13.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:01:13.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:01:13.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:01:13.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:01:13.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:01:13.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:01:13.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:01:13.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.750394 -999.00  +17.50  21.72     35   +1.90 1 1 1 1 1   197    0 14.46 -48.12 ----- 21.7 21.7 164.2 27.2 18.0 -25.7 17.9 -25.2 17.7 -23.5 17.9 -24.4
2025-12-03T20:01:13.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:01:13.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:01:13.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.750394
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:01:13.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:00:28', tmtdew=17.92, humidity=29.64, cloud=0.0, wind=23.96, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:00:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:01:13.386 [DEBUG] [Thread-122789] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:01:13.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:01:13.482 [DEBUG] [Thread-122792] [transport.py] [_log()] starting thread (client mode): 0xa27c8c70
2025-12-03T20:01:13.482 [DEBUG] [Thread-122792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:01:13.500 [DEBUG] [Thread-122792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:01:13.500 [INFO] [Thread-122792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:01:13.507 [DEBUG] [Thread-122792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:01:13.508 [DEBUG] [Thread-122792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] client lang: <none>
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] server lang: <none>
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] kex follows: False
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:01:13.509 [DEBUG] [Thread-122792] [transport.py] [_log()] Compression: none
2025-12-03T20:01:13.510 [DEBUG] [Thread-122792] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:01:13.565 [DEBUG] [Thread-122792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:01:13.566 [DEBUG] [Thread-122792] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:01:13.566 [DEBUG] [Thread-122792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:01:13.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:01:13.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:01:13.621 [DEBUG] [Thread-122792] [transport.py] [_log()] userauth is OK
2025-12-03T20:01:13.622 [DEBUG] [Thread-122792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:01:13.622 [DEBUG] [Thread-122792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:01:13.622 [DEBUG] [Thread-122792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:01:13.622 [DEBUG] [Thread-122792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:01:13.641 [INFO] [Thread-122792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:01:13.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:01:13.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:01:14.456 [DEBUG] [Thread-122792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:01:14.457 [DEBUG] [Thread-122792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:01:14.504 [DEBUG] [Thread-122792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:01:14.505 [DEBUG] [Thread-122792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:01:14.513 [DEBUG] [Thread-122792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:01:14.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:01:14.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:01:14.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:01:14.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:01:14.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:01:14.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:01:14.547 [DEBUG] [Thread-122792] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:01:22.916 [DEBUG] [Thread-122794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:32.955 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:37.955 [DEBUG] [Thread-122795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:39.805 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:39.806 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:01:44.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:01:44.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:01:45.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 1, 32), 17.92, 29.64, 0.0, 23.96, 17.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:01:45.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:01:32
2025-12-03T20:01:45.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:01:45.514 [DEBUG] [Thread-122796] [transport.py] [_log()] starting thread (client mode): 0xa2751390
2025-12-03T20:01:45.514 [DEBUG] [Thread-122796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:01:45.534 [DEBUG] [Thread-122796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:01:45.534 [INFO] [Thread-122796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:01:45.537 [DEBUG] [Thread-122796] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:01:45.537 [DEBUG] [Thread-122796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:01:45.537 [DEBUG] [Thread-122796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:01:45.537 [DEBUG] [Thread-122796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:45.537 [DEBUG] [Thread-122796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] client lang: <none>
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] server lang: <none>
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] kex follows: False
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] Compression: none
2025-12-03T20:01:45.538 [DEBUG] [Thread-122796] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:01:45.556 [DEBUG] [Thread-122796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:01:45.556 [DEBUG] [Thread-122796] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:01:45.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:01:45.557 [DEBUG] [Thread-122796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:01:45.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:01:45.559 [DEBUG] [Thread-122796] [transport.py] [_log()] userauth is OK
2025-12-03T20:01:45.559 [DEBUG] [Thread-122796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:01:45.559 [DEBUG] [Thread-122796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:01:45.560 [DEBUG] [Thread-122796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:01:45.560 [DEBUG] [Thread-122796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:01:45.579 [INFO] [Thread-122796] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:01:45.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:01:45.618 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:46.223 [DEBUG] [Thread-122796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:01:46.224 [DEBUG] [Thread-122796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:01:46.224 [DEBUG] [Thread-122796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:01:46.266 [DEBUG] [Thread-122796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:01:46.266 [DEBUG] [Thread-122796] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:01:46.269 [DEBUG] [Thread-122796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:01:46.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:01:46.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:01:46.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:01:46.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:01:46.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:01:46.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:01:46.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.750741 -999.00  +17.50  15.67     35   +1.90 1 1 1 1 1   184    0 14.64 -44.77 ----- 15.7 15.7 153.2 24.3 17.9 -25.7 17.9 -25.2 17.6 -23.5 17.9 -24.3
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:01:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.750741
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:01:46.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:01:32', tmtdew=17.92, humidity=29.64, cloud=0.0, wind=23.96, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:01:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:01:46.291 [DEBUG] [Thread-122796] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:01:46.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:01:46.389 [DEBUG] [Thread-122799] [transport.py] [_log()] starting thread (client mode): 0xa51d1720
2025-12-03T20:01:46.389 [DEBUG] [Thread-122799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:01:46.414 [DEBUG] [Thread-122799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:01:46.414 [INFO] [Thread-122799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:01:46.421 [DEBUG] [Thread-122799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:01:46.421 [DEBUG] [Thread-122799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] client lang: <none>
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] server lang: <none>
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] kex follows: False
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] Compression: none
2025-12-03T20:01:46.422 [DEBUG] [Thread-122799] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:01:46.480 [DEBUG] [Thread-122799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:01:46.480 [DEBUG] [Thread-122799] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:01:46.480 [DEBUG] [Thread-122799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:01:46.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:01:46.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:01:46.536 [DEBUG] [Thread-122799] [transport.py] [_log()] userauth is OK
2025-12-03T20:01:46.536 [DEBUG] [Thread-122799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:01:46.536 [DEBUG] [Thread-122799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:01:46.536 [DEBUG] [Thread-122799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:01:46.536 [DEBUG] [Thread-122799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:01:46.555 [INFO] [Thread-122799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:01:46.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:01:46.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:01:47.406 [DEBUG] [Thread-122799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:01:47.407 [DEBUG] [Thread-122799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:01:47.455 [DEBUG] [Thread-122799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:01:47.455 [DEBUG] [Thread-122799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:01:47.464 [DEBUG] [Thread-122799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:01:47.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:01:47.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:01:47.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:01:47.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:01:47.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:01:47.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:01:47.498 [DEBUG] [Thread-122799] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:01:50.674 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:01:52.983 [DEBUG] [Thread-122801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:05.193 [DEBUG] [Thread-122802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:08.028 [DEBUG] [Thread-122803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:15.082 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:17.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:02:17.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:02:17.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:02:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 2, 4), 17.9, 29.67, 0.0, 25.11, 17.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:02:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:02:04
2025-12-03T20:02:18.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:02:18.470 [DEBUG] [Thread-122804] [transport.py] [_log()] starting thread (client mode): 0xa2761c60
2025-12-03T20:02:18.470 [DEBUG] [Thread-122804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:02:18.491 [DEBUG] [Thread-122804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:02:18.491 [INFO] [Thread-122804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] client lang: <none>
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] server lang: <none>
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] kex follows: False
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:02:18.494 [DEBUG] [Thread-122804] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:02:18.495 [DEBUG] [Thread-122804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:02:18.495 [DEBUG] [Thread-122804] [transport.py] [_log()] Compression: none
2025-12-03T20:02:18.495 [DEBUG] [Thread-122804] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:02:18.511 [DEBUG] [Thread-122804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:02:18.511 [DEBUG] [Thread-122804] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:02:18.512 [DEBUG] [Thread-122804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:02:18.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:02:18.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:02:18.514 [DEBUG] [Thread-122804] [transport.py] [_log()] userauth is OK
2025-12-03T20:02:18.514 [DEBUG] [Thread-122804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:02:18.514 [DEBUG] [Thread-122804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:02:18.515 [DEBUG] [Thread-122804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:02:18.515 [DEBUG] [Thread-122804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:02:18.549 [INFO] [Thread-122804] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:02:18.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:02:19.237 [DEBUG] [Thread-122804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:02:19.238 [DEBUG] [Thread-122804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:02:19.238 [DEBUG] [Thread-122804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:02:19.279 [DEBUG] [Thread-122804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:02:19.279 [DEBUG] [Thread-122804] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:02:19.282 [DEBUG] [Thread-122804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:02:19.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:02:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:02:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:02:19.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:02:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:02:19.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:02:19.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:02:19.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:02:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:02:19.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.751089 -999.00  +17.50  19.55     35   +2.00 1 1 1 1 1   171    0 14.46 -43.39 ----- 19.6 19.6 153.2 27.2 18.0 -25.6 17.9 -25.2 17.7 -23.5 17.9 -24.3
2025-12-03T20:02:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:02:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:02:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.751089
2025-12-03T20:02:19.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:02:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:02:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:02:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:02:19.307 [DEBUG] [Thread-122804] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:02:19.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:02:19.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:02:04', tmtdew=17.9, humidity=29.67, cloud=0.0, wind=25.11, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:01:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:02:19.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:02:19.403 [DEBUG] [Thread-122807] [transport.py] [_log()] starting thread (client mode): 0xa51e66b0
2025-12-03T20:02:19.403 [DEBUG] [Thread-122807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:02:19.417 [DEBUG] [Thread-122807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:02:19.417 [INFO] [Thread-122807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] client lang: <none>
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] server lang: <none>
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] kex follows: False
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] Compression: none
2025-12-03T20:02:19.425 [DEBUG] [Thread-122807] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:02:19.482 [DEBUG] [Thread-122807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:02:19.483 [DEBUG] [Thread-122807] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:02:19.483 [DEBUG] [Thread-122807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:02:19.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:02:19.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:02:19.538 [DEBUG] [Thread-122807] [transport.py] [_log()] userauth is OK
2025-12-03T20:02:19.539 [DEBUG] [Thread-122807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:02:19.539 [DEBUG] [Thread-122807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:02:19.539 [DEBUG] [Thread-122807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:02:19.539 [DEBUG] [Thread-122807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:02:19.558 [INFO] [Thread-122807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:02:19.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:02:19.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:02:20.388 [DEBUG] [Thread-122807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:02:20.389 [DEBUG] [Thread-122807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:02:20.437 [DEBUG] [Thread-122807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:02:20.437 [DEBUG] [Thread-122807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:02:20.446 [DEBUG] [Thread-122807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:02:20.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:02:20.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:02:20.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:02:20.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:02:20.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:02:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:02:20.481 [DEBUG] [Thread-122807] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:02:23.062 [DEBUG] [Thread-122809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:38.104 [DEBUG] [Thread-122810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:38.533 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:42.968 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:44.682 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:44.683 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:48.024 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:50.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:02:50.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:02:50.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:02:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 2, 36), 17.88, 29.74, 0.0, 23.96, 17.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:02:51.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:02:36
2025-12-03T20:02:51.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:02:51.449 [DEBUG] [Thread-122811] [transport.py] [_log()] starting thread (client mode): 0xa2724d60
2025-12-03T20:02:51.449 [DEBUG] [Thread-122811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:02:51.469 [DEBUG] [Thread-122811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:02:51.469 [INFO] [Thread-122811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:02:51.473 [DEBUG] [Thread-122811] [transport.py] [_log()] client lang: <none>
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] server lang: <none>
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] kex follows: False
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] Compression: none
2025-12-03T20:02:51.474 [DEBUG] [Thread-122811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:02:51.492 [DEBUG] [Thread-122811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:02:51.492 [DEBUG] [Thread-122811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:02:51.493 [DEBUG] [Thread-122811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:02:51.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:02:51.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:02:51.495 [DEBUG] [Thread-122811] [transport.py] [_log()] userauth is OK
2025-12-03T20:02:51.495 [DEBUG] [Thread-122811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:02:51.495 [DEBUG] [Thread-122811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:02:51.495 [DEBUG] [Thread-122811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:02:51.495 [DEBUG] [Thread-122811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:02:51.512 [INFO] [Thread-122811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:02:51.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:02:52.152 [DEBUG] [Thread-122811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:02:52.152 [DEBUG] [Thread-122811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:02:52.153 [DEBUG] [Thread-122811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:02:52.193 [DEBUG] [Thread-122811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:02:52.193 [DEBUG] [Thread-122811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:02:52.196 [DEBUG] [Thread-122811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:02:52.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:02:52.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:02:52.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:02:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:02:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:02:52.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:02:52.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:02:52.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.751435 -999.00  +17.50  16.88     35   +2.00 1 1 1 1 1   159    0 14.64 -40.11 ----- 16.9 16.9 156.6 22.4 17.9 -25.6 17.9 -25.2 17.6 -23.5 17.9 -24.3
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.751435
2025-12-03T20:02:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:02:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:02:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:02:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:02:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:02:52.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:02:36', tmtdew=17.88, humidity=29.74, cloud=0.0, wind=23.96, temperature=17.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:02:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:02:52.221 [DEBUG] [Thread-122811] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:02:52.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:02:52.317 [DEBUG] [Thread-122814] [transport.py] [_log()] starting thread (client mode): 0xa2727e50
2025-12-03T20:02:52.317 [DEBUG] [Thread-122814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:02:52.332 [DEBUG] [Thread-122814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:02:52.332 [INFO] [Thread-122814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:02:52.340 [DEBUG] [Thread-122814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] client lang: <none>
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] server lang: <none>
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] kex follows: False
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:02:52.341 [DEBUG] [Thread-122814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:02:52.342 [DEBUG] [Thread-122814] [transport.py] [_log()] Compression: none
2025-12-03T20:02:52.342 [DEBUG] [Thread-122814] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:02:52.396 [DEBUG] [Thread-122814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:02:52.397 [DEBUG] [Thread-122814] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:02:52.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:02:52.398 [DEBUG] [Thread-122814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:02:52.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:02:52.453 [DEBUG] [Thread-122814] [transport.py] [_log()] userauth is OK
2025-12-03T20:02:52.453 [DEBUG] [Thread-122814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:02:52.453 [DEBUG] [Thread-122814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:02:52.453 [DEBUG] [Thread-122814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:02:52.453 [DEBUG] [Thread-122814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:02:52.476 [INFO] [Thread-122814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:02:52.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:02:52.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:02:53.130 [DEBUG] [Thread-122816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:02:53.283 [DEBUG] [Thread-122814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:02:53.284 [DEBUG] [Thread-122814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:02:53.331 [DEBUG] [Thread-122814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:02:53.332 [DEBUG] [Thread-122814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:02:53.340 [DEBUG] [Thread-122814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:02:53.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:02:53.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:02:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:02:53.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:02:53.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:02:53.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:02:53.375 [DEBUG] [Thread-122814] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:03:05.269 [DEBUG] [Thread-122817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:08.172 [DEBUG] [Thread-122818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:11.457 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:23.203 [DEBUG] [Thread-122819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:23.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:03:23.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:03:23.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:03:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 3, 8), 17.89, 29.69, 0.0, 25.07, 17.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:03:24.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:03:08
2025-12-03T20:03:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:03:24.340 [DEBUG] [Thread-122820] [transport.py] [_log()] starting thread (client mode): 0xa51e6bc0
2025-12-03T20:03:24.340 [DEBUG] [Thread-122820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:03:24.359 [DEBUG] [Thread-122820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:03:24.359 [INFO] [Thread-122820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] client lang: <none>
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] server lang: <none>
2025-12-03T20:03:24.361 [DEBUG] [Thread-122820] [transport.py] [_log()] kex follows: False
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] Compression: none
2025-12-03T20:03:24.362 [DEBUG] [Thread-122820] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:03:24.376 [DEBUG] [Thread-122820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:03:24.376 [DEBUG] [Thread-122820] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:03:24.377 [DEBUG] [Thread-122820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:03:24.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:03:24.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:03:24.379 [DEBUG] [Thread-122820] [transport.py] [_log()] userauth is OK
2025-12-03T20:03:24.379 [DEBUG] [Thread-122820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:03:24.379 [DEBUG] [Thread-122820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:03:24.379 [DEBUG] [Thread-122820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:03:24.379 [DEBUG] [Thread-122820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:03:24.397 [INFO] [Thread-122820] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:03:24.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:03:25.137 [DEBUG] [Thread-122820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:03:25.138 [DEBUG] [Thread-122820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:03:25.138 [DEBUG] [Thread-122820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:03:25.179 [DEBUG] [Thread-122820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:03:25.179 [DEBUG] [Thread-122820] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:03:25.181 [DEBUG] [Thread-122820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:03:25.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:03:25.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:03:25.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:03:25.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:03:25.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:03:25.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:03:25.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.751783 -999.00  +17.50  17.73     35   +2.00 1 1 1 1 1   148    0 14.37 -44.48 ----- 17.7 17.7 158.7 23.3 17.9 -25.6 17.9 -25.2 17.6 -23.4 17.9 -24.3
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:03:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.751783
2025-12-03T20:03:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:03:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:03:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:03:25.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:03:25.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:03:25.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:03:08', tmtdew=17.89, humidity=29.69, cloud=0.0, wind=25.07, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:02:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:03:25.206 [DEBUG] [Thread-122820] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:03:25.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:03:25.302 [DEBUG] [Thread-122823] [transport.py] [_log()] starting thread (client mode): 0xa2750280
2025-12-03T20:03:25.303 [DEBUG] [Thread-122823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:03:25.322 [DEBUG] [Thread-122823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:03:25.323 [INFO] [Thread-122823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:03:25.330 [DEBUG] [Thread-122823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:03:25.330 [DEBUG] [Thread-122823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:03:25.330 [DEBUG] [Thread-122823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:03:25.330 [DEBUG] [Thread-122823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] client lang: <none>
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] server lang: <none>
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] kex follows: False
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] Compression: none
2025-12-03T20:03:25.331 [DEBUG] [Thread-122823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:03:25.392 [DEBUG] [Thread-122823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:03:25.392 [DEBUG] [Thread-122823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:03:25.392 [DEBUG] [Thread-122823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:03:25.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:03:25.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:03:25.448 [DEBUG] [Thread-122823] [transport.py] [_log()] userauth is OK
2025-12-03T20:03:25.448 [DEBUG] [Thread-122823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:03:25.448 [DEBUG] [Thread-122823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:03:25.448 [DEBUG] [Thread-122823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:03:25.448 [DEBUG] [Thread-122823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:03:25.469 [INFO] [Thread-122823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:03:25.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:03:25.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:03:26.344 [DEBUG] [Thread-122823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:03:26.345 [DEBUG] [Thread-122823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:03:26.393 [DEBUG] [Thread-122823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:03:26.393 [DEBUG] [Thread-122823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:03:26.402 [DEBUG] [Thread-122823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:03:26.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:03:26.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:03:26.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:03:26.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:03:26.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:03:26.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:03:26.436 [DEBUG] [Thread-122823] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:03:34.923 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:38.235 [DEBUG] [Thread-122825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:53.273 [DEBUG] [Thread-122826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:53.628 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:53.629 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:03:56.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:03:56.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:03:56.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:03:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 3, 40), 17.89, 29.69, 0.0, 25.48, 17.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:03:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:03:40
2025-12-03T20:03:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:03:57.423 [DEBUG] [Thread-122827] [transport.py] [_log()] starting thread (client mode): 0xa2751fc0
2025-12-03T20:03:57.423 [DEBUG] [Thread-122827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:03:57.444 [DEBUG] [Thread-122827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:03:57.444 [INFO] [Thread-122827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:03:57.447 [DEBUG] [Thread-122827] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] client lang: <none>
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] server lang: <none>
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] kex follows: False
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] Compression: none
2025-12-03T20:03:57.448 [DEBUG] [Thread-122827] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:03:57.466 [DEBUG] [Thread-122827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:03:57.466 [DEBUG] [Thread-122827] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:03:57.467 [DEBUG] [Thread-122827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:03:57.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:03:57.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:03:57.467 [DEBUG] [Thread-122827] [transport.py] [_log()] userauth is OK
2025-12-03T20:03:57.468 [DEBUG] [Thread-122827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:03:57.468 [DEBUG] [Thread-122827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:03:57.468 [DEBUG] [Thread-122827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:03:57.468 [DEBUG] [Thread-122827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:03:57.479 [INFO] [Thread-122827] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:03:57.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:03:58.101 [DEBUG] [Thread-122827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:03:58.101 [DEBUG] [Thread-122827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:03:58.101 [DEBUG] [Thread-122827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:03:58.142 [DEBUG] [Thread-122827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:03:58.142 [DEBUG] [Thread-122827] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:03:58.144 [DEBUG] [Thread-122827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:03:58.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:03:58.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:03:58.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:03:58.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:03:58.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:03:58.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:03:58.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.752477 -999.00  +17.50  21.95     35   +2.00 1 1 1 1 1   127    0 14.67 -34.68 ----- 21.9 21.9 163.6 27.3 17.9 -25.6 17.8 -25.1 17.6 -23.3 17.9 -24.1
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.752477
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:03:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:03:40', tmtdew=17.89, humidity=29.69, cloud=0.0, wind=25.48, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:03:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:03:58.165 [DEBUG] [Thread-122827] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:03:58.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:03:58.253 [DEBUG] [Thread-122830] [transport.py] [_log()] starting thread (client mode): 0xa2751e10
2025-12-03T20:03:58.254 [DEBUG] [Thread-122830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:03:58.268 [DEBUG] [Thread-122830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:03:58.268 [INFO] [Thread-122830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] client lang: <none>
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] server lang: <none>
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] kex follows: False
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] Compression: none
2025-12-03T20:03:58.276 [DEBUG] [Thread-122830] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:03:58.333 [DEBUG] [Thread-122830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:03:58.333 [DEBUG] [Thread-122830] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:03:58.333 [DEBUG] [Thread-122830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:03:58.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:03:58.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:03:58.390 [DEBUG] [Thread-122830] [transport.py] [_log()] userauth is OK
2025-12-03T20:03:58.391 [DEBUG] [Thread-122830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:03:58.391 [DEBUG] [Thread-122830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:03:58.391 [DEBUG] [Thread-122830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:03:58.391 [DEBUG] [Thread-122830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:03:58.408 [INFO] [Thread-122830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:03:58.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:03:58.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:03:59.303 [DEBUG] [Thread-122830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:03:59.303 [DEBUG] [Thread-122830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:03:59.351 [DEBUG] [Thread-122830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:03:59.352 [DEBUG] [Thread-122830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:03:59.360 [DEBUG] [Thread-122830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:03:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:03:59.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:03:59.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:03:59.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:03:59.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:03:59.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:03:59.395 [DEBUG] [Thread-122830] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:04:05.332 [DEBUG] [Thread-122832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:08.301 [DEBUG] [Thread-122833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:23.343 [DEBUG] [Thread-122834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:04:29.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:04:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:04:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 4, 12), 17.87, 29.74, 0.0, 24.4, 17.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:04:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:04:12
2025-12-03T20:04:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:04:30.357 [DEBUG] [Thread-122835] [transport.py] [_log()] starting thread (client mode): 0xa27c8b80
2025-12-03T20:04:30.357 [DEBUG] [Thread-122835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:04:30.372 [DEBUG] [Thread-122835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:04:30.372 [INFO] [Thread-122835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] client lang: <none>
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] server lang: <none>
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] kex follows: False
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:04:30.374 [DEBUG] [Thread-122835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:04:30.375 [DEBUG] [Thread-122835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:04:30.375 [DEBUG] [Thread-122835] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:04:30.375 [DEBUG] [Thread-122835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:04:30.375 [DEBUG] [Thread-122835] [transport.py] [_log()] Compression: none
2025-12-03T20:04:30.375 [DEBUG] [Thread-122835] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:04:30.391 [DEBUG] [Thread-122835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:04:30.391 [DEBUG] [Thread-122835] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:04:30.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:04:30.392 [DEBUG] [Thread-122835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:04:30.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:04:30.394 [DEBUG] [Thread-122835] [transport.py] [_log()] userauth is OK
2025-12-03T20:04:30.394 [DEBUG] [Thread-122835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:04:30.394 [DEBUG] [Thread-122835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:04:30.394 [DEBUG] [Thread-122835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:04:30.394 [DEBUG] [Thread-122835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:04:30.411 [INFO] [Thread-122835] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:04:30.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:04:31.097 [DEBUG] [Thread-122835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:04:31.097 [DEBUG] [Thread-122835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:04:31.097 [DEBUG] [Thread-122835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:04:31.138 [DEBUG] [Thread-122835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:04:31.138 [DEBUG] [Thread-122835] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:04:31.141 [DEBUG] [Thread-122835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:04:31.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:04:31.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:04:31.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:04:31.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:04:31.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:04:31.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:04:31.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:04:31.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:04:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:04:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.752824 -999.00  +17.50  20.74     35   +2.00 1 1 1 1 1   117    0 14.66 -32.17 ----- 20.7 20.7 154.6 27.8 17.9 -25.5 17.8 -25.1 17.6 -23.4 17.9 -24.3
2025-12-03T20:04:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:04:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:04:31.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.752824
2025-12-03T20:04:31.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:04:31.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:04:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:04:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:04:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:04:31.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:04:12', tmtdew=17.87, humidity=29.74, cloud=0.0, wind=24.4, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:04:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:04:31.164 [DEBUG] [Thread-122835] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:04:31.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:04:31.260 [DEBUG] [Thread-122838] [transport.py] [_log()] starting thread (client mode): 0xa27cbfa0
2025-12-03T20:04:31.260 [DEBUG] [Thread-122838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:04:31.278 [DEBUG] [Thread-122838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:04:31.278 [INFO] [Thread-122838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] client lang: <none>
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] server lang: <none>
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] kex follows: False
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:04:31.285 [DEBUG] [Thread-122838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:04:31.286 [DEBUG] [Thread-122838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:04:31.286 [DEBUG] [Thread-122838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:04:31.286 [DEBUG] [Thread-122838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:04:31.286 [DEBUG] [Thread-122838] [transport.py] [_log()] Compression: none
2025-12-03T20:04:31.286 [DEBUG] [Thread-122838] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:04:31.346 [DEBUG] [Thread-122838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:04:31.347 [DEBUG] [Thread-122838] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:04:31.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:04:31.347 [DEBUG] [Thread-122838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:04:31.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:04:31.405 [DEBUG] [Thread-122838] [transport.py] [_log()] userauth is OK
2025-12-03T20:04:31.405 [DEBUG] [Thread-122838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:04:31.405 [DEBUG] [Thread-122838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:04:31.405 [DEBUG] [Thread-122838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:04:31.405 [DEBUG] [Thread-122838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:04:31.421 [INFO] [Thread-122838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:04:31.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:04:31.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:04:32.275 [DEBUG] [Thread-122838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:04:32.275 [DEBUG] [Thread-122838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:04:32.323 [DEBUG] [Thread-122838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:04:32.323 [DEBUG] [Thread-122838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:04:32.331 [DEBUG] [Thread-122838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:04:32.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:04:32.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:04:32.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:04:32.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:04:32.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:04:32.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:04:32.362 [DEBUG] [Thread-122838] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:04:32.642 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:38.374 [DEBUG] [Thread-122840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:38.753 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:49.186 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:53.418 [DEBUG] [Thread-122841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:04:58.559 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:00.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:00.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:02.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:05:02.385 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:05:02.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:05:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 4, 44), 17.8, 29.79, 0.0, 21.33, 17.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:05:03.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:04:44
2025-12-03T20:05:03.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:05:03.340 [DEBUG] [Thread-122842] [transport.py] [_log()] starting thread (client mode): 0xa51e4520
2025-12-03T20:05:03.340 [DEBUG] [Thread-122842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:05:03.355 [DEBUG] [Thread-122842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:05:03.355 [INFO] [Thread-122842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] client lang: <none>
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] server lang: <none>
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] kex follows: False
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:05:03.358 [DEBUG] [Thread-122842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:05:03.359 [DEBUG] [Thread-122842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:05:03.359 [DEBUG] [Thread-122842] [transport.py] [_log()] Compression: none
2025-12-03T20:05:03.359 [DEBUG] [Thread-122842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:05:03.374 [DEBUG] [Thread-122842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:05:03.375 [DEBUG] [Thread-122842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:05:03.375 [DEBUG] [Thread-122842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:05:03.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:05:03.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:05:03.377 [DEBUG] [Thread-122842] [transport.py] [_log()] userauth is OK
2025-12-03T20:05:03.377 [DEBUG] [Thread-122842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:05:03.377 [DEBUG] [Thread-122842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:05:03.377 [DEBUG] [Thread-122842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:05:03.377 [DEBUG] [Thread-122842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:05:03.401 [INFO] [Thread-122842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:05:03.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:05:04.216 [DEBUG] [Thread-122842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:05:04.216 [DEBUG] [Thread-122842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:05:04.216 [DEBUG] [Thread-122842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:05:04.257 [DEBUG] [Thread-122842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:05:04.257 [DEBUG] [Thread-122842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:05:04.259 [DEBUG] [Thread-122842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:05:04.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:05:04.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:05:04.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:05:04.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:05:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:05:04.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:05:04.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:05:04.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:05:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:05:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.753171 -999.00  +17.50  18.98     35   +2.00 1 1 1 1 1   108    0 14.70 -32.77 ----- 19.0 19.0 152.4 27.8 17.9 -25.6 17.8 -25.1 17.6 -23.4 17.9 -24.3
2025-12-03T20:05:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:05:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:05:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.753171
2025-12-03T20:05:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:05:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:05:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:05:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:05:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:05:04.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:04:44', tmtdew=17.8, humidity=29.79, cloud=0.0, wind=21.33, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:04:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:05:04.293 [DEBUG] [Thread-122842] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:05:04.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:05:04.389 [DEBUG] [Thread-122845] [transport.py] [_log()] starting thread (client mode): 0xa51e6080
2025-12-03T20:05:04.389 [DEBUG] [Thread-122845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:05:04.404 [DEBUG] [Thread-122845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:05:04.404 [INFO] [Thread-122845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:05:04.411 [DEBUG] [Thread-122845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:05:04.411 [DEBUG] [Thread-122845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:05:04.411 [DEBUG] [Thread-122845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] client lang: <none>
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] server lang: <none>
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] kex follows: False
2025-12-03T20:05:04.412 [DEBUG] [Thread-122845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] Compression: none
2025-12-03T20:05:04.413 [DEBUG] [Thread-122845] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:05:04.467 [DEBUG] [Thread-122845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:05:04.467 [DEBUG] [Thread-122845] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:05:04.468 [DEBUG] [Thread-122845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:05:04.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:05:04.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:05:04.533 [DEBUG] [Thread-122845] [transport.py] [_log()] userauth is OK
2025-12-03T20:05:04.534 [DEBUG] [Thread-122845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:05:04.534 [DEBUG] [Thread-122845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:05:04.534 [DEBUG] [Thread-122845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:05:04.534 [DEBUG] [Thread-122845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:05:04.560 [INFO] [Thread-122845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:05:04.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:05:04.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:05:05.357 [DEBUG] [Thread-122845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:05:05.357 [DEBUG] [Thread-122845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:05:05.391 [DEBUG] [Thread-122847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:05.405 [DEBUG] [Thread-122845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:05:05.405 [DEBUG] [Thread-122845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:05:05.414 [DEBUG] [Thread-122845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:05:05.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:05:05.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:05:05.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:05:05.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:05:05.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:05:05.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:05:05.449 [DEBUG] [Thread-122845] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:05:08.448 [DEBUG] [Thread-122848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:09.043 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:15.122 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:23.496 [DEBUG] [Thread-122849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:23.505 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:30.920 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:35.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:05:35.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:05:35.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:05:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 5, 16), 17.79, 29.79, 0.0, 22.04, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:05:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:05:16
2025-12-03T20:05:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:05:36.428 [DEBUG] [Thread-122850] [transport.py] [_log()] starting thread (client mode): 0xa2751ab0
2025-12-03T20:05:36.428 [DEBUG] [Thread-122850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:05:36.448 [DEBUG] [Thread-122850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:05:36.448 [INFO] [Thread-122850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:05:36.451 [DEBUG] [Thread-122850] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] client lang: <none>
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] server lang: <none>
2025-12-03T20:05:36.452 [DEBUG] [Thread-122850] [transport.py] [_log()] kex follows: False
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] Compression: none
2025-12-03T20:05:36.453 [DEBUG] [Thread-122850] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:05:36.471 [DEBUG] [Thread-122850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:05:36.472 [DEBUG] [Thread-122850] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:05:36.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:05:36.473 [DEBUG] [Thread-122850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:05:36.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:05:36.474 [DEBUG] [Thread-122850] [transport.py] [_log()] userauth is OK
2025-12-03T20:05:36.474 [DEBUG] [Thread-122850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:05:36.474 [DEBUG] [Thread-122850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:05:36.474 [DEBUG] [Thread-122850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:05:36.474 [DEBUG] [Thread-122850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:05:36.492 [INFO] [Thread-122850] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:05:36.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:05:37.270 [DEBUG] [Thread-122850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:05:37.271 [DEBUG] [Thread-122850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:05:37.271 [DEBUG] [Thread-122850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:05:37.311 [DEBUG] [Thread-122850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:05:37.312 [DEBUG] [Thread-122850] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:05:37.314 [DEBUG] [Thread-122850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:05:37.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:05:37.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:05:37.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:05:37.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:05:37.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:05:37.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:05:37.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:05:37.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:05:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:05:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.753519 -999.00  +17.50  16.12     35   +2.00 1 1 1 1 1   100    0 14.75 -27.91 ----- 16.1 16.1 154.5 25.7 17.8 -25.5 17.8 -25.1 17.6 -23.3 17.9 -24.3
2025-12-03T20:05:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:05:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:05:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.753519
2025-12-03T20:05:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:05:37.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:05:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:05:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:05:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:05:37.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:05:16', tmtdew=17.79, humidity=29.79, cloud=0.0, wind=22.04, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:05:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:05:37.342 [DEBUG] [Thread-122850] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:05:37.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:05:37.439 [DEBUG] [Thread-122853] [transport.py] [_log()] starting thread (client mode): 0xa2751660
2025-12-03T20:05:37.439 [DEBUG] [Thread-122853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:05:37.454 [DEBUG] [Thread-122853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:05:37.454 [INFO] [Thread-122853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:05:37.461 [DEBUG] [Thread-122853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] client lang: <none>
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] server lang: <none>
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] kex follows: False
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] Compression: none
2025-12-03T20:05:37.462 [DEBUG] [Thread-122853] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:05:37.518 [DEBUG] [Thread-122853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:05:37.518 [DEBUG] [Thread-122853] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:05:37.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:05:37.519 [DEBUG] [Thread-122853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:05:37.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:05:37.577 [DEBUG] [Thread-122853] [transport.py] [_log()] userauth is OK
2025-12-03T20:05:37.577 [DEBUG] [Thread-122853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:05:37.577 [DEBUG] [Thread-122853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:05:37.577 [DEBUG] [Thread-122853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:05:37.577 [DEBUG] [Thread-122853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:05:37.597 [INFO] [Thread-122853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:05:37.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:05:37.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:05:38.434 [DEBUG] [Thread-122853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:05:38.434 [DEBUG] [Thread-122853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:05:38.482 [DEBUG] [Thread-122853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:05:38.482 [DEBUG] [Thread-122853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:05:38.491 [DEBUG] [Thread-122853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:05:38.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:05:38.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:05:38.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:05:38.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:05:38.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:05:38.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:05:38.525 [DEBUG] [Thread-122853] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:05:38.528 [DEBUG] [Thread-122855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:40.178 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:46.312 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:53.570 [DEBUG] [Thread-122856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:05:53.679 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:01.043 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:05.449 [DEBUG] [Thread-122857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:08.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:06:08.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:06:08.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:06:08.593 [DEBUG] [Thread-122858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:08.723 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 5, 48), 17.79, 29.81, 0.0, 21.08, 17.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:06:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:05:48
2025-12-03T20:06:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:06:09.505 [DEBUG] [Thread-122859] [transport.py] [_log()] starting thread (client mode): 0xa2751b70
2025-12-03T20:06:09.505 [DEBUG] [Thread-122859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:06:09.525 [DEBUG] [Thread-122859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:06:09.525 [INFO] [Thread-122859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] client lang: <none>
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] server lang: <none>
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] kex follows: False
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] Compression: none
2025-12-03T20:06:09.529 [DEBUG] [Thread-122859] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:06:09.547 [DEBUG] [Thread-122859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:06:09.547 [DEBUG] [Thread-122859] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:06:09.548 [DEBUG] [Thread-122859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:06:09.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:06:09.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:06:09.549 [DEBUG] [Thread-122859] [transport.py] [_log()] userauth is OK
2025-12-03T20:06:09.549 [DEBUG] [Thread-122859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:06:09.549 [DEBUG] [Thread-122859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:06:09.549 [DEBUG] [Thread-122859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:06:09.550 [DEBUG] [Thread-122859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:06:09.567 [INFO] [Thread-122859] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:06:09.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:06:10.210 [DEBUG] [Thread-122859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:06:10.211 [DEBUG] [Thread-122859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:06:10.211 [DEBUG] [Thread-122859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:06:10.252 [DEBUG] [Thread-122859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:06:10.252 [DEBUG] [Thread-122859] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:06:10.255 [DEBUG] [Thread-122859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:06:10.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:06:10.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:06:10.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:06:10.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:06:10.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:06:10.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:06:10.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:06:10.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:06:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:06:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.753866 -999.00  +17.50  14.05     35   +2.00 1 1 1 1 1    92    0 14.73 -25.80 ----- 14.1 14.1 156.2 26.1 17.9 -25.5 17.8 -25.0 17.6 -23.3 17.9 -24.2
2025-12-03T20:06:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:06:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:06:10.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.753866
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:06:10.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:05:48', tmtdew=17.79, humidity=29.81, cloud=0.0, wind=21.08, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:05:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:06:10.278 [DEBUG] [Thread-122859] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:06:10.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:06:10.374 [DEBUG] [Thread-122862] [transport.py] [_log()] starting thread (client mode): 0xa27cb4c0
2025-12-03T20:06:10.374 [DEBUG] [Thread-122862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:06:10.389 [DEBUG] [Thread-122862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:06:10.390 [INFO] [Thread-122862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:10.398 [DEBUG] [Thread-122862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] client lang: <none>
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] server lang: <none>
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] kex follows: False
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] Compression: none
2025-12-03T20:06:10.399 [DEBUG] [Thread-122862] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:06:10.457 [DEBUG] [Thread-122862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:06:10.458 [DEBUG] [Thread-122862] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:06:10.458 [DEBUG] [Thread-122862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:06:10.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:06:10.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:06:10.514 [DEBUG] [Thread-122862] [transport.py] [_log()] userauth is OK
2025-12-03T20:06:10.514 [DEBUG] [Thread-122862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:06:10.514 [DEBUG] [Thread-122862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:06:10.514 [DEBUG] [Thread-122862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:06:10.514 [DEBUG] [Thread-122862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:06:10.537 [INFO] [Thread-122862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:06:10.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:06:10.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:06:11.373 [DEBUG] [Thread-122862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:06:11.373 [DEBUG] [Thread-122862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:06:11.421 [DEBUG] [Thread-122862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:06:11.421 [DEBUG] [Thread-122862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:06:11.430 [DEBUG] [Thread-122862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:06:11.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:06:11.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:06:11.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:06:11.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:06:11.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:06:11.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:06:11.465 [DEBUG] [Thread-122862] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:06:12.880 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:12.881 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:14.822 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:22.182 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:23.617 [DEBUG] [Thread-122864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:29.562 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:37.083 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:38.658 [DEBUG] [Thread-122865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:41.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:06:41.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:06:41.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:06:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 6, 20), 17.79, 29.81, 0.0, 20.41, 17.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:06:42.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:06:20
2025-12-03T20:06:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:06:42.414 [DEBUG] [Thread-122866] [transport.py] [_log()] starting thread (client mode): 0xa271f100
2025-12-03T20:06:42.414 [DEBUG] [Thread-122866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:06:42.432 [DEBUG] [Thread-122866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:06:42.432 [INFO] [Thread-122866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] client lang: <none>
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] server lang: <none>
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] kex follows: False
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] Compression: none
2025-12-03T20:06:42.433 [DEBUG] [Thread-122866] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:06:42.445 [DEBUG] [Thread-122866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:06:42.445 [DEBUG] [Thread-122866] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:06:42.446 [DEBUG] [Thread-122866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:06:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:06:42.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:06:42.447 [DEBUG] [Thread-122866] [transport.py] [_log()] userauth is OK
2025-12-03T20:06:42.447 [DEBUG] [Thread-122866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:06:42.447 [DEBUG] [Thread-122866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:06:42.447 [DEBUG] [Thread-122866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:06:42.447 [DEBUG] [Thread-122866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:06:42.460 [INFO] [Thread-122866] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:06:42.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:06:43.119 [DEBUG] [Thread-122866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:06:43.119 [DEBUG] [Thread-122866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:06:43.120 [DEBUG] [Thread-122866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:06:43.145 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:43.160 [DEBUG] [Thread-122866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:06:43.160 [DEBUG] [Thread-122866] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:06:43.163 [DEBUG] [Thread-122866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:06:43.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:06:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:06:43.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:06:43.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:06:43.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:06:43.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:06:43.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.754213 -999.00  +17.50  18.17     35   +2.00 1 1 1 1 1    85    0 14.84 -23.21 ----- 18.2 18.2 160.0 25.5 17.8 -25.5 17.8 -25.0 17.6 -23.3 17.9 -24.2
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:06:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.754213
2025-12-03T20:06:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:06:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:06:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:06:43.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:06:43.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:06:43.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:06:20', tmtdew=17.79, humidity=29.81, cloud=0.0, wind=20.41, temperature=17.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:06:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:06:43.190 [DEBUG] [Thread-122866] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:06:43.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:06:43.287 [DEBUG] [Thread-122869] [transport.py] [_log()] starting thread (client mode): 0xa2751990
2025-12-03T20:06:43.287 [DEBUG] [Thread-122869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:06:43.302 [DEBUG] [Thread-122869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:06:43.302 [INFO] [Thread-122869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:06:43.311 [DEBUG] [Thread-122869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:06:43.311 [DEBUG] [Thread-122869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:06:43.311 [DEBUG] [Thread-122869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:06:43.311 [DEBUG] [Thread-122869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] client lang: <none>
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] server lang: <none>
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] kex follows: False
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] Compression: none
2025-12-03T20:06:43.312 [DEBUG] [Thread-122869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:06:43.368 [DEBUG] [Thread-122869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:06:43.368 [DEBUG] [Thread-122869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:06:43.369 [DEBUG] [Thread-122869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:06:43.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:06:43.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:06:43.424 [DEBUG] [Thread-122869] [transport.py] [_log()] userauth is OK
2025-12-03T20:06:43.425 [DEBUG] [Thread-122869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:06:43.425 [DEBUG] [Thread-122869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:06:43.425 [DEBUG] [Thread-122869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:06:43.425 [DEBUG] [Thread-122869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:06:43.443 [INFO] [Thread-122869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:06:43.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:06:43.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:06:44.281 [DEBUG] [Thread-122869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:06:44.282 [DEBUG] [Thread-122869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:06:44.330 [DEBUG] [Thread-122869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:06:44.330 [DEBUG] [Thread-122869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:06:44.339 [DEBUG] [Thread-122869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:06:44.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:06:44.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:06:44.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:06:44.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:06:44.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:06:44.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:06:44.374 [DEBUG] [Thread-122869] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:06:50.509 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:53.684 [DEBUG] [Thread-122871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:06:57.874 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:05.526 [DEBUG] [Thread-122872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:08.715 [DEBUG] [Thread-122873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:09.671 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:14.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:07:14.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:07:14.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:07:14.775 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 6, 52), 17.8, 29.79, 0.0, 24.35, 17.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:07:15.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:06:52
2025-12-03T20:07:15.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:07:15.340 [DEBUG] [Thread-122874] [transport.py] [_log()] starting thread (client mode): 0xa2725a80
2025-12-03T20:07:15.340 [DEBUG] [Thread-122874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:07:15.359 [DEBUG] [Thread-122874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:07:15.360 [INFO] [Thread-122874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] client lang: <none>
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] server lang: <none>
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] kex follows: False
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:07:15.363 [DEBUG] [Thread-122874] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:07:15.364 [DEBUG] [Thread-122874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:07:15.364 [DEBUG] [Thread-122874] [transport.py] [_log()] Compression: none
2025-12-03T20:07:15.364 [DEBUG] [Thread-122874] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:07:15.380 [DEBUG] [Thread-122874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:07:15.380 [DEBUG] [Thread-122874] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:07:15.381 [DEBUG] [Thread-122874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:07:15.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:07:15.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:07:15.383 [DEBUG] [Thread-122874] [transport.py] [_log()] userauth is OK
2025-12-03T20:07:15.383 [DEBUG] [Thread-122874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:07:15.383 [DEBUG] [Thread-122874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:07:15.383 [DEBUG] [Thread-122874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:07:15.383 [DEBUG] [Thread-122874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:07:15.405 [INFO] [Thread-122874] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:07:15.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:07:16.027 [DEBUG] [Thread-122874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:07:16.027 [DEBUG] [Thread-122874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:07:16.027 [DEBUG] [Thread-122874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:07:16.068 [DEBUG] [Thread-122874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:07:16.068 [DEBUG] [Thread-122874] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:07:16.071 [DEBUG] [Thread-122874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:07:16.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:07:16.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:07:16.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:07:16.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:07:16.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:07:16.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:07:16.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:07:16.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:07:16.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:07:16.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.754560 -999.00  +17.50  24.22     35   +2.00 1 1 1 1 1    79    0 15.13 -21.12 ----- 24.2 24.2 161.2 26.1 17.8 -25.5 17.8 -25.1 17.6 -23.4 17.9 -24.4
2025-12-03T20:07:16.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:07:16.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:07:16.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.754560
2025-12-03T20:07:16.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:07:16.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:07:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:07:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:07:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:07:16.097 [DEBUG] [Thread-122874] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:07:16.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:06:52', tmtdew=17.8, humidity=29.79, cloud=0.0, wind=24.35, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:06:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:07:16.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:07:16.191 [DEBUG] [Thread-122877] [transport.py] [_log()] starting thread (client mode): 0xa517cd60
2025-12-03T20:07:16.191 [DEBUG] [Thread-122877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:07:16.206 [DEBUG] [Thread-122877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:07:16.206 [INFO] [Thread-122877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:16.214 [DEBUG] [Thread-122877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] client lang: <none>
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] server lang: <none>
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] kex follows: False
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] Compression: none
2025-12-03T20:07:16.215 [DEBUG] [Thread-122877] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:07:16.276 [DEBUG] [Thread-122877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:07:16.276 [DEBUG] [Thread-122877] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:07:16.276 [DEBUG] [Thread-122877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:07:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:07:16.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:07:16.331 [DEBUG] [Thread-122877] [transport.py] [_log()] userauth is OK
2025-12-03T20:07:16.332 [DEBUG] [Thread-122877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:07:16.332 [DEBUG] [Thread-122877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:07:16.332 [DEBUG] [Thread-122877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:07:16.332 [DEBUG] [Thread-122877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:07:16.350 [INFO] [Thread-122877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:07:16.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:07:16.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:07:17.220 [DEBUG] [Thread-122877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:07:17.220 [DEBUG] [Thread-122877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:07:17.268 [DEBUG] [Thread-122877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:07:17.268 [DEBUG] [Thread-122877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:07:17.277 [DEBUG] [Thread-122877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:07:17.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:07:17.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:07:17.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:07:17.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:07:17.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:07:17.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:07:17.312 [DEBUG] [Thread-122877] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:07:19.792 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:19.793 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:22.155 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:23.742 [DEBUG] [Thread-122879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:29.531 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:34.004 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:38.787 [DEBUG] [Thread-122880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:39.115 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:46.505 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:47.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:07:47.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:07:47.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:07:48.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 7, 24), 17.78, 29.82, 0.0, 24.61, 17.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:07:48.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:07:24
2025-12-03T20:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:07:48.322 [DEBUG] [Thread-122881] [transport.py] [_log()] starting thread (client mode): 0xa51e7070
2025-12-03T20:07:48.323 [DEBUG] [Thread-122881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:07:48.333 [DEBUG] [Thread-122881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:07:48.333 [INFO] [Thread-122881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:48.334 [DEBUG] [Thread-122881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] client lang: <none>
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] server lang: <none>
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] kex follows: False
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] Compression: none
2025-12-03T20:07:48.335 [DEBUG] [Thread-122881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:07:48.342 [DEBUG] [Thread-122881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:07:48.342 [DEBUG] [Thread-122881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:07:48.342 [DEBUG] [Thread-122881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:07:48.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:07:48.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:07:48.343 [DEBUG] [Thread-122881] [transport.py] [_log()] userauth is OK
2025-12-03T20:07:48.343 [DEBUG] [Thread-122881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:07:48.343 [DEBUG] [Thread-122881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:07:48.343 [DEBUG] [Thread-122881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:07:48.343 [DEBUG] [Thread-122881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:07:48.352 [INFO] [Thread-122881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:07:48.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:07:49.016 [DEBUG] [Thread-122881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:07:49.017 [DEBUG] [Thread-122881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:07:49.017 [DEBUG] [Thread-122881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:07:49.058 [DEBUG] [Thread-122881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:07:49.058 [DEBUG] [Thread-122881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:07:49.060 [DEBUG] [Thread-122881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:07:49.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:07:49.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:07:49.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:07:49.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:07:49.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:07:49.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:07:49.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.754908 -999.00  +17.40  16.70     35   +2.00 1 1 1 1 1    72    0 14.86 -17.79 ----- 16.7 16.7 158.8 26.9 17.8 -25.4 17.8 -25.0 17.6 -23.3 17.8 -24.4
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:07:49.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.754908
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:07:49.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:07:24', tmtdew=17.78, humidity=29.82, cloud=0.0, wind=24.61, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:07:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:07:49.080 [DEBUG] [Thread-122881] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:07:49.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:07:49.171 [DEBUG] [Thread-122884] [transport.py] [_log()] starting thread (client mode): 0xa51e5bd0
2025-12-03T20:07:49.171 [DEBUG] [Thread-122884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:07:49.187 [DEBUG] [Thread-122884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:07:49.187 [INFO] [Thread-122884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] client lang: <none>
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] server lang: <none>
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] kex follows: False
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:07:49.194 [DEBUG] [Thread-122884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:07:49.195 [DEBUG] [Thread-122884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:07:49.195 [DEBUG] [Thread-122884] [transport.py] [_log()] Compression: none
2025-12-03T20:07:49.195 [DEBUG] [Thread-122884] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:07:49.249 [DEBUG] [Thread-122884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:07:49.249 [DEBUG] [Thread-122884] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:07:49.249 [DEBUG] [Thread-122884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:07:49.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:07:49.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:07:49.310 [DEBUG] [Thread-122884] [transport.py] [_log()] userauth is OK
2025-12-03T20:07:49.311 [DEBUG] [Thread-122884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:07:49.311 [DEBUG] [Thread-122884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:07:49.311 [DEBUG] [Thread-122884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:07:49.311 [DEBUG] [Thread-122884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:07:49.328 [INFO] [Thread-122884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:07:49.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:07:49.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:07:50.169 [DEBUG] [Thread-122884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:07:50.169 [DEBUG] [Thread-122884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:07:50.218 [DEBUG] [Thread-122884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:07:50.218 [DEBUG] [Thread-122884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:07:50.226 [DEBUG] [Thread-122884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:07:50.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:07:50.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:07:50.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:07:50.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:07:50.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:07:50.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:07:50.257 [DEBUG] [Thread-122884] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:07:53.821 [DEBUG] [Thread-122886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:07:53.914 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:05.597 [DEBUG] [Thread-122887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:08.862 [DEBUG] [Thread-122888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:20.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:08:20.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:08:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:08:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 7, 56), 17.78, 29.81, 0.0, 24.65, 17.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:08:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:07:56
2025-12-03T20:08:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:08:21.230 [DEBUG] [Thread-122889] [transport.py] [_log()] starting thread (client mode): 0xa2750d60
2025-12-03T20:08:21.231 [DEBUG] [Thread-122889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:08:21.250 [DEBUG] [Thread-122889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:08:21.251 [INFO] [Thread-122889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] client lang: <none>
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] server lang: <none>
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] kex follows: False
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] Compression: none
2025-12-03T20:08:21.254 [DEBUG] [Thread-122889] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:08:21.270 [DEBUG] [Thread-122889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:08:21.270 [DEBUG] [Thread-122889] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:08:21.270 [DEBUG] [Thread-122889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:08:21.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:08:21.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:08:21.271 [DEBUG] [Thread-122889] [transport.py] [_log()] userauth is OK
2025-12-03T20:08:21.271 [DEBUG] [Thread-122889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:08:21.271 [DEBUG] [Thread-122889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:08:21.271 [DEBUG] [Thread-122889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:08:21.271 [DEBUG] [Thread-122889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:08:21.281 [INFO] [Thread-122889] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:08:21.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:08:21.914 [DEBUG] [Thread-122889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:08:21.915 [DEBUG] [Thread-122889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:08:21.915 [DEBUG] [Thread-122889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:08:21.956 [DEBUG] [Thread-122889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:08:21.956 [DEBUG] [Thread-122889] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:08:21.959 [DEBUG] [Thread-122889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:08:21.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:08:21.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:08:21.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:08:21.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:08:21.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:08:21.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:08:21.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:08:21.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:08:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:08:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.755255 -999.00  +17.40  20.71     35   +1.90 1 1 1 1 1    67    0 15.05 -17.09 ----- 20.7 20.7 164.0 25.7 17.8 -25.6 17.7 -25.0 17.5 -23.3 17.8 -24.2
2025-12-03T20:08:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:08:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.755255
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:08:21.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:07:56', tmtdew=17.78, humidity=29.81, cloud=0.0, wind=24.65, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:07:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:08:21.980 [DEBUG] [Thread-122889] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:08:22.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:08:23.892 [DEBUG] [Thread-122892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:35.256 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:35.257 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:38.934 [DEBUG] [Thread-122893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:08:53.969 [DEBUG] [Thread-122894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:05.650 [DEBUG] [Thread-122895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:09.001 [DEBUG] [Thread-122896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:24.028 [DEBUG] [Thread-122897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:26.521 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:29.639 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:39.057 [DEBUG] [Thread-122898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:39.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:39.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:54.084 [DEBUG] [Thread-122899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:09:58.165 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:05.704 [DEBUG] [Thread-122900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:09.113 [DEBUG] [Thread-122901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:24.139 [DEBUG] [Thread-122902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:25.593 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:36.310 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T20:10:39.169 [DEBUG] [Thread-122903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:43.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:43.731 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:10:54.198 [DEBUG] [Thread-122904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:05.758 [DEBUG] [Thread-122905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:11:06.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:11:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:11:07.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 10, 36), 17.75, 29.89, 0.0, 26.33, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:11:07.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:10:36
2025-12-03T20:11:07.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:11:07.331 [DEBUG] [Thread-122906] [transport.py] [_log()] starting thread (client mode): 0xa271e050
2025-12-03T20:11:07.331 [DEBUG] [Thread-122906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:11:07.351 [DEBUG] [Thread-122906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:11:07.351 [INFO] [Thread-122906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] client lang: <none>
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] server lang: <none>
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] kex follows: False
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] Compression: none
2025-12-03T20:11:07.353 [DEBUG] [Thread-122906] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:11:07.360 [DEBUG] [Thread-122906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:11:07.360 [DEBUG] [Thread-122906] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:11:07.360 [DEBUG] [Thread-122906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:11:07.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:11:07.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:11:07.361 [DEBUG] [Thread-122906] [transport.py] [_log()] userauth is OK
2025-12-03T20:11:07.361 [DEBUG] [Thread-122906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:11:07.361 [DEBUG] [Thread-122906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:11:07.361 [DEBUG] [Thread-122906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:11:07.361 [DEBUG] [Thread-122906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:11:07.370 [INFO] [Thread-122906] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:11:07.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:11:07.992 [DEBUG] [Thread-122906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:11:07.993 [DEBUG] [Thread-122906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:11:07.993 [DEBUG] [Thread-122906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:11:08.034 [DEBUG] [Thread-122906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:11:08.034 [DEBUG] [Thread-122906] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:11:08.038 [DEBUG] [Thread-122906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:11:08.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:11:08.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:11:08.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:11:08.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:11:08.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:11:08.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:11:08.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:11:08.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:11:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:11:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.757338 -999.00  +17.40  19.74     35   +1.90 1 1 1 1 1    40    0 15.09 -9.65 ----- 19.7 19.7 144.8 31.6 17.7 -25.5 17.7 -25.1 17.5 -23.4 17.8 -24.2
2025-12-03T20:11:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:11:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:11:08.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.757338
2025-12-03T20:11:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:11:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:11:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:11:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:11:08.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:11:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:10:36', tmtdew=17.75, humidity=29.89, cloud=0.0, wind=26.33, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:10:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:11:08.064 [DEBUG] [Thread-122906] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:11:08.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:11:08.166 [DEBUG] [Thread-122909] [transport.py] [_log()] starting thread (client mode): 0xa271d5d0
2025-12-03T20:11:08.166 [DEBUG] [Thread-122909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:11:08.186 [DEBUG] [Thread-122909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:11:08.186 [INFO] [Thread-122909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:08.198 [DEBUG] [Thread-122909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] client lang: <none>
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] server lang: <none>
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] kex follows: False
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] Compression: none
2025-12-03T20:11:08.199 [DEBUG] [Thread-122909] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:11:08.253 [DEBUG] [Thread-122909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:11:08.254 [DEBUG] [Thread-122909] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:11:08.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:11:08.255 [DEBUG] [Thread-122909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:11:08.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:11:08.310 [DEBUG] [Thread-122909] [transport.py] [_log()] userauth is OK
2025-12-03T20:11:08.310 [DEBUG] [Thread-122909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:11:08.310 [DEBUG] [Thread-122909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:11:08.310 [DEBUG] [Thread-122909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:11:08.310 [DEBUG] [Thread-122909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:11:08.329 [INFO] [Thread-122909] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:11:08.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:11:08.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:11:09.196 [DEBUG] [Thread-122909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:11:09.196 [DEBUG] [Thread-122909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:11:09.224 [DEBUG] [Thread-122911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:09.244 [DEBUG] [Thread-122909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:11:09.244 [DEBUG] [Thread-122909] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:11:09.257 [DEBUG] [Thread-122909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:11:09.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:11:09.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:11:09.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:11:09.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:11:09.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:11:09.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:11:09.288 [DEBUG] [Thread-122909] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:11:24.257 [DEBUG] [Thread-122912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:39.288 [DEBUG] [Thread-122913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:39.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:11:39.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:11:39.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:11:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 11, 8), 17.75, 29.86, 0.0, 28.64, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:11:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:11:08
2025-12-03T20:11:40.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:11:40.275 [DEBUG] [Thread-122914] [transport.py] [_log()] starting thread (client mode): 0xa271d7b0
2025-12-03T20:11:40.275 [DEBUG] [Thread-122914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:11:40.294 [DEBUG] [Thread-122914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:11:40.295 [INFO] [Thread-122914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:11:40.297 [DEBUG] [Thread-122914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:11:40.297 [DEBUG] [Thread-122914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:11:40.297 [DEBUG] [Thread-122914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:11:40.297 [DEBUG] [Thread-122914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] client lang: <none>
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] server lang: <none>
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] kex follows: False
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] Compression: none
2025-12-03T20:11:40.298 [DEBUG] [Thread-122914] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:11:40.314 [DEBUG] [Thread-122914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:11:40.315 [DEBUG] [Thread-122914] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:11:40.315 [DEBUG] [Thread-122914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:11:40.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:11:40.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:11:40.317 [DEBUG] [Thread-122914] [transport.py] [_log()] userauth is OK
2025-12-03T20:11:40.317 [DEBUG] [Thread-122914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:11:40.318 [DEBUG] [Thread-122914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:11:40.318 [DEBUG] [Thread-122914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:11:40.318 [DEBUG] [Thread-122914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:11:40.353 [INFO] [Thread-122914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:11:40.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:11:40.996 [DEBUG] [Thread-122914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:11:40.996 [DEBUG] [Thread-122914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:11:40.996 [DEBUG] [Thread-122914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:11:41.037 [DEBUG] [Thread-122914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:11:41.037 [DEBUG] [Thread-122914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:11:41.039 [DEBUG] [Thread-122914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:11:41.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:11:41.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:11:41.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:11:41.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:11:41.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:11:41.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:11:41.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.757685 -999.00  +17.40  17.62     35   +2.00 1 1 1 1 1    37    0 15.33 -8.71 ----- 17.6 17.6 153.3 27.1 17.8 -25.5 17.6 -25.0 17.5 -23.4 17.7 -24.4
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:11:41.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.757685
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:11:41.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:11:08', tmtdew=17.75, humidity=29.86, cloud=0.0, wind=28.64, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:11:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:11:41.060 [DEBUG] [Thread-122914] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:11:41.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:11:41.149 [DEBUG] [Thread-122917] [transport.py] [_log()] starting thread (client mode): 0xa51d23b0
2025-12-03T20:11:41.149 [DEBUG] [Thread-122917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:11:41.164 [DEBUG] [Thread-122917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:11:41.165 [INFO] [Thread-122917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] client lang: <none>
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] server lang: <none>
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] kex follows: False
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] Compression: none
2025-12-03T20:11:41.172 [DEBUG] [Thread-122917] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:11:41.232 [DEBUG] [Thread-122917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:11:41.232 [DEBUG] [Thread-122917] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:11:41.233 [DEBUG] [Thread-122917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:11:41.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:11:41.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:11:41.289 [DEBUG] [Thread-122917] [transport.py] [_log()] userauth is OK
2025-12-03T20:11:41.289 [DEBUG] [Thread-122917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:11:41.289 [DEBUG] [Thread-122917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:11:41.289 [DEBUG] [Thread-122917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:11:41.289 [DEBUG] [Thread-122917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:11:41.303 [INFO] [Thread-122917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:11:41.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:11:41.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:11:42.168 [DEBUG] [Thread-122917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:11:42.168 [DEBUG] [Thread-122917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:11:42.215 [DEBUG] [Thread-122917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:11:42.215 [DEBUG] [Thread-122917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:11:42.224 [DEBUG] [Thread-122917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:11:42.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:11:42.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:11:42.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:11:42.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:11:42.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:11:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:11:42.255 [DEBUG] [Thread-122917] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:11:49.548 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:49.549 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:11:54.313 [DEBUG] [Thread-122919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:05.829 [DEBUG] [Thread-122920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:09.354 [DEBUG] [Thread-122921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:12.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:12:12.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:12:12.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:12:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 11, 40), 17.75, 29.87, 0.0, 25.11, 17.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:12:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:11:40
2025-12-03T20:12:13.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:12:13.236 [DEBUG] [Thread-122922] [transport.py] [_log()] starting thread (client mode): 0xa51e4eb0
2025-12-03T20:12:13.236 [DEBUG] [Thread-122922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:12:13.255 [DEBUG] [Thread-122922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:12:13.255 [INFO] [Thread-122922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] client lang: <none>
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] server lang: <none>
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] kex follows: False
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] Compression: none
2025-12-03T20:12:13.257 [DEBUG] [Thread-122922] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:12:13.266 [DEBUG] [Thread-122922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:12:13.266 [DEBUG] [Thread-122922] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:12:13.266 [DEBUG] [Thread-122922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:12:13.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:12:13.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:12:13.267 [DEBUG] [Thread-122922] [transport.py] [_log()] userauth is OK
2025-12-03T20:12:13.267 [DEBUG] [Thread-122922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:12:13.267 [DEBUG] [Thread-122922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:12:13.267 [DEBUG] [Thread-122922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:12:13.267 [DEBUG] [Thread-122922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:12:13.278 [INFO] [Thread-122922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:12:13.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:12:13.889 [DEBUG] [Thread-122922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:12:13.889 [DEBUG] [Thread-122922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:12:13.889 [DEBUG] [Thread-122922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:12:13.930 [DEBUG] [Thread-122922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:12:13.930 [DEBUG] [Thread-122922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:12:13.932 [DEBUG] [Thread-122922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:12:13.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:12:13.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:12:13.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:12:13.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:12:13.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:12:13.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:12:13.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.758032 -999.00  +17.40  16.55     35   +2.00 1 1 1 1 1    34    0 15.09 -7.39 ----- 16.6 16.6 162.8 24.7 17.7 -25.6 17.7 -25.0 17.4 -23.3 17.7 -24.2
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.758032
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:12:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:11:40', tmtdew=17.75, humidity=29.87, cloud=0.0, wind=25.11, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:11:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:12:13.952 [DEBUG] [Thread-122922] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:12:14.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:12:14.037 [DEBUG] [Thread-122925] [transport.py] [_log()] starting thread (client mode): 0xa27c8b50
2025-12-03T20:12:14.037 [DEBUG] [Thread-122925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:12:14.052 [DEBUG] [Thread-122925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:12:14.052 [INFO] [Thread-122925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:14.059 [DEBUG] [Thread-122925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] client lang: <none>
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] server lang: <none>
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] kex follows: False
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] Compression: none
2025-12-03T20:12:14.060 [DEBUG] [Thread-122925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:12:14.115 [DEBUG] [Thread-122925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:12:14.115 [DEBUG] [Thread-122925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:12:14.116 [DEBUG] [Thread-122925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:12:14.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:12:14.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:12:14.173 [DEBUG] [Thread-122925] [transport.py] [_log()] userauth is OK
2025-12-03T20:12:14.173 [DEBUG] [Thread-122925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:12:14.173 [DEBUG] [Thread-122925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:12:14.173 [DEBUG] [Thread-122925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:12:14.173 [DEBUG] [Thread-122925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:12:14.189 [INFO] [Thread-122925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:12:14.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:12:14.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:12:14.997 [DEBUG] [Thread-122925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:12:14.998 [DEBUG] [Thread-122925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:12:15.047 [DEBUG] [Thread-122925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:12:15.047 [DEBUG] [Thread-122925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:12:15.060 [DEBUG] [Thread-122925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:12:15.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:12:15.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:12:15.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:12:15.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:12:15.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:12:15.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:12:15.097 [DEBUG] [Thread-122925] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:12:24.377 [DEBUG] [Thread-122927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:39.414 [DEBUG] [Thread-122928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:45.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:12:45.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:12:45.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:12:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 12, 12), 17.75, 29.89, 0.0, 22.87, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:12:45.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:12:12
2025-12-03T20:12:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:12:46.138 [DEBUG] [Thread-122929] [transport.py] [_log()] starting thread (client mode): 0xa271ded0
2025-12-03T20:12:46.138 [DEBUG] [Thread-122929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:12:46.159 [DEBUG] [Thread-122929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:12:46.159 [INFO] [Thread-122929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] client lang: <none>
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] server lang: <none>
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] kex follows: False
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:12:46.162 [DEBUG] [Thread-122929] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:12:46.163 [DEBUG] [Thread-122929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:12:46.163 [DEBUG] [Thread-122929] [transport.py] [_log()] Compression: none
2025-12-03T20:12:46.163 [DEBUG] [Thread-122929] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:12:46.178 [DEBUG] [Thread-122929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:12:46.179 [DEBUG] [Thread-122929] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:12:46.179 [DEBUG] [Thread-122929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:12:46.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:12:46.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:12:46.180 [DEBUG] [Thread-122929] [transport.py] [_log()] userauth is OK
2025-12-03T20:12:46.180 [DEBUG] [Thread-122929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:12:46.180 [DEBUG] [Thread-122929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:12:46.180 [DEBUG] [Thread-122929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:12:46.180 [DEBUG] [Thread-122929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:12:46.194 [INFO] [Thread-122929] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:12:46.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:12:46.825 [DEBUG] [Thread-122929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:12:46.825 [DEBUG] [Thread-122929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:12:46.826 [DEBUG] [Thread-122929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:12:46.867 [DEBUG] [Thread-122929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:12:46.867 [DEBUG] [Thread-122929] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:12:46.869 [DEBUG] [Thread-122929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:12:46.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:12:46.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:12:46.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:12:46.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:12:46.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:12:46.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:12:46.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.758385 -999.00  +17.30  18.48     35   +2.00 1 1 1 1 1    31    0 15.11 -7.29 ----- 18.5 18.5 148.8 26.6 17.7 -25.5 17.7 -25.1 17.4 -23.3 17.7 -24.2
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.758385
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:12:46.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:12:12', tmtdew=17.75, humidity=29.89, cloud=0.0, wind=22.87, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:12:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:12:46.890 [DEBUG] [Thread-122929] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:12:46.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:12:46.974 [DEBUG] [Thread-122932] [transport.py] [_log()] starting thread (client mode): 0xa51e7c70
2025-12-03T20:12:46.974 [DEBUG] [Thread-122932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:12:46.989 [DEBUG] [Thread-122932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:12:46.989 [INFO] [Thread-122932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] client lang: <none>
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] server lang: <none>
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] kex follows: False
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:12:46.996 [DEBUG] [Thread-122932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:12:46.997 [DEBUG] [Thread-122932] [transport.py] [_log()] Compression: none
2025-12-03T20:12:46.997 [DEBUG] [Thread-122932] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:12:47.056 [DEBUG] [Thread-122932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:12:47.057 [DEBUG] [Thread-122932] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:12:47.057 [DEBUG] [Thread-122932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:12:47.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:12:47.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:12:47.114 [DEBUG] [Thread-122932] [transport.py] [_log()] userauth is OK
2025-12-03T20:12:47.114 [DEBUG] [Thread-122932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:12:47.114 [DEBUG] [Thread-122932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:12:47.114 [DEBUG] [Thread-122932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:12:47.114 [DEBUG] [Thread-122932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:12:47.133 [INFO] [Thread-122932] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:12:47.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:12:47.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:12:47.946 [DEBUG] [Thread-122932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:12:47.947 [DEBUG] [Thread-122932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:12:47.994 [DEBUG] [Thread-122932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:12:47.995 [DEBUG] [Thread-122932] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:12:48.003 [DEBUG] [Thread-122932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:12:48.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:12:48.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:12:48.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:12:48.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:12:48.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:12:48.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:12:48.037 [DEBUG] [Thread-122932] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:12:53.391 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:53.392 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:12:54.442 [DEBUG] [Thread-122934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:05.894 [DEBUG] [Thread-122935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:09.483 [DEBUG] [Thread-122936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:18.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:13:18.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:13:18.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:13:18.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 12, 44), 17.73, 29.92, 0.0, 24.58, 17.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:13:18.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:12:44
2025-12-03T20:13:18.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:13:19.068 [DEBUG] [Thread-122937] [transport.py] [_log()] starting thread (client mode): 0xa517d2d0
2025-12-03T20:13:19.068 [DEBUG] [Thread-122937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:13:19.087 [DEBUG] [Thread-122937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:13:19.087 [INFO] [Thread-122937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] client lang: <none>
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] server lang: <none>
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] kex follows: False
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] Compression: none
2025-12-03T20:13:19.090 [DEBUG] [Thread-122937] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:13:19.107 [DEBUG] [Thread-122937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:13:19.107 [DEBUG] [Thread-122937] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:13:19.108 [DEBUG] [Thread-122937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:13:19.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:13:19.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:13:19.109 [DEBUG] [Thread-122937] [transport.py] [_log()] userauth is OK
2025-12-03T20:13:19.109 [DEBUG] [Thread-122937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:13:19.109 [DEBUG] [Thread-122937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:13:19.110 [DEBUG] [Thread-122937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:13:19.110 [DEBUG] [Thread-122937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:13:19.123 [INFO] [Thread-122937] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:13:19.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:13:19.710 [DEBUG] [Thread-122937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:13:19.710 [DEBUG] [Thread-122937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:13:19.710 [DEBUG] [Thread-122937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:13:19.751 [DEBUG] [Thread-122937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:13:19.751 [DEBUG] [Thread-122937] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:13:19.754 [DEBUG] [Thread-122937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:13:19.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:13:19.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:13:19.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:13:19.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:13:19.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:13:19.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:13:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.758727 -999.00  +17.30  23.62     35   +1.90 1 1 1 1 1    28    0 15.26 -6.87 ----- 23.6 23.6 163.2 30.2 17.8 -25.4 17.7 -24.9 17.4 -23.2 17.7 -24.1
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:13:19.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.758727
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:13:19.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:12:44', tmtdew=17.73, humidity=29.92, cloud=0.0, wind=24.58, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:12:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:13:19.776 [DEBUG] [Thread-122937] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:13:19.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:13:19.868 [DEBUG] [Thread-122940] [transport.py] [_log()] starting thread (client mode): 0xa277aad0
2025-12-03T20:13:19.868 [DEBUG] [Thread-122940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:13:19.887 [DEBUG] [Thread-122940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:13:19.887 [INFO] [Thread-122940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:13:19.897 [DEBUG] [Thread-122940] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:13:19.897 [DEBUG] [Thread-122940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] client lang: <none>
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] server lang: <none>
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] kex follows: False
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] Compression: none
2025-12-03T20:13:19.898 [DEBUG] [Thread-122940] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:13:19.953 [DEBUG] [Thread-122940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:13:19.954 [DEBUG] [Thread-122940] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:13:19.954 [DEBUG] [Thread-122940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:13:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:13:19.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:13:20.011 [DEBUG] [Thread-122940] [transport.py] [_log()] userauth is OK
2025-12-03T20:13:20.011 [DEBUG] [Thread-122940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:13:20.011 [DEBUG] [Thread-122940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:13:20.011 [DEBUG] [Thread-122940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:13:20.011 [DEBUG] [Thread-122940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:13:20.030 [INFO] [Thread-122940] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:13:20.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:13:20.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:13:20.898 [DEBUG] [Thread-122940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:13:20.899 [DEBUG] [Thread-122940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:13:20.946 [DEBUG] [Thread-122940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:13:20.947 [DEBUG] [Thread-122940] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:13:20.955 [DEBUG] [Thread-122940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:13:20.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:13:20.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:13:20.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:13:20.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:13:20.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:13:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:13:20.988 [DEBUG] [Thread-122940] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:13:24.516 [DEBUG] [Thread-122942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:39.556 [DEBUG] [Thread-122943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:50.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:13:50.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:13:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:13:51.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 13, 17), 17.76, 29.87, 0.0, 23.98, 17.46, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:13:51.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:13:17
2025-12-03T20:13:51.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:13:51.953 [DEBUG] [Thread-122944] [transport.py] [_log()] starting thread (client mode): 0xa51e5a20
2025-12-03T20:13:51.953 [DEBUG] [Thread-122944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:13:51.976 [DEBUG] [Thread-122944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:13:51.976 [INFO] [Thread-122944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] client lang: <none>
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] server lang: <none>
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] kex follows: False
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] Compression: none
2025-12-03T20:13:51.980 [DEBUG] [Thread-122944] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:13:51.997 [DEBUG] [Thread-122944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:13:51.997 [DEBUG] [Thread-122944] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:13:51.998 [DEBUG] [Thread-122944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:13:51.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:13:51.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:13:52.000 [DEBUG] [Thread-122944] [transport.py] [_log()] userauth is OK
2025-12-03T20:13:52.000 [DEBUG] [Thread-122944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:13:52.000 [DEBUG] [Thread-122944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:13:52.000 [DEBUG] [Thread-122944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:13:52.000 [DEBUG] [Thread-122944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:13:52.035 [INFO] [Thread-122944] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:13:52.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:13:52.661 [DEBUG] [Thread-122944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:13:52.661 [DEBUG] [Thread-122944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:13:52.662 [DEBUG] [Thread-122944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:13:52.704 [DEBUG] [Thread-122944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:13:52.704 [DEBUG] [Thread-122944] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:13:52.707 [DEBUG] [Thread-122944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:13:52.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:13:52.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:13:52.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:13:52.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:13:52.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:13:52.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:13:52.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.759074 -999.00  +17.30  17.26     35   +2.00 1 1 1 1 1    26    0 15.32 -6.35 ----- 17.3 17.3 147.8 28.1 17.7 -25.5 -999.0 -999.0 17.4 -23.3 17.7 -24.1
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:13:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.759074
2025-12-03T20:13:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:13:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:13:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:13:52.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:13:52.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:13:52.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:13:17', tmtdew=17.76, humidity=29.87, cloud=0.0, wind=23.98, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:13:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:13:52.733 [DEBUG] [Thread-122944] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:13:52.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:13:52.834 [DEBUG] [Thread-122947] [transport.py] [_log()] starting thread (client mode): 0xa277a170
2025-12-03T20:13:52.834 [DEBUG] [Thread-122947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:13:52.848 [DEBUG] [Thread-122947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:13:52.848 [INFO] [Thread-122947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:52.856 [DEBUG] [Thread-122947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] client lang: <none>
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] server lang: <none>
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] kex follows: False
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:13:52.857 [DEBUG] [Thread-122947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:13:52.858 [DEBUG] [Thread-122947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:13:52.858 [DEBUG] [Thread-122947] [transport.py] [_log()] Compression: none
2025-12-03T20:13:52.858 [DEBUG] [Thread-122947] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:13:52.914 [DEBUG] [Thread-122947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:13:52.914 [DEBUG] [Thread-122947] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:13:52.915 [DEBUG] [Thread-122947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:13:52.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:13:52.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:13:52.970 [DEBUG] [Thread-122947] [transport.py] [_log()] userauth is OK
2025-12-03T20:13:52.971 [DEBUG] [Thread-122947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:13:52.971 [DEBUG] [Thread-122947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:13:52.971 [DEBUG] [Thread-122947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:13:52.971 [DEBUG] [Thread-122947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:13:52.989 [INFO] [Thread-122947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:13:52.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:13:52.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:13:53.792 [DEBUG] [Thread-122947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:13:53.792 [DEBUG] [Thread-122947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:13:53.840 [DEBUG] [Thread-122947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:13:53.840 [DEBUG] [Thread-122947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:13:53.849 [DEBUG] [Thread-122947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:13:53.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:13:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:13:53.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:13:53.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:13:53.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:13:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:13:53.883 [DEBUG] [Thread-122947] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:13:54.584 [DEBUG] [Thread-122949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:57.438 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:13:57.439 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:05.954 [DEBUG] [Thread-122950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:09.635 [DEBUG] [Thread-122951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:14:23.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:14:23.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:14:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 14, 21), 17.6, 29.97, 0.0, 28.32, 17.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:14:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:14:21
2025-12-03T20:14:24.661 [DEBUG] [Thread-122952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:14:24.858 [DEBUG] [Thread-122953] [transport.py] [_log()] starting thread (client mode): 0xa51e7d60
2025-12-03T20:14:24.858 [DEBUG] [Thread-122953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:14:24.868 [DEBUG] [Thread-122953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:14:24.868 [INFO] [Thread-122953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:14:24.869 [DEBUG] [Thread-122953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] client lang: <none>
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] server lang: <none>
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] kex follows: False
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] Compression: none
2025-12-03T20:14:24.870 [DEBUG] [Thread-122953] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:14:24.888 [DEBUG] [Thread-122953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:14:24.889 [DEBUG] [Thread-122953] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:14:24.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:14:24.890 [DEBUG] [Thread-122953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:14:24.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:14:24.891 [DEBUG] [Thread-122953] [transport.py] [_log()] userauth is OK
2025-12-03T20:14:24.892 [DEBUG] [Thread-122953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:14:24.892 [DEBUG] [Thread-122953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:14:24.892 [DEBUG] [Thread-122953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:14:24.892 [DEBUG] [Thread-122953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:14:24.906 [INFO] [Thread-122953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:14:24.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:14:25.477 [DEBUG] [Thread-122953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:14:25.477 [DEBUG] [Thread-122953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:14:25.477 [DEBUG] [Thread-122953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:14:25.518 [DEBUG] [Thread-122953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:14:25.518 [DEBUG] [Thread-122953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:14:25.521 [DEBUG] [Thread-122953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:14:25.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:14:25.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:14:25.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:14:25.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:14:25.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:14:25.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:14:25.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:14:25.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:14:25.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:14:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.759769 -999.00  +17.30  17.92     35   +2.00 1 1 1 1 1    22    0 15.27 -7.34 ----- 17.9 17.9 148.2 24.7 17.7 -25.5 17.6 -25.0 17.4 -23.3 17.6 -24.1
2025-12-03T20:14:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:14:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:14:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.759769
2025-12-03T20:14:25.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:14:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:14:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:14:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:14:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:14:25.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:14:21', tmtdew=17.6, humidity=29.97, cloud=0.0, wind=28.32, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:14:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:14:25.546 [DEBUG] [Thread-122953] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:14:25.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:14:25.641 [DEBUG] [Thread-122956] [transport.py] [_log()] starting thread (client mode): 0xa514a2c0
2025-12-03T20:14:25.641 [DEBUG] [Thread-122956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:14:25.655 [DEBUG] [Thread-122956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:14:25.655 [INFO] [Thread-122956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] client lang: <none>
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] server lang: <none>
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] kex follows: False
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:14:25.663 [DEBUG] [Thread-122956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:14:25.664 [DEBUG] [Thread-122956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:14:25.664 [DEBUG] [Thread-122956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:14:25.664 [DEBUG] [Thread-122956] [transport.py] [_log()] Compression: none
2025-12-03T20:14:25.664 [DEBUG] [Thread-122956] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:14:25.723 [DEBUG] [Thread-122956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:14:25.723 [DEBUG] [Thread-122956] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:14:25.724 [DEBUG] [Thread-122956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:14:25.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:14:25.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:14:25.778 [DEBUG] [Thread-122956] [transport.py] [_log()] userauth is OK
2025-12-03T20:14:25.779 [DEBUG] [Thread-122956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:14:25.779 [DEBUG] [Thread-122956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:14:25.779 [DEBUG] [Thread-122956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:14:25.779 [DEBUG] [Thread-122956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:14:25.798 [INFO] [Thread-122956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:14:25.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:14:25.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:14:26.701 [DEBUG] [Thread-122956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:14:26.701 [DEBUG] [Thread-122956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:14:26.750 [DEBUG] [Thread-122956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:14:26.750 [DEBUG] [Thread-122956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:14:26.759 [DEBUG] [Thread-122956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:14:26.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:14:26.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:14:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:14:26.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:14:26.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:14:26.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:14:26.793 [DEBUG] [Thread-122956] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:14:39.689 [DEBUG] [Thread-122958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:54.733 [DEBUG] [Thread-122959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:14:56.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:14:56.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:14:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:14:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 14, 53), 17.66, 29.96, 0.0, 28.0, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:14:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:14:53
2025-12-03T20:14:57.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:14:57.791 [DEBUG] [Thread-122960] [transport.py] [_log()] starting thread (client mode): 0xa517e530
2025-12-03T20:14:57.791 [DEBUG] [Thread-122960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:14:57.809 [DEBUG] [Thread-122960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:14:57.809 [INFO] [Thread-122960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] client lang: <none>
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] server lang: <none>
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] kex follows: False
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:14:57.812 [DEBUG] [Thread-122960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:14:57.813 [DEBUG] [Thread-122960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:14:57.813 [DEBUG] [Thread-122960] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:14:57.813 [DEBUG] [Thread-122960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:14:57.813 [DEBUG] [Thread-122960] [transport.py] [_log()] Compression: none
2025-12-03T20:14:57.813 [DEBUG] [Thread-122960] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:14:57.820 [DEBUG] [Thread-122960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:14:57.820 [DEBUG] [Thread-122960] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:14:57.820 [DEBUG] [Thread-122960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:14:57.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:14:57.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:14:57.821 [DEBUG] [Thread-122960] [transport.py] [_log()] userauth is OK
2025-12-03T20:14:57.821 [DEBUG] [Thread-122960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:14:57.821 [DEBUG] [Thread-122960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:14:57.821 [DEBUG] [Thread-122960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:14:57.821 [DEBUG] [Thread-122960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:14:57.830 [INFO] [Thread-122960] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:14:57.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:14:58.445 [DEBUG] [Thread-122960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:14:58.445 [DEBUG] [Thread-122960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:14:58.446 [DEBUG] [Thread-122960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:14:58.487 [DEBUG] [Thread-122960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:14:58.487 [DEBUG] [Thread-122960] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:14:58.489 [DEBUG] [Thread-122960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:14:58.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:14:58.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:14:58.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:14:58.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:14:58.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:14:58.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:14:58.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.760116 -999.00  +17.30  18.94     35   +2.00 1 1 1 1 1    20    0 15.45 -7.74 ----- 18.9 18.9 164.0 24.6 17.7 -25.5 17.6 -24.9 17.4 -23.2 17.6 -24.2
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.760116
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:14:58.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:14:53', tmtdew=17.66, humidity=29.96, cloud=0.0, wind=28.0, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:14:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:14:58.500 [DEBUG] [Thread-122960] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:14:58.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:14:58.588 [DEBUG] [Thread-122963] [transport.py] [_log()] starting thread (client mode): 0xa514af20
2025-12-03T20:14:58.588 [DEBUG] [Thread-122963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:14:58.603 [DEBUG] [Thread-122963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:14:58.603 [INFO] [Thread-122963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] client lang: <none>
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] server lang: <none>
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] kex follows: False
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] Compression: none
2025-12-03T20:14:58.611 [DEBUG] [Thread-122963] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:14:58.668 [DEBUG] [Thread-122963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:14:58.668 [DEBUG] [Thread-122963] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:14:58.668 [DEBUG] [Thread-122963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:14:58.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:14:58.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:14:58.726 [DEBUG] [Thread-122963] [transport.py] [_log()] userauth is OK
2025-12-03T20:14:58.726 [DEBUG] [Thread-122963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:14:58.726 [DEBUG] [Thread-122963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:14:58.726 [DEBUG] [Thread-122963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:14:58.726 [DEBUG] [Thread-122963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:14:58.740 [INFO] [Thread-122963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:14:58.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:14:58.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:14:59.575 [DEBUG] [Thread-122963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:14:59.575 [DEBUG] [Thread-122963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:14:59.622 [DEBUG] [Thread-122963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:14:59.623 [DEBUG] [Thread-122963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:14:59.631 [DEBUG] [Thread-122963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:14:59.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:14:59.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:14:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:14:59.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:14:59.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:14:59.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:14:59.663 [DEBUG] [Thread-122963] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:15:05.224 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:05.225 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:06.042 [DEBUG] [Thread-122965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:09.760 [DEBUG] [Thread-122966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:24.804 [DEBUG] [Thread-122967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:29.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:15:29.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:15:29.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:15:30.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 15, 25), 17.66, 29.96, 0.0, 28.74, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:15:30.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:15:25
2025-12-03T20:15:30.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:15:30.638 [DEBUG] [Thread-122968] [transport.py] [_log()] starting thread (client mode): 0xa2762590
2025-12-03T20:15:30.638 [DEBUG] [Thread-122968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:15:30.658 [DEBUG] [Thread-122968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:15:30.658 [INFO] [Thread-122968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:15:30.661 [DEBUG] [Thread-122968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:15:30.661 [DEBUG] [Thread-122968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:15:30.661 [DEBUG] [Thread-122968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] client lang: <none>
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] server lang: <none>
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] kex follows: False
2025-12-03T20:15:30.662 [DEBUG] [Thread-122968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] Compression: none
2025-12-03T20:15:30.663 [DEBUG] [Thread-122968] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:15:30.682 [DEBUG] [Thread-122968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:15:30.682 [DEBUG] [Thread-122968] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:15:30.684 [DEBUG] [Thread-122968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:15:30.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:15:30.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:15:30.686 [DEBUG] [Thread-122968] [transport.py] [_log()] userauth is OK
2025-12-03T20:15:30.686 [DEBUG] [Thread-122968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:15:30.686 [DEBUG] [Thread-122968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:15:30.686 [DEBUG] [Thread-122968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:15:30.686 [DEBUG] [Thread-122968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:15:30.702 [INFO] [Thread-122968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:15:30.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:15:31.292 [DEBUG] [Thread-122968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:15:31.292 [DEBUG] [Thread-122968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:15:31.292 [DEBUG] [Thread-122968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:15:31.333 [DEBUG] [Thread-122968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:15:31.333 [DEBUG] [Thread-122968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:15:31.335 [DEBUG] [Thread-122968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:15:31.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:15:31.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:15:31.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:15:31.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:15:31.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:15:31.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:15:31.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:15:31.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:15:31.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:15:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.760468 -999.00  +17.30  20.30     35   +2.00 1 1 1 1 1    18    0 15.24 -8.50 ----- 20.3 20.3 171.2 24.5 17.7 -25.4 17.6 -25.0 17.4 -23.2 17.7 -24.2
2025-12-03T20:15:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:15:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:15:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.760468
2025-12-03T20:15:31.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:15:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:15:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:15:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:15:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:15:31.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:15:25', tmtdew=17.66, humidity=29.96, cloud=0.0, wind=28.74, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:15:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:15:31.357 [DEBUG] [Thread-122968] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:15:31.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:15:39.830 [DEBUG] [Thread-122971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:15:54.866 [DEBUG] [Thread-122972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:06.107 [DEBUG] [Thread-122973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:09.893 [DEBUG] [Thread-122974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:10.538 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:10.539 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:24.919 [DEBUG] [Thread-122975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:39.952 [DEBUG] [Thread-122976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:16:54.982 [DEBUG] [Thread-122977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:06.166 [DEBUG] [Thread-122978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:10.007 [DEBUG] [Thread-122979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:19.666 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:19.667 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:25.040 [DEBUG] [Thread-122980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:40.064 [DEBUG] [Thread-122981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:17:46.390 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T20:17:55.091 [DEBUG] [Thread-122982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:06.218 [DEBUG] [Thread-122983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:10.118 [DEBUG] [Thread-122984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:16.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:18:16.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:18:16.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:18:17.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 18, 5), 17.56, 30.57, 0.0, 30.67, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:18:17.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:18:05
2025-12-03T20:18:17.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:18:17.439 [DEBUG] [Thread-122985] [transport.py] [_log()] starting thread (client mode): 0xa27600d0
2025-12-03T20:18:17.439 [DEBUG] [Thread-122985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:18:17.460 [DEBUG] [Thread-122985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:18:17.460 [INFO] [Thread-122985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] client lang: <none>
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] server lang: <none>
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] kex follows: False
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] Compression: none
2025-12-03T20:18:17.464 [DEBUG] [Thread-122985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:18:17.480 [DEBUG] [Thread-122985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:18:17.481 [DEBUG] [Thread-122985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:18:17.481 [DEBUG] [Thread-122985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:18:17.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:18:17.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:18:17.482 [DEBUG] [Thread-122985] [transport.py] [_log()] userauth is OK
2025-12-03T20:18:17.482 [DEBUG] [Thread-122985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:18:17.482 [DEBUG] [Thread-122985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:18:17.482 [DEBUG] [Thread-122985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:18:17.482 [DEBUG] [Thread-122985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:18:17.494 [INFO] [Thread-122985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:18:17.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:18:18.128 [DEBUG] [Thread-122985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:18:18.128 [DEBUG] [Thread-122985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:18:18.128 [DEBUG] [Thread-122985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:18:18.169 [DEBUG] [Thread-122985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:18:18.169 [DEBUG] [Thread-122985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:18:18.171 [DEBUG] [Thread-122985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:18:18.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:18:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:18:18.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:18:18.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:18:18.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:18:18.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.762199 -999.00  +17.30  20.27     36   +2.00 1 1 1 1 1    12    0 15.11 -11.91 ----- 20.3 20.3 156.2 28.7 17.6 -25.4 17.5 -24.9 17.4 -23.1 17.6 -24.2
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:18:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.762199
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:18:18.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:18:05', tmtdew=17.56, humidity=30.57, cloud=0.0, wind=30.67, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:17:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:18:18.189 [DEBUG] [Thread-122985] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:18:18.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:18:18.275 [DEBUG] [Thread-122988] [transport.py] [_log()] starting thread (client mode): 0xa277a110
2025-12-03T20:18:18.276 [DEBUG] [Thread-122988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:18:18.290 [DEBUG] [Thread-122988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:18:18.290 [INFO] [Thread-122988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] client lang: <none>
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] server lang: <none>
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] kex follows: False
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:18:18.297 [DEBUG] [Thread-122988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:18:18.298 [DEBUG] [Thread-122988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:18:18.298 [DEBUG] [Thread-122988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:18:18.298 [DEBUG] [Thread-122988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:18:18.298 [DEBUG] [Thread-122988] [transport.py] [_log()] Compression: none
2025-12-03T20:18:18.298 [DEBUG] [Thread-122988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:18:18.354 [DEBUG] [Thread-122988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:18:18.354 [DEBUG] [Thread-122988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:18:18.354 [DEBUG] [Thread-122988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:18:18.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:18:18.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:18:18.411 [DEBUG] [Thread-122988] [transport.py] [_log()] userauth is OK
2025-12-03T20:18:18.411 [DEBUG] [Thread-122988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:18:18.411 [DEBUG] [Thread-122988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:18:18.411 [DEBUG] [Thread-122988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:18:18.411 [DEBUG] [Thread-122988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:18:18.428 [INFO] [Thread-122988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:18:18.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:18:18.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:18:19.237 [DEBUG] [Thread-122988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:18:19.237 [DEBUG] [Thread-122988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:18:19.285 [DEBUG] [Thread-122988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:18:19.285 [DEBUG] [Thread-122988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:18:19.293 [DEBUG] [Thread-122988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:18:19.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:18:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:18:19.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:18:19.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:18:19.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:18:19.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:18:19.325 [DEBUG] [Thread-122988] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:18:23.779 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:23.780 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:25.150 [DEBUG] [Thread-122990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:40.194 [DEBUG] [Thread-122991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:18:49.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:18:49.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:18:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:18:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 18, 37), 17.55, 30.57, 0.0, 27.79, 17.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:18:50.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:18:37
2025-12-03T20:18:50.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:18:50.323 [DEBUG] [Thread-122992] [transport.py] [_log()] starting thread (client mode): 0xa27244f0
2025-12-03T20:18:50.323 [DEBUG] [Thread-122992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:18:50.345 [DEBUG] [Thread-122992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:18:50.345 [INFO] [Thread-122992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] client lang: <none>
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] server lang: <none>
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] kex follows: False
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:18:50.348 [DEBUG] [Thread-122992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:18:50.349 [DEBUG] [Thread-122992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:18:50.349 [DEBUG] [Thread-122992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:18:50.349 [DEBUG] [Thread-122992] [transport.py] [_log()] Compression: none
2025-12-03T20:18:50.349 [DEBUG] [Thread-122992] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:18:50.366 [DEBUG] [Thread-122992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:18:50.367 [DEBUG] [Thread-122992] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:18:50.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:18:50.368 [DEBUG] [Thread-122992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:18:50.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:18:50.370 [DEBUG] [Thread-122992] [transport.py] [_log()] userauth is OK
2025-12-03T20:18:50.370 [DEBUG] [Thread-122992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:18:50.370 [DEBUG] [Thread-122992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:18:50.370 [DEBUG] [Thread-122992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:18:50.370 [DEBUG] [Thread-122992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:18:50.394 [INFO] [Thread-122992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:18:50.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:18:51.020 [DEBUG] [Thread-122992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:18:51.020 [DEBUG] [Thread-122992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:18:51.020 [DEBUG] [Thread-122992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:18:51.061 [DEBUG] [Thread-122992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:18:51.061 [DEBUG] [Thread-122992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:18:51.064 [DEBUG] [Thread-122992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:18:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:18:51.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:18:51.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:18:51.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:18:51.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:18:51.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:18:51.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:18:51.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.762552 -999.00  +17.30  16.16     36   +2.00 1 1 1 1 1    11    0 15.21 -13.15 ----- 16.2 16.2 157.4 24.6 17.6 -25.3 17.5 -24.9 17.3 -23.3 17.6 -24.2
2025-12-03T20:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.762552
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:18:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:18:37', tmtdew=17.55, humidity=30.57, cloud=0.0, wind=27.79, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:18:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:18:51.090 [DEBUG] [Thread-122992] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:18:51.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:18:51.186 [DEBUG] [Thread-122995] [transport.py] [_log()] starting thread (client mode): 0xa514ae60
2025-12-03T20:18:51.186 [DEBUG] [Thread-122995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:18:51.200 [DEBUG] [Thread-122995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:18:51.200 [INFO] [Thread-122995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] client lang: <none>
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] server lang: <none>
2025-12-03T20:18:51.208 [DEBUG] [Thread-122995] [transport.py] [_log()] kex follows: False
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] Compression: none
2025-12-03T20:18:51.209 [DEBUG] [Thread-122995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:18:51.266 [DEBUG] [Thread-122995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:18:51.267 [DEBUG] [Thread-122995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:18:51.267 [DEBUG] [Thread-122995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:18:51.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:18:51.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:18:51.322 [DEBUG] [Thread-122995] [transport.py] [_log()] userauth is OK
2025-12-03T20:18:51.322 [DEBUG] [Thread-122995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:18:51.322 [DEBUG] [Thread-122995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:18:51.322 [DEBUG] [Thread-122995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:18:51.322 [DEBUG] [Thread-122995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:18:51.336 [INFO] [Thread-122995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:18:51.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:18:51.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:18:52.168 [DEBUG] [Thread-122995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:18:52.169 [DEBUG] [Thread-122995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:18:52.217 [DEBUG] [Thread-122995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:18:52.217 [DEBUG] [Thread-122995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:18:52.226 [DEBUG] [Thread-122995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:18:52.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:18:52.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:18:52.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:18:52.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:18:52.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:18:52.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:18:52.259 [DEBUG] [Thread-122995] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:18:55.220 [DEBUG] [Thread-122997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:06.288 [DEBUG] [Thread-122998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:10.254 [DEBUG] [Thread-122999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:22.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:19:22.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:19:22.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:19:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 19, 9), 17.56, 30.57, 0.0, 27.05, 17.41, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:19:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:19:09
2025-12-03T20:19:23.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:19:23.221 [DEBUG] [Thread-123000] [transport.py] [_log()] starting thread (client mode): 0xa27624d0
2025-12-03T20:19:23.221 [DEBUG] [Thread-123000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:19:23.242 [DEBUG] [Thread-123000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:19:23.242 [INFO] [Thread-123000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] client lang: <none>
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] server lang: <none>
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] kex follows: False
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] Compression: none
2025-12-03T20:19:23.245 [DEBUG] [Thread-123000] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:19:23.265 [DEBUG] [Thread-123000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:19:23.266 [DEBUG] [Thread-123000] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:19:23.266 [DEBUG] [Thread-123000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:19:23.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:19:23.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:19:23.268 [DEBUG] [Thread-123000] [transport.py] [_log()] userauth is OK
2025-12-03T20:19:23.268 [DEBUG] [Thread-123000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:19:23.268 [DEBUG] [Thread-123000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:19:23.269 [DEBUG] [Thread-123000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:19:23.269 [DEBUG] [Thread-123000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:19:23.300 [INFO] [Thread-123000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:19:23.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:19:23.920 [DEBUG] [Thread-123000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:19:23.920 [DEBUG] [Thread-123000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:19:23.920 [DEBUG] [Thread-123000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:19:23.961 [DEBUG] [Thread-123000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:19:23.961 [DEBUG] [Thread-123000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:19:23.964 [DEBUG] [Thread-123000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:19:23.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:19:23.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:19:23.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:19:23.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:19:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:19:23.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:19:23.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:19:23.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:19:23.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:19:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.763246 -999.00  +17.30  18.20     36   +2.00 1 1 1 1 1     9    0 15.18 -15.63 ----- 18.2 18.2 150.2 27.1 17.6 -25.3 17.5 -24.9 17.3 -23.2 17.6 -24.1
2025-12-03T20:19:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:19:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:19:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.763246
2025-12-03T20:19:23.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:19:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:19:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:19:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:19:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:19:23.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:19:09', tmtdew=17.56, humidity=30.57, cloud=0.0, wind=27.05, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:19:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:19:23.988 [DEBUG] [Thread-123000] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:19:24.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:19:24.083 [DEBUG] [Thread-123003] [transport.py] [_log()] starting thread (client mode): 0xa2779ff0
2025-12-03T20:19:24.084 [DEBUG] [Thread-123003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:19:24.098 [DEBUG] [Thread-123003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:19:24.098 [INFO] [Thread-123003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:19:24.105 [DEBUG] [Thread-123003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] client lang: <none>
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] server lang: <none>
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] kex follows: False
2025-12-03T20:19:24.106 [DEBUG] [Thread-123003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] Compression: none
2025-12-03T20:19:24.107 [DEBUG] [Thread-123003] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:19:24.161 [DEBUG] [Thread-123003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:19:24.161 [DEBUG] [Thread-123003] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:19:24.162 [DEBUG] [Thread-123003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:19:24.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:19:24.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:19:24.218 [DEBUG] [Thread-123003] [transport.py] [_log()] userauth is OK
2025-12-03T20:19:24.218 [DEBUG] [Thread-123003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:19:24.218 [DEBUG] [Thread-123003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:19:24.219 [DEBUG] [Thread-123003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:19:24.219 [DEBUG] [Thread-123003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:19:24.241 [INFO] [Thread-123003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:19:24.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:19:24.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:19:25.050 [DEBUG] [Thread-123003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:19:25.050 [DEBUG] [Thread-123003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:19:25.098 [DEBUG] [Thread-123003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:19:25.098 [DEBUG] [Thread-123003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:19:25.107 [DEBUG] [Thread-123003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:19:25.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:19:25.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:19:25.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:19:25.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:19:25.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:19:25.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:19:25.142 [DEBUG] [Thread-123003] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:19:25.280 [DEBUG] [Thread-123005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:31.474 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:31.475 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:40.323 [DEBUG] [Thread-123006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:19:55.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:19:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:19:55.349 [DEBUG] [Thread-123007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:19:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 19, 41), 17.55, 30.59, 0.0, 25.76, 17.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:19:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:19:41
2025-12-03T20:19:55.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:19:56.112 [DEBUG] [Thread-123008] [transport.py] [_log()] starting thread (client mode): 0xa2778d30
2025-12-03T20:19:56.112 [DEBUG] [Thread-123008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:19:56.128 [DEBUG] [Thread-123008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:19:56.128 [INFO] [Thread-123008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] client lang: <none>
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] server lang: <none>
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] kex follows: False
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] Compression: none
2025-12-03T20:19:56.131 [DEBUG] [Thread-123008] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:19:56.146 [DEBUG] [Thread-123008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:19:56.147 [DEBUG] [Thread-123008] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:19:56.147 [DEBUG] [Thread-123008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:19:56.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:19:56.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:19:56.149 [DEBUG] [Thread-123008] [transport.py] [_log()] userauth is OK
2025-12-03T20:19:56.149 [DEBUG] [Thread-123008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:19:56.150 [DEBUG] [Thread-123008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:19:56.150 [DEBUG] [Thread-123008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:19:56.150 [DEBUG] [Thread-123008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:19:56.173 [INFO] [Thread-123008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:19:56.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:19:56.841 [DEBUG] [Thread-123008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:19:56.841 [DEBUG] [Thread-123008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:19:56.842 [DEBUG] [Thread-123008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:19:56.882 [DEBUG] [Thread-123008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:19:56.882 [DEBUG] [Thread-123008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:19:56.885 [DEBUG] [Thread-123008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:19:56.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:19:56.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:19:56.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:19:56.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:19:56.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:19:56.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:19:56.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:19:56.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:19:56.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:19:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.763594 -999.00  +17.20  19.50     36   +2.10 1 1 1 1 1     8    0 14.98 -18.50 ----- 19.5 19.5 149.2 26.0 17.6 -25.3 17.5 -24.9 17.3 -23.3 17.6 -24.0
2025-12-03T20:19:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:19:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:19:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.763594
2025-12-03T20:19:56.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:19:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:19:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:19:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:19:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:19:56.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:19:41', tmtdew=17.55, humidity=30.59, cloud=0.0, wind=25.76, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:19:34.522', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:19:56.908 [DEBUG] [Thread-123008] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:19:56.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:19:57.004 [DEBUG] [Thread-123011] [transport.py] [_log()] starting thread (client mode): 0xa27619c0
2025-12-03T20:19:57.004 [DEBUG] [Thread-123011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:19:57.020 [DEBUG] [Thread-123011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:19:57.020 [INFO] [Thread-123011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:19:57.030 [DEBUG] [Thread-123011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:19:57.030 [DEBUG] [Thread-123011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] client lang: <none>
2025-12-03T20:19:57.031 [DEBUG] [Thread-123011] [transport.py] [_log()] server lang: <none>
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] kex follows: False
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] Compression: none
2025-12-03T20:19:57.032 [DEBUG] [Thread-123011] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:19:57.086 [DEBUG] [Thread-123011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:19:57.087 [DEBUG] [Thread-123011] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:19:57.087 [DEBUG] [Thread-123011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:19:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:19:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:19:57.146 [DEBUG] [Thread-123011] [transport.py] [_log()] userauth is OK
2025-12-03T20:19:57.146 [DEBUG] [Thread-123011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:19:57.146 [DEBUG] [Thread-123011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:19:57.146 [DEBUG] [Thread-123011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:19:57.146 [DEBUG] [Thread-123011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:19:57.165 [INFO] [Thread-123011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:19:57.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:19:57.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:19:58.000 [DEBUG] [Thread-123011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:19:58.000 [DEBUG] [Thread-123011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:19:58.049 [DEBUG] [Thread-123011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:19:58.049 [DEBUG] [Thread-123011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:19:58.058 [DEBUG] [Thread-123011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:19:58.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:19:58.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:19:58.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:19:58.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:19:58.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:19:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:19:58.092 [DEBUG] [Thread-123011] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:20:06.344 [DEBUG] [Thread-123013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:10.374 [DEBUG] [Thread-123014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:25.414 [DEBUG] [Thread-123015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:28.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:20:28.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:20:28.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:20:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 20, 13), 17.55, 30.59, 0.0, 24.35, 17.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:20:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:20:13
2025-12-03T20:20:28.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:20:29.049 [DEBUG] [Thread-123016] [transport.py] [_log()] starting thread (client mode): 0xa277b880
2025-12-03T20:20:29.049 [DEBUG] [Thread-123016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:20:29.070 [DEBUG] [Thread-123016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:20:29.071 [INFO] [Thread-123016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] client lang: <none>
2025-12-03T20:20:29.074 [DEBUG] [Thread-123016] [transport.py] [_log()] server lang: <none>
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] kex follows: False
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] Compression: none
2025-12-03T20:20:29.075 [DEBUG] [Thread-123016] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:20:29.091 [DEBUG] [Thread-123016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:20:29.092 [DEBUG] [Thread-123016] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:20:29.092 [DEBUG] [Thread-123016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:20:29.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:20:29.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:20:29.094 [DEBUG] [Thread-123016] [transport.py] [_log()] userauth is OK
2025-12-03T20:20:29.094 [DEBUG] [Thread-123016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:20:29.094 [DEBUG] [Thread-123016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:20:29.094 [DEBUG] [Thread-123016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:20:29.094 [DEBUG] [Thread-123016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:20:29.119 [INFO] [Thread-123016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:20:29.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:20:29.736 [DEBUG] [Thread-123016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:20:29.736 [DEBUG] [Thread-123016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:20:29.737 [DEBUG] [Thread-123016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:20:29.777 [DEBUG] [Thread-123016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:20:29.777 [DEBUG] [Thread-123016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:20:29.780 [DEBUG] [Thread-123016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:20:29.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:20:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:20:29.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:20:29.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:20:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:20:29.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:20:29.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:20:29.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:20:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:20:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.763935 -999.00  +17.20  19.76     36   +2.10 1 1 1 1 1     7    0 14.80 -19.09 ----- 19.8 19.8 151.2 30.5 17.6 -25.3 17.5 -24.8 17.3 -23.0 17.6 -24.0
2025-12-03T20:20:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:20:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:20:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.763935
2025-12-03T20:20:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:20:29.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:20:29.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:20:29.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:20:29.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:20:29.805 [DEBUG] [Thread-123016] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:20:29.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:20:13', tmtdew=17.55, humidity=30.59, cloud=0.0, wind=24.35, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:20:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:20:29.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:20:29.899 [DEBUG] [Thread-123019] [transport.py] [_log()] starting thread (client mode): 0xa2728280
2025-12-03T20:20:29.899 [DEBUG] [Thread-123019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:20:29.915 [DEBUG] [Thread-123019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:20:29.915 [INFO] [Thread-123019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] client lang: <none>
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] server lang: <none>
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] kex follows: False
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:20:29.923 [DEBUG] [Thread-123019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:20:29.924 [DEBUG] [Thread-123019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:20:29.924 [DEBUG] [Thread-123019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:20:29.924 [DEBUG] [Thread-123019] [transport.py] [_log()] Compression: none
2025-12-03T20:20:29.924 [DEBUG] [Thread-123019] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:20:29.981 [DEBUG] [Thread-123019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:20:29.982 [DEBUG] [Thread-123019] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:20:29.982 [DEBUG] [Thread-123019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:20:29.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:20:29.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:20:30.039 [DEBUG] [Thread-123019] [transport.py] [_log()] userauth is OK
2025-12-03T20:20:30.039 [DEBUG] [Thread-123019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:20:30.039 [DEBUG] [Thread-123019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:20:30.039 [DEBUG] [Thread-123019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:20:30.039 [DEBUG] [Thread-123019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:20:30.059 [INFO] [Thread-123019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:20:30.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:20:30.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:20:30.910 [DEBUG] [Thread-123019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:20:30.910 [DEBUG] [Thread-123019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:20:30.958 [DEBUG] [Thread-123019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:20:30.958 [DEBUG] [Thread-123019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:20:30.967 [DEBUG] [Thread-123019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:20:30.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:20:30.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:20:30.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:20:30.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:20:30.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:20:30.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:20:31.002 [DEBUG] [Thread-123019] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:20:40.447 [DEBUG] [Thread-123021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:41.320 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:41.321 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:20:55.488 [DEBUG] [Thread-123022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:01.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:21:01.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:21:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:21:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 20, 45), 17.49, 30.59, 0.0, 28.58, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:21:01.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:20:45
2025-12-03T20:21:01.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:21:01.965 [DEBUG] [Thread-123023] [transport.py] [_log()] starting thread (client mode): 0xa2724d30
2025-12-03T20:21:01.965 [DEBUG] [Thread-123023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:21:01.976 [DEBUG] [Thread-123023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:21:01.976 [INFO] [Thread-123023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] client lang: <none>
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] server lang: <none>
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] kex follows: False
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] Compression: none
2025-12-03T20:21:01.978 [DEBUG] [Thread-123023] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:21:01.988 [DEBUG] [Thread-123023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:21:01.989 [DEBUG] [Thread-123023] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:21:01.989 [DEBUG] [Thread-123023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:21:01.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:21:01.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:21:01.990 [DEBUG] [Thread-123023] [transport.py] [_log()] userauth is OK
2025-12-03T20:21:01.990 [DEBUG] [Thread-123023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:21:01.990 [DEBUG] [Thread-123023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:21:01.990 [DEBUG] [Thread-123023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:21:01.990 [DEBUG] [Thread-123023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:21:02.001 [INFO] [Thread-123023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:21:02.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:21:02.634 [DEBUG] [Thread-123023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:21:02.635 [DEBUG] [Thread-123023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:21:02.635 [DEBUG] [Thread-123023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:21:02.675 [DEBUG] [Thread-123023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:21:02.676 [DEBUG] [Thread-123023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:21:02.678 [DEBUG] [Thread-123023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:21:02.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:21:02.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:21:02.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:21:02.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:21:02.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:21:02.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:21:02.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:21:02.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:21:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:21:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.764288 -999.00  +17.20  18.96     36   +2.10 1 1 1 1 1     7    0 14.87 -22.04 ----- 19.0 19.0 151.2 30.1 17.6 -25.3 17.5 -24.8 17.3 -23.3 17.6 -24.0
2025-12-03T20:21:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:21:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:21:02.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.764288
2025-12-03T20:21:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:21:02.703 [DEBUG] [Thread-123023] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:21:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:21:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:21:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:21:02.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:21:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:20:45', tmtdew=17.49, humidity=30.59, cloud=0.0, wind=28.58, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:20:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:21:02.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:21:02.807 [DEBUG] [Thread-123026] [transport.py] [_log()] starting thread (client mode): 0xa514a020
2025-12-03T20:21:02.808 [DEBUG] [Thread-123026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:21:02.822 [DEBUG] [Thread-123026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:21:02.822 [INFO] [Thread-123026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:21:02.830 [DEBUG] [Thread-123026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:21:02.830 [DEBUG] [Thread-123026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:21:02.830 [DEBUG] [Thread-123026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:21:02.830 [DEBUG] [Thread-123026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] client lang: <none>
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] server lang: <none>
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] kex follows: False
2025-12-03T20:21:02.831 [DEBUG] [Thread-123026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] Compression: none
2025-12-03T20:21:02.832 [DEBUG] [Thread-123026] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:21:02.890 [DEBUG] [Thread-123026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:21:02.890 [DEBUG] [Thread-123026] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:21:02.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:21:02.892 [DEBUG] [Thread-123026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:21:02.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:21:02.945 [DEBUG] [Thread-123026] [transport.py] [_log()] userauth is OK
2025-12-03T20:21:02.945 [DEBUG] [Thread-123026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:21:02.946 [DEBUG] [Thread-123026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:21:02.946 [DEBUG] [Thread-123026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:21:02.946 [DEBUG] [Thread-123026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:21:02.973 [INFO] [Thread-123026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:21:02.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:21:02.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:21:03.770 [DEBUG] [Thread-123026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:21:03.771 [DEBUG] [Thread-123026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:21:03.819 [DEBUG] [Thread-123026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:21:03.819 [DEBUG] [Thread-123026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:21:03.828 [DEBUG] [Thread-123026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:21:03.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:21:03.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:21:03.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:21:03.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:21:03.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:21:03.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:21:03.863 [DEBUG] [Thread-123026] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:21:06.413 [DEBUG] [Thread-123028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:10.515 [DEBUG] [Thread-123029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:25.554 [DEBUG] [Thread-123030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:33.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:21:33.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:21:33.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:21:34.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 21, 17), 17.48, 30.62, 0.0, 27.68, 17.33, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:21:34.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:21:17
2025-12-03T20:21:34.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:21:34.876 [DEBUG] [Thread-123031] [transport.py] [_log()] starting thread (client mode): 0xa2727190
2025-12-03T20:21:34.877 [DEBUG] [Thread-123031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:21:34.895 [DEBUG] [Thread-123031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:21:34.896 [INFO] [Thread-123031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] client lang: <none>
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] server lang: <none>
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] kex follows: False
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] Compression: none
2025-12-03T20:21:34.899 [DEBUG] [Thread-123031] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:21:34.915 [DEBUG] [Thread-123031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:21:34.915 [DEBUG] [Thread-123031] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:21:34.915 [DEBUG] [Thread-123031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:21:34.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:21:34.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:21:34.916 [DEBUG] [Thread-123031] [transport.py] [_log()] userauth is OK
2025-12-03T20:21:34.916 [DEBUG] [Thread-123031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:21:34.916 [DEBUG] [Thread-123031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:21:34.916 [DEBUG] [Thread-123031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:21:34.916 [DEBUG] [Thread-123031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:21:34.936 [INFO] [Thread-123031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:21:34.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:21:35.524 [DEBUG] [Thread-123031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:21:35.524 [DEBUG] [Thread-123031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:21:35.524 [DEBUG] [Thread-123031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:21:35.565 [DEBUG] [Thread-123031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:21:35.565 [DEBUG] [Thread-123031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:21:35.568 [DEBUG] [Thread-123031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:21:35.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:21:35.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:21:35.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:21:35.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:21:35.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:21:35.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:21:35.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:21:35.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:21:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:21:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.764635 -999.00  +17.20  13.09     36   +2.10 1 1 1 1 1     6    0 14.56 -22.75 ----- 13.1 13.1 154.8 24.7 17.6 -25.4 17.5 -24.8 17.3 -23.2 17.6 -24.1
2025-12-03T20:21:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:21:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:21:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.764635
2025-12-03T20:21:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:21:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:21:17', tmtdew=17.48, humidity=30.62, cloud=0.0, wind=27.68, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:21:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:21:35.594 [DEBUG] [Thread-123031] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:21:35.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:21:35.692 [DEBUG] [Thread-123034] [transport.py] [_log()] starting thread (client mode): 0xa51d14e0
2025-12-03T20:21:35.692 [DEBUG] [Thread-123034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:21:35.707 [DEBUG] [Thread-123034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:21:35.707 [INFO] [Thread-123034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:21:35.715 [DEBUG] [Thread-123034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] client lang: <none>
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] server lang: <none>
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] kex follows: False
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] Compression: none
2025-12-03T20:21:35.716 [DEBUG] [Thread-123034] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:21:35.772 [DEBUG] [Thread-123034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:21:35.773 [DEBUG] [Thread-123034] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:21:35.773 [DEBUG] [Thread-123034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:21:35.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:21:35.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:21:35.830 [DEBUG] [Thread-123034] [transport.py] [_log()] userauth is OK
2025-12-03T20:21:35.830 [DEBUG] [Thread-123034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:21:35.830 [DEBUG] [Thread-123034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:21:35.830 [DEBUG] [Thread-123034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:21:35.830 [DEBUG] [Thread-123034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:21:35.849 [INFO] [Thread-123034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:21:35.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:21:35.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:21:36.690 [DEBUG] [Thread-123034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:21:36.690 [DEBUG] [Thread-123034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:21:36.737 [DEBUG] [Thread-123034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:21:36.738 [DEBUG] [Thread-123034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:21:36.746 [DEBUG] [Thread-123034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:21:36.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:21:36.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:21:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:21:36.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:21:36.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:21:36.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:21:36.781 [DEBUG] [Thread-123034] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:21:40.584 [DEBUG] [Thread-123036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:45.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:45.851 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:21:55.624 [DEBUG] [Thread-123037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:06.481 [DEBUG] [Thread-123038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:06.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:22:06.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:22:06.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:22:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 21, 49), 17.41, 30.66, 0.0, 24.08, 17.28, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:22:07.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:21:49
2025-12-03T20:22:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:22:07.747 [DEBUG] [Thread-123039] [transport.py] [_log()] starting thread (client mode): 0xa514ab90
2025-12-03T20:22:07.747 [DEBUG] [Thread-123039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:22:07.765 [DEBUG] [Thread-123039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:22:07.765 [INFO] [Thread-123039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] client lang: <none>
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] server lang: <none>
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] kex follows: False
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] Compression: none
2025-12-03T20:22:07.768 [DEBUG] [Thread-123039] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:22:07.785 [DEBUG] [Thread-123039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:22:07.785 [DEBUG] [Thread-123039] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:22:07.786 [DEBUG] [Thread-123039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:22:07.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:22:07.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:22:07.787 [DEBUG] [Thread-123039] [transport.py] [_log()] userauth is OK
2025-12-03T20:22:07.788 [DEBUG] [Thread-123039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:22:07.788 [DEBUG] [Thread-123039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:22:07.788 [DEBUG] [Thread-123039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:22:07.788 [DEBUG] [Thread-123039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:22:07.806 [INFO] [Thread-123039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:22:07.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:22:08.462 [DEBUG] [Thread-123039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:22:08.462 [DEBUG] [Thread-123039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:22:08.462 [DEBUG] [Thread-123039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:22:08.504 [DEBUG] [Thread-123039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:22:08.504 [DEBUG] [Thread-123039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:22:08.506 [DEBUG] [Thread-123039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:22:08.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:22:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:22:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:22:08.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:22:08.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:22:08.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:22:08.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.764983 -999.00  +17.20  15.44     36   +2.10 1 1 1 1 1     6    0 14.69 -22.62 ----- 15.4 15.4 158.9 18.5 17.5 -25.3 17.5 -25.0 17.3 -23.2 17.6 -24.1
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.764983
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:22:08.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:21:49', tmtdew=17.41, humidity=30.66, cloud=0.0, wind=24.08, temperature=17.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:21:34.531', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:22:08.522 [DEBUG] [Thread-123039] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:22:08.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:22:08.607 [DEBUG] [Thread-123042] [transport.py] [_log()] starting thread (client mode): 0xa2762e30
2025-12-03T20:22:08.607 [DEBUG] [Thread-123042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:22:08.621 [DEBUG] [Thread-123042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:22:08.621 [INFO] [Thread-123042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] client lang: <none>
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] server lang: <none>
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] kex follows: False
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] Compression: none
2025-12-03T20:22:08.629 [DEBUG] [Thread-123042] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:22:08.686 [DEBUG] [Thread-123042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:22:08.687 [DEBUG] [Thread-123042] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:22:08.687 [DEBUG] [Thread-123042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:22:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:22:08.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:22:08.747 [DEBUG] [Thread-123042] [transport.py] [_log()] userauth is OK
2025-12-03T20:22:08.747 [DEBUG] [Thread-123042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:22:08.747 [DEBUG] [Thread-123042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:22:08.747 [DEBUG] [Thread-123042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:22:08.747 [DEBUG] [Thread-123042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:22:08.761 [INFO] [Thread-123042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:22:08.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:22:08.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:22:09.598 [DEBUG] [Thread-123042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:22:09.598 [DEBUG] [Thread-123042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:22:09.646 [DEBUG] [Thread-123042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:22:09.646 [DEBUG] [Thread-123042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:22:09.654 [DEBUG] [Thread-123042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:22:09.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:22:09.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:22:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:22:09.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:22:09.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:22:09.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:22:09.686 [DEBUG] [Thread-123042] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:22:10.648 [DEBUG] [Thread-123044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:25.684 [DEBUG] [Thread-123045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:39.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:22:39.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:22:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:22:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 22, 22), 17.41, 30.67, 0.0, 21.98, 17.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:22:40.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:22:22
2025-12-03T20:22:40.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:22:40.659 [DEBUG] [Thread-123046] [transport.py] [_log()] starting thread (client mode): 0xa27292d0
2025-12-03T20:22:40.659 [DEBUG] [Thread-123046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:22:40.681 [DEBUG] [Thread-123046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:22:40.681 [INFO] [Thread-123046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] client lang: <none>
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] server lang: <none>
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] kex follows: False
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:22:40.685 [DEBUG] [Thread-123046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:22:40.686 [DEBUG] [Thread-123046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:22:40.686 [DEBUG] [Thread-123046] [transport.py] [_log()] Compression: none
2025-12-03T20:22:40.686 [DEBUG] [Thread-123046] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:22:40.703 [DEBUG] [Thread-123046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:22:40.703 [DEBUG] [Thread-123046] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:22:40.704 [DEBUG] [Thread-123046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:22:40.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:22:40.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:22:40.705 [DEBUG] [Thread-123046] [transport.py] [_log()] userauth is OK
2025-12-03T20:22:40.705 [DEBUG] [Thread-123046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:22:40.706 [DEBUG] [Thread-123046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:22:40.706 [DEBUG] [Thread-123046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:22:40.706 [DEBUG] [Thread-123046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:22:40.714 [DEBUG] [Thread-123048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:40.729 [INFO] [Thread-123046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:22:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:22:41.369 [DEBUG] [Thread-123046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:22:41.369 [DEBUG] [Thread-123046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:22:41.369 [DEBUG] [Thread-123046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:22:41.410 [DEBUG] [Thread-123046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:22:41.410 [DEBUG] [Thread-123046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:22:41.413 [DEBUG] [Thread-123046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:22:41.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:22:41.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:22:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:22:41.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:22:41.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:22:41.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:22:41.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:22:41.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:22:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:22:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.765330 -999.00  +17.20  18.06     36   +2.10 1 1 1 1 1     5    0 14.94 -23.45 ----- 18.1 18.1 162.2 28.3 17.5 -25.3 17.5 -24.9 17.2 -23.2 17.5 -24.0
2025-12-03T20:22:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:22:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:22:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.765330
2025-12-03T20:22:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:22:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:22:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:22:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:22:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:22:41.437 [DEBUG] [Thread-123046] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:22:41.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:22:22', tmtdew=17.41, humidity=30.67, cloud=0.0, wind=21.98, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:22:04.512', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:22:41.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:22:41.534 [DEBUG] [Thread-123050] [transport.py] [_log()] starting thread (client mode): 0xa2728d90
2025-12-03T20:22:41.534 [DEBUG] [Thread-123050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:22:41.549 [DEBUG] [Thread-123050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:22:41.549 [INFO] [Thread-123050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:22:41.556 [DEBUG] [Thread-123050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:22:41.556 [DEBUG] [Thread-123050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:22:41.556 [DEBUG] [Thread-123050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] client lang: <none>
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] server lang: <none>
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] kex follows: False
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] Compression: none
2025-12-03T20:22:41.557 [DEBUG] [Thread-123050] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:22:41.615 [DEBUG] [Thread-123050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:22:41.616 [DEBUG] [Thread-123050] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:22:41.616 [DEBUG] [Thread-123050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:22:41.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:22:41.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:22:41.672 [DEBUG] [Thread-123050] [transport.py] [_log()] userauth is OK
2025-12-03T20:22:41.672 [DEBUG] [Thread-123050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:22:41.672 [DEBUG] [Thread-123050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:22:41.672 [DEBUG] [Thread-123050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:22:41.673 [DEBUG] [Thread-123050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:22:41.691 [INFO] [Thread-123050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:22:41.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:22:41.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:22:42.503 [DEBUG] [Thread-123050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:22:42.503 [DEBUG] [Thread-123050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:22:42.551 [DEBUG] [Thread-123050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:22:42.551 [DEBUG] [Thread-123050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:22:42.560 [DEBUG] [Thread-123050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:22:42.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:22:42.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:22:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:22:42.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:22:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:22:42.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:22:42.594 [DEBUG] [Thread-123050] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:22:53.516 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:53.517 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:22:55.742 [DEBUG] [Thread-123052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:06.573 [DEBUG] [Thread-123053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:10.778 [DEBUG] [Thread-123054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:12.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:23:12.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:23:12.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:23:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 22, 54), 17.41, 30.67, 0.0, 25.78, 17.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:23:13.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:22:54
2025-12-03T20:23:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:23:13.579 [DEBUG] [Thread-123055] [transport.py] [_log()] starting thread (client mode): 0xa517fe50
2025-12-03T20:23:13.579 [DEBUG] [Thread-123055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:23:13.594 [DEBUG] [Thread-123055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:23:13.594 [INFO] [Thread-123055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:13.597 [DEBUG] [Thread-123055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] client lang: <none>
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] server lang: <none>
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] kex follows: False
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] Compression: none
2025-12-03T20:23:13.598 [DEBUG] [Thread-123055] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:23:13.616 [DEBUG] [Thread-123055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:23:13.617 [DEBUG] [Thread-123055] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:23:13.618 [DEBUG] [Thread-123055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:23:13.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:23:13.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:23:13.619 [DEBUG] [Thread-123055] [transport.py] [_log()] userauth is OK
2025-12-03T20:23:13.619 [DEBUG] [Thread-123055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:23:13.619 [DEBUG] [Thread-123055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:23:13.620 [DEBUG] [Thread-123055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:23:13.620 [DEBUG] [Thread-123055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:23:13.634 [INFO] [Thread-123055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:23:13.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:23:14.221 [DEBUG] [Thread-123055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:23:14.221 [DEBUG] [Thread-123055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:23:14.222 [DEBUG] [Thread-123055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:23:14.262 [DEBUG] [Thread-123055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:23:14.262 [DEBUG] [Thread-123055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:23:14.265 [DEBUG] [Thread-123055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:23:14.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:23:14.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:23:14.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:23:14.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:23:14.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:23:14.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:23:14.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:23:14.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:23:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:23:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.765677 -999.00  +17.20  18.21     36   +2.10 1 1 1 1 1     5    0 14.42 -26.17 ----- 18.2 18.2 160.6 26.2 17.6 -25.3 17.4 -24.8 17.2 -23.2 17.5 -24.1
2025-12-03T20:23:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:23:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:23:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.765677
2025-12-03T20:23:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:23:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:23:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:23:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:23:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:23:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:22:54', tmtdew=17.41, humidity=30.67, cloud=0.0, wind=25.78, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:22:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:23:14.288 [DEBUG] [Thread-123055] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:23:14.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:23:14.396 [DEBUG] [Thread-123058] [transport.py] [_log()] starting thread (client mode): 0xa517e9b0
2025-12-03T20:23:14.396 [DEBUG] [Thread-123058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:23:14.413 [DEBUG] [Thread-123058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:23:14.413 [INFO] [Thread-123058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:23:14.420 [DEBUG] [Thread-123058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:23:14.420 [DEBUG] [Thread-123058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:23:14.420 [DEBUG] [Thread-123058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:23:14.420 [DEBUG] [Thread-123058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] client lang: <none>
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] server lang: <none>
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] kex follows: False
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] Compression: none
2025-12-03T20:23:14.421 [DEBUG] [Thread-123058] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:23:14.479 [DEBUG] [Thread-123058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:23:14.479 [DEBUG] [Thread-123058] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:23:14.480 [DEBUG] [Thread-123058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:23:14.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:23:14.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:23:14.536 [DEBUG] [Thread-123058] [transport.py] [_log()] userauth is OK
2025-12-03T20:23:14.536 [DEBUG] [Thread-123058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:23:14.536 [DEBUG] [Thread-123058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:23:14.536 [DEBUG] [Thread-123058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:23:14.536 [DEBUG] [Thread-123058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:23:14.553 [INFO] [Thread-123058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:23:14.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:23:14.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:23:15.363 [DEBUG] [Thread-123058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:23:15.363 [DEBUG] [Thread-123058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:23:15.411 [DEBUG] [Thread-123058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:23:15.411 [DEBUG] [Thread-123058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:23:15.420 [DEBUG] [Thread-123058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:23:15.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:23:15.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:23:15.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:23:15.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:23:15.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:23:15.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:23:15.454 [DEBUG] [Thread-123058] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:23:25.808 [DEBUG] [Thread-123060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:40.857 [DEBUG] [Thread-123061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:23:45.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:23:45.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:23:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 23, 26), 17.41, 30.66, 0.0, 24.77, 17.23, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:23:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:23:26
2025-12-03T20:23:46.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:23:46.417 [DEBUG] [Thread-123062] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T20:23:46.417 [DEBUG] [Thread-123062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:23:46.437 [DEBUG] [Thread-123062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:23:46.438 [INFO] [Thread-123062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] client lang: <none>
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] server lang: <none>
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] kex follows: False
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] Compression: none
2025-12-03T20:23:46.441 [DEBUG] [Thread-123062] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:23:46.450 [DEBUG] [Thread-123062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:23:46.451 [DEBUG] [Thread-123062] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:23:46.451 [DEBUG] [Thread-123062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:23:46.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:23:46.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:23:46.453 [DEBUG] [Thread-123062] [transport.py] [_log()] userauth is OK
2025-12-03T20:23:46.453 [DEBUG] [Thread-123062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:23:46.453 [DEBUG] [Thread-123062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:23:46.454 [DEBUG] [Thread-123062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:23:46.454 [DEBUG] [Thread-123062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:23:46.488 [INFO] [Thread-123062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:23:46.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:23:47.148 [DEBUG] [Thread-123062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:23:47.148 [DEBUG] [Thread-123062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:23:47.148 [DEBUG] [Thread-123062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:23:47.189 [DEBUG] [Thread-123062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:23:47.189 [DEBUG] [Thread-123062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:23:47.192 [DEBUG] [Thread-123062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:23:47.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:23:47.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:23:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:23:47.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:23:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:23:47.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:23:47.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:23:47.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:23:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:23:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.766024 -999.00  +17.20  15.06     36   +2.10 1 1 1 1 1     4    0 14.70 -25.39 z..SW 15.1 15.1 156.4 26.4 17.6 -25.4 17.4 -24.9 17.2 -23.1 17.6 -24.1
2025-12-03T20:23:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:23:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:23:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.766024
2025-12-03T20:23:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:23:47.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:23:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:23:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:23:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:23:47.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:23:26', tmtdew=17.41, humidity=30.66, cloud=0.0, wind=24.77, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:23:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:23:47.218 [DEBUG] [Thread-123062] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:23:47.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:23:47.314 [DEBUG] [Thread-123065] [transport.py] [_log()] starting thread (client mode): 0xa27788e0
2025-12-03T20:23:47.314 [DEBUG] [Thread-123065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:23:47.330 [DEBUG] [Thread-123065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:23:47.330 [INFO] [Thread-123065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] client lang: <none>
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] server lang: <none>
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] kex follows: False
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:23:47.338 [DEBUG] [Thread-123065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:23:47.339 [DEBUG] [Thread-123065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:23:47.339 [DEBUG] [Thread-123065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:23:47.339 [DEBUG] [Thread-123065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:23:47.339 [DEBUG] [Thread-123065] [transport.py] [_log()] Compression: none
2025-12-03T20:23:47.339 [DEBUG] [Thread-123065] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:23:47.395 [DEBUG] [Thread-123065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:23:47.395 [DEBUG] [Thread-123065] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:23:47.396 [DEBUG] [Thread-123065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:23:47.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:23:47.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:23:47.451 [DEBUG] [Thread-123065] [transport.py] [_log()] userauth is OK
2025-12-03T20:23:47.451 [DEBUG] [Thread-123065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:23:47.452 [DEBUG] [Thread-123065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:23:47.452 [DEBUG] [Thread-123065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:23:47.452 [DEBUG] [Thread-123065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:23:47.470 [INFO] [Thread-123065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:23:47.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:23:47.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:23:48.325 [DEBUG] [Thread-123065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:23:48.326 [DEBUG] [Thread-123065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:23:48.374 [DEBUG] [Thread-123065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:23:48.374 [DEBUG] [Thread-123065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:23:48.383 [DEBUG] [Thread-123065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:23:48.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:23:48.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:23:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:23:48.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:23:48.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:23:48.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:23:48.418 [DEBUG] [Thread-123065] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:23:55.884 [DEBUG] [Thread-123067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:57.520 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:23:57.521 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:24:06.626 [DEBUG] [Thread-123068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:24:10.921 [DEBUG] [Thread-123069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:24:18.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:24:18.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:24:18.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:24:19.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 23, 58), 17.41, 30.66, 0.0, 25.71, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:24:19.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:23:58
2025-12-03T20:24:19.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:24:19.380 [DEBUG] [Thread-123070] [transport.py] [_log()] starting thread (client mode): 0xa2762410
2025-12-03T20:24:19.380 [DEBUG] [Thread-123070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:24:19.399 [DEBUG] [Thread-123070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:24:19.400 [INFO] [Thread-123070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:24:19.402 [DEBUG] [Thread-123070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] client lang: <none>
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] server lang: <none>
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] kex follows: False
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] Compression: none
2025-12-03T20:24:19.403 [DEBUG] [Thread-123070] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:24:19.417 [DEBUG] [Thread-123070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:24:19.417 [DEBUG] [Thread-123070] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:24:19.418 [DEBUG] [Thread-123070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:24:19.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:24:19.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:24:19.420 [DEBUG] [Thread-123070] [transport.py] [_log()] userauth is OK
2025-12-03T20:24:19.420 [DEBUG] [Thread-123070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:24:19.420 [DEBUG] [Thread-123070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:24:19.420 [DEBUG] [Thread-123070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:24:19.420 [DEBUG] [Thread-123070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:24:19.444 [INFO] [Thread-123070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:24:19.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:24:20.034 [DEBUG] [Thread-123070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:24:20.035 [DEBUG] [Thread-123070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:24:20.035 [DEBUG] [Thread-123070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:24:20.076 [DEBUG] [Thread-123070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:24:20.076 [DEBUG] [Thread-123070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:24:20.079 [DEBUG] [Thread-123070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:24:20.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:24:20.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:24:20.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:24:20.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:24:20.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:24:20.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:24:20.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.766719 -999.00  +17.20  17.60     36   +2.10 1 1 1 1 1     3    0 14.66 -27.99 z..SW 17.6 17.6 157.2 25.2 17.5 -25.3 17.4 -24.9 17.2 -23.2 17.5 -24.1
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:24:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.766719
2025-12-03T20:24:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:24:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:24:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:24:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:24:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:24:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:23:58', tmtdew=17.41, humidity=30.66, cloud=0.0, wind=25.71, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:24:04.522', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:24:20.104 [DEBUG] [Thread-123070] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:24:20.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:24:20.192 [DEBUG] [Thread-123073] [transport.py] [_log()] starting thread (client mode): 0xa27619c0
2025-12-03T20:24:20.192 [DEBUG] [Thread-123073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:24:20.211 [DEBUG] [Thread-123073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:24:20.211 [INFO] [Thread-123073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:24:20.218 [DEBUG] [Thread-123073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:24:20.218 [DEBUG] [Thread-123073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] client lang: <none>
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] server lang: <none>
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] kex follows: False
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] Compression: none
2025-12-03T20:24:20.219 [DEBUG] [Thread-123073] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:24:20.274 [DEBUG] [Thread-123073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:24:20.274 [DEBUG] [Thread-123073] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:24:20.275 [DEBUG] [Thread-123073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:24:20.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:24:20.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:24:20.331 [DEBUG] [Thread-123073] [transport.py] [_log()] userauth is OK
2025-12-03T20:24:20.331 [DEBUG] [Thread-123073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:24:20.331 [DEBUG] [Thread-123073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:24:20.331 [DEBUG] [Thread-123073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:24:20.331 [DEBUG] [Thread-123073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:24:20.354 [INFO] [Thread-123073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:24:20.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:24:20.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:24:21.162 [DEBUG] [Thread-123073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:24:21.162 [DEBUG] [Thread-123073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:24:21.210 [DEBUG] [Thread-123073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:24:21.210 [DEBUG] [Thread-123073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:24:21.219 [DEBUG] [Thread-123073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:24:21.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:24:21.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:24:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:24:21.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:24:21.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:24:21.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:24:21.254 [DEBUG] [Thread-123073] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:24:25.948 [DEBUG] [Thread-123075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:24:40.994 [DEBUG] [Thread-123076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:24:51.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:24:51.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:24:51.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:24:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 24, 30), 17.35, 30.77, 0.0, 24.08, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:24:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:24:30
2025-12-03T20:24:52.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:24:52.231 [DEBUG] [Thread-123077] [transport.py] [_log()] starting thread (client mode): 0xa2728430
2025-12-03T20:24:52.231 [DEBUG] [Thread-123077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:24:52.251 [DEBUG] [Thread-123077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:24:52.251 [INFO] [Thread-123077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:24:52.254 [DEBUG] [Thread-123077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] client lang: <none>
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] server lang: <none>
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] kex follows: False
2025-12-03T20:24:52.255 [DEBUG] [Thread-123077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] Compression: none
2025-12-03T20:24:52.256 [DEBUG] [Thread-123077] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:24:52.277 [DEBUG] [Thread-123077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:24:52.277 [DEBUG] [Thread-123077] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:24:52.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:24:52.278 [DEBUG] [Thread-123077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:24:52.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:24:52.280 [DEBUG] [Thread-123077] [transport.py] [_log()] userauth is OK
2025-12-03T20:24:52.280 [DEBUG] [Thread-123077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:24:52.280 [DEBUG] [Thread-123077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:24:52.280 [DEBUG] [Thread-123077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:24:52.280 [DEBUG] [Thread-123077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:24:52.303 [INFO] [Thread-123077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:24:52.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:24:52.933 [DEBUG] [Thread-123077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:24:52.933 [DEBUG] [Thread-123077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:24:52.934 [DEBUG] [Thread-123077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:24:52.975 [DEBUG] [Thread-123077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:24:52.975 [DEBUG] [Thread-123077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:24:52.978 [DEBUG] [Thread-123077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:24:52.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:24:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:24:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:24:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:24:52.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:24:53.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:24:53.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:24:53.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.767066 -999.00  +17.10  18.34     36   +2.10 1 1 1 1 1     3    0 14.27 -31.09 z.eSW 18.3 18.3 148.8 24.9 17.5 -25.3 17.4 -24.8 17.2 -23.3 17.5 -24.1
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.767066
2025-12-03T20:24:53.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:24:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:24:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:24:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:24:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:24:53.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:24:30', tmtdew=17.35, humidity=30.77, cloud=0.0, wind=24.08, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:24:34.502', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:24:53.003 [DEBUG] [Thread-123077] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:24:53.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:24:53.091 [DEBUG] [Thread-123080] [transport.py] [_log()] starting thread (client mode): 0xa517e890
2025-12-03T20:24:53.091 [DEBUG] [Thread-123080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:24:53.105 [DEBUG] [Thread-123080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:24:53.105 [INFO] [Thread-123080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] client lang: <none>
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] server lang: <none>
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] kex follows: False
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:24:53.113 [DEBUG] [Thread-123080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:24:53.114 [DEBUG] [Thread-123080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:24:53.114 [DEBUG] [Thread-123080] [transport.py] [_log()] Compression: none
2025-12-03T20:24:53.114 [DEBUG] [Thread-123080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:24:53.174 [DEBUG] [Thread-123080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:24:53.175 [DEBUG] [Thread-123080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:24:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:24:53.175 [DEBUG] [Thread-123080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:24:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:24:53.230 [DEBUG] [Thread-123080] [transport.py] [_log()] userauth is OK
2025-12-03T20:24:53.231 [DEBUG] [Thread-123080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:24:53.231 [DEBUG] [Thread-123080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:24:53.231 [DEBUG] [Thread-123080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:24:53.231 [DEBUG] [Thread-123080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:24:53.246 [INFO] [Thread-123080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:24:53.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:24:53.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:24:54.031 [DEBUG] [Thread-123080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:24:54.031 [DEBUG] [Thread-123080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:24:54.079 [DEBUG] [Thread-123080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:24:54.079 [DEBUG] [Thread-123080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:24:54.087 [DEBUG] [Thread-123080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:24:54.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:24:54.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:24:54.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:24:54.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:24:54.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:24:54.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:24:54.122 [DEBUG] [Thread-123080] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:24:56.025 [DEBUG] [Thread-123082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:02.004 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:02.006 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:06.687 [DEBUG] [Thread-123083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:11.071 [DEBUG] [Thread-123084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:25:24.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:25:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:25:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 25, 2), 17.34, 30.81, 0.0, 26.47, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:25:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:25:02
2025-12-03T20:25:24.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:25:25.130 [DEBUG] [Thread-123085] [transport.py] [_log()] starting thread (client mode): 0xa2760790
2025-12-03T20:25:25.130 [DEBUG] [Thread-123085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:25:25.151 [DEBUG] [Thread-123085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:25:25.151 [INFO] [Thread-123085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] client lang: <none>
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] server lang: <none>
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] kex follows: False
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] Compression: none
2025-12-03T20:25:25.153 [DEBUG] [Thread-123085] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:25:25.171 [DEBUG] [Thread-123085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:25:25.171 [DEBUG] [Thread-123085] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:25:25.171 [DEBUG] [Thread-123085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:25:25.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:25:25.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:25:25.172 [DEBUG] [Thread-123085] [transport.py] [_log()] userauth is OK
2025-12-03T20:25:25.172 [DEBUG] [Thread-123085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:25:25.172 [DEBUG] [Thread-123085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:25:25.172 [DEBUG] [Thread-123085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:25:25.172 [DEBUG] [Thread-123085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:25:25.181 [INFO] [Thread-123085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:25:25.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:25:25.834 [DEBUG] [Thread-123085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:25:25.834 [DEBUG] [Thread-123085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:25:25.834 [DEBUG] [Thread-123085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:25:25.875 [DEBUG] [Thread-123085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:25:25.875 [DEBUG] [Thread-123085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:25:25.877 [DEBUG] [Thread-123085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:25:25.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:25:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:25:25.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:25:25.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:25:25.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:25:25.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:25:25.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.767413 -999.00  +17.10  14.64     36   +2.10 1 1 1 1 1     3    0 14.56 -32.65 z.eSW 14.6 14.6 157.8 20.1 17.5 -25.3 17.4 -24.9 17.1 -23.2 17.4 -24.0
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.767413
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:25:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:25:02', tmtdew=17.34, humidity=30.81, cloud=0.0, wind=26.47, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:25:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:25:25.889 [DEBUG] [Thread-123085] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:25:25.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:25:25.975 [DEBUG] [Thread-123088] [transport.py] [_log()] starting thread (client mode): 0xa517d8d0
2025-12-03T20:25:25.975 [DEBUG] [Thread-123088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:25:25.990 [DEBUG] [Thread-123088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:25:25.990 [INFO] [Thread-123088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:25.997 [DEBUG] [Thread-123088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] client lang: <none>
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] server lang: <none>
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] kex follows: False
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] Compression: none
2025-12-03T20:25:25.998 [DEBUG] [Thread-123088] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:25:26.053 [DEBUG] [Thread-123088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:25:26.053 [DEBUG] [Thread-123088] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:25:26.053 [DEBUG] [Thread-123088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:25:26.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:25:26.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:25:26.100 [DEBUG] [Thread-123090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:26.110 [DEBUG] [Thread-123088] [transport.py] [_log()] userauth is OK
2025-12-03T20:25:26.110 [DEBUG] [Thread-123088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:25:26.110 [DEBUG] [Thread-123088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:25:26.110 [DEBUG] [Thread-123088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:25:26.110 [DEBUG] [Thread-123088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:25:26.124 [INFO] [Thread-123088] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:25:26.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:25:26.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:25:26.989 [DEBUG] [Thread-123088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:25:26.989 [DEBUG] [Thread-123088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:25:27.037 [DEBUG] [Thread-123088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:25:27.038 [DEBUG] [Thread-123088] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:25:27.046 [DEBUG] [Thread-123088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:25:27.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:25:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:25:27.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:25:27.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:25:27.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:25:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:25:27.078 [DEBUG] [Thread-123088] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:25:41.142 [DEBUG] [Thread-123091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:56.172 [DEBUG] [Thread-123092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:25:57.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:25:57.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:25:57.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:25:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 25, 35), 17.33, 30.82, 0.0, 24.68, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:25:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:25:35
2025-12-03T20:25:57.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:25:58.068 [DEBUG] [Thread-123093] [transport.py] [_log()] starting thread (client mode): 0xa51d24d0
2025-12-03T20:25:58.069 [DEBUG] [Thread-123093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:25:58.089 [DEBUG] [Thread-123093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:25:58.089 [INFO] [Thread-123093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:25:58.092 [DEBUG] [Thread-123093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:25:58.092 [DEBUG] [Thread-123093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:25:58.092 [DEBUG] [Thread-123093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:25:58.092 [DEBUG] [Thread-123093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] client lang: <none>
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] server lang: <none>
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] kex follows: False
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:25:58.093 [DEBUG] [Thread-123093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:25:58.094 [DEBUG] [Thread-123093] [transport.py] [_log()] Compression: none
2025-12-03T20:25:58.094 [DEBUG] [Thread-123093] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:25:58.111 [DEBUG] [Thread-123093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:25:58.112 [DEBUG] [Thread-123093] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:25:58.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:25:58.113 [DEBUG] [Thread-123093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:25:58.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:25:58.115 [DEBUG] [Thread-123093] [transport.py] [_log()] userauth is OK
2025-12-03T20:25:58.115 [DEBUG] [Thread-123093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:25:58.116 [DEBUG] [Thread-123093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:25:58.116 [DEBUG] [Thread-123093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:25:58.116 [DEBUG] [Thread-123093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:25:58.139 [INFO] [Thread-123093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:25:58.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:25:58.762 [DEBUG] [Thread-123093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:25:58.762 [DEBUG] [Thread-123093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:25:58.763 [DEBUG] [Thread-123093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:25:58.803 [DEBUG] [Thread-123093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:25:58.803 [DEBUG] [Thread-123093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:25:58.806 [DEBUG] [Thread-123093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:25:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:25:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:25:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:25:58.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:25:58.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:25:58.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:25:58.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.767760 -999.00  +17.10  14.75     36   +2.10 1 1 1 1 1     3    0 14.35 -34.10 z.eSW 14.8 14.8 160.4 24.8 17.5 -25.4 17.4 -24.9 17.1 -23.2 17.5 -24.1
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:25:58.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.767760
2025-12-03T20:25:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:25:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:25:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:25:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:25:58.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:25:58.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:25:35', tmtdew=17.33, humidity=30.82, cloud=0.0, wind=24.68, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:25:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:25:58.830 [DEBUG] [Thread-123093] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:25:58.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:25:58.927 [DEBUG] [Thread-123096] [transport.py] [_log()] starting thread (client mode): 0xa51d3580
2025-12-03T20:25:58.927 [DEBUG] [Thread-123096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:25:58.942 [DEBUG] [Thread-123096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:25:58.942 [INFO] [Thread-123096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:25:58.954 [DEBUG] [Thread-123096] [transport.py] [_log()] client lang: <none>
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] server lang: <none>
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] kex follows: False
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] Compression: none
2025-12-03T20:25:58.955 [DEBUG] [Thread-123096] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:25:59.010 [DEBUG] [Thread-123096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:25:59.011 [DEBUG] [Thread-123096] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:25:59.011 [DEBUG] [Thread-123096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:25:59.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:25:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:25:59.066 [DEBUG] [Thread-123096] [transport.py] [_log()] userauth is OK
2025-12-03T20:25:59.067 [DEBUG] [Thread-123096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:25:59.067 [DEBUG] [Thread-123096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:25:59.067 [DEBUG] [Thread-123096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:25:59.067 [DEBUG] [Thread-123096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:25:59.086 [INFO] [Thread-123096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:25:59.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:25:59.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:25:59.914 [DEBUG] [Thread-123096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:25:59.914 [DEBUG] [Thread-123096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:25:59.962 [DEBUG] [Thread-123096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:25:59.962 [DEBUG] [Thread-123096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:25:59.972 [DEBUG] [Thread-123096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:25:59.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:25:59.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:25:59.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:25:59.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:25:59.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:25:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:26:00.006 [DEBUG] [Thread-123096] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:26:06.106 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:06.107 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:06.755 [DEBUG] [Thread-123098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:11.208 [DEBUG] [Thread-123099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:26.261 [DEBUG] [Thread-123100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:30.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:26:30.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:26:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:26:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 26, 7), 17.33, 30.84, 0.0, 26.85, 17.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:26:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:26:07
2025-12-03T20:26:30.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:26:30.997 [DEBUG] [Thread-123101] [transport.py] [_log()] starting thread (client mode): 0xa514b3a0
2025-12-03T20:26:30.997 [DEBUG] [Thread-123101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:26:31.017 [DEBUG] [Thread-123101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:26:31.017 [INFO] [Thread-123101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:26:31.021 [DEBUG] [Thread-123101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] client lang: <none>
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] server lang: <none>
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] kex follows: False
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:26:31.022 [DEBUG] [Thread-123101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:26:31.023 [DEBUG] [Thread-123101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:26:31.023 [DEBUG] [Thread-123101] [transport.py] [_log()] Compression: none
2025-12-03T20:26:31.023 [DEBUG] [Thread-123101] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:26:31.040 [DEBUG] [Thread-123101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:26:31.041 [DEBUG] [Thread-123101] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:26:31.041 [DEBUG] [Thread-123101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:26:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:26:31.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:26:31.043 [DEBUG] [Thread-123101] [transport.py] [_log()] userauth is OK
2025-12-03T20:26:31.043 [DEBUG] [Thread-123101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:26:31.043 [DEBUG] [Thread-123101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:26:31.043 [DEBUG] [Thread-123101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:26:31.043 [DEBUG] [Thread-123101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:26:31.060 [INFO] [Thread-123101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:26:31.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:26:31.678 [DEBUG] [Thread-123101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:26:31.678 [DEBUG] [Thread-123101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:26:31.678 [DEBUG] [Thread-123101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:26:31.718 [DEBUG] [Thread-123101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:26:31.719 [DEBUG] [Thread-123101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:26:31.721 [DEBUG] [Thread-123101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:26:31.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:26:31.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:26:31.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:26:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:26:31.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:26:31.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:26:31.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:26:31.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.768108 -999.00  +17.10  18.68     36   +2.10 1 1 1 1 1     2    0 14.41 -33.80 z.ESW 18.7 18.7 154.2 23.9 17.5 -25.1 17.4 -24.9 17.2 -23.2 17.4 -23.9
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.768108
2025-12-03T20:26:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:26:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:26:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:26:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:26:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:26:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:26:07', tmtdew=17.33, humidity=30.84, cloud=0.0, wind=26.85, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:26:04.531', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:26:31.744 [DEBUG] [Thread-123101] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:26:31.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:26:31.847 [DEBUG] [Thread-123104] [transport.py] [_log()] starting thread (client mode): 0xa51e4550
2025-12-03T20:26:31.847 [DEBUG] [Thread-123104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:26:31.862 [DEBUG] [Thread-123104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:26:31.862 [INFO] [Thread-123104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:26:31.869 [DEBUG] [Thread-123104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] client lang: <none>
2025-12-03T20:26:31.870 [DEBUG] [Thread-123104] [transport.py] [_log()] server lang: <none>
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] kex follows: False
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] Compression: none
2025-12-03T20:26:31.871 [DEBUG] [Thread-123104] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:26:31.930 [DEBUG] [Thread-123104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:26:31.930 [DEBUG] [Thread-123104] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:26:31.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:26:31.932 [DEBUG] [Thread-123104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:26:31.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:26:31.987 [DEBUG] [Thread-123104] [transport.py] [_log()] userauth is OK
2025-12-03T20:26:31.988 [DEBUG] [Thread-123104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:26:31.988 [DEBUG] [Thread-123104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:26:31.988 [DEBUG] [Thread-123104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:26:31.988 [DEBUG] [Thread-123104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:26:32.007 [INFO] [Thread-123104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:26:32.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:26:32.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:26:32.848 [DEBUG] [Thread-123104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:26:32.848 [DEBUG] [Thread-123104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:26:32.896 [DEBUG] [Thread-123104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:26:32.896 [DEBUG] [Thread-123104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:26:32.905 [DEBUG] [Thread-123104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:26:32.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:26:32.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:26:32.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:26:32.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:26:32.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:26:32.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:26:32.939 [DEBUG] [Thread-123104] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:26:41.293 [DEBUG] [Thread-123106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:26:56.344 [DEBUG] [Thread-123107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:27:02.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:27:02.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 26, 39), 17.27, 30.84, 0.0, 26.5, 17.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:27:03.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:26:39
2025-12-03T20:27:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:27:03.927 [DEBUG] [Thread-123108] [transport.py] [_log()] starting thread (client mode): 0xa271e5f0
2025-12-03T20:27:03.927 [DEBUG] [Thread-123108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:27:03.948 [DEBUG] [Thread-123108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:27:03.948 [INFO] [Thread-123108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] client lang: <none>
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] server lang: <none>
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] kex follows: False
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:27:03.952 [DEBUG] [Thread-123108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:27:03.953 [DEBUG] [Thread-123108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:27:03.953 [DEBUG] [Thread-123108] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:27:03.953 [DEBUG] [Thread-123108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:27:03.953 [DEBUG] [Thread-123108] [transport.py] [_log()] Compression: none
2025-12-03T20:27:03.953 [DEBUG] [Thread-123108] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:27:03.971 [DEBUG] [Thread-123108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:27:03.972 [DEBUG] [Thread-123108] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:27:03.972 [DEBUG] [Thread-123108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:27:03.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:27:03.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:27:03.974 [DEBUG] [Thread-123108] [transport.py] [_log()] userauth is OK
2025-12-03T20:27:03.975 [DEBUG] [Thread-123108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:27:03.975 [DEBUG] [Thread-123108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:27:03.975 [DEBUG] [Thread-123108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:27:03.975 [DEBUG] [Thread-123108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:27:03.999 [INFO] [Thread-123108] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:27:03.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:27:04.640 [DEBUG] [Thread-123108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:27:04.641 [DEBUG] [Thread-123108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:27:04.641 [DEBUG] [Thread-123108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:27:04.682 [DEBUG] [Thread-123108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:27:04.682 [DEBUG] [Thread-123108] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:27:04.686 [DEBUG] [Thread-123108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:27:04.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:27:04.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:27:04.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:27:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:27:04.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:27:04.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:27:04.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:27:04.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:27:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:27:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.768455 -999.00  +17.10  17.52     36   +2.10 1 1 1 1 1     2    0 14.30 -36.63 z.ESW 17.5 17.5 149.3 27.7 17.4 -25.4 17.4 -24.8 17.2 -23.1 17.5 -24.0
2025-12-03T20:27:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:27:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:27:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.768455
2025-12-03T20:27:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:27:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:27:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:27:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:27:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:27:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:26:39', tmtdew=17.27, humidity=30.84, cloud=0.0, wind=26.5, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:26:34.512', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:27:04.715 [DEBUG] [Thread-123108] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:27:04.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:27:04.817 [DEBUG] [Thread-123111] [transport.py] [_log()] starting thread (client mode): 0xa27ca380
2025-12-03T20:27:04.817 [DEBUG] [Thread-123111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:27:04.832 [DEBUG] [Thread-123111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:27:04.832 [INFO] [Thread-123111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] client lang: <none>
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] server lang: <none>
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] kex follows: False
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:27:04.840 [DEBUG] [Thread-123111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:27:04.841 [DEBUG] [Thread-123111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:27:04.841 [DEBUG] [Thread-123111] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:27:04.841 [DEBUG] [Thread-123111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:27:04.841 [DEBUG] [Thread-123111] [transport.py] [_log()] Compression: none
2025-12-03T20:27:04.841 [DEBUG] [Thread-123111] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:27:04.897 [DEBUG] [Thread-123111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:27:04.898 [DEBUG] [Thread-123111] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:27:04.898 [DEBUG] [Thread-123111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:27:04.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:27:04.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:27:04.954 [DEBUG] [Thread-123111] [transport.py] [_log()] userauth is OK
2025-12-03T20:27:04.954 [DEBUG] [Thread-123111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:27:04.954 [DEBUG] [Thread-123111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:27:04.954 [DEBUG] [Thread-123111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:27:04.954 [DEBUG] [Thread-123111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:27:04.973 [INFO] [Thread-123111] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:27:04.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:27:04.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:27:05.827 [DEBUG] [Thread-123111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:27:05.828 [DEBUG] [Thread-123111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:27:05.876 [DEBUG] [Thread-123111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:27:05.876 [DEBUG] [Thread-123111] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:27:05.885 [DEBUG] [Thread-123111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:27:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:27:05.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:27:05.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:27:05.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:27:05.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:27:05.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:27:05.920 [DEBUG] [Thread-123111] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:27:06.827 [DEBUG] [Thread-123113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:11.382 [DEBUG] [Thread-123114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:15.681 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:15.682 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:26.444 [DEBUG] [Thread-123115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:35.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:27:35.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:27:35.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:27:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 27, 11), 17.29, 30.79, 0.0, 23.93, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:27:36.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:27:11
2025-12-03T20:27:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:27:36.955 [DEBUG] [Thread-123116] [transport.py] [_log()] starting thread (client mode): 0xa271dc90
2025-12-03T20:27:36.956 [DEBUG] [Thread-123116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:27:36.976 [DEBUG] [Thread-123116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:27:36.976 [INFO] [Thread-123116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:27:36.979 [DEBUG] [Thread-123116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] client lang: <none>
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] server lang: <none>
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] kex follows: False
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] Compression: none
2025-12-03T20:27:36.980 [DEBUG] [Thread-123116] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:27:36.991 [DEBUG] [Thread-123116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:27:36.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:27:36.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] userauth is OK
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:27:36.992 [DEBUG] [Thread-123116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:27:37.001 [INFO] [Thread-123116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:27:37.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:27:37.637 [DEBUG] [Thread-123116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:27:37.637 [DEBUG] [Thread-123116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:27:37.637 [DEBUG] [Thread-123116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:27:37.678 [DEBUG] [Thread-123116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:27:37.679 [DEBUG] [Thread-123116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:27:37.680 [DEBUG] [Thread-123116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:27:37.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:27:37.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:27:37.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:27:37.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:27:37.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:27:37.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.768802 -999.00  +17.10  14.59     36   +2.10 1 1 1 1 1     2    0 14.36 -35.47 z.ESW 14.6 14.6 165.6 23.8 17.4 -25.4 17.4 -24.8 17.1 -23.1 17.4 -24.0
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.768802
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:27:37.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:27:11', tmtdew=17.29, humidity=30.79, cloud=0.0, wind=23.93, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:27:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[2.4507499999999993, 0.2162500000000005, 0.4632500000000004, 1.0305, nan, 2.037750000000001, nan, nan, 0.39449999999999896, 0.16699999999999982, 0.04025000000000034, 0.43299999999999983, 1.3075, 0.9032499999999999, 0.9419999999999993, 0.40499999999999936, 0.2717500000000008, 0.12899999999999956, 0.16199999999999903, 0.35224999999999973, 0.37349999999999994, 0.18574999999999875, 0.2862500000000008, 0.2557500000000008, 0.16499999999999915, 0.10749999999999993, 0.1537500000000005, 0.30049999999999955, 0.29499999999999993, 0.17050000000000054, 0.25900000000000034, 0.33250000000000224, 0.1322499999999991], zp_timestamp='2025-12-03T02:29:00')
2025-12-03T20:27:37.698 [DEBUG] [Thread-123116] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:27:37.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:27:41.481 [DEBUG] [Thread-123119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:27:56.530 [DEBUG] [Thread-123120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:06.898 [DEBUG] [Thread-123121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:11.564 [DEBUG] [Thread-123122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:25.092 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:25.093 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:26.602 [DEBUG] [Thread-123123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:41.639 [DEBUG] [Thread-123124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:28:56.673 [DEBUG] [Thread-123125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:06.967 [DEBUG] [Thread-123126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:11.709 [DEBUG] [Thread-123127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:26.746 [DEBUG] [Thread-123128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:34.821 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:34.822 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:41.786 [DEBUG] [Thread-123129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:29:51.382 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T20:29:56.823 [DEBUG] [Thread-123130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:07.045 [DEBUG] [Thread-123131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:11.861 [DEBUG] [Thread-123132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:21.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:30:21.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:30:21.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:30:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 29, 51), 17.27, 30.84, 0.0, 25.81, 17.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:30:22.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:29:51
2025-12-03T20:30:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:30:22.400 [DEBUG] [Thread-123133] [transport.py] [_log()] starting thread (client mode): 0xa51d2ad0
2025-12-03T20:30:22.400 [DEBUG] [Thread-123133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:30:22.421 [DEBUG] [Thread-123133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:30:22.421 [INFO] [Thread-123133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:30:22.424 [DEBUG] [Thread-123133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:30:22.424 [DEBUG] [Thread-123133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] client lang: <none>
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] server lang: <none>
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] kex follows: False
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] Compression: none
2025-12-03T20:30:22.425 [DEBUG] [Thread-123133] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:30:22.443 [DEBUG] [Thread-123133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:30:22.444 [DEBUG] [Thread-123133] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:30:22.444 [DEBUG] [Thread-123133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:30:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:30:22.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:30:22.445 [DEBUG] [Thread-123133] [transport.py] [_log()] userauth is OK
2025-12-03T20:30:22.445 [DEBUG] [Thread-123133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:30:22.445 [DEBUG] [Thread-123133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:30:22.445 [DEBUG] [Thread-123133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:30:22.445 [DEBUG] [Thread-123133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:30:22.460 [INFO] [Thread-123133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:30:22.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:30:23.070 [DEBUG] [Thread-123133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:30:23.070 [DEBUG] [Thread-123133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:30:23.071 [DEBUG] [Thread-123133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:30:23.112 [DEBUG] [Thread-123133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:30:23.112 [DEBUG] [Thread-123133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:30:23.114 [DEBUG] [Thread-123133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:30:23.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:30:23.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:30:23.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:30:23.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:30:23.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:30:23.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:30:23.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:30:23.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:30:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:30:23.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.770538 -999.00  +17.10  15.84     36   +2.20 1 1 1 1 1     1    0 14.28 -31.34 Z.ESW 15.8 15.8 149.6 22.8 17.4 -25.3 17.3 -24.8 17.1 -23.1 17.4 -24.1
2025-12-03T20:30:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:30:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:30:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.770538
2025-12-03T20:30:23.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:30:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:30:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:30:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:30:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:30:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:29:51', tmtdew=17.27, humidity=30.84, cloud=0.0, wind=25.81, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:29:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[2.5337499999999995, 0.16375000000000028, 0.5187500000000007, 1.0639999999999992, nan, 2.127250000000001, nan, nan, 0.4494999999999987, 0.1750000000000007, 0.10474999999999923, 0.41600000000000037, 1.4044999999999996, 0.8707499999999992, 0.8969999999999994, 0.3125, 0.23324999999999996, 0.15549999999999997, 0.1554999999999982, 0.3062499999999986, 0.44349999999999845, 0.2967499999999994, 0.2682500000000001, 0.30874999999999986, 0.24499999999999922, 0.17350000000000065, 0.13974999999999937, 0.24249999999999972, 0.33399999999999963, 0.2245000000000008, 0.3020000000000014, 0.3520000000000012, 0.23475000000000001], zp_timestamp='2025-12-03T18:27:00')
2025-12-03T20:30:23.137 [DEBUG] [Thread-123133] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:30:23.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:30:23.239 [DEBUG] [Thread-123136] [transport.py] [_log()] starting thread (client mode): 0xa51d3280
2025-12-03T20:30:23.240 [DEBUG] [Thread-123136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:30:23.255 [DEBUG] [Thread-123136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:30:23.255 [INFO] [Thread-123136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:30:23.262 [DEBUG] [Thread-123136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] client lang: <none>
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] server lang: <none>
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] kex follows: False
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:30:23.263 [DEBUG] [Thread-123136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:30:23.264 [DEBUG] [Thread-123136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:30:23.264 [DEBUG] [Thread-123136] [transport.py] [_log()] Compression: none
2025-12-03T20:30:23.264 [DEBUG] [Thread-123136] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:30:23.320 [DEBUG] [Thread-123136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:30:23.320 [DEBUG] [Thread-123136] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:30:23.321 [DEBUG] [Thread-123136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:30:23.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:30:23.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:30:23.377 [DEBUG] [Thread-123136] [transport.py] [_log()] userauth is OK
2025-12-03T20:30:23.378 [DEBUG] [Thread-123136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:30:23.378 [DEBUG] [Thread-123136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:30:23.378 [DEBUG] [Thread-123136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:30:23.378 [DEBUG] [Thread-123136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:30:23.396 [INFO] [Thread-123136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:30:23.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:30:23.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:30:24.227 [DEBUG] [Thread-123136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:30:24.227 [DEBUG] [Thread-123136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:30:24.274 [DEBUG] [Thread-123136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:30:24.274 [DEBUG] [Thread-123136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:30:24.282 [DEBUG] [Thread-123136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:30:24.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:30:24.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:30:24.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:30:24.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:30:24.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:30:24.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:30:24.313 [DEBUG] [Thread-123136] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:30:26.892 [DEBUG] [Thread-123138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:39.171 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:39.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:42.020 [DEBUG] [Thread-123139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:30:54.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:30:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:30:55.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 30, 23), 17.23, 30.92, 0.0, 25.85, 17.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:30:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:30:23
2025-12-03T20:30:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:30:55.327 [DEBUG] [Thread-123140] [transport.py] [_log()] starting thread (client mode): 0xa51e6b00
2025-12-03T20:30:55.327 [DEBUG] [Thread-123140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:30:55.347 [DEBUG] [Thread-123140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:30:55.347 [INFO] [Thread-123140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] client lang: <none>
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] server lang: <none>
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] kex follows: False
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] Compression: none
2025-12-03T20:30:55.350 [DEBUG] [Thread-123140] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:30:55.366 [DEBUG] [Thread-123140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:30:55.366 [DEBUG] [Thread-123140] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:30:55.366 [DEBUG] [Thread-123140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:30:55.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:30:55.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:30:55.367 [DEBUG] [Thread-123140] [transport.py] [_log()] userauth is OK
2025-12-03T20:30:55.367 [DEBUG] [Thread-123140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:30:55.367 [DEBUG] [Thread-123140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:30:55.367 [DEBUG] [Thread-123140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:30:55.367 [DEBUG] [Thread-123140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:30:55.375 [INFO] [Thread-123140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:30:55.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:30:56.166 [DEBUG] [Thread-123140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:30:56.167 [DEBUG] [Thread-123140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:30:56.167 [DEBUG] [Thread-123140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:30:56.208 [DEBUG] [Thread-123140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:30:56.208 [DEBUG] [Thread-123140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:30:56.210 [DEBUG] [Thread-123140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:30:56.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:30:56.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:30:56.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:30:56.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:30:56.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:30:56.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:30:56.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:30:56.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:30:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:30:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.770885 -999.00  +17.10  16.14     36   +2.20 1 1 1 1 1     1    0 14.44 -34.90 Z.ESW 16.1 16.1 148.2 23.5 17.4 -25.2 17.3 -24.8 17.1 -23.2 17.4 -24.0
2025-12-03T20:30:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:30:56.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.770885
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:30:56.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:30:23', tmtdew=17.23, humidity=30.92, cloud=0.0, wind=25.85, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:30:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[2.5337499999999995, 0.16375000000000028, 0.5187500000000007, 1.0639999999999992, nan, 2.127250000000001, nan, nan, 0.4494999999999987, 0.1750000000000007, 0.10474999999999923, 0.41600000000000037, 1.4044999999999996, 0.8707499999999992, 0.8969999999999994, 0.3125, 0.23324999999999996, 0.15549999999999997, 0.1554999999999982, 0.3062499999999986, 0.44349999999999845, 0.2967499999999994, 0.2682500000000001, 0.30874999999999986, 0.24499999999999922, 0.17350000000000065, 0.13974999999999937, 0.24249999999999972, 0.33399999999999963, 0.2245000000000008, 0.3020000000000014, 0.3520000000000012, 0.23475000000000001], zp_timestamp='2025-12-03T18:27:00')
2025-12-03T20:30:56.228 [DEBUG] [Thread-123140] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:30:56.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:30:56.320 [DEBUG] [Thread-123143] [transport.py] [_log()] starting thread (client mode): 0xa271fd60
2025-12-03T20:30:56.320 [DEBUG] [Thread-123143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:30:56.334 [DEBUG] [Thread-123143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:30:56.334 [INFO] [Thread-123143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] client lang: <none>
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] server lang: <none>
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] kex follows: False
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] Compression: none
2025-12-03T20:30:56.342 [DEBUG] [Thread-123143] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:30:56.403 [DEBUG] [Thread-123143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:30:56.403 [DEBUG] [Thread-123143] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:30:56.403 [DEBUG] [Thread-123143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:30:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:30:56.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:30:56.460 [DEBUG] [Thread-123143] [transport.py] [_log()] userauth is OK
2025-12-03T20:30:56.460 [DEBUG] [Thread-123143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:30:56.460 [DEBUG] [Thread-123143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:30:56.460 [DEBUG] [Thread-123143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:30:56.460 [DEBUG] [Thread-123143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:30:56.474 [INFO] [Thread-123143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:30:56.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:30:56.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:30:57.053 [DEBUG] [Thread-123145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:30:57.317 [DEBUG] [Thread-123143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:30:57.317 [DEBUG] [Thread-123143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:30:57.367 [DEBUG] [Thread-123143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:30:57.367 [DEBUG] [Thread-123143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:30:57.379 [DEBUG] [Thread-123143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:30:57.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:30:57.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:30:57.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:30:57.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:30:57.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:30:57.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:30:57.411 [DEBUG] [Thread-123143] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:31:07.115 [DEBUG] [Thread-123146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:12.109 [DEBUG] [Thread-123147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:27.148 [DEBUG] [Thread-123148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:27.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:31:27.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:31:27.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:31:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 30, 55), 17.2, 31.49, 0.0, 25.41, 17.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:31:28.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:30:55
2025-12-03T20:31:28.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:31:28.437 [DEBUG] [Thread-123149] [transport.py] [_log()] starting thread (client mode): 0xa51e79d0
2025-12-03T20:31:28.437 [DEBUG] [Thread-123149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:31:28.457 [DEBUG] [Thread-123149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:31:28.457 [INFO] [Thread-123149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] client lang: <none>
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] server lang: <none>
2025-12-03T20:31:28.460 [DEBUG] [Thread-123149] [transport.py] [_log()] kex follows: False
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] Compression: none
2025-12-03T20:31:28.461 [DEBUG] [Thread-123149] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:31:28.476 [DEBUG] [Thread-123149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:31:28.476 [DEBUG] [Thread-123149] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:31:28.476 [DEBUG] [Thread-123149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:31:28.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:31:28.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:31:28.477 [DEBUG] [Thread-123149] [transport.py] [_log()] userauth is OK
2025-12-03T20:31:28.477 [DEBUG] [Thread-123149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:31:28.477 [DEBUG] [Thread-123149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:31:28.477 [DEBUG] [Thread-123149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:31:28.477 [DEBUG] [Thread-123149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:31:28.486 [INFO] [Thread-123149] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:31:28.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:31:29.118 [DEBUG] [Thread-123149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:31:29.118 [DEBUG] [Thread-123149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:31:29.118 [DEBUG] [Thread-123149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:31:29.159 [DEBUG] [Thread-123149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:31:29.159 [DEBUG] [Thread-123149] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:31:29.162 [DEBUG] [Thread-123149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:31:29.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:31:29.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:31:29.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:31:29.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:31:29.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:31:29.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:31:29.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.771232 -999.00  +17.10  19.85     36   +2.20 1 1 1 1 1     1    0 14.11 -32.72 ZNESW 19.9 19.9 151.8 26.3 17.4 -25.3 17.3 -24.9 17.1 -23.1 17.4 -24.1
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.771232
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:31:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:30:55', tmtdew=17.2, humidity=31.49, cloud=0.0, wind=25.41, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:30:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[2.5337499999999995, 0.16375000000000028, 0.5187500000000007, 1.0639999999999992, nan, 2.127250000000001, nan, nan, 0.4494999999999987, 0.1750000000000007, 0.10474999999999923, 0.41600000000000037, 1.4044999999999996, 0.8707499999999992, 0.8969999999999994, 0.3125, 0.23324999999999996, 0.15549999999999997, 0.1554999999999982, 0.3062499999999986, 0.44349999999999845, 0.2967499999999994, 0.2682500000000001, 0.30874999999999986, 0.24499999999999922, 0.17350000000000065, 0.13974999999999937, 0.24249999999999972, 0.33399999999999963, 0.2245000000000008, 0.3020000000000014, 0.3520000000000012, 0.23475000000000001], zp_timestamp='2025-12-03T18:27:00')
2025-12-03T20:31:29.180 [DEBUG] [Thread-123149] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:31:29.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:31:29.272 [DEBUG] [Thread-123152] [transport.py] [_log()] starting thread (client mode): 0xa271f460
2025-12-03T20:31:29.272 [DEBUG] [Thread-123152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:31:29.286 [DEBUG] [Thread-123152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:31:29.286 [INFO] [Thread-123152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] client lang: <none>
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] server lang: <none>
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] kex follows: False
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] Compression: none
2025-12-03T20:31:29.294 [DEBUG] [Thread-123152] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:31:29.350 [DEBUG] [Thread-123152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:31:29.350 [DEBUG] [Thread-123152] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:31:29.351 [DEBUG] [Thread-123152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:31:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:31:29.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:31:29.407 [DEBUG] [Thread-123152] [transport.py] [_log()] userauth is OK
2025-12-03T20:31:29.407 [DEBUG] [Thread-123152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:31:29.407 [DEBUG] [Thread-123152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:31:29.407 [DEBUG] [Thread-123152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:31:29.407 [DEBUG] [Thread-123152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:31:29.421 [INFO] [Thread-123152] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:31:29.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:31:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:31:30.224 [DEBUG] [Thread-123152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:31:30.224 [DEBUG] [Thread-123152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:31:30.272 [DEBUG] [Thread-123152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:31:30.272 [DEBUG] [Thread-123152] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:31:30.281 [DEBUG] [Thread-123152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:31:30.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:31:30.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:31:30.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:31:30.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:31:30.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:31:30.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:31:30.316 [DEBUG] [Thread-123152] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:31:39.376 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:39.377 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:42.184 [DEBUG] [Thread-123154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:31:57.250 [DEBUG] [Thread-123155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:00.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:32:00.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:32:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:32:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 31, 27), 17.17, 31.56, 0.0, 22.8, 17.18, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:32:01.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:31:27
2025-12-03T20:32:01.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:32:01.379 [DEBUG] [Thread-123156] [transport.py] [_log()] starting thread (client mode): 0xa27cbb20
2025-12-03T20:32:01.379 [DEBUG] [Thread-123156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:32:01.399 [DEBUG] [Thread-123156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:32:01.400 [INFO] [Thread-123156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:32:01.402 [DEBUG] [Thread-123156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] client lang: <none>
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] server lang: <none>
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] kex follows: False
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] Compression: none
2025-12-03T20:32:01.403 [DEBUG] [Thread-123156] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:32:01.418 [DEBUG] [Thread-123156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:32:01.418 [DEBUG] [Thread-123156] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:32:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:32:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] userauth is OK
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:32:01.419 [DEBUG] [Thread-123156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:32:01.435 [INFO] [Thread-123156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:32:01.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:32:02.252 [DEBUG] [Thread-123156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:32:02.253 [DEBUG] [Thread-123156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:32:02.253 [DEBUG] [Thread-123156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:32:02.294 [DEBUG] [Thread-123156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:32:02.294 [DEBUG] [Thread-123156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:32:02.296 [DEBUG] [Thread-123156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:32:02.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:32:02.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:32:02.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:32:02.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:32:02.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:32:02.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:32:02.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:32:02.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.771580 -999.00  +17.10  19.20     36   +2.20 1 1 1 1 1     1    0 14.39 -33.13 ZNESW 19.2 19.2 152.6 28.1 17.4 -25.3 17.3 -24.6 17.1 -23.1 17.4 -24.0
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.771580
2025-12-03T20:32:02.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:32:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:32:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:32:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:32:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:32:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:31:27', tmtdew=17.17, humidity=31.56, cloud=0.0, wind=22.8, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:31:04.512', atlas_cloud=1, atlas_rain=1, zp_data=[2.5337499999999995, 0.16375000000000028, 0.5187500000000007, 1.0639999999999992, nan, 2.127250000000001, nan, nan, 0.4494999999999987, 0.1750000000000007, 0.10474999999999923, 0.41600000000000037, 1.4044999999999996, 0.8707499999999992, 0.8969999999999994, 0.3125, 0.23324999999999996, 0.15549999999999997, 0.1554999999999982, 0.3062499999999986, 0.44349999999999845, 0.2967499999999994, 0.2682500000000001, 0.30874999999999986, 0.24499999999999922, 0.17350000000000065, 0.13974999999999937, 0.24249999999999972, 0.33399999999999963, 0.2245000000000008, 0.3020000000000014, 0.3520000000000012, 0.23475000000000001], zp_timestamp='2025-12-03T18:27:00')
2025-12-03T20:32:02.319 [DEBUG] [Thread-123156] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:32:02.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:32:02.420 [DEBUG] [Thread-123159] [transport.py] [_log()] starting thread (client mode): 0xa51e7e80
2025-12-03T20:32:02.420 [DEBUG] [Thread-123159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:32:02.434 [DEBUG] [Thread-123159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:32:02.434 [INFO] [Thread-123159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] client lang: <none>
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] server lang: <none>
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] kex follows: False
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:32:02.442 [DEBUG] [Thread-123159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:32:02.443 [DEBUG] [Thread-123159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:32:02.443 [DEBUG] [Thread-123159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:32:02.443 [DEBUG] [Thread-123159] [transport.py] [_log()] Compression: none
2025-12-03T20:32:02.443 [DEBUG] [Thread-123159] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:32:02.503 [DEBUG] [Thread-123159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:32:02.503 [DEBUG] [Thread-123159] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:32:02.504 [DEBUG] [Thread-123159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:32:02.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:32:02.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:32:02.559 [DEBUG] [Thread-123159] [transport.py] [_log()] userauth is OK
2025-12-03T20:32:02.559 [DEBUG] [Thread-123159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:32:02.560 [DEBUG] [Thread-123159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:32:02.560 [DEBUG] [Thread-123159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:32:02.560 [DEBUG] [Thread-123159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:32:02.578 [INFO] [Thread-123159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:32:02.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:32:02.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:32:03.413 [DEBUG] [Thread-123159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:32:03.414 [DEBUG] [Thread-123159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:32:03.461 [DEBUG] [Thread-123159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:32:03.461 [DEBUG] [Thread-123159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:32:03.470 [DEBUG] [Thread-123159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:32:03.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:32:03.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:32:03.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:32:03.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:32:03.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:32:03.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:32:03.504 [DEBUG] [Thread-123159] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:32:07.181 [DEBUG] [Thread-123161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:12.290 [DEBUG] [Thread-123162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:27.338 [DEBUG] [Thread-123163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:33.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:32:33.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:32:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:32:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 31, 59), 17.13, 31.54, 0.0, 22.25, 17.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:32:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:31:59
2025-12-03T20:32:34.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:32:34.510 [DEBUG] [Thread-123164] [transport.py] [_log()] starting thread (client mode): 0xa2751c60
2025-12-03T20:32:34.510 [DEBUG] [Thread-123164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:32:34.530 [DEBUG] [Thread-123164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:32:34.530 [INFO] [Thread-123164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:32:34.533 [DEBUG] [Thread-123164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:32:34.533 [DEBUG] [Thread-123164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] client lang: <none>
2025-12-03T20:32:34.534 [DEBUG] [Thread-123164] [transport.py] [_log()] server lang: <none>
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] kex follows: False
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] Compression: none
2025-12-03T20:32:34.535 [DEBUG] [Thread-123164] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:32:34.555 [DEBUG] [Thread-123164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:32:34.556 [DEBUG] [Thread-123164] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:32:34.556 [DEBUG] [Thread-123164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:32:34.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:32:34.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:32:34.558 [DEBUG] [Thread-123164] [transport.py] [_log()] userauth is OK
2025-12-03T20:32:34.558 [DEBUG] [Thread-123164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:32:34.559 [DEBUG] [Thread-123164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:32:34.559 [DEBUG] [Thread-123164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:32:34.559 [DEBUG] [Thread-123164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:32:34.594 [INFO] [Thread-123164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:32:34.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:32:35.225 [DEBUG] [Thread-123164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:32:35.225 [DEBUG] [Thread-123164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:32:35.225 [DEBUG] [Thread-123164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:32:35.266 [DEBUG] [Thread-123164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:32:35.266 [DEBUG] [Thread-123164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:32:35.269 [DEBUG] [Thread-123164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:32:35.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:32:35.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:32:35.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:32:35.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:32:35.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:32:35.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:32:35.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:32:35.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.771927 -999.00  +17.10  16.88     36   +2.20 1 1 1 1 1     1    0 14.06 -35.11 ZNESW 16.9 16.9 147.4 25.4 17.4 -25.2 17.3 -24.8 17.1 -23.1 17.4 -23.9
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.771927
2025-12-03T20:32:35.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:32:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:32:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:32:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:32:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:32:35.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:31:59', tmtdew=17.13, humidity=31.54, cloud=0.0, wind=22.25, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:31:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:29:00')
2025-12-03T20:32:35.291 [DEBUG] [Thread-123164] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:32:35.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:32:35.398 [DEBUG] [Thread-123167] [transport.py] [_log()] starting thread (client mode): 0xa27516f0
2025-12-03T20:32:35.398 [DEBUG] [Thread-123167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:32:35.413 [DEBUG] [Thread-123167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:32:35.413 [INFO] [Thread-123167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:32:35.420 [DEBUG] [Thread-123167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:32:35.420 [DEBUG] [Thread-123167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] client lang: <none>
2025-12-03T20:32:35.421 [DEBUG] [Thread-123167] [transport.py] [_log()] server lang: <none>
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] kex follows: False
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] Compression: none
2025-12-03T20:32:35.422 [DEBUG] [Thread-123167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:32:35.479 [DEBUG] [Thread-123167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:32:35.480 [DEBUG] [Thread-123167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:32:35.481 [DEBUG] [Thread-123167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:32:35.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:32:35.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:32:35.535 [DEBUG] [Thread-123167] [transport.py] [_log()] userauth is OK
2025-12-03T20:32:35.535 [DEBUG] [Thread-123167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:32:35.536 [DEBUG] [Thread-123167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:32:35.536 [DEBUG] [Thread-123167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:32:35.536 [DEBUG] [Thread-123167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:32:35.558 [INFO] [Thread-123167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:32:35.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:32:35.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:32:36.400 [DEBUG] [Thread-123167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:32:36.400 [DEBUG] [Thread-123167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:32:36.448 [DEBUG] [Thread-123167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:32:36.448 [DEBUG] [Thread-123167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:32:36.457 [DEBUG] [Thread-123167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:32:36.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:32:36.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:32:36.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:32:36.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:32:36.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:32:36.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:32:36.490 [DEBUG] [Thread-123167] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:32:39.573 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:39.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:42.372 [DEBUG] [Thread-123169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:32:57.447 [DEBUG] [Thread-123170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:33:06.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:33:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:33:07.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 33, 3), 17.12, 31.54, 0.0, 22.51, 17.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:33:07.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:33:03
2025-12-03T20:33:07.235 [DEBUG] [Thread-123171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:33:07.450 [DEBUG] [Thread-123172] [transport.py] [_log()] starting thread (client mode): 0xa27509d0
2025-12-03T20:33:07.450 [DEBUG] [Thread-123172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:33:07.473 [DEBUG] [Thread-123172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:33:07.473 [INFO] [Thread-123172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:33:07.477 [DEBUG] [Thread-123172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:33:07.477 [DEBUG] [Thread-123172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:33:07.477 [DEBUG] [Thread-123172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:33:07.477 [DEBUG] [Thread-123172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] client lang: <none>
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] server lang: <none>
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] kex follows: False
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] Compression: none
2025-12-03T20:33:07.478 [DEBUG] [Thread-123172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:33:07.498 [DEBUG] [Thread-123172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:33:07.499 [DEBUG] [Thread-123172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:33:07.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:33:07.500 [DEBUG] [Thread-123172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:33:07.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:33:07.501 [DEBUG] [Thread-123172] [transport.py] [_log()] userauth is OK
2025-12-03T20:33:07.502 [DEBUG] [Thread-123172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:33:07.502 [DEBUG] [Thread-123172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:33:07.502 [DEBUG] [Thread-123172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:33:07.502 [DEBUG] [Thread-123172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:33:07.525 [INFO] [Thread-123172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:33:07.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:33:08.323 [DEBUG] [Thread-123172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:33:08.323 [DEBUG] [Thread-123172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:33:08.323 [DEBUG] [Thread-123172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:33:08.364 [DEBUG] [Thread-123172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:33:08.364 [DEBUG] [Thread-123172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:33:08.367 [DEBUG] [Thread-123172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:33:08.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:33:08.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:33:08.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:33:08.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:33:08.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:33:08.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:33:08.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.772621 -999.00  +17.00  16.43     36   +2.20 1 1 1 1 1     0    0 14.12 -33.03 ZNESW 16.4 16.4 153.0 23.0 17.4 -25.3 17.3 -24.8 17.1 -23.1 17.4 -23.9
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:33:08.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.772621
2025-12-03T20:33:08.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:33:08.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:33:08.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:33:08.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:33:08.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:33:08.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:33:03', tmtdew=17.12, humidity=31.54, cloud=0.0, wind=22.51, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:32:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:29:00')
2025-12-03T20:33:08.393 [DEBUG] [Thread-123172] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:33:08.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:33:08.500 [DEBUG] [Thread-123175] [transport.py] [_log()] starting thread (client mode): 0xa2751690
2025-12-03T20:33:08.500 [DEBUG] [Thread-123175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:33:08.514 [DEBUG] [Thread-123175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:33:08.515 [INFO] [Thread-123175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:33:08.522 [DEBUG] [Thread-123175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:33:08.522 [DEBUG] [Thread-123175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] client lang: <none>
2025-12-03T20:33:08.523 [DEBUG] [Thread-123175] [transport.py] [_log()] server lang: <none>
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] kex follows: False
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] Compression: none
2025-12-03T20:33:08.524 [DEBUG] [Thread-123175] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:33:08.578 [DEBUG] [Thread-123175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:33:08.579 [DEBUG] [Thread-123175] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:33:08.580 [DEBUG] [Thread-123175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:33:08.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:33:08.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:33:08.640 [DEBUG] [Thread-123175] [transport.py] [_log()] userauth is OK
2025-12-03T20:33:08.640 [DEBUG] [Thread-123175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:33:08.640 [DEBUG] [Thread-123175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:33:08.640 [DEBUG] [Thread-123175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:33:08.640 [DEBUG] [Thread-123175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:33:08.658 [INFO] [Thread-123175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:33:08.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:33:08.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:33:09.523 [DEBUG] [Thread-123175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:33:09.523 [DEBUG] [Thread-123175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:33:09.571 [DEBUG] [Thread-123175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:33:09.571 [DEBUG] [Thread-123175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:33:09.580 [DEBUG] [Thread-123175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:33:09.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:33:09.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:33:09.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:33:09.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:33:09.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:33:09.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:33:09.614 [DEBUG] [Thread-123175] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:33:12.482 [DEBUG] [Thread-123177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:27.539 [DEBUG] [Thread-123178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:39.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:33:39.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:33:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:33:39.775 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:39.776 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:40.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 33, 35), 17.01, 31.59, 0.0, 27.05, 17.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:33:40.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:33:35
2025-12-03T20:33:40.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:33:40.601 [DEBUG] [Thread-123179] [transport.py] [_log()] starting thread (client mode): 0xa2753730
2025-12-03T20:33:40.601 [DEBUG] [Thread-123179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:33:40.622 [DEBUG] [Thread-123179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:33:40.622 [INFO] [Thread-123179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:33:40.625 [DEBUG] [Thread-123179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:33:40.625 [DEBUG] [Thread-123179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:33:40.626 [DEBUG] [Thread-123179] [transport.py] [_log()] client lang: <none>
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] server lang: <none>
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] kex follows: False
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:33:40.627 [DEBUG] [Thread-123179] [transport.py] [_log()] Compression: none
2025-12-03T20:33:40.628 [DEBUG] [Thread-123179] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:33:40.647 [DEBUG] [Thread-123179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:33:40.647 [DEBUG] [Thread-123179] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:33:40.648 [DEBUG] [Thread-123179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:33:40.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:33:40.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:33:40.650 [DEBUG] [Thread-123179] [transport.py] [_log()] userauth is OK
2025-12-03T20:33:40.651 [DEBUG] [Thread-123179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:33:40.651 [DEBUG] [Thread-123179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:33:40.651 [DEBUG] [Thread-123179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:33:40.651 [DEBUG] [Thread-123179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:33:40.673 [INFO] [Thread-123179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:33:40.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:33:41.315 [DEBUG] [Thread-123179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:33:41.316 [DEBUG] [Thread-123179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:33:41.316 [DEBUG] [Thread-123179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:33:41.357 [DEBUG] [Thread-123179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:33:41.357 [DEBUG] [Thread-123179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:33:41.360 [DEBUG] [Thread-123179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:33:41.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:33:41.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:33:41.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:33:41.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:33:41.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:33:41.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:33:41.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:33:41.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:33:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:33:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.772968 -999.00  +17.00  17.23     36   +2.20 1 1 1 1 1     0    0 14.12 -38.04 ZNESW 17.2 17.2 155.6 22.2 17.4 -25.3 17.3 -24.7 17.1 -23.1 17.3 -24.0
2025-12-03T20:33:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:33:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:33:41.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.772968
2025-12-03T20:33:41.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:33:41.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:33:41.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:33:41.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:33:41.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:33:41.386 [DEBUG] [Thread-123179] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:33:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:33:35', tmtdew=17.01, humidity=31.59, cloud=0.0, wind=27.05, temperature=17.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:33:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:29:00')
2025-12-03T20:33:41.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:33:41.490 [DEBUG] [Thread-123182] [transport.py] [_log()] starting thread (client mode): 0xa271f460
2025-12-03T20:33:41.490 [DEBUG] [Thread-123182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:33:41.505 [DEBUG] [Thread-123182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:33:41.505 [INFO] [Thread-123182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:33:41.515 [DEBUG] [Thread-123182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] client lang: <none>
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] server lang: <none>
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] kex follows: False
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] Compression: none
2025-12-03T20:33:41.516 [DEBUG] [Thread-123182] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:33:41.571 [DEBUG] [Thread-123182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:33:41.572 [DEBUG] [Thread-123182] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:33:41.572 [DEBUG] [Thread-123182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:33:41.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:33:41.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:33:41.627 [DEBUG] [Thread-123182] [transport.py] [_log()] userauth is OK
2025-12-03T20:33:41.627 [DEBUG] [Thread-123182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:33:41.627 [DEBUG] [Thread-123182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:33:41.627 [DEBUG] [Thread-123182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:33:41.627 [DEBUG] [Thread-123182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:33:41.645 [INFO] [Thread-123182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:33:41.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:33:41.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:33:42.457 [DEBUG] [Thread-123182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:33:42.457 [DEBUG] [Thread-123182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:33:42.505 [DEBUG] [Thread-123182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:33:42.505 [DEBUG] [Thread-123182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:33:42.514 [DEBUG] [Thread-123182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:33:42.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:33:42.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:33:42.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:33:42.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:33:42.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:33:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:33:42.549 [DEBUG] [Thread-123182] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:33:42.574 [DEBUG] [Thread-123184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:33:57.640 [DEBUG] [Thread-123185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:07.305 [DEBUG] [Thread-123186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:34:12.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:34:12.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:34:12.677 [DEBUG] [Thread-123187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:13.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 34, 7), 17.01, 31.57, 0.0, 26.15, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:34:13.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:34:07
2025-12-03T20:34:13.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:34:13.527 [DEBUG] [Thread-123188] [transport.py] [_log()] starting thread (client mode): 0xa2751c30
2025-12-03T20:34:13.528 [DEBUG] [Thread-123188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:34:13.549 [DEBUG] [Thread-123188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:34:13.549 [INFO] [Thread-123188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:34:13.552 [DEBUG] [Thread-123188] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:34:13.552 [DEBUG] [Thread-123188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] client lang: <none>
2025-12-03T20:34:13.553 [DEBUG] [Thread-123188] [transport.py] [_log()] server lang: <none>
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] kex follows: False
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] Compression: none
2025-12-03T20:34:13.554 [DEBUG] [Thread-123188] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:34:13.574 [DEBUG] [Thread-123188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:34:13.575 [DEBUG] [Thread-123188] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:34:13.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:34:13.576 [DEBUG] [Thread-123188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:34:13.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:34:13.578 [DEBUG] [Thread-123188] [transport.py] [_log()] userauth is OK
2025-12-03T20:34:13.579 [DEBUG] [Thread-123188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:34:13.579 [DEBUG] [Thread-123188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:34:13.579 [DEBUG] [Thread-123188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:34:13.579 [DEBUG] [Thread-123188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:34:13.600 [INFO] [Thread-123188] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:34:13.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:34:14.389 [DEBUG] [Thread-123188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:34:14.390 [DEBUG] [Thread-123188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:34:14.390 [DEBUG] [Thread-123188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:34:14.432 [DEBUG] [Thread-123188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:34:14.432 [DEBUG] [Thread-123188] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:34:14.435 [DEBUG] [Thread-123188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:34:14.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:34:14.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:34:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:34:14.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:34:14.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:34:14.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:34:14.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.773316 -999.00  +17.00  17.55     36   +2.20 1 1 1 1 1     0    0 14.05 -37.60 ZNESW 17.6 17.6 143.0 26.2 17.4 -25.1 17.2 -24.7 17.1 -23.1 17.3 -24.0
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:34:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.773316
2025-12-03T20:34:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:34:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:34:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:34:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:34:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:34:14.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:34:07', tmtdew=17.01, humidity=31.57, cloud=0.0, wind=26.15, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:33:34.502', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:29:00')
2025-12-03T20:34:14.460 [DEBUG] [Thread-123188] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:34:14.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:34:14.562 [DEBUG] [Thread-123191] [transport.py] [_log()] starting thread (client mode): 0xa51e7b50
2025-12-03T20:34:14.562 [DEBUG] [Thread-123191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:34:14.577 [DEBUG] [Thread-123191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:34:14.577 [INFO] [Thread-123191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:34:14.584 [DEBUG] [Thread-123191] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:34:14.584 [DEBUG] [Thread-123191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:34:14.584 [DEBUG] [Thread-123191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:34:14.584 [DEBUG] [Thread-123191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] client lang: <none>
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] server lang: <none>
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] kex follows: False
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] Compression: none
2025-12-03T20:34:14.585 [DEBUG] [Thread-123191] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:34:14.642 [DEBUG] [Thread-123191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:34:14.642 [DEBUG] [Thread-123191] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:34:14.642 [DEBUG] [Thread-123191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:34:14.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:34:14.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:34:14.698 [DEBUG] [Thread-123191] [transport.py] [_log()] userauth is OK
2025-12-03T20:34:14.699 [DEBUG] [Thread-123191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:34:14.699 [DEBUG] [Thread-123191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:34:14.699 [DEBUG] [Thread-123191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:34:14.699 [DEBUG] [Thread-123191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:34:14.719 [INFO] [Thread-123191] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:34:14.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:34:14.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:34:15.231 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:15.529 [DEBUG] [Thread-123191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:34:15.529 [DEBUG] [Thread-123191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:34:15.577 [DEBUG] [Thread-123191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:34:15.577 [DEBUG] [Thread-123191] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:34:15.586 [DEBUG] [Thread-123191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:34:15.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:34:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:34:15.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:34:15.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:34:15.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:34:15.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:34:15.621 [DEBUG] [Thread-123191] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:34:18.390 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:23.491 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:27.714 [DEBUG] [Thread-123193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:30.004 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:39.973 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:39.974 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:42.771 [DEBUG] [Thread-123194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:45.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:34:45.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:34:45.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:34:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 34, 39), 17.01, 31.57, 0.0, 22.02, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:34:46.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:34:39
2025-12-03T20:34:46.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:34:46.606 [DEBUG] [Thread-123195] [transport.py] [_log()] starting thread (client mode): 0xa51e7430
2025-12-03T20:34:46.607 [DEBUG] [Thread-123195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:34:46.627 [DEBUG] [Thread-123195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:34:46.627 [INFO] [Thread-123195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:34:46.630 [DEBUG] [Thread-123195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:34:46.630 [DEBUG] [Thread-123195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:34:46.630 [DEBUG] [Thread-123195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:34:46.630 [DEBUG] [Thread-123195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:46.630 [DEBUG] [Thread-123195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] client lang: <none>
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] server lang: <none>
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] kex follows: False
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] Compression: none
2025-12-03T20:34:46.631 [DEBUG] [Thread-123195] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:34:46.647 [DEBUG] [Thread-123195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:34:46.648 [DEBUG] [Thread-123195] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:34:46.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:34:46.649 [DEBUG] [Thread-123195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:34:46.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:34:46.650 [DEBUG] [Thread-123195] [transport.py] [_log()] userauth is OK
2025-12-03T20:34:46.650 [DEBUG] [Thread-123195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:34:46.650 [DEBUG] [Thread-123195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:34:46.651 [DEBUG] [Thread-123195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:34:46.651 [DEBUG] [Thread-123195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:34:46.672 [INFO] [Thread-123195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:34:46.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:34:47.311 [DEBUG] [Thread-123195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:34:47.312 [DEBUG] [Thread-123195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:34:47.312 [DEBUG] [Thread-123195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:34:47.353 [DEBUG] [Thread-123195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:34:47.353 [DEBUG] [Thread-123195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:34:47.356 [DEBUG] [Thread-123195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:34:47.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:34:47.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:34:47.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:34:47.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:34:47.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:34:47.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:34:47.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:34:47.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:34:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:34:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.773663 -999.00  +17.00  15.14     36   +2.20 1 1 1 1 1     0    0 14.10 -39.75 ZNESW 15.1 15.1 151.0 28.4 17.4 -25.3 17.2 -24.7 17.1 -23.1 17.3 -23.9
2025-12-03T20:34:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:34:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:34:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.773663
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:34:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:34:39', tmtdew=17.01, humidity=31.57, cloud=0.0, wind=22.02, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:34:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:29:00')
2025-12-03T20:34:47.381 [DEBUG] [Thread-123195] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:34:47.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:34:47.493 [DEBUG] [Thread-123198] [transport.py] [_log()] starting thread (client mode): 0xa271fdc0
2025-12-03T20:34:47.493 [DEBUG] [Thread-123198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:34:47.508 [DEBUG] [Thread-123198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:34:47.508 [INFO] [Thread-123198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:34:47.515 [DEBUG] [Thread-123198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] client lang: <none>
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] server lang: <none>
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] kex follows: False
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] Compression: none
2025-12-03T20:34:47.516 [DEBUG] [Thread-123198] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:34:47.574 [DEBUG] [Thread-123198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:34:47.574 [DEBUG] [Thread-123198] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:34:47.575 [DEBUG] [Thread-123198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:34:47.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:34:47.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:34:47.630 [DEBUG] [Thread-123198] [transport.py] [_log()] userauth is OK
2025-12-03T20:34:47.630 [DEBUG] [Thread-123198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:34:47.630 [DEBUG] [Thread-123198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:34:47.631 [DEBUG] [Thread-123198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:34:47.631 [DEBUG] [Thread-123198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:34:47.650 [INFO] [Thread-123198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:34:47.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:34:47.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:34:48.559 [DEBUG] [Thread-123198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:34:48.559 [DEBUG] [Thread-123198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:34:48.607 [DEBUG] [Thread-123198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:34:48.607 [DEBUG] [Thread-123198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:34:48.615 [DEBUG] [Thread-123198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:34:48.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:34:48.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:34:48.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:34:48.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:34:48.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:34:48.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:34:48.651 [DEBUG] [Thread-123198] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:34:49.571 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:55.097 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:34:57.808 [DEBUG] [Thread-123200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:07.360 [DEBUG] [Thread-123201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:12.862 [DEBUG] [Thread-123202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:14.348 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:18.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:35:18.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:35:18.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:35:18.720 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 35, 11), 16.99, 31.62, 0.0, 21.05, 17.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:35:19.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:35:11
2025-12-03T20:35:19.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:35:19.615 [DEBUG] [Thread-123203] [transport.py] [_log()] starting thread (client mode): 0xa2752620
2025-12-03T20:35:19.615 [DEBUG] [Thread-123203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:35:19.636 [DEBUG] [Thread-123203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:35:19.636 [INFO] [Thread-123203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:35:19.637 [DEBUG] [Thread-123203] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] client lang: <none>
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] server lang: <none>
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] kex follows: False
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] Compression: none
2025-12-03T20:35:19.638 [DEBUG] [Thread-123203] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:35:19.657 [DEBUG] [Thread-123203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:35:19.657 [DEBUG] [Thread-123203] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:35:19.658 [DEBUG] [Thread-123203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:35:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:35:19.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:35:19.659 [DEBUG] [Thread-123203] [transport.py] [_log()] userauth is OK
2025-12-03T20:35:19.659 [DEBUG] [Thread-123203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:35:19.660 [DEBUG] [Thread-123203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:35:19.660 [DEBUG] [Thread-123203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:35:19.660 [DEBUG] [Thread-123203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:35:19.677 [INFO] [Thread-123203] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:35:19.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:35:20.628 [DEBUG] [Thread-123203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:35:20.629 [DEBUG] [Thread-123203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:35:20.629 [DEBUG] [Thread-123203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:35:20.670 [DEBUG] [Thread-123203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:35:20.670 [DEBUG] [Thread-123203] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:35:20.672 [DEBUG] [Thread-123203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:35:20.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:35:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:35:20.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:35:20.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:35:20.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:35:20.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:35:20.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:35:20.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.774010 -999.00  +17.00  17.64     36   +2.20 1 1 1 1 1     0    0 13.96 -40.74 ZNESW 17.6 17.6 153.0 21.7 17.4 -25.2 17.3 -24.8 17.0 -23.1 17.3 -24.0
2025-12-03T20:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:35:20.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.774010
2025-12-03T20:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:35:20.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:35:20.693 [DEBUG] [Thread-123203] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:35:20.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:35:11', tmtdew=16.99, humidity=31.62, cloud=0.0, wind=21.05, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:34:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:34:00')
2025-12-03T20:35:20.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:35:24.862 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:27.898 [DEBUG] [Thread-123206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:29.230 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:30.974 [DEBUG] [Thread-123207] [transport.py] [_log()] starting thread (client mode): 0xa27c9360
2025-12-03T20:35:30.975 [DEBUG] [Thread-123207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:35:30.989 [DEBUG] [Thread-123207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:35:30.989 [INFO] [Thread-123207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] client lang: <none>
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] server lang: <none>
2025-12-03T20:35:30.998 [DEBUG] [Thread-123207] [transport.py] [_log()] kex follows: False
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] Compression: none
2025-12-03T20:35:30.999 [DEBUG] [Thread-123207] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:35:31.058 [DEBUG] [Thread-123207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:35:31.059 [DEBUG] [Thread-123207] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:35:31.059 [DEBUG] [Thread-123207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:35:31.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:35:31.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:35:31.114 [DEBUG] [Thread-123207] [transport.py] [_log()] userauth is OK
2025-12-03T20:35:31.115 [DEBUG] [Thread-123207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:35:31.115 [DEBUG] [Thread-123207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:35:31.115 [DEBUG] [Thread-123207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:35:31.115 [DEBUG] [Thread-123207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:35:31.134 [INFO] [Thread-123207] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:35:31.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:35:31.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:35:31.982 [DEBUG] [Thread-123207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:35:31.982 [DEBUG] [Thread-123207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:35:32.031 [DEBUG] [Thread-123207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:35:32.032 [DEBUG] [Thread-123207] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:35:32.043 [DEBUG] [Thread-123207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:35:32.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:35:32.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:35:32.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:35:32.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:35:32.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:35:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:35:32.081 [DEBUG] [Thread-123207] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:35:40.174 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:40.175 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:42.957 [DEBUG] [Thread-123209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:35:57.993 [DEBUG] [Thread-123210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:02.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:36:02.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:36:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:36:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 35, 44), 16.91, 31.69, 0.0, 18.21, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:36:02.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:35:44
2025-12-03T20:36:02.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:36:03.042 [DEBUG] [Thread-123211] [transport.py] [_log()] starting thread (client mode): 0xa27ca620
2025-12-03T20:36:03.042 [DEBUG] [Thread-123211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:36:03.064 [DEBUG] [Thread-123211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:36:03.064 [INFO] [Thread-123211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:36:03.068 [DEBUG] [Thread-123211] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:36:03.068 [DEBUG] [Thread-123211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:36:03.068 [DEBUG] [Thread-123211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:36:03.068 [DEBUG] [Thread-123211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:03.068 [DEBUG] [Thread-123211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] client lang: <none>
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] server lang: <none>
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] kex follows: False
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:36:03.069 [DEBUG] [Thread-123211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:36:03.070 [DEBUG] [Thread-123211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:36:03.070 [DEBUG] [Thread-123211] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:36:03.070 [DEBUG] [Thread-123211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:36:03.070 [DEBUG] [Thread-123211] [transport.py] [_log()] Compression: none
2025-12-03T20:36:03.070 [DEBUG] [Thread-123211] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:36:03.089 [DEBUG] [Thread-123211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:36:03.090 [DEBUG] [Thread-123211] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:36:03.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:36:03.091 [DEBUG] [Thread-123211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:36:03.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:36:03.092 [DEBUG] [Thread-123211] [transport.py] [_log()] userauth is OK
2025-12-03T20:36:03.092 [DEBUG] [Thread-123211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:36:03.092 [DEBUG] [Thread-123211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:36:03.093 [DEBUG] [Thread-123211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:36:03.093 [DEBUG] [Thread-123211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:36:03.116 [INFO] [Thread-123211] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:36:03.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:36:03.769 [DEBUG] [Thread-123211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:36:03.769 [DEBUG] [Thread-123211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:36:03.769 [DEBUG] [Thread-123211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:36:03.811 [DEBUG] [Thread-123211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:36:03.811 [DEBUG] [Thread-123211] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:36:03.814 [DEBUG] [Thread-123211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:36:03.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:36:03.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:36:03.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:36:03.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:36:03.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:36:03.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:36:03.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.774357 -999.00  +17.00  16.68     37   +2.20 1 1 1 1 1     0    0 13.96 -38.22 ZNESW 16.7 16.7 162.6 20.8 17.3 -25.3 17.3 -24.7 17.1 -23.2 17.3 -24.0
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:36:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.774357
2025-12-03T20:36:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:36:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:36:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:36:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:36:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:36:03.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:35:44', tmtdew=16.91, humidity=31.69, cloud=0.0, wind=18.21, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:35:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:34:00')
2025-12-03T20:36:03.840 [DEBUG] [Thread-123211] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:36:03.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:36:03.944 [DEBUG] [Thread-123214] [transport.py] [_log()] starting thread (client mode): 0xa2760610
2025-12-03T20:36:03.944 [DEBUG] [Thread-123214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:36:03.961 [DEBUG] [Thread-123214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:36:03.961 [INFO] [Thread-123214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:36:03.968 [DEBUG] [Thread-123214] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] client lang: <none>
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] server lang: <none>
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] kex follows: False
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:36:03.969 [DEBUG] [Thread-123214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:36:03.970 [DEBUG] [Thread-123214] [transport.py] [_log()] Compression: none
2025-12-03T20:36:03.970 [DEBUG] [Thread-123214] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:36:04.025 [DEBUG] [Thread-123214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:36:04.025 [DEBUG] [Thread-123214] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:36:04.026 [DEBUG] [Thread-123214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:36:04.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:36:04.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:36:04.082 [DEBUG] [Thread-123214] [transport.py] [_log()] userauth is OK
2025-12-03T20:36:04.082 [DEBUG] [Thread-123214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:36:04.082 [DEBUG] [Thread-123214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:36:04.082 [DEBUG] [Thread-123214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:36:04.082 [DEBUG] [Thread-123214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:36:04.100 [INFO] [Thread-123214] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:36:04.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:36:04.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:36:04.919 [DEBUG] [Thread-123214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:36:04.919 [DEBUG] [Thread-123214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:36:04.967 [DEBUG] [Thread-123214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:36:04.967 [DEBUG] [Thread-123214] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:36:04.976 [DEBUG] [Thread-123214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:36:04.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:36:04.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:36:04.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:36:05.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:36:05.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:36:05.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:36:05.010 [DEBUG] [Thread-123214] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:36:07.448 [DEBUG] [Thread-123216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:13.027 [DEBUG] [Thread-123217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:28.080 [DEBUG] [Thread-123218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:35.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:36:35.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:36:35.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:36:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 36, 16), 16.92, 31.67, 0.0, 19.81, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:36:35.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:36:16
2025-12-03T20:36:35.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:36:35.945 [DEBUG] [Thread-123219] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T20:36:35.946 [DEBUG] [Thread-123219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:36:35.965 [DEBUG] [Thread-123219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:36:35.966 [INFO] [Thread-123219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] client lang: <none>
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] server lang: <none>
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] kex follows: False
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:36:35.969 [DEBUG] [Thread-123219] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:36:35.970 [DEBUG] [Thread-123219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:36:35.970 [DEBUG] [Thread-123219] [transport.py] [_log()] Compression: none
2025-12-03T20:36:35.970 [DEBUG] [Thread-123219] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:36:35.988 [DEBUG] [Thread-123219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:36:35.989 [DEBUG] [Thread-123219] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:36:35.989 [DEBUG] [Thread-123219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:36:35.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:36:35.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:36:35.991 [DEBUG] [Thread-123219] [transport.py] [_log()] userauth is OK
2025-12-03T20:36:35.992 [DEBUG] [Thread-123219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:36:35.992 [DEBUG] [Thread-123219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:36:35.992 [DEBUG] [Thread-123219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:36:35.992 [DEBUG] [Thread-123219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:36:36.026 [INFO] [Thread-123219] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:36:36.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:36:36.672 [DEBUG] [Thread-123219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:36:36.672 [DEBUG] [Thread-123219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:36:36.673 [DEBUG] [Thread-123219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:36:36.714 [DEBUG] [Thread-123219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:36:36.714 [DEBUG] [Thread-123219] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:36:36.717 [DEBUG] [Thread-123219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:36:36.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:36:36.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:36:36.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:36:36.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:36:36.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:36:36.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:36:36.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:36:36.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:36:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:36:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.775052 -999.00  +17.00  18.01     37   +2.20 1 1 1 1 1     0    0 14.04 -38.40 ZNESW 18.0 18.0 153.1 22.5 17.3 -25.2 17.2 -24.7 17.0 -23.1 17.3 -23.9
2025-12-03T20:36:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:36:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:36:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.775052
2025-12-03T20:36:36.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:36:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:36:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:36:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:36:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:36:36.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:36:16', tmtdew=16.92, humidity=31.67, cloud=0.0, wind=19.81, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:36:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:34:00')
2025-12-03T20:36:36.742 [DEBUG] [Thread-123219] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:36:36.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:36:36.844 [DEBUG] [Thread-123222] [transport.py] [_log()] starting thread (client mode): 0xa27503a0
2025-12-03T20:36:36.844 [DEBUG] [Thread-123222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:36:36.859 [DEBUG] [Thread-123222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:36:36.859 [INFO] [Thread-123222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:36:36.866 [DEBUG] [Thread-123222] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] client lang: <none>
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] server lang: <none>
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] kex follows: False
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:36:36.867 [DEBUG] [Thread-123222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:36:36.868 [DEBUG] [Thread-123222] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:36:36.868 [DEBUG] [Thread-123222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:36:36.868 [DEBUG] [Thread-123222] [transport.py] [_log()] Compression: none
2025-12-03T20:36:36.868 [DEBUG] [Thread-123222] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:36:36.925 [DEBUG] [Thread-123222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:36:36.926 [DEBUG] [Thread-123222] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:36:36.926 [DEBUG] [Thread-123222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:36:36.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:36:36.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:36:36.981 [DEBUG] [Thread-123222] [transport.py] [_log()] userauth is OK
2025-12-03T20:36:36.982 [DEBUG] [Thread-123222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:36:36.982 [DEBUG] [Thread-123222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:36:36.982 [DEBUG] [Thread-123222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:36:36.982 [DEBUG] [Thread-123222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:36:37.001 [INFO] [Thread-123222] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:36:37.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:36:37.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:36:37.817 [DEBUG] [Thread-123222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:36:37.817 [DEBUG] [Thread-123222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:36:37.866 [DEBUG] [Thread-123222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:36:37.866 [DEBUG] [Thread-123222] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:36:37.875 [DEBUG] [Thread-123222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:36:37.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:36:37.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:36:37.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:36:37.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:36:37.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:36:37.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:36:37.910 [DEBUG] [Thread-123222] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:36:38.284 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:40.374 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:40.376 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:42.385 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:43.112 [DEBUG] [Thread-123224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:36:58.168 [DEBUG] [Thread-123225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:03.811 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:07.507 [DEBUG] [Thread-123226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:07.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:37:07.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:37:07.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:37:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 36, 48), 16.96, 31.69, 0.0, 24.28, 17.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:37:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:36:48
2025-12-03T20:37:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:37:08.885 [DEBUG] [Thread-123227] [transport.py] [_log()] starting thread (client mode): 0xa5148130
2025-12-03T20:37:08.886 [DEBUG] [Thread-123227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:37:08.907 [DEBUG] [Thread-123227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:37:08.907 [INFO] [Thread-123227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:08.911 [DEBUG] [Thread-123227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] client lang: <none>
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] server lang: <none>
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] kex follows: False
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] Compression: none
2025-12-03T20:37:08.912 [DEBUG] [Thread-123227] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:37:08.929 [DEBUG] [Thread-123227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:37:08.929 [DEBUG] [Thread-123227] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:37:08.930 [DEBUG] [Thread-123227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:37:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:37:08.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:37:08.931 [DEBUG] [Thread-123227] [transport.py] [_log()] userauth is OK
2025-12-03T20:37:08.931 [DEBUG] [Thread-123227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:37:08.932 [DEBUG] [Thread-123227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:37:08.932 [DEBUG] [Thread-123227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:37:08.932 [DEBUG] [Thread-123227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:37:08.953 [INFO] [Thread-123227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:37:08.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:37:09.606 [DEBUG] [Thread-123227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:37:09.606 [DEBUG] [Thread-123227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:37:09.606 [DEBUG] [Thread-123227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:37:09.647 [DEBUG] [Thread-123227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:37:09.647 [DEBUG] [Thread-123227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:37:09.650 [DEBUG] [Thread-123227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:37:09.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:37:09.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:37:09.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:37:09.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:37:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:37:09.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:37:09.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:37:09.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.775399 -999.00  +17.00  15.16     37   +2.20 1 1 1 1 1     0    0 13.73 -40.53 ZNESW 15.2 15.2 162.2 19.9 17.3 -25.2 17.2 -24.8 17.0 -23.2 17.3 -23.9
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.775399
2025-12-03T20:37:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:37:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:37:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:37:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:37:09.675 [DEBUG] [Thread-123227] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:37:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:37:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:36:48', tmtdew=16.96, humidity=31.69, cloud=0.0, wind=24.28, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:36:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:34:00')
2025-12-03T20:37:09.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:37:09.784 [DEBUG] [Thread-123230] [transport.py] [_log()] starting thread (client mode): 0xa51482e0
2025-12-03T20:37:09.785 [DEBUG] [Thread-123230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:37:09.799 [DEBUG] [Thread-123230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:37:09.799 [INFO] [Thread-123230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] client lang: <none>
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] server lang: <none>
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] kex follows: False
2025-12-03T20:37:09.807 [DEBUG] [Thread-123230] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] Compression: none
2025-12-03T20:37:09.808 [DEBUG] [Thread-123230] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:37:09.865 [DEBUG] [Thread-123230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:37:09.865 [DEBUG] [Thread-123230] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:37:09.866 [DEBUG] [Thread-123230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:37:09.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:37:09.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:37:09.921 [DEBUG] [Thread-123230] [transport.py] [_log()] userauth is OK
2025-12-03T20:37:09.922 [DEBUG] [Thread-123230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:37:09.922 [DEBUG] [Thread-123230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:37:09.922 [DEBUG] [Thread-123230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:37:09.922 [DEBUG] [Thread-123230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:37:09.940 [INFO] [Thread-123230] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:37:09.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:37:09.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:37:10.782 [DEBUG] [Thread-123230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:37:10.782 [DEBUG] [Thread-123230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:37:10.830 [DEBUG] [Thread-123230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:37:10.830 [DEBUG] [Thread-123230] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:37:10.839 [DEBUG] [Thread-123230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:37:10.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:37:10.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:37:10.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:37:10.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:37:10.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:37:10.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:37:10.874 [DEBUG] [Thread-123230] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:37:13.202 [DEBUG] [Thread-123232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:24.258 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:28.256 [DEBUG] [Thread-123233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:40.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:40.575 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:40.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:37:40.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:37:40.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:37:41.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 37, 20), 16.94, 31.72, 0.0, 25.35, 17.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:37:41.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:37:20
2025-12-03T20:37:41.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:37:41.891 [DEBUG] [Thread-123234] [transport.py] [_log()] starting thread (client mode): 0xa27c9ea0
2025-12-03T20:37:41.891 [DEBUG] [Thread-123234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:37:41.911 [DEBUG] [Thread-123234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:37:41.911 [INFO] [Thread-123234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] client lang: <none>
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] server lang: <none>
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] kex follows: False
2025-12-03T20:37:41.914 [DEBUG] [Thread-123234] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] Compression: none
2025-12-03T20:37:41.915 [DEBUG] [Thread-123234] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:37:41.932 [DEBUG] [Thread-123234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:37:41.932 [DEBUG] [Thread-123234] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:37:41.932 [DEBUG] [Thread-123234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:37:41.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:37:41.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:37:41.976 [DEBUG] [Thread-123234] [transport.py] [_log()] userauth is OK
2025-12-03T20:37:41.976 [DEBUG] [Thread-123234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:37:41.976 [DEBUG] [Thread-123234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:37:41.976 [DEBUG] [Thread-123234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:37:41.977 [DEBUG] [Thread-123234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:37:41.991 [INFO] [Thread-123234] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:37:41.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:37:42.633 [DEBUG] [Thread-123234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:37:42.633 [DEBUG] [Thread-123234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:37:42.633 [DEBUG] [Thread-123234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:37:42.674 [DEBUG] [Thread-123234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:37:42.674 [DEBUG] [Thread-123234] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:37:42.676 [DEBUG] [Thread-123234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:37:42.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:37:42.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:37:42.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:37:42.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:37:42.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:37:42.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:37:42.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.775746 -999.00  +17.00  16.15     37   +2.20 1 1 1 1 1     0    0 13.93 -38.98 ZNESW 16.1 16.1 172.4 25.8 17.3 -25.3 17.2 -24.8 17.0 -23.1 17.3 -24.0
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.775746
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:37:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:37:20', tmtdew=16.94, humidity=31.72, cloud=0.0, wind=25.35, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:37:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.028249999999999886, -0.011749999999999261, -0.0754999999999999, -0.03849999999999909, 0.01025000000000098, -0.014000000000001123, -0.14074999999999882, -0.05450000000000088, 0.0015000000000000568, -0.038750000000000284, -0.04750000000000121, -0.04499999999999993, 0.027249999999998664, -0.0010000000000012221, -0.17300000000000004, 0.04625000000000057, -0.023999999999999133, 0.028999999999999915, -0.05775000000000041, 0.015999999999998238, 0.06325000000000003, -0.03474999999999895, -0.23925000000000018, -0.09700000000000131, -0.00849999999999973, 0.03575000000000017, 0.0015000000000000568, 0.06400000000000006, -0.027999999999998693, 0.023000000000001464, -0.8999999999999986, -0.07125000000000092], zp_timestamp='2025-12-03T18:34:00')
2025-12-03T20:37:42.694 [DEBUG] [Thread-123234] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:37:42.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:37:42.786 [DEBUG] [Thread-123237] [transport.py] [_log()] starting thread (client mode): 0xa2750280
2025-12-03T20:37:42.786 [DEBUG] [Thread-123237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:37:42.800 [DEBUG] [Thread-123237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:37:42.800 [INFO] [Thread-123237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] client lang: <none>
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] server lang: <none>
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] kex follows: False
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] Compression: none
2025-12-03T20:37:42.808 [DEBUG] [Thread-123237] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:37:42.863 [DEBUG] [Thread-123237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:37:42.864 [DEBUG] [Thread-123237] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:37:42.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:37:42.864 [DEBUG] [Thread-123237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:37:42.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:37:42.921 [DEBUG] [Thread-123237] [transport.py] [_log()] userauth is OK
2025-12-03T20:37:42.921 [DEBUG] [Thread-123237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:37:42.921 [DEBUG] [Thread-123237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:37:42.921 [DEBUG] [Thread-123237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:37:42.921 [DEBUG] [Thread-123237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:37:42.936 [INFO] [Thread-123237] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:37:42.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:37:42.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:37:43.292 [DEBUG] [Thread-123239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:43.772 [DEBUG] [Thread-123237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:37:43.772 [DEBUG] [Thread-123237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:37:43.819 [DEBUG] [Thread-123237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:37:43.819 [DEBUG] [Thread-123237] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:37:43.828 [DEBUG] [Thread-123237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:37:43.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:37:43.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:37:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:37:43.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:37:43.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:37:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:37:43.859 [DEBUG] [Thread-123237] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:37:44.716 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:37:58.350 [DEBUG] [Thread-123240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:05.169 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:07.571 [DEBUG] [Thread-123241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:13.386 [DEBUG] [Thread-123242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:38:13.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:38:13.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:38:14.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 37, 52), 16.94, 31.74, 0.0, 22.37, 17.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:38:14.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:37:52
2025-12-03T20:38:14.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:38:14.824 [DEBUG] [Thread-123243] [transport.py] [_log()] starting thread (client mode): 0xa27519c0
2025-12-03T20:38:14.824 [DEBUG] [Thread-123243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:38:14.844 [DEBUG] [Thread-123243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:38:14.844 [INFO] [Thread-123243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] client lang: <none>
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] server lang: <none>
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] kex follows: False
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:38:14.848 [DEBUG] [Thread-123243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:38:14.849 [DEBUG] [Thread-123243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:38:14.849 [DEBUG] [Thread-123243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:38:14.849 [DEBUG] [Thread-123243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:38:14.849 [DEBUG] [Thread-123243] [transport.py] [_log()] Compression: none
2025-12-03T20:38:14.849 [DEBUG] [Thread-123243] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:38:14.866 [DEBUG] [Thread-123243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:38:14.867 [DEBUG] [Thread-123243] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:38:14.867 [DEBUG] [Thread-123243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:38:14.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:38:14.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:38:14.869 [DEBUG] [Thread-123243] [transport.py] [_log()] userauth is OK
2025-12-03T20:38:14.869 [DEBUG] [Thread-123243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:38:14.869 [DEBUG] [Thread-123243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:38:14.869 [DEBUG] [Thread-123243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:38:14.869 [DEBUG] [Thread-123243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:38:14.888 [INFO] [Thread-123243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:38:14.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:38:15.553 [DEBUG] [Thread-123243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:38:15.553 [DEBUG] [Thread-123243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:38:15.553 [DEBUG] [Thread-123243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:38:15.594 [DEBUG] [Thread-123243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:38:15.594 [DEBUG] [Thread-123243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:38:15.597 [DEBUG] [Thread-123243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:38:15.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:38:15.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:38:15.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:38:15.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:38:15.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:38:15.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:38:15.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.776093 -999.00  +17.00  15.44     37   +2.20 1 1 1 1 1     0    0 13.99 -40.13 ZNESW 15.4 15.4 159.2 27.9 17.3 -25.3 17.2 -24.7 17.0 -23.0 17.3 -23.9
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:38:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.776093
2025-12-03T20:38:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:38:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:38:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:38:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:38:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:38:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:37:52', tmtdew=16.94, humidity=31.74, cloud=0.0, wind=22.37, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:37:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:38:15.624 [DEBUG] [Thread-123243] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:38:15.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:38:15.727 [DEBUG] [Thread-123246] [transport.py] [_log()] starting thread (client mode): 0xa271f730
2025-12-03T20:38:15.727 [DEBUG] [Thread-123246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:38:15.742 [DEBUG] [Thread-123246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:38:15.742 [INFO] [Thread-123246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:15.750 [DEBUG] [Thread-123246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] client lang: <none>
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] server lang: <none>
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] kex follows: False
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] Compression: none
2025-12-03T20:38:15.751 [DEBUG] [Thread-123246] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:38:15.809 [DEBUG] [Thread-123246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:38:15.809 [DEBUG] [Thread-123246] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:38:15.810 [DEBUG] [Thread-123246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:38:15.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:38:15.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:38:15.865 [DEBUG] [Thread-123246] [transport.py] [_log()] userauth is OK
2025-12-03T20:38:15.865 [DEBUG] [Thread-123246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:38:15.865 [DEBUG] [Thread-123246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:38:15.865 [DEBUG] [Thread-123246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:38:15.865 [DEBUG] [Thread-123246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:38:15.884 [INFO] [Thread-123246] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:38:15.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:38:15.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:38:16.722 [DEBUG] [Thread-123246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:38:16.722 [DEBUG] [Thread-123246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:38:16.770 [DEBUG] [Thread-123246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:38:16.770 [DEBUG] [Thread-123246] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:38:16.778 [DEBUG] [Thread-123246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:38:16.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:38:16.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:38:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:38:16.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:38:16.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:38:16.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:38:16.813 [DEBUG] [Thread-123246] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:38:25.591 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:28.420 [DEBUG] [Thread-123248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:40.780 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:40.781 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:43.463 [DEBUG] [Thread-123249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:46.000 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:38:46.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:38:46.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:38:46.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:38:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 38, 24), 16.93, 31.75, 0.0, 23.27, 17.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:38:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:38:24
2025-12-03T20:38:47.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:38:47.791 [DEBUG] [Thread-123250] [transport.py] [_log()] starting thread (client mode): 0xa27ca590
2025-12-03T20:38:47.791 [DEBUG] [Thread-123250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:38:47.811 [DEBUG] [Thread-123250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:38:47.811 [INFO] [Thread-123250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:47.815 [DEBUG] [Thread-123250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] client lang: <none>
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] server lang: <none>
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] kex follows: False
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:38:47.816 [DEBUG] [Thread-123250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:38:47.817 [DEBUG] [Thread-123250] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:38:47.817 [DEBUG] [Thread-123250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:38:47.817 [DEBUG] [Thread-123250] [transport.py] [_log()] Compression: none
2025-12-03T20:38:47.817 [DEBUG] [Thread-123250] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:38:47.835 [DEBUG] [Thread-123250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:38:47.835 [DEBUG] [Thread-123250] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:38:47.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:38:47.836 [DEBUG] [Thread-123250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:38:47.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:38:47.838 [DEBUG] [Thread-123250] [transport.py] [_log()] userauth is OK
2025-12-03T20:38:47.838 [DEBUG] [Thread-123250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:38:47.838 [DEBUG] [Thread-123250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:38:47.839 [DEBUG] [Thread-123250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:38:47.839 [DEBUG] [Thread-123250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:38:47.874 [INFO] [Thread-123250] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:38:47.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:38:48.528 [DEBUG] [Thread-123250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:38:48.528 [DEBUG] [Thread-123250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:38:48.528 [DEBUG] [Thread-123250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:38:48.569 [DEBUG] [Thread-123250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:38:48.569 [DEBUG] [Thread-123250] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:38:48.572 [DEBUG] [Thread-123250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:38:48.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:38:48.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:38:48.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:38:48.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:38:48.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:38:48.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:38:48.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.776441 -999.00  +17.00  12.15     37   +2.20 1 1 1 1 1     0    0 13.61 -40.28 ZNESW 12.2 12.2 156.8 17.6 17.2 -25.2 17.2 -24.6 17.0 -23.1 17.2 -24.0
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:38:48.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.776441
2025-12-03T20:38:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:38:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:38:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:38:48.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:38:48.600 [DEBUG] [Thread-123250] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:38:48.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:38:48.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:38:24', tmtdew=16.93, humidity=31.75, cloud=0.0, wind=23.27, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:38:04.502', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:38:48.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:38:48.701 [DEBUG] [Thread-123253] [transport.py] [_log()] starting thread (client mode): 0xa517eec0
2025-12-03T20:38:48.701 [DEBUG] [Thread-123253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:38:48.716 [DEBUG] [Thread-123253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:38:48.716 [INFO] [Thread-123253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] client lang: <none>
2025-12-03T20:38:48.724 [DEBUG] [Thread-123253] [transport.py] [_log()] server lang: <none>
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] kex follows: False
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] Compression: none
2025-12-03T20:38:48.725 [DEBUG] [Thread-123253] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:38:48.785 [DEBUG] [Thread-123253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:38:48.785 [DEBUG] [Thread-123253] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:38:48.785 [DEBUG] [Thread-123253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:38:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:38:48.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:38:48.840 [DEBUG] [Thread-123253] [transport.py] [_log()] userauth is OK
2025-12-03T20:38:48.841 [DEBUG] [Thread-123253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:38:48.841 [DEBUG] [Thread-123253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:38:48.841 [DEBUG] [Thread-123253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:38:48.841 [DEBUG] [Thread-123253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:38:48.864 [INFO] [Thread-123253] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:38:48.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:38:48.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:38:49.680 [DEBUG] [Thread-123253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:38:49.680 [DEBUG] [Thread-123253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:38:49.728 [DEBUG] [Thread-123253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:38:49.728 [DEBUG] [Thread-123253] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:38:49.736 [DEBUG] [Thread-123253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:38:49.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:38:49.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:38:49.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:38:49.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:38:49.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:38:49.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:38:49.771 [DEBUG] [Thread-123253] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:38:58.504 [DEBUG] [Thread-123255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:06.393 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:07.629 [DEBUG] [Thread-123256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:13.552 [DEBUG] [Thread-123257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:19.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:39:19.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:39:19.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:39:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 38, 56), 16.92, 31.75, 0.0, 26.4, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:39:20.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:38:56
2025-12-03T20:39:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:39:20.716 [DEBUG] [Thread-123258] [transport.py] [_log()] starting thread (client mode): 0xa517efb0
2025-12-03T20:39:20.717 [DEBUG] [Thread-123258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:39:20.736 [DEBUG] [Thread-123258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:39:20.736 [INFO] [Thread-123258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] client lang: <none>
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] server lang: <none>
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] kex follows: False
2025-12-03T20:39:20.739 [DEBUG] [Thread-123258] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] Compression: none
2025-12-03T20:39:20.740 [DEBUG] [Thread-123258] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:39:20.758 [DEBUG] [Thread-123258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:39:20.759 [DEBUG] [Thread-123258] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:39:20.759 [DEBUG] [Thread-123258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:39:20.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:39:20.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:39:20.761 [DEBUG] [Thread-123258] [transport.py] [_log()] userauth is OK
2025-12-03T20:39:20.761 [DEBUG] [Thread-123258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:39:20.761 [DEBUG] [Thread-123258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:39:20.762 [DEBUG] [Thread-123258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:39:20.762 [DEBUG] [Thread-123258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:39:20.778 [INFO] [Thread-123258] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:39:20.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:39:21.396 [DEBUG] [Thread-123258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:39:21.396 [DEBUG] [Thread-123258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:39:21.397 [DEBUG] [Thread-123258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:39:21.438 [DEBUG] [Thread-123258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:39:21.438 [DEBUG] [Thread-123258] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:39:21.440 [DEBUG] [Thread-123258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:39:21.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:39:21.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:39:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:39:21.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:39:21.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:39:21.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:39:21.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.776788 -999.00  +17.00  13.97     37   +2.20 1 1 1 1 1     0    0 14.23 -38.08 ZNESW 14.0 14.0 156.7 22.1 17.2 -25.2 17.2 -24.7 17.0 -23.1 17.3 -24.0
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.776788
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:39:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:39:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:39:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:39:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:39:21.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:38:56', tmtdew=16.92, humidity=31.75, cloud=0.0, wind=26.4, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:38:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:39:21.459 [DEBUG] [Thread-123258] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:39:21.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:39:21.547 [DEBUG] [Thread-123261] [transport.py] [_log()] starting thread (client mode): 0xa5149930
2025-12-03T20:39:21.548 [DEBUG] [Thread-123261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:39:21.564 [DEBUG] [Thread-123261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:39:21.564 [INFO] [Thread-123261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:39:21.571 [DEBUG] [Thread-123261] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:39:21.572 [DEBUG] [Thread-123261] [transport.py] [_log()] client lang: <none>
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] server lang: <none>
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] kex follows: False
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] Compression: none
2025-12-03T20:39:21.573 [DEBUG] [Thread-123261] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:39:21.633 [DEBUG] [Thread-123261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:39:21.633 [DEBUG] [Thread-123261] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:39:21.634 [DEBUG] [Thread-123261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:39:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:39:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:39:21.689 [DEBUG] [Thread-123261] [transport.py] [_log()] userauth is OK
2025-12-03T20:39:21.689 [DEBUG] [Thread-123261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:39:21.689 [DEBUG] [Thread-123261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:39:21.689 [DEBUG] [Thread-123261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:39:21.690 [DEBUG] [Thread-123261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:39:21.709 [INFO] [Thread-123261] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:39:21.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:39:21.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:39:22.534 [DEBUG] [Thread-123261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:39:22.535 [DEBUG] [Thread-123261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:39:22.583 [DEBUG] [Thread-123261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:39:22.583 [DEBUG] [Thread-123261] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:39:22.591 [DEBUG] [Thread-123261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:39:22.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:39:22.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:39:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:39:22.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:39:22.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:39:22.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:39:22.622 [DEBUG] [Thread-123261] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:39:26.805 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:28.578 [DEBUG] [Thread-123263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:40.997 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:40.998 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:43.614 [DEBUG] [Thread-123264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:47.221 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:39:52.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:39:52.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:39:52.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:39:53.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 39, 28), 16.91, 31.79, 0.0, 26.73, 17.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:39:53.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:39:28
2025-12-03T20:39:53.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:39:53.658 [DEBUG] [Thread-123265] [transport.py] [_log()] starting thread (client mode): 0xa514bbe0
2025-12-03T20:39:53.658 [DEBUG] [Thread-123265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:39:53.678 [DEBUG] [Thread-123265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:39:53.678 [INFO] [Thread-123265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:39:53.681 [DEBUG] [Thread-123265] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:39:53.681 [DEBUG] [Thread-123265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] client lang: <none>
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] server lang: <none>
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] kex follows: False
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] Compression: none
2025-12-03T20:39:53.682 [DEBUG] [Thread-123265] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:39:53.697 [DEBUG] [Thread-123265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:39:53.698 [DEBUG] [Thread-123265] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:39:53.698 [DEBUG] [Thread-123265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:39:53.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:39:53.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:39:53.699 [DEBUG] [Thread-123265] [transport.py] [_log()] userauth is OK
2025-12-03T20:39:53.699 [DEBUG] [Thread-123265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:39:53.699 [DEBUG] [Thread-123265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:39:53.699 [DEBUG] [Thread-123265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:39:53.699 [DEBUG] [Thread-123265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:39:53.711 [INFO] [Thread-123265] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:39:53.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:39:54.351 [DEBUG] [Thread-123265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:39:54.351 [DEBUG] [Thread-123265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:39:54.351 [DEBUG] [Thread-123265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:39:54.392 [DEBUG] [Thread-123265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:39:54.392 [DEBUG] [Thread-123265] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:39:54.394 [DEBUG] [Thread-123265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:39:54.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:39:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:39:54.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:39:54.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:39:54.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:39:54.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:39:54.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.777482 -999.00  +17.00  15.56     37   +2.20 1 1 1 1 1     0    0 14.13 -35.20 ZNESW 15.6 15.6 156.6 24.6 17.3 -25.2 17.2 -24.6 17.0 -23.0 17.2 -23.9
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.777482
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:39:54.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:39:28', tmtdew=16.91, humidity=31.79, cloud=0.0, wind=26.73, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:39:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:39:54.413 [DEBUG] [Thread-123265] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:39:54.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:39:54.498 [DEBUG] [Thread-123268] [transport.py] [_log()] starting thread (client mode): 0xa5149720
2025-12-03T20:39:54.499 [DEBUG] [Thread-123268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:39:54.514 [DEBUG] [Thread-123268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:39:54.514 [INFO] [Thread-123268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] client lang: <none>
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] server lang: <none>
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] kex follows: False
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] Compression: none
2025-12-03T20:39:54.522 [DEBUG] [Thread-123268] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:39:54.578 [DEBUG] [Thread-123268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:39:54.578 [DEBUG] [Thread-123268] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:39:54.579 [DEBUG] [Thread-123268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:39:54.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:39:54.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:39:54.641 [DEBUG] [Thread-123268] [transport.py] [_log()] userauth is OK
2025-12-03T20:39:54.641 [DEBUG] [Thread-123268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:39:54.641 [DEBUG] [Thread-123268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:39:54.641 [DEBUG] [Thread-123268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:39:54.641 [DEBUG] [Thread-123268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:39:54.654 [INFO] [Thread-123268] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:39:54.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:39:54.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:39:55.476 [DEBUG] [Thread-123268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:39:55.476 [DEBUG] [Thread-123268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:39:55.524 [DEBUG] [Thread-123268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:39:55.525 [DEBUG] [Thread-123268] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:39:55.533 [DEBUG] [Thread-123268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:39:55.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:39:55.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:39:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:39:55.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:39:55.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:39:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:39:55.564 [DEBUG] [Thread-123268] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:39:58.645 [DEBUG] [Thread-123270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:07.605 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:07.690 [DEBUG] [Thread-123271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:13.697 [DEBUG] [Thread-123272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:25.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:40:25.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:40:25.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:40:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 39, 28), 16.86, 31.79, 0.0, 24.93, 17.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:40:26.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:39:28
2025-12-03T20:40:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:40:26.544 [DEBUG] [Thread-123273] [transport.py] [_log()] starting thread (client mode): 0xa51e5b10
2025-12-03T20:40:26.544 [DEBUG] [Thread-123273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:40:26.566 [DEBUG] [Thread-123273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:40:26.566 [INFO] [Thread-123273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:40:26.569 [DEBUG] [Thread-123273] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:40:26.569 [DEBUG] [Thread-123273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] client lang: <none>
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] server lang: <none>
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] kex follows: False
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:40:26.570 [DEBUG] [Thread-123273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:40:26.571 [DEBUG] [Thread-123273] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:40:26.571 [DEBUG] [Thread-123273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:40:26.571 [DEBUG] [Thread-123273] [transport.py] [_log()] Compression: none
2025-12-03T20:40:26.571 [DEBUG] [Thread-123273] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:40:26.586 [DEBUG] [Thread-123273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:40:26.587 [DEBUG] [Thread-123273] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:40:26.587 [DEBUG] [Thread-123273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:40:26.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:40:26.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:40:26.589 [DEBUG] [Thread-123273] [transport.py] [_log()] userauth is OK
2025-12-03T20:40:26.589 [DEBUG] [Thread-123273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:40:26.590 [DEBUG] [Thread-123273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:40:26.590 [DEBUG] [Thread-123273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:40:26.590 [DEBUG] [Thread-123273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:40:26.614 [INFO] [Thread-123273] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:40:26.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:40:27.221 [DEBUG] [Thread-123273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:40:27.222 [DEBUG] [Thread-123273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:40:27.222 [DEBUG] [Thread-123273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:40:27.263 [DEBUG] [Thread-123273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:40:27.263 [DEBUG] [Thread-123273] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:40:27.266 [DEBUG] [Thread-123273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:40:27.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:40:27.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:40:27.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:40:27.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:40:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:40:27.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:40:27.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.777829 -999.00  +17.00  16.81     37   +2.20 1 1 1 1 1     0    0 13.82 -33.47 ZNESW 16.8 16.8 163.6 24.1 17.3 -25.3 17.2 -24.6 17.0 -23.0 17.3 -24.0
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:40:27.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.777829
2025-12-03T20:40:27.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:40:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:40:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:40:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:40:27.287 [DEBUG] [Thread-123273] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:40:27.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:40:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:39:28', tmtdew=16.86, humidity=31.79, cloud=0.0, wind=24.93, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:40:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:40:27.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:40:27.389 [DEBUG] [Thread-123276] [transport.py] [_log()] starting thread (client mode): 0xa51e7b50
2025-12-03T20:40:27.389 [DEBUG] [Thread-123276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:40:27.406 [DEBUG] [Thread-123276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:40:27.406 [INFO] [Thread-123276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:27.414 [DEBUG] [Thread-123276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] client lang: <none>
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] server lang: <none>
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] kex follows: False
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] Compression: none
2025-12-03T20:40:27.415 [DEBUG] [Thread-123276] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:40:27.472 [DEBUG] [Thread-123276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:40:27.472 [DEBUG] [Thread-123276] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:40:27.473 [DEBUG] [Thread-123276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:40:27.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:40:27.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:40:27.528 [DEBUG] [Thread-123276] [transport.py] [_log()] userauth is OK
2025-12-03T20:40:27.528 [DEBUG] [Thread-123276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:40:27.528 [DEBUG] [Thread-123276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:40:27.528 [DEBUG] [Thread-123276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:40:27.528 [DEBUG] [Thread-123276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:40:27.548 [INFO] [Thread-123276] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:40:27.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:40:27.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:40:27.991 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:28.478 [DEBUG] [Thread-123276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:40:28.478 [DEBUG] [Thread-123276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:40:28.526 [DEBUG] [Thread-123276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:40:28.526 [DEBUG] [Thread-123276] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:40:28.535 [DEBUG] [Thread-123276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:40:28.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:40:28.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:40:28.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:40:28.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:40:28.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:40:28.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:40:28.575 [DEBUG] [Thread-123276] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:40:28.730 [DEBUG] [Thread-123278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:41.199 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:41.200 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:43.769 [DEBUG] [Thread-123279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:48.412 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:58.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:40:58.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:40:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:40:58.796 [DEBUG] [Thread-123280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:40:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 40, 32), 16.88, 31.75, 0.0, 24.03, 17.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:40:59.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:40:32
2025-12-03T20:40:59.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:40:59.538 [DEBUG] [Thread-123281] [transport.py] [_log()] starting thread (client mode): 0xa2760400
2025-12-03T20:40:59.538 [DEBUG] [Thread-123281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:40:59.559 [DEBUG] [Thread-123281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:40:59.559 [INFO] [Thread-123281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:40:59.562 [DEBUG] [Thread-123281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] client lang: <none>
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] server lang: <none>
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] kex follows: False
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:40:59.563 [DEBUG] [Thread-123281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:40:59.564 [DEBUG] [Thread-123281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:40:59.564 [DEBUG] [Thread-123281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:40:59.564 [DEBUG] [Thread-123281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:40:59.564 [DEBUG] [Thread-123281] [transport.py] [_log()] Compression: none
2025-12-03T20:40:59.564 [DEBUG] [Thread-123281] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:40:59.579 [DEBUG] [Thread-123281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:40:59.580 [DEBUG] [Thread-123281] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:40:59.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:40:59.581 [DEBUG] [Thread-123281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:40:59.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:40:59.583 [DEBUG] [Thread-123281] [transport.py] [_log()] userauth is OK
2025-12-03T20:40:59.584 [DEBUG] [Thread-123281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:40:59.584 [DEBUG] [Thread-123281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:40:59.584 [DEBUG] [Thread-123281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:40:59.584 [DEBUG] [Thread-123281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:40:59.608 [INFO] [Thread-123281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:40:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:41:00.235 [DEBUG] [Thread-123281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:41:00.235 [DEBUG] [Thread-123281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:41:00.236 [DEBUG] [Thread-123281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:41:00.277 [DEBUG] [Thread-123281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:41:00.277 [DEBUG] [Thread-123281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:41:00.280 [DEBUG] [Thread-123281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:41:00.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:41:00.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:41:00.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:41:00.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:41:00.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:41:00.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:41:00.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:41:00.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:41:00.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:41:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.778177 -999.00  +17.00  15.98     37   +2.20 1 1 1 1 1     0    0 14.07 -30.93 ZNESW 16.0 16.0 157.6 22.9 17.3 -25.2 17.2 -24.7 17.0 -23.1 17.2 -23.9
2025-12-03T20:41:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:41:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:41:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.778177
2025-12-03T20:41:00.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:41:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:41:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:41:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:41:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:41:00.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:40:32', tmtdew=16.88, humidity=31.75, cloud=0.0, wind=24.03, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:40:34.493', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999998153, 0.047250000000000014, -0.02474999999999916, -0.03450000000000131, 0.048500000000000654, 0.09074999999999989, 0.01699999999999946, -0.09825000000000017, 0.030999999999998806, -0.0010000000000012221, 0.03575000000000017, -0.02149999999999963, 0.06350000000000122, 0.032249999999999446, 0.049999999999998934, -0.07700000000000173, 0.0782500000000006, 0.04800000000000004, 0.08349999999999902, -0.024750000000000938, 0.1059999999999981, 0.05074999999999896, 0.0002500000000011937, -0.15225000000000044, -0.023000000000001464, 0.06649999999999956, 0.06574999999999953, 0.0840000000000014, 0.15850000000000009, -0.06199999999999939, 0.026000000000001577, -0.23199999999999932, -0.012250000000001648], zp_timestamp='2025-12-03T18:37:00')
2025-12-03T20:41:00.305 [DEBUG] [Thread-123281] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:41:00.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:41:00.401 [DEBUG] [Thread-123284] [transport.py] [_log()] starting thread (client mode): 0xa51d19c0
2025-12-03T20:41:00.401 [DEBUG] [Thread-123284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:41:00.416 [DEBUG] [Thread-123284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:41:00.416 [INFO] [Thread-123284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:41:00.423 [DEBUG] [Thread-123284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] client lang: <none>
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] server lang: <none>
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] kex follows: False
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] Compression: none
2025-12-03T20:41:00.424 [DEBUG] [Thread-123284] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:41:00.488 [DEBUG] [Thread-123284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:41:00.488 [DEBUG] [Thread-123284] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:41:00.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:41:00.489 [DEBUG] [Thread-123284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:41:00.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:41:00.545 [DEBUG] [Thread-123284] [transport.py] [_log()] userauth is OK
2025-12-03T20:41:00.545 [DEBUG] [Thread-123284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:41:00.545 [DEBUG] [Thread-123284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:41:00.546 [DEBUG] [Thread-123284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:41:00.546 [DEBUG] [Thread-123284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:41:00.565 [INFO] [Thread-123284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:41:00.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:41:00.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:41:01.375 [DEBUG] [Thread-123284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:41:01.376 [DEBUG] [Thread-123284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:41:01.424 [DEBUG] [Thread-123284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:41:01.424 [DEBUG] [Thread-123284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:41:01.433 [DEBUG] [Thread-123284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:41:01.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:41:01.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:41:01.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:41:01.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:41:01.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:41:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:41:01.476 [DEBUG] [Thread-123284] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:41:07.749 [DEBUG] [Thread-123286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:08.830 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:13.817 [DEBUG] [Thread-123287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:28.856 [DEBUG] [Thread-123288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:29.293 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:31.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:41:31.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:41:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:41:32.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 41, 4), 16.86, 31.8, 0.0, 22.99, 17.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:41:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:41:04
2025-12-03T20:41:32.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:41:32.425 [DEBUG] [Thread-123289] [transport.py] [_log()] starting thread (client mode): 0xa2760610
2025-12-03T20:41:32.426 [DEBUG] [Thread-123289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:41:32.444 [DEBUG] [Thread-123289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:41:32.444 [INFO] [Thread-123289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] client lang: <none>
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] server lang: <none>
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] kex follows: False
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] Compression: none
2025-12-03T20:41:32.448 [DEBUG] [Thread-123289] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:41:32.465 [DEBUG] [Thread-123289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:41:32.466 [DEBUG] [Thread-123289] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:41:32.466 [DEBUG] [Thread-123289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:41:32.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:41:32.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:41:32.468 [DEBUG] [Thread-123289] [transport.py] [_log()] userauth is OK
2025-12-03T20:41:32.468 [DEBUG] [Thread-123289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:41:32.468 [DEBUG] [Thread-123289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:41:32.468 [DEBUG] [Thread-123289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:41:32.468 [DEBUG] [Thread-123289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:41:32.490 [INFO] [Thread-123289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:41:32.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:41:33.131 [DEBUG] [Thread-123289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:41:33.131 [DEBUG] [Thread-123289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:41:33.132 [DEBUG] [Thread-123289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:41:33.173 [DEBUG] [Thread-123289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:41:33.173 [DEBUG] [Thread-123289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:41:33.177 [DEBUG] [Thread-123289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:41:33.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:41:33.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:41:33.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:41:33.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:41:33.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:41:33.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:41:33.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:41:33.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:41:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:41:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.778524 -999.00  +17.00  15.98     37   +2.20 1 1 1 1 1     0    0 14.01 -30.09 ZNESW 16.0 16.0 149.0 26.6 17.3 -25.2 17.2 -24.7 17.0 -23.0 17.3 -23.9
2025-12-03T20:41:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:41:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:41:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.778524
2025-12-03T20:41:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:41:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:41:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:41:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:41:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:41:33.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:41:04', tmtdew=16.86, humidity=31.8, cloud=0.0, wind=22.99, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:41:04.474', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:40:00')
2025-12-03T20:41:33.202 [DEBUG] [Thread-123289] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:41:33.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:41:33.301 [DEBUG] [Thread-123292] [transport.py] [_log()] starting thread (client mode): 0xa2779ff0
2025-12-03T20:41:33.301 [DEBUG] [Thread-123292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:41:33.315 [DEBUG] [Thread-123292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:41:33.316 [INFO] [Thread-123292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:41:33.323 [DEBUG] [Thread-123292] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:41:33.323 [DEBUG] [Thread-123292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:41:33.323 [DEBUG] [Thread-123292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] client lang: <none>
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] server lang: <none>
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] kex follows: False
2025-12-03T20:41:33.324 [DEBUG] [Thread-123292] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] Compression: none
2025-12-03T20:41:33.325 [DEBUG] [Thread-123292] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:41:33.385 [DEBUG] [Thread-123292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:41:33.385 [DEBUG] [Thread-123292] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:41:33.386 [DEBUG] [Thread-123292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:41:33.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:41:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:41:33.443 [DEBUG] [Thread-123292] [transport.py] [_log()] userauth is OK
2025-12-03T20:41:33.444 [DEBUG] [Thread-123292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:41:33.444 [DEBUG] [Thread-123292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:41:33.444 [DEBUG] [Thread-123292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:41:33.444 [DEBUG] [Thread-123292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:41:33.463 [INFO] [Thread-123292] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:41:33.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:41:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:41:34.282 [DEBUG] [Thread-123292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:41:34.282 [DEBUG] [Thread-123292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:41:34.331 [DEBUG] [Thread-123292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:41:34.332 [DEBUG] [Thread-123292] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:41:34.340 [DEBUG] [Thread-123292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:41:34.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:41:34.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:41:34.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:41:34.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:41:34.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:41:34.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:41:34.375 [DEBUG] [Thread-123292] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:41:41.410 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:41.411 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:43.886 [DEBUG] [Thread-123294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:49.710 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:41:58.940 [DEBUG] [Thread-123295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:04.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:42:04.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:42:04.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:42:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 41, 36), 16.8, 31.79, 0.0, 22.34, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:42:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:41:36
2025-12-03T20:42:05.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:42:05.342 [DEBUG] [Thread-123296] [transport.py] [_log()] starting thread (client mode): 0xa517e6b0
2025-12-03T20:42:05.342 [DEBUG] [Thread-123296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:42:05.358 [DEBUG] [Thread-123296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:42:05.359 [INFO] [Thread-123296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:42:05.361 [DEBUG] [Thread-123296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:42:05.361 [DEBUG] [Thread-123296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] client lang: <none>
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] server lang: <none>
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] kex follows: False
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] Compression: none
2025-12-03T20:42:05.362 [DEBUG] [Thread-123296] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:42:05.377 [DEBUG] [Thread-123296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:42:05.378 [DEBUG] [Thread-123296] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:42:05.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:42:05.379 [DEBUG] [Thread-123296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:42:05.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:42:05.380 [DEBUG] [Thread-123296] [transport.py] [_log()] userauth is OK
2025-12-03T20:42:05.381 [DEBUG] [Thread-123296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:42:05.381 [DEBUG] [Thread-123296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:42:05.381 [DEBUG] [Thread-123296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:42:05.381 [DEBUG] [Thread-123296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:42:05.405 [INFO] [Thread-123296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:42:05.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:42:06.000 [DEBUG] [Thread-123296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:42:06.000 [DEBUG] [Thread-123296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:42:06.000 [DEBUG] [Thread-123296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:42:06.041 [DEBUG] [Thread-123296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:42:06.041 [DEBUG] [Thread-123296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:42:06.044 [DEBUG] [Thread-123296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:42:06.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:42:06.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:42:06.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:42:06.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:42:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:42:06.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:42:06.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.778871 -999.00  +17.00  14.90     37   +2.20 1 1 1 1 1     0    0 14.02 -30.67 ZNESW 14.9 14.9 164.6 24.1 17.2 -25.2 17.2 -24.7 16.9 -23.1 17.2 -24.0
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:42:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.778871
2025-12-03T20:42:06.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:42:06.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:42:06.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:42:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:42:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:42:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:41:36', tmtdew=16.8, humidity=31.79, cloud=0.0, wind=22.34, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:41:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:40:00')
2025-12-03T20:42:06.062 [DEBUG] [Thread-123296] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:42:06.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:42:06.156 [DEBUG] [Thread-123299] [transport.py] [_log()] starting thread (client mode): 0xa514b850
2025-12-03T20:42:06.156 [DEBUG] [Thread-123299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:42:06.171 [DEBUG] [Thread-123299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:42:06.171 [INFO] [Thread-123299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:42:06.178 [DEBUG] [Thread-123299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:42:06.178 [DEBUG] [Thread-123299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:42:06.178 [DEBUG] [Thread-123299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:42:06.178 [DEBUG] [Thread-123299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] client lang: <none>
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] server lang: <none>
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] kex follows: False
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:42:06.179 [DEBUG] [Thread-123299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:42:06.180 [DEBUG] [Thread-123299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:42:06.180 [DEBUG] [Thread-123299] [transport.py] [_log()] Compression: none
2025-12-03T20:42:06.180 [DEBUG] [Thread-123299] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:42:06.236 [DEBUG] [Thread-123299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:42:06.236 [DEBUG] [Thread-123299] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:42:06.236 [DEBUG] [Thread-123299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:42:06.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:42:06.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:42:06.291 [DEBUG] [Thread-123299] [transport.py] [_log()] userauth is OK
2025-12-03T20:42:06.292 [DEBUG] [Thread-123299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:42:06.292 [DEBUG] [Thread-123299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:42:06.292 [DEBUG] [Thread-123299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:42:06.292 [DEBUG] [Thread-123299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:42:06.311 [INFO] [Thread-123299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:42:06.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:42:06.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:42:07.177 [DEBUG] [Thread-123299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:42:07.177 [DEBUG] [Thread-123299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:42:07.224 [DEBUG] [Thread-123299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:42:07.225 [DEBUG] [Thread-123299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:42:07.233 [DEBUG] [Thread-123299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:42:07.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:42:07.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:42:07.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:42:07.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:42:07.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:42:07.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:42:07.272 [DEBUG] [Thread-123299] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:42:07.809 [DEBUG] [Thread-123301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:10.170 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:13.973 [DEBUG] [Thread-123302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:29.012 [DEBUG] [Thread-123303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:30.666 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:37.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:42:37.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:42:37.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:42:37.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 42, 8), 16.79, 31.82, 0.0, 22.9, 16.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:42:37.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:42:08
2025-12-03T20:42:38.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:42:38.228 [DEBUG] [Thread-123304] [transport.py] [_log()] starting thread (client mode): 0xa51d19c0
2025-12-03T20:42:38.228 [DEBUG] [Thread-123304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:42:38.242 [DEBUG] [Thread-123304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:42:38.242 [INFO] [Thread-123304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:42:38.245 [DEBUG] [Thread-123304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] client lang: <none>
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] server lang: <none>
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] kex follows: False
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] Compression: none
2025-12-03T20:42:38.246 [DEBUG] [Thread-123304] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:42:38.255 [DEBUG] [Thread-123304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:42:38.255 [DEBUG] [Thread-123304] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:42:38.256 [DEBUG] [Thread-123304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:42:38.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:42:38.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:42:38.257 [DEBUG] [Thread-123304] [transport.py] [_log()] userauth is OK
2025-12-03T20:42:38.257 [DEBUG] [Thread-123304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:42:38.257 [DEBUG] [Thread-123304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:42:38.257 [DEBUG] [Thread-123304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:42:38.257 [DEBUG] [Thread-123304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:42:38.280 [INFO] [Thread-123304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:42:38.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:42:38.877 [DEBUG] [Thread-123304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:42:38.878 [DEBUG] [Thread-123304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:42:38.878 [DEBUG] [Thread-123304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:42:38.919 [DEBUG] [Thread-123304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:42:38.919 [DEBUG] [Thread-123304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:42:38.921 [DEBUG] [Thread-123304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:42:38.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:42:38.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:42:38.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:42:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:42:38.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:42:38.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:42:38.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:42:38.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:42:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:42:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.779218 -999.00  +17.00  17.01     37   +2.20 1 1 1 1 1     0    0 14.20 -31.41 ZNESW 17.0 17.0 141.1 24.2 17.3 -25.3 17.2 -24.7 16.9 -23.1 17.2 -24.0
2025-12-03T20:42:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:42:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:42:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.779218
2025-12-03T20:42:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:42:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:42:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:42:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:42:38.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:42:38.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:42:08', tmtdew=16.79, humidity=31.82, cloud=0.0, wind=22.9, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:42:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:40:00')
2025-12-03T20:42:38.941 [DEBUG] [Thread-123304] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:42:39.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:42:39.043 [DEBUG] [Thread-123307] [transport.py] [_log()] starting thread (client mode): 0xa2763d90
2025-12-03T20:42:39.044 [DEBUG] [Thread-123307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:42:39.058 [DEBUG] [Thread-123307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:42:39.059 [INFO] [Thread-123307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:42:39.066 [DEBUG] [Thread-123307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:42:39.066 [DEBUG] [Thread-123307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] client lang: <none>
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] server lang: <none>
2025-12-03T20:42:39.067 [DEBUG] [Thread-123307] [transport.py] [_log()] kex follows: False
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] Compression: none
2025-12-03T20:42:39.068 [DEBUG] [Thread-123307] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:42:39.123 [DEBUG] [Thread-123307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:42:39.124 [DEBUG] [Thread-123307] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:42:39.124 [DEBUG] [Thread-123307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:42:39.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:42:39.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:42:39.179 [DEBUG] [Thread-123307] [transport.py] [_log()] userauth is OK
2025-12-03T20:42:39.179 [DEBUG] [Thread-123307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:42:39.180 [DEBUG] [Thread-123307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:42:39.180 [DEBUG] [Thread-123307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:42:39.180 [DEBUG] [Thread-123307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:42:39.203 [INFO] [Thread-123307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:42:39.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:42:39.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:42:40.028 [DEBUG] [Thread-123307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:42:40.028 [DEBUG] [Thread-123307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:42:40.076 [DEBUG] [Thread-123307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:42:40.076 [DEBUG] [Thread-123307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:42:40.085 [DEBUG] [Thread-123307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:42:40.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:42:40.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:42:40.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:42:40.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:42:40.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:42:40.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:42:40.119 [DEBUG] [Thread-123307] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:42:41.608 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:41.609 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:44.039 [DEBUG] [Thread-123309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:51.082 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:42:59.087 [DEBUG] [Thread-123310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:07.866 [DEBUG] [Thread-123311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:10.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:43:10.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:43:10.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:43:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 42, 40), 16.81, 31.79, 0.0, 24.28, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:43:10.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:42:40
2025-12-03T20:43:10.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:43:11.124 [DEBUG] [Thread-123312] [transport.py] [_log()] starting thread (client mode): 0xa272bfa0
2025-12-03T20:43:11.124 [DEBUG] [Thread-123312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:43:11.143 [DEBUG] [Thread-123312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:43:11.143 [INFO] [Thread-123312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:43:11.146 [DEBUG] [Thread-123312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:43:11.146 [DEBUG] [Thread-123312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:43:11.146 [DEBUG] [Thread-123312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:43:11.146 [DEBUG] [Thread-123312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:11.146 [DEBUG] [Thread-123312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] client lang: <none>
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] server lang: <none>
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] kex follows: False
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] Compression: none
2025-12-03T20:43:11.147 [DEBUG] [Thread-123312] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:43:11.161 [DEBUG] [Thread-123312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:43:11.162 [DEBUG] [Thread-123312] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:43:11.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:43:11.162 [DEBUG] [Thread-123312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:43:11.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:43:11.163 [DEBUG] [Thread-123312] [transport.py] [_log()] userauth is OK
2025-12-03T20:43:11.163 [DEBUG] [Thread-123312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:43:11.163 [DEBUG] [Thread-123312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:43:11.163 [DEBUG] [Thread-123312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:43:11.163 [DEBUG] [Thread-123312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:43:11.172 [INFO] [Thread-123312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:43:11.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:43:11.620 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:11.767 [DEBUG] [Thread-123312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:43:11.767 [DEBUG] [Thread-123312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:43:11.767 [DEBUG] [Thread-123312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:43:11.808 [DEBUG] [Thread-123312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:43:11.808 [DEBUG] [Thread-123312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:43:11.811 [DEBUG] [Thread-123312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:43:11.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:43:11.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:43:11.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:43:11.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:43:11.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:43:11.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:43:11.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:43:11.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.779913 -999.00  +17.00  18.32     37   +2.20 1 1 1 1 1     0    0 14.06 -25.44 ZNESW 18.3 18.3 159.6 26.7 17.2 -25.1 17.1 -24.6 16.9 -23.1 17.2 -23.7
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.779913
2025-12-03T20:43:11.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:43:11.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:43:11.828 [DEBUG] [Thread-123312] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:43:11.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:43:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:43:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:43:11.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:42:40', tmtdew=16.81, humidity=31.79, cloud=0.0, wind=24.28, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T01:17:30', seeing=1.23, atlas_timestamp='2025-12-03T18:43:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:40:00')
2025-12-03T20:43:11.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:43:11.922 [DEBUG] [Thread-123315] [transport.py] [_log()] starting thread (client mode): 0xa517e6b0
2025-12-03T20:43:11.922 [DEBUG] [Thread-123315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:43:11.937 [DEBUG] [Thread-123315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:43:11.937 [INFO] [Thread-123315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] client lang: <none>
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] server lang: <none>
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] kex follows: False
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:43:11.945 [DEBUG] [Thread-123315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:43:11.946 [DEBUG] [Thread-123315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:43:11.946 [DEBUG] [Thread-123315] [transport.py] [_log()] Compression: none
2025-12-03T20:43:11.946 [DEBUG] [Thread-123315] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:43:12.006 [DEBUG] [Thread-123315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:43:12.007 [DEBUG] [Thread-123315] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:43:12.016 [DEBUG] [Thread-123315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:43:12.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:43:12.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:43:12.063 [DEBUG] [Thread-123315] [transport.py] [_log()] userauth is OK
2025-12-03T20:43:12.064 [DEBUG] [Thread-123315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:43:12.064 [DEBUG] [Thread-123315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:43:12.064 [DEBUG] [Thread-123315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:43:12.064 [DEBUG] [Thread-123315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:43:12.084 [INFO] [Thread-123315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:43:12.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:43:12.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:43:12.899 [DEBUG] [Thread-123315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:43:12.899 [DEBUG] [Thread-123315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:43:12.947 [DEBUG] [Thread-123315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:43:12.947 [DEBUG] [Thread-123315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:43:12.956 [DEBUG] [Thread-123315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:43:12.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:43:12.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:43:12.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:43:12.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:43:12.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:43:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:43:12.987 [DEBUG] [Thread-123315] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:43:14.120 [DEBUG] [Thread-123317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:29.158 [DEBUG] [Thread-123318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:32.040 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:41.808 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:41.809 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:43.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:43:43.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:43:43.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:43:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 43, 12), 16.84, 31.72, 0.0, 22.57, 16.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:43:43.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:43:12
2025-12-03T20:43:43.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:43:43.971 [DEBUG] [Thread-123319] [transport.py] [_log()] starting thread (client mode): 0xa2779ff0
2025-12-03T20:43:43.971 [DEBUG] [Thread-123319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:43:43.991 [DEBUG] [Thread-123319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:43:43.991 [INFO] [Thread-123319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] client lang: <none>
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] server lang: <none>
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] kex follows: False
2025-12-03T20:43:43.994 [DEBUG] [Thread-123319] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] Compression: none
2025-12-03T20:43:43.995 [DEBUG] [Thread-123319] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:43:44.012 [DEBUG] [Thread-123319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:43:44.012 [DEBUG] [Thread-123319] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:43:44.013 [DEBUG] [Thread-123319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:43:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:43:44.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:43:44.014 [DEBUG] [Thread-123319] [transport.py] [_log()] userauth is OK
2025-12-03T20:43:44.014 [DEBUG] [Thread-123319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:43:44.015 [DEBUG] [Thread-123319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:43:44.015 [DEBUG] [Thread-123319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:43:44.015 [DEBUG] [Thread-123319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:43:44.033 [INFO] [Thread-123319] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:43:44.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:43:44.187 [DEBUG] [Thread-123321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:44.681 [DEBUG] [Thread-123319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:43:44.682 [DEBUG] [Thread-123319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:43:44.682 [DEBUG] [Thread-123319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:43:44.723 [DEBUG] [Thread-123319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:43:44.723 [DEBUG] [Thread-123319] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:43:44.725 [DEBUG] [Thread-123319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:43:44.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:43:44.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:43:44.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:43:44.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:43:44.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:43:44.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:43:44.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.779913 -999.00  +17.00  18.32     37   +2.20 1 1 1 1 1     0    0 14.06 -25.44 ZNESW 18.3 18.3 159.6 26.7 17.2 -25.1 17.1 -24.6 16.9 -23.1 17.2 -23.7
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.779913
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:43:12', tmtdew=16.84, humidity=31.72, cloud=0.0, wind=22.57, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:43:12', seeing=1.09, atlas_timestamp='2025-12-03T18:43:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:40:00')
2025-12-03T20:43:44.744 [DEBUG] [Thread-123319] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:43:44.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:43:44.829 [DEBUG] [Thread-123323] [transport.py] [_log()] starting thread (client mode): 0xa27282e0
2025-12-03T20:43:44.830 [DEBUG] [Thread-123323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:43:44.845 [DEBUG] [Thread-123323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:43:44.845 [INFO] [Thread-123323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] client lang: <none>
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] server lang: <none>
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] kex follows: False
2025-12-03T20:43:44.852 [DEBUG] [Thread-123323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] Compression: none
2025-12-03T20:43:44.853 [DEBUG] [Thread-123323] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:43:44.913 [DEBUG] [Thread-123323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:43:44.914 [DEBUG] [Thread-123323] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:43:44.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:43:44.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:43:44.914 [DEBUG] [Thread-123323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:43:44.971 [DEBUG] [Thread-123323] [transport.py] [_log()] userauth is OK
2025-12-03T20:43:44.971 [DEBUG] [Thread-123323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:43:44.971 [DEBUG] [Thread-123323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:43:44.971 [DEBUG] [Thread-123323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:43:44.971 [DEBUG] [Thread-123323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:43:44.988 [INFO] [Thread-123323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:43:44.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:43:44.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:43:45.817 [DEBUG] [Thread-123323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:43:45.817 [DEBUG] [Thread-123323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:43:45.865 [DEBUG] [Thread-123323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:43:45.865 [DEBUG] [Thread-123323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:43:45.873 [DEBUG] [Thread-123323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:43:45.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:43:45.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:43:45.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:43:45.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:43:45.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:43:45.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:43:45.904 [DEBUG] [Thread-123323] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:43:52.463 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:43:59.213 [DEBUG] [Thread-123325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:07.923 [DEBUG] [Thread-123326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:12.917 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:14.326 [DEBUG] [Thread-123327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:15.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:44:15.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:44:15.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:44:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 43, 44), 16.82, 31.77, 0.0, 26.61, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:44:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:43:44
2025-12-03T20:44:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:44:16.863 [DEBUG] [Thread-123328] [transport.py] [_log()] starting thread (client mode): 0xa51d35b0
2025-12-03T20:44:16.863 [DEBUG] [Thread-123328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:44:16.883 [DEBUG] [Thread-123328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:44:16.883 [INFO] [Thread-123328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] client lang: <none>
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] server lang: <none>
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] kex follows: False
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] Compression: none
2025-12-03T20:44:16.885 [DEBUG] [Thread-123328] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:44:16.892 [DEBUG] [Thread-123328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:44:16.892 [DEBUG] [Thread-123328] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:44:16.892 [DEBUG] [Thread-123328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:44:16.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:44:16.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:44:16.893 [DEBUG] [Thread-123328] [transport.py] [_log()] userauth is OK
2025-12-03T20:44:16.893 [DEBUG] [Thread-123328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:44:16.893 [DEBUG] [Thread-123328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:44:16.893 [DEBUG] [Thread-123328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:44:16.893 [DEBUG] [Thread-123328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:44:16.902 [INFO] [Thread-123328] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:44:16.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:44:17.675 [DEBUG] [Thread-123328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:44:17.675 [DEBUG] [Thread-123328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:44:17.675 [DEBUG] [Thread-123328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:44:17.715 [DEBUG] [Thread-123328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:44:17.715 [DEBUG] [Thread-123328] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:44:17.717 [DEBUG] [Thread-123328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:44:17.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:44:17.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:44:17.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:44:17.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:44:17.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:44:17.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:44:17.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.780260 -999.00  +17.00  19.62     37   +2.20 1 1 1 1 1     0    0 14.27 -24.39 ZNESW 19.6 19.6 156.2 28.3 17.3 -25.2 17.2 -24.7 16.9 -23.1 17.2 -24.0
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.780260
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:44:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:43:44', tmtdew=16.82, humidity=31.77, cloud=0.0, wind=26.61, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:43:44', seeing=1.05, atlas_timestamp='2025-12-03T18:43:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:44:17.735 [DEBUG] [Thread-123328] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:44:17.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:44:17.821 [DEBUG] [Thread-123331] [transport.py] [_log()] starting thread (client mode): 0xa2752410
2025-12-03T20:44:17.821 [DEBUG] [Thread-123331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:44:17.836 [DEBUG] [Thread-123331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:44:17.837 [INFO] [Thread-123331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] client lang: <none>
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] server lang: <none>
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] kex follows: False
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:44:17.844 [DEBUG] [Thread-123331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:44:17.845 [DEBUG] [Thread-123331] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:44:17.845 [DEBUG] [Thread-123331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:44:17.845 [DEBUG] [Thread-123331] [transport.py] [_log()] Compression: none
2025-12-03T20:44:17.845 [DEBUG] [Thread-123331] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:44:17.902 [DEBUG] [Thread-123331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:44:17.902 [DEBUG] [Thread-123331] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:44:17.902 [DEBUG] [Thread-123331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:44:17.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:44:17.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:44:17.963 [DEBUG] [Thread-123331] [transport.py] [_log()] userauth is OK
2025-12-03T20:44:17.963 [DEBUG] [Thread-123331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:44:17.963 [DEBUG] [Thread-123331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:44:17.963 [DEBUG] [Thread-123331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:44:17.963 [DEBUG] [Thread-123331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:44:17.977 [INFO] [Thread-123331] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:44:17.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:44:17.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:44:18.802 [DEBUG] [Thread-123331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:44:18.802 [DEBUG] [Thread-123331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:44:18.849 [DEBUG] [Thread-123331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:44:18.849 [DEBUG] [Thread-123331] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:44:18.858 [DEBUG] [Thread-123331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:44:18.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:44:18.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:44:18.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:44:18.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:44:18.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:44:18.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:44:18.894 [DEBUG] [Thread-123331] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:44:29.355 [DEBUG] [Thread-123333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:33.357 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:42.009 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:42.010 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:44.392 [DEBUG] [Thread-123334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:48.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:44:48.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:44:48.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:44:49.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 44, 16), 16.82, 31.75, 0.0, 27.7, 16.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:44:49.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:44:16
2025-12-03T20:44:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:44:50.122 [DEBUG] [Thread-123335] [transport.py] [_log()] starting thread (client mode): 0xa51d3010
2025-12-03T20:44:50.122 [DEBUG] [Thread-123335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:44:50.136 [DEBUG] [Thread-123335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:44:50.136 [INFO] [Thread-123335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] client lang: <none>
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] server lang: <none>
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] kex follows: False
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] Compression: none
2025-12-03T20:44:50.140 [DEBUG] [Thread-123335] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:44:50.156 [DEBUG] [Thread-123335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:44:50.156 [DEBUG] [Thread-123335] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:44:50.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:44:50.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] userauth is OK
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:44:50.157 [DEBUG] [Thread-123335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:44:50.166 [INFO] [Thread-123335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:44:50.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:44:50.834 [DEBUG] [Thread-123335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:44:50.834 [DEBUG] [Thread-123335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:44:50.834 [DEBUG] [Thread-123335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:44:50.875 [DEBUG] [Thread-123335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:44:50.875 [DEBUG] [Thread-123335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:44:50.878 [DEBUG] [Thread-123335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:44:50.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:44:50.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:44:50.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:44:50.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:44:50.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:44:50.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:44:50.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.780607 -999.00  +17.00  19.20     37   +2.20 1 1 1 1 1     0    0 14.40 -24.94 ZNESW 19.2 19.2 156.0 24.2 17.3 -25.2 17.1 -24.7 16.9 -23.1 17.2 -23.9
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.780607
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:44:50.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:44:16', tmtdew=16.82, humidity=31.75, cloud=0.0, wind=27.7, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:44:48', seeing=1.13, atlas_timestamp='2025-12-03T18:44:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:44:50.897 [DEBUG] [Thread-123335] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:44:50.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:44:50.983 [DEBUG] [Thread-123338] [transport.py] [_log()] starting thread (client mode): 0xa51d3310
2025-12-03T20:44:50.983 [DEBUG] [Thread-123338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:44:51.000 [DEBUG] [Thread-123338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:44:51.000 [INFO] [Thread-123338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:51.007 [DEBUG] [Thread-123338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] client lang: <none>
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] server lang: <none>
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] kex follows: False
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] Compression: none
2025-12-03T20:44:51.008 [DEBUG] [Thread-123338] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:44:51.065 [DEBUG] [Thread-123338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:44:51.065 [DEBUG] [Thread-123338] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:44:51.066 [DEBUG] [Thread-123338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:44:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:44:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:44:51.122 [DEBUG] [Thread-123338] [transport.py] [_log()] userauth is OK
2025-12-03T20:44:51.122 [DEBUG] [Thread-123338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:44:51.122 [DEBUG] [Thread-123338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:44:51.122 [DEBUG] [Thread-123338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:44:51.122 [DEBUG] [Thread-123338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:44:51.136 [INFO] [Thread-123338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:44:51.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:44:51.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:44:51.984 [DEBUG] [Thread-123338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:44:51.985 [DEBUG] [Thread-123338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:44:52.033 [DEBUG] [Thread-123338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:44:52.033 [DEBUG] [Thread-123338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:44:52.041 [DEBUG] [Thread-123338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:44:52.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:44:52.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:44:52.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:44:52.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:44:52.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:44:52.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:44:52.073 [DEBUG] [Thread-123338] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:44:53.797 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:44:59.418 [DEBUG] [Thread-123340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:08.083 [DEBUG] [Thread-123341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:14.257 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:14.453 [DEBUG] [Thread-123342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:22.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:45:22.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:45:22.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:45:23.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 44, 48), 16.85, 31.8, 0.0, 25.07, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:45:23.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:44:48
2025-12-03T20:45:23.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:45:23.347 [DEBUG] [Thread-123343] [transport.py] [_log()] starting thread (client mode): 0xa51d1ff0
2025-12-03T20:45:23.347 [DEBUG] [Thread-123343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:45:23.366 [DEBUG] [Thread-123343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:45:23.367 [INFO] [Thread-123343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] client lang: <none>
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] server lang: <none>
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] kex follows: False
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] Compression: none
2025-12-03T20:45:23.370 [DEBUG] [Thread-123343] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:45:23.383 [DEBUG] [Thread-123343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:45:23.383 [DEBUG] [Thread-123343] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:45:23.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:45:23.383 [DEBUG] [Thread-123343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:45:23.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:45:23.384 [DEBUG] [Thread-123343] [transport.py] [_log()] userauth is OK
2025-12-03T20:45:23.384 [DEBUG] [Thread-123343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:45:23.384 [DEBUG] [Thread-123343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:45:23.384 [DEBUG] [Thread-123343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:45:23.384 [DEBUG] [Thread-123343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:45:23.397 [INFO] [Thread-123343] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:45:23.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:45:24.046 [DEBUG] [Thread-123343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:45:24.046 [DEBUG] [Thread-123343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:45:24.046 [DEBUG] [Thread-123343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:45:24.086 [DEBUG] [Thread-123343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:45:24.086 [DEBUG] [Thread-123343] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:45:24.089 [DEBUG] [Thread-123343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:45:24.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:45:24.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:45:24.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:45:24.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:45:24.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:45:24.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:45:24.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.780954 -999.00  +17.00  17.22     37   +2.20 1 1 1 1 1     0    0 14.18 -24.29 ZNESW 17.2 17.2 156.6 21.5 17.3 -25.2 17.1 -24.7 16.9 -23.0 17.2 -24.0
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.780954
2025-12-03T20:45:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:45:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:45:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:45:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:45:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:45:24.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:44:48', tmtdew=16.85, humidity=31.8, cloud=0.0, wind=25.07, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:45:21', seeing=1.21, atlas_timestamp='2025-12-03T18:44:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:45:24.109 [DEBUG] [Thread-123343] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:45:24.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:45:24.196 [DEBUG] [Thread-123346] [transport.py] [_log()] starting thread (client mode): 0xa517f0d0
2025-12-03T20:45:24.196 [DEBUG] [Thread-123346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:45:24.211 [DEBUG] [Thread-123346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:45:24.211 [INFO] [Thread-123346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:45:24.218 [DEBUG] [Thread-123346] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:45:24.218 [DEBUG] [Thread-123346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] client lang: <none>
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] server lang: <none>
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] kex follows: False
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] Compression: none
2025-12-03T20:45:24.219 [DEBUG] [Thread-123346] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:45:24.276 [DEBUG] [Thread-123346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:45:24.276 [DEBUG] [Thread-123346] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:45:24.277 [DEBUG] [Thread-123346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:45:24.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:45:24.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:45:24.334 [DEBUG] [Thread-123346] [transport.py] [_log()] userauth is OK
2025-12-03T20:45:24.334 [DEBUG] [Thread-123346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:45:24.334 [DEBUG] [Thread-123346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:45:24.334 [DEBUG] [Thread-123346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:45:24.334 [DEBUG] [Thread-123346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:45:24.351 [INFO] [Thread-123346] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:45:24.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:45:24.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:45:25.151 [DEBUG] [Thread-123346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:45:25.151 [DEBUG] [Thread-123346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:45:25.199 [DEBUG] [Thread-123346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:45:25.199 [DEBUG] [Thread-123346] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:45:25.207 [DEBUG] [Thread-123346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:45:25.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:45:25.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:45:25.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:45:25.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:45:25.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:45:25.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:45:25.244 [DEBUG] [Thread-123346] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:45:29.475 [DEBUG] [Thread-123348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:34.715 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:42.209 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:42.209 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:44.508 [DEBUG] [Thread-123349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:55.137 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:45:55.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:45:55.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:45:55.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:45:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 45, 21), 16.86, 31.79, 0.0, 23.82, 16.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:45:56.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:45:21
2025-12-03T20:45:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:45:56.529 [DEBUG] [Thread-123350] [transport.py] [_log()] starting thread (client mode): 0xa517e380
2025-12-03T20:45:56.530 [DEBUG] [Thread-123350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:45:56.551 [DEBUG] [Thread-123350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:45:56.551 [INFO] [Thread-123350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] client lang: <none>
2025-12-03T20:45:56.554 [DEBUG] [Thread-123350] [transport.py] [_log()] server lang: <none>
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] kex follows: False
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] Compression: none
2025-12-03T20:45:56.555 [DEBUG] [Thread-123350] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:45:56.571 [DEBUG] [Thread-123350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:45:56.571 [DEBUG] [Thread-123350] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:45:56.571 [DEBUG] [Thread-123350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:45:56.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:45:56.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:45:56.572 [DEBUG] [Thread-123350] [transport.py] [_log()] userauth is OK
2025-12-03T20:45:56.572 [DEBUG] [Thread-123350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:45:56.572 [DEBUG] [Thread-123350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:45:56.572 [DEBUG] [Thread-123350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:45:56.572 [DEBUG] [Thread-123350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:45:56.589 [INFO] [Thread-123350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:45:56.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:45:57.237 [DEBUG] [Thread-123350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:45:57.237 [DEBUG] [Thread-123350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:45:57.237 [DEBUG] [Thread-123350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:45:57.279 [DEBUG] [Thread-123350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:45:57.279 [DEBUG] [Thread-123350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:45:57.281 [DEBUG] [Thread-123350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:45:57.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:45:57.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:45:57.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:45:57.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:45:57.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:45:57.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:45:57.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.781302 -999.00  +16.90  17.28     37   +2.20 1 1 1 1 1     0    0 14.27 -24.30 ZNESW 17.3 17.3 148.2 25.4 17.2 -25.2 17.1 -24.7 16.9 -23.2 17.2 -23.9
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:45:57.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.781302
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:45:57.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:45:21', tmtdew=16.86, humidity=31.79, cloud=0.0, wind=23.82, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:45:53', seeing=1.28, atlas_timestamp='2025-12-03T18:45:04.493', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:45:57.299 [DEBUG] [Thread-123350] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:45:57.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:45:57.385 [DEBUG] [Thread-123353] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T20:45:57.385 [DEBUG] [Thread-123353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:45:57.399 [DEBUG] [Thread-123353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:45:57.399 [INFO] [Thread-123353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] client lang: <none>
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] server lang: <none>
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] kex follows: False
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] Compression: none
2025-12-03T20:45:57.407 [DEBUG] [Thread-123353] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:45:57.464 [DEBUG] [Thread-123353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:45:57.465 [DEBUG] [Thread-123353] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:45:57.465 [DEBUG] [Thread-123353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:45:57.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:45:57.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:45:57.521 [DEBUG] [Thread-123353] [transport.py] [_log()] userauth is OK
2025-12-03T20:45:57.522 [DEBUG] [Thread-123353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:45:57.522 [DEBUG] [Thread-123353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:45:57.522 [DEBUG] [Thread-123353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:45:57.522 [DEBUG] [Thread-123353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:45:57.535 [INFO] [Thread-123353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:45:57.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:45:57.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:45:58.325 [DEBUG] [Thread-123353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:45:58.325 [DEBUG] [Thread-123353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:45:58.373 [DEBUG] [Thread-123353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:45:58.373 [DEBUG] [Thread-123353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:45:58.382 [DEBUG] [Thread-123353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:45:58.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:45:58.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:45:58.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:45:58.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:45:58.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:45:58.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:45:58.413 [DEBUG] [Thread-123353] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:45:59.530 [DEBUG] [Thread-123355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:08.269 [DEBUG] [Thread-123356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:14.562 [DEBUG] [Thread-123357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:15.558 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:28.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:46:28.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:46:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:46:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 45, 53), 16.8, 31.8, 0.0, 24.24, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:46:29.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:45:53
2025-12-03T20:46:29.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:46:29.571 [DEBUG] [Thread-123358] [transport.py] [_log()] starting thread (client mode): 0xa2751570
2025-12-03T20:46:29.571 [DEBUG] [Thread-123358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:46:29.589 [DEBUG] [Thread-123359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:29.592 [DEBUG] [Thread-123358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:46:29.592 [INFO] [Thread-123358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:46:29.595 [DEBUG] [Thread-123358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] client lang: <none>
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] server lang: <none>
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] kex follows: False
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] Compression: none
2025-12-03T20:46:29.596 [DEBUG] [Thread-123358] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:46:29.612 [DEBUG] [Thread-123358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:46:29.613 [DEBUG] [Thread-123358] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:46:29.613 [DEBUG] [Thread-123358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:46:29.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:46:29.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:46:29.614 [DEBUG] [Thread-123358] [transport.py] [_log()] userauth is OK
2025-12-03T20:46:29.614 [DEBUG] [Thread-123358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:46:29.614 [DEBUG] [Thread-123358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:46:29.614 [DEBUG] [Thread-123358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:46:29.614 [DEBUG] [Thread-123358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:46:29.632 [INFO] [Thread-123358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:46:29.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:46:30.270 [DEBUG] [Thread-123358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:46:30.270 [DEBUG] [Thread-123358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:46:30.270 [DEBUG] [Thread-123358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:46:30.312 [DEBUG] [Thread-123358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:46:30.312 [DEBUG] [Thread-123358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:46:30.314 [DEBUG] [Thread-123358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:46:30.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:46:30.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:46:30.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:46:30.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:46:30.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:46:30.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:46:30.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.781649 -999.00  +16.90  16.39     37   +2.20 1 1 1 1 1     0    0 14.21 -22.18 ZNESW 16.4 16.4 158.9 22.6 17.3 -25.3 17.1 -24.7 16.9 -23.1 17.2 -23.9
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.781649
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:46:30.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:45:53', tmtdew=16.8, humidity=31.8, cloud=0.0, wind=24.24, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:46:26', seeing=1.42, atlas_timestamp='2025-12-03T18:45:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:46:30.334 [DEBUG] [Thread-123358] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:46:30.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:46:30.419 [DEBUG] [Thread-123362] [transport.py] [_log()] starting thread (client mode): 0xa277a200
2025-12-03T20:46:30.419 [DEBUG] [Thread-123362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:46:30.434 [DEBUG] [Thread-123362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:46:30.434 [INFO] [Thread-123362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] client lang: <none>
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] server lang: <none>
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] kex follows: False
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] Compression: none
2025-12-03T20:46:30.442 [DEBUG] [Thread-123362] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:46:30.500 [DEBUG] [Thread-123362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:46:30.501 [DEBUG] [Thread-123362] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:46:30.501 [DEBUG] [Thread-123362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:46:30.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:46:30.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:46:30.557 [DEBUG] [Thread-123362] [transport.py] [_log()] userauth is OK
2025-12-03T20:46:30.557 [DEBUG] [Thread-123362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:46:30.557 [DEBUG] [Thread-123362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:46:30.557 [DEBUG] [Thread-123362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:46:30.557 [DEBUG] [Thread-123362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:46:30.571 [INFO] [Thread-123362] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:46:30.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:46:30.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:46:31.406 [DEBUG] [Thread-123362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:46:31.406 [DEBUG] [Thread-123362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:46:31.454 [DEBUG] [Thread-123362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:46:31.454 [DEBUG] [Thread-123362] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:46:31.462 [DEBUG] [Thread-123362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:46:31.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:46:31.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:46:31.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:46:31.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:46:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:46:31.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:46:31.494 [DEBUG] [Thread-123362] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:46:35.976 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:42.407 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:42.408 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:44.613 [DEBUG] [Thread-123364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:56.400 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:46:59.645 [DEBUG] [Thread-123365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:47:01.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:47:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:47:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 46, 26), 16.79, 31.84, 0.0, 26.13, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:47:02.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:46:26
2025-12-03T20:47:02.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:47:02.625 [DEBUG] [Thread-123366] [transport.py] [_log()] starting thread (client mode): 0xa2778190
2025-12-03T20:47:02.625 [DEBUG] [Thread-123366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:47:02.645 [DEBUG] [Thread-123366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:47:02.645 [INFO] [Thread-123366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:02.648 [DEBUG] [Thread-123366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] client lang: <none>
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] server lang: <none>
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] kex follows: False
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] Compression: none
2025-12-03T20:47:02.649 [DEBUG] [Thread-123366] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:47:02.664 [DEBUG] [Thread-123366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:47:02.665 [DEBUG] [Thread-123366] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:47:02.665 [DEBUG] [Thread-123366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:47:02.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:47:02.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:47:02.666 [DEBUG] [Thread-123366] [transport.py] [_log()] userauth is OK
2025-12-03T20:47:02.666 [DEBUG] [Thread-123366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:47:02.666 [DEBUG] [Thread-123366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:47:02.666 [DEBUG] [Thread-123366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:47:02.666 [DEBUG] [Thread-123366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:47:02.683 [INFO] [Thread-123366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:47:02.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:47:03.320 [DEBUG] [Thread-123366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:47:03.321 [DEBUG] [Thread-123366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:47:03.321 [DEBUG] [Thread-123366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:47:03.361 [DEBUG] [Thread-123366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:47:03.362 [DEBUG] [Thread-123366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:47:03.364 [DEBUG] [Thread-123366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:47:03.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:47:03.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:47:03.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:47:03.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:47:03.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:47:03.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:47:03.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.782343 -999.00  +16.90  18.14     37   +2.20 1 1 1 1 1     0    0 14.24 -19.67 ZNESW 18.1 18.1 150.4 24.5 17.2 -25.4 17.1 -24.8 16.9 -23.2 17.1 -24.0
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.782343
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:47:03.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:46:26', tmtdew=16.79, humidity=31.84, cloud=0.0, wind=26.13, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:46:59', seeing=1.26, atlas_timestamp='2025-12-03T18:46:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, 0.04025000000000034, 0.02725000000000044, -0.05349999999999966, 0.046499999999999986, 0.0762500000000017, 0.025000000000000355, -0.0017499999999994742, 0.00849999999999973, 0.0004999999999988347, 0.003249999999999531, 0.04899999999999949, -0.006999999999999673, 0.0442499999999999, -0.0030000000000001137, -0.06050000000000111, 0.07124999999999915, 0.09849999999999959, 0.053999999999998494, 0.025249999999999773, 0.11299999999999955, 0.11374999999999957, -0.04574999999999818, 0.016750000000000043, 0.05299999999999905, 0.08349999999999902, 0.06374999999999886, 0.07850000000000001, 0.19500000000000028, -0.13199999999999967, 0.06600000000000072, -0.6029999999999998, -0.08625000000000149], zp_timestamp='2025-12-03T18:43:00')
2025-12-03T20:47:03.383 [DEBUG] [Thread-123366] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:47:03.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:47:03.467 [DEBUG] [Thread-123369] [transport.py] [_log()] starting thread (client mode): 0xa51493f0
2025-12-03T20:47:03.467 [DEBUG] [Thread-123369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:47:03.481 [DEBUG] [Thread-123369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:47:03.481 [INFO] [Thread-123369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] client lang: <none>
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] server lang: <none>
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] kex follows: False
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] Compression: none
2025-12-03T20:47:03.489 [DEBUG] [Thread-123369] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:47:03.543 [DEBUG] [Thread-123369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:47:03.544 [DEBUG] [Thread-123369] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:47:03.544 [DEBUG] [Thread-123369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:47:03.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:47:03.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:47:03.601 [DEBUG] [Thread-123369] [transport.py] [_log()] userauth is OK
2025-12-03T20:47:03.601 [DEBUG] [Thread-123369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:47:03.601 [DEBUG] [Thread-123369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:47:03.601 [DEBUG] [Thread-123369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:47:03.601 [DEBUG] [Thread-123369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:47:03.614 [INFO] [Thread-123369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:47:03.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:47:03.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:47:04.409 [DEBUG] [Thread-123369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:47:04.409 [DEBUG] [Thread-123369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:47:04.457 [DEBUG] [Thread-123369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:47:04.457 [DEBUG] [Thread-123369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:47:04.465 [DEBUG] [Thread-123369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:47:04.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:47:04.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:47:04.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:47:04.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:47:04.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:47:04.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:47:04.498 [DEBUG] [Thread-123369] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:47:08.403 [DEBUG] [Thread-123371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:14.667 [DEBUG] [Thread-123372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:16.824 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:29.706 [DEBUG] [Thread-123373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:34.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:47:34.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:47:34.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:47:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 47, 31), 16.88, 31.74, 0.0, 28.71, 16.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:47:35.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:47:31
2025-12-03T20:47:35.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:47:35.603 [DEBUG] [Thread-123374] [transport.py] [_log()] starting thread (client mode): 0xa277a770
2025-12-03T20:47:35.603 [DEBUG] [Thread-123374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:47:35.624 [DEBUG] [Thread-123374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:47:35.624 [INFO] [Thread-123374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] client lang: <none>
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] server lang: <none>
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] kex follows: False
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:47:35.627 [DEBUG] [Thread-123374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:47:35.628 [DEBUG] [Thread-123374] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:47:35.628 [DEBUG] [Thread-123374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:47:35.628 [DEBUG] [Thread-123374] [transport.py] [_log()] Compression: none
2025-12-03T20:47:35.628 [DEBUG] [Thread-123374] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:47:35.644 [DEBUG] [Thread-123374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:47:35.644 [DEBUG] [Thread-123374] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:47:35.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:47:35.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] userauth is OK
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:47:35.645 [DEBUG] [Thread-123374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:47:35.672 [INFO] [Thread-123374] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:47:35.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:47:36.276 [DEBUG] [Thread-123374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:47:36.276 [DEBUG] [Thread-123374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:47:36.276 [DEBUG] [Thread-123374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:47:36.317 [DEBUG] [Thread-123374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:47:36.317 [DEBUG] [Thread-123374] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:47:36.320 [DEBUG] [Thread-123374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:47:36.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:47:36.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:47:36.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:47:36.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:47:36.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:47:36.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.782690 -999.00  +16.90  18.16     37   +2.20 1 1 1 1 1     0    0 14.14 -19.60 ZNESW 18.2 18.2 147.0 21.6 17.2 -25.3 17.1 -24.7 16.9 -23.1 17.1 -24.1
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:47:36.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.782690
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:47:36.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:47:31', tmtdew=16.88, humidity=31.74, cloud=0.0, wind=28.71, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:47:31', seeing=1.26, atlas_timestamp='2025-12-03T18:47:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.01425000000000054, -0.019750000000000156, -0.04899999999999949, 0.029500000000000526, 0.0572499999999998, 0.013999999999999346, -0.05674999999999919, 0.04449999999999932, -0.04100000000000037, -0.023749999999999716, -0.041999999999999815, -0.011000000000001009, -0.021750000000000824, 0.0030000000000001137, -0.14200000000000124, 0.020250000000000767, 0.00849999999999973, 0.025000000000000355, -0.008250000000000313, 0.06400000000000006, 0.08974999999999866, -0.044749999999998735, -0.25624999999999964, 0.014999999999998792, 0.03449999999999953, 0.025750000000000384, 0.07350000000000101, 0.12599999999999945, -0.07499999999999929, 0.015000000000000568, -0.23299999999999876, -0.04225000000000101], zp_timestamp='2025-12-03T18:46:00')
2025-12-03T20:47:36.337 [DEBUG] [Thread-123374] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:47:36.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:47:36.422 [DEBUG] [Thread-123377] [transport.py] [_log()] starting thread (client mode): 0xa27532b0
2025-12-03T20:47:36.422 [DEBUG] [Thread-123377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:47:36.436 [DEBUG] [Thread-123377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:47:36.436 [INFO] [Thread-123377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] client lang: <none>
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] server lang: <none>
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] kex follows: False
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] Compression: none
2025-12-03T20:47:36.444 [DEBUG] [Thread-123377] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:47:36.499 [DEBUG] [Thread-123377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:47:36.499 [DEBUG] [Thread-123377] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:47:36.499 [DEBUG] [Thread-123377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:47:36.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:47:36.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:47:36.557 [DEBUG] [Thread-123377] [transport.py] [_log()] userauth is OK
2025-12-03T20:47:36.557 [DEBUG] [Thread-123377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:47:36.557 [DEBUG] [Thread-123377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:47:36.557 [DEBUG] [Thread-123377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:47:36.557 [DEBUG] [Thread-123377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:47:36.570 [INFO] [Thread-123377] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:47:36.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:47:36.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:47:37.248 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:37.384 [DEBUG] [Thread-123377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:47:37.384 [DEBUG] [Thread-123377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:47:37.432 [DEBUG] [Thread-123377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:47:37.432 [DEBUG] [Thread-123377] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:47:37.440 [DEBUG] [Thread-123377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:47:37.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:47:37.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:47:37.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:47:37.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:47:37.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:47:37.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:47:37.471 [DEBUG] [Thread-123377] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:47:42.607 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:42.608 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:44.728 [DEBUG] [Thread-123379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:57.666 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:47:59.765 [DEBUG] [Thread-123380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:07.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:48:07.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:48:07.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:48:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 48, 4), 16.9, 31.69, 0.0, 26.15, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:48:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:48:04
2025-12-03T20:48:08.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:48:08.485 [DEBUG] [Thread-123381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:08.589 [DEBUG] [Thread-123382] [transport.py] [_log()] starting thread (client mode): 0xa2761990
2025-12-03T20:48:08.589 [DEBUG] [Thread-123382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:48:08.611 [DEBUG] [Thread-123382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:48:08.611 [INFO] [Thread-123382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] client lang: <none>
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] server lang: <none>
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] kex follows: False
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:48:08.614 [DEBUG] [Thread-123382] [transport.py] [_log()] Compression: none
2025-12-03T20:48:08.615 [DEBUG] [Thread-123382] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:48:08.630 [DEBUG] [Thread-123382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:48:08.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:48:08.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] userauth is OK
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:48:08.631 [DEBUG] [Thread-123382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:48:08.640 [INFO] [Thread-123382] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:48:08.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:48:09.248 [DEBUG] [Thread-123382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:48:09.248 [DEBUG] [Thread-123382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:48:09.248 [DEBUG] [Thread-123382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:48:09.290 [DEBUG] [Thread-123382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:48:09.290 [DEBUG] [Thread-123382] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:48:09.292 [DEBUG] [Thread-123382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:48:09.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:48:09.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:48:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:48:09.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:48:09.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:48:09.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:48:09.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:48:09.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.783038 -999.00  +16.80  15.76     37   +2.20 1 1 1 1 1     0    0 14.34 -20.21 ZNESW 15.8 15.8 158.1 22.6 17.2 -25.4 17.1 -24.7 16.9 -23.2 17.1 -24.0
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.783038
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:48:09.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:48:04', tmtdew=16.9, humidity=31.69, cloud=0.0, wind=26.15, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:48:04', seeing=1.47, atlas_timestamp='2025-12-03T18:47:34.483', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.01425000000000054, -0.019750000000000156, -0.04899999999999949, 0.029500000000000526, 0.0572499999999998, 0.013999999999999346, -0.05674999999999919, 0.04449999999999932, -0.04100000000000037, -0.023749999999999716, -0.041999999999999815, -0.011000000000001009, -0.021750000000000824, 0.0030000000000001137, -0.14200000000000124, 0.020250000000000767, 0.00849999999999973, 0.025000000000000355, -0.008250000000000313, 0.06400000000000006, 0.08974999999999866, -0.044749999999998735, -0.25624999999999964, 0.014999999999998792, 0.03449999999999953, 0.025750000000000384, 0.07350000000000101, 0.12599999999999945, -0.07499999999999929, 0.015000000000000568, -0.23299999999999876, -0.04225000000000101], zp_timestamp='2025-12-03T18:46:00')
2025-12-03T20:48:09.311 [DEBUG] [Thread-123382] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:48:09.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:48:09.398 [DEBUG] [Thread-123385] [transport.py] [_log()] starting thread (client mode): 0xa2762290
2025-12-03T20:48:09.398 [DEBUG] [Thread-123385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:48:09.413 [DEBUG] [Thread-123385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:48:09.413 [INFO] [Thread-123385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] client lang: <none>
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] server lang: <none>
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] kex follows: False
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:48:09.420 [DEBUG] [Thread-123385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:48:09.421 [DEBUG] [Thread-123385] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:48:09.421 [DEBUG] [Thread-123385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:48:09.421 [DEBUG] [Thread-123385] [transport.py] [_log()] Compression: none
2025-12-03T20:48:09.421 [DEBUG] [Thread-123385] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:48:09.475 [DEBUG] [Thread-123385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:48:09.475 [DEBUG] [Thread-123385] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:48:09.475 [DEBUG] [Thread-123385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:48:09.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:48:09.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:48:09.533 [DEBUG] [Thread-123385] [transport.py] [_log()] userauth is OK
2025-12-03T20:48:09.533 [DEBUG] [Thread-123385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:48:09.533 [DEBUG] [Thread-123385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:48:09.533 [DEBUG] [Thread-123385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:48:09.533 [DEBUG] [Thread-123385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:48:09.547 [INFO] [Thread-123385] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:48:09.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:48:09.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:48:10.352 [DEBUG] [Thread-123385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:48:10.352 [DEBUG] [Thread-123385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:48:10.401 [DEBUG] [Thread-123385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:48:10.401 [DEBUG] [Thread-123385] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:48:10.409 [DEBUG] [Thread-123385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:48:10.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:48:10.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:48:10.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:48:10.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:48:10.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:48:10.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:48:10.441 [DEBUG] [Thread-123385] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:48:14.787 [DEBUG] [Thread-123387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:18.085 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:29.821 [DEBUG] [Thread-123388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:38.507 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:48:40.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:48:40.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:48:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 48, 36), 16.91, 31.66, 0.0, 26.01, 16.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:48:41.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:48:36
2025-12-03T20:48:41.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:48:41.545 [DEBUG] [Thread-123389] [transport.py] [_log()] starting thread (client mode): 0xa51d2b00
2025-12-03T20:48:41.545 [DEBUG] [Thread-123389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:48:41.566 [DEBUG] [Thread-123389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:48:41.566 [INFO] [Thread-123389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:41.569 [DEBUG] [Thread-123389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] client lang: <none>
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] server lang: <none>
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] kex follows: False
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] Compression: none
2025-12-03T20:48:41.570 [DEBUG] [Thread-123389] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:48:41.585 [DEBUG] [Thread-123389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:48:41.586 [DEBUG] [Thread-123389] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:48:41.586 [DEBUG] [Thread-123389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:48:41.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:48:41.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:48:41.587 [DEBUG] [Thread-123389] [transport.py] [_log()] userauth is OK
2025-12-03T20:48:41.587 [DEBUG] [Thread-123389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:48:41.587 [DEBUG] [Thread-123389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:48:41.587 [DEBUG] [Thread-123389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:48:41.587 [DEBUG] [Thread-123389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:48:41.603 [INFO] [Thread-123389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:48:41.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:48:42.220 [DEBUG] [Thread-123389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:48:42.220 [DEBUG] [Thread-123389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:48:42.220 [DEBUG] [Thread-123389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:48:42.261 [DEBUG] [Thread-123389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:48:42.261 [DEBUG] [Thread-123389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:48:42.264 [DEBUG] [Thread-123389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:48:42.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:48:42.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:48:42.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:48:42.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:48:42.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:48:42.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:48:42.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.783385 -999.00  +16.80  19.25     37   +2.20 1 1 1 1 1     0    0 14.15 -20.60 ZNESW 19.2 19.2 152.6 23.7 17.2 -25.3 17.1 -24.9 16.9 -23.1 17.1 -24.1
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.783385
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:48:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:48:36', tmtdew=16.91, humidity=31.66, cloud=0.0, wind=26.01, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:48:36', seeing=1.27, atlas_timestamp='2025-12-03T18:48:04.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.01425000000000054, -0.019750000000000156, -0.04899999999999949, 0.029500000000000526, 0.0572499999999998, 0.013999999999999346, -0.05674999999999919, 0.04449999999999932, -0.04100000000000037, -0.023749999999999716, -0.041999999999999815, -0.011000000000001009, -0.021750000000000824, 0.0030000000000001137, -0.14200000000000124, 0.020250000000000767, 0.00849999999999973, 0.025000000000000355, -0.008250000000000313, 0.06400000000000006, 0.08974999999999866, -0.044749999999998735, -0.25624999999999964, 0.014999999999998792, 0.03449999999999953, 0.025750000000000384, 0.07350000000000101, 0.12599999999999945, -0.07499999999999929, 0.015000000000000568, -0.23299999999999876, -0.04225000000000101], zp_timestamp='2025-12-03T18:46:00')
2025-12-03T20:48:42.284 [DEBUG] [Thread-123389] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:48:42.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:48:42.368 [DEBUG] [Thread-123392] [transport.py] [_log()] starting thread (client mode): 0xa2729ff0
2025-12-03T20:48:42.368 [DEBUG] [Thread-123392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:48:42.382 [DEBUG] [Thread-123392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:48:42.382 [INFO] [Thread-123392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:42.392 [DEBUG] [Thread-123392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] client lang: <none>
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] server lang: <none>
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] kex follows: False
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] Compression: none
2025-12-03T20:48:42.393 [DEBUG] [Thread-123392] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:48:42.451 [DEBUG] [Thread-123392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:48:42.452 [DEBUG] [Thread-123392] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:48:42.452 [DEBUG] [Thread-123392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:48:42.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:48:42.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:48:42.508 [DEBUG] [Thread-123392] [transport.py] [_log()] userauth is OK
2025-12-03T20:48:42.508 [DEBUG] [Thread-123392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:48:42.509 [DEBUG] [Thread-123392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:48:42.509 [DEBUG] [Thread-123392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:48:42.509 [DEBUG] [Thread-123392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:48:42.522 [INFO] [Thread-123392] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:48:42.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:48:42.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:48:42.806 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:42.806 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:43.309 [DEBUG] [Thread-123392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:48:43.310 [DEBUG] [Thread-123392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:48:43.359 [DEBUG] [Thread-123392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:48:43.359 [DEBUG] [Thread-123392] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:48:43.367 [DEBUG] [Thread-123392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:48:43.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:48:43.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:48:43.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:48:43.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:48:43.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:48:43.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:48:43.401 [DEBUG] [Thread-123392] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:48:44.848 [DEBUG] [Thread-123394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:58.928 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:48:59.881 [DEBUG] [Thread-123395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:08.559 [DEBUG] [Thread-123396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:13.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:49:13.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:49:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:49:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 49, 9), 16.87, 31.76, 0.0, 26.8, 16.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:49:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:49:09
2025-12-03T20:49:14.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:49:14.500 [DEBUG] [Thread-123397] [transport.py] [_log()] starting thread (client mode): 0xa27cafb0
2025-12-03T20:49:14.500 [DEBUG] [Thread-123397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:49:14.519 [DEBUG] [Thread-123397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:49:14.519 [INFO] [Thread-123397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] client lang: <none>
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] server lang: <none>
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] kex follows: False
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] Compression: none
2025-12-03T20:49:14.523 [DEBUG] [Thread-123397] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:49:14.538 [DEBUG] [Thread-123397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:49:14.538 [DEBUG] [Thread-123397] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:49:14.538 [DEBUG] [Thread-123397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:49:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:49:14.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:49:14.539 [DEBUG] [Thread-123397] [transport.py] [_log()] userauth is OK
2025-12-03T20:49:14.539 [DEBUG] [Thread-123397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:49:14.539 [DEBUG] [Thread-123397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:49:14.539 [DEBUG] [Thread-123397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:49:14.539 [DEBUG] [Thread-123397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:49:14.555 [INFO] [Thread-123397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:49:14.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:49:14.902 [DEBUG] [Thread-123399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:15.184 [DEBUG] [Thread-123397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:49:15.184 [DEBUG] [Thread-123397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:49:15.184 [DEBUG] [Thread-123397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:49:15.224 [DEBUG] [Thread-123397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:49:15.225 [DEBUG] [Thread-123397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:49:15.226 [DEBUG] [Thread-123397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:49:15.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:49:15.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:49:15.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:49:15.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:49:15.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:49:15.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:49:15.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:49:15.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.783732 -999.00  +16.80  20.48     37   +2.20 1 1 1 1 1     0    0 14.14 -20.40 ZNESW 20.5 20.5 154.8 27.1 17.1 -25.2 17.1 -24.8 16.8 -23.0 17.1 -24.0
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.783732
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:49:15.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:49:09', tmtdew=16.87, humidity=31.76, cloud=0.0, wind=26.8, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:49:09', seeing=1.23, atlas_timestamp='2025-12-03T18:48:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.01425000000000054, -0.019750000000000156, -0.04899999999999949, 0.029500000000000526, 0.0572499999999998, 0.013999999999999346, -0.05674999999999919, 0.04449999999999932, -0.04100000000000037, -0.023749999999999716, -0.041999999999999815, -0.011000000000001009, -0.021750000000000824, 0.0030000000000001137, -0.14200000000000124, 0.020250000000000767, 0.00849999999999973, 0.025000000000000355, -0.008250000000000313, 0.06400000000000006, 0.08974999999999866, -0.044749999999998735, -0.25624999999999964, 0.014999999999998792, 0.03449999999999953, 0.025750000000000384, 0.07350000000000101, 0.12599999999999945, -0.07499999999999929, 0.015000000000000568, -0.23299999999999876, -0.04225000000000101], zp_timestamp='2025-12-03T18:46:00')
2025-12-03T20:49:15.245 [DEBUG] [Thread-123397] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:49:15.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:49:15.330 [DEBUG] [Thread-123401] [transport.py] [_log()] starting thread (client mode): 0xa514ada0
2025-12-03T20:49:15.330 [DEBUG] [Thread-123401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:49:15.345 [DEBUG] [Thread-123401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:49:15.345 [INFO] [Thread-123401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] client lang: <none>
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] server lang: <none>
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] kex follows: False
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:49:15.352 [DEBUG] [Thread-123401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:49:15.353 [DEBUG] [Thread-123401] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:49:15.353 [DEBUG] [Thread-123401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:49:15.353 [DEBUG] [Thread-123401] [transport.py] [_log()] Compression: none
2025-12-03T20:49:15.353 [DEBUG] [Thread-123401] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:49:15.407 [DEBUG] [Thread-123401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:49:15.407 [DEBUG] [Thread-123401] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:49:15.407 [DEBUG] [Thread-123401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:49:15.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:49:15.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:49:15.466 [DEBUG] [Thread-123401] [transport.py] [_log()] userauth is OK
2025-12-03T20:49:15.466 [DEBUG] [Thread-123401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:49:15.466 [DEBUG] [Thread-123401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:49:15.466 [DEBUG] [Thread-123401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:49:15.466 [DEBUG] [Thread-123401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:49:15.480 [INFO] [Thread-123401] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:49:15.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:49:15.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:49:16.297 [DEBUG] [Thread-123401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:49:16.297 [DEBUG] [Thread-123401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:49:16.344 [DEBUG] [Thread-123401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:49:16.345 [DEBUG] [Thread-123401] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:49:16.353 [DEBUG] [Thread-123401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:49:16.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:49:16.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:49:16.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:49:16.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:49:16.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:49:16.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:49:16.385 [DEBUG] [Thread-123401] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:49:19.368 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:29.926 [DEBUG] [Thread-123403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:39.843 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:43.005 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:43.005 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:44.967 [DEBUG] [Thread-123404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:49:46.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:49:46.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:49:46.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:49:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 49, 41), 16.86, 31.77, 0.0, 23.4, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:49:47.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:49:41
2025-12-03T20:49:47.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:49:47.538 [DEBUG] [Thread-123405] [transport.py] [_log()] starting thread (client mode): 0xa27600d0
2025-12-03T20:49:47.538 [DEBUG] [Thread-123405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:49:47.562 [DEBUG] [Thread-123405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:49:47.562 [INFO] [Thread-123405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] client lang: <none>
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] server lang: <none>
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] kex follows: False
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] Compression: none
2025-12-03T20:49:47.572 [DEBUG] [Thread-123405] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:49:47.588 [DEBUG] [Thread-123405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:49:47.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:49:47.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] userauth is OK
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:49:47.589 [DEBUG] [Thread-123405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:49:47.598 [INFO] [Thread-123405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:49:47.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:49:48.231 [DEBUG] [Thread-123405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:49:48.231 [DEBUG] [Thread-123405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:49:48.231 [DEBUG] [Thread-123405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:49:48.273 [DEBUG] [Thread-123405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:49:48.273 [DEBUG] [Thread-123405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:49:48.275 [DEBUG] [Thread-123405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:49:48.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:49:48.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:49:48.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:49:48.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:49:48.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:49:48.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:49:48.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.784079 -999.00  +16.80  20.30     37   +2.20 1 1 1 1 1     0    0 14.52 -20.06 ZNESW 20.3 20.3 163.6 23.9 17.1 -25.2 17.1 -24.7 16.9 -23.1 17.1 -24.0
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.784079
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:49:48.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:49:41', tmtdew=16.86, humidity=31.77, cloud=0.0, wind=23.4, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:49:41', seeing=1.33, atlas_timestamp='2025-12-03T18:49:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.01425000000000054, -0.019750000000000156, -0.04899999999999949, 0.029500000000000526, 0.0572499999999998, 0.013999999999999346, -0.05674999999999919, 0.04449999999999932, -0.04100000000000037, -0.023749999999999716, -0.041999999999999815, -0.011000000000001009, -0.021750000000000824, 0.0030000000000001137, -0.14200000000000124, 0.020250000000000767, 0.00849999999999973, 0.025000000000000355, -0.008250000000000313, 0.06400000000000006, 0.08974999999999866, -0.044749999999998735, -0.25624999999999964, 0.014999999999998792, 0.03449999999999953, 0.025750000000000384, 0.07350000000000101, 0.12599999999999945, -0.07499999999999929, 0.015000000000000568, -0.23299999999999876, -0.04225000000000101], zp_timestamp='2025-12-03T18:46:00')
2025-12-03T20:49:48.304 [DEBUG] [Thread-123405] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:49:48.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:49:48.388 [DEBUG] [Thread-123408] [transport.py] [_log()] starting thread (client mode): 0xa2761120
2025-12-03T20:49:48.388 [DEBUG] [Thread-123408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:49:48.402 [DEBUG] [Thread-123408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:49:48.402 [INFO] [Thread-123408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] client lang: <none>
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] server lang: <none>
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] kex follows: False
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] Compression: none
2025-12-03T20:49:48.410 [DEBUG] [Thread-123408] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:49:48.471 [DEBUG] [Thread-123408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:49:48.471 [DEBUG] [Thread-123408] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:49:48.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:49:48.472 [DEBUG] [Thread-123408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:49:48.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:49:48.528 [DEBUG] [Thread-123408] [transport.py] [_log()] userauth is OK
2025-12-03T20:49:48.528 [DEBUG] [Thread-123408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:49:48.528 [DEBUG] [Thread-123408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:49:48.528 [DEBUG] [Thread-123408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:49:48.528 [DEBUG] [Thread-123408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:49:48.542 [INFO] [Thread-123408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:49:48.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:49:48.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:49:49.417 [DEBUG] [Thread-123408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:49:49.417 [DEBUG] [Thread-123408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:49:49.465 [DEBUG] [Thread-123408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:49:49.465 [DEBUG] [Thread-123408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:49:49.474 [DEBUG] [Thread-123408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:49:49.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:49:49.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:49:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:49:49.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:49:49.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:49:49.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:49:49.505 [DEBUG] [Thread-123408] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:49:59.989 [DEBUG] [Thread-123410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:00.263 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:08.755 [DEBUG] [Thread-123411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:15.030 [DEBUG] [Thread-123412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:50:19.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:50:19.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:50:20.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 50, 14), 16.85, 31.81, 0.0, 25.04, 16.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:50:20.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:50:14
2025-12-03T20:50:20.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:50:20.678 [DEBUG] [Thread-123413] [transport.py] [_log()] starting thread (client mode): 0xa5148310
2025-12-03T20:50:20.678 [DEBUG] [Thread-123413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:50:20.698 [DEBUG] [Thread-123413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:50:20.698 [INFO] [Thread-123413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] client lang: <none>
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] server lang: <none>
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] kex follows: False
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] Compression: none
2025-12-03T20:50:20.702 [DEBUG] [Thread-123413] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:50:20.719 [DEBUG] [Thread-123413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:50:20.719 [DEBUG] [Thread-123413] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:50:20.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:50:20.719 [DEBUG] [Thread-123413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:50:20.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:50:20.720 [DEBUG] [Thread-123413] [transport.py] [_log()] userauth is OK
2025-12-03T20:50:20.720 [DEBUG] [Thread-123413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:50:20.720 [DEBUG] [Thread-123413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:50:20.720 [DEBUG] [Thread-123413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:50:20.720 [DEBUG] [Thread-123413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:50:20.735 [INFO] [Thread-123413] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:50:20.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:50:20.836 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:21.344 [DEBUG] [Thread-123413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:50:21.344 [DEBUG] [Thread-123413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:50:21.345 [DEBUG] [Thread-123413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:50:21.386 [DEBUG] [Thread-123413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:50:21.386 [DEBUG] [Thread-123413] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:50:21.388 [DEBUG] [Thread-123413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:50:21.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:50:21.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:50:21.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:50:21.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:50:21.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:50:21.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:50:21.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.784773 -999.00  +16.80  22.44     37   +2.20 1 1 1 1 1     0    0 14.02 -22.48 ZNESW 22.4 22.4 140.2 26.4 17.1 -25.2 17.1 -24.7 16.9 -23.1 17.1 -24.2
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.784773
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:50:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:50:14', tmtdew=16.85, humidity=31.81, cloud=0.0, wind=25.04, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:50:14', seeing=0.96, atlas_timestamp='2025-12-03T18:50:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:50:21.408 [DEBUG] [Thread-123413] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:50:21.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:50:21.499 [DEBUG] [Thread-123416] [transport.py] [_log()] starting thread (client mode): 0xa277b6a0
2025-12-03T20:50:21.499 [DEBUG] [Thread-123416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:50:21.514 [DEBUG] [Thread-123416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:50:21.514 [INFO] [Thread-123416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] client lang: <none>
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] server lang: <none>
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] kex follows: False
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:50:21.522 [DEBUG] [Thread-123416] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:50:21.523 [DEBUG] [Thread-123416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:50:21.523 [DEBUG] [Thread-123416] [transport.py] [_log()] Compression: none
2025-12-03T20:50:21.523 [DEBUG] [Thread-123416] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:50:21.586 [DEBUG] [Thread-123416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:50:21.586 [DEBUG] [Thread-123416] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:50:21.586 [DEBUG] [Thread-123416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:50:21.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:50:21.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:50:21.644 [DEBUG] [Thread-123416] [transport.py] [_log()] userauth is OK
2025-12-03T20:50:21.644 [DEBUG] [Thread-123416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:50:21.644 [DEBUG] [Thread-123416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:50:21.644 [DEBUG] [Thread-123416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:50:21.644 [DEBUG] [Thread-123416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:50:21.658 [INFO] [Thread-123416] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:50:21.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:50:21.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:50:22.484 [DEBUG] [Thread-123416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:50:22.484 [DEBUG] [Thread-123416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:50:22.532 [DEBUG] [Thread-123416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:50:22.532 [DEBUG] [Thread-123416] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:50:22.540 [DEBUG] [Thread-123416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:50:22.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:50:22.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:50:22.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:50:22.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:50:22.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:50:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:50:22.573 [DEBUG] [Thread-123416] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:50:30.055 [DEBUG] [Thread-123418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:41.369 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:43.207 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:43.208 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:45.091 [DEBUG] [Thread-123419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:50:52.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:50:52.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:50:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:50:53.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 50, 46), 16.85, 31.81, 0.0, 25.74, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:50:53.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:50:46
2025-12-03T20:50:53.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:50:53.698 [DEBUG] [Thread-123420] [transport.py] [_log()] starting thread (client mode): 0xa514b850
2025-12-03T20:50:53.698 [DEBUG] [Thread-123420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:50:53.718 [DEBUG] [Thread-123420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:50:53.718 [INFO] [Thread-123420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:50:53.721 [DEBUG] [Thread-123420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] client lang: <none>
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] server lang: <none>
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] kex follows: False
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] Compression: none
2025-12-03T20:50:53.722 [DEBUG] [Thread-123420] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:50:53.737 [DEBUG] [Thread-123420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:50:53.737 [DEBUG] [Thread-123420] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:50:53.737 [DEBUG] [Thread-123420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:50:53.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:50:53.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:50:53.738 [DEBUG] [Thread-123420] [transport.py] [_log()] userauth is OK
2025-12-03T20:50:53.738 [DEBUG] [Thread-123420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:50:53.738 [DEBUG] [Thread-123420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:50:53.738 [DEBUG] [Thread-123420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:50:53.738 [DEBUG] [Thread-123420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:50:53.764 [INFO] [Thread-123420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:50:53.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:50:54.417 [DEBUG] [Thread-123420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:50:54.417 [DEBUG] [Thread-123420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:50:54.417 [DEBUG] [Thread-123420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:50:54.459 [DEBUG] [Thread-123420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:50:54.459 [DEBUG] [Thread-123420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:50:54.461 [DEBUG] [Thread-123420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:50:54.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:50:54.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:50:54.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:50:54.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:50:54.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:50:54.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:50:54.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:50:54.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.785121 -999.00  +16.80  16.40     37   +2.20 1 1 1 1 1     0    0 14.01 -22.76 ZNESW 16.4 16.4 158.1 25.5 17.2 -25.2 17.1 -24.9 16.9 -23.1 17.1 -24.0
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.785121
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:50:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:50:46', tmtdew=16.85, humidity=31.81, cloud=0.0, wind=25.74, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:50:47', seeing=1.07, atlas_timestamp='2025-12-03T18:50:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:50:54.483 [DEBUG] [Thread-123420] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:50:54.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:50:54.566 [DEBUG] [Thread-123423] [transport.py] [_log()] starting thread (client mode): 0xa51e7be0
2025-12-03T20:50:54.567 [DEBUG] [Thread-123423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:50:54.581 [DEBUG] [Thread-123423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:50:54.581 [INFO] [Thread-123423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] client lang: <none>
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] server lang: <none>
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] kex follows: False
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] Compression: none
2025-12-03T20:50:54.594 [DEBUG] [Thread-123423] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:50:54.650 [DEBUG] [Thread-123423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:50:54.650 [DEBUG] [Thread-123423] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:50:54.650 [DEBUG] [Thread-123423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:50:54.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:50:54.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:50:54.708 [DEBUG] [Thread-123423] [transport.py] [_log()] userauth is OK
2025-12-03T20:50:54.708 [DEBUG] [Thread-123423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:50:54.708 [DEBUG] [Thread-123423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:50:54.708 [DEBUG] [Thread-123423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:50:54.708 [DEBUG] [Thread-123423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:50:54.721 [INFO] [Thread-123423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:50:54.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:50:54.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:50:55.543 [DEBUG] [Thread-123423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:50:55.543 [DEBUG] [Thread-123423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:50:55.590 [DEBUG] [Thread-123423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:50:55.590 [DEBUG] [Thread-123423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:50:55.600 [DEBUG] [Thread-123423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:50:55.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:50:55.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:50:55.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:50:55.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:50:55.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:50:55.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:50:55.631 [DEBUG] [Thread-123423] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:51:00.115 [DEBUG] [Thread-123425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:01.868 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:08.843 [DEBUG] [Thread-123426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:15.147 [DEBUG] [Thread-123427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:22.365 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:25.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:51:25.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:51:25.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:51:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 51, 19), 16.85, 31.79, 0.0, 27.95, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:51:26.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:51:19
2025-12-03T20:51:26.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:51:26.788 [DEBUG] [Thread-123428] [transport.py] [_log()] starting thread (client mode): 0xa517d8d0
2025-12-03T20:51:26.788 [DEBUG] [Thread-123428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:51:26.809 [DEBUG] [Thread-123428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:51:26.809 [INFO] [Thread-123428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] client lang: <none>
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] server lang: <none>
2025-12-03T20:51:26.812 [DEBUG] [Thread-123428] [transport.py] [_log()] kex follows: False
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] Compression: none
2025-12-03T20:51:26.813 [DEBUG] [Thread-123428] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:51:26.829 [DEBUG] [Thread-123428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:51:26.829 [DEBUG] [Thread-123428] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:51:26.829 [DEBUG] [Thread-123428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:51:26.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:51:26.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:51:26.830 [DEBUG] [Thread-123428] [transport.py] [_log()] userauth is OK
2025-12-03T20:51:26.830 [DEBUG] [Thread-123428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:51:26.830 [DEBUG] [Thread-123428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:51:26.830 [DEBUG] [Thread-123428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:51:26.830 [DEBUG] [Thread-123428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:51:26.856 [INFO] [Thread-123428] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:51:26.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:51:27.475 [DEBUG] [Thread-123428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:51:27.475 [DEBUG] [Thread-123428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:51:27.475 [DEBUG] [Thread-123428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:51:27.515 [DEBUG] [Thread-123428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:51:27.515 [DEBUG] [Thread-123428] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:51:27.518 [DEBUG] [Thread-123428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:51:27.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:51:27.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:51:27.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:51:27.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:51:27.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:51:27.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:51:27.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.785468 -999.00  +16.80  15.08     37   +2.10 1 1 1 1 1     0    0 14.02 -22.64 ZNESW 15.1 15.1 150.2 22.8 17.1 -25.4 17.0 -24.7 16.8 -23.1 17.1 -23.7
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.785468
2025-12-03T20:51:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:51:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:51:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:51:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:51:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:51:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:51:19', tmtdew=16.85, humidity=31.79, cloud=0.0, wind=27.95, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:51:19', seeing=1.07, atlas_timestamp='2025-12-03T18:51:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:51:27.538 [DEBUG] [Thread-123428] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:51:27.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:51:27.624 [DEBUG] [Thread-123431] [transport.py] [_log()] starting thread (client mode): 0xa51d2050
2025-12-03T20:51:27.624 [DEBUG] [Thread-123431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:51:27.641 [DEBUG] [Thread-123431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:51:27.641 [INFO] [Thread-123431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:51:27.648 [DEBUG] [Thread-123431] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] client lang: <none>
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] server lang: <none>
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] kex follows: False
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] Compression: none
2025-12-03T20:51:27.649 [DEBUG] [Thread-123431] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:51:27.707 [DEBUG] [Thread-123431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:51:27.707 [DEBUG] [Thread-123431] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:51:27.707 [DEBUG] [Thread-123431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:51:27.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:51:27.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:51:27.768 [DEBUG] [Thread-123431] [transport.py] [_log()] userauth is OK
2025-12-03T20:51:27.768 [DEBUG] [Thread-123431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:51:27.768 [DEBUG] [Thread-123431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:51:27.768 [DEBUG] [Thread-123431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:51:27.768 [DEBUG] [Thread-123431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:51:27.783 [INFO] [Thread-123431] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:51:27.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:51:27.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:51:28.624 [DEBUG] [Thread-123431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:51:28.624 [DEBUG] [Thread-123431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:51:28.671 [DEBUG] [Thread-123431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:51:28.671 [DEBUG] [Thread-123431] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:51:28.682 [DEBUG] [Thread-123431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:51:28.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:51:28.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:51:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:51:28.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:51:28.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:51:28.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:51:28.715 [DEBUG] [Thread-123431] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:51:30.170 [DEBUG] [Thread-123433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:42.860 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:43.410 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:43.411 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:45.201 [DEBUG] [Thread-123434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:51:58.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:51:58.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:51:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:51:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 51, 51), 16.86, 31.79, 0.0, 29.34, 16.92, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:51:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:51:51
2025-12-03T20:51:59.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:51:59.843 [DEBUG] [Thread-123435] [transport.py] [_log()] starting thread (client mode): 0xa517d2d0
2025-12-03T20:51:59.843 [DEBUG] [Thread-123435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:51:59.864 [DEBUG] [Thread-123435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:51:59.864 [INFO] [Thread-123435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] client lang: <none>
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] server lang: <none>
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] kex follows: False
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] Compression: none
2025-12-03T20:51:59.868 [DEBUG] [Thread-123435] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:51:59.884 [DEBUG] [Thread-123435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:51:59.884 [DEBUG] [Thread-123435] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:51:59.884 [DEBUG] [Thread-123435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:51:59.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:51:59.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:51:59.885 [DEBUG] [Thread-123435] [transport.py] [_log()] userauth is OK
2025-12-03T20:51:59.885 [DEBUG] [Thread-123435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:51:59.885 [DEBUG] [Thread-123435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:51:59.885 [DEBUG] [Thread-123435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:51:59.885 [DEBUG] [Thread-123435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:51:59.898 [INFO] [Thread-123435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:51:59.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:52:00.221 [DEBUG] [Thread-123437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:00.558 [DEBUG] [Thread-123435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:52:00.558 [DEBUG] [Thread-123435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:52:00.558 [DEBUG] [Thread-123435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:52:00.599 [DEBUG] [Thread-123435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:52:00.599 [DEBUG] [Thread-123435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:52:00.602 [DEBUG] [Thread-123435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:52:00.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:52:00.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:52:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:52:00.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:52:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:52:00.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:52:00.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.785815 -999.00  +16.80  20.57     37   +2.10 1 1 1 1 1     0    0 14.20 -21.26 ZNESW 20.6 20.6 145.6 24.1 17.1 -25.3 17.0 -24.9 16.8 -23.1 17.1 -24.1
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.785815
2025-12-03T20:52:00.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:51:51', tmtdew=16.86, humidity=31.79, cloud=0.0, wind=29.34, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:51:52', seeing=1.17, atlas_timestamp='2025-12-03T18:51:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:52:00.624 [DEBUG] [Thread-123435] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:52:00.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:52:00.707 [DEBUG] [Thread-123439] [transport.py] [_log()] starting thread (client mode): 0xa2751db0
2025-12-03T20:52:00.707 [DEBUG] [Thread-123439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:52:00.721 [DEBUG] [Thread-123439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:52:00.721 [INFO] [Thread-123439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:52:00.728 [DEBUG] [Thread-123439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:52:00.728 [DEBUG] [Thread-123439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] client lang: <none>
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] server lang: <none>
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] kex follows: False
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] Compression: none
2025-12-03T20:52:00.729 [DEBUG] [Thread-123439] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:52:00.791 [DEBUG] [Thread-123439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:52:00.791 [DEBUG] [Thread-123439] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:52:00.791 [DEBUG] [Thread-123439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:52:00.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:52:00.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:52:00.851 [DEBUG] [Thread-123439] [transport.py] [_log()] userauth is OK
2025-12-03T20:52:00.851 [DEBUG] [Thread-123439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:52:00.851 [DEBUG] [Thread-123439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:52:00.851 [DEBUG] [Thread-123439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:52:00.851 [DEBUG] [Thread-123439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:52:00.865 [INFO] [Thread-123439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:52:00.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:52:00.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:52:01.713 [DEBUG] [Thread-123439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:52:01.713 [DEBUG] [Thread-123439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:52:01.761 [DEBUG] [Thread-123439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:52:01.761 [DEBUG] [Thread-123439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:52:01.769 [DEBUG] [Thread-123439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:52:01.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:52:01.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:52:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:52:01.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:52:01.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:52:01.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:52:01.801 [DEBUG] [Thread-123439] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:52:03.408 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:08.920 [DEBUG] [Thread-123441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:15.252 [DEBUG] [Thread-123442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:23.963 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:30.306 [DEBUG] [Thread-123443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:31.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:52:31.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:52:31.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:52:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 52, 24), 16.88, 31.72, 0.0, 28.6, 16.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:52:32.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:52:24
2025-12-03T20:52:32.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:52:32.809 [DEBUG] [Thread-123444] [transport.py] [_log()] starting thread (client mode): 0xa271ca30
2025-12-03T20:52:32.810 [DEBUG] [Thread-123444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:52:32.830 [DEBUG] [Thread-123444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:52:32.830 [INFO] [Thread-123444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:52:32.832 [DEBUG] [Thread-123444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:52:32.832 [DEBUG] [Thread-123444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:52:32.832 [DEBUG] [Thread-123444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:52:32.832 [DEBUG] [Thread-123444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] client lang: <none>
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] server lang: <none>
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] kex follows: False
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:52:32.833 [DEBUG] [Thread-123444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:52:32.834 [DEBUG] [Thread-123444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:52:32.834 [DEBUG] [Thread-123444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:52:32.834 [DEBUG] [Thread-123444] [transport.py] [_log()] Compression: none
2025-12-03T20:52:32.834 [DEBUG] [Thread-123444] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:52:32.844 [DEBUG] [Thread-123444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:52:32.845 [DEBUG] [Thread-123444] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:52:32.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:52:32.846 [DEBUG] [Thread-123444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:52:32.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:52:32.847 [DEBUG] [Thread-123444] [transport.py] [_log()] userauth is OK
2025-12-03T20:52:32.847 [DEBUG] [Thread-123444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:52:32.847 [DEBUG] [Thread-123444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:52:32.847 [DEBUG] [Thread-123444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:52:32.848 [DEBUG] [Thread-123444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:52:32.866 [INFO] [Thread-123444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:52:32.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:52:33.501 [DEBUG] [Thread-123444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:52:33.501 [DEBUG] [Thread-123444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:52:33.502 [DEBUG] [Thread-123444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:52:33.542 [DEBUG] [Thread-123444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:52:33.542 [DEBUG] [Thread-123444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:52:33.545 [DEBUG] [Thread-123444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:52:33.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:52:33.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:52:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:52:33.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:52:33.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:52:33.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:52:33.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:52:33.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.786162 -999.00  +16.80  22.31     37   +2.10 1 1 1 1 1     0    0 14.04 -19.69 ZNESW 22.3 22.3 144.8 27.6 17.1 -25.2 17.0 -24.7 16.8 -23.1 17.1 -24.0
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.786162
2025-12-03T20:52:33.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:52:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:52:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:52:33.561 [DEBUG] [Thread-123444] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:52:33.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:52:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:52:33.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:52:24', tmtdew=16.88, humidity=31.72, cloud=0.0, wind=28.6, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:52:24', seeing=1.14, atlas_timestamp='2025-12-03T18:52:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:52:33.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:52:33.658 [DEBUG] [Thread-123447] [transport.py] [_log()] starting thread (client mode): 0xa51d3580
2025-12-03T20:52:33.658 [DEBUG] [Thread-123447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:52:33.672 [DEBUG] [Thread-123447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:52:33.672 [INFO] [Thread-123447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:52:33.680 [DEBUG] [Thread-123447] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:52:33.680 [DEBUG] [Thread-123447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:52:33.680 [DEBUG] [Thread-123447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] client lang: <none>
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] server lang: <none>
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] kex follows: False
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] Compression: none
2025-12-03T20:52:33.681 [DEBUG] [Thread-123447] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:52:33.740 [DEBUG] [Thread-123447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:52:33.741 [DEBUG] [Thread-123447] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:52:33.741 [DEBUG] [Thread-123447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:52:33.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:52:33.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:52:33.795 [DEBUG] [Thread-123447] [transport.py] [_log()] userauth is OK
2025-12-03T20:52:33.795 [DEBUG] [Thread-123447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:52:33.795 [DEBUG] [Thread-123447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:52:33.795 [DEBUG] [Thread-123447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:52:33.795 [DEBUG] [Thread-123447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:52:33.809 [INFO] [Thread-123447] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:52:33.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:52:33.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:52:34.639 [DEBUG] [Thread-123447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:52:34.639 [DEBUG] [Thread-123447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:52:34.688 [DEBUG] [Thread-123447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:52:34.688 [DEBUG] [Thread-123447] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:52:34.697 [DEBUG] [Thread-123447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:52:34.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:52:34.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:52:34.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:52:34.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:52:34.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:52:34.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:52:34.732 [DEBUG] [Thread-123447] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:52:43.609 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:43.611 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:44.369 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:52:45.335 [DEBUG] [Thread-123449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:00.382 [DEBUG] [Thread-123450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:04.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:53:04.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:53:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:53:04.769 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 52, 56), 16.82, 31.76, 0.0, 25.0, 16.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:53:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:52:56
2025-12-03T20:53:05.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:53:05.761 [DEBUG] [Thread-123451] [transport.py] [_log()] starting thread (client mode): 0xa27790c0
2025-12-03T20:53:05.761 [DEBUG] [Thread-123451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:53:05.781 [DEBUG] [Thread-123451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:53:05.781 [INFO] [Thread-123451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:53:05.782 [DEBUG] [Thread-123451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:53:05.782 [DEBUG] [Thread-123451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:53:05.782 [DEBUG] [Thread-123451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] client lang: <none>
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] server lang: <none>
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] kex follows: False
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] Compression: none
2025-12-03T20:53:05.783 [DEBUG] [Thread-123451] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:53:05.802 [DEBUG] [Thread-123451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:53:05.802 [DEBUG] [Thread-123451] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:53:05.803 [DEBUG] [Thread-123451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:53:05.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:53:05.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:53:05.805 [DEBUG] [Thread-123451] [transport.py] [_log()] userauth is OK
2025-12-03T20:53:05.805 [DEBUG] [Thread-123451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:53:05.805 [DEBUG] [Thread-123451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:53:05.805 [DEBUG] [Thread-123451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:53:05.805 [DEBUG] [Thread-123451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:53:05.828 [INFO] [Thread-123451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:53:05.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:53:06.423 [DEBUG] [Thread-123451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:53:06.423 [DEBUG] [Thread-123451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:53:06.424 [DEBUG] [Thread-123451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:53:06.464 [DEBUG] [Thread-123451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:53:06.465 [DEBUG] [Thread-123451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:53:06.469 [DEBUG] [Thread-123451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:53:06.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:53:06.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:53:06.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:53:06.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:53:06.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:53:06.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:53:06.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:53:06.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:53:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:53:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.786510 -999.00  +16.80  17.36     37   +2.10 1 1 1 1 1     0    0 14.15 -19.81 ZNESW 17.4 17.4 147.2 21.5 17.1 -25.2 17.0 -24.8 16.8 -23.2 17.1 -23.9
2025-12-03T20:53:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:53:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:53:06.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.786510
2025-12-03T20:53:06.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:53:06.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:53:06.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:53:06.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:53:06.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:53:06.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:52:56', tmtdew=16.82, humidity=31.76, cloud=0.0, wind=25.0, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:52:56', seeing=1.14, atlas_timestamp='2025-12-03T18:52:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:48:00')
2025-12-03T20:53:06.508 [DEBUG] [Thread-123451] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:53:06.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:53:06.606 [DEBUG] [Thread-123454] [transport.py] [_log()] starting thread (client mode): 0xa5149c30
2025-12-03T20:53:06.606 [DEBUG] [Thread-123454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:53:06.620 [DEBUG] [Thread-123454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:53:06.620 [INFO] [Thread-123454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] client lang: <none>
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] server lang: <none>
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] kex follows: False
2025-12-03T20:53:06.628 [DEBUG] [Thread-123454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] Compression: none
2025-12-03T20:53:06.629 [DEBUG] [Thread-123454] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:53:06.687 [DEBUG] [Thread-123454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:53:06.688 [DEBUG] [Thread-123454] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:53:06.688 [DEBUG] [Thread-123454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:53:06.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:53:06.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:53:06.743 [DEBUG] [Thread-123454] [transport.py] [_log()] userauth is OK
2025-12-03T20:53:06.744 [DEBUG] [Thread-123454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:53:06.744 [DEBUG] [Thread-123454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:53:06.744 [DEBUG] [Thread-123454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:53:06.744 [DEBUG] [Thread-123454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:53:06.762 [INFO] [Thread-123454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:53:06.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:53:06.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:53:07.574 [DEBUG] [Thread-123454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:53:07.575 [DEBUG] [Thread-123454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:53:07.622 [DEBUG] [Thread-123454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:53:07.623 [DEBUG] [Thread-123454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:53:07.631 [DEBUG] [Thread-123454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:53:07.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:53:07.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:53:07.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:53:07.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:53:07.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:53:07.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:53:07.666 [DEBUG] [Thread-123454] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:53:09.000 [DEBUG] [Thread-123456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:15.414 [DEBUG] [Thread-123457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:25.185 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:30.454 [DEBUG] [Thread-123458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:37.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:53:37.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:53:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:53:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 53, 28), 16.82, 31.74, 0.0, 26.18, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:53:38.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:53:28
2025-12-03T20:53:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:53:38.663 [DEBUG] [Thread-123459] [transport.py] [_log()] starting thread (client mode): 0xa514a2c0
2025-12-03T20:53:38.664 [DEBUG] [Thread-123459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:53:38.684 [DEBUG] [Thread-123459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:53:38.684 [INFO] [Thread-123459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] client lang: <none>
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] server lang: <none>
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] kex follows: False
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] Compression: none
2025-12-03T20:53:38.687 [DEBUG] [Thread-123459] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:53:38.703 [DEBUG] [Thread-123459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:53:38.704 [DEBUG] [Thread-123459] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:53:38.704 [DEBUG] [Thread-123459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:53:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:53:38.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:53:38.706 [DEBUG] [Thread-123459] [transport.py] [_log()] userauth is OK
2025-12-03T20:53:38.706 [DEBUG] [Thread-123459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:53:38.706 [DEBUG] [Thread-123459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:53:38.707 [DEBUG] [Thread-123459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:53:38.707 [DEBUG] [Thread-123459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:53:38.730 [INFO] [Thread-123459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:53:38.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:53:39.492 [DEBUG] [Thread-123459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:53:39.492 [DEBUG] [Thread-123459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:53:39.492 [DEBUG] [Thread-123459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:53:39.533 [DEBUG] [Thread-123459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:53:39.533 [DEBUG] [Thread-123459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:53:39.535 [DEBUG] [Thread-123459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:53:39.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:53:39.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:53:39.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:53:39.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:53:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:53:39.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:53:39.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.786510 -999.00  +16.80  17.36     37   +2.10 1 1 1 1 1     0    0 14.15 -19.81 ZNESW 17.4 17.4 147.2 21.5 17.1 -25.2 17.0 -24.8 16.8 -23.2 17.1 -23.9
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:53:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.786510
2025-12-03T20:53:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:53:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:53:39.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:53:39.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:53:39.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:53:39.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:53:28', tmtdew=16.82, humidity=31.74, cloud=0.0, wind=26.18, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:53:28', seeing=1.18, atlas_timestamp='2025-12-03T18:52:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:52:00')
2025-12-03T20:53:39.557 [DEBUG] [Thread-123459] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:53:39.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:53:39.652 [DEBUG] [Thread-123462] [transport.py] [_log()] starting thread (client mode): 0xa2762890
2025-12-03T20:53:39.653 [DEBUG] [Thread-123462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:53:39.667 [DEBUG] [Thread-123462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:53:39.667 [INFO] [Thread-123462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] client lang: <none>
2025-12-03T20:53:39.675 [DEBUG] [Thread-123462] [transport.py] [_log()] server lang: <none>
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] kex follows: False
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] Compression: none
2025-12-03T20:53:39.676 [DEBUG] [Thread-123462] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:53:39.735 [DEBUG] [Thread-123462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:53:39.735 [DEBUG] [Thread-123462] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:53:39.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:53:39.736 [DEBUG] [Thread-123462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:53:39.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:53:39.791 [DEBUG] [Thread-123462] [transport.py] [_log()] userauth is OK
2025-12-03T20:53:39.791 [DEBUG] [Thread-123462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:53:39.791 [DEBUG] [Thread-123462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:53:39.791 [DEBUG] [Thread-123462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:53:39.792 [DEBUG] [Thread-123462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:53:39.811 [INFO] [Thread-123462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:53:39.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:53:39.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:53:40.621 [DEBUG] [Thread-123462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:53:40.622 [DEBUG] [Thread-123462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:53:40.670 [DEBUG] [Thread-123462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:53:40.670 [DEBUG] [Thread-123462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:53:40.679 [DEBUG] [Thread-123462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:53:40.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:53:40.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:53:40.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:53:40.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:53:40.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:53:40.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:53:40.713 [DEBUG] [Thread-123462] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:53:43.826 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:43.827 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:45.481 [DEBUG] [Thread-123464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:53:45.612 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:00.521 [DEBUG] [Thread-123465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:06.045 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:09.091 [DEBUG] [Thread-123466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:54:10.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:54:10.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:54:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 54), 16.83, 31.74, 0.0, 30.45, 16.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:54:11.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:54:00
2025-12-03T20:54:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:54:11.706 [DEBUG] [Thread-123467] [transport.py] [_log()] starting thread (client mode): 0xa271f520
2025-12-03T20:54:11.706 [DEBUG] [Thread-123467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:54:11.726 [DEBUG] [Thread-123467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:54:11.727 [INFO] [Thread-123467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:54:11.737 [DEBUG] [Thread-123467] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:54:11.737 [DEBUG] [Thread-123467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:54:11.737 [DEBUG] [Thread-123467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:54:11.737 [DEBUG] [Thread-123467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:11.737 [DEBUG] [Thread-123467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] client lang: <none>
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] server lang: <none>
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] kex follows: False
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:54:11.738 [DEBUG] [Thread-123467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:54:11.739 [DEBUG] [Thread-123467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:54:11.739 [DEBUG] [Thread-123467] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:54:11.739 [DEBUG] [Thread-123467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:54:11.739 [DEBUG] [Thread-123467] [transport.py] [_log()] Compression: none
2025-12-03T20:54:11.739 [DEBUG] [Thread-123467] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:54:11.758 [DEBUG] [Thread-123467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:54:11.759 [DEBUG] [Thread-123467] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:54:11.759 [DEBUG] [Thread-123467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:54:11.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:54:11.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:54:11.761 [DEBUG] [Thread-123467] [transport.py] [_log()] userauth is OK
2025-12-03T20:54:11.762 [DEBUG] [Thread-123467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:54:11.762 [DEBUG] [Thread-123467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:54:11.762 [DEBUG] [Thread-123467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:54:11.762 [DEBUG] [Thread-123467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:54:11.786 [INFO] [Thread-123467] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:54:11.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:54:12.437 [DEBUG] [Thread-123467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:54:12.437 [DEBUG] [Thread-123467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:54:12.437 [DEBUG] [Thread-123467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:54:12.478 [DEBUG] [Thread-123467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:54:12.478 [DEBUG] [Thread-123467] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:54:12.481 [DEBUG] [Thread-123467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:54:12.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:54:12.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:54:12.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:54:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:54:12.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:54:12.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:54:12.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:54:12.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.787204 -999.00  +16.80  17.83     37   +2.10 1 1 1 1 1     0    0 14.31 -18.10 ZNESW 17.8 17.8 147.6 22.8 17.1 -25.2 17.0 -24.9 16.8 -23.0 17.1 -23.9
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.787204
2025-12-03T20:54:12.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:54:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:54:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:54:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:54:12.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:54:12.512 [DEBUG] [Thread-123467] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:54:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:54:00', tmtdew=16.83, humidity=31.74, cloud=0.0, wind=30.45, temperature=16.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:54:00', seeing=1.36, atlas_timestamp='2025-12-03T18:53:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:52:00')
2025-12-03T20:54:12.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:54:12.611 [DEBUG] [Thread-123470] [transport.py] [_log()] starting thread (client mode): 0xa277b640
2025-12-03T20:54:12.611 [DEBUG] [Thread-123470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:54:12.625 [DEBUG] [Thread-123470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:54:12.625 [INFO] [Thread-123470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] client lang: <none>
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] server lang: <none>
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] kex follows: False
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] Compression: none
2025-12-03T20:54:12.634 [DEBUG] [Thread-123470] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:54:12.689 [DEBUG] [Thread-123470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:54:12.690 [DEBUG] [Thread-123470] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:54:12.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:54:12.691 [DEBUG] [Thread-123470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:54:12.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:54:12.747 [DEBUG] [Thread-123470] [transport.py] [_log()] userauth is OK
2025-12-03T20:54:12.747 [DEBUG] [Thread-123470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:54:12.747 [DEBUG] [Thread-123470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:54:12.747 [DEBUG] [Thread-123470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:54:12.747 [DEBUG] [Thread-123470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:54:12.766 [INFO] [Thread-123470] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:54:12.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:54:12.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:54:13.553 [DEBUG] [Thread-123470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:54:13.553 [DEBUG] [Thread-123470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:54:13.601 [DEBUG] [Thread-123470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:54:13.601 [DEBUG] [Thread-123470] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:54:13.610 [DEBUG] [Thread-123470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:54:13.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:54:13.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:54:13.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:54:13.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:54:13.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:54:13.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:54:13.644 [DEBUG] [Thread-123470] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:54:15.550 [DEBUG] [Thread-123472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:26.416 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:30.592 [DEBUG] [Thread-123473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:54:43.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:54:43.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:54:44.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:44.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 54, 32), 16.84, 31.71, 0.0, 28.09, 16.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:54:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:54:32
2025-12-03T20:54:44.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:54:44.643 [DEBUG] [Thread-123474] [transport.py] [_log()] starting thread (client mode): 0xa2778880
2025-12-03T20:54:44.643 [DEBUG] [Thread-123474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:54:44.662 [DEBUG] [Thread-123474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:54:44.663 [INFO] [Thread-123474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:54:44.664 [DEBUG] [Thread-123474] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:54:44.664 [DEBUG] [Thread-123474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:54:44.664 [DEBUG] [Thread-123474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] client lang: <none>
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] server lang: <none>
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] kex follows: False
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] Compression: none
2025-12-03T20:54:44.665 [DEBUG] [Thread-123474] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:54:44.679 [DEBUG] [Thread-123474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:54:44.679 [DEBUG] [Thread-123474] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:54:44.680 [DEBUG] [Thread-123474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:54:44.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:54:44.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:54:44.682 [DEBUG] [Thread-123474] [transport.py] [_log()] userauth is OK
2025-12-03T20:54:44.682 [DEBUG] [Thread-123474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:54:44.682 [DEBUG] [Thread-123474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:54:44.682 [DEBUG] [Thread-123474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:54:44.682 [DEBUG] [Thread-123474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:54:44.706 [INFO] [Thread-123474] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:54:44.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:54:45.459 [DEBUG] [Thread-123474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:54:45.459 [DEBUG] [Thread-123474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:54:45.459 [DEBUG] [Thread-123474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:54:45.500 [DEBUG] [Thread-123474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:54:45.500 [DEBUG] [Thread-123474] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:54:45.503 [DEBUG] [Thread-123474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:54:45.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:54:45.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:54:45.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:54:45.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:54:45.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:54:45.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:54:45.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:54:45.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.787551 -999.00  +16.80  18.15     37   +2.10 1 1 1 1 1     0    0 14.54 -16.87 ZNESW 18.1 18.1 149.2 23.3 17.1 -25.2 17.0 -24.7 16.8 -23.1 17.1 -23.9
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.787551
2025-12-03T20:54:45.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:54:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:54:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:54:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:54:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:54:45.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:54:32', tmtdew=16.84, humidity=31.71, cloud=0.0, wind=28.09, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:54:33', seeing=1.25, atlas_timestamp='2025-12-03T18:54:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:52:00')
2025-12-03T20:54:45.527 [DEBUG] [Thread-123474] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:54:45.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:54:45.617 [DEBUG] [Thread-123477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:54:45.622 [DEBUG] [Thread-123478] [transport.py] [_log()] starting thread (client mode): 0xa277a530
2025-12-03T20:54:45.622 [DEBUG] [Thread-123478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:54:45.637 [DEBUG] [Thread-123478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:54:45.637 [INFO] [Thread-123478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:45.645 [DEBUG] [Thread-123478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] client lang: <none>
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] server lang: <none>
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] kex follows: False
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:54:45.646 [DEBUG] [Thread-123478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:54:45.647 [DEBUG] [Thread-123478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:54:45.647 [DEBUG] [Thread-123478] [transport.py] [_log()] Compression: none
2025-12-03T20:54:45.647 [DEBUG] [Thread-123478] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:54:45.703 [DEBUG] [Thread-123478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:54:45.703 [DEBUG] [Thread-123478] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:54:45.704 [DEBUG] [Thread-123478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:54:45.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:54:45.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:54:45.759 [DEBUG] [Thread-123478] [transport.py] [_log()] userauth is OK
2025-12-03T20:54:45.760 [DEBUG] [Thread-123478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:54:45.760 [DEBUG] [Thread-123478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:54:45.760 [DEBUG] [Thread-123478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:54:45.760 [DEBUG] [Thread-123478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:54:45.785 [INFO] [Thread-123478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:54:45.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:54:45.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:54:46.600 [DEBUG] [Thread-123478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:54:46.601 [DEBUG] [Thread-123478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:54:46.649 [DEBUG] [Thread-123478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:54:46.649 [DEBUG] [Thread-123478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:54:46.658 [DEBUG] [Thread-123478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:54:46.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:54:46.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:54:46.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:54:46.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:54:46.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:54:46.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:54:46.699 [DEBUG] [Thread-123478] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:54:46.805 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:00.652 [DEBUG] [Thread-123480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:07.234 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:09.172 [DEBUG] [Thread-123481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:15.688 [DEBUG] [Thread-123482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:16.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:55:16.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:55:16.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:55:17.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 55, 5), 16.83, 31.74, 0.0, 27.65, 16.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:55:17.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:55:05
2025-12-03T20:55:17.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:55:17.707 [DEBUG] [Thread-123483] [transport.py] [_log()] starting thread (client mode): 0xa271f790
2025-12-03T20:55:17.707 [DEBUG] [Thread-123483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:55:17.728 [DEBUG] [Thread-123483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:55:17.728 [INFO] [Thread-123483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] client lang: <none>
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] server lang: <none>
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] kex follows: False
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:55:17.731 [DEBUG] [Thread-123483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:55:17.732 [DEBUG] [Thread-123483] [transport.py] [_log()] Compression: none
2025-12-03T20:55:17.732 [DEBUG] [Thread-123483] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:55:17.751 [DEBUG] [Thread-123483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:55:17.752 [DEBUG] [Thread-123483] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:55:17.752 [DEBUG] [Thread-123483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:55:17.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:55:17.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:55:17.754 [DEBUG] [Thread-123483] [transport.py] [_log()] userauth is OK
2025-12-03T20:55:17.754 [DEBUG] [Thread-123483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:55:17.754 [DEBUG] [Thread-123483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:55:17.754 [DEBUG] [Thread-123483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:55:17.754 [DEBUG] [Thread-123483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:55:17.778 [INFO] [Thread-123483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:55:17.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:55:18.426 [DEBUG] [Thread-123483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:55:18.427 [DEBUG] [Thread-123483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:55:18.427 [DEBUG] [Thread-123483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:55:18.468 [DEBUG] [Thread-123483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:55:18.468 [DEBUG] [Thread-123483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:55:18.471 [DEBUG] [Thread-123483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:55:18.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:55:18.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:55:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:55:18.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:55:18.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:55:18.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:55:18.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:55:18.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.787899 -999.00  +16.80  17.70     37   +2.10 1 1 1 1 1     0    0 14.20 -15.71 ZNESW 17.7 17.7 147.8 24.1 17.1 -25.3 17.0 -24.7 16.8 -23.1 17.1 -24.0
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.787899
2025-12-03T20:55:18.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:55:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:55:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:55:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:55:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:55:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:55:05', tmtdew=16.83, humidity=31.74, cloud=0.0, wind=27.65, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:55:05', seeing=1.25, atlas_timestamp='2025-12-03T18:54:34.474', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:52:00')
2025-12-03T20:55:18.496 [DEBUG] [Thread-123483] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:55:18.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:55:18.594 [DEBUG] [Thread-123486] [transport.py] [_log()] starting thread (client mode): 0xa51488b0
2025-12-03T20:55:18.594 [DEBUG] [Thread-123486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:55:18.609 [DEBUG] [Thread-123486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:55:18.609 [INFO] [Thread-123486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:55:18.616 [DEBUG] [Thread-123486] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:55:18.616 [DEBUG] [Thread-123486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:55:18.616 [DEBUG] [Thread-123486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:55:18.616 [DEBUG] [Thread-123486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] client lang: <none>
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] server lang: <none>
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] kex follows: False
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] Compression: none
2025-12-03T20:55:18.617 [DEBUG] [Thread-123486] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:55:18.673 [DEBUG] [Thread-123486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:55:18.674 [DEBUG] [Thread-123486] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:55:18.674 [DEBUG] [Thread-123486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:55:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:55:18.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:55:18.731 [DEBUG] [Thread-123486] [transport.py] [_log()] userauth is OK
2025-12-03T20:55:18.731 [DEBUG] [Thread-123486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:55:18.731 [DEBUG] [Thread-123486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:55:18.731 [DEBUG] [Thread-123486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:55:18.731 [DEBUG] [Thread-123486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:55:18.752 [INFO] [Thread-123486] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:55:18.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:55:18.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:55:19.549 [DEBUG] [Thread-123486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:55:19.549 [DEBUG] [Thread-123486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:55:19.597 [DEBUG] [Thread-123486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:55:19.597 [DEBUG] [Thread-123486] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:55:19.606 [DEBUG] [Thread-123486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:55:19.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:55:19.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:55:19.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:55:19.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:55:19.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:55:19.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:55:19.640 [DEBUG] [Thread-123486] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:55:27.642 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:30.721 [DEBUG] [Thread-123488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:44.224 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:44.225 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:45.772 [DEBUG] [Thread-123489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:48.028 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:55:49.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:55:49.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:55:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:55:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 55, 37), 16.86, 31.77, 0.0, 25.76, 16.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:55:50.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:55:37
2025-12-03T20:55:50.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:55:50.633 [DEBUG] [Thread-123490] [transport.py] [_log()] starting thread (client mode): 0xa51e5cf0
2025-12-03T20:55:50.633 [DEBUG] [Thread-123490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:55:50.652 [DEBUG] [Thread-123490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:55:50.653 [INFO] [Thread-123490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] client lang: <none>
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] server lang: <none>
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] kex follows: False
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] Compression: none
2025-12-03T20:55:50.656 [DEBUG] [Thread-123490] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:55:50.674 [DEBUG] [Thread-123490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:55:50.675 [DEBUG] [Thread-123490] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:55:50.675 [DEBUG] [Thread-123490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:55:50.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:55:50.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:55:50.677 [DEBUG] [Thread-123490] [transport.py] [_log()] userauth is OK
2025-12-03T20:55:50.677 [DEBUG] [Thread-123490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:55:50.678 [DEBUG] [Thread-123490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:55:50.678 [DEBUG] [Thread-123490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:55:50.678 [DEBUG] [Thread-123490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:55:50.700 [INFO] [Thread-123490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:55:50.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:55:51.310 [DEBUG] [Thread-123490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:55:51.311 [DEBUG] [Thread-123490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:55:51.311 [DEBUG] [Thread-123490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:55:51.352 [DEBUG] [Thread-123490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:55:51.352 [DEBUG] [Thread-123490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:55:51.355 [DEBUG] [Thread-123490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:55:51.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:55:51.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:55:51.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:55:51.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:55:51.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:55:51.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:55:51.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:55:51.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.788245 -999.00  +16.80  15.05     37   +2.10 1 1 1 1 1     0    0 14.25 -15.41 ZNESW 15.1 15.1 145.7 22.4 17.1 -25.3 17.0 -24.6 16.8 -23.2 17.0 -23.7
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.788245
2025-12-03T20:55:51.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:55:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:55:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:55:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:55:51.379 [DEBUG] [Thread-123490] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:55:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:55:51.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:55:37', tmtdew=16.86, humidity=31.77, cloud=0.0, wind=25.76, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:55:37', seeing=1.14, atlas_timestamp='2025-12-03T18:55:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011750000000001037, 0.06975000000000087, 0.05325000000000024, -0.025000000000000355, 0.03200000000000003, 0.005250000000000199, 0.045499999999998764, -0.016749999999998266, -0.03200000000000003, -0.016000000000000014, 0.05524999999999913, 0.013999999999999346, 0.0039999999999995595, -0.019750000000000156, -0.03049999999999997, -0.14800000000000146, 0.05524999999999913, 0.027499999999999858, 0.06349999999999945, 0.03724999999999845, 0.09999999999999787, 0.08174999999999955, 0.01624999999999943, -0.24675000000000047, 0.006999999999999673, 0.03850000000000087, 0.06425000000000125, 0.044500000000001094, 0.15600000000000058, -0.009999999999999787, 0.0860000000000003, -0.5544999999999991, -0.030250000000000554], zp_timestamp='2025-12-03T18:52:00')
2025-12-03T20:55:51.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:55:51.486 [DEBUG] [Thread-123493] [transport.py] [_log()] starting thread (client mode): 0xa51e74c0
2025-12-03T20:55:51.486 [DEBUG] [Thread-123493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:55:51.501 [DEBUG] [Thread-123493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:55:51.501 [INFO] [Thread-123493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] client lang: <none>
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] server lang: <none>
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] kex follows: False
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:55:51.509 [DEBUG] [Thread-123493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:55:51.510 [DEBUG] [Thread-123493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:55:51.510 [DEBUG] [Thread-123493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:55:51.510 [DEBUG] [Thread-123493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:55:51.510 [DEBUG] [Thread-123493] [transport.py] [_log()] Compression: none
2025-12-03T20:55:51.510 [DEBUG] [Thread-123493] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:55:51.566 [DEBUG] [Thread-123493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:55:51.566 [DEBUG] [Thread-123493] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:55:51.567 [DEBUG] [Thread-123493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:55:51.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:55:51.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:55:51.622 [DEBUG] [Thread-123493] [transport.py] [_log()] userauth is OK
2025-12-03T20:55:51.622 [DEBUG] [Thread-123493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:55:51.622 [DEBUG] [Thread-123493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:55:51.622 [DEBUG] [Thread-123493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:55:51.622 [DEBUG] [Thread-123493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:55:51.642 [INFO] [Thread-123493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:55:51.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:55:51.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:55:52.426 [DEBUG] [Thread-123493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:55:52.426 [DEBUG] [Thread-123493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:55:52.474 [DEBUG] [Thread-123493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:55:52.474 [DEBUG] [Thread-123493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:55:52.483 [DEBUG] [Thread-123493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:55:52.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:55:52.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:55:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:55:52.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:55:52.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:55:52.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:55:52.517 [DEBUG] [Thread-123493] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:56:00.815 [DEBUG] [Thread-123495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:08.411 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:09.228 [DEBUG] [Thread-123496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:15.870 [DEBUG] [Thread-123497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:22.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:56:22.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:56:22.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:56:23.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 56, 9), 16.85, 31.79, 0.0, 24.23, 16.82, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:56:23.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:56:09
2025-12-03T20:56:23.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:56:23.540 [DEBUG] [Thread-123498] [transport.py] [_log()] starting thread (client mode): 0xa2779600
2025-12-03T20:56:23.540 [DEBUG] [Thread-123498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:56:23.561 [DEBUG] [Thread-123498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:56:23.561 [INFO] [Thread-123498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:56:23.564 [DEBUG] [Thread-123498] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:56:23.564 [DEBUG] [Thread-123498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:56:23.564 [DEBUG] [Thread-123498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] client lang: <none>
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] server lang: <none>
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] kex follows: False
2025-12-03T20:56:23.565 [DEBUG] [Thread-123498] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] Compression: none
2025-12-03T20:56:23.566 [DEBUG] [Thread-123498] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:56:23.585 [DEBUG] [Thread-123498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:56:23.585 [DEBUG] [Thread-123498] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:56:23.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:56:23.586 [DEBUG] [Thread-123498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:56:23.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:56:23.588 [DEBUG] [Thread-123498] [transport.py] [_log()] userauth is OK
2025-12-03T20:56:23.588 [DEBUG] [Thread-123498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:56:23.588 [DEBUG] [Thread-123498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:56:23.588 [DEBUG] [Thread-123498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:56:23.589 [DEBUG] [Thread-123498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:56:23.612 [INFO] [Thread-123498] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:56:23.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:56:24.270 [DEBUG] [Thread-123498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:56:24.270 [DEBUG] [Thread-123498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:56:24.271 [DEBUG] [Thread-123498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:56:24.312 [DEBUG] [Thread-123498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:56:24.312 [DEBUG] [Thread-123498] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:56:24.315 [DEBUG] [Thread-123498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:56:24.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:56:24.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:56:24.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:56:24.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:56:24.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:56:24.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:56:24.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:56:24.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.788593 -999.00  +16.70  19.69     37   +2.10 1 1 1 1 1     0    0 14.19 -14.95 ZNESW 19.7 19.7 137.4 28.0 17.1 -25.3 17.0 -24.7 16.8 -23.0 17.0 -23.9
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.788593
2025-12-03T20:56:24.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:56:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:56:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:56:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:56:24.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:56:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:56:09', tmtdew=16.85, humidity=31.79, cloud=0.0, wind=24.23, temperature=16.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:56:09', seeing=1.08, atlas_timestamp='2025-12-03T18:55:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:56:24.351 [DEBUG] [Thread-123498] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:56:24.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:56:24.453 [DEBUG] [Thread-123501] [transport.py] [_log()] starting thread (client mode): 0xa2763460
2025-12-03T20:56:24.453 [DEBUG] [Thread-123501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:56:24.467 [DEBUG] [Thread-123501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:56:24.468 [INFO] [Thread-123501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:56:24.475 [DEBUG] [Thread-123501] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:56:24.475 [DEBUG] [Thread-123501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:56:24.475 [DEBUG] [Thread-123501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] client lang: <none>
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] server lang: <none>
2025-12-03T20:56:24.476 [DEBUG] [Thread-123501] [transport.py] [_log()] kex follows: False
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] Compression: none
2025-12-03T20:56:24.477 [DEBUG] [Thread-123501] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:56:24.534 [DEBUG] [Thread-123501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:56:24.535 [DEBUG] [Thread-123501] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:56:24.535 [DEBUG] [Thread-123501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:56:24.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:56:24.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:56:24.591 [DEBUG] [Thread-123501] [transport.py] [_log()] userauth is OK
2025-12-03T20:56:24.591 [DEBUG] [Thread-123501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:56:24.591 [DEBUG] [Thread-123501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:56:24.591 [DEBUG] [Thread-123501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:56:24.591 [DEBUG] [Thread-123501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:56:24.610 [INFO] [Thread-123501] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:56:24.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:56:24.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:56:25.413 [DEBUG] [Thread-123501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:56:25.413 [DEBUG] [Thread-123501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:56:25.461 [DEBUG] [Thread-123501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:56:25.461 [DEBUG] [Thread-123501] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:56:25.470 [DEBUG] [Thread-123501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:56:25.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:56:25.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:56:25.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:56:25.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:56:25.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:56:25.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:56:25.505 [DEBUG] [Thread-123501] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:56:28.842 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:30.907 [DEBUG] [Thread-123503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:44.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:44.423 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:45.971 [DEBUG] [Thread-123504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:49.262 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:56:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:56:55.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:56:55.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:56:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 56, 41), 16.77, 31.86, 0.0, 25.05, 16.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:56:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:56:41
2025-12-03T20:56:56.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:56:56.494 [DEBUG] [Thread-123505] [transport.py] [_log()] starting thread (client mode): 0xa271cd90
2025-12-03T20:56:56.494 [DEBUG] [Thread-123505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:56:56.514 [DEBUG] [Thread-123505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:56:56.515 [INFO] [Thread-123505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:56:56.517 [DEBUG] [Thread-123505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] client lang: <none>
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] server lang: <none>
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] kex follows: False
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] Compression: none
2025-12-03T20:56:56.518 [DEBUG] [Thread-123505] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:56:56.533 [DEBUG] [Thread-123505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:56:56.533 [DEBUG] [Thread-123505] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:56:56.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:56:56.534 [DEBUG] [Thread-123505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:56:56.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:56:56.536 [DEBUG] [Thread-123505] [transport.py] [_log()] userauth is OK
2025-12-03T20:56:56.536 [DEBUG] [Thread-123505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:56:56.536 [DEBUG] [Thread-123505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:56:56.537 [DEBUG] [Thread-123505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:56:56.537 [DEBUG] [Thread-123505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:56:56.553 [INFO] [Thread-123505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:56:56.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:56:57.217 [DEBUG] [Thread-123505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:56:57.217 [DEBUG] [Thread-123505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:56:57.218 [DEBUG] [Thread-123505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:56:57.259 [DEBUG] [Thread-123505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:56:57.259 [DEBUG] [Thread-123505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:56:57.262 [DEBUG] [Thread-123505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:56:57.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:56:57.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:56:57.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:56:57.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:56:57.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:56:57.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:56:57.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:56:57.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:56:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:56:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.788940 -999.00  +16.80  24.81     37   +2.10 1 1 1 1 1     0    0 14.15 -15.09 ZNESW 24.8 24.8 146.1 27.7 17.1 -25.2 17.0 -24.6 16.8 -23.0 17.1 -24.0
2025-12-03T20:56:57.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:56:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:56:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.788940
2025-12-03T20:56:57.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:56:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:56:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:56:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:56:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:56:57.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:56:41', tmtdew=16.77, humidity=31.86, cloud=0.0, wind=25.05, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:56:41', seeing=1.08, atlas_timestamp='2025-12-03T18:56:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:56:57.284 [DEBUG] [Thread-123505] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:56:57.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:56:57.397 [DEBUG] [Thread-123508] [transport.py] [_log()] starting thread (client mode): 0xa271df30
2025-12-03T20:56:57.397 [DEBUG] [Thread-123508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:56:57.412 [DEBUG] [Thread-123508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:56:57.412 [INFO] [Thread-123508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:56:57.420 [DEBUG] [Thread-123508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] client lang: <none>
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] server lang: <none>
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] kex follows: False
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] Compression: none
2025-12-03T20:56:57.421 [DEBUG] [Thread-123508] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:56:57.478 [DEBUG] [Thread-123508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:56:57.478 [DEBUG] [Thread-123508] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:56:57.479 [DEBUG] [Thread-123508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:56:57.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:56:57.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:56:57.534 [DEBUG] [Thread-123508] [transport.py] [_log()] userauth is OK
2025-12-03T20:56:57.534 [DEBUG] [Thread-123508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:56:57.534 [DEBUG] [Thread-123508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:56:57.534 [DEBUG] [Thread-123508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:56:57.534 [DEBUG] [Thread-123508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:56:57.553 [INFO] [Thread-123508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:56:57.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:56:57.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:56:58.383 [DEBUG] [Thread-123508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:56:58.384 [DEBUG] [Thread-123508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:56:58.432 [DEBUG] [Thread-123508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:56:58.432 [DEBUG] [Thread-123508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:56:58.440 [DEBUG] [Thread-123508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:56:58.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:56:58.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:56:58.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:56:58.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:56:58.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:56:58.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:56:58.477 [DEBUG] [Thread-123508] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:57:01.014 [DEBUG] [Thread-123510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:09.305 [DEBUG] [Thread-123511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:09.671 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:16.070 [DEBUG] [Thread-123512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:28.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:57:28.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:57:28.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:57:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 57, 13), 16.78, 31.84, 0.0, 24.63, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:57:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:57:13
2025-12-03T20:57:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:57:29.477 [DEBUG] [Thread-123513] [transport.py] [_log()] starting thread (client mode): 0xa51e4190
2025-12-03T20:57:29.477 [DEBUG] [Thread-123513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:57:29.498 [DEBUG] [Thread-123513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:57:29.498 [INFO] [Thread-123513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:57:29.501 [DEBUG] [Thread-123513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:57:29.502 [DEBUG] [Thread-123513] [transport.py] [_log()] client lang: <none>
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] server lang: <none>
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] kex follows: False
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:57:29.503 [DEBUG] [Thread-123513] [transport.py] [_log()] Compression: none
2025-12-03T20:57:29.504 [DEBUG] [Thread-123513] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:57:29.519 [DEBUG] [Thread-123513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:57:29.520 [DEBUG] [Thread-123513] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:57:29.520 [DEBUG] [Thread-123513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:57:29.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:57:29.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:57:29.522 [DEBUG] [Thread-123513] [transport.py] [_log()] userauth is OK
2025-12-03T20:57:29.522 [DEBUG] [Thread-123513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:57:29.522 [DEBUG] [Thread-123513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:57:29.523 [DEBUG] [Thread-123513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:57:29.523 [DEBUG] [Thread-123513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:57:29.540 [INFO] [Thread-123513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:57:29.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:57:30.056 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:30.166 [DEBUG] [Thread-123513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:57:30.166 [DEBUG] [Thread-123513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:57:30.166 [DEBUG] [Thread-123513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:57:30.207 [DEBUG] [Thread-123513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:57:30.207 [DEBUG] [Thread-123513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:57:30.210 [DEBUG] [Thread-123513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:57:30.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:57:30.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:57:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:57:30.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:57:30.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:57:30.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:57:30.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:57:30.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:57:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:57:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.789287 -999.00  +16.70  19.30     37   +2.10 1 1 1 1 1     0    0 14.28 -14.90 ZNESW 19.3 19.3 142.6 23.4 17.1 -25.3 17.0 -24.7 16.8 -23.1 17.0 -23.9
2025-12-03T20:57:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:57:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:57:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.789287
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:57:30.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:57:13', tmtdew=16.78, humidity=31.84, cloud=0.0, wind=24.63, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:57:13', seeing=0.92, atlas_timestamp='2025-12-03T18:56:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:57:30.234 [DEBUG] [Thread-123513] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:57:30.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:57:30.337 [DEBUG] [Thread-123516] [transport.py] [_log()] starting thread (client mode): 0xa51e5cf0
2025-12-03T20:57:30.337 [DEBUG] [Thread-123516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:57:30.351 [DEBUG] [Thread-123516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:57:30.351 [INFO] [Thread-123516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] client lang: <none>
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] server lang: <none>
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] kex follows: False
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:57:30.359 [DEBUG] [Thread-123516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:57:30.360 [DEBUG] [Thread-123516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:57:30.360 [DEBUG] [Thread-123516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:57:30.360 [DEBUG] [Thread-123516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:57:30.360 [DEBUG] [Thread-123516] [transport.py] [_log()] Compression: none
2025-12-03T20:57:30.360 [DEBUG] [Thread-123516] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:57:30.422 [DEBUG] [Thread-123516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:57:30.422 [DEBUG] [Thread-123516] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:57:30.423 [DEBUG] [Thread-123516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:57:30.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:57:30.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:57:30.478 [DEBUG] [Thread-123516] [transport.py] [_log()] userauth is OK
2025-12-03T20:57:30.478 [DEBUG] [Thread-123516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:57:30.478 [DEBUG] [Thread-123516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:57:30.478 [DEBUG] [Thread-123516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:57:30.478 [DEBUG] [Thread-123516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:57:30.497 [INFO] [Thread-123516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:57:30.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:57:30.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:57:31.112 [DEBUG] [Thread-123518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:31.297 [DEBUG] [Thread-123516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:57:31.297 [DEBUG] [Thread-123516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:57:31.345 [DEBUG] [Thread-123516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:57:31.345 [DEBUG] [Thread-123516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:57:31.354 [DEBUG] [Thread-123516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:57:31.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:57:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:57:31.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:57:31.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:57:31.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:57:31.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:57:31.396 [DEBUG] [Thread-123516] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:57:44.631 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:44.632 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:46.167 [DEBUG] [Thread-123519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:57:50.440 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:01.201 [DEBUG] [Thread-123520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:01.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:58:01.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:58:01.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:58:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 57, 45), 16.78, 31.84, 0.0, 25.23, 16.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:58:02.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:57:45
2025-12-03T20:58:02.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:58:02.438 [DEBUG] [Thread-123521] [transport.py] [_log()] starting thread (client mode): 0xa277b430
2025-12-03T20:58:02.438 [DEBUG] [Thread-123521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:58:02.458 [DEBUG] [Thread-123521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:58:02.458 [INFO] [Thread-123521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] client lang: <none>
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] server lang: <none>
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] kex follows: False
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:58:02.461 [DEBUG] [Thread-123521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:58:02.462 [DEBUG] [Thread-123521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:58:02.462 [DEBUG] [Thread-123521] [transport.py] [_log()] Compression: none
2025-12-03T20:58:02.462 [DEBUG] [Thread-123521] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:58:02.479 [DEBUG] [Thread-123521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:58:02.480 [DEBUG] [Thread-123521] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:58:02.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:58:02.480 [DEBUG] [Thread-123521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:58:02.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:58:02.481 [DEBUG] [Thread-123521] [transport.py] [_log()] userauth is OK
2025-12-03T20:58:02.481 [DEBUG] [Thread-123521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:58:02.481 [DEBUG] [Thread-123521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:58:02.481 [DEBUG] [Thread-123521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:58:02.481 [DEBUG] [Thread-123521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:58:02.507 [INFO] [Thread-123521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:58:02.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:58:03.156 [DEBUG] [Thread-123521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:58:03.156 [DEBUG] [Thread-123521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:58:03.156 [DEBUG] [Thread-123521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:58:03.197 [DEBUG] [Thread-123521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:58:03.197 [DEBUG] [Thread-123521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:58:03.199 [DEBUG] [Thread-123521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:58:03.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:58:03.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:58:03.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:58:03.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:58:03.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:58:03.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:58:03.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:58:03.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.789982 -999.00  +16.70  19.81     37   +2.10 1 1 1 1 1     0    0 14.47 -14.30 ZNESW 19.8 19.8 143.6 24.5 17.1 -25.3 16.9 -24.8 16.7 -23.0 17.0 -23.9
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.789982
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:58:03.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:58:03.226 [DEBUG] [Thread-123521] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:58:03.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:57:45', tmtdew=16.78, humidity=31.84, cloud=0.0, wind=25.23, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:57:45', seeing=1.0, atlas_timestamp='2025-12-03T18:57:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:58:03.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:58:03.319 [DEBUG] [Thread-123524] [transport.py] [_log()] starting thread (client mode): 0xa27c9810
2025-12-03T20:58:03.319 [DEBUG] [Thread-123524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:58:03.334 [DEBUG] [Thread-123524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:58:03.334 [INFO] [Thread-123524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] client lang: <none>
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] server lang: <none>
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] kex follows: False
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] Compression: none
2025-12-03T20:58:03.342 [DEBUG] [Thread-123524] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:58:03.400 [DEBUG] [Thread-123524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:58:03.400 [DEBUG] [Thread-123524] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:58:03.400 [DEBUG] [Thread-123524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:58:03.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:58:03.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:58:03.458 [DEBUG] [Thread-123524] [transport.py] [_log()] userauth is OK
2025-12-03T20:58:03.458 [DEBUG] [Thread-123524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:58:03.458 [DEBUG] [Thread-123524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:58:03.458 [DEBUG] [Thread-123524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:58:03.458 [DEBUG] [Thread-123524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:58:03.472 [INFO] [Thread-123524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:58:03.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:58:03.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:58:04.292 [DEBUG] [Thread-123524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:58:04.292 [DEBUG] [Thread-123524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:58:04.339 [DEBUG] [Thread-123524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:58:04.340 [DEBUG] [Thread-123524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:58:04.348 [DEBUG] [Thread-123524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:58:04.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:58:04.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:58:04.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:58:04.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:58:04.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:58:04.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:58:04.383 [DEBUG] [Thread-123524] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:58:09.384 [DEBUG] [Thread-123526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:10.823 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:16.237 [DEBUG] [Thread-123527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:31.306 [DEBUG] [Thread-123528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:31.327 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:58:34.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:58:34.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:58:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 58, 17), 16.78, 31.82, 0.0, 23.01, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:58:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:58:17
2025-12-03T20:58:35.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:58:35.367 [DEBUG] [Thread-123529] [transport.py] [_log()] starting thread (client mode): 0xa51e47c0
2025-12-03T20:58:35.367 [DEBUG] [Thread-123529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:58:35.388 [DEBUG] [Thread-123529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:58:35.388 [INFO] [Thread-123529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:58:35.391 [DEBUG] [Thread-123529] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:58:35.391 [DEBUG] [Thread-123529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:58:35.391 [DEBUG] [Thread-123529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] client lang: <none>
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] server lang: <none>
2025-12-03T20:58:35.392 [DEBUG] [Thread-123529] [transport.py] [_log()] kex follows: False
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] Compression: none
2025-12-03T20:58:35.393 [DEBUG] [Thread-123529] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:58:35.413 [DEBUG] [Thread-123529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:58:35.413 [DEBUG] [Thread-123529] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:58:35.414 [DEBUG] [Thread-123529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:58:35.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:58:35.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:58:35.415 [DEBUG] [Thread-123529] [transport.py] [_log()] userauth is OK
2025-12-03T20:58:35.416 [DEBUG] [Thread-123529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:58:35.416 [DEBUG] [Thread-123529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:58:35.416 [DEBUG] [Thread-123529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:58:35.416 [DEBUG] [Thread-123529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:58:35.438 [INFO] [Thread-123529] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:58:35.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:58:36.104 [DEBUG] [Thread-123529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:58:36.105 [DEBUG] [Thread-123529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:58:36.105 [DEBUG] [Thread-123529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:58:36.146 [DEBUG] [Thread-123529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:58:36.146 [DEBUG] [Thread-123529] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:58:36.149 [DEBUG] [Thread-123529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:58:36.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:58:36.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:58:36.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:58:36.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:58:36.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:58:36.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:58:36.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:58:36.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.790329 -999.00  +16.70  16.97     37   +2.10 1 1 1 1 1     0    0 14.25 -13.28 ZNESW 17.0 17.0 155.8 26.3 17.0 -25.0 17.0 -24.8 16.8 -23.1 17.0 -23.9
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.790329
2025-12-03T20:58:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:58:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:58:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:58:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:58:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:58:36.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:58:17', tmtdew=16.78, humidity=31.82, cloud=0.0, wind=23.01, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:58:17', seeing=1.0, atlas_timestamp='2025-12-03T18:58:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:58:36.174 [DEBUG] [Thread-123529] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:58:36.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:58:36.281 [DEBUG] [Thread-123532] [transport.py] [_log()] starting thread (client mode): 0xa2760490
2025-12-03T20:58:36.281 [DEBUG] [Thread-123532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:58:36.301 [DEBUG] [Thread-123532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:58:36.301 [INFO] [Thread-123532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:58:36.311 [DEBUG] [Thread-123532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] client lang: <none>
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] server lang: <none>
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] kex follows: False
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] Compression: none
2025-12-03T20:58:36.312 [DEBUG] [Thread-123532] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:58:36.369 [DEBUG] [Thread-123532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:58:36.370 [DEBUG] [Thread-123532] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:58:36.371 [DEBUG] [Thread-123532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:58:36.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:58:36.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:58:36.425 [DEBUG] [Thread-123532] [transport.py] [_log()] userauth is OK
2025-12-03T20:58:36.425 [DEBUG] [Thread-123532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:58:36.426 [DEBUG] [Thread-123532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:58:36.426 [DEBUG] [Thread-123532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:58:36.426 [DEBUG] [Thread-123532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:58:36.445 [INFO] [Thread-123532] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:58:36.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:58:36.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:58:37.250 [DEBUG] [Thread-123532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:58:37.251 [DEBUG] [Thread-123532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:58:37.299 [DEBUG] [Thread-123532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:58:37.299 [DEBUG] [Thread-123532] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:58:37.308 [DEBUG] [Thread-123532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:58:37.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:58:37.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:58:37.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:58:37.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:58:37.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:58:37.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:58:37.342 [DEBUG] [Thread-123532] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:58:44.846 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:44.846 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:46.340 [DEBUG] [Thread-123534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:58:51.838 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:01.408 [DEBUG] [Thread-123535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:59:07.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:59:07.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:59:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 58, 49), 16.76, 31.87, 0.0, 25.81, 16.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:59:08.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:58:49
2025-12-03T20:59:08.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:59:08.349 [DEBUG] [Thread-123536] [transport.py] [_log()] starting thread (client mode): 0xa2762560
2025-12-03T20:59:08.349 [DEBUG] [Thread-123536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:59:08.371 [DEBUG] [Thread-123536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:59:08.371 [INFO] [Thread-123536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:59:08.374 [DEBUG] [Thread-123536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:59:08.374 [DEBUG] [Thread-123536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:59:08.374 [DEBUG] [Thread-123536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:59:08.374 [DEBUG] [Thread-123536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] client lang: <none>
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] server lang: <none>
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] kex follows: False
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:59:08.375 [DEBUG] [Thread-123536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:59:08.376 [DEBUG] [Thread-123536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:59:08.376 [DEBUG] [Thread-123536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:59:08.376 [DEBUG] [Thread-123536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:59:08.376 [DEBUG] [Thread-123536] [transport.py] [_log()] Compression: none
2025-12-03T20:59:08.376 [DEBUG] [Thread-123536] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:59:08.394 [DEBUG] [Thread-123536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:59:08.395 [DEBUG] [Thread-123536] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:59:08.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:59:08.396 [DEBUG] [Thread-123536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:59:08.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:59:08.397 [DEBUG] [Thread-123536] [transport.py] [_log()] userauth is OK
2025-12-03T20:59:08.398 [DEBUG] [Thread-123536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:59:08.398 [DEBUG] [Thread-123536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:59:08.398 [DEBUG] [Thread-123536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:59:08.398 [DEBUG] [Thread-123536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:59:08.421 [INFO] [Thread-123536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:59:08.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:59:09.060 [DEBUG] [Thread-123536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:59:09.061 [DEBUG] [Thread-123536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:59:09.061 [DEBUG] [Thread-123536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:59:09.102 [DEBUG] [Thread-123536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:59:09.102 [DEBUG] [Thread-123536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:59:09.105 [DEBUG] [Thread-123536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:59:09.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:59:09.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:59:09.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:59:09.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:59:09.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:59:09.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:59:09.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:59:09.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:59:09.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:59:09.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.790676 -999.00  +16.70  17.73     37   +2.10 1 1 1 1 1     0    0 13.98 -13.46 ZNESW 17.7 17.7 136.8 26.5 17.1 -25.3 17.0 -24.7 16.8 -23.1 17.0 -23.9
2025-12-03T20:59:09.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:59:09.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:59:09.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.790676
2025-12-03T20:59:09.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:59:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:59:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:59:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:59:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:59:09.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:58:49', tmtdew=16.76, humidity=31.87, cloud=0.0, wind=25.81, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:58:49', seeing=0.9, atlas_timestamp='2025-12-03T18:58:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:55:00')
2025-12-03T20:59:09.130 [DEBUG] [Thread-123536] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:59:09.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:59:09.233 [DEBUG] [Thread-123539] [transport.py] [_log()] starting thread (client mode): 0xa51e7fa0
2025-12-03T20:59:09.234 [DEBUG] [Thread-123539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:59:09.249 [DEBUG] [Thread-123539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:59:09.249 [INFO] [Thread-123539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:09.257 [DEBUG] [Thread-123539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] client lang: <none>
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] server lang: <none>
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] kex follows: False
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] Compression: none
2025-12-03T20:59:09.258 [DEBUG] [Thread-123539] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:59:09.312 [DEBUG] [Thread-123539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:59:09.313 [DEBUG] [Thread-123539] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:59:09.313 [DEBUG] [Thread-123539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:59:09.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:59:09.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:59:09.369 [DEBUG] [Thread-123539] [transport.py] [_log()] userauth is OK
2025-12-03T20:59:09.369 [DEBUG] [Thread-123539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:59:09.369 [DEBUG] [Thread-123539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:59:09.369 [DEBUG] [Thread-123539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:59:09.369 [DEBUG] [Thread-123539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:59:09.392 [INFO] [Thread-123539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:59:09.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:59:09.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:59:09.449 [DEBUG] [Thread-123541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:10.210 [DEBUG] [Thread-123539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:59:10.211 [DEBUG] [Thread-123539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:59:10.259 [DEBUG] [Thread-123539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:59:10.259 [DEBUG] [Thread-123539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:59:10.268 [DEBUG] [Thread-123539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:59:10.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:59:10.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:59:10.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:59:10.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:59:10.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:59:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:59:10.304 [DEBUG] [Thread-123539] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:59:12.441 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:16.445 [DEBUG] [Thread-123542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:31.492 [DEBUG] [Thread-123543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:32.864 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:40.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T20:59:40.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T20:59:40.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T20:59:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 59, 21), 16.74, 31.92, 0.0, 27.01, 16.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T20:59:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:59:21
2025-12-03T20:59:41.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T20:59:41.288 [DEBUG] [Thread-123544] [transport.py] [_log()] starting thread (client mode): 0xa2762cb0
2025-12-03T20:59:41.288 [DEBUG] [Thread-123544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:59:41.308 [DEBUG] [Thread-123544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T20:59:41.309 [INFO] [Thread-123544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] client lang: <none>
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] server lang: <none>
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] kex follows: False
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] Compression: none
2025-12-03T20:59:41.312 [DEBUG] [Thread-123544] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:59:41.329 [DEBUG] [Thread-123544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:59:41.329 [DEBUG] [Thread-123544] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:59:41.330 [DEBUG] [Thread-123544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T20:59:41.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T20:59:41.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:59:41.332 [DEBUG] [Thread-123544] [transport.py] [_log()] userauth is OK
2025-12-03T20:59:41.332 [DEBUG] [Thread-123544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:59:41.332 [DEBUG] [Thread-123544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:59:41.332 [DEBUG] [Thread-123544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T20:59:41.332 [DEBUG] [Thread-123544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:59:41.366 [INFO] [Thread-123544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:59:41.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:59:42.008 [DEBUG] [Thread-123544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:59:42.008 [DEBUG] [Thread-123544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:59:42.008 [DEBUG] [Thread-123544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T20:59:42.049 [DEBUG] [Thread-123544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:59:42.049 [DEBUG] [Thread-123544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:59:42.051 [DEBUG] [Thread-123544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:59:42.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:59:42.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T20:59:42.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T20:59:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T20:59:42.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:59:42.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T20:59:42.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:59:42.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.791023 -999.00  +16.70  19.87     37   +2.10 1 1 1 1 1     0    0 14.30 -12.81 ZNESW 19.9 19.9 151.2 25.7 17.0 -25.2 16.9 -24.7 16.8 -23.1 17.0 -23.7
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.791023
2025-12-03T20:59:42.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T20:59:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T20:59:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T20:59:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T20:59:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T20:59:42.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:59:21', tmtdew=16.74, humidity=31.92, cloud=0.0, wind=27.01, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:59:21', seeing=0.93, atlas_timestamp='2025-12-03T18:59:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:58:00')
2025-12-03T20:59:42.074 [DEBUG] [Thread-123544] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:59:42.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T20:59:42.174 [DEBUG] [Thread-123547] [transport.py] [_log()] starting thread (client mode): 0xa51d1480
2025-12-03T20:59:42.174 [DEBUG] [Thread-123547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T20:59:42.190 [DEBUG] [Thread-123547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T20:59:42.190 [INFO] [Thread-123547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T20:59:42.197 [DEBUG] [Thread-123547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] client lang: <none>
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] server lang: <none>
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] kex follows: False
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T20:59:42.198 [DEBUG] [Thread-123547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T20:59:42.199 [DEBUG] [Thread-123547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T20:59:42.199 [DEBUG] [Thread-123547] [transport.py] [_log()] Compression: none
2025-12-03T20:59:42.199 [DEBUG] [Thread-123547] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T20:59:42.257 [DEBUG] [Thread-123547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T20:59:42.257 [DEBUG] [Thread-123547] [transport.py] [_log()] Switch to new keys ...
2025-12-03T20:59:42.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T20:59:42.258 [DEBUG] [Thread-123547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T20:59:42.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T20:59:42.313 [DEBUG] [Thread-123547] [transport.py] [_log()] userauth is OK
2025-12-03T20:59:42.313 [DEBUG] [Thread-123547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T20:59:42.314 [DEBUG] [Thread-123547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T20:59:42.314 [DEBUG] [Thread-123547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T20:59:42.314 [DEBUG] [Thread-123547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T20:59:42.332 [INFO] [Thread-123547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T20:59:42.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T20:59:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T20:59:43.198 [DEBUG] [Thread-123547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T20:59:43.199 [DEBUG] [Thread-123547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T20:59:43.247 [DEBUG] [Thread-123547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T20:59:43.247 [DEBUG] [Thread-123547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T20:59:43.256 [DEBUG] [Thread-123547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T20:59:43.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T20:59:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T20:59:43.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T20:59:43.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T20:59:43.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T20:59:43.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T20:59:43.290 [DEBUG] [Thread-123547] [transport.py] [_log()] EOF in transport thread
2025-12-03T20:59:45.047 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:45.048 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:46.529 [DEBUG] [Thread-123549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T20:59:53.310 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:01.588 [DEBUG] [Thread-123550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:09.515 [DEBUG] [Thread-123551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:13.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:00:13.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:00:13.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:00:13.807 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 20, 59, 53), 16.72, 31.95, 0.0, 25.2, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:00:13.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 20:59:53
2025-12-03T21:00:14.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:00:14.294 [DEBUG] [Thread-123552] [transport.py] [_log()] starting thread (client mode): 0xa27ca0b0
2025-12-03T21:00:14.294 [DEBUG] [Thread-123552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:00:14.314 [DEBUG] [Thread-123552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:00:14.314 [INFO] [Thread-123552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:00:14.317 [DEBUG] [Thread-123552] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:00:14.317 [DEBUG] [Thread-123552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] client lang: <none>
2025-12-03T21:00:14.318 [DEBUG] [Thread-123552] [transport.py] [_log()] server lang: <none>
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] kex follows: False
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] Compression: none
2025-12-03T21:00:14.319 [DEBUG] [Thread-123552] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:00:14.339 [DEBUG] [Thread-123552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:00:14.340 [DEBUG] [Thread-123552] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:00:14.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:00:14.341 [DEBUG] [Thread-123552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:00:14.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:00:14.342 [DEBUG] [Thread-123552] [transport.py] [_log()] userauth is OK
2025-12-03T21:00:14.343 [DEBUG] [Thread-123552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:00:14.343 [DEBUG] [Thread-123552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:00:14.343 [DEBUG] [Thread-123552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:00:14.343 [DEBUG] [Thread-123552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:00:14.367 [INFO] [Thread-123552] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:00:14.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:00:15.154 [DEBUG] [Thread-123552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:00:15.154 [DEBUG] [Thread-123552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:00:15.155 [DEBUG] [Thread-123552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:00:15.195 [DEBUG] [Thread-123552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:00:15.195 [DEBUG] [Thread-123552] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:00:15.197 [DEBUG] [Thread-123552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:00:15.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:00:15.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:00:15.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:00:15.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:00:15.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:00:15.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:00:15.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:00:15.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.791371 -999.00  +16.70  16.29     37   +2.10 1 1 1 1 1     0    0 14.47 -11.78 ZNESW 16.3 16.3 145.2 29.2 17.0 -25.2 16.9 -24.8 16.7 -23.1 17.0 -23.9
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.791371
2025-12-03T21:00:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:00:15.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:00:15.223 [DEBUG] [Thread-123552] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:00:15.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:00:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:00:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:00:15.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T20:59:53', tmtdew=16.72, humidity=31.95, cloud=0.0, wind=25.2, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T20:59:54', seeing=0.84, atlas_timestamp='2025-12-03T18:59:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:58:00')
2025-12-03T21:00:15.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:00:15.327 [DEBUG] [Thread-123555] [transport.py] [_log()] starting thread (client mode): 0xa2760be0
2025-12-03T21:00:15.327 [DEBUG] [Thread-123555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:00:15.343 [DEBUG] [Thread-123555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:00:15.343 [INFO] [Thread-123555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:00:15.352 [DEBUG] [Thread-123555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:00:15.352 [DEBUG] [Thread-123555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:00:15.352 [DEBUG] [Thread-123555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:00:15.352 [DEBUG] [Thread-123555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:15.352 [DEBUG] [Thread-123555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] client lang: <none>
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] server lang: <none>
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] kex follows: False
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:00:15.353 [DEBUG] [Thread-123555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:00:15.354 [DEBUG] [Thread-123555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:00:15.354 [DEBUG] [Thread-123555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:00:15.354 [DEBUG] [Thread-123555] [transport.py] [_log()] Compression: none
2025-12-03T21:00:15.354 [DEBUG] [Thread-123555] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:00:15.408 [DEBUG] [Thread-123555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:00:15.409 [DEBUG] [Thread-123555] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:00:15.409 [DEBUG] [Thread-123555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:00:15.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:00:15.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:00:15.465 [DEBUG] [Thread-123555] [transport.py] [_log()] userauth is OK
2025-12-03T21:00:15.465 [DEBUG] [Thread-123555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:00:15.465 [DEBUG] [Thread-123555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:00:15.465 [DEBUG] [Thread-123555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:00:15.465 [DEBUG] [Thread-123555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:00:15.485 [INFO] [Thread-123555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:00:15.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:00:15.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:00:16.305 [DEBUG] [Thread-123555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:00:16.306 [DEBUG] [Thread-123555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:00:16.354 [DEBUG] [Thread-123555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:00:16.354 [DEBUG] [Thread-123555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:00:16.363 [DEBUG] [Thread-123555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:00:16.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:00:16.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:00:16.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:00:16.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:00:16.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:00:16.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:00:16.396 [DEBUG] [Thread-123555] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:00:16.621 [DEBUG] [Thread-123557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:31.673 [DEBUG] [Thread-123558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:34.237 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:45.249 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:45.250 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:00:46.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:00:46.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:00:46.705 [DEBUG] [Thread-123559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:00:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 0, 25), 16.73, 31.92, 0.0, 26.13, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:00:47.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:00:25
2025-12-03T21:00:47.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:00:47.402 [DEBUG] [Thread-123560] [transport.py] [_log()] starting thread (client mode): 0xa2728f10
2025-12-03T21:00:47.402 [DEBUG] [Thread-123560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:00:47.423 [DEBUG] [Thread-123560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:00:47.423 [INFO] [Thread-123560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:00:47.426 [DEBUG] [Thread-123560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:00:47.426 [DEBUG] [Thread-123560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:00:47.426 [DEBUG] [Thread-123560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] client lang: <none>
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] server lang: <none>
2025-12-03T21:00:47.427 [DEBUG] [Thread-123560] [transport.py] [_log()] kex follows: False
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] Compression: none
2025-12-03T21:00:47.428 [DEBUG] [Thread-123560] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:00:47.449 [DEBUG] [Thread-123560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:00:47.450 [DEBUG] [Thread-123560] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:00:47.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:00:47.451 [DEBUG] [Thread-123560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:00:47.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:00:47.453 [DEBUG] [Thread-123560] [transport.py] [_log()] userauth is OK
2025-12-03T21:00:47.454 [DEBUG] [Thread-123560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:00:47.454 [DEBUG] [Thread-123560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:00:47.454 [DEBUG] [Thread-123560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:00:47.454 [DEBUG] [Thread-123560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:00:47.489 [INFO] [Thread-123560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:00:47.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:00:48.138 [DEBUG] [Thread-123560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:00:48.138 [DEBUG] [Thread-123560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:00:48.138 [DEBUG] [Thread-123560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:00:48.179 [DEBUG] [Thread-123560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:00:48.179 [DEBUG] [Thread-123560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:00:48.182 [DEBUG] [Thread-123560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:00:48.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:00:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:00:48.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:00:48.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:00:48.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:00:48.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:00:48.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:00:48.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:00:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:00:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.791718 -999.00  +16.60  17.80     37   +2.10 1 1 1 1 1     0    0 14.46 -11.68 ZNESW 17.8 17.8 147.0 21.5 17.0 -25.3 17.0 -24.8 16.7 -23.1 17.0 -23.9
2025-12-03T21:00:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:00:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:00:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.791718
2025-12-03T21:00:48.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:00:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:00:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:00:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:00:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:00:48.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:00:25', tmtdew=16.73, humidity=31.92, cloud=0.0, wind=26.13, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:00:26', seeing=0.92, atlas_timestamp='2025-12-03T19:00:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:58:00')
2025-12-03T21:00:48.207 [DEBUG] [Thread-123560] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:00:48.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:00:48.310 [DEBUG] [Thread-123563] [transport.py] [_log()] starting thread (client mode): 0xa51d3880
2025-12-03T21:00:48.310 [DEBUG] [Thread-123563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:00:48.324 [DEBUG] [Thread-123563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:00:48.325 [INFO] [Thread-123563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:00:48.332 [DEBUG] [Thread-123563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] client lang: <none>
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] server lang: <none>
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] kex follows: False
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] Compression: none
2025-12-03T21:00:48.333 [DEBUG] [Thread-123563] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:00:48.392 [DEBUG] [Thread-123563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:00:48.393 [DEBUG] [Thread-123563] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:00:48.393 [DEBUG] [Thread-123563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:00:48.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:00:48.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:00:48.448 [DEBUG] [Thread-123563] [transport.py] [_log()] userauth is OK
2025-12-03T21:00:48.449 [DEBUG] [Thread-123563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:00:48.449 [DEBUG] [Thread-123563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:00:48.449 [DEBUG] [Thread-123563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:00:48.449 [DEBUG] [Thread-123563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:00:48.467 [INFO] [Thread-123563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:00:48.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:00:48.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:00:49.267 [DEBUG] [Thread-123563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:00:49.267 [DEBUG] [Thread-123563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:00:49.315 [DEBUG] [Thread-123563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:00:49.315 [DEBUG] [Thread-123563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:00:49.323 [DEBUG] [Thread-123563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:00:49.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:00:49.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:00:49.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:00:49.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:00:49.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:00:49.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:00:49.366 [DEBUG] [Thread-123563] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:00:54.681 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:01.739 [DEBUG] [Thread-123565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:09.611 [DEBUG] [Thread-123566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:15.140 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:16.794 [DEBUG] [Thread-123567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:01:19.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:01:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:01:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 0, 58), 16.74, 31.92, 0.0, 27.74, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:01:20.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:00:58
2025-12-03T21:01:20.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:01:20.368 [DEBUG] [Thread-123568] [transport.py] [_log()] starting thread (client mode): 0xa27cacb0
2025-12-03T21:01:20.368 [DEBUG] [Thread-123568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:01:20.389 [DEBUG] [Thread-123568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:01:20.389 [INFO] [Thread-123568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:20.393 [DEBUG] [Thread-123568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] client lang: <none>
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] server lang: <none>
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] kex follows: False
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:01:20.394 [DEBUG] [Thread-123568] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:01:20.395 [DEBUG] [Thread-123568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:01:20.395 [DEBUG] [Thread-123568] [transport.py] [_log()] Compression: none
2025-12-03T21:01:20.395 [DEBUG] [Thread-123568] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:01:20.414 [DEBUG] [Thread-123568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:01:20.415 [DEBUG] [Thread-123568] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:01:20.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:01:20.416 [DEBUG] [Thread-123568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:01:20.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:01:20.418 [DEBUG] [Thread-123568] [transport.py] [_log()] userauth is OK
2025-12-03T21:01:20.419 [DEBUG] [Thread-123568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:01:20.419 [DEBUG] [Thread-123568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:01:20.419 [DEBUG] [Thread-123568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:01:20.419 [DEBUG] [Thread-123568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:01:20.455 [INFO] [Thread-123568] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:01:20.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:01:21.067 [DEBUG] [Thread-123568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:01:21.067 [DEBUG] [Thread-123568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:01:21.067 [DEBUG] [Thread-123568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:01:21.108 [DEBUG] [Thread-123568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:01:21.108 [DEBUG] [Thread-123568] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:01:21.111 [DEBUG] [Thread-123568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:01:21.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:01:21.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:01:21.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:01:21.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:01:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:01:21.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:01:21.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:01:21.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:01:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:01:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.792412 -999.00  +16.60  18.06     37   +2.10 1 1 1 1 1     0    0 14.32 -12.17 ZNESW 18.1 18.1 150.7 25.7 17.0 -25.3 16.9 -24.6 16.7 -23.0 17.0 -23.8
2025-12-03T21:01:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:01:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:01:21.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.792412
2025-12-03T21:01:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:01:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:01:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:01:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:01:21.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:01:21.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:00:58', tmtdew=16.74, humidity=31.92, cloud=0.0, wind=27.74, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:00:58', seeing=0.84, atlas_timestamp='2025-12-03T19:01:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:58:00')
2025-12-03T21:01:21.130 [DEBUG] [Thread-123568] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:01:21.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:01:21.232 [DEBUG] [Thread-123571] [transport.py] [_log()] starting thread (client mode): 0xa2728790
2025-12-03T21:01:21.232 [DEBUG] [Thread-123571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:01:21.249 [DEBUG] [Thread-123571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:01:21.249 [INFO] [Thread-123571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:01:21.256 [DEBUG] [Thread-123571] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:01:21.256 [DEBUG] [Thread-123571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:01:21.256 [DEBUG] [Thread-123571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:01:21.256 [DEBUG] [Thread-123571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] client lang: <none>
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] server lang: <none>
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] kex follows: False
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] Compression: none
2025-12-03T21:01:21.257 [DEBUG] [Thread-123571] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:01:21.314 [DEBUG] [Thread-123571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:01:21.315 [DEBUG] [Thread-123571] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:01:21.315 [DEBUG] [Thread-123571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:01:21.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:01:21.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:01:21.372 [DEBUG] [Thread-123571] [transport.py] [_log()] userauth is OK
2025-12-03T21:01:21.372 [DEBUG] [Thread-123571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:01:21.372 [DEBUG] [Thread-123571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:01:21.372 [DEBUG] [Thread-123571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:01:21.372 [DEBUG] [Thread-123571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:01:21.386 [INFO] [Thread-123571] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:01:21.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:01:21.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:01:22.200 [DEBUG] [Thread-123571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:01:22.200 [DEBUG] [Thread-123571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:01:22.248 [DEBUG] [Thread-123571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:01:22.248 [DEBUG] [Thread-123571] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:01:22.257 [DEBUG] [Thread-123571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:01:22.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:01:22.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:01:22.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:01:22.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:01:22.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:01:22.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:01:22.292 [DEBUG] [Thread-123571] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:01:31.827 [DEBUG] [Thread-123573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:35.613 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:45.453 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:45.454 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:46.877 [DEBUG] [Thread-123574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:01:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:01:52.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:01:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:01:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 1, 30), 16.75, 31.89, 0.0, 27.86, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:01:53.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:01:30
2025-12-03T21:01:53.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:01:53.300 [DEBUG] [Thread-123575] [transport.py] [_log()] starting thread (client mode): 0xa27cb910
2025-12-03T21:01:53.300 [DEBUG] [Thread-123575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:01:53.316 [DEBUG] [Thread-123575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:01:53.316 [INFO] [Thread-123575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] client lang: <none>
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] server lang: <none>
2025-12-03T21:01:53.319 [DEBUG] [Thread-123575] [transport.py] [_log()] kex follows: False
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] Compression: none
2025-12-03T21:01:53.320 [DEBUG] [Thread-123575] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:01:53.329 [DEBUG] [Thread-123575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:01:53.329 [DEBUG] [Thread-123575] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:01:53.330 [DEBUG] [Thread-123575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:01:53.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:01:53.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:01:53.332 [DEBUG] [Thread-123575] [transport.py] [_log()] userauth is OK
2025-12-03T21:01:53.332 [DEBUG] [Thread-123575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:01:53.332 [DEBUG] [Thread-123575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:01:53.332 [DEBUG] [Thread-123575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:01:53.332 [DEBUG] [Thread-123575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:01:53.350 [INFO] [Thread-123575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:01:53.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:01:54.009 [DEBUG] [Thread-123575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:01:54.009 [DEBUG] [Thread-123575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:01:54.010 [DEBUG] [Thread-123575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:01:54.051 [DEBUG] [Thread-123575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:01:54.051 [DEBUG] [Thread-123575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:01:54.053 [DEBUG] [Thread-123575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:01:54.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:01:54.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:01:54.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:01:54.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:01:54.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:01:54.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:01:54.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:01:54.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.792760 -999.00  +16.70  17.26     37   +2.10 1 1 1 1 1     0    0 14.50 -11.58 ZNESW 17.3 17.3 141.0 28.4 17.0 -25.2 16.9 -24.6 16.7 -23.0 17.0 -23.9
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.792760
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:01:54.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:01:30', tmtdew=16.75, humidity=31.89, cloud=0.0, wind=27.86, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:01:30', seeing=0.82, atlas_timestamp='2025-12-03T19:01:34.464', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, 0.0017500000000012506, 0.013250000000001094, -0.05850000000000044, -0.024499999999999744, 0.01624999999999943, -0.0235000000000003, -0.0417500000000004, 0.03149999999999942, -0.022999999999999687, 0.012249999999999872, 0.04499999999999993, 0.01699999999999946, 0.03625000000000078, -0.061500000000000554, -0.1479999999999997, 0.011250000000000426, 0.027499999999999858, 0.06199999999999939, 0.025249999999999773, 0.08399999999999785, 0.06974999999999909, -0.04875000000000007, -0.3642500000000002, 0.010499999999998622, 0.0365000000000002, 0.0727499999999992, 0.06349999999999945, 0.1349999999999998, -0.02099999999999902, 0.062000000000001165, -0.42749999999999844, -0.16325000000000145], zp_timestamp='2025-12-03T18:58:00')
2025-12-03T21:01:54.074 [DEBUG] [Thread-123575] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:01:54.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:01:54.166 [DEBUG] [Thread-123578] [transport.py] [_log()] starting thread (client mode): 0xa27534c0
2025-12-03T21:01:54.166 [DEBUG] [Thread-123578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:01:54.180 [DEBUG] [Thread-123578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:01:54.181 [INFO] [Thread-123578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:01:54.188 [DEBUG] [Thread-123578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] client lang: <none>
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] server lang: <none>
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] kex follows: False
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] Compression: none
2025-12-03T21:01:54.189 [DEBUG] [Thread-123578] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:01:54.254 [DEBUG] [Thread-123578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:01:54.254 [DEBUG] [Thread-123578] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:01:54.255 [DEBUG] [Thread-123578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:01:54.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:01:54.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:01:54.312 [DEBUG] [Thread-123578] [transport.py] [_log()] userauth is OK
2025-12-03T21:01:54.312 [DEBUG] [Thread-123578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:01:54.312 [DEBUG] [Thread-123578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:01:54.312 [DEBUG] [Thread-123578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:01:54.312 [DEBUG] [Thread-123578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:01:54.326 [INFO] [Thread-123578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:01:54.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:01:54.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:01:55.147 [DEBUG] [Thread-123578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:01:55.147 [DEBUG] [Thread-123578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:01:55.194 [DEBUG] [Thread-123578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:01:55.194 [DEBUG] [Thread-123578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:01:55.205 [DEBUG] [Thread-123578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:01:55.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:01:55.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:01:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:01:55.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:01:55.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:01:55.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:01:55.239 [DEBUG] [Thread-123578] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:01:56.103 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:01.916 [DEBUG] [Thread-123580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:09.690 [DEBUG] [Thread-123581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:16.592 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:16.983 [DEBUG] [Thread-123582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:25.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:02:25.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:02:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:02:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 2, 2), 16.76, 31.86, 0.0, 28.06, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:02:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:02:02
2025-12-03T21:02:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:02:26.234 [DEBUG] [Thread-123583] [transport.py] [_log()] starting thread (client mode): 0xa271f490
2025-12-03T21:02:26.234 [DEBUG] [Thread-123583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:02:26.254 [DEBUG] [Thread-123583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:02:26.254 [INFO] [Thread-123583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:02:26.255 [DEBUG] [Thread-123583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:02:26.255 [DEBUG] [Thread-123583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:02:26.255 [DEBUG] [Thread-123583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] client lang: <none>
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] server lang: <none>
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] kex follows: False
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:02:26.256 [DEBUG] [Thread-123583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:02:26.257 [DEBUG] [Thread-123583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:02:26.257 [DEBUG] [Thread-123583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:02:26.257 [DEBUG] [Thread-123583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:02:26.257 [DEBUG] [Thread-123583] [transport.py] [_log()] Compression: none
2025-12-03T21:02:26.257 [DEBUG] [Thread-123583] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:02:26.268 [DEBUG] [Thread-123583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:02:26.269 [DEBUG] [Thread-123583] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:02:26.270 [DEBUG] [Thread-123583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:02:26.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:02:26.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:02:26.272 [DEBUG] [Thread-123583] [transport.py] [_log()] userauth is OK
2025-12-03T21:02:26.272 [DEBUG] [Thread-123583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:02:26.272 [DEBUG] [Thread-123583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:02:26.272 [DEBUG] [Thread-123583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:02:26.272 [DEBUG] [Thread-123583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:02:26.290 [INFO] [Thread-123583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:02:26.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:02:26.922 [DEBUG] [Thread-123583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:02:26.923 [DEBUG] [Thread-123583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:02:26.923 [DEBUG] [Thread-123583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:02:26.964 [DEBUG] [Thread-123583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:02:26.964 [DEBUG] [Thread-123583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:02:26.967 [DEBUG] [Thread-123583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:02:26.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:02:26.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:02:26.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:02:26.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:02:26.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:02:26.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:02:26.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:02:26.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:02:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:02:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.793107 -999.00  +16.70  19.34     37   +2.10 1 1 1 1 1     0    0 14.26 -11.35 ZNESW 19.3 19.3 138.4 27.3 17.0 -25.2 16.9 -24.8 16.7 -23.1 17.0 -24.0
2025-12-03T21:02:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:02:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:02:26.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.793107
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:02:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:02:02', tmtdew=16.76, humidity=31.86, cloud=0.0, wind=28.06, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:02:02', seeing=0.82, atlas_timestamp='2025-12-03T19:02:04.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:02:26.992 [DEBUG] [Thread-123583] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:02:27.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:02:27.096 [DEBUG] [Thread-123586] [transport.py] [_log()] starting thread (client mode): 0xa51d2920
2025-12-03T21:02:27.096 [DEBUG] [Thread-123586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:02:27.111 [DEBUG] [Thread-123586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:02:27.111 [INFO] [Thread-123586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:02:27.118 [DEBUG] [Thread-123586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:02:27.118 [DEBUG] [Thread-123586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] client lang: <none>
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] server lang: <none>
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] kex follows: False
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] Compression: none
2025-12-03T21:02:27.119 [DEBUG] [Thread-123586] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:02:27.175 [DEBUG] [Thread-123586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:02:27.176 [DEBUG] [Thread-123586] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:02:27.176 [DEBUG] [Thread-123586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:02:27.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:02:27.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:02:27.232 [DEBUG] [Thread-123586] [transport.py] [_log()] userauth is OK
2025-12-03T21:02:27.232 [DEBUG] [Thread-123586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:02:27.232 [DEBUG] [Thread-123586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:02:27.232 [DEBUG] [Thread-123586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:02:27.232 [DEBUG] [Thread-123586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:02:27.250 [INFO] [Thread-123586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:02:27.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:02:27.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:02:28.069 [DEBUG] [Thread-123586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:02:28.069 [DEBUG] [Thread-123586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:02:28.116 [DEBUG] [Thread-123586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:02:28.117 [DEBUG] [Thread-123586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:02:28.127 [DEBUG] [Thread-123586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:02:28.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:02:28.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:02:28.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:02:28.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:02:28.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:02:28.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:02:28.164 [DEBUG] [Thread-123586] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:02:32.019 [DEBUG] [Thread-123588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:37.061 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:45.653 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:45.654 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:47.087 [DEBUG] [Thread-123589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:57.523 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:02:58.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:02:58.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:02:58.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:02:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 2, 34), 16.76, 31.86, 0.0, 25.9, 16.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:02:58.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:02:34
2025-12-03T21:02:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:02:59.157 [DEBUG] [Thread-123590] [transport.py] [_log()] starting thread (client mode): 0xa2762530
2025-12-03T21:02:59.157 [DEBUG] [Thread-123590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:02:59.177 [DEBUG] [Thread-123590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:02:59.177 [INFO] [Thread-123590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:59.178 [DEBUG] [Thread-123590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] client lang: <none>
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] server lang: <none>
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] kex follows: False
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] Compression: none
2025-12-03T21:02:59.179 [DEBUG] [Thread-123590] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:02:59.188 [DEBUG] [Thread-123590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:02:59.188 [DEBUG] [Thread-123590] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:02:59.189 [DEBUG] [Thread-123590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:02:59.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:02:59.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:02:59.190 [DEBUG] [Thread-123590] [transport.py] [_log()] userauth is OK
2025-12-03T21:02:59.191 [DEBUG] [Thread-123590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:02:59.191 [DEBUG] [Thread-123590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:02:59.191 [DEBUG] [Thread-123590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:02:59.191 [DEBUG] [Thread-123590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:02:59.216 [INFO] [Thread-123590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:02:59.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:02:59.808 [DEBUG] [Thread-123590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:02:59.809 [DEBUG] [Thread-123590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:02:59.809 [DEBUG] [Thread-123590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:02:59.850 [DEBUG] [Thread-123590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:02:59.850 [DEBUG] [Thread-123590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:02:59.852 [DEBUG] [Thread-123590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:02:59.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:02:59.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:02:59.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:02:59.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:02:59.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:02:59.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:02:59.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:02:59.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:02:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:02:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.793454 -999.00  +16.70  20.00     37   +2.10 1 1 1 1 1     0    0 14.46 -11.41 ZNESW 20.0 20.0 147.2 23.0 17.0 -25.2 16.9 -24.8 16.7 -23.0 16.9 -23.9
2025-12-03T21:02:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:02:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:02:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.793454
2025-12-03T21:02:59.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:02:59.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:02:59.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:02:59.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:02:59.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:02:59.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:02:34', tmtdew=16.76, humidity=31.86, cloud=0.0, wind=25.9, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:02:34', seeing=0.71, atlas_timestamp='2025-12-03T19:02:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:02:59.871 [DEBUG] [Thread-123590] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:02:59.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:02:59.976 [DEBUG] [Thread-123593] [transport.py] [_log()] starting thread (client mode): 0xa517d6f0
2025-12-03T21:02:59.976 [DEBUG] [Thread-123593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:02:59.991 [DEBUG] [Thread-123593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:02:59.991 [INFO] [Thread-123593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:02:59.999 [DEBUG] [Thread-123593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] client lang: <none>
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] server lang: <none>
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] kex follows: False
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:03:00.000 [DEBUG] [Thread-123593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:03:00.001 [DEBUG] [Thread-123593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:03:00.001 [DEBUG] [Thread-123593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:03:00.001 [DEBUG] [Thread-123593] [transport.py] [_log()] Compression: none
2025-12-03T21:03:00.001 [DEBUG] [Thread-123593] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:03:00.055 [DEBUG] [Thread-123593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:03:00.056 [DEBUG] [Thread-123593] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:03:00.057 [DEBUG] [Thread-123593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:03:00.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:03:00.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:03:00.112 [DEBUG] [Thread-123593] [transport.py] [_log()] userauth is OK
2025-12-03T21:03:00.112 [DEBUG] [Thread-123593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:03:00.112 [DEBUG] [Thread-123593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:03:00.112 [DEBUG] [Thread-123593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:03:00.112 [DEBUG] [Thread-123593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:03:00.130 [INFO] [Thread-123593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:03:00.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:03:00.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:03:00.969 [DEBUG] [Thread-123593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:03:00.970 [DEBUG] [Thread-123593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:03:01.018 [DEBUG] [Thread-123593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:03:01.018 [DEBUG] [Thread-123593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:03:01.027 [DEBUG] [Thread-123593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:03:01.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:03:01.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:03:01.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:03:01.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:03:01.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:03:01.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:03:01.063 [DEBUG] [Thread-123593] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:03:02.128 [DEBUG] [Thread-123595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:09.761 [DEBUG] [Thread-123596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:17.182 [DEBUG] [Thread-123597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:17.965 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:31.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:03:31.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:03:31.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:03:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 3, 6), 16.78, 31.81, 0.0, 26.63, 16.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:03:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:03:06
2025-12-03T21:03:31.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:03:32.068 [DEBUG] [Thread-123598] [transport.py] [_log()] starting thread (client mode): 0xa51e5ab0
2025-12-03T21:03:32.068 [DEBUG] [Thread-123598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:03:32.088 [DEBUG] [Thread-123598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:03:32.088 [INFO] [Thread-123598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] client lang: <none>
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] server lang: <none>
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] kex follows: False
2025-12-03T21:03:32.089 [DEBUG] [Thread-123598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] Compression: none
2025-12-03T21:03:32.090 [DEBUG] [Thread-123598] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:03:32.099 [DEBUG] [Thread-123598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:03:32.100 [DEBUG] [Thread-123598] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:03:32.100 [DEBUG] [Thread-123598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:03:32.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:03:32.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:03:32.102 [DEBUG] [Thread-123598] [transport.py] [_log()] userauth is OK
2025-12-03T21:03:32.102 [DEBUG] [Thread-123598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:03:32.102 [DEBUG] [Thread-123598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:03:32.102 [DEBUG] [Thread-123598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:03:32.102 [DEBUG] [Thread-123598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:03:32.120 [INFO] [Thread-123598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:03:32.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:03:32.220 [DEBUG] [Thread-123600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:32.647 [DEBUG] [Thread-123598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:03:32.647 [DEBUG] [Thread-123598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:03:32.648 [DEBUG] [Thread-123598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:03:32.689 [DEBUG] [Thread-123598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:03:32.689 [DEBUG] [Thread-123598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:03:32.692 [DEBUG] [Thread-123598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:03:32.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:03:32.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:03:32.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:03:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:03:32.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:03:32.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:03:32.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.793454 -999.00  +16.70  20.00     37   +2.10 1 1 1 1 1     0    0 14.46 -11.41 ZNESW 20.0 20.0 147.2 23.0 17.0 -25.2 16.9 -24.8 16.7 -23.0 16.9 -23.9
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:03:32.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.793454
2025-12-03T21:03:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:03:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:03:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:03:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:03:32.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:03:32.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:03:06', tmtdew=16.78, humidity=31.81, cloud=0.0, wind=26.63, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:03:06', seeing=0.79, atlas_timestamp='2025-12-03T19:02:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:03:32.713 [DEBUG] [Thread-123598] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:03:32.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:03:32.822 [DEBUG] [Thread-123602] [transport.py] [_log()] starting thread (client mode): 0xa27c9690
2025-12-03T21:03:32.822 [DEBUG] [Thread-123602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:03:32.838 [DEBUG] [Thread-123602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:03:32.838 [INFO] [Thread-123602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:03:32.845 [DEBUG] [Thread-123602] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:03:32.845 [DEBUG] [Thread-123602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] client lang: <none>
2025-12-03T21:03:32.846 [DEBUG] [Thread-123602] [transport.py] [_log()] server lang: <none>
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] kex follows: False
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] Compression: none
2025-12-03T21:03:32.847 [DEBUG] [Thread-123602] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:03:32.904 [DEBUG] [Thread-123602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:03:32.904 [DEBUG] [Thread-123602] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:03:32.905 [DEBUG] [Thread-123602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:03:32.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:03:32.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:03:32.959 [DEBUG] [Thread-123602] [transport.py] [_log()] userauth is OK
2025-12-03T21:03:32.960 [DEBUG] [Thread-123602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:03:32.960 [DEBUG] [Thread-123602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:03:32.960 [DEBUG] [Thread-123602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:03:32.960 [DEBUG] [Thread-123602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:03:32.983 [INFO] [Thread-123602] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:03:32.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:03:32.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:03:33.838 [DEBUG] [Thread-123602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:03:33.838 [DEBUG] [Thread-123602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:03:33.886 [DEBUG] [Thread-123602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:03:33.886 [DEBUG] [Thread-123602] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:03:33.895 [DEBUG] [Thread-123602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:03:33.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:03:33.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:03:33.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:03:33.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:03:33.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:03:33.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:03:33.930 [DEBUG] [Thread-123602] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:03:38.425 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:45.902 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:45.903 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:47.257 [DEBUG] [Thread-123604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:03:58.866 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:02.311 [DEBUG] [Thread-123605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:04:03.952 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:04:03.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:04:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 3, 38), 16.77, 31.86, 0.0, 21.63, 16.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:04:04.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:03:38
2025-12-03T21:04:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:04:04.919 [DEBUG] [Thread-123606] [transport.py] [_log()] starting thread (client mode): 0xa517ca60
2025-12-03T21:04:04.919 [DEBUG] [Thread-123606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:04:04.940 [DEBUG] [Thread-123606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:04:04.940 [INFO] [Thread-123606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:04:04.943 [DEBUG] [Thread-123606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:04:04.943 [DEBUG] [Thread-123606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:04:04.943 [DEBUG] [Thread-123606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:04:04.943 [DEBUG] [Thread-123606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:04.943 [DEBUG] [Thread-123606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] client lang: <none>
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] server lang: <none>
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] kex follows: False
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] Compression: none
2025-12-03T21:04:04.944 [DEBUG] [Thread-123606] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:04:04.962 [DEBUG] [Thread-123606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:04:04.963 [DEBUG] [Thread-123606] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:04:04.963 [DEBUG] [Thread-123606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:04:04.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:04:04.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:04:04.965 [DEBUG] [Thread-123606] [transport.py] [_log()] userauth is OK
2025-12-03T21:04:04.965 [DEBUG] [Thread-123606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:04:04.966 [DEBUG] [Thread-123606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:04:04.966 [DEBUG] [Thread-123606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:04:04.966 [DEBUG] [Thread-123606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:04:05.002 [INFO] [Thread-123606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:04:05.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:04:05.803 [DEBUG] [Thread-123606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:04:05.812 [DEBUG] [Thread-123606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:04:05.813 [DEBUG] [Thread-123606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:04:05.844 [DEBUG] [Thread-123606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:04:05.844 [DEBUG] [Thread-123606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:04:05.847 [DEBUG] [Thread-123606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:04:05.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:04:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:04:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:04:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:04:05.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:04:05.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:04:05.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.793801 -999.00  +16.60  20.46     37   +2.00 1 1 1 1 1     0    0 14.37 -11.19 ZNESW 20.5 20.5 139.8 25.4 17.0 -25.3 16.9 -24.9 16.6 -21.5 16.9 -24.1
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:04:05.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.793801
2025-12-03T21:04:05.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:04:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:04:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:04:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:04:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:04:05.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:03:38', tmtdew=16.77, humidity=31.86, cloud=0.0, wind=21.63, temperature=16.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:03:39', seeing=0.86, atlas_timestamp='2025-12-03T19:03:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:04:05.873 [DEBUG] [Thread-123606] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:04:05.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:04:05.978 [DEBUG] [Thread-123609] [transport.py] [_log()] starting thread (client mode): 0xa2726fb0
2025-12-03T21:04:05.978 [DEBUG] [Thread-123609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:04:05.993 [DEBUG] [Thread-123609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:04:05.993 [INFO] [Thread-123609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] client lang: <none>
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] server lang: <none>
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] kex follows: False
2025-12-03T21:04:06.001 [DEBUG] [Thread-123609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] Compression: none
2025-12-03T21:04:06.002 [DEBUG] [Thread-123609] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:04:06.059 [DEBUG] [Thread-123609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:04:06.059 [DEBUG] [Thread-123609] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:04:06.060 [DEBUG] [Thread-123609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:04:06.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:04:06.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:04:06.118 [DEBUG] [Thread-123609] [transport.py] [_log()] userauth is OK
2025-12-03T21:04:06.118 [DEBUG] [Thread-123609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:04:06.119 [DEBUG] [Thread-123609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:04:06.119 [DEBUG] [Thread-123609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:04:06.119 [DEBUG] [Thread-123609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:04:06.138 [INFO] [Thread-123609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:04:06.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:04:06.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:04:06.969 [DEBUG] [Thread-123609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:04:06.969 [DEBUG] [Thread-123609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:04:07.021 [DEBUG] [Thread-123609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:04:07.021 [DEBUG] [Thread-123609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:04:07.033 [DEBUG] [Thread-123609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:04:07.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:04:07.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:04:07.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:04:07.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:04:07.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:04:07.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:04:07.087 [DEBUG] [Thread-123609] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:04:09.829 [DEBUG] [Thread-123611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:17.347 [DEBUG] [Thread-123612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:19.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:32.408 [DEBUG] [Thread-123613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:04:37.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:04:37.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:04:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 4, 11), 16.75, 31.89, 0.0, 22.0, 16.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:04:37.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:04:11
2025-12-03T21:04:37.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:04:38.088 [DEBUG] [Thread-123614] [transport.py] [_log()] starting thread (client mode): 0xa51e71f0
2025-12-03T21:04:38.089 [DEBUG] [Thread-123614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:04:38.108 [DEBUG] [Thread-123614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:04:38.108 [INFO] [Thread-123614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:04:38.111 [DEBUG] [Thread-123614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:04:38.112 [DEBUG] [Thread-123614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] client lang: <none>
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] server lang: <none>
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] kex follows: False
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:04:38.113 [DEBUG] [Thread-123614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:04:38.114 [DEBUG] [Thread-123614] [transport.py] [_log()] Compression: none
2025-12-03T21:04:38.114 [DEBUG] [Thread-123614] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:04:38.132 [DEBUG] [Thread-123614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:04:38.133 [DEBUG] [Thread-123614] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:04:38.133 [DEBUG] [Thread-123614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:04:38.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:04:38.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:04:38.135 [DEBUG] [Thread-123614] [transport.py] [_log()] userauth is OK
2025-12-03T21:04:38.135 [DEBUG] [Thread-123614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:04:38.135 [DEBUG] [Thread-123614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:04:38.136 [DEBUG] [Thread-123614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:04:38.136 [DEBUG] [Thread-123614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:04:38.159 [INFO] [Thread-123614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:04:38.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:04:38.809 [DEBUG] [Thread-123614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:04:38.809 [DEBUG] [Thread-123614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:04:38.810 [DEBUG] [Thread-123614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:04:38.851 [DEBUG] [Thread-123614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:04:38.851 [DEBUG] [Thread-123614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:04:38.854 [DEBUG] [Thread-123614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:04:38.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:04:38.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:04:38.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:04:38.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:04:38.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:04:38.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:04:38.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:04:38.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:04:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:04:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.794148 -999.00  +16.60  18.27     37   +2.00 1 1 1 1 1     0    0 14.40 -11.02 ZNESW 18.3 18.3 148.0 26.5 17.0 -25.3 16.9 -24.7 16.7 -23.0 16.9 -24.1
2025-12-03T21:04:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:04:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:04:38.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.794148
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:04:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:04:11', tmtdew=16.75, humidity=31.89, cloud=0.0, wind=22.0, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:04:11', seeing=0.86, atlas_timestamp='2025-12-03T19:03:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:04:38.880 [DEBUG] [Thread-123614] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:04:38.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:04:38.986 [DEBUG] [Thread-123617] [transport.py] [_log()] starting thread (client mode): 0xa27503d0
2025-12-03T21:04:38.986 [DEBUG] [Thread-123617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:04:39.002 [DEBUG] [Thread-123617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:04:39.002 [INFO] [Thread-123617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:04:39.009 [DEBUG] [Thread-123617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:04:39.009 [DEBUG] [Thread-123617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] client lang: <none>
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] server lang: <none>
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] kex follows: False
2025-12-03T21:04:39.010 [DEBUG] [Thread-123617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] Compression: none
2025-12-03T21:04:39.011 [DEBUG] [Thread-123617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:04:39.067 [DEBUG] [Thread-123617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:04:39.068 [DEBUG] [Thread-123617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:04:39.068 [DEBUG] [Thread-123617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:04:39.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:04:39.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:04:39.123 [DEBUG] [Thread-123617] [transport.py] [_log()] userauth is OK
2025-12-03T21:04:39.123 [DEBUG] [Thread-123617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:04:39.123 [DEBUG] [Thread-123617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:04:39.123 [DEBUG] [Thread-123617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:04:39.123 [DEBUG] [Thread-123617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:04:39.142 [INFO] [Thread-123617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:04:39.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:04:39.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:04:39.768 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:40.040 [DEBUG] [Thread-123617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:04:40.040 [DEBUG] [Thread-123617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:04:40.088 [DEBUG] [Thread-123617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:04:40.088 [DEBUG] [Thread-123617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:04:40.097 [DEBUG] [Thread-123617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:04:40.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:04:40.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:04:40.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:04:40.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:04:40.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:04:40.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:04:40.131 [DEBUG] [Thread-123617] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:04:46.104 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:46.105 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:04:47.443 [DEBUG] [Thread-123619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:00.186 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:02.501 [DEBUG] [Thread-123620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:09.904 [DEBUG] [Thread-123621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:10.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:05:10.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:05:10.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:05:10.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 4, 43), 16.72, 31.94, 0.0, 25.69, 16.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:05:10.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:04:43
2025-12-03T21:05:11.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:05:11.175 [DEBUG] [Thread-123622] [transport.py] [_log()] starting thread (client mode): 0xa514c100
2025-12-03T21:05:11.175 [DEBUG] [Thread-123622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:05:11.195 [DEBUG] [Thread-123622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:05:11.195 [INFO] [Thread-123622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:05:11.196 [DEBUG] [Thread-123622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] client lang: <none>
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] server lang: <none>
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] kex follows: False
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] Compression: none
2025-12-03T21:05:11.197 [DEBUG] [Thread-123622] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:05:11.216 [DEBUG] [Thread-123622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:05:11.216 [DEBUG] [Thread-123622] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:05:11.216 [DEBUG] [Thread-123622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:05:11.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:05:11.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:05:11.217 [DEBUG] [Thread-123622] [transport.py] [_log()] userauth is OK
2025-12-03T21:05:11.217 [DEBUG] [Thread-123622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:05:11.217 [DEBUG] [Thread-123622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:05:11.217 [DEBUG] [Thread-123622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:05:11.217 [DEBUG] [Thread-123622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:05:11.232 [INFO] [Thread-123622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:05:11.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:05:12.366 [DEBUG] [Thread-123622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:05:12.366 [DEBUG] [Thread-123622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:05:12.366 [DEBUG] [Thread-123622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:05:12.406 [DEBUG] [Thread-123622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:05:12.407 [DEBUG] [Thread-123622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:05:12.408 [DEBUG] [Thread-123622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:05:12.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:05:12.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:05:12.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:05:12.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:05:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:05:12.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:05:12.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.794843 -999.00  +16.60  23.32     37   +2.00 1 1 1 1 1     0    0 14.11 -10.70 ZNESW 23.3 23.3 143.8 28.2 17.0 -25.3 16.9 -24.8 16.6 -23.1 16.9 -23.9
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.794843
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:05:12.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:04:43', tmtdew=16.72, humidity=31.94, cloud=0.0, wind=25.69, temperature=16.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:04:43', seeing=0.89, atlas_timestamp='2025-12-03T19:04:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.006750000000000256, 0.0032500000000013074, -0.13150000000000084, -0.06850000000000023, -0.0572499999999998, -0.08150000000000013, -0.098749999999999, 0.0045000000000001705, -0.04049999999999976, -0.017250000000000654, -0.057000000000000384, -0.03950000000000031, -0.012750000000000483, -0.10300000000000153, -0.15700000000000003, -0.05424999999999969, 0.005000000000000782, -0.009000000000000341, -0.023750000000001492, 0.07099999999999795, 0.023749999999999716, -0.0727499999999992, -0.14424999999999955, -0.002000000000000668, 0.044500000000001094, -0.00975000000000037, 0.05500000000000149, 0.09199999999999875, -0.08599999999999852, -0.05299999999999905, -0.6199999999999992, -0.12225000000000108], zp_timestamp='2025-12-03T19:00:00')
2025-12-03T21:05:12.498 [DEBUG] [Thread-123622] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:05:12.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:05:12.590 [DEBUG] [Thread-123625] [transport.py] [_log()] starting thread (client mode): 0xa514ca30
2025-12-03T21:05:12.590 [DEBUG] [Thread-123625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:05:12.605 [DEBUG] [Thread-123625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:05:12.605 [INFO] [Thread-123625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] client lang: <none>
2025-12-03T21:05:12.612 [DEBUG] [Thread-123625] [transport.py] [_log()] server lang: <none>
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] kex follows: False
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] Compression: none
2025-12-03T21:05:12.613 [DEBUG] [Thread-123625] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:05:12.672 [DEBUG] [Thread-123625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:05:12.672 [DEBUG] [Thread-123625] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:05:12.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:05:12.673 [DEBUG] [Thread-123625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:05:12.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:05:12.731 [DEBUG] [Thread-123625] [transport.py] [_log()] userauth is OK
2025-12-03T21:05:12.731 [DEBUG] [Thread-123625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:05:12.731 [DEBUG] [Thread-123625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:05:12.731 [DEBUG] [Thread-123625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:05:12.731 [DEBUG] [Thread-123625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:05:12.747 [INFO] [Thread-123625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:05:12.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:05:12.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:05:13.576 [DEBUG] [Thread-123625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:05:13.576 [DEBUG] [Thread-123625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:05:13.628 [DEBUG] [Thread-123625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:05:13.628 [DEBUG] [Thread-123625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:05:13.638 [DEBUG] [Thread-123625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:05:13.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:05:13.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:05:13.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:05:13.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:05:13.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:05:13.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:05:13.683 [DEBUG] [Thread-123625] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:05:17.545 [DEBUG] [Thread-123627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:20.605 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:32.602 [DEBUG] [Thread-123628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:41.025 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:43.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:05:43.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:05:43.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:05:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 5, 15), 16.71, 31.97, 0.0, 25.76, 16.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:05:44.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:05:15
2025-12-03T21:05:44.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:05:44.661 [DEBUG] [Thread-123629] [transport.py] [_log()] starting thread (client mode): 0xa2724a60
2025-12-03T21:05:44.661 [DEBUG] [Thread-123629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:05:44.682 [DEBUG] [Thread-123629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:05:44.682 [INFO] [Thread-123629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:05:44.685 [DEBUG] [Thread-123629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:05:44.685 [DEBUG] [Thread-123629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] client lang: <none>
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] server lang: <none>
2025-12-03T21:05:44.686 [DEBUG] [Thread-123629] [transport.py] [_log()] kex follows: False
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] Compression: none
2025-12-03T21:05:44.687 [DEBUG] [Thread-123629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:05:44.697 [DEBUG] [Thread-123629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:05:44.698 [DEBUG] [Thread-123629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:05:44.698 [DEBUG] [Thread-123629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:05:44.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:05:44.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:05:44.700 [DEBUG] [Thread-123629] [transport.py] [_log()] userauth is OK
2025-12-03T21:05:44.700 [DEBUG] [Thread-123629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:05:44.700 [DEBUG] [Thread-123629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:05:44.700 [DEBUG] [Thread-123629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:05:44.700 [DEBUG] [Thread-123629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:05:44.719 [INFO] [Thread-123629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:05:44.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:05:45.374 [DEBUG] [Thread-123629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:05:45.374 [DEBUG] [Thread-123629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:05:45.374 [DEBUG] [Thread-123629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:05:45.415 [DEBUG] [Thread-123629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:05:45.415 [DEBUG] [Thread-123629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:05:45.417 [DEBUG] [Thread-123629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:05:45.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:05:45.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:05:45.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:05:45.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:05:45.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:05:45.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:05:45.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:05:45.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.795190 -999.00  +16.60  22.62     37   +2.00 1 1 1 1 1     0    0 14.18 -10.83 ZNESW 22.6 22.6 141.8 25.7 17.0 -25.3 16.9 -24.8 16.6 -23.1 16.9 -23.8
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.795190
2025-12-03T21:05:45.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:05:45.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:05:45.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:05:45.436 [DEBUG] [Thread-123629] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:05:45.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:05:45.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:05:45.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:05:15', tmtdew=16.71, humidity=31.97, cloud=0.0, wind=25.76, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:05:15', seeing=0.85, atlas_timestamp='2025-12-03T19:05:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:03:00')
2025-12-03T21:05:45.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:05:45.536 [DEBUG] [Thread-123632] [transport.py] [_log()] starting thread (client mode): 0xa2751d80
2025-12-03T21:05:45.536 [DEBUG] [Thread-123632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:05:45.551 [DEBUG] [Thread-123632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:05:45.551 [INFO] [Thread-123632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:05:45.558 [DEBUG] [Thread-123632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] client lang: <none>
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] server lang: <none>
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] kex follows: False
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] Compression: none
2025-12-03T21:05:45.559 [DEBUG] [Thread-123632] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:05:45.615 [DEBUG] [Thread-123632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:05:45.615 [DEBUG] [Thread-123632] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:05:45.616 [DEBUG] [Thread-123632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:05:45.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:05:45.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:05:45.670 [DEBUG] [Thread-123632] [transport.py] [_log()] userauth is OK
2025-12-03T21:05:45.671 [DEBUG] [Thread-123632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:05:45.671 [DEBUG] [Thread-123632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:05:45.671 [DEBUG] [Thread-123632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:05:45.671 [DEBUG] [Thread-123632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:05:45.690 [INFO] [Thread-123632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:05:45.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:05:45.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:05:46.360 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:46.361 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:05:46.514 [DEBUG] [Thread-123632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:05:46.514 [DEBUG] [Thread-123632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:05:46.562 [DEBUG] [Thread-123632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:05:46.563 [DEBUG] [Thread-123632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:05:46.571 [DEBUG] [Thread-123632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:05:46.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:05:46.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:05:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:05:46.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:05:46.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:05:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:05:46.604 [DEBUG] [Thread-123632] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:05:47.641 [DEBUG] [Thread-123634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:01.445 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:02.693 [DEBUG] [Thread-123635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:09.988 [DEBUG] [Thread-123636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:06:16.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:06:16.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:06:17.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 5, 47), 16.7, 31.99, 0.0, 26.17, 16.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:06:17.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:05:47
2025-12-03T21:06:17.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:06:17.588 [DEBUG] [Thread-123637] [transport.py] [_log()] starting thread (client mode): 0xa2778670
2025-12-03T21:06:17.588 [DEBUG] [Thread-123637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:06:17.604 [DEBUG] [Thread-123637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:06:17.604 [INFO] [Thread-123637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:06:17.607 [DEBUG] [Thread-123637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] client lang: <none>
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] server lang: <none>
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] kex follows: False
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] Compression: none
2025-12-03T21:06:17.608 [DEBUG] [Thread-123637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:06:17.628 [DEBUG] [Thread-123637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:06:17.628 [DEBUG] [Thread-123637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:06:17.629 [DEBUG] [Thread-123637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:06:17.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:06:17.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:06:17.631 [DEBUG] [Thread-123637] [transport.py] [_log()] userauth is OK
2025-12-03T21:06:17.631 [DEBUG] [Thread-123637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:06:17.631 [DEBUG] [Thread-123637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:06:17.631 [DEBUG] [Thread-123637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:06:17.631 [DEBUG] [Thread-123637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:06:17.655 [INFO] [Thread-123637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:06:17.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:06:17.729 [DEBUG] [Thread-123639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:18.437 [DEBUG] [Thread-123637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:06:18.437 [DEBUG] [Thread-123637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:06:18.437 [DEBUG] [Thread-123637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:06:18.478 [DEBUG] [Thread-123637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:06:18.478 [DEBUG] [Thread-123637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:06:18.481 [DEBUG] [Thread-123637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:06:18.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:06:18.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:06:18.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:06:18.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:06:18.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:06:18.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:06:18.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:06:18.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.795537 -999.00  +16.60  17.01     37   +2.00 1 1 1 1 1     0    0 14.48 -10.55 ZNESW 17.0 17.0 146.8 24.2 17.0 -25.3 16.9 -24.7 16.7 -23.1 16.9 -23.9
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.795537
2025-12-03T21:06:18.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:06:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:06:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:06:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:06:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:06:18.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:05:47', tmtdew=16.7, humidity=31.99, cloud=0.0, wind=26.17, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:05:47', seeing=0.85, atlas_timestamp='2025-12-03T19:05:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:03:00')
2025-12-03T21:06:18.505 [DEBUG] [Thread-123637] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:06:18.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:06:18.611 [DEBUG] [Thread-123641] [transport.py] [_log()] starting thread (client mode): 0xa277a530
2025-12-03T21:06:18.611 [DEBUG] [Thread-123641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:06:18.627 [DEBUG] [Thread-123641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:06:18.627 [INFO] [Thread-123641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:06:18.634 [DEBUG] [Thread-123641] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:06:18.634 [DEBUG] [Thread-123641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:06:18.634 [DEBUG] [Thread-123641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] client lang: <none>
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] server lang: <none>
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] kex follows: False
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] Compression: none
2025-12-03T21:06:18.635 [DEBUG] [Thread-123641] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:06:18.694 [DEBUG] [Thread-123641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:06:18.695 [DEBUG] [Thread-123641] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:06:18.695 [DEBUG] [Thread-123641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:06:18.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:06:18.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:06:18.755 [DEBUG] [Thread-123641] [transport.py] [_log()] userauth is OK
2025-12-03T21:06:18.755 [DEBUG] [Thread-123641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:06:18.755 [DEBUG] [Thread-123641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:06:18.755 [DEBUG] [Thread-123641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:06:18.755 [DEBUG] [Thread-123641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:06:18.774 [INFO] [Thread-123641] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:06:18.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:06:18.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:06:19.601 [DEBUG] [Thread-123641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:06:19.602 [DEBUG] [Thread-123641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:06:19.648 [DEBUG] [Thread-123641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:06:19.648 [DEBUG] [Thread-123641] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:06:19.657 [DEBUG] [Thread-123641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:06:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:06:19.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:06:19.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:06:19.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:06:19.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:06:19.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:06:19.693 [DEBUG] [Thread-123641] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:06:21.874 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:32.761 [DEBUG] [Thread-123643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:42.299 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:46.564 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:46.565 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:47.809 [DEBUG] [Thread-123644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:06:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:06:49.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:06:49.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:06:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 6, 19), 16.72, 31.92, 0.0, 26.5, 16.6, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:06:50.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:06:19
2025-12-03T21:06:50.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:06:50.686 [DEBUG] [Thread-123645] [transport.py] [_log()] starting thread (client mode): 0xa514ff40
2025-12-03T21:06:50.686 [DEBUG] [Thread-123645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:06:50.705 [DEBUG] [Thread-123645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:06:50.706 [INFO] [Thread-123645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] client lang: <none>
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] server lang: <none>
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] kex follows: False
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] Compression: none
2025-12-03T21:06:50.709 [DEBUG] [Thread-123645] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:06:50.725 [DEBUG] [Thread-123645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:06:50.726 [DEBUG] [Thread-123645] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:06:50.726 [DEBUG] [Thread-123645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:06:50.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:06:50.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:06:50.728 [DEBUG] [Thread-123645] [transport.py] [_log()] userauth is OK
2025-12-03T21:06:50.728 [DEBUG] [Thread-123645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:06:50.728 [DEBUG] [Thread-123645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:06:50.728 [DEBUG] [Thread-123645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:06:50.728 [DEBUG] [Thread-123645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:06:50.746 [INFO] [Thread-123645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:06:50.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:06:51.374 [DEBUG] [Thread-123645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:06:51.374 [DEBUG] [Thread-123645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:06:51.374 [DEBUG] [Thread-123645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:06:51.415 [DEBUG] [Thread-123645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:06:51.415 [DEBUG] [Thread-123645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:06:51.418 [DEBUG] [Thread-123645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:06:51.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:06:51.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:06:51.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:06:51.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:06:51.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:06:51.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:06:51.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:06:51.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.795884 -999.00  +16.60  26.09     37   +2.00 1 1 1 1 1     0    0 14.45 -11.28 ZNESW 26.1 26.1 146.3 31.2 16.9 -25.2 16.9 -24.7 16.6 -23.1 16.9 -23.9
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.795884
2025-12-03T21:06:51.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:06:51.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:06:19', tmtdew=16.72, humidity=31.92, cloud=0.0, wind=26.5, temperature=16.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:06:19', seeing=1.13, atlas_timestamp='2025-12-03T19:06:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:03:00')
2025-12-03T21:06:51.444 [DEBUG] [Thread-123645] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:06:51.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:06:51.548 [DEBUG] [Thread-123648] [transport.py] [_log()] starting thread (client mode): 0xa514e9b0
2025-12-03T21:06:51.548 [DEBUG] [Thread-123648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:06:51.563 [DEBUG] [Thread-123648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:06:51.564 [INFO] [Thread-123648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:06:51.571 [DEBUG] [Thread-123648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:06:51.571 [DEBUG] [Thread-123648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:06:51.571 [DEBUG] [Thread-123648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:06:51.571 [DEBUG] [Thread-123648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:51.571 [DEBUG] [Thread-123648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] client lang: <none>
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] server lang: <none>
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] kex follows: False
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] Compression: none
2025-12-03T21:06:51.572 [DEBUG] [Thread-123648] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:06:51.630 [DEBUG] [Thread-123648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:06:51.631 [DEBUG] [Thread-123648] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:06:51.631 [DEBUG] [Thread-123648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:06:51.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:06:51.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:06:51.687 [DEBUG] [Thread-123648] [transport.py] [_log()] userauth is OK
2025-12-03T21:06:51.687 [DEBUG] [Thread-123648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:06:51.687 [DEBUG] [Thread-123648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:06:51.687 [DEBUG] [Thread-123648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:06:51.688 [DEBUG] [Thread-123648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:06:51.710 [INFO] [Thread-123648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:06:51.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:06:51.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:06:52.583 [DEBUG] [Thread-123648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:06:52.583 [DEBUG] [Thread-123648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:06:52.630 [DEBUG] [Thread-123648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:06:52.630 [DEBUG] [Thread-123648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:06:52.638 [DEBUG] [Thread-123648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:06:52.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:06:52.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:06:52.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:06:52.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:06:52.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:06:52.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:06:52.669 [DEBUG] [Thread-123648] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:07:02.710 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:02.844 [DEBUG] [Thread-123650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:10.050 [DEBUG] [Thread-123651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:17.907 [DEBUG] [Thread-123652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:22.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:07:22.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:07:22.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:07:23.129 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:23.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 6, 51), 16.65, 32.47, 0.0, 25.5, 16.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:07:23.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:06:51
2025-12-03T21:07:23.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:07:23.709 [DEBUG] [Thread-123653] [transport.py] [_log()] starting thread (client mode): 0xa277b460
2025-12-03T21:07:23.709 [DEBUG] [Thread-123653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:07:23.729 [DEBUG] [Thread-123653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:07:23.729 [INFO] [Thread-123653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:23.732 [DEBUG] [Thread-123653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] client lang: <none>
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] server lang: <none>
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] kex follows: False
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] Compression: none
2025-12-03T21:07:23.733 [DEBUG] [Thread-123653] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:07:23.748 [DEBUG] [Thread-123653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:07:23.748 [DEBUG] [Thread-123653] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:07:23.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:07:23.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] userauth is OK
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:07:23.749 [DEBUG] [Thread-123653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:07:23.760 [INFO] [Thread-123653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:07:23.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:07:24.448 [DEBUG] [Thread-123653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:07:24.448 [DEBUG] [Thread-123653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:07:24.448 [DEBUG] [Thread-123653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:07:24.490 [DEBUG] [Thread-123653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:07:24.490 [DEBUG] [Thread-123653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:07:24.492 [DEBUG] [Thread-123653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:07:24.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:07:24.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:07:24.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:07:24.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:07:24.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:07:24.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:07:24.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.796232 -999.00  +16.70  15.72     37   +2.00 1 1 1 1 1     0    0 14.27 -10.72 ZNESW 15.7 15.7 146.5 25.2 17.0 -25.2 16.9 -24.7 16.6 -23.0 16.9 -23.8
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.796232
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:07:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:06:51', tmtdew=16.65, humidity=32.47, cloud=0.0, wind=25.5, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:06:51', seeing=1.13, atlas_timestamp='2025-12-03T19:06:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:03:00')
2025-12-03T21:07:24.510 [DEBUG] [Thread-123653] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:07:24.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:07:24.611 [DEBUG] [Thread-123656] [transport.py] [_log()] starting thread (client mode): 0xa517d8d0
2025-12-03T21:07:24.611 [DEBUG] [Thread-123656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:07:24.625 [DEBUG] [Thread-123656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:07:24.625 [INFO] [Thread-123656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] client lang: <none>
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] server lang: <none>
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] kex follows: False
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:07:24.632 [DEBUG] [Thread-123656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:07:24.633 [DEBUG] [Thread-123656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:07:24.633 [DEBUG] [Thread-123656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:07:24.633 [DEBUG] [Thread-123656] [transport.py] [_log()] Compression: none
2025-12-03T21:07:24.633 [DEBUG] [Thread-123656] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:07:24.687 [DEBUG] [Thread-123656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:07:24.687 [DEBUG] [Thread-123656] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:07:24.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:07:24.687 [DEBUG] [Thread-123656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:07:24.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:07:24.749 [DEBUG] [Thread-123656] [transport.py] [_log()] userauth is OK
2025-12-03T21:07:24.749 [DEBUG] [Thread-123656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:07:24.749 [DEBUG] [Thread-123656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:07:24.749 [DEBUG] [Thread-123656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:07:24.749 [DEBUG] [Thread-123656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:07:24.763 [INFO] [Thread-123656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:07:24.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:07:24.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:07:25.606 [DEBUG] [Thread-123656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:07:25.607 [DEBUG] [Thread-123656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:07:25.655 [DEBUG] [Thread-123656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:07:25.655 [DEBUG] [Thread-123656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:07:25.663 [DEBUG] [Thread-123656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:07:25.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:07:25.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:07:25.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:07:25.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:07:25.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:07:25.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:07:25.695 [DEBUG] [Thread-123656] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:07:32.943 [DEBUG] [Thread-123658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:43.550 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:46.854 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:46.856 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:47.993 [DEBUG] [Thread-123659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:07:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:07:55.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:07:55.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:07:56.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 7, 23), 16.67, 32.44, 0.0, 26.18, 16.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:07:56.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:07:23
2025-12-03T21:07:56.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:07:56.976 [DEBUG] [Thread-123660] [transport.py] [_log()] starting thread (client mode): 0xa517cf40
2025-12-03T21:07:56.976 [DEBUG] [Thread-123660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:07:56.987 [DEBUG] [Thread-123660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:07:56.987 [INFO] [Thread-123660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] client lang: <none>
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] server lang: <none>
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] kex follows: False
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] Compression: none
2025-12-03T21:07:56.990 [DEBUG] [Thread-123660] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:07:57.005 [DEBUG] [Thread-123660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:07:57.005 [DEBUG] [Thread-123660] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:07:57.005 [DEBUG] [Thread-123660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:07:57.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:07:57.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:07:57.006 [DEBUG] [Thread-123660] [transport.py] [_log()] userauth is OK
2025-12-03T21:07:57.006 [DEBUG] [Thread-123660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:07:57.006 [DEBUG] [Thread-123660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:07:57.006 [DEBUG] [Thread-123660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:07:57.006 [DEBUG] [Thread-123660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:07:57.015 [INFO] [Thread-123660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:07:57.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:07:57.622 [DEBUG] [Thread-123660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:07:57.622 [DEBUG] [Thread-123660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:07:57.623 [DEBUG] [Thread-123660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:07:57.664 [DEBUG] [Thread-123660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:07:57.664 [DEBUG] [Thread-123660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:07:57.666 [DEBUG] [Thread-123660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:07:57.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:07:57.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:07:57.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:07:57.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:07:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:07:57.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:07:57.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.796579 -999.00  +16.60  20.20     37   +2.00 1 1 1 1 1     0    0 14.53 -10.72 ZNESW 20.2 20.2 149.2 27.6 16.9 -25.3 16.9 -24.7 16.6 -23.0 16.9 -23.9
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.796579
2025-12-03T21:07:57.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:07:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:07:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:07:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:07:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:07:57.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:07:23', tmtdew=16.67, humidity=32.44, cloud=0.0, wind=26.18, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:07:23', seeing=1.15, atlas_timestamp='2025-12-03T19:07:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:03:00')
2025-12-03T21:07:57.686 [DEBUG] [Thread-123660] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:07:57.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:07:57.779 [DEBUG] [Thread-123663] [transport.py] [_log()] starting thread (client mode): 0xa514f7c0
2025-12-03T21:07:57.780 [DEBUG] [Thread-123663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:07:57.794 [DEBUG] [Thread-123663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:07:57.794 [INFO] [Thread-123663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] client lang: <none>
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] server lang: <none>
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] kex follows: False
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:07:57.802 [DEBUG] [Thread-123663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:07:57.803 [DEBUG] [Thread-123663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:07:57.803 [DEBUG] [Thread-123663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:07:57.803 [DEBUG] [Thread-123663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:07:57.803 [DEBUG] [Thread-123663] [transport.py] [_log()] Compression: none
2025-12-03T21:07:57.803 [DEBUG] [Thread-123663] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:07:57.857 [DEBUG] [Thread-123663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:07:57.857 [DEBUG] [Thread-123663] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:07:57.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:07:57.858 [DEBUG] [Thread-123663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:07:57.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:07:57.914 [DEBUG] [Thread-123663] [transport.py] [_log()] userauth is OK
2025-12-03T21:07:57.914 [DEBUG] [Thread-123663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:07:57.914 [DEBUG] [Thread-123663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:07:57.914 [DEBUG] [Thread-123663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:07:57.914 [DEBUG] [Thread-123663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:07:57.928 [INFO] [Thread-123663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:07:57.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:07:57.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:07:58.767 [DEBUG] [Thread-123663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:07:58.768 [DEBUG] [Thread-123663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:07:58.816 [DEBUG] [Thread-123663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:07:58.816 [DEBUG] [Thread-123663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:07:58.825 [DEBUG] [Thread-123663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:07:58.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:07:58.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:07:58.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:07:58.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:07:58.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:07:58.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:07:58.859 [DEBUG] [Thread-123663] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:08:03.033 [DEBUG] [Thread-123665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:03.971 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:10.351 [DEBUG] [Thread-123666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:18.086 [DEBUG] [Thread-123667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:24.392 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:28.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:08:28.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:08:28.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:08:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 7, 56), 16.67, 31.96, 0.0, 21.63, 16.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:08:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:07:56
2025-12-03T21:08:29.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:08:29.880 [DEBUG] [Thread-123668] [transport.py] [_log()] starting thread (client mode): 0xa2724d30
2025-12-03T21:08:29.880 [DEBUG] [Thread-123668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:08:29.900 [DEBUG] [Thread-123668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:08:29.900 [INFO] [Thread-123668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] client lang: <none>
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] server lang: <none>
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] kex follows: False
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] Compression: none
2025-12-03T21:08:29.903 [DEBUG] [Thread-123668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:08:29.918 [DEBUG] [Thread-123668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:08:29.918 [DEBUG] [Thread-123668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:08:29.918 [DEBUG] [Thread-123668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:08:29.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:08:29.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:08:29.919 [DEBUG] [Thread-123668] [transport.py] [_log()] userauth is OK
2025-12-03T21:08:29.919 [DEBUG] [Thread-123668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:08:29.919 [DEBUG] [Thread-123668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:08:29.919 [DEBUG] [Thread-123668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:08:29.919 [DEBUG] [Thread-123668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:08:29.928 [INFO] [Thread-123668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:08:29.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:08:30.543 [DEBUG] [Thread-123668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:08:30.543 [DEBUG] [Thread-123668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:08:30.543 [DEBUG] [Thread-123668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:08:30.584 [DEBUG] [Thread-123668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:08:30.584 [DEBUG] [Thread-123668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:08:30.586 [DEBUG] [Thread-123668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:08:30.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:08:30.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:08:30.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:08:30.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:08:30.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:08:30.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:08:30.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:08:30.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.797273 -999.00  +16.60  15.47     37   +2.00 1 1 1 1 1     0    0 14.42 -9.31 ZNESW 15.5 15.5 154.4 23.3 16.9 -25.3 16.9 -24.7 16.6 -23.1 16.9 -24.0
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.797273
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:08:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:07:56', tmtdew=16.67, humidity=31.96, cloud=0.0, wind=21.63, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:08:28', seeing=1.27, atlas_timestamp='2025-12-03T19:08:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:08:30.598 [DEBUG] [Thread-123668] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:08:30.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:08:30.689 [DEBUG] [Thread-123671] [transport.py] [_log()] starting thread (client mode): 0xa2751d80
2025-12-03T21:08:30.690 [DEBUG] [Thread-123671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:08:30.704 [DEBUG] [Thread-123671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:08:30.704 [INFO] [Thread-123671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:08:30.711 [DEBUG] [Thread-123671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] client lang: <none>
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] server lang: <none>
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] kex follows: False
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] Compression: none
2025-12-03T21:08:30.712 [DEBUG] [Thread-123671] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:08:30.766 [DEBUG] [Thread-123671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:08:30.767 [DEBUG] [Thread-123671] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:08:30.767 [DEBUG] [Thread-123671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:08:30.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:08:30.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:08:30.824 [DEBUG] [Thread-123671] [transport.py] [_log()] userauth is OK
2025-12-03T21:08:30.824 [DEBUG] [Thread-123671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:08:30.824 [DEBUG] [Thread-123671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:08:30.824 [DEBUG] [Thread-123671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:08:30.824 [DEBUG] [Thread-123671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:08:30.840 [INFO] [Thread-123671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:08:30.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:08:30.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:08:31.668 [DEBUG] [Thread-123671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:08:31.669 [DEBUG] [Thread-123671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:08:31.717 [DEBUG] [Thread-123671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:08:31.717 [DEBUG] [Thread-123671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:08:31.726 [DEBUG] [Thread-123671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:08:31.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:08:31.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:08:31.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:08:31.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:08:31.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:08:31.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:08:31.761 [DEBUG] [Thread-123671] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:08:33.120 [DEBUG] [Thread-123673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:44.815 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:47.053 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:47.055 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:08:48.178 [DEBUG] [Thread-123674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:01.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:09:01.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:09:01.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:09:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 8, 28), 16.65, 31.97, 0.0, 22.62, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:09:02.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:08:28
2025-12-03T21:09:02.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:09:02.805 [DEBUG] [Thread-123675] [transport.py] [_log()] starting thread (client mode): 0xa517e560
2025-12-03T21:09:02.805 [DEBUG] [Thread-123675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:09:02.825 [DEBUG] [Thread-123675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:09:02.825 [INFO] [Thread-123675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] client lang: <none>
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] server lang: <none>
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] kex follows: False
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] Compression: none
2025-12-03T21:09:02.828 [DEBUG] [Thread-123675] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:09:02.843 [DEBUG] [Thread-123675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:09:02.843 [DEBUG] [Thread-123675] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:09:02.843 [DEBUG] [Thread-123675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:09:02.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:09:02.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:09:02.844 [DEBUG] [Thread-123675] [transport.py] [_log()] userauth is OK
2025-12-03T21:09:02.844 [DEBUG] [Thread-123675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:09:02.844 [DEBUG] [Thread-123675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:09:02.844 [DEBUG] [Thread-123675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:09:02.844 [DEBUG] [Thread-123675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:09:02.855 [INFO] [Thread-123675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:09:02.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:09:03.208 [DEBUG] [Thread-123677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:03.496 [DEBUG] [Thread-123675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:09:03.496 [DEBUG] [Thread-123675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:09:03.496 [DEBUG] [Thread-123675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:09:03.536 [DEBUG] [Thread-123675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:09:03.536 [DEBUG] [Thread-123675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:09:03.538 [DEBUG] [Thread-123675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:09:03.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:09:03.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:09:03.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:09:03.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:09:03.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:09:03.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:09:03.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.797621 -999.00  +16.50  22.02     37   +2.00 1 1 1 1 1     0    0 14.23 -9.16 ZNESW 22.0 22.0 144.4 28.9 16.9 -25.3 16.9 -24.8 16.6 -23.1 16.9 -24.1
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.797621
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:09:03.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:08:28', tmtdew=16.65, humidity=31.97, cloud=0.0, wind=22.62, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:08:28', seeing=1.27, atlas_timestamp='2025-12-03T19:08:34.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:09:03.555 [DEBUG] [Thread-123675] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:09:03.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:09:03.647 [DEBUG] [Thread-123679] [transport.py] [_log()] starting thread (client mode): 0xa2760550
2025-12-03T21:09:03.648 [DEBUG] [Thread-123679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:09:03.663 [DEBUG] [Thread-123679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:09:03.663 [INFO] [Thread-123679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:09:03.670 [DEBUG] [Thread-123679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] client lang: <none>
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] server lang: <none>
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] kex follows: False
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] Compression: none
2025-12-03T21:09:03.671 [DEBUG] [Thread-123679] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:09:03.727 [DEBUG] [Thread-123679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:09:03.727 [DEBUG] [Thread-123679] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:09:03.728 [DEBUG] [Thread-123679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:09:03.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:09:03.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:09:03.786 [DEBUG] [Thread-123679] [transport.py] [_log()] userauth is OK
2025-12-03T21:09:03.786 [DEBUG] [Thread-123679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:09:03.786 [DEBUG] [Thread-123679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:09:03.786 [DEBUG] [Thread-123679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:09:03.786 [DEBUG] [Thread-123679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:09:03.805 [INFO] [Thread-123679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:09:03.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:09:03.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:09:04.620 [DEBUG] [Thread-123679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:09:04.620 [DEBUG] [Thread-123679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:09:04.668 [DEBUG] [Thread-123679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:09:04.668 [DEBUG] [Thread-123679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:09:04.677 [DEBUG] [Thread-123679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:09:04.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:09:04.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:09:04.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:09:04.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:09:04.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:09:04.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:09:04.721 [DEBUG] [Thread-123679] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:09:05.237 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:10.425 [DEBUG] [Thread-123681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:18.242 [DEBUG] [Thread-123682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:25.690 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:33.298 [DEBUG] [Thread-123683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:34.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:09:34.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:09:34.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:09:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 9), 16.59, 32.49, 0.0, 28.67, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:09:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:09:00
2025-12-03T21:09:35.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:09:35.811 [DEBUG] [Thread-123684] [transport.py] [_log()] starting thread (client mode): 0xa2751060
2025-12-03T21:09:35.811 [DEBUG] [Thread-123684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:09:35.825 [DEBUG] [Thread-123684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:09:35.825 [INFO] [Thread-123684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] client lang: <none>
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] server lang: <none>
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] kex follows: False
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] Compression: none
2025-12-03T21:09:35.828 [DEBUG] [Thread-123684] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:09:35.844 [DEBUG] [Thread-123684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:09:35.845 [DEBUG] [Thread-123684] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:09:35.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:09:35.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:09:35.845 [DEBUG] [Thread-123684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:09:35.846 [DEBUG] [Thread-123684] [transport.py] [_log()] userauth is OK
2025-12-03T21:09:35.846 [DEBUG] [Thread-123684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:09:35.846 [DEBUG] [Thread-123684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:09:35.846 [DEBUG] [Thread-123684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:09:35.846 [DEBUG] [Thread-123684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:09:35.862 [INFO] [Thread-123684] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:09:35.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:09:36.475 [DEBUG] [Thread-123684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:09:36.475 [DEBUG] [Thread-123684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:09:36.475 [DEBUG] [Thread-123684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:09:36.516 [DEBUG] [Thread-123684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:09:36.516 [DEBUG] [Thread-123684] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:09:36.518 [DEBUG] [Thread-123684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:09:36.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:09:36.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:09:36.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:09:36.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:09:36.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:09:36.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:09:36.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.797968 -999.00  +16.50  18.25     37   +2.00 1 1 1 1 1     0    0 14.56 -9.79 ZNESW 18.2 18.2 143.4 25.7 16.9 -25.3 16.9 -24.8 16.6 -23.2 16.8 -24.0
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.797968
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:09:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:09:00', tmtdew=16.59, humidity=32.49, cloud=0.0, wind=28.67, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:09:34', seeing=1.04, atlas_timestamp='2025-12-03T19:09:04.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:09:36.537 [DEBUG] [Thread-123684] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:09:36.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:09:36.627 [DEBUG] [Thread-123687] [transport.py] [_log()] starting thread (client mode): 0xa2778880
2025-12-03T21:09:36.627 [DEBUG] [Thread-123687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:09:36.641 [DEBUG] [Thread-123687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:09:36.641 [INFO] [Thread-123687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:09:36.649 [DEBUG] [Thread-123687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] client lang: <none>
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] server lang: <none>
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] kex follows: False
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] Compression: none
2025-12-03T21:09:36.650 [DEBUG] [Thread-123687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:09:36.707 [DEBUG] [Thread-123687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:09:36.707 [DEBUG] [Thread-123687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:09:36.707 [DEBUG] [Thread-123687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:09:36.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:09:36.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:09:36.762 [DEBUG] [Thread-123687] [transport.py] [_log()] userauth is OK
2025-12-03T21:09:36.762 [DEBUG] [Thread-123687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:09:36.762 [DEBUG] [Thread-123687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:09:36.762 [DEBUG] [Thread-123687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:09:36.762 [DEBUG] [Thread-123687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:09:36.776 [INFO] [Thread-123687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:09:36.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:09:36.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:09:37.588 [DEBUG] [Thread-123687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:09:37.588 [DEBUG] [Thread-123687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:09:37.636 [DEBUG] [Thread-123687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:09:37.636 [DEBUG] [Thread-123687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:09:37.645 [DEBUG] [Thread-123687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:09:37.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:09:37.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:09:37.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:09:37.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:09:37.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:09:37.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:09:37.679 [DEBUG] [Thread-123687] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:09:46.114 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:47.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:47.284 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:09:48.332 [DEBUG] [Thread-123689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:03.408 [DEBUG] [Thread-123690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:06.610 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:07.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:10:07.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:10:07.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:10:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 9, 33), 16.84, 31.84, 0.0, 25.76, 16.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:10:08.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:09:33
2025-12-03T21:10:08.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:10:08.695 [DEBUG] [Thread-123691] [transport.py] [_log()] starting thread (client mode): 0xa2726710
2025-12-03T21:10:08.695 [DEBUG] [Thread-123691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:10:08.715 [DEBUG] [Thread-123691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:10:08.716 [INFO] [Thread-123691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] client lang: <none>
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] server lang: <none>
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] kex follows: False
2025-12-03T21:10:08.717 [DEBUG] [Thread-123691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] Compression: none
2025-12-03T21:10:08.718 [DEBUG] [Thread-123691] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:10:08.728 [DEBUG] [Thread-123691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:10:08.729 [DEBUG] [Thread-123691] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:10:08.729 [DEBUG] [Thread-123691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:10:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:10:08.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:10:08.730 [DEBUG] [Thread-123691] [transport.py] [_log()] userauth is OK
2025-12-03T21:10:08.730 [DEBUG] [Thread-123691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:10:08.730 [DEBUG] [Thread-123691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:10:08.730 [DEBUG] [Thread-123691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:10:08.730 [DEBUG] [Thread-123691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:10:08.749 [INFO] [Thread-123691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:10:08.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:10:09.400 [DEBUG] [Thread-123691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:10:09.400 [DEBUG] [Thread-123691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:10:09.400 [DEBUG] [Thread-123691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:10:09.441 [DEBUG] [Thread-123691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:10:09.441 [DEBUG] [Thread-123691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:10:09.444 [DEBUG] [Thread-123691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:10:09.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:10:09.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:10:09.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:10:09.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:10:09.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:10:09.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:10:09.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:10:09.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.798315 -999.00  +16.50  17.54     37   +2.00 1 1 1 1 1     0    0 14.39 -9.36 ZNESW 17.5 17.5 145.1 24.1 16.9 -25.3 16.8 -24.8 16.6 -23.1 16.9 -24.1
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.798315
2025-12-03T21:10:09.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:10:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:10:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:10:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:10:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:10:09.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:09:33', tmtdew=16.84, humidity=31.84, cloud=0.0, wind=25.76, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:10:06', seeing=0.98, atlas_timestamp='2025-12-03T19:09:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:10:09.469 [DEBUG] [Thread-123691] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:10:09.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:10:09.571 [DEBUG] [Thread-123694] [transport.py] [_log()] starting thread (client mode): 0xa517ca00
2025-12-03T21:10:09.571 [DEBUG] [Thread-123694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:10:09.585 [DEBUG] [Thread-123694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:10:09.585 [INFO] [Thread-123694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] client lang: <none>
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] server lang: <none>
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] kex follows: False
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] Compression: none
2025-12-03T21:10:09.593 [DEBUG] [Thread-123694] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:10:09.650 [DEBUG] [Thread-123694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:10:09.650 [DEBUG] [Thread-123694] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:10:09.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:10:09.651 [DEBUG] [Thread-123694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:10:09.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:10:09.707 [DEBUG] [Thread-123694] [transport.py] [_log()] userauth is OK
2025-12-03T21:10:09.707 [DEBUG] [Thread-123694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:10:09.707 [DEBUG] [Thread-123694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:10:09.707 [DEBUG] [Thread-123694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:10:09.707 [DEBUG] [Thread-123694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:10:09.721 [INFO] [Thread-123694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:10:09.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:10:09.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:10:10.487 [DEBUG] [Thread-123696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:10.538 [DEBUG] [Thread-123694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:10:10.538 [DEBUG] [Thread-123694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:10:10.586 [DEBUG] [Thread-123694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:10:10.586 [DEBUG] [Thread-123694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:10:10.594 [DEBUG] [Thread-123694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:10:10.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:10:10.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:10:10.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:10:10.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:10:10.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:10:10.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:10:10.625 [DEBUG] [Thread-123694] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:10:18.443 [DEBUG] [Thread-123697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:27.076 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:33.501 [DEBUG] [Thread-123698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:40.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:10:40.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:10:40.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:10:41.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 10, 38), 16.71, 31.97, 0.0, 23.36, 16.64, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:10:41.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:10:38
2025-12-03T21:10:41.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:10:41.619 [DEBUG] [Thread-123699] [transport.py] [_log()] starting thread (client mode): 0xa27242b0
2025-12-03T21:10:41.619 [DEBUG] [Thread-123699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:10:41.640 [DEBUG] [Thread-123699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:10:41.640 [INFO] [Thread-123699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:41.641 [DEBUG] [Thread-123699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] client lang: <none>
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] server lang: <none>
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] kex follows: False
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] Compression: none
2025-12-03T21:10:41.642 [DEBUG] [Thread-123699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:10:41.662 [DEBUG] [Thread-123699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:10:41.663 [DEBUG] [Thread-123699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:10:41.663 [DEBUG] [Thread-123699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:10:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:10:41.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:10:41.665 [DEBUG] [Thread-123699] [transport.py] [_log()] userauth is OK
2025-12-03T21:10:41.665 [DEBUG] [Thread-123699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:10:41.665 [DEBUG] [Thread-123699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:10:41.665 [DEBUG] [Thread-123699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:10:41.665 [DEBUG] [Thread-123699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:10:41.700 [INFO] [Thread-123699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:10:41.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:10:42.373 [DEBUG] [Thread-123699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:10:42.373 [DEBUG] [Thread-123699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:10:42.374 [DEBUG] [Thread-123699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:10:42.414 [DEBUG] [Thread-123699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:10:42.414 [DEBUG] [Thread-123699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:10:42.417 [DEBUG] [Thread-123699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:10:42.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:10:42.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:10:42.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:10:42.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:10:42.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:10:42.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:10:42.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:10:42.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:10:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:10:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.798663 -999.00  +16.50  21.77     37   +2.00 1 1 1 1 1     0    0 13.99 -8.99 ZNESW 21.8 21.8 143.4 28.1 16.9 -25.2 16.8 -24.8 16.6 -23.1 16.9 -24.0
2025-12-03T21:10:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:10:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:10:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.798663
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:10:42.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:10:38', tmtdew=16.71, humidity=31.97, cloud=0.0, wind=23.36, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:10:38', seeing=1.07, atlas_timestamp='2025-12-03T19:10:04.483', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:10:42.442 [DEBUG] [Thread-123699] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:10:42.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:10:42.544 [DEBUG] [Thread-123702] [transport.py] [_log()] starting thread (client mode): 0xa2762a10
2025-12-03T21:10:42.544 [DEBUG] [Thread-123702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:10:42.559 [DEBUG] [Thread-123702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:10:42.559 [INFO] [Thread-123702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:10:42.567 [DEBUG] [Thread-123702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] client lang: <none>
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] server lang: <none>
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] kex follows: False
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] Compression: none
2025-12-03T21:10:42.568 [DEBUG] [Thread-123702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:10:42.624 [DEBUG] [Thread-123702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:10:42.625 [DEBUG] [Thread-123702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:10:42.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:10:42.625 [DEBUG] [Thread-123702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:10:42.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:10:42.681 [DEBUG] [Thread-123702] [transport.py] [_log()] userauth is OK
2025-12-03T21:10:42.681 [DEBUG] [Thread-123702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:10:42.681 [DEBUG] [Thread-123702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:10:42.681 [DEBUG] [Thread-123702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:10:42.681 [DEBUG] [Thread-123702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:10:42.704 [INFO] [Thread-123702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:10:42.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:10:42.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:10:43.512 [DEBUG] [Thread-123702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:10:43.512 [DEBUG] [Thread-123702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:10:43.560 [DEBUG] [Thread-123702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:10:43.560 [DEBUG] [Thread-123702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:10:43.569 [DEBUG] [Thread-123702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:10:43.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:10:43.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:10:43.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:10:43.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:10:43.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:10:43.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:10:43.604 [DEBUG] [Thread-123702] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:10:47.481 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:47.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:47.489 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:10:48.538 [DEBUG] [Thread-123704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:03.593 [DEBUG] [Thread-123705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:07.986 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:10.542 [DEBUG] [Thread-123706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:13.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:11:13.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:11:13.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:11:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 11, 10), 16.7, 31.97, 0.0, 23.86, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:11:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:11:10
2025-12-03T21:11:14.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:11:14.597 [DEBUG] [Thread-123707] [transport.py] [_log()] starting thread (client mode): 0xa51d0640
2025-12-03T21:11:14.597 [DEBUG] [Thread-123707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:11:14.616 [DEBUG] [Thread-123707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:11:14.616 [INFO] [Thread-123707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:11:14.619 [DEBUG] [Thread-123707] [transport.py] [_log()] client lang: <none>
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] server lang: <none>
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] kex follows: False
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] Compression: none
2025-12-03T21:11:14.620 [DEBUG] [Thread-123707] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:11:14.636 [DEBUG] [Thread-123707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:11:14.637 [DEBUG] [Thread-123707] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:11:14.637 [DEBUG] [Thread-123707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:11:14.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:11:14.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:11:14.639 [DEBUG] [Thread-123707] [transport.py] [_log()] userauth is OK
2025-12-03T21:11:14.639 [DEBUG] [Thread-123707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:11:14.639 [DEBUG] [Thread-123707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:11:14.639 [DEBUG] [Thread-123707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:11:14.639 [DEBUG] [Thread-123707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:11:14.663 [INFO] [Thread-123707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:11:14.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:11:15.316 [DEBUG] [Thread-123707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:11:15.316 [DEBUG] [Thread-123707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:11:15.317 [DEBUG] [Thread-123707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:11:15.358 [DEBUG] [Thread-123707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:11:15.358 [DEBUG] [Thread-123707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:11:15.361 [DEBUG] [Thread-123707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:11:15.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:11:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:11:15.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:11:15.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:11:15.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:11:15.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:11:15.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:11:15.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:11:15.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:11:15.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.799009 -999.00  +16.50  21.15     37   +2.00 1 1 1 1 1     0    0 14.21 -8.77 ZNESW 21.1 21.1 141.8 24.4 16.9 -25.4 16.8 -24.8 16.6 -23.1 16.9 -24.2
2025-12-03T21:11:15.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:11:15.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:11:15.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.799009
2025-12-03T21:11:15.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:11:15.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:11:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:11:15.386 [DEBUG] [Thread-123707] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:11:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:11:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:11:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:11:10', tmtdew=16.7, humidity=31.97, cloud=0.0, wind=23.86, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:11:10', seeing=1.0, atlas_timestamp='2025-12-03T19:10:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.028249999999999886, -0.0417500000000004, -0.0235000000000003, -0.03399999999999892, 0.02725000000000044, -0.030000000000001137, -0.05274999999999963, 0.017499999999998295, -0.009000000000000341, 0.02674999999999983, -0.008000000000000895, 0.02099999999999902, 0.017249999999998877, -0.031000000000000583, -0.18650000000000055, -0.005749999999999034, 0.042500000000000426, 0.03399999999999892, -0.01675000000000182, 0.11399999999999899, 0.05824999999999747, -0.10274999999999856, -0.2612500000000004, 0.04449999999999932, 0.025500000000000966, 0.025249999999999773, 0.044500000000001094, 0.032999999999999474, -0.09849999999999781, -0.06199999999999939, -0.17050000000000054, -0.06125000000000114], zp_timestamp='2025-12-03T19:07:00')
2025-12-03T21:11:15.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:11:15.489 [DEBUG] [Thread-123710] [transport.py] [_log()] starting thread (client mode): 0xa51d1060
2025-12-03T21:11:15.489 [DEBUG] [Thread-123710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:11:15.504 [DEBUG] [Thread-123710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:11:15.504 [INFO] [Thread-123710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:11:15.511 [DEBUG] [Thread-123710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:11:15.512 [DEBUG] [Thread-123710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] client lang: <none>
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] server lang: <none>
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] kex follows: False
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:11:15.513 [DEBUG] [Thread-123710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:11:15.514 [DEBUG] [Thread-123710] [transport.py] [_log()] Compression: none
2025-12-03T21:11:15.514 [DEBUG] [Thread-123710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:11:15.570 [DEBUG] [Thread-123710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:11:15.570 [DEBUG] [Thread-123710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:11:15.570 [DEBUG] [Thread-123710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:11:15.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:11:15.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:11:15.625 [DEBUG] [Thread-123710] [transport.py] [_log()] userauth is OK
2025-12-03T21:11:15.626 [DEBUG] [Thread-123710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:11:15.626 [DEBUG] [Thread-123710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:11:15.626 [DEBUG] [Thread-123710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:11:15.626 [DEBUG] [Thread-123710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:11:15.645 [INFO] [Thread-123710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:11:15.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:11:15.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:11:16.449 [DEBUG] [Thread-123710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:11:16.449 [DEBUG] [Thread-123710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:11:16.499 [DEBUG] [Thread-123710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:11:16.499 [DEBUG] [Thread-123710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:11:16.508 [DEBUG] [Thread-123710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:11:16.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:11:16.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:11:16.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:11:16.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:11:16.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:11:16.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:11:16.542 [DEBUG] [Thread-123710] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:11:18.628 [DEBUG] [Thread-123712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:28.404 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:33.686 [DEBUG] [Thread-123713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:11:46.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:11:46.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:11:47.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 11, 42), 16.59, 32.49, 0.0, 23.24, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:11:47.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:11:42
2025-12-03T21:11:47.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:11:47.544 [DEBUG] [Thread-123714] [transport.py] [_log()] starting thread (client mode): 0xa517c070
2025-12-03T21:11:47.544 [DEBUG] [Thread-123714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:11:47.565 [DEBUG] [Thread-123714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:11:47.565 [INFO] [Thread-123714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:11:47.568 [DEBUG] [Thread-123714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:47.569 [DEBUG] [Thread-123714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] client lang: <none>
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] server lang: <none>
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] kex follows: False
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:11:47.570 [DEBUG] [Thread-123714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:11:47.571 [DEBUG] [Thread-123714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:11:47.571 [DEBUG] [Thread-123714] [transport.py] [_log()] Compression: none
2025-12-03T21:11:47.571 [DEBUG] [Thread-123714] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:11:47.591 [DEBUG] [Thread-123714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:11:47.592 [DEBUG] [Thread-123714] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:11:47.592 [DEBUG] [Thread-123714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:11:47.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:11:47.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:11:47.594 [DEBUG] [Thread-123714] [transport.py] [_log()] userauth is OK
2025-12-03T21:11:47.594 [DEBUG] [Thread-123714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:11:47.595 [DEBUG] [Thread-123714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:11:47.595 [DEBUG] [Thread-123714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:11:47.595 [DEBUG] [Thread-123714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:11:47.617 [INFO] [Thread-123714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:11:47.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:11:47.681 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:47.682 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:48.196 [DEBUG] [Thread-123714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:11:48.196 [DEBUG] [Thread-123714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:11:48.196 [DEBUG] [Thread-123714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:11:48.237 [DEBUG] [Thread-123714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:11:48.237 [DEBUG] [Thread-123714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:11:48.240 [DEBUG] [Thread-123714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:11:48.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:11:48.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:11:48.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:11:48.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:11:48.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:11:48.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:11:48.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:11:48.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:11:48.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:11:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.799704 -999.00  +16.50  20.58     37   +2.00 1 1 1 1 1     0    0 14.20 -9.47 ZNESW 20.6 20.6 143.0 24.6 16.9 -25.2 16.8 -24.7 16.6 -23.3 16.8 -23.9
2025-12-03T21:11:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:11:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:11:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.799704
2025-12-03T21:11:48.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:11:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:11:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:11:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:11:48.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:11:48.271 [DEBUG] [Thread-123714] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:11:48.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:11:42', tmtdew=16.59, humidity=32.49, cloud=0.0, wind=23.24, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:11:42', seeing=1.04, atlas_timestamp='2025-12-03T19:11:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:10:00')
2025-12-03T21:11:48.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:11:48.375 [DEBUG] [Thread-123717] [transport.py] [_log()] starting thread (client mode): 0xa517f850
2025-12-03T21:11:48.376 [DEBUG] [Thread-123717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:11:48.392 [DEBUG] [Thread-123717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:11:48.392 [INFO] [Thread-123717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:11:48.399 [DEBUG] [Thread-123717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:11:48.399 [DEBUG] [Thread-123717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] client lang: <none>
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] server lang: <none>
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] kex follows: False
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:11:48.400 [DEBUG] [Thread-123717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:11:48.401 [DEBUG] [Thread-123717] [transport.py] [_log()] Compression: none
2025-12-03T21:11:48.401 [DEBUG] [Thread-123717] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:11:48.458 [DEBUG] [Thread-123717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:11:48.459 [DEBUG] [Thread-123717] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:11:48.459 [DEBUG] [Thread-123717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:11:48.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:11:48.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:11:48.514 [DEBUG] [Thread-123717] [transport.py] [_log()] userauth is OK
2025-12-03T21:11:48.515 [DEBUG] [Thread-123717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:11:48.515 [DEBUG] [Thread-123717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:11:48.515 [DEBUG] [Thread-123717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:11:48.515 [DEBUG] [Thread-123717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:11:48.534 [INFO] [Thread-123717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:11:48.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:11:48.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:11:48.723 [DEBUG] [Thread-123719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:48.831 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:11:49.357 [DEBUG] [Thread-123717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:11:49.358 [DEBUG] [Thread-123717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:11:49.406 [DEBUG] [Thread-123717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:11:49.406 [DEBUG] [Thread-123717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:11:49.415 [DEBUG] [Thread-123717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:11:49.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:11:49.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:11:49.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:11:49.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:11:49.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:11:49.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:11:49.450 [DEBUG] [Thread-123717] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:12:03.780 [DEBUG] [Thread-123720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:09.246 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:10.596 [DEBUG] [Thread-123721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:18.817 [DEBUG] [Thread-123722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:19.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:12:19.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:12:19.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:12:20.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 12, 14), 16.59, 32.51, 0.0, 23.2, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:12:20.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:12:14
2025-12-03T21:12:20.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:12:20.431 [DEBUG] [Thread-123723] [transport.py] [_log()] starting thread (client mode): 0xa51d0df0
2025-12-03T21:12:20.431 [DEBUG] [Thread-123723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:12:20.451 [DEBUG] [Thread-123723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:12:20.452 [INFO] [Thread-123723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:12:20.454 [DEBUG] [Thread-123723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:12:20.454 [DEBUG] [Thread-123723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:12:20.454 [DEBUG] [Thread-123723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:12:20.454 [DEBUG] [Thread-123723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:20.454 [DEBUG] [Thread-123723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] client lang: <none>
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] server lang: <none>
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] kex follows: False
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:12:20.455 [DEBUG] [Thread-123723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:12:20.456 [DEBUG] [Thread-123723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:12:20.456 [DEBUG] [Thread-123723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:12:20.456 [DEBUG] [Thread-123723] [transport.py] [_log()] Compression: none
2025-12-03T21:12:20.456 [DEBUG] [Thread-123723] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:12:20.468 [DEBUG] [Thread-123723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:12:20.469 [DEBUG] [Thread-123723] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:12:20.469 [DEBUG] [Thread-123723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:12:20.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:12:20.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:12:20.512 [DEBUG] [Thread-123723] [transport.py] [_log()] userauth is OK
2025-12-03T21:12:20.513 [DEBUG] [Thread-123723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:12:20.513 [DEBUG] [Thread-123723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:12:20.513 [DEBUG] [Thread-123723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:12:20.513 [DEBUG] [Thread-123723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:12:20.532 [INFO] [Thread-123723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:12:20.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:12:21.169 [DEBUG] [Thread-123723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:12:21.169 [DEBUG] [Thread-123723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:12:21.169 [DEBUG] [Thread-123723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:12:21.210 [DEBUG] [Thread-123723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:12:21.210 [DEBUG] [Thread-123723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:12:21.213 [DEBUG] [Thread-123723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:12:21.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:12:21.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:12:21.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:12:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:12:21.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:12:21.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:12:21.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:12:21.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:12:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:12:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.800051 -999.00  +16.50  18.68     37   +2.00 1 1 1 1 1     0    0 14.27 -9.50 ZNESW 18.7 18.7 146.6 21.2 16.8 -25.3 16.8 -25.0 16.6 -23.1 16.8 -24.1
2025-12-03T21:12:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:12:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:12:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.800051
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:12:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:12:14', tmtdew=16.59, humidity=32.51, cloud=0.0, wind=23.2, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:12:14', seeing=1.04, atlas_timestamp='2025-12-03T19:12:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:10:00')
2025-12-03T21:12:21.240 [DEBUG] [Thread-123723] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:12:21.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:12:21.341 [DEBUG] [Thread-123726] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T21:12:21.341 [DEBUG] [Thread-123726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:12:21.356 [DEBUG] [Thread-123726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:12:21.356 [INFO] [Thread-123726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:12:21.363 [DEBUG] [Thread-123726] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] client lang: <none>
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] server lang: <none>
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] kex follows: False
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:12:21.364 [DEBUG] [Thread-123726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:12:21.365 [DEBUG] [Thread-123726] [transport.py] [_log()] Compression: none
2025-12-03T21:12:21.365 [DEBUG] [Thread-123726] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:12:21.422 [DEBUG] [Thread-123726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:12:21.422 [DEBUG] [Thread-123726] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:12:21.423 [DEBUG] [Thread-123726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:12:21.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:12:21.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:12:21.479 [DEBUG] [Thread-123726] [transport.py] [_log()] userauth is OK
2025-12-03T21:12:21.479 [DEBUG] [Thread-123726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:12:21.479 [DEBUG] [Thread-123726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:12:21.479 [DEBUG] [Thread-123726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:12:21.479 [DEBUG] [Thread-123726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:12:21.493 [INFO] [Thread-123726] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:12:21.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:12:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:12:22.299 [DEBUG] [Thread-123726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:12:22.299 [DEBUG] [Thread-123726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:12:22.347 [DEBUG] [Thread-123726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:12:22.347 [DEBUG] [Thread-123726] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:12:22.356 [DEBUG] [Thread-123726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:12:22.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:12:22.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:12:22.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:12:22.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:12:22.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:12:22.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:12:22.391 [DEBUG] [Thread-123726] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:12:29.743 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:33.856 [DEBUG] [Thread-123728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:47.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:47.885 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:48.911 [DEBUG] [Thread-123729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:50.242 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:12:52.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:12:52.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:12:52.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:12:53.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 12, 46), 16.63, 32.52, 0.0, 24.98, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:12:53.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:12:46
2025-12-03T21:12:53.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:12:53.366 [DEBUG] [Thread-123730] [transport.py] [_log()] starting thread (client mode): 0xa51d1cc0
2025-12-03T21:12:53.367 [DEBUG] [Thread-123730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:12:53.385 [DEBUG] [Thread-123730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:12:53.385 [INFO] [Thread-123730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:12:53.386 [DEBUG] [Thread-123730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:12:53.386 [DEBUG] [Thread-123730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] client lang: <none>
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] server lang: <none>
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] kex follows: False
2025-12-03T21:12:53.387 [DEBUG] [Thread-123730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] Compression: none
2025-12-03T21:12:53.388 [DEBUG] [Thread-123730] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:12:53.399 [DEBUG] [Thread-123730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:12:53.400 [DEBUG] [Thread-123730] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:12:53.401 [DEBUG] [Thread-123730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:12:53.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:12:53.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:12:53.403 [DEBUG] [Thread-123730] [transport.py] [_log()] userauth is OK
2025-12-03T21:12:53.403 [DEBUG] [Thread-123730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:12:53.404 [DEBUG] [Thread-123730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:12:53.404 [DEBUG] [Thread-123730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:12:53.404 [DEBUG] [Thread-123730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:12:53.420 [INFO] [Thread-123730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:12:53.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:12:54.024 [DEBUG] [Thread-123730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:12:54.024 [DEBUG] [Thread-123730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:12:54.024 [DEBUG] [Thread-123730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:12:54.065 [DEBUG] [Thread-123730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:12:54.065 [DEBUG] [Thread-123730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:12:54.068 [DEBUG] [Thread-123730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:12:54.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:12:54.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:12:54.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:12:54.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:12:54.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:12:54.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:12:54.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:12:54.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:12:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:12:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.800398 -999.00  +16.40  17.89     37   +2.00 1 1 1 1 1     0    0 14.21 -10.01 ZNESW 17.9 17.9 143.0 23.9 16.8 -25.3 16.8 -24.8 16.6 -23.2 16.8 -24.0
2025-12-03T21:12:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:12:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:12:54.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.800398
2025-12-03T21:12:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:12:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:12:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:12:54.092 [DEBUG] [Thread-123730] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:12:54.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:12:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:12:54.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:12:46', tmtdew=16.63, humidity=32.52, cloud=0.0, wind=24.98, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:12:46', seeing=1.05, atlas_timestamp='2025-12-03T19:12:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:10:00')
2025-12-03T21:12:54.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:12:54.195 [DEBUG] [Thread-123733] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T21:12:54.195 [DEBUG] [Thread-123733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:12:54.209 [DEBUG] [Thread-123733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:12:54.209 [INFO] [Thread-123733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:12:54.217 [DEBUG] [Thread-123733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:12:54.217 [DEBUG] [Thread-123733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:12:54.217 [DEBUG] [Thread-123733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:12:54.217 [DEBUG] [Thread-123733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:54.217 [DEBUG] [Thread-123733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] client lang: <none>
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] server lang: <none>
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] kex follows: False
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] Compression: none
2025-12-03T21:12:54.218 [DEBUG] [Thread-123733] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:12:54.276 [DEBUG] [Thread-123733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:12:54.276 [DEBUG] [Thread-123733] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:12:54.277 [DEBUG] [Thread-123733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:12:54.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:12:54.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:12:54.332 [DEBUG] [Thread-123733] [transport.py] [_log()] userauth is OK
2025-12-03T21:12:54.333 [DEBUG] [Thread-123733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:12:54.333 [DEBUG] [Thread-123733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:12:54.333 [DEBUG] [Thread-123733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:12:54.333 [DEBUG] [Thread-123733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:12:54.352 [INFO] [Thread-123733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:12:54.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:12:54.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:12:55.145 [DEBUG] [Thread-123733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:12:55.145 [DEBUG] [Thread-123733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:12:55.195 [DEBUG] [Thread-123733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:12:55.195 [DEBUG] [Thread-123733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:12:55.206 [DEBUG] [Thread-123733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:12:55.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:12:55.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:12:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:12:55.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:12:55.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:12:55.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:12:55.274 [DEBUG] [Thread-123733] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:13:03.944 [DEBUG] [Thread-123735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:10.665 [DEBUG] [Thread-123736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:10.772 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:19.009 [DEBUG] [Thread-123737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:13:25.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:13:25.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:13:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 13, 18), 16.63, 32.52, 0.0, 22.44, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:13:26.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:13:18
2025-12-03T21:13:26.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:13:26.319 [DEBUG] [Thread-123738] [transport.py] [_log()] starting thread (client mode): 0xa514e170
2025-12-03T21:13:26.319 [DEBUG] [Thread-123738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:13:26.330 [DEBUG] [Thread-123738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:13:26.331 [INFO] [Thread-123738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] client lang: <none>
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] server lang: <none>
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] kex follows: False
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:13:26.334 [DEBUG] [Thread-123738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:13:26.335 [DEBUG] [Thread-123738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:13:26.335 [DEBUG] [Thread-123738] [transport.py] [_log()] Compression: none
2025-12-03T21:13:26.335 [DEBUG] [Thread-123738] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:13:26.351 [DEBUG] [Thread-123738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:13:26.351 [DEBUG] [Thread-123738] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:13:26.351 [DEBUG] [Thread-123738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:13:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:13:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:13:26.352 [DEBUG] [Thread-123738] [transport.py] [_log()] userauth is OK
2025-12-03T21:13:26.352 [DEBUG] [Thread-123738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:13:26.352 [DEBUG] [Thread-123738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:13:26.352 [DEBUG] [Thread-123738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:13:26.352 [DEBUG] [Thread-123738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:13:26.364 [INFO] [Thread-123738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:13:26.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:13:26.956 [DEBUG] [Thread-123738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:13:26.956 [DEBUG] [Thread-123738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:13:26.956 [DEBUG] [Thread-123738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:13:26.997 [DEBUG] [Thread-123738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:13:26.997 [DEBUG] [Thread-123738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:13:26.999 [DEBUG] [Thread-123738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:13:27.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:13:27.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:13:27.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:13:27.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:13:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:13:27.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:13:27.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.800745 -999.00  +16.40  18.17     37   +2.00 1 1 1 1 1     0    0 14.48 -9.67 ZNESW 18.2 18.2 138.6 24.7 16.8 -25.4 16.8 -24.9 16.6 -23.2 16.8 -24.0
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.800745
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:13:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:13:27.021 [DEBUG] [Thread-123738] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:13:27.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:13:18', tmtdew=16.63, humidity=32.52, cloud=0.0, wind=22.44, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:13:18', seeing=1.0, atlas_timestamp='2025-12-03T19:13:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:10:00')
2025-12-03T21:13:27.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:13:27.113 [DEBUG] [Thread-123741] [transport.py] [_log()] starting thread (client mode): 0xa271c910
2025-12-03T21:13:27.113 [DEBUG] [Thread-123741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:13:27.128 [DEBUG] [Thread-123741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:13:27.128 [INFO] [Thread-123741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] client lang: <none>
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] server lang: <none>
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] kex follows: False
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] Compression: none
2025-12-03T21:13:27.136 [DEBUG] [Thread-123741] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:13:27.196 [DEBUG] [Thread-123741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:13:27.196 [DEBUG] [Thread-123741] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:13:27.196 [DEBUG] [Thread-123741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:13:27.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:13:27.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:13:27.252 [DEBUG] [Thread-123741] [transport.py] [_log()] userauth is OK
2025-12-03T21:13:27.252 [DEBUG] [Thread-123741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:13:27.252 [DEBUG] [Thread-123741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:13:27.252 [DEBUG] [Thread-123741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:13:27.252 [DEBUG] [Thread-123741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:13:27.267 [INFO] [Thread-123741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:13:27.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:13:27.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:13:28.147 [DEBUG] [Thread-123741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:13:28.147 [DEBUG] [Thread-123741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:13:28.195 [DEBUG] [Thread-123741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:13:28.196 [DEBUG] [Thread-123741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:13:28.204 [DEBUG] [Thread-123741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:13:28.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:13:28.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:13:28.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:13:28.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:13:28.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:13:28.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:13:28.236 [DEBUG] [Thread-123741] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:13:31.311 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:34.040 [DEBUG] [Thread-123743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:48.092 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:48.093 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:49.109 [DEBUG] [Thread-123744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:51.843 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:13:58.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:13:58.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:13:58.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:13:58.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 13, 50), 16.67, 32.04, 0.0, 22.29, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:13:58.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:13:50
2025-12-03T21:13:59.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:13:59.238 [DEBUG] [Thread-123745] [transport.py] [_log()] starting thread (client mode): 0xa2728370
2025-12-03T21:13:59.238 [DEBUG] [Thread-123745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:13:59.258 [DEBUG] [Thread-123745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:13:59.258 [INFO] [Thread-123745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:13:59.261 [DEBUG] [Thread-123745] [transport.py] [_log()] client lang: <none>
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] server lang: <none>
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] kex follows: False
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] Compression: none
2025-12-03T21:13:59.262 [DEBUG] [Thread-123745] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:13:59.278 [DEBUG] [Thread-123745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:13:59.279 [DEBUG] [Thread-123745] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:13:59.279 [DEBUG] [Thread-123745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:13:59.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:13:59.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:13:59.281 [DEBUG] [Thread-123745] [transport.py] [_log()] userauth is OK
2025-12-03T21:13:59.281 [DEBUG] [Thread-123745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:13:59.281 [DEBUG] [Thread-123745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:13:59.282 [DEBUG] [Thread-123745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:13:59.282 [DEBUG] [Thread-123745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:13:59.299 [INFO] [Thread-123745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:13:59.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:13:59.936 [DEBUG] [Thread-123745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:13:59.936 [DEBUG] [Thread-123745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:13:59.936 [DEBUG] [Thread-123745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:13:59.977 [DEBUG] [Thread-123745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:13:59.977 [DEBUG] [Thread-123745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:13:59.980 [DEBUG] [Thread-123745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:13:59.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:13:59.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:13:59.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:13:59.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:14:00.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:14:00.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:14:00.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:14:00.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:14:00.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:14:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.800745 -999.00  +16.40  18.17     37   +2.00 1 1 1 1 1     0    0 14.48 -9.67 ZNESW 18.2 18.2 138.6 24.7 16.8 -25.4 16.8 -24.9 16.6 -23.2 16.8 -24.0
2025-12-03T21:14:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:14:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:14:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.800745
2025-12-03T21:14:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:14:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:14:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:14:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:14:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:14:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:13:50', tmtdew=16.67, humidity=32.04, cloud=0.0, wind=22.29, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:13:50', seeing=1.17, atlas_timestamp='2025-12-03T19:13:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:10:00')
2025-12-03T21:14:00.007 [DEBUG] [Thread-123745] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:14:00.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:14:00.110 [DEBUG] [Thread-123748] [transport.py] [_log()] starting thread (client mode): 0xa51d3cd0
2025-12-03T21:14:00.110 [DEBUG] [Thread-123748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:14:00.125 [DEBUG] [Thread-123748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:14:00.125 [INFO] [Thread-123748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:14:00.132 [DEBUG] [Thread-123748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] client lang: <none>
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] server lang: <none>
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] kex follows: False
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] Compression: none
2025-12-03T21:14:00.133 [DEBUG] [Thread-123748] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:14:00.188 [DEBUG] [Thread-123748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:14:00.188 [DEBUG] [Thread-123748] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:14:00.188 [DEBUG] [Thread-123748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:14:00.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:14:00.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:14:00.246 [DEBUG] [Thread-123748] [transport.py] [_log()] userauth is OK
2025-12-03T21:14:00.246 [DEBUG] [Thread-123748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:14:00.246 [DEBUG] [Thread-123748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:14:00.246 [DEBUG] [Thread-123748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:14:00.246 [DEBUG] [Thread-123748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:14:00.265 [INFO] [Thread-123748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:14:00.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:14:00.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:14:01.051 [DEBUG] [Thread-123748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:14:01.051 [DEBUG] [Thread-123748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:14:01.102 [DEBUG] [Thread-123748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:14:01.102 [DEBUG] [Thread-123748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:14:01.114 [DEBUG] [Thread-123748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:14:01.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:14:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:14:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:14:01.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:14:01.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:14:01.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:14:01.149 [DEBUG] [Thread-123748] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:14:04.148 [DEBUG] [Thread-123750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:10.728 [DEBUG] [Thread-123751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:12.376 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:19.196 [DEBUG] [Thread-123752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:14:31.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:14:31.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:14:31.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 14, 22), 16.66, 32.07, 0.0, 23.93, 16.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:14:31.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:14:22
2025-12-03T21:14:31.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:14:32.141 [DEBUG] [Thread-123753] [transport.py] [_log()] starting thread (client mode): 0xa514ada0
2025-12-03T21:14:32.141 [DEBUG] [Thread-123753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:14:32.163 [DEBUG] [Thread-123753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:14:32.163 [INFO] [Thread-123753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] client lang: <none>
2025-12-03T21:14:32.167 [DEBUG] [Thread-123753] [transport.py] [_log()] server lang: <none>
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] kex follows: False
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] Compression: none
2025-12-03T21:14:32.168 [DEBUG] [Thread-123753] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:14:32.185 [DEBUG] [Thread-123753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:14:32.186 [DEBUG] [Thread-123753] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:14:32.186 [DEBUG] [Thread-123753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:14:32.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:14:32.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:14:32.188 [DEBUG] [Thread-123753] [transport.py] [_log()] userauth is OK
2025-12-03T21:14:32.188 [DEBUG] [Thread-123753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:14:32.188 [DEBUG] [Thread-123753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:14:32.189 [DEBUG] [Thread-123753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:14:32.189 [DEBUG] [Thread-123753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:14:32.222 [INFO] [Thread-123753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:14:32.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:14:32.875 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:33.005 [DEBUG] [Thread-123753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:14:33.005 [DEBUG] [Thread-123753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:14:33.005 [DEBUG] [Thread-123753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:14:33.046 [DEBUG] [Thread-123753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:14:33.046 [DEBUG] [Thread-123753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:14:33.049 [DEBUG] [Thread-123753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:14:33.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:14:33.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:14:33.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:14:33.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:14:33.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:14:33.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:14:33.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.801093 -999.00  +16.40  19.30     37   +2.00 1 1 1 1 1     0    0 14.23 -10.11 ZNESW 19.3 19.3 137.8 26.5 16.8 -25.3 16.8 -24.7 16.6 -23.1 16.8 -24.1
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:14:33.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.801093
2025-12-03T21:14:33.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:14:33.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:14:33.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:14:33.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:14:33.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:14:33.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:14:22', tmtdew=16.66, humidity=32.07, cloud=0.0, wind=23.93, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:14:22', seeing=1.1, atlas_timestamp='2025-12-03T19:13:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:14:33.078 [DEBUG] [Thread-123753] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:14:33.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:14:33.185 [DEBUG] [Thread-123756] [transport.py] [_log()] starting thread (client mode): 0xa517e230
2025-12-03T21:14:33.185 [DEBUG] [Thread-123756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:14:33.200 [DEBUG] [Thread-123756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:14:33.200 [INFO] [Thread-123756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:14:33.208 [DEBUG] [Thread-123756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] client lang: <none>
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] server lang: <none>
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] kex follows: False
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] Compression: none
2025-12-03T21:14:33.209 [DEBUG] [Thread-123756] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:14:33.266 [DEBUG] [Thread-123756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:14:33.266 [DEBUG] [Thread-123756] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:14:33.267 [DEBUG] [Thread-123756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:14:33.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:14:33.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:14:33.322 [DEBUG] [Thread-123756] [transport.py] [_log()] userauth is OK
2025-12-03T21:14:33.323 [DEBUG] [Thread-123756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:14:33.323 [DEBUG] [Thread-123756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:14:33.323 [DEBUG] [Thread-123756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:14:33.323 [DEBUG] [Thread-123756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:14:33.341 [INFO] [Thread-123756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:14:33.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:14:33.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:14:34.158 [DEBUG] [Thread-123756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:14:34.158 [DEBUG] [Thread-123756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:14:34.207 [DEBUG] [Thread-123756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:14:34.207 [DEBUG] [Thread-123756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:14:34.216 [DEBUG] [Thread-123756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:14:34.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:14:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:14:34.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:14:34.236 [DEBUG] [Thread-123758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:34.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:14:34.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:14:34.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:14:34.250 [DEBUG] [Thread-123756] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:14:48.294 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:48.295 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:49.299 [DEBUG] [Thread-123759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:14:53.448 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:04.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:15:04.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:15:04.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:15:04.336 [DEBUG] [Thread-123760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:04.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 14, 54), 16.67, 32.02, 0.0, 26.55, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:15:04.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:14:54
2025-12-03T21:15:05.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:15:05.224 [DEBUG] [Thread-123761] [transport.py] [_log()] starting thread (client mode): 0xa514af20
2025-12-03T21:15:05.224 [DEBUG] [Thread-123761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:15:05.244 [DEBUG] [Thread-123761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:15:05.244 [INFO] [Thread-123761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:05.247 [DEBUG] [Thread-123761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] client lang: <none>
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] server lang: <none>
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] kex follows: False
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] Compression: none
2025-12-03T21:15:05.248 [DEBUG] [Thread-123761] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:15:05.265 [DEBUG] [Thread-123761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:15:05.265 [DEBUG] [Thread-123761] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:15:05.266 [DEBUG] [Thread-123761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:15:05.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:15:05.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:15:05.268 [DEBUG] [Thread-123761] [transport.py] [_log()] userauth is OK
2025-12-03T21:15:05.268 [DEBUG] [Thread-123761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:15:05.268 [DEBUG] [Thread-123761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:15:05.268 [DEBUG] [Thread-123761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:15:05.268 [DEBUG] [Thread-123761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:15:05.291 [INFO] [Thread-123761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:15:05.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:15:06.105 [DEBUG] [Thread-123761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:15:06.105 [DEBUG] [Thread-123761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:15:06.106 [DEBUG] [Thread-123761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:15:06.146 [DEBUG] [Thread-123761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:15:06.146 [DEBUG] [Thread-123761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:15:06.149 [DEBUG] [Thread-123761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:15:06.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:15:06.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:15:06.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:15:06.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:15:06.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:15:06.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:15:06.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:15:06.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:15:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:15:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.801440 -999.00  +16.40  20.18     37   +2.00 1 1 1 1 1     0    0 14.47 -10.94 ZNESW 20.2 20.2 143.0 24.7 16.8 -25.3 16.8 -24.8 16.5 -23.2 16.8 -24.0
2025-12-03T21:15:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:15:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:15:06.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.801440
2025-12-03T21:15:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:15:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:15:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:15:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:15:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:15:06.179 [DEBUG] [Thread-123761] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:15:06.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:14:54', tmtdew=16.67, humidity=32.02, cloud=0.0, wind=26.55, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:14:54', seeing=1.01, atlas_timestamp='2025-12-03T19:14:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:15:06.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:15:06.287 [DEBUG] [Thread-123764] [transport.py] [_log()] starting thread (client mode): 0xa51d3610
2025-12-03T21:15:06.287 [DEBUG] [Thread-123764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:15:06.306 [DEBUG] [Thread-123764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:15:06.306 [INFO] [Thread-123764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:06.322 [DEBUG] [Thread-123764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] client lang: <none>
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] server lang: <none>
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] kex follows: False
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] Compression: none
2025-12-03T21:15:06.323 [DEBUG] [Thread-123764] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:15:06.381 [DEBUG] [Thread-123764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:15:06.381 [DEBUG] [Thread-123764] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:15:06.382 [DEBUG] [Thread-123764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:15:06.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:15:06.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:15:06.439 [DEBUG] [Thread-123764] [transport.py] [_log()] userauth is OK
2025-12-03T21:15:06.439 [DEBUG] [Thread-123764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:15:06.439 [DEBUG] [Thread-123764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:15:06.440 [DEBUG] [Thread-123764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:15:06.440 [DEBUG] [Thread-123764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:15:06.458 [INFO] [Thread-123764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:15:06.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:15:06.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:15:07.287 [DEBUG] [Thread-123764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:15:07.287 [DEBUG] [Thread-123764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:15:07.335 [DEBUG] [Thread-123764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:15:07.335 [DEBUG] [Thread-123764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:15:07.344 [DEBUG] [Thread-123764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:15:07.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:15:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:15:07.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:15:07.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:15:07.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:15:07.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:15:07.387 [DEBUG] [Thread-123764] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:15:10.785 [DEBUG] [Thread-123766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:13.945 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:19.371 [DEBUG] [Thread-123767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:34.436 [DEBUG] [Thread-123768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:34.440 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:37.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:15:37.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:15:37.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:15:38.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 15, 26), 16.74, 31.87, 0.0, 23.24, 16.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:15:38.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:15:26
2025-12-03T21:15:38.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:15:38.375 [DEBUG] [Thread-123769] [transport.py] [_log()] starting thread (client mode): 0xa5148d30
2025-12-03T21:15:38.375 [DEBUG] [Thread-123769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:15:38.390 [DEBUG] [Thread-123769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:15:38.390 [INFO] [Thread-123769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:15:38.393 [DEBUG] [Thread-123769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:15:38.393 [DEBUG] [Thread-123769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] client lang: <none>
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] server lang: <none>
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] kex follows: False
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:15:38.394 [DEBUG] [Thread-123769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:15:38.395 [DEBUG] [Thread-123769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:15:38.395 [DEBUG] [Thread-123769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:15:38.395 [DEBUG] [Thread-123769] [transport.py] [_log()] Compression: none
2025-12-03T21:15:38.395 [DEBUG] [Thread-123769] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:15:38.412 [DEBUG] [Thread-123769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:15:38.413 [DEBUG] [Thread-123769] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:15:38.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:15:38.414 [DEBUG] [Thread-123769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:15:38.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:15:38.416 [DEBUG] [Thread-123769] [transport.py] [_log()] userauth is OK
2025-12-03T21:15:38.416 [DEBUG] [Thread-123769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:15:38.416 [DEBUG] [Thread-123769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:15:38.416 [DEBUG] [Thread-123769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:15:38.416 [DEBUG] [Thread-123769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:15:38.433 [INFO] [Thread-123769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:15:38.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:15:39.182 [DEBUG] [Thread-123769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:15:39.182 [DEBUG] [Thread-123769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:15:39.182 [DEBUG] [Thread-123769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:15:39.223 [DEBUG] [Thread-123769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:15:39.223 [DEBUG] [Thread-123769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:15:39.226 [DEBUG] [Thread-123769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:15:39.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:15:39.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:15:39.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:15:39.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:15:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:15:39.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:15:39.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.802134 -999.00  +16.40  15.29     37   +2.00 1 1 1 1 1     0    0 14.06 -11.52 ZNESW 15.3 15.3 151.4 24.4 16.8 -25.2 16.8 -24.7 16.6 -23.1 16.8 -23.8
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:15:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.802134
2025-12-03T21:15:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:15:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:15:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:15:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:15:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:15:39.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:15:26', tmtdew=16.74, humidity=31.87, cloud=0.0, wind=23.24, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:15:26', seeing=1.01, atlas_timestamp='2025-12-03T19:15:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:15:39.250 [DEBUG] [Thread-123769] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:15:39.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:15:39.354 [DEBUG] [Thread-123772] [transport.py] [_log()] starting thread (client mode): 0xa27ca8c0
2025-12-03T21:15:39.354 [DEBUG] [Thread-123772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:15:39.368 [DEBUG] [Thread-123772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:15:39.368 [INFO] [Thread-123772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:15:39.376 [DEBUG] [Thread-123772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] client lang: <none>
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] server lang: <none>
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] kex follows: False
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:15:39.377 [DEBUG] [Thread-123772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:15:39.378 [DEBUG] [Thread-123772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:15:39.378 [DEBUG] [Thread-123772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:15:39.378 [DEBUG] [Thread-123772] [transport.py] [_log()] Compression: none
2025-12-03T21:15:39.378 [DEBUG] [Thread-123772] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:15:39.435 [DEBUG] [Thread-123772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:15:39.436 [DEBUG] [Thread-123772] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:15:39.436 [DEBUG] [Thread-123772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:15:39.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:15:39.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:15:39.492 [DEBUG] [Thread-123772] [transport.py] [_log()] userauth is OK
2025-12-03T21:15:39.492 [DEBUG] [Thread-123772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:15:39.492 [DEBUG] [Thread-123772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:15:39.492 [DEBUG] [Thread-123772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:15:39.493 [DEBUG] [Thread-123772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:15:39.511 [INFO] [Thread-123772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:15:39.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:15:39.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:15:40.323 [DEBUG] [Thread-123772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:15:40.323 [DEBUG] [Thread-123772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:15:40.374 [DEBUG] [Thread-123772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:15:40.374 [DEBUG] [Thread-123772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:15:40.383 [DEBUG] [Thread-123772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:15:40.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:15:40.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:15:40.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:15:40.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:15:40.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:15:40.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:15:40.421 [DEBUG] [Thread-123772] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:15:48.498 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:48.499 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:49.472 [DEBUG] [Thread-123774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:15:54.935 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:04.526 [DEBUG] [Thread-123775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:16:10.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:16:10.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:16:10.849 [DEBUG] [Thread-123776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 15, 58), 16.74, 32.27, 0.0, 25.34, 16.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:16:11.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:15:58
2025-12-03T21:16:11.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:16:11.406 [DEBUG] [Thread-123777] [transport.py] [_log()] starting thread (client mode): 0xa514feb0
2025-12-03T21:16:11.406 [DEBUG] [Thread-123777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:16:11.426 [DEBUG] [Thread-123777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:16:11.426 [INFO] [Thread-123777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:11.429 [DEBUG] [Thread-123777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] client lang: <none>
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] server lang: <none>
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] kex follows: False
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:16:11.430 [DEBUG] [Thread-123777] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:16:11.431 [DEBUG] [Thread-123777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:16:11.431 [DEBUG] [Thread-123777] [transport.py] [_log()] Compression: none
2025-12-03T21:16:11.431 [DEBUG] [Thread-123777] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:16:11.452 [DEBUG] [Thread-123777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:16:11.452 [DEBUG] [Thread-123777] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:16:11.453 [DEBUG] [Thread-123777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:16:11.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:16:11.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:16:11.454 [DEBUG] [Thread-123777] [transport.py] [_log()] userauth is OK
2025-12-03T21:16:11.454 [DEBUG] [Thread-123777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:16:11.455 [DEBUG] [Thread-123777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:16:11.455 [DEBUG] [Thread-123777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:16:11.455 [DEBUG] [Thread-123777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:16:11.489 [INFO] [Thread-123777] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:16:11.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:16:12.151 [DEBUG] [Thread-123777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:16:12.151 [DEBUG] [Thread-123777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:16:12.151 [DEBUG] [Thread-123777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:16:12.192 [DEBUG] [Thread-123777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:16:12.192 [DEBUG] [Thread-123777] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:16:12.195 [DEBUG] [Thread-123777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:16:12.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:16:12.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:16:12.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:16:12.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:16:12.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:16:12.217 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:16:12.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:16:12.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:16:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:16:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.802482 -999.00  +16.50  14.79     37   +2.00 1 1 1 1 1     0    0 14.06 -11.47 ZNESW 14.8 14.8 146.8 23.9 16.8 -25.2 16.7 -24.6 16.4 -23.0 16.8 -23.9
2025-12-03T21:16:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:16:12.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:16:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.802482
2025-12-03T21:16:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:16:12.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:16:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:16:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:16:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:16:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:15:58', tmtdew=16.74, humidity=32.27, cloud=0.0, wind=25.34, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:15:59', seeing=1.17, atlas_timestamp='2025-12-03T19:15:34.445', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:16:12.219 [DEBUG] [Thread-123777] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:16:12.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:16:12.323 [DEBUG] [Thread-123780] [transport.py] [_log()] starting thread (client mode): 0xa27c8bb0
2025-12-03T21:16:12.323 [DEBUG] [Thread-123780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:16:12.338 [DEBUG] [Thread-123780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:16:12.338 [INFO] [Thread-123780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:16:12.346 [DEBUG] [Thread-123780] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:16:12.346 [DEBUG] [Thread-123780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:16:12.346 [DEBUG] [Thread-123780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:16:12.346 [DEBUG] [Thread-123780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:12.346 [DEBUG] [Thread-123780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] client lang: <none>
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] server lang: <none>
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] kex follows: False
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] Compression: none
2025-12-03T21:16:12.347 [DEBUG] [Thread-123780] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:16:12.418 [DEBUG] [Thread-123780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:16:12.419 [DEBUG] [Thread-123780] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:16:12.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:16:12.419 [DEBUG] [Thread-123780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:16:12.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:16:12.476 [DEBUG] [Thread-123780] [transport.py] [_log()] userauth is OK
2025-12-03T21:16:12.476 [DEBUG] [Thread-123780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:16:12.477 [DEBUG] [Thread-123780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:16:12.477 [DEBUG] [Thread-123780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:16:12.477 [DEBUG] [Thread-123780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:16:12.496 [INFO] [Thread-123780] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:16:12.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:16:12.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:16:13.335 [DEBUG] [Thread-123780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:16:13.335 [DEBUG] [Thread-123780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:16:13.383 [DEBUG] [Thread-123780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:16:13.383 [DEBUG] [Thread-123780] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:16:13.392 [DEBUG] [Thread-123780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:16:13.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:16:13.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:16:13.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:16:13.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:16:13.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:16:13.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:16:13.426 [DEBUG] [Thread-123780] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:16:15.507 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:19.566 [DEBUG] [Thread-123782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:34.621 [DEBUG] [Thread-123783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:35.965 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:43.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:16:43.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:16:43.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:16:44.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 16, 31), 16.71, 32.34, 0.0, 24.42, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:16:44.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:16:31
2025-12-03T21:16:44.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:16:44.414 [DEBUG] [Thread-123784] [transport.py] [_log()] starting thread (client mode): 0xa27cbe80
2025-12-03T21:16:44.414 [DEBUG] [Thread-123784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:16:44.429 [DEBUG] [Thread-123784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:16:44.429 [INFO] [Thread-123784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:16:44.432 [DEBUG] [Thread-123784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:16:44.432 [DEBUG] [Thread-123784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:16:44.432 [DEBUG] [Thread-123784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:16:44.432 [DEBUG] [Thread-123784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] client lang: <none>
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] server lang: <none>
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] kex follows: False
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] Compression: none
2025-12-03T21:16:44.433 [DEBUG] [Thread-123784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:16:44.450 [DEBUG] [Thread-123784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:16:44.450 [DEBUG] [Thread-123784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:16:44.451 [DEBUG] [Thread-123784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:16:44.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:16:44.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:16:44.452 [DEBUG] [Thread-123784] [transport.py] [_log()] userauth is OK
2025-12-03T21:16:44.453 [DEBUG] [Thread-123784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:16:44.453 [DEBUG] [Thread-123784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:16:44.453 [DEBUG] [Thread-123784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:16:44.453 [DEBUG] [Thread-123784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:16:44.478 [INFO] [Thread-123784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:16:44.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:16:45.282 [DEBUG] [Thread-123784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:16:45.282 [DEBUG] [Thread-123784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:16:45.283 [DEBUG] [Thread-123784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:16:45.323 [DEBUG] [Thread-123784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:16:45.323 [DEBUG] [Thread-123784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:16:45.326 [DEBUG] [Thread-123784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:16:45.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:16:45.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:16:45.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:16:45.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:16:45.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:16:45.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:16:45.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:16:45.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.802829 -999.00  +16.50  15.90     37   +2.00 1 1 1 1 1     0    0 14.13 -10.35 ZNESW 15.9 15.9 146.6 25.3 16.8 -25.2 16.8 -24.8 16.5 -23.1 16.8 -23.8
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.802829
2025-12-03T21:16:45.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:16:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:16:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:16:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:16:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:16:45.359 [DEBUG] [Thread-123784] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:16:45.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:16:31', tmtdew=16.71, humidity=32.34, cloud=0.0, wind=24.42, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:16:31', seeing=1.08, atlas_timestamp='2025-12-03T19:16:04.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:16:45.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:16:45.467 [DEBUG] [Thread-123787] [transport.py] [_log()] starting thread (client mode): 0xa277b6a0
2025-12-03T21:16:45.467 [DEBUG] [Thread-123787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:16:45.482 [DEBUG] [Thread-123787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:16:45.482 [INFO] [Thread-123787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] client lang: <none>
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] server lang: <none>
2025-12-03T21:16:45.490 [DEBUG] [Thread-123787] [transport.py] [_log()] kex follows: False
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] Compression: none
2025-12-03T21:16:45.491 [DEBUG] [Thread-123787] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:16:45.549 [DEBUG] [Thread-123787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:16:45.549 [DEBUG] [Thread-123787] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:16:45.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:16:45.550 [DEBUG] [Thread-123787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:16:45.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:16:45.605 [DEBUG] [Thread-123787] [transport.py] [_log()] userauth is OK
2025-12-03T21:16:45.605 [DEBUG] [Thread-123787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:16:45.605 [DEBUG] [Thread-123787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:16:45.605 [DEBUG] [Thread-123787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:16:45.605 [DEBUG] [Thread-123787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:16:45.626 [INFO] [Thread-123787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:16:45.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:16:45.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:16:46.465 [DEBUG] [Thread-123787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:16:46.465 [DEBUG] [Thread-123787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:16:46.513 [DEBUG] [Thread-123787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:16:46.513 [DEBUG] [Thread-123787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:16:46.522 [DEBUG] [Thread-123787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:16:46.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:16:46.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:16:46.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:16:46.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:16:46.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:16:46.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:16:46.559 [DEBUG] [Thread-123787] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:16:48.702 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:48.703 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:49.652 [DEBUG] [Thread-123789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:16:56.442 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:04.710 [DEBUG] [Thread-123790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:10.928 [DEBUG] [Thread-123791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:17:16.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:17:16.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:17:17.109 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 17, 3), 16.72, 32.31, 0.0, 24.3, 16.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:17:17.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:17:03
2025-12-03T21:17:17.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:17:17.613 [DEBUG] [Thread-123792] [transport.py] [_log()] starting thread (client mode): 0xa51e7af0
2025-12-03T21:17:17.613 [DEBUG] [Thread-123792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:17:17.635 [DEBUG] [Thread-123792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:17:17.635 [INFO] [Thread-123792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] client lang: <none>
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] server lang: <none>
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] kex follows: False
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] Compression: none
2025-12-03T21:17:17.639 [DEBUG] [Thread-123792] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:17:17.656 [DEBUG] [Thread-123792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:17:17.656 [DEBUG] [Thread-123792] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:17:17.656 [DEBUG] [Thread-123792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:17:17.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:17:17.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:17:17.657 [DEBUG] [Thread-123792] [transport.py] [_log()] userauth is OK
2025-12-03T21:17:17.657 [DEBUG] [Thread-123792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:17:17.657 [DEBUG] [Thread-123792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:17:17.657 [DEBUG] [Thread-123792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:17:17.657 [DEBUG] [Thread-123792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:17:17.674 [INFO] [Thread-123792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:17:17.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:17:18.308 [DEBUG] [Thread-123792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:17:18.309 [DEBUG] [Thread-123792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:17:18.309 [DEBUG] [Thread-123792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:17:18.350 [DEBUG] [Thread-123792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:17:18.350 [DEBUG] [Thread-123792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:17:18.352 [DEBUG] [Thread-123792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:17:18.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:17:18.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:17:18.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:17:18.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:17:18.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:17:18.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:17:18.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.803176 -999.00  +16.50  16.93     37   +1.90 1 1 1 1 1     0    0 14.32 -9.55 ZNESW 16.9 16.9 149.5 25.9 16.8 -25.3 16.7 -24.7 16.5 -23.1 16.8 -23.9
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.803176
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:17:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:17:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:17:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:17:03', tmtdew=16.72, humidity=32.31, cloud=0.0, wind=24.3, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:17:03', seeing=0.99, atlas_timestamp='2025-12-03T19:16:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005749999999999034, 0.007250000000000867, 0.004250000000000753, -0.06099999999999994, -0.05250000000000021, -0.02474999999999916, -0.068500000000002, -0.06824999999999903, 0.018499999999999517, 0.024499999999999744, -0.025750000000000384, 0.025000000000000355, 0.02800000000000047, 0.017249999999998877, 0.04349999999999987, -0.08800000000000097, 0.017250000000000654, 0.04550000000000054, 0.045999999999999375, -0.01425000000000054, 0.0804999999999989, 0.05924999999999869, -0.1767499999999984, -0.3042499999999997, 0.024499999999999744, 0.0495000000000001, 0.0017499999999994742, 0.0625, 0.11599999999999966, 0.05250000000000199, 0.015000000000000568, -0.13099999999999845, -0.06725000000000136], zp_timestamp='2025-12-03T19:13:00')
2025-12-03T21:17:18.372 [DEBUG] [Thread-123792] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:17:18.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:17:18.464 [DEBUG] [Thread-123795] [transport.py] [_log()] starting thread (client mode): 0xa271d090
2025-12-03T21:17:18.465 [DEBUG] [Thread-123795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:17:18.478 [DEBUG] [Thread-123795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:17:18.478 [INFO] [Thread-123795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] client lang: <none>
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] server lang: <none>
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] kex follows: False
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:17:18.486 [DEBUG] [Thread-123795] [transport.py] [_log()] Compression: none
2025-12-03T21:17:18.487 [DEBUG] [Thread-123795] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:17:18.544 [DEBUG] [Thread-123795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:17:18.544 [DEBUG] [Thread-123795] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:17:18.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:17:18.544 [DEBUG] [Thread-123795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:17:18.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:17:18.605 [DEBUG] [Thread-123795] [transport.py] [_log()] userauth is OK
2025-12-03T21:17:18.605 [DEBUG] [Thread-123795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:17:18.605 [DEBUG] [Thread-123795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:17:18.605 [DEBUG] [Thread-123795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:17:18.605 [DEBUG] [Thread-123795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:17:18.620 [INFO] [Thread-123795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:17:18.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:17:18.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:17:19.451 [DEBUG] [Thread-123795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:17:19.451 [DEBUG] [Thread-123795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:17:19.498 [DEBUG] [Thread-123795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:17:19.498 [DEBUG] [Thread-123795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:17:19.507 [DEBUG] [Thread-123795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:17:19.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:17:19.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:17:19.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:17:19.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:17:19.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:17:19.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:17:19.538 [DEBUG] [Thread-123795] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:17:19.738 [DEBUG] [Thread-123797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:34.785 [DEBUG] [Thread-123798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:37.491 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:48.904 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:48.905 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:49.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:17:49.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:17:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:17:49.825 [DEBUG] [Thread-123799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:17:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 17, 34), 16.7, 31.86, 0.0, 26.94, 16.54, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:17:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:17:34
2025-12-03T21:17:50.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:17:50.539 [DEBUG] [Thread-123800] [transport.py] [_log()] starting thread (client mode): 0xa271ded0
2025-12-03T21:17:50.539 [DEBUG] [Thread-123800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:17:50.559 [DEBUG] [Thread-123800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:17:50.559 [INFO] [Thread-123800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:17:50.562 [DEBUG] [Thread-123800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] client lang: <none>
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] server lang: <none>
2025-12-03T21:17:50.563 [DEBUG] [Thread-123800] [transport.py] [_log()] kex follows: False
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] Compression: none
2025-12-03T21:17:50.564 [DEBUG] [Thread-123800] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:17:50.582 [DEBUG] [Thread-123800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:17:50.582 [DEBUG] [Thread-123800] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:17:50.583 [DEBUG] [Thread-123800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:17:50.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:17:50.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:17:50.625 [DEBUG] [Thread-123800] [transport.py] [_log()] userauth is OK
2025-12-03T21:17:50.625 [DEBUG] [Thread-123800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:17:50.625 [DEBUG] [Thread-123800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:17:50.625 [DEBUG] [Thread-123800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:17:50.625 [DEBUG] [Thread-123800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:17:50.646 [INFO] [Thread-123800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:17:50.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:17:51.485 [DEBUG] [Thread-123800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:17:51.485 [DEBUG] [Thread-123800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:17:51.485 [DEBUG] [Thread-123800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:17:51.526 [DEBUG] [Thread-123800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:17:51.526 [DEBUG] [Thread-123800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:17:51.529 [DEBUG] [Thread-123800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:17:51.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:17:51.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:17:51.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:17:51.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:17:51.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:17:51.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:17:51.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:17:51.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:17:51.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.803523 -999.00  +16.50  17.60     37   +1.90 1 1 1 1 1     0    0 14.19 -9.50 ZNESW 17.6 17.6 144.7 27.4 16.8 -25.2 16.7 -24.7 16.5 -23.0 16.8 -23.9
2025-12-03T21:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.803523
2025-12-03T21:17:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:17:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:17:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:17:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:17:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:17:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:17:34', tmtdew=16.7, humidity=31.86, cloud=0.0, wind=26.94, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:17:36', seeing=1.11, atlas_timestamp='2025-12-03T19:17:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.0962499999999995, -0.0467499999999994, -0.057500000000000995, -0.041499999999999204, 0.024250000000000327, -0.02400000000000091, -0.09724999999999895, 0.023499999999998522, 0.008500000000001506, -0.03175000000000061, -0.025000000000000355, 0.017999999999998906, 0.0027500000000006963, -0.0555000000000021, -0.05799999999999983, -0.08975000000000044, 0.017999999999998906, -0.011499999999999844, -0.00975000000000037, 0.06099999999999817, 0.026749999999998053, -0.01774999999999949, -0.07525000000000048, 0.01649999999999885, 0.013500000000000512, 0.01774999999999949, 0.04749999999999943, 0.07200000000000095, 0.02800000000000047, -0.06399999999999828, -0.3359999999999985, -0.03275000000000006], zp_timestamp='2025-12-03T19:16:00')
2025-12-03T21:17:51.552 [DEBUG] [Thread-123800] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:17:51.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:17:51.656 [DEBUG] [Thread-123803] [transport.py] [_log()] starting thread (client mode): 0xa27c8280
2025-12-03T21:17:51.656 [DEBUG] [Thread-123803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:17:51.671 [DEBUG] [Thread-123803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:17:51.672 [INFO] [Thread-123803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:17:51.679 [DEBUG] [Thread-123803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] client lang: <none>
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] server lang: <none>
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] kex follows: False
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] Compression: none
2025-12-03T21:17:51.680 [DEBUG] [Thread-123803] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:17:51.738 [DEBUG] [Thread-123803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:17:51.739 [DEBUG] [Thread-123803] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:17:51.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:17:51.739 [DEBUG] [Thread-123803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:17:51.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:17:51.794 [DEBUG] [Thread-123803] [transport.py] [_log()] userauth is OK
2025-12-03T21:17:51.794 [DEBUG] [Thread-123803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:17:51.794 [DEBUG] [Thread-123803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:17:51.794 [DEBUG] [Thread-123803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:17:51.794 [DEBUG] [Thread-123803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:17:51.813 [INFO] [Thread-123803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:17:51.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:17:51.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:17:52.650 [DEBUG] [Thread-123803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:17:52.650 [DEBUG] [Thread-123803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:17:52.697 [DEBUG] [Thread-123803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:17:52.698 [DEBUG] [Thread-123803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:17:52.706 [DEBUG] [Thread-123803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:17:52.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:17:52.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:17:52.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:17:52.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:17:52.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:17:52.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:17:52.740 [DEBUG] [Thread-123803] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:17:57.874 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:04.855 [DEBUG] [Thread-123805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:11.006 [DEBUG] [Thread-123806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:18.258 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:19.925 [DEBUG] [Thread-123807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:22.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:18:22.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:18:22.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:18:23.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 18, 8), 16.7, 31.86, 0.0, 26.66, 16.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:18:23.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:18:08
2025-12-03T21:18:23.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:18:23.737 [DEBUG] [Thread-123808] [transport.py] [_log()] starting thread (client mode): 0xa2724490
2025-12-03T21:18:23.737 [DEBUG] [Thread-123808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:18:23.757 [DEBUG] [Thread-123808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:18:23.757 [INFO] [Thread-123808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] client lang: <none>
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] server lang: <none>
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] kex follows: False
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:18:23.760 [DEBUG] [Thread-123808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:18:23.761 [DEBUG] [Thread-123808] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:18:23.761 [DEBUG] [Thread-123808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:18:23.761 [DEBUG] [Thread-123808] [transport.py] [_log()] Compression: none
2025-12-03T21:18:23.761 [DEBUG] [Thread-123808] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:18:23.778 [DEBUG] [Thread-123808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:18:23.778 [DEBUG] [Thread-123808] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:18:23.779 [DEBUG] [Thread-123808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:18:23.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:18:23.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:18:23.781 [DEBUG] [Thread-123808] [transport.py] [_log()] userauth is OK
2025-12-03T21:18:23.781 [DEBUG] [Thread-123808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:18:23.781 [DEBUG] [Thread-123808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:18:23.781 [DEBUG] [Thread-123808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:18:23.781 [DEBUG] [Thread-123808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:18:23.816 [INFO] [Thread-123808] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:18:23.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:18:24.465 [DEBUG] [Thread-123808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:18:24.465 [DEBUG] [Thread-123808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:18:24.466 [DEBUG] [Thread-123808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:18:24.507 [DEBUG] [Thread-123808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:18:24.507 [DEBUG] [Thread-123808] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:18:24.510 [DEBUG] [Thread-123808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:18:24.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:18:24.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:18:24.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:18:24.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:18:24.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:18:24.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:18:24.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:18:24.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:18:24.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:18:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.803870 -999.00  +16.40  21.10     37   +1.90 1 1 1 1 1     0    0 14.35 -9.69 ZNESW 21.1 21.1 141.8 23.6 16.8 -25.3 16.7 -24.7 16.5 -23.0 16.7 -24.0
2025-12-03T21:18:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:18:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:18:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.803870
2025-12-03T21:18:24.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:18:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:18:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:18:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:18:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:18:24.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:18:08', tmtdew=16.7, humidity=31.86, cloud=0.0, wind=26.66, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:18:08', seeing=1.11, atlas_timestamp='2025-12-03T19:17:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.0962499999999995, -0.0467499999999994, -0.057500000000000995, -0.041499999999999204, 0.024250000000000327, -0.02400000000000091, -0.09724999999999895, 0.023499999999998522, 0.008500000000001506, -0.03175000000000061, -0.025000000000000355, 0.017999999999998906, 0.0027500000000006963, -0.0555000000000021, -0.05799999999999983, -0.08975000000000044, 0.017999999999998906, -0.011499999999999844, -0.00975000000000037, 0.06099999999999817, 0.026749999999998053, -0.01774999999999949, -0.07525000000000048, 0.01649999999999885, 0.013500000000000512, 0.01774999999999949, 0.04749999999999943, 0.07200000000000095, 0.02800000000000047, -0.06399999999999828, -0.3359999999999985, -0.03275000000000006], zp_timestamp='2025-12-03T19:16:00')
2025-12-03T21:18:24.536 [DEBUG] [Thread-123808] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:18:24.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:18:24.640 [DEBUG] [Thread-123811] [transport.py] [_log()] starting thread (client mode): 0xa27273a0
2025-12-03T21:18:24.640 [DEBUG] [Thread-123811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:18:24.655 [DEBUG] [Thread-123811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:18:24.656 [INFO] [Thread-123811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:24.667 [DEBUG] [Thread-123811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] client lang: <none>
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] server lang: <none>
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] kex follows: False
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:18:24.668 [DEBUG] [Thread-123811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:18:24.669 [DEBUG] [Thread-123811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:18:24.669 [DEBUG] [Thread-123811] [transport.py] [_log()] Compression: none
2025-12-03T21:18:24.669 [DEBUG] [Thread-123811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:18:24.723 [DEBUG] [Thread-123811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:18:24.724 [DEBUG] [Thread-123811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:18:24.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:18:24.725 [DEBUG] [Thread-123811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:18:24.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:18:24.783 [DEBUG] [Thread-123811] [transport.py] [_log()] userauth is OK
2025-12-03T21:18:24.783 [DEBUG] [Thread-123811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:18:24.783 [DEBUG] [Thread-123811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:18:24.783 [DEBUG] [Thread-123811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:18:24.783 [DEBUG] [Thread-123811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:18:24.802 [INFO] [Thread-123811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:18:24.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:18:24.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:18:25.619 [DEBUG] [Thread-123811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:18:25.619 [DEBUG] [Thread-123811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:18:25.667 [DEBUG] [Thread-123811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:18:25.667 [DEBUG] [Thread-123811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:18:25.677 [DEBUG] [Thread-123811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:18:25.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:18:25.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:18:25.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:18:25.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:18:25.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:18:25.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:18:25.714 [DEBUG] [Thread-123811] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:18:34.959 [DEBUG] [Thread-123813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:38.641 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:49.104 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:49.105 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:50.015 [DEBUG] [Thread-123814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:18:55.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:18:55.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:18:55.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:18:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 18, 40), 16.72, 31.79, 0.0, 27.91, 16.47, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:18:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:18:40
2025-12-03T21:18:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:18:56.711 [DEBUG] [Thread-123815] [transport.py] [_log()] starting thread (client mode): 0xa514b040
2025-12-03T21:18:56.711 [DEBUG] [Thread-123815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:18:56.732 [DEBUG] [Thread-123815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:18:56.733 [INFO] [Thread-123815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:18:56.734 [DEBUG] [Thread-123815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:18:56.734 [DEBUG] [Thread-123815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:18:56.734 [DEBUG] [Thread-123815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] client lang: <none>
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] server lang: <none>
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] kex follows: False
2025-12-03T21:18:56.735 [DEBUG] [Thread-123815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] Compression: none
2025-12-03T21:18:56.736 [DEBUG] [Thread-123815] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:18:56.746 [DEBUG] [Thread-123815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:18:56.746 [DEBUG] [Thread-123815] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:18:56.747 [DEBUG] [Thread-123815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:18:56.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:18:56.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:18:56.748 [DEBUG] [Thread-123815] [transport.py] [_log()] userauth is OK
2025-12-03T21:18:56.749 [DEBUG] [Thread-123815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:18:56.749 [DEBUG] [Thread-123815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:18:56.749 [DEBUG] [Thread-123815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:18:56.749 [DEBUG] [Thread-123815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:18:56.767 [INFO] [Thread-123815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:18:56.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:18:57.580 [DEBUG] [Thread-123815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:18:57.580 [DEBUG] [Thread-123815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:18:57.580 [DEBUG] [Thread-123815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:18:57.621 [DEBUG] [Thread-123815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:18:57.621 [DEBUG] [Thread-123815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:18:57.624 [DEBUG] [Thread-123815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:18:57.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:18:57.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:18:57.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:18:57.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:18:57.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:18:57.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:18:57.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:18:57.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:18:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:18:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.804565 -999.00  +16.40  18.06     37   +1.90 1 1 1 1 1     0    0 14.08 -9.19 ZNESW 18.1 18.1 147.4 24.1 16.8 -25.3 16.7 -24.7 16.4 -23.1 16.7 -24.1
2025-12-03T21:18:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:18:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:18:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.804565
2025-12-03T21:18:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:18:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:18:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:18:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:18:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:18:57.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:18:40', tmtdew=16.72, humidity=31.79, cloud=0.0, wind=27.91, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:18:40', seeing=1.07, atlas_timestamp='2025-12-03T19:18:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.0962499999999995, -0.0467499999999994, -0.057500000000000995, -0.041499999999999204, 0.024250000000000327, -0.02400000000000091, -0.09724999999999895, 0.023499999999998522, 0.008500000000001506, -0.03175000000000061, -0.025000000000000355, 0.017999999999998906, 0.0027500000000006963, -0.0555000000000021, -0.05799999999999983, -0.08975000000000044, 0.017999999999998906, -0.011499999999999844, -0.00975000000000037, 0.06099999999999817, 0.026749999999998053, -0.01774999999999949, -0.07525000000000048, 0.01649999999999885, 0.013500000000000512, 0.01774999999999949, 0.04749999999999943, 0.07200000000000095, 0.02800000000000047, -0.06399999999999828, -0.3359999999999985, -0.03275000000000006], zp_timestamp='2025-12-03T19:16:00')
2025-12-03T21:18:57.648 [DEBUG] [Thread-123815] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:18:57.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:18:57.754 [DEBUG] [Thread-123818] [transport.py] [_log()] starting thread (client mode): 0xa514b880
2025-12-03T21:18:57.754 [DEBUG] [Thread-123818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:18:57.769 [DEBUG] [Thread-123818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:18:57.769 [INFO] [Thread-123818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] client lang: <none>
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] server lang: <none>
2025-12-03T21:18:57.777 [DEBUG] [Thread-123818] [transport.py] [_log()] kex follows: False
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] Compression: none
2025-12-03T21:18:57.778 [DEBUG] [Thread-123818] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:18:57.835 [DEBUG] [Thread-123818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:18:57.835 [DEBUG] [Thread-123818] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:18:57.836 [DEBUG] [Thread-123818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:18:57.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:18:57.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:18:57.891 [DEBUG] [Thread-123818] [transport.py] [_log()] userauth is OK
2025-12-03T21:18:57.891 [DEBUG] [Thread-123818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:18:57.891 [DEBUG] [Thread-123818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:18:57.891 [DEBUG] [Thread-123818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:18:57.891 [DEBUG] [Thread-123818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:18:57.910 [INFO] [Thread-123818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:18:57.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:18:57.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:18:58.728 [DEBUG] [Thread-123818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:18:58.728 [DEBUG] [Thread-123818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:18:58.775 [DEBUG] [Thread-123818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:18:58.776 [DEBUG] [Thread-123818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:18:58.784 [DEBUG] [Thread-123818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:18:58.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:18:58.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:18:58.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:18:58.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:18:58.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:18:58.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:18:58.818 [DEBUG] [Thread-123818] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:18:59.026 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:05.050 [DEBUG] [Thread-123820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:11.063 [DEBUG] [Thread-123821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:19.449 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:20.135 [DEBUG] [Thread-123822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:28.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:19:28.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:19:28.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:19:29.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 19, 12), 16.68, 31.92, 0.0, 26.31, 16.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:19:29.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:19:12
2025-12-03T21:19:29.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:19:29.821 [DEBUG] [Thread-123823] [transport.py] [_log()] starting thread (client mode): 0xa271fc10
2025-12-03T21:19:29.821 [DEBUG] [Thread-123823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:19:29.840 [DEBUG] [Thread-123823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:19:29.840 [INFO] [Thread-123823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:19:29.843 [DEBUG] [Thread-123823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:19:29.843 [DEBUG] [Thread-123823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:19:29.843 [DEBUG] [Thread-123823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:19:29.843 [DEBUG] [Thread-123823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] client lang: <none>
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] server lang: <none>
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] kex follows: False
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] Compression: none
2025-12-03T21:19:29.844 [DEBUG] [Thread-123823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:19:29.860 [DEBUG] [Thread-123823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:19:29.860 [DEBUG] [Thread-123823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:19:29.861 [DEBUG] [Thread-123823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:19:29.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:19:29.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:19:29.863 [DEBUG] [Thread-123823] [transport.py] [_log()] userauth is OK
2025-12-03T21:19:29.863 [DEBUG] [Thread-123823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:19:29.863 [DEBUG] [Thread-123823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:19:29.863 [DEBUG] [Thread-123823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:19:29.863 [DEBUG] [Thread-123823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:19:29.887 [INFO] [Thread-123823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:19:29.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:19:30.525 [DEBUG] [Thread-123823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:19:30.525 [DEBUG] [Thread-123823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:19:30.525 [DEBUG] [Thread-123823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:19:30.566 [DEBUG] [Thread-123823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:19:30.566 [DEBUG] [Thread-123823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:19:30.568 [DEBUG] [Thread-123823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:19:30.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:19:30.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:19:30.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:19:30.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:19:30.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:19:30.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:19:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:19:30.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.804912 -999.00  +16.40  17.40     37   +1.90 1 1 1 1 1     0    0 14.26 -9.16 ZNESW 17.4 17.4 143.4 24.9 16.8 -25.2 16.7 -24.7 16.4 -23.0 16.7 -23.9
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.804912
2025-12-03T21:19:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:19:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:19:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:19:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:19:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:19:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:19:12', tmtdew=16.68, humidity=31.92, cloud=0.0, wind=26.31, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:19:12', seeing=1.07, atlas_timestamp='2025-12-03T19:19:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.0962499999999995, -0.0467499999999994, -0.057500000000000995, -0.041499999999999204, 0.024250000000000327, -0.02400000000000091, -0.09724999999999895, 0.023499999999998522, 0.008500000000001506, -0.03175000000000061, -0.025000000000000355, 0.017999999999998906, 0.0027500000000006963, -0.0555000000000021, -0.05799999999999983, -0.08975000000000044, 0.017999999999998906, -0.011499999999999844, -0.00975000000000037, 0.06099999999999817, 0.026749999999998053, -0.01774999999999949, -0.07525000000000048, 0.01649999999999885, 0.013500000000000512, 0.01774999999999949, 0.04749999999999943, 0.07200000000000095, 0.02800000000000047, -0.06399999999999828, -0.3359999999999985, -0.03275000000000006], zp_timestamp='2025-12-03T19:16:00')
2025-12-03T21:19:30.591 [DEBUG] [Thread-123823] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:19:30.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:19:30.693 [DEBUG] [Thread-123826] [transport.py] [_log()] starting thread (client mode): 0xa51e43d0
2025-12-03T21:19:30.693 [DEBUG] [Thread-123826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:19:30.708 [DEBUG] [Thread-123826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:19:30.708 [INFO] [Thread-123826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:19:30.716 [DEBUG] [Thread-123826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:19:30.716 [DEBUG] [Thread-123826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:19:30.716 [DEBUG] [Thread-123826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:19:30.716 [DEBUG] [Thread-123826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] client lang: <none>
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] server lang: <none>
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] kex follows: False
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:19:30.717 [DEBUG] [Thread-123826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:19:30.718 [DEBUG] [Thread-123826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:19:30.718 [DEBUG] [Thread-123826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:19:30.718 [DEBUG] [Thread-123826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:19:30.718 [DEBUG] [Thread-123826] [transport.py] [_log()] Compression: none
2025-12-03T21:19:30.718 [DEBUG] [Thread-123826] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:19:30.775 [DEBUG] [Thread-123826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:19:30.776 [DEBUG] [Thread-123826] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:19:30.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:19:30.777 [DEBUG] [Thread-123826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:19:30.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:19:30.831 [DEBUG] [Thread-123826] [transport.py] [_log()] userauth is OK
2025-12-03T21:19:30.831 [DEBUG] [Thread-123826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:19:30.831 [DEBUG] [Thread-123826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:19:30.832 [DEBUG] [Thread-123826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:19:30.832 [DEBUG] [Thread-123826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:19:30.850 [INFO] [Thread-123826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:19:30.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:19:30.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:19:31.697 [DEBUG] [Thread-123826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:19:31.697 [DEBUG] [Thread-123826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:19:31.745 [DEBUG] [Thread-123826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:19:31.745 [DEBUG] [Thread-123826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:19:31.754 [DEBUG] [Thread-123826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:19:31.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:19:31.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:19:31.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:19:31.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:19:31.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:19:31.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:19:31.794 [DEBUG] [Thread-123826] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:19:35.173 [DEBUG] [Thread-123828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:39.831 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:49.303 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:49.304 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:19:50.228 [DEBUG] [Thread-123829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:00.213 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:01.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:20:01.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:20:01.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:20:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 19, 44), 16.65, 31.96, 0.0, 25.85, 16.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:20:02.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:19:44
2025-12-03T21:20:02.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:20:02.797 [DEBUG] [Thread-123830] [transport.py] [_log()] starting thread (client mode): 0xa517caf0
2025-12-03T21:20:02.797 [DEBUG] [Thread-123830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:20:02.818 [DEBUG] [Thread-123830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:20:02.818 [INFO] [Thread-123830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] client lang: <none>
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] server lang: <none>
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] kex follows: False
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:20:02.821 [DEBUG] [Thread-123830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:20:02.822 [DEBUG] [Thread-123830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:20:02.822 [DEBUG] [Thread-123830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:20:02.822 [DEBUG] [Thread-123830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:20:02.822 [DEBUG] [Thread-123830] [transport.py] [_log()] Compression: none
2025-12-03T21:20:02.822 [DEBUG] [Thread-123830] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:20:02.833 [DEBUG] [Thread-123830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:20:02.833 [DEBUG] [Thread-123830] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:20:02.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:20:02.834 [DEBUG] [Thread-123830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:20:02.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:20:02.836 [DEBUG] [Thread-123830] [transport.py] [_log()] userauth is OK
2025-12-03T21:20:02.836 [DEBUG] [Thread-123830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:20:02.836 [DEBUG] [Thread-123830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:20:02.836 [DEBUG] [Thread-123830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:20:02.836 [DEBUG] [Thread-123830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:20:02.852 [INFO] [Thread-123830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:20:02.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:20:03.522 [DEBUG] [Thread-123830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:20:03.522 [DEBUG] [Thread-123830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:20:03.523 [DEBUG] [Thread-123830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:20:03.563 [DEBUG] [Thread-123830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:20:03.563 [DEBUG] [Thread-123830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:20:03.566 [DEBUG] [Thread-123830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:20:03.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:20:03.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:20:03.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:20:03.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:20:03.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:20:03.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:20:03.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:20:03.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.805259 -999.00  +16.40  15.05     37   +1.90 1 1 1 1 1     0    0 14.27 -8.92 ZNESW 15.1 15.1 155.4 24.5 16.8 -25.3 16.7 -24.7 16.4 -23.0 16.7 -24.0
2025-12-03T21:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:20:03.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.805259
2025-12-03T21:20:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:20:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:20:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:20:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:20:03.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:20:03.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:19:44', tmtdew=16.65, humidity=31.96, cloud=0.0, wind=25.85, temperature=16.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:19:44', seeing=1.04, atlas_timestamp='2025-12-03T19:19:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, -0.0962499999999995, -0.0467499999999994, -0.057500000000000995, -0.041499999999999204, 0.024250000000000327, -0.02400000000000091, -0.09724999999999895, 0.023499999999998522, 0.008500000000001506, -0.03175000000000061, -0.025000000000000355, 0.017999999999998906, 0.0027500000000006963, -0.0555000000000021, -0.05799999999999983, -0.08975000000000044, 0.017999999999998906, -0.011499999999999844, -0.00975000000000037, 0.06099999999999817, 0.026749999999998053, -0.01774999999999949, -0.07525000000000048, 0.01649999999999885, 0.013500000000000512, 0.01774999999999949, 0.04749999999999943, 0.07200000000000095, 0.02800000000000047, -0.06399999999999828, -0.3359999999999985, -0.03275000000000006], zp_timestamp='2025-12-03T19:16:00')
2025-12-03T21:20:03.593 [DEBUG] [Thread-123830] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:20:03.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:20:03.695 [DEBUG] [Thread-123833] [transport.py] [_log()] starting thread (client mode): 0xa51d06a0
2025-12-03T21:20:03.696 [DEBUG] [Thread-123833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:20:03.710 [DEBUG] [Thread-123833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:20:03.711 [INFO] [Thread-123833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:20:03.718 [DEBUG] [Thread-123833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:20:03.718 [DEBUG] [Thread-123833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:20:03.718 [DEBUG] [Thread-123833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:20:03.718 [DEBUG] [Thread-123833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] client lang: <none>
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] server lang: <none>
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] kex follows: False
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] Compression: none
2025-12-03T21:20:03.719 [DEBUG] [Thread-123833] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:20:03.776 [DEBUG] [Thread-123833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:20:03.776 [DEBUG] [Thread-123833] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:20:03.777 [DEBUG] [Thread-123833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:20:03.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:20:03.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:20:03.831 [DEBUG] [Thread-123833] [transport.py] [_log()] userauth is OK
2025-12-03T21:20:03.832 [DEBUG] [Thread-123833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:20:03.832 [DEBUG] [Thread-123833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:20:03.832 [DEBUG] [Thread-123833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:20:03.832 [DEBUG] [Thread-123833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:20:03.851 [INFO] [Thread-123833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:20:03.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:20:03.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:20:04.667 [DEBUG] [Thread-123833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:20:04.667 [DEBUG] [Thread-123833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:20:04.714 [DEBUG] [Thread-123833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:20:04.715 [DEBUG] [Thread-123833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:20:04.723 [DEBUG] [Thread-123833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:20:04.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:20:04.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:20:04.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:20:04.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:20:04.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:20:04.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:20:04.758 [DEBUG] [Thread-123833] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:20:05.263 [DEBUG] [Thread-123835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:11.141 [DEBUG] [Thread-123836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:20.321 [DEBUG] [Thread-123837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:20.597 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:34.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:20:34.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:20:34.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:20:35.356 [DEBUG] [Thread-123838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 20, 16), 16.65, 31.96, 0.0, 25.0, 16.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:20:35.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:20:16
2025-12-03T21:20:35.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:20:35.748 [DEBUG] [Thread-123839] [transport.py] [_log()] starting thread (client mode): 0xa2779600
2025-12-03T21:20:35.748 [DEBUG] [Thread-123839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:20:35.767 [DEBUG] [Thread-123839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:20:35.768 [INFO] [Thread-123839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] client lang: <none>
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] server lang: <none>
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] kex follows: False
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:20:35.771 [DEBUG] [Thread-123839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:20:35.772 [DEBUG] [Thread-123839] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:20:35.772 [DEBUG] [Thread-123839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:20:35.772 [DEBUG] [Thread-123839] [transport.py] [_log()] Compression: none
2025-12-03T21:20:35.772 [DEBUG] [Thread-123839] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:20:35.790 [DEBUG] [Thread-123839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:20:35.790 [DEBUG] [Thread-123839] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:20:35.791 [DEBUG] [Thread-123839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:20:35.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:20:35.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:20:35.792 [DEBUG] [Thread-123839] [transport.py] [_log()] userauth is OK
2025-12-03T21:20:35.793 [DEBUG] [Thread-123839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:20:35.793 [DEBUG] [Thread-123839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:20:35.793 [DEBUG] [Thread-123839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:20:35.793 [DEBUG] [Thread-123839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:20:35.816 [INFO] [Thread-123839] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:20:35.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:20:36.416 [DEBUG] [Thread-123839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:20:36.416 [DEBUG] [Thread-123839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:20:36.417 [DEBUG] [Thread-123839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:20:36.457 [DEBUG] [Thread-123839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:20:36.457 [DEBUG] [Thread-123839] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:20:36.460 [DEBUG] [Thread-123839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:20:36.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:20:36.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:20:36.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:20:36.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:20:36.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:20:36.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:20:36.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:20:36.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.805606 -999.00  +16.40  22.18     37   +1.90 1 1 1 1 1     0    0 14.28 -9.61 ZNESW 22.2 22.2 145.4 26.7 16.8 -25.3 16.7 -24.7 16.4 -23.2 16.7 -24.0
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.805606
2025-12-03T21:20:36.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:20:36.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:20:36.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:20:36.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:20:36.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:20:36.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:20:16', tmtdew=16.65, humidity=31.96, cloud=0.0, wind=25.0, temperature=16.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:20:16', seeing=1.14, atlas_timestamp='2025-12-03T19:20:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:20:36.484 [DEBUG] [Thread-123839] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:20:36.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:20:36.588 [DEBUG] [Thread-123842] [transport.py] [_log()] starting thread (client mode): 0xa271e2c0
2025-12-03T21:20:36.589 [DEBUG] [Thread-123842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:20:36.604 [DEBUG] [Thread-123842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:20:36.604 [INFO] [Thread-123842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:20:36.611 [DEBUG] [Thread-123842] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:20:36.612 [DEBUG] [Thread-123842] [transport.py] [_log()] client lang: <none>
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] server lang: <none>
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] kex follows: False
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] Compression: none
2025-12-03T21:20:36.613 [DEBUG] [Thread-123842] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:20:36.676 [DEBUG] [Thread-123842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:20:36.676 [DEBUG] [Thread-123842] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:20:36.677 [DEBUG] [Thread-123842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:20:36.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:20:36.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:20:36.732 [DEBUG] [Thread-123842] [transport.py] [_log()] userauth is OK
2025-12-03T21:20:36.732 [DEBUG] [Thread-123842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:20:36.732 [DEBUG] [Thread-123842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:20:36.732 [DEBUG] [Thread-123842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:20:36.732 [DEBUG] [Thread-123842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:20:36.755 [INFO] [Thread-123842] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:20:36.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:20:36.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:20:37.594 [DEBUG] [Thread-123842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:20:37.594 [DEBUG] [Thread-123842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:20:37.642 [DEBUG] [Thread-123842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:20:37.642 [DEBUG] [Thread-123842] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:20:37.651 [DEBUG] [Thread-123842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:20:37.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:20:37.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:20:37.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:20:37.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:20:37.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:20:37.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:20:37.685 [DEBUG] [Thread-123842] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:20:40.980 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:49.500 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:49.501 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:20:50.390 [DEBUG] [Thread-123844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:01.434 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:05.449 [DEBUG] [Thread-123845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:07.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:21:07.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:21:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:21:08.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 20, 48), 16.67, 31.91, 0.0, 23.22, 16.42, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:21:08.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:20:48
2025-12-03T21:21:08.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:21:08.688 [DEBUG] [Thread-123846] [transport.py] [_log()] starting thread (client mode): 0xa51d1900
2025-12-03T21:21:08.689 [DEBUG] [Thread-123846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:21:08.708 [DEBUG] [Thread-123846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:21:08.708 [INFO] [Thread-123846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:21:08.711 [DEBUG] [Thread-123846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] client lang: <none>
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] server lang: <none>
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] kex follows: False
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] Compression: none
2025-12-03T21:21:08.712 [DEBUG] [Thread-123846] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:21:08.725 [DEBUG] [Thread-123846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:21:08.725 [DEBUG] [Thread-123846] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:21:08.725 [DEBUG] [Thread-123846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:21:08.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:21:08.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:21:08.727 [DEBUG] [Thread-123846] [transport.py] [_log()] userauth is OK
2025-12-03T21:21:08.727 [DEBUG] [Thread-123846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:21:08.727 [DEBUG] [Thread-123846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:21:08.728 [DEBUG] [Thread-123846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:21:08.728 [DEBUG] [Thread-123846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:21:08.763 [INFO] [Thread-123846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:21:08.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:21:09.375 [DEBUG] [Thread-123846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:21:09.375 [DEBUG] [Thread-123846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:21:09.376 [DEBUG] [Thread-123846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:21:09.417 [DEBUG] [Thread-123846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:21:09.417 [DEBUG] [Thread-123846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:21:09.420 [DEBUG] [Thread-123846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:21:09.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:21:09.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:21:09.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:21:09.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:21:09.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:21:09.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:21:09.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:21:09.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:21:09.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:21:09.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.805954 -999.00  +16.40  18.19     37   +1.90 1 1 1 1 1     0    0 14.38 -9.88 ZNESW 18.2 18.2 145.0 26.7 16.8 -25.3 16.6 -24.7 16.4 -23.0 16.7 -23.8
2025-12-03T21:21:09.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:21:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:21:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.805954
2025-12-03T21:21:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:21:09.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:21:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:21:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:21:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:21:09.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:20:48', tmtdew=16.67, humidity=31.91, cloud=0.0, wind=23.22, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:20:48', seeing=0.97, atlas_timestamp='2025-12-03T19:20:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:21:09.444 [DEBUG] [Thread-123846] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:21:09.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:21:09.547 [DEBUG] [Thread-123849] [transport.py] [_log()] starting thread (client mode): 0xa272ba90
2025-12-03T21:21:09.547 [DEBUG] [Thread-123849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:21:09.561 [DEBUG] [Thread-123849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:21:09.562 [INFO] [Thread-123849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:21:09.569 [DEBUG] [Thread-123849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:21:09.569 [DEBUG] [Thread-123849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:21:09.569 [DEBUG] [Thread-123849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:21:09.569 [DEBUG] [Thread-123849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] client lang: <none>
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] server lang: <none>
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] kex follows: False
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:21:09.570 [DEBUG] [Thread-123849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:21:09.571 [DEBUG] [Thread-123849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:21:09.571 [DEBUG] [Thread-123849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:21:09.571 [DEBUG] [Thread-123849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:21:09.571 [DEBUG] [Thread-123849] [transport.py] [_log()] Compression: none
2025-12-03T21:21:09.571 [DEBUG] [Thread-123849] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:21:09.629 [DEBUG] [Thread-123849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:21:09.630 [DEBUG] [Thread-123849] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:21:09.630 [DEBUG] [Thread-123849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:21:09.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:21:09.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:21:09.685 [DEBUG] [Thread-123849] [transport.py] [_log()] userauth is OK
2025-12-03T21:21:09.685 [DEBUG] [Thread-123849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:21:09.685 [DEBUG] [Thread-123849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:21:09.685 [DEBUG] [Thread-123849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:21:09.685 [DEBUG] [Thread-123849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:21:09.705 [INFO] [Thread-123849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:21:09.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:21:09.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:21:10.518 [DEBUG] [Thread-123849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:21:10.518 [DEBUG] [Thread-123849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:21:10.566 [DEBUG] [Thread-123849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:21:10.566 [DEBUG] [Thread-123849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:21:10.575 [DEBUG] [Thread-123849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:21:10.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:21:10.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:21:10.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:21:10.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:21:10.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:21:10.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:21:10.611 [DEBUG] [Thread-123849] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:21:11.217 [DEBUG] [Thread-123851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:20.486 [DEBUG] [Thread-123852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:21.824 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:35.548 [DEBUG] [Thread-123853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:40.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:21:40.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:21:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:21:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 21, 20), 16.66, 31.92, 0.0, 23.52, 16.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:21:41.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:21:20
2025-12-03T21:21:41.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:21:41.619 [DEBUG] [Thread-123854] [transport.py] [_log()] starting thread (client mode): 0xa27269e0
2025-12-03T21:21:41.619 [DEBUG] [Thread-123854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:21:41.644 [DEBUG] [Thread-123854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:21:41.645 [INFO] [Thread-123854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] client lang: <none>
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] server lang: <none>
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] kex follows: False
2025-12-03T21:21:41.649 [DEBUG] [Thread-123854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] Compression: none
2025-12-03T21:21:41.650 [DEBUG] [Thread-123854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:21:41.667 [DEBUG] [Thread-123854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:21:41.667 [DEBUG] [Thread-123854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:21:41.668 [DEBUG] [Thread-123854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:21:41.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:21:41.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:21:41.670 [DEBUG] [Thread-123854] [transport.py] [_log()] userauth is OK
2025-12-03T21:21:41.670 [DEBUG] [Thread-123854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:21:41.670 [DEBUG] [Thread-123854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:21:41.670 [DEBUG] [Thread-123854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:21:41.670 [DEBUG] [Thread-123854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:21:41.704 [INFO] [Thread-123854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:21:41.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:21:42.209 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:42.330 [DEBUG] [Thread-123854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:21:42.331 [DEBUG] [Thread-123854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:21:42.331 [DEBUG] [Thread-123854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:21:42.372 [DEBUG] [Thread-123854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:21:42.372 [DEBUG] [Thread-123854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:21:42.375 [DEBUG] [Thread-123854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:21:42.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:21:42.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:21:42.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:21:42.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:21:42.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:21:42.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:21:42.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:21:42.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.806301 -999.00  +16.40  19.53     37   +1.90 1 1 1 1 1     0    0 14.01 -9.24 ZNESW 19.5 19.5 144.2 24.7 16.7 -25.3 16.6 -24.8 16.4 -23.1 16.7 -23.9
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.806301
2025-12-03T21:21:42.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:21:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:21:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:21:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:21:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:21:42.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:21:20', tmtdew=16.66, humidity=31.92, cloud=0.0, wind=23.52, temperature=16.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:21:20', seeing=1.07, atlas_timestamp='2025-12-03T19:21:04.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:21:42.402 [DEBUG] [Thread-123854] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:21:42.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:21:42.504 [DEBUG] [Thread-123857] [transport.py] [_log()] starting thread (client mode): 0xa27cb4c0
2025-12-03T21:21:42.505 [DEBUG] [Thread-123857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:21:42.519 [DEBUG] [Thread-123857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:21:42.519 [INFO] [Thread-123857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] client lang: <none>
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] server lang: <none>
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] kex follows: False
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:21:42.527 [DEBUG] [Thread-123857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:21:42.528 [DEBUG] [Thread-123857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:21:42.528 [DEBUG] [Thread-123857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:21:42.528 [DEBUG] [Thread-123857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:21:42.528 [DEBUG] [Thread-123857] [transport.py] [_log()] Compression: none
2025-12-03T21:21:42.528 [DEBUG] [Thread-123857] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:21:42.587 [DEBUG] [Thread-123857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:21:42.588 [DEBUG] [Thread-123857] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:21:42.588 [DEBUG] [Thread-123857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:21:42.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:21:42.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:21:42.644 [DEBUG] [Thread-123857] [transport.py] [_log()] userauth is OK
2025-12-03T21:21:42.645 [DEBUG] [Thread-123857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:21:42.645 [DEBUG] [Thread-123857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:21:42.645 [DEBUG] [Thread-123857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:21:42.645 [DEBUG] [Thread-123857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:21:42.667 [INFO] [Thread-123857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:21:42.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:21:42.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:21:43.536 [DEBUG] [Thread-123857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:21:43.536 [DEBUG] [Thread-123857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:21:43.584 [DEBUG] [Thread-123857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:21:43.584 [DEBUG] [Thread-123857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:21:43.593 [DEBUG] [Thread-123857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:21:43.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:21:43.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:21:43.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:21:43.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:21:43.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:21:43.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:21:43.627 [DEBUG] [Thread-123857] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:21:49.703 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:49.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:21:50.577 [DEBUG] [Thread-123859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:02.596 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:05.643 [DEBUG] [Thread-123860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:11.271 [DEBUG] [Thread-123861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:22:13.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:22:13.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:22:14.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 21, 52), 16.61, 32.44, 0.0, 21.6, 16.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:22:14.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:21:52
2025-12-03T21:22:14.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:22:14.665 [DEBUG] [Thread-123862] [transport.py] [_log()] starting thread (client mode): 0xa514baf0
2025-12-03T21:22:14.665 [DEBUG] [Thread-123862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:22:14.685 [DEBUG] [Thread-123862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:22:14.685 [INFO] [Thread-123862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:22:14.688 [DEBUG] [Thread-123862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:22:14.688 [DEBUG] [Thread-123862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] client lang: <none>
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] server lang: <none>
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] kex follows: False
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] Compression: none
2025-12-03T21:22:14.689 [DEBUG] [Thread-123862] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:22:14.704 [DEBUG] [Thread-123862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:22:14.704 [DEBUG] [Thread-123862] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:22:14.704 [DEBUG] [Thread-123862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:22:14.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:22:14.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:22:14.705 [DEBUG] [Thread-123862] [transport.py] [_log()] userauth is OK
2025-12-03T21:22:14.705 [DEBUG] [Thread-123862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:22:14.705 [DEBUG] [Thread-123862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:22:14.705 [DEBUG] [Thread-123862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:22:14.705 [DEBUG] [Thread-123862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:22:14.715 [INFO] [Thread-123862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:22:14.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:22:15.338 [DEBUG] [Thread-123862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:22:15.338 [DEBUG] [Thread-123862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:22:15.338 [DEBUG] [Thread-123862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:22:15.379 [DEBUG] [Thread-123862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:22:15.379 [DEBUG] [Thread-123862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:22:15.381 [DEBUG] [Thread-123862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:22:15.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:22:15.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:22:15.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:22:15.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:22:15.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:22:15.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:22:15.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:22:15.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.806996 -999.00  +16.30  19.64     37   +1.90 1 1 1 1 1     0    0 14.03 -8.57 ZNESW 19.6 19.6 149.0 26.8 16.7 -25.3 16.6 -24.6 16.4 -23.1 16.7 -23.9
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.806996
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:22:15.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:21:52', tmtdew=16.61, humidity=32.44, cloud=0.0, wind=21.6, temperature=16.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:21:52', seeing=1.13, atlas_timestamp='2025-12-03T19:22:04.454', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:22:15.400 [DEBUG] [Thread-123862] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:22:15.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:22:15.491 [DEBUG] [Thread-123865] [transport.py] [_log()] starting thread (client mode): 0xa517e7d0
2025-12-03T21:22:15.491 [DEBUG] [Thread-123865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:22:15.506 [DEBUG] [Thread-123865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:22:15.506 [INFO] [Thread-123865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] client lang: <none>
2025-12-03T21:22:15.514 [DEBUG] [Thread-123865] [transport.py] [_log()] server lang: <none>
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] kex follows: False
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] Compression: none
2025-12-03T21:22:15.515 [DEBUG] [Thread-123865] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:22:15.571 [DEBUG] [Thread-123865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:22:15.572 [DEBUG] [Thread-123865] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:22:15.572 [DEBUG] [Thread-123865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:22:15.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:22:15.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:22:15.629 [DEBUG] [Thread-123865] [transport.py] [_log()] userauth is OK
2025-12-03T21:22:15.629 [DEBUG] [Thread-123865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:22:15.629 [DEBUG] [Thread-123865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:22:15.629 [DEBUG] [Thread-123865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:22:15.629 [DEBUG] [Thread-123865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:22:15.643 [INFO] [Thread-123865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:22:15.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:22:15.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:22:16.481 [DEBUG] [Thread-123865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:22:16.481 [DEBUG] [Thread-123865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:22:16.529 [DEBUG] [Thread-123865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:22:16.530 [DEBUG] [Thread-123865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:22:16.538 [DEBUG] [Thread-123865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:22:16.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:22:16.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:22:16.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:22:16.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:22:16.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:22:16.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:22:16.570 [DEBUG] [Thread-123865] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:22:20.677 [DEBUG] [Thread-123867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:23.028 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:35.736 [DEBUG] [Thread-123868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:43.449 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:46.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:22:46.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:22:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:22:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 22, 24), 16.6, 32.46, 0.0, 20.86, 16.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:22:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:22:24
2025-12-03T21:22:47.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:22:47.586 [DEBUG] [Thread-123869] [transport.py] [_log()] starting thread (client mode): 0xa2724be0
2025-12-03T21:22:47.586 [DEBUG] [Thread-123869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:22:47.602 [DEBUG] [Thread-123869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:22:47.602 [INFO] [Thread-123869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:22:47.605 [DEBUG] [Thread-123869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] client lang: <none>
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] server lang: <none>
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] kex follows: False
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:22:47.606 [DEBUG] [Thread-123869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:22:47.607 [DEBUG] [Thread-123869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:22:47.607 [DEBUG] [Thread-123869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:22:47.607 [DEBUG] [Thread-123869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:22:47.607 [DEBUG] [Thread-123869] [transport.py] [_log()] Compression: none
2025-12-03T21:22:47.607 [DEBUG] [Thread-123869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:22:47.623 [DEBUG] [Thread-123869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:22:47.624 [DEBUG] [Thread-123869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:22:47.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:22:47.625 [DEBUG] [Thread-123869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:22:47.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:22:47.627 [DEBUG] [Thread-123869] [transport.py] [_log()] userauth is OK
2025-12-03T21:22:47.627 [DEBUG] [Thread-123869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:22:47.627 [DEBUG] [Thread-123869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:22:47.627 [DEBUG] [Thread-123869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:22:47.628 [DEBUG] [Thread-123869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:22:47.644 [INFO] [Thread-123869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:22:47.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:22:48.256 [DEBUG] [Thread-123869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:22:48.256 [DEBUG] [Thread-123869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:22:48.257 [DEBUG] [Thread-123869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:22:48.297 [DEBUG] [Thread-123869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:22:48.297 [DEBUG] [Thread-123869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:22:48.300 [DEBUG] [Thread-123869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:22:48.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:22:48.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:22:48.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:22:48.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:22:48.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:22:48.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:22:48.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:22:48.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.807343 -999.00  +16.40  22.14     37   +1.80 1 1 1 1 1     0    0 14.41 -8.46 ZNESW 22.1 22.1 143.4 27.2 16.7 -25.1 16.6 -24.7 16.4 -23.0 16.7 -23.8
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.807343
2025-12-03T21:22:48.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:22:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:22:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:22:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:22:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:22:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:22:24', tmtdew=16.6, humidity=32.46, cloud=0.0, wind=20.86, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:22:24', seeing=1.13, atlas_timestamp='2025-12-03T19:22:34.435', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:22:48.322 [DEBUG] [Thread-123869] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:22:48.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:22:48.437 [DEBUG] [Thread-123872] [transport.py] [_log()] starting thread (client mode): 0xa2761270
2025-12-03T21:22:48.437 [DEBUG] [Thread-123872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:22:48.450 [DEBUG] [Thread-123872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:22:48.450 [INFO] [Thread-123872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] client lang: <none>
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] server lang: <none>
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] kex follows: False
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:22:48.458 [DEBUG] [Thread-123872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:22:48.459 [DEBUG] [Thread-123872] [transport.py] [_log()] Compression: none
2025-12-03T21:22:48.459 [DEBUG] [Thread-123872] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:22:48.518 [DEBUG] [Thread-123872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:22:48.518 [DEBUG] [Thread-123872] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:22:48.519 [DEBUG] [Thread-123872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:22:48.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:22:48.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:22:48.577 [DEBUG] [Thread-123872] [transport.py] [_log()] userauth is OK
2025-12-03T21:22:48.577 [DEBUG] [Thread-123872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:22:48.578 [DEBUG] [Thread-123872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:22:48.578 [DEBUG] [Thread-123872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:22:48.578 [DEBUG] [Thread-123872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:22:48.601 [INFO] [Thread-123872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:22:48.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:22:48.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:22:49.417 [DEBUG] [Thread-123872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:22:49.417 [DEBUG] [Thread-123872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:22:49.465 [DEBUG] [Thread-123872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:22:49.465 [DEBUG] [Thread-123872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:22:49.474 [DEBUG] [Thread-123872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:22:49.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:22:49.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:22:49.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:22:49.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:22:49.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:22:49.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:22:49.508 [DEBUG] [Thread-123872] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:22:49.901 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:49.902 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:22:50.771 [DEBUG] [Thread-123874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:03.901 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:05.818 [DEBUG] [Thread-123875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:11.351 [DEBUG] [Thread-123876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:19.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:23:19.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:23:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:23:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 22, 56), 16.59, 32.46, 0.0, 22.58, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:23:20.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:22:56
2025-12-03T21:23:20.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:23:20.472 [DEBUG] [Thread-123877] [transport.py] [_log()] starting thread (client mode): 0xa2753f40
2025-12-03T21:23:20.472 [DEBUG] [Thread-123877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:23:20.492 [DEBUG] [Thread-123877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:23:20.492 [INFO] [Thread-123877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:23:20.495 [DEBUG] [Thread-123877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:23:20.495 [DEBUG] [Thread-123877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] client lang: <none>
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] server lang: <none>
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] kex follows: False
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] Compression: none
2025-12-03T21:23:20.496 [DEBUG] [Thread-123877] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:23:20.507 [DEBUG] [Thread-123877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:23:20.508 [DEBUG] [Thread-123877] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:23:20.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:23:20.508 [DEBUG] [Thread-123877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:23:20.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:23:20.510 [DEBUG] [Thread-123877] [transport.py] [_log()] userauth is OK
2025-12-03T21:23:20.511 [DEBUG] [Thread-123877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:23:20.511 [DEBUG] [Thread-123877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:23:20.511 [DEBUG] [Thread-123877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:23:20.511 [DEBUG] [Thread-123877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:23:20.535 [INFO] [Thread-123877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:23:20.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:23:20.854 [DEBUG] [Thread-123879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:21.124 [DEBUG] [Thread-123877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:23:21.125 [DEBUG] [Thread-123877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:23:21.125 [DEBUG] [Thread-123877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:23:21.166 [DEBUG] [Thread-123877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:23:21.166 [DEBUG] [Thread-123877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:23:21.169 [DEBUG] [Thread-123877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:23:21.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:23:21.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:23:21.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:23:21.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:23:21.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:23:21.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:23:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:23:21.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:23:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:23:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.807690 -999.00  +16.40  18.04     37   +1.90 1 1 1 1 1     0    0 14.21 -8.50 ZNESW 18.0 18.0 149.6 27.6 16.8 -25.3 16.6 -24.6 16.4 -23.0 16.7 -24.0
2025-12-03T21:23:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:23:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:23:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.807690
2025-12-03T21:23:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:23:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:23:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:23:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:23:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:23:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:22:56', tmtdew=16.59, humidity=32.46, cloud=0.0, wind=22.58, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:22:56', seeing=1.04, atlas_timestamp='2025-12-03T19:23:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:19:00')
2025-12-03T21:23:21.188 [DEBUG] [Thread-123877] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:23:21.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:23:21.287 [DEBUG] [Thread-123881] [transport.py] [_log()] starting thread (client mode): 0xa517d420
2025-12-03T21:23:21.288 [DEBUG] [Thread-123881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:23:21.302 [DEBUG] [Thread-123881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:23:21.302 [INFO] [Thread-123881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:23:21.310 [DEBUG] [Thread-123881] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:23:21.310 [DEBUG] [Thread-123881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:23:21.310 [DEBUG] [Thread-123881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:23:21.310 [DEBUG] [Thread-123881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:21.310 [DEBUG] [Thread-123881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] client lang: <none>
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] server lang: <none>
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] kex follows: False
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:23:21.311 [DEBUG] [Thread-123881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:23:21.312 [DEBUG] [Thread-123881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:23:21.312 [DEBUG] [Thread-123881] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:23:21.312 [DEBUG] [Thread-123881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:23:21.312 [DEBUG] [Thread-123881] [transport.py] [_log()] Compression: none
2025-12-03T21:23:21.312 [DEBUG] [Thread-123881] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:23:21.375 [DEBUG] [Thread-123881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:23:21.375 [DEBUG] [Thread-123881] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:23:21.375 [DEBUG] [Thread-123881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:23:21.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:23:21.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:23:21.437 [DEBUG] [Thread-123881] [transport.py] [_log()] userauth is OK
2025-12-03T21:23:21.437 [DEBUG] [Thread-123881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:23:21.437 [DEBUG] [Thread-123881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:23:21.437 [DEBUG] [Thread-123881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:23:21.437 [DEBUG] [Thread-123881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:23:21.451 [INFO] [Thread-123881] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:23:21.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:23:21.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:23:22.239 [DEBUG] [Thread-123881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:23:22.239 [DEBUG] [Thread-123881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:23:22.287 [DEBUG] [Thread-123881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:23:22.287 [DEBUG] [Thread-123881] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:23:22.296 [DEBUG] [Thread-123881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:23:22.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:23:22.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:23:22.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:23:22.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:23:22.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:23:22.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:23:22.332 [DEBUG] [Thread-123881] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:23:24.325 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:35.888 [DEBUG] [Thread-123883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:44.743 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:50.103 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:50.104 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:50.948 [DEBUG] [Thread-123884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:23:52.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:23:52.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:23:52.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:23:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 23, 28), 16.62, 32.41, 0.0, 21.16, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:23:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:23:28
2025-12-03T21:23:53.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:23:53.296 [DEBUG] [Thread-123885] [transport.py] [_log()] starting thread (client mode): 0xa2753730
2025-12-03T21:23:53.296 [DEBUG] [Thread-123885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:23:53.310 [DEBUG] [Thread-123885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:23:53.310 [INFO] [Thread-123885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:23:53.311 [DEBUG] [Thread-123885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] client lang: <none>
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] server lang: <none>
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] kex follows: False
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:23:53.312 [DEBUG] [Thread-123885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:23:53.313 [DEBUG] [Thread-123885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:23:53.313 [DEBUG] [Thread-123885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:23:53.313 [DEBUG] [Thread-123885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:23:53.313 [DEBUG] [Thread-123885] [transport.py] [_log()] Compression: none
2025-12-03T21:23:53.313 [DEBUG] [Thread-123885] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:23:53.326 [DEBUG] [Thread-123885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:23:53.327 [DEBUG] [Thread-123885] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:23:53.327 [DEBUG] [Thread-123885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:23:53.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:23:53.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:23:53.329 [DEBUG] [Thread-123885] [transport.py] [_log()] userauth is OK
2025-12-03T21:23:53.329 [DEBUG] [Thread-123885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:23:53.330 [DEBUG] [Thread-123885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:23:53.330 [DEBUG] [Thread-123885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:23:53.330 [DEBUG] [Thread-123885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:23:53.354 [INFO] [Thread-123885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:23:53.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:23:53.946 [DEBUG] [Thread-123885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:23:53.947 [DEBUG] [Thread-123885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:23:53.947 [DEBUG] [Thread-123885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:23:53.988 [DEBUG] [Thread-123885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:23:53.988 [DEBUG] [Thread-123885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:23:53.991 [DEBUG] [Thread-123885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:23:53.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:23:53.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:23:53.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:23:54.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:23:54.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:23:54.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:23:54.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.807690 -999.00  +16.40  18.04     37   +1.90 1 1 1 1 1     0    0 14.21 -8.50 ZNESW 18.0 18.0 149.6 27.6 16.8 -25.3 16.6 -24.6 16.4 -23.0 16.7 -24.0
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:23:54.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.807690
2025-12-03T21:23:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:23:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:23:54.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:23:54.009 [DEBUG] [Thread-123885] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:23:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:23:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:23:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:23:28', tmtdew=16.62, humidity=32.41, cloud=0.0, wind=21.16, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:23:28', seeing=1.04, atlas_timestamp='2025-12-03T19:23:04.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:21:00')
2025-12-03T21:23:54.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:23:54.115 [DEBUG] [Thread-123888] [transport.py] [_log()] starting thread (client mode): 0xa272afe0
2025-12-03T21:23:54.115 [DEBUG] [Thread-123888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:23:54.129 [DEBUG] [Thread-123888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:23:54.129 [INFO] [Thread-123888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] client lang: <none>
2025-12-03T21:23:54.139 [DEBUG] [Thread-123888] [transport.py] [_log()] server lang: <none>
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] kex follows: False
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] Compression: none
2025-12-03T21:23:54.140 [DEBUG] [Thread-123888] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:23:54.200 [DEBUG] [Thread-123888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:23:54.200 [DEBUG] [Thread-123888] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:23:54.201 [DEBUG] [Thread-123888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:23:54.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:23:54.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:23:54.258 [DEBUG] [Thread-123888] [transport.py] [_log()] userauth is OK
2025-12-03T21:23:54.258 [DEBUG] [Thread-123888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:23:54.258 [DEBUG] [Thread-123888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:23:54.258 [DEBUG] [Thread-123888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:23:54.258 [DEBUG] [Thread-123888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:23:54.277 [INFO] [Thread-123888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:23:54.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:23:54.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:23:55.079 [DEBUG] [Thread-123888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:23:55.079 [DEBUG] [Thread-123888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:23:55.128 [DEBUG] [Thread-123888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:23:55.128 [DEBUG] [Thread-123888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:23:55.137 [DEBUG] [Thread-123888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:23:55.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:23:55.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:23:55.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:23:55.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:23:55.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:23:55.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:23:55.171 [DEBUG] [Thread-123888] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:24:05.161 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:05.986 [DEBUG] [Thread-123890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:11.402 [DEBUG] [Thread-123891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:21.039 [DEBUG] [Thread-123892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:25.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:24:25.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:24:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:24:25.588 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 24), 16.59, 32.47, 0.0, 23.34, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:24:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:24:00
2025-12-03T21:24:25.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:24:26.155 [DEBUG] [Thread-123893] [transport.py] [_log()] starting thread (client mode): 0xa27509d0
2025-12-03T21:24:26.156 [DEBUG] [Thread-123893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:24:26.176 [DEBUG] [Thread-123893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:24:26.176 [INFO] [Thread-123893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:24:26.179 [DEBUG] [Thread-123893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:26.180 [DEBUG] [Thread-123893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] client lang: <none>
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] server lang: <none>
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] kex follows: False
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:24:26.181 [DEBUG] [Thread-123893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:24:26.182 [DEBUG] [Thread-123893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:24:26.182 [DEBUG] [Thread-123893] [transport.py] [_log()] Compression: none
2025-12-03T21:24:26.182 [DEBUG] [Thread-123893] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:24:26.201 [DEBUG] [Thread-123893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:24:26.201 [DEBUG] [Thread-123893] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:24:26.202 [DEBUG] [Thread-123893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:24:26.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:24:26.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:24:26.204 [DEBUG] [Thread-123893] [transport.py] [_log()] userauth is OK
2025-12-03T21:24:26.204 [DEBUG] [Thread-123893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:24:26.204 [DEBUG] [Thread-123893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:24:26.205 [DEBUG] [Thread-123893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:24:26.205 [DEBUG] [Thread-123893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:24:26.239 [INFO] [Thread-123893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:24:26.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:24:26.903 [DEBUG] [Thread-123893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:24:26.903 [DEBUG] [Thread-123893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:24:26.903 [DEBUG] [Thread-123893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:24:26.944 [DEBUG] [Thread-123893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:24:26.944 [DEBUG] [Thread-123893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:24:26.947 [DEBUG] [Thread-123893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:24:26.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:24:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:24:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:24:26.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:24:26.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:24:26.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:24:26.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:24:26.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.808037 -999.00  +16.40  17.06     37   +1.80 1 1 1 1 1     0    0 14.27 -7.16 ZNESW 17.1 17.1 144.4 24.3 16.7 -25.2 16.6 -24.7 16.4 -23.1 16.6 -23.9
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.808037
2025-12-03T21:24:26.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:24:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:24:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:24:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:24:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:24:26.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:24:00', tmtdew=16.59, humidity=32.47, cloud=0.0, wind=23.34, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:24:01', seeing=0.96, atlas_timestamp='2025-12-03T19:23:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:21:00')
2025-12-03T21:24:26.970 [DEBUG] [Thread-123893] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:24:27.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:24:27.075 [DEBUG] [Thread-123896] [transport.py] [_log()] starting thread (client mode): 0xa27515d0
2025-12-03T21:24:27.075 [DEBUG] [Thread-123896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:24:27.089 [DEBUG] [Thread-123896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:24:27.089 [INFO] [Thread-123896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] client lang: <none>
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] server lang: <none>
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] kex follows: False
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:24:27.097 [DEBUG] [Thread-123896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:24:27.098 [DEBUG] [Thread-123896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:24:27.098 [DEBUG] [Thread-123896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:24:27.098 [DEBUG] [Thread-123896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:24:27.098 [DEBUG] [Thread-123896] [transport.py] [_log()] Compression: none
2025-12-03T21:24:27.098 [DEBUG] [Thread-123896] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:24:27.154 [DEBUG] [Thread-123896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:24:27.154 [DEBUG] [Thread-123896] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:24:27.155 [DEBUG] [Thread-123896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:24:27.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:24:27.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:24:27.210 [DEBUG] [Thread-123896] [transport.py] [_log()] userauth is OK
2025-12-03T21:24:27.210 [DEBUG] [Thread-123896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:24:27.211 [DEBUG] [Thread-123896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:24:27.211 [DEBUG] [Thread-123896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:24:27.211 [DEBUG] [Thread-123896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:24:27.230 [INFO] [Thread-123896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:24:27.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:24:27.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:24:28.052 [DEBUG] [Thread-123896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:24:28.053 [DEBUG] [Thread-123896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:24:28.101 [DEBUG] [Thread-123896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:24:28.101 [DEBUG] [Thread-123896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:24:28.110 [DEBUG] [Thread-123896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:24:28.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:24:28.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:24:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:24:28.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:24:28.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:24:28.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:24:28.144 [DEBUG] [Thread-123896] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:24:36.073 [DEBUG] [Thread-123898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:46.056 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:50.302 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:50.302 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:51.131 [DEBUG] [Thread-123899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:24:58.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:24:58.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:24:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:24:58.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 24, 33), 16.58, 32.49, 0.0, 23.73, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:24:58.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:24:33
2025-12-03T21:24:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:24:59.145 [DEBUG] [Thread-123900] [transport.py] [_log()] starting thread (client mode): 0xa2762bc0
2025-12-03T21:24:59.146 [DEBUG] [Thread-123900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:24:59.167 [DEBUG] [Thread-123900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:24:59.167 [INFO] [Thread-123900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] client lang: <none>
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] server lang: <none>
2025-12-03T21:24:59.169 [DEBUG] [Thread-123900] [transport.py] [_log()] kex follows: False
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] Compression: none
2025-12-03T21:24:59.170 [DEBUG] [Thread-123900] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:24:59.181 [DEBUG] [Thread-123900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:24:59.181 [DEBUG] [Thread-123900] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:24:59.182 [DEBUG] [Thread-123900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:24:59.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:24:59.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:24:59.184 [DEBUG] [Thread-123900] [transport.py] [_log()] userauth is OK
2025-12-03T21:24:59.184 [DEBUG] [Thread-123900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:24:59.184 [DEBUG] [Thread-123900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:24:59.184 [DEBUG] [Thread-123900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:24:59.184 [DEBUG] [Thread-123900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:24:59.202 [INFO] [Thread-123900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:24:59.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:24:59.778 [DEBUG] [Thread-123900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:24:59.779 [DEBUG] [Thread-123900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:24:59.779 [DEBUG] [Thread-123900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:24:59.820 [DEBUG] [Thread-123900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:24:59.820 [DEBUG] [Thread-123900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:24:59.825 [DEBUG] [Thread-123900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:24:59.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:24:59.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:24:59.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:24:59.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:24:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:24:59.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:24:59.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:24:59.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.808384 -999.00  +16.40  23.47     37   +1.80 1 1 1 1 1     0    0 14.32 -6.52 ZNESW 23.5 23.5 147.2 27.2 16.7 -25.1 16.6 -24.7 16.4 -23.2 16.7 -23.9
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.808384
2025-12-03T21:24:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:24:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:24:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:24:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:24:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:24:59.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:24:33', tmtdew=16.58, humidity=32.49, cloud=0.0, wind=23.73, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:24:33', seeing=0.96, atlas_timestamp='2025-12-03T19:24:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:21:00')
2025-12-03T21:24:59.852 [DEBUG] [Thread-123900] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:24:59.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:24:59.957 [DEBUG] [Thread-123903] [transport.py] [_log()] starting thread (client mode): 0xa51e7310
2025-12-03T21:24:59.957 [DEBUG] [Thread-123903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:24:59.972 [DEBUG] [Thread-123903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:24:59.972 [INFO] [Thread-123903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:24:59.979 [DEBUG] [Thread-123903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:24:59.979 [DEBUG] [Thread-123903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:24:59.979 [DEBUG] [Thread-123903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:24:59.979 [DEBUG] [Thread-123903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:59.979 [DEBUG] [Thread-123903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] client lang: <none>
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] server lang: <none>
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] kex follows: False
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] Compression: none
2025-12-03T21:24:59.980 [DEBUG] [Thread-123903] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:25:00.037 [DEBUG] [Thread-123903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:25:00.038 [DEBUG] [Thread-123903] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:25:00.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:25:00.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:25:00.039 [DEBUG] [Thread-123903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:25:00.094 [DEBUG] [Thread-123903] [transport.py] [_log()] userauth is OK
2025-12-03T21:25:00.094 [DEBUG] [Thread-123903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:25:00.095 [DEBUG] [Thread-123903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:25:00.095 [DEBUG] [Thread-123903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:25:00.095 [DEBUG] [Thread-123903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:25:00.117 [INFO] [Thread-123903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:25:00.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:25:00.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:25:00.943 [DEBUG] [Thread-123903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:25:00.943 [DEBUG] [Thread-123903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:25:00.991 [DEBUG] [Thread-123903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:25:00.991 [DEBUG] [Thread-123903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:25:01.000 [DEBUG] [Thread-123903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:25:01.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:25:01.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:25:01.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:25:01.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:25:01.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:25:01.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:25:01.034 [DEBUG] [Thread-123903] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:25:06.166 [DEBUG] [Thread-123905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:06.468 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:11.478 [DEBUG] [Thread-123906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:21.213 [DEBUG] [Thread-123907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:26.888 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:25:31.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:25:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:25:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 25, 4), 16.61, 32.44, 0.0, 24.88, 16.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:25:31.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:25:04
2025-12-03T21:25:31.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:25:32.037 [DEBUG] [Thread-123908] [transport.py] [_log()] starting thread (client mode): 0xa2760550
2025-12-03T21:25:32.037 [DEBUG] [Thread-123908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:25:32.057 [DEBUG] [Thread-123908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:25:32.058 [INFO] [Thread-123908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:25:32.061 [DEBUG] [Thread-123908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] client lang: <none>
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] server lang: <none>
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] kex follows: False
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:25:32.062 [DEBUG] [Thread-123908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:25:32.063 [DEBUG] [Thread-123908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:25:32.063 [DEBUG] [Thread-123908] [transport.py] [_log()] Compression: none
2025-12-03T21:25:32.063 [DEBUG] [Thread-123908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:25:32.081 [DEBUG] [Thread-123908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:25:32.082 [DEBUG] [Thread-123908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:25:32.082 [DEBUG] [Thread-123908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:25:32.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:25:32.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:25:32.084 [DEBUG] [Thread-123908] [transport.py] [_log()] userauth is OK
2025-12-03T21:25:32.084 [DEBUG] [Thread-123908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:25:32.084 [DEBUG] [Thread-123908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:25:32.085 [DEBUG] [Thread-123908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:25:32.085 [DEBUG] [Thread-123908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:25:32.103 [INFO] [Thread-123908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:25:32.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:25:32.777 [DEBUG] [Thread-123908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:25:32.777 [DEBUG] [Thread-123908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:25:32.777 [DEBUG] [Thread-123908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:25:32.818 [DEBUG] [Thread-123908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:25:32.818 [DEBUG] [Thread-123908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:25:32.821 [DEBUG] [Thread-123908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:25:32.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:25:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:25:32.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:25:32.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:25:32.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:25:32.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:25:32.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:25:32.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:25:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:25:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.808731 -999.00  +16.40  18.68     37   +1.80 1 1 1 1 1     0    0 14.59 -5.46 ZNESW 18.7 18.7 144.2 26.0 16.7 -25.3 16.6 -24.7 16.4 -23.1 16.6 -23.8
2025-12-03T21:25:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:25:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:25:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.808731
2025-12-03T21:25:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:25:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:25:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:25:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:25:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:25:32.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:25:04', tmtdew=16.61, humidity=32.44, cloud=0.0, wind=24.88, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:25:05', seeing=0.96, atlas_timestamp='2025-12-03T19:24:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:21:00')
2025-12-03T21:25:32.846 [DEBUG] [Thread-123908] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:25:32.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:25:32.949 [DEBUG] [Thread-123911] [transport.py] [_log()] starting thread (client mode): 0xa27519c0
2025-12-03T21:25:32.949 [DEBUG] [Thread-123911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:25:32.966 [DEBUG] [Thread-123911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:25:32.966 [INFO] [Thread-123911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:25:32.973 [DEBUG] [Thread-123911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] client lang: <none>
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] server lang: <none>
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] kex follows: False
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:25:32.974 [DEBUG] [Thread-123911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:25:32.975 [DEBUG] [Thread-123911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:25:32.975 [DEBUG] [Thread-123911] [transport.py] [_log()] Compression: none
2025-12-03T21:25:32.975 [DEBUG] [Thread-123911] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:25:33.030 [DEBUG] [Thread-123911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:25:33.031 [DEBUG] [Thread-123911] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:25:33.031 [DEBUG] [Thread-123911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:25:33.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:25:33.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:25:33.087 [DEBUG] [Thread-123911] [transport.py] [_log()] userauth is OK
2025-12-03T21:25:33.087 [DEBUG] [Thread-123911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:25:33.087 [DEBUG] [Thread-123911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:25:33.087 [DEBUG] [Thread-123911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:25:33.087 [DEBUG] [Thread-123911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:25:33.105 [INFO] [Thread-123911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:25:33.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:25:33.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:25:33.973 [DEBUG] [Thread-123911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:25:33.974 [DEBUG] [Thread-123911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:25:34.024 [DEBUG] [Thread-123911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:25:34.024 [DEBUG] [Thread-123911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:25:34.036 [DEBUG] [Thread-123911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:25:34.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:25:34.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:25:34.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:25:34.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:25:34.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:25:34.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:25:34.086 [DEBUG] [Thread-123911] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:25:36.253 [DEBUG] [Thread-123913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:47.346 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:50.504 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:50.505 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:25:51.310 [DEBUG] [Thread-123914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:04.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:26:04.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:26:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:26:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 25, 37), 16.66, 31.92, 0.0, 23.08, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:26:04.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:25:37
2025-12-03T21:26:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:26:05.072 [DEBUG] [Thread-123915] [transport.py] [_log()] starting thread (client mode): 0xa51e76d0
2025-12-03T21:26:05.072 [DEBUG] [Thread-123915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:26:05.092 [DEBUG] [Thread-123915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:26:05.092 [INFO] [Thread-123915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] client lang: <none>
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] server lang: <none>
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] kex follows: False
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] Compression: none
2025-12-03T21:26:05.095 [DEBUG] [Thread-123915] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:26:05.110 [DEBUG] [Thread-123915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:26:05.110 [DEBUG] [Thread-123915] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:26:05.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:26:05.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] userauth is OK
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:26:05.111 [DEBUG] [Thread-123915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:26:05.123 [INFO] [Thread-123915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:26:05.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:26:05.958 [DEBUG] [Thread-123915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:26:05.958 [DEBUG] [Thread-123915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:26:05.958 [DEBUG] [Thread-123915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:26:05.999 [DEBUG] [Thread-123915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:26:05.999 [DEBUG] [Thread-123915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:26:06.001 [DEBUG] [Thread-123915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:26:06.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:26:06.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:26:06.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:26:06.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:26:06.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:26:06.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:26:06.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.809426 -999.00  +16.30  18.04     37   +1.80 1 1 1 1 1     0    0 14.45 -5.26 ZNESW 18.0 18.0 145.0 26.7 16.6 -25.3 16.6 -24.6 16.4 -23.1 16.6 -23.9
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.809426
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:26:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:25:37', tmtdew=16.66, humidity=31.92, cloud=0.0, wind=23.08, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:25:37', seeing=0.96, atlas_timestamp='2025-12-03T19:25:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.042749999999999844, -0.027749999999999275, -0.016500000000000625, 0.007500000000000284, -0.0017499999999994742, 0.03500000000000014, -0.09274999999999878, 0.03049999999999997, -0.04899999999999949, -0.00575000000000081, -0.0235000000000003, 0.04749999999999943, 0.07774999999999999, 0.05299999999999905, -0.10300000000000153, 0.00024999999999941735, 0.03550000000000075, 0.03049999999999997, 0.01524999999999821, 0.07599999999999874, 0.09574999999999889, -0.09024999999999928, -0.12625000000000064, 0.05299999999999905, 0.058999999999999275, 0.027749999999999275, 0.020500000000000185, 0.10699999999999932, -0.05799999999999983, -0.027999999999998693, -0.20899999999999963, -0.026250000000000995], zp_timestamp='2025-12-03T19:21:00')
2025-12-03T21:26:06.020 [DEBUG] [Thread-123915] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:26:06.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:26:06.113 [DEBUG] [Thread-123918] [transport.py] [_log()] starting thread (client mode): 0xa2750b20
2025-12-03T21:26:06.113 [DEBUG] [Thread-123918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:26:06.128 [DEBUG] [Thread-123918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:26:06.128 [INFO] [Thread-123918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:26:06.138 [DEBUG] [Thread-123918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] client lang: <none>
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] server lang: <none>
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] kex follows: False
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] Compression: none
2025-12-03T21:26:06.139 [DEBUG] [Thread-123918] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:26:06.194 [DEBUG] [Thread-123918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:26:06.194 [DEBUG] [Thread-123918] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:26:06.194 [DEBUG] [Thread-123918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:26:06.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:26:06.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:26:06.251 [DEBUG] [Thread-123918] [transport.py] [_log()] userauth is OK
2025-12-03T21:26:06.251 [DEBUG] [Thread-123918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:26:06.251 [DEBUG] [Thread-123918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:26:06.251 [DEBUG] [Thread-123918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:26:06.251 [DEBUG] [Thread-123918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:26:06.265 [INFO] [Thread-123918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:26:06.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:26:06.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:26:06.351 [DEBUG] [Thread-123920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:07.073 [DEBUG] [Thread-123918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:26:07.073 [DEBUG] [Thread-123918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:26:07.121 [DEBUG] [Thread-123918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:26:07.121 [DEBUG] [Thread-123918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:26:07.129 [DEBUG] [Thread-123918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:26:07.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:26:07.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:26:07.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:26:07.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:26:07.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:26:07.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:26:07.165 [DEBUG] [Thread-123918] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:26:07.826 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:11.562 [DEBUG] [Thread-123921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:21.405 [DEBUG] [Thread-123922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:28.251 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:36.438 [DEBUG] [Thread-123923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:37.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:26:37.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:26:37.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:26:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 26, 9), 16.67, 31.91, 0.0, 21.7, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:26:37.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:26:09
2025-12-03T21:26:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:26:38.143 [DEBUG] [Thread-123924] [transport.py] [_log()] starting thread (client mode): 0xa51e6e30
2025-12-03T21:26:38.143 [DEBUG] [Thread-123924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:26:38.164 [DEBUG] [Thread-123924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:26:38.164 [INFO] [Thread-123924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:38.168 [DEBUG] [Thread-123924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] client lang: <none>
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] server lang: <none>
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] kex follows: False
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:26:38.169 [DEBUG] [Thread-123924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:26:38.170 [DEBUG] [Thread-123924] [transport.py] [_log()] Compression: none
2025-12-03T21:26:38.170 [DEBUG] [Thread-123924] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:26:38.187 [DEBUG] [Thread-123924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:26:38.188 [DEBUG] [Thread-123924] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:26:38.188 [DEBUG] [Thread-123924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:26:38.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:26:38.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:26:38.190 [DEBUG] [Thread-123924] [transport.py] [_log()] userauth is OK
2025-12-03T21:26:38.190 [DEBUG] [Thread-123924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:26:38.190 [DEBUG] [Thread-123924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:26:38.190 [DEBUG] [Thread-123924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:26:38.190 [DEBUG] [Thread-123924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:26:38.214 [INFO] [Thread-123924] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:26:38.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:26:38.835 [DEBUG] [Thread-123924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:26:38.835 [DEBUG] [Thread-123924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:26:38.836 [DEBUG] [Thread-123924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:26:38.877 [DEBUG] [Thread-123924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:26:38.877 [DEBUG] [Thread-123924] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:26:38.880 [DEBUG] [Thread-123924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:26:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:26:38.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:26:38.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:26:38.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:26:38.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:26:38.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:26:38.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.809773 -999.00  +16.40  21.45     37   +1.80 1 1 1 1 1     0    0 14.35 -4.68 ZNESW 21.4 21.4 148.2 26.9 16.7 -25.1 16.6 -24.7 16.4 -23.0 16.7 -24.0
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:26:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.809773
2025-12-03T21:26:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:26:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:26:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:26:38.903 [DEBUG] [Thread-123924] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:26:38.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:26:38.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:26:38.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:26:09', tmtdew=16.67, humidity=31.91, cloud=0.0, wind=21.7, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:26:09', seeing=0.96, atlas_timestamp='2025-12-03T19:26:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:26:38.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:26:39.008 [DEBUG] [Thread-123927] [transport.py] [_log()] starting thread (client mode): 0xa51d3df0
2025-12-03T21:26:39.008 [DEBUG] [Thread-123927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:26:39.022 [DEBUG] [Thread-123927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:26:39.022 [INFO] [Thread-123927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:26:39.030 [DEBUG] [Thread-123927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] client lang: <none>
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] server lang: <none>
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] kex follows: False
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] Compression: none
2025-12-03T21:26:39.031 [DEBUG] [Thread-123927] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:26:39.087 [DEBUG] [Thread-123927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:26:39.088 [DEBUG] [Thread-123927] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:26:39.088 [DEBUG] [Thread-123927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:26:39.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:26:39.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:26:39.143 [DEBUG] [Thread-123927] [transport.py] [_log()] userauth is OK
2025-12-03T21:26:39.143 [DEBUG] [Thread-123927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:26:39.143 [DEBUG] [Thread-123927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:26:39.144 [DEBUG] [Thread-123927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:26:39.144 [DEBUG] [Thread-123927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:26:39.163 [INFO] [Thread-123927] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:26:39.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:26:39.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:26:39.967 [DEBUG] [Thread-123927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:26:39.968 [DEBUG] [Thread-123927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:26:40.016 [DEBUG] [Thread-123927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:26:40.016 [DEBUG] [Thread-123927] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:26:40.025 [DEBUG] [Thread-123927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:26:40.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:26:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:26:40.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:26:40.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:26:40.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:26:40.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:26:40.060 [DEBUG] [Thread-123927] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:26:48.719 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:50.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:50.709 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:26:51.480 [DEBUG] [Thread-123929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:06.539 [DEBUG] [Thread-123930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:09.239 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:27:10.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:27:10.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:27:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 26, 41), 16.66, 32.42, 0.0, 27.16, 16.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:27:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:26:41
2025-12-03T21:27:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:27:11.015 [DEBUG] [Thread-123931] [transport.py] [_log()] starting thread (client mode): 0xa514f790
2025-12-03T21:27:11.015 [DEBUG] [Thread-123931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:27:11.036 [DEBUG] [Thread-123931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:27:11.036 [INFO] [Thread-123931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:27:11.039 [DEBUG] [Thread-123931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:27:11.039 [DEBUG] [Thread-123931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:27:11.039 [DEBUG] [Thread-123931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:27:11.039 [DEBUG] [Thread-123931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:11.039 [DEBUG] [Thread-123931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] client lang: <none>
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] server lang: <none>
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] kex follows: False
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] Compression: none
2025-12-03T21:27:11.040 [DEBUG] [Thread-123931] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:27:11.057 [DEBUG] [Thread-123931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:27:11.057 [DEBUG] [Thread-123931] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:27:11.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:27:11.058 [DEBUG] [Thread-123931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:27:11.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:27:11.060 [DEBUG] [Thread-123931] [transport.py] [_log()] userauth is OK
2025-12-03T21:27:11.060 [DEBUG] [Thread-123931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:27:11.060 [DEBUG] [Thread-123931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:27:11.060 [DEBUG] [Thread-123931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:27:11.060 [DEBUG] [Thread-123931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:27:11.087 [INFO] [Thread-123931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:27:11.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:27:11.640 [DEBUG] [Thread-123933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:11.899 [DEBUG] [Thread-123931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:27:11.899 [DEBUG] [Thread-123931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:27:11.900 [DEBUG] [Thread-123931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:27:11.940 [DEBUG] [Thread-123931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:27:11.940 [DEBUG] [Thread-123931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:27:11.943 [DEBUG] [Thread-123931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:27:11.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:27:11.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:27:11.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:27:11.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:27:11.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:27:11.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:27:11.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:27:11.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:27:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:27:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.810120 -999.00  +16.30  18.24     37   +1.80 1 1 1 1 1     0    0 14.48 -4.35 ZNESW 18.2 18.2 140.6 27.0 16.7 -25.2 16.6 -24.6 16.4 -23.1 16.7 -23.9
2025-12-03T21:27:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:27:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:27:11.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.810120
2025-12-03T21:27:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:27:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:27:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:27:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:27:11.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:27:11.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:26:41', tmtdew=16.66, humidity=32.42, cloud=0.0, wind=27.16, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:26:41', seeing=0.96, atlas_timestamp='2025-12-03T19:26:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:27:11.969 [DEBUG] [Thread-123931] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:27:12.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:27:12.069 [DEBUG] [Thread-123935] [transport.py] [_log()] starting thread (client mode): 0xa51e4a90
2025-12-03T21:27:12.069 [DEBUG] [Thread-123935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:27:12.084 [DEBUG] [Thread-123935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:27:12.084 [INFO] [Thread-123935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:27:12.094 [DEBUG] [Thread-123935] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:27:12.094 [DEBUG] [Thread-123935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:27:12.094 [DEBUG] [Thread-123935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:27:12.094 [DEBUG] [Thread-123935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] client lang: <none>
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] server lang: <none>
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] kex follows: False
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] Compression: none
2025-12-03T21:27:12.095 [DEBUG] [Thread-123935] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:27:12.159 [DEBUG] [Thread-123935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:27:12.160 [DEBUG] [Thread-123935] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:27:12.160 [DEBUG] [Thread-123935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:27:12.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:27:12.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:27:12.217 [DEBUG] [Thread-123935] [transport.py] [_log()] userauth is OK
2025-12-03T21:27:12.217 [DEBUG] [Thread-123935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:27:12.217 [DEBUG] [Thread-123935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:27:12.218 [DEBUG] [Thread-123935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:27:12.218 [DEBUG] [Thread-123935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:27:12.237 [INFO] [Thread-123935] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:27:12.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:27:12.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:27:13.043 [DEBUG] [Thread-123935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:27:13.044 [DEBUG] [Thread-123935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:27:13.091 [DEBUG] [Thread-123935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:27:13.091 [DEBUG] [Thread-123935] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:27:13.100 [DEBUG] [Thread-123935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:27:13.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:27:13.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:27:13.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:27:13.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:27:13.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:27:13.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:27:13.140 [DEBUG] [Thread-123935] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:27:21.575 [DEBUG] [Thread-123937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:29.714 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:36.622 [DEBUG] [Thread-123938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:43.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:27:43.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:27:43.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:27:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 27, 13), 16.65, 32.44, 0.0, 26.52, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:27:43.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:27:13
2025-12-03T21:27:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:27:44.082 [DEBUG] [Thread-123939] [transport.py] [_log()] starting thread (client mode): 0xa514f6a0
2025-12-03T21:27:44.082 [DEBUG] [Thread-123939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:27:44.103 [DEBUG] [Thread-123939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:27:44.104 [INFO] [Thread-123939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:44.107 [DEBUG] [Thread-123939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] client lang: <none>
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] server lang: <none>
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] kex follows: False
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] Compression: none
2025-12-03T21:27:44.108 [DEBUG] [Thread-123939] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:27:44.125 [DEBUG] [Thread-123939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:27:44.125 [DEBUG] [Thread-123939] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:27:44.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:27:44.126 [DEBUG] [Thread-123939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:27:44.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:27:44.128 [DEBUG] [Thread-123939] [transport.py] [_log()] userauth is OK
2025-12-03T21:27:44.128 [DEBUG] [Thread-123939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:27:44.128 [DEBUG] [Thread-123939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:27:44.128 [DEBUG] [Thread-123939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:27:44.128 [DEBUG] [Thread-123939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:27:44.164 [INFO] [Thread-123939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:27:44.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:27:44.780 [DEBUG] [Thread-123939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:27:44.780 [DEBUG] [Thread-123939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:27:44.780 [DEBUG] [Thread-123939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:27:44.822 [DEBUG] [Thread-123939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:27:44.822 [DEBUG] [Thread-123939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:27:44.825 [DEBUG] [Thread-123939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:27:44.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:27:44.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:27:44.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:27:44.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:27:44.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:27:44.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:27:44.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:27:44.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.810467 -999.00  +16.40  17.14     37   +1.80 1 1 1 1 1     0    0 14.46 -4.18 ZNESW 17.1 17.1 141.0 25.6 16.7 -25.3 16.6 -24.8 16.4 -23.1 16.6 -24.0
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.810467
2025-12-03T21:27:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:27:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:27:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:27:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:27:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:27:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:27:13', tmtdew=16.65, humidity=32.44, cloud=0.0, wind=26.52, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:13', seeing=0.96, atlas_timestamp='2025-12-03T19:27:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:27:44.851 [DEBUG] [Thread-123939] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:27:44.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:27:44.943 [DEBUG] [Thread-123942] [transport.py] [_log()] starting thread (client mode): 0xa514cf70
2025-12-03T21:27:44.943 [DEBUG] [Thread-123942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:27:44.957 [DEBUG] [Thread-123942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:27:44.958 [INFO] [Thread-123942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:44.965 [DEBUG] [Thread-123942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] client lang: <none>
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] server lang: <none>
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] kex follows: False
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] Compression: none
2025-12-03T21:27:44.966 [DEBUG] [Thread-123942] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:27:45.023 [DEBUG] [Thread-123942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:27:45.023 [DEBUG] [Thread-123942] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:27:45.023 [DEBUG] [Thread-123942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:27:45.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:27:45.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:27:45.079 [DEBUG] [Thread-123942] [transport.py] [_log()] userauth is OK
2025-12-03T21:27:45.079 [DEBUG] [Thread-123942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:27:45.080 [DEBUG] [Thread-123942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:27:45.080 [DEBUG] [Thread-123942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:27:45.080 [DEBUG] [Thread-123942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:27:45.099 [INFO] [Thread-123942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:27:45.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:27:45.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:27:45.897 [DEBUG] [Thread-123942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:27:45.897 [DEBUG] [Thread-123942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:27:45.944 [DEBUG] [Thread-123942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:27:45.944 [DEBUG] [Thread-123942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:27:45.952 [DEBUG] [Thread-123942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:27:45.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:27:45.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:27:45.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:27:45.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:27:45.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:27:45.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:27:45.984 [DEBUG] [Thread-123942] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:27:50.134 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:50.914 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:50.915 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:27:51.659 [DEBUG] [Thread-123944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:06.714 [DEBUG] [Thread-123945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:10.554 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:11.714 [DEBUG] [Thread-123946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:15.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:28:15.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:28:15.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:28:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 27, 45), 16.65, 31.96, 0.0, 25.55, 16.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:28:16.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:27:45
2025-12-03T21:28:16.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:28:16.943 [DEBUG] [Thread-123947] [transport.py] [_log()] starting thread (client mode): 0xa514e2c0
2025-12-03T21:28:16.943 [DEBUG] [Thread-123947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:28:16.962 [DEBUG] [Thread-123947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:28:16.962 [INFO] [Thread-123947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:28:16.964 [DEBUG] [Thread-123947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:28:16.964 [DEBUG] [Thread-123947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:28:16.964 [DEBUG] [Thread-123947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:28:16.964 [DEBUG] [Thread-123947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:16.964 [DEBUG] [Thread-123947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] client lang: <none>
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] server lang: <none>
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] kex follows: False
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:28:16.965 [DEBUG] [Thread-123947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:28:16.966 [DEBUG] [Thread-123947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:28:16.966 [DEBUG] [Thread-123947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:28:16.966 [DEBUG] [Thread-123947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:28:16.966 [DEBUG] [Thread-123947] [transport.py] [_log()] Compression: none
2025-12-03T21:28:16.966 [DEBUG] [Thread-123947] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:28:16.980 [DEBUG] [Thread-123947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:28:16.980 [DEBUG] [Thread-123947] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:28:16.981 [DEBUG] [Thread-123947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:28:16.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:28:16.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:28:16.983 [DEBUG] [Thread-123947] [transport.py] [_log()] userauth is OK
2025-12-03T21:28:16.983 [DEBUG] [Thread-123947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:28:16.983 [DEBUG] [Thread-123947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:28:16.983 [DEBUG] [Thread-123947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:28:16.983 [DEBUG] [Thread-123947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:28:17.001 [INFO] [Thread-123947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:28:17.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:28:17.755 [DEBUG] [Thread-123947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:28:17.755 [DEBUG] [Thread-123947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:28:17.755 [DEBUG] [Thread-123947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:28:17.796 [DEBUG] [Thread-123947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:28:17.796 [DEBUG] [Thread-123947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:28:17.797 [DEBUG] [Thread-123947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:28:17.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:28:17.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:28:17.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:28:17.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:28:17.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:28:17.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:28:17.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.810815 -999.00  +16.30  19.97     37   +1.80 1 1 1 1 1     0    0 14.35 -4.06 ZNESW 20.0 20.0 146.8 23.0 16.7 -25.4 16.6 -24.8 16.4 -23.1 16.6 -23.9
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.810815
2025-12-03T21:28:17.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:28:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:28:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:28:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:28:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:28:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:27:45', tmtdew=16.65, humidity=31.96, cloud=0.0, wind=25.55, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:27:34.416', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:28:17.817 [DEBUG] [Thread-123947] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:28:17.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:28:17.910 [DEBUG] [Thread-123950] [transport.py] [_log()] starting thread (client mode): 0xa2760970
2025-12-03T21:28:17.910 [DEBUG] [Thread-123950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:28:17.926 [DEBUG] [Thread-123950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:28:17.926 [INFO] [Thread-123950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:28:17.933 [DEBUG] [Thread-123950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:28:17.933 [DEBUG] [Thread-123950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:28:17.933 [DEBUG] [Thread-123950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:28:17.933 [DEBUG] [Thread-123950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:17.933 [DEBUG] [Thread-123950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] client lang: <none>
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] server lang: <none>
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] kex follows: False
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] Compression: none
2025-12-03T21:28:17.934 [DEBUG] [Thread-123950] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:28:17.995 [DEBUG] [Thread-123950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:28:17.995 [DEBUG] [Thread-123950] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:28:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:28:17.995 [DEBUG] [Thread-123950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:28:17.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:28:18.051 [DEBUG] [Thread-123950] [transport.py] [_log()] userauth is OK
2025-12-03T21:28:18.051 [DEBUG] [Thread-123950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:28:18.051 [DEBUG] [Thread-123950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:28:18.051 [DEBUG] [Thread-123950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:28:18.052 [DEBUG] [Thread-123950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:28:18.065 [INFO] [Thread-123950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:28:18.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:28:18.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:28:18.881 [DEBUG] [Thread-123950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:28:18.881 [DEBUG] [Thread-123950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:28:18.929 [DEBUG] [Thread-123950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:28:18.929 [DEBUG] [Thread-123950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:28:18.937 [DEBUG] [Thread-123950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:28:18.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:28:18.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:28:18.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:28:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:28:18.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:28:18.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:28:18.969 [DEBUG] [Thread-123950] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:28:21.751 [DEBUG] [Thread-123952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:31.063 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:36.809 [DEBUG] [Thread-123953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:48.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:28:48.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:28:48.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:28:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 28, 17), 16.64, 31.97, 0.0, 25.64, 16.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:28:49.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:28:17
2025-12-03T21:28:49.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:28:49.965 [DEBUG] [Thread-123954] [transport.py] [_log()] starting thread (client mode): 0xa2761150
2025-12-03T21:28:49.965 [DEBUG] [Thread-123954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:28:49.986 [DEBUG] [Thread-123954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:28:49.986 [INFO] [Thread-123954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:28:49.989 [DEBUG] [Thread-123954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] client lang: <none>
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] server lang: <none>
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] kex follows: False
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] Compression: none
2025-12-03T21:28:49.990 [DEBUG] [Thread-123954] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:28:50.006 [DEBUG] [Thread-123954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:28:50.006 [DEBUG] [Thread-123954] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:28:50.006 [DEBUG] [Thread-123954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:28:50.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:28:50.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:28:50.007 [DEBUG] [Thread-123954] [transport.py] [_log()] userauth is OK
2025-12-03T21:28:50.007 [DEBUG] [Thread-123954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:28:50.007 [DEBUG] [Thread-123954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:28:50.007 [DEBUG] [Thread-123954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:28:50.007 [DEBUG] [Thread-123954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:28:50.027 [INFO] [Thread-123954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:28:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:28:50.684 [DEBUG] [Thread-123954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:28:50.684 [DEBUG] [Thread-123954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:28:50.684 [DEBUG] [Thread-123954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:28:50.724 [DEBUG] [Thread-123954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:28:50.725 [DEBUG] [Thread-123954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:28:50.727 [DEBUG] [Thread-123954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:28:50.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:28:50.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:28:50.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:28:50.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:28:50.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:28:50.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:28:50.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.811162 -999.00  +16.30  19.68     37   +1.80 1 1 1 1 1     0    0 14.48 -3.66 ZNESW 19.7 19.7 143.2 23.8 16.7 -25.2 16.6 -24.7 16.4 -23.1 16.6 -24.0
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.811162
2025-12-03T21:28:50.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:28:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:28:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:28:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:28:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:28:50.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:28:17', tmtdew=16.64, humidity=31.97, cloud=0.0, wind=25.64, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:28:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:28:50.744 [DEBUG] [Thread-123954] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:28:50.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:28:50.837 [DEBUG] [Thread-123957] [transport.py] [_log()] starting thread (client mode): 0xa514dc30
2025-12-03T21:28:50.837 [DEBUG] [Thread-123957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:28:50.852 [DEBUG] [Thread-123957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:28:50.852 [INFO] [Thread-123957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:28:50.859 [DEBUG] [Thread-123957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:28:50.859 [DEBUG] [Thread-123957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:28:50.859 [DEBUG] [Thread-123957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] client lang: <none>
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] server lang: <none>
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] kex follows: False
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] Compression: none
2025-12-03T21:28:50.860 [DEBUG] [Thread-123957] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:28:50.918 [DEBUG] [Thread-123957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:28:50.918 [DEBUG] [Thread-123957] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:28:50.919 [DEBUG] [Thread-123957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:28:50.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:28:50.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:28:50.976 [DEBUG] [Thread-123957] [transport.py] [_log()] userauth is OK
2025-12-03T21:28:50.976 [DEBUG] [Thread-123957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:28:50.976 [DEBUG] [Thread-123957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:28:50.976 [DEBUG] [Thread-123957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:28:50.976 [DEBUG] [Thread-123957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:28:50.990 [INFO] [Thread-123957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:28:50.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:28:50.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:28:51.126 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:51.127 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:51.525 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:51.793 [DEBUG] [Thread-123957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:28:51.793 [DEBUG] [Thread-123957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:28:51.841 [DEBUG] [Thread-123957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:28:51.841 [DEBUG] [Thread-123957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:28:51.843 [DEBUG] [Thread-123959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:28:51.850 [DEBUG] [Thread-123957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:28:51.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:28:51.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:28:51.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:28:51.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:28:51.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:28:51.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:28:51.884 [DEBUG] [Thread-123957] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:29:06.909 [DEBUG] [Thread-123960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:11.793 [DEBUG] [Thread-123961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:11.971 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:29:21.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:29:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:29:21.941 [DEBUG] [Thread-123962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 28, 49), 16.64, 31.96, 0.0, 23.63, 16.35, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:29:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:28:49
2025-12-03T21:29:22.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:29:22.963 [DEBUG] [Thread-123963] [transport.py] [_log()] starting thread (client mode): 0xa2752980
2025-12-03T21:29:22.963 [DEBUG] [Thread-123963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:29:22.976 [DEBUG] [Thread-123963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:29:22.976 [INFO] [Thread-123963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] client lang: <none>
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] server lang: <none>
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] kex follows: False
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:29:22.977 [DEBUG] [Thread-123963] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:29:22.978 [DEBUG] [Thread-123963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:29:22.978 [DEBUG] [Thread-123963] [transport.py] [_log()] Compression: none
2025-12-03T21:29:22.978 [DEBUG] [Thread-123963] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:29:22.985 [DEBUG] [Thread-123963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:29:22.985 [DEBUG] [Thread-123963] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:29:22.985 [DEBUG] [Thread-123963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:29:22.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:29:22.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:29:22.985 [DEBUG] [Thread-123963] [transport.py] [_log()] userauth is OK
2025-12-03T21:29:22.986 [DEBUG] [Thread-123963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:29:22.986 [DEBUG] [Thread-123963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:29:22.986 [DEBUG] [Thread-123963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:29:22.986 [DEBUG] [Thread-123963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:29:22.994 [INFO] [Thread-123963] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:29:22.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:29:23.801 [DEBUG] [Thread-123963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:29:23.802 [DEBUG] [Thread-123963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:29:23.802 [DEBUG] [Thread-123963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:29:23.843 [DEBUG] [Thread-123963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:29:23.843 [DEBUG] [Thread-123963] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:29:23.846 [DEBUG] [Thread-123963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:29:23.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:29:23.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:29:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:29:23.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:29:23.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:29:23.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:29:23.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:29:23.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.811509 -999.00  +16.30  17.60     37   +1.80 1 1 1 1 1     0    0 14.50 -3.52 ZNESW 17.6 17.6 151.2 24.0 16.6 -25.3 16.6 -24.6 16.3 -23.1 16.6 -23.8
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.811509
2025-12-03T21:29:23.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:29:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:29:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:29:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:29:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:29:23.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:28:49', tmtdew=16.64, humidity=31.96, cloud=0.0, wind=23.63, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:28:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:25:00')
2025-12-03T21:29:23.867 [DEBUG] [Thread-123963] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:29:23.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:29:23.976 [DEBUG] [Thread-123966] [transport.py] [_log()] starting thread (client mode): 0xa27503a0
2025-12-03T21:29:23.976 [DEBUG] [Thread-123966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:29:23.991 [DEBUG] [Thread-123966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:29:23.991 [INFO] [Thread-123966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:29:23.998 [DEBUG] [Thread-123966] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:29:23.998 [DEBUG] [Thread-123966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] client lang: <none>
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] server lang: <none>
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] kex follows: False
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:29:23.999 [DEBUG] [Thread-123966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:29:24.000 [DEBUG] [Thread-123966] [transport.py] [_log()] Compression: none
2025-12-03T21:29:24.000 [DEBUG] [Thread-123966] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:29:24.055 [DEBUG] [Thread-123966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:29:24.056 [DEBUG] [Thread-123966] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:29:24.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:29:24.057 [DEBUG] [Thread-123966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:29:24.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:29:24.112 [DEBUG] [Thread-123966] [transport.py] [_log()] userauth is OK
2025-12-03T21:29:24.112 [DEBUG] [Thread-123966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:29:24.112 [DEBUG] [Thread-123966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:29:24.112 [DEBUG] [Thread-123966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:29:24.112 [DEBUG] [Thread-123966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:29:24.130 [INFO] [Thread-123966] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:29:24.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:29:24.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:29:24.972 [DEBUG] [Thread-123966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:29:24.972 [DEBUG] [Thread-123966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:29:25.022 [DEBUG] [Thread-123966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:29:25.022 [DEBUG] [Thread-123966] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:29:25.031 [DEBUG] [Thread-123966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:29:25.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:29:25.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:29:25.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:29:25.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:29:25.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:29:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:29:25.065 [DEBUG] [Thread-123966] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:29:32.471 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:36.976 [DEBUG] [Thread-123968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:51.323 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:51.324 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:52.036 [DEBUG] [Thread-123969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:53.048 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:29:55.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:29:55.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:29:55.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:29:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 29, 21), 16.71, 31.79, 0.0, 24.28, 16.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:29:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:29:21
2025-12-03T21:29:55.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:29:56.097 [DEBUG] [Thread-123970] [transport.py] [_log()] starting thread (client mode): 0xa514f4c0
2025-12-03T21:29:56.098 [DEBUG] [Thread-123970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:29:56.113 [DEBUG] [Thread-123970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:29:56.113 [INFO] [Thread-123970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] client lang: <none>
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] server lang: <none>
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] kex follows: False
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:29:56.116 [DEBUG] [Thread-123970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:29:56.117 [DEBUG] [Thread-123970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:29:56.117 [DEBUG] [Thread-123970] [transport.py] [_log()] Compression: none
2025-12-03T21:29:56.117 [DEBUG] [Thread-123970] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:29:56.134 [DEBUG] [Thread-123970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:29:56.134 [DEBUG] [Thread-123970] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:29:56.134 [DEBUG] [Thread-123970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:29:56.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:29:56.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:29:56.135 [DEBUG] [Thread-123970] [transport.py] [_log()] userauth is OK
2025-12-03T21:29:56.135 [DEBUG] [Thread-123970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:29:56.135 [DEBUG] [Thread-123970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:29:56.135 [DEBUG] [Thread-123970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:29:56.135 [DEBUG] [Thread-123970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:29:56.145 [INFO] [Thread-123970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:29:56.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:29:56.809 [DEBUG] [Thread-123970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:29:56.809 [DEBUG] [Thread-123970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:29:56.809 [DEBUG] [Thread-123970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:29:56.850 [DEBUG] [Thread-123970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:29:56.850 [DEBUG] [Thread-123970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:29:56.852 [DEBUG] [Thread-123970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:29:56.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:29:56.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:29:56.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:29:56.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:29:56.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:29:56.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:29:56.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.812204 -999.00  +16.30  22.05     37   +1.80 1 1 1 1 1     0    0 14.41 -3.41 ZNESW 22.1 22.1 141.7 28.1 16.6 -25.2 16.6 -24.6 16.3 -23.0 16.6 -23.8
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.812204
2025-12-03T21:29:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:29:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:29:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:29:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:29:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:29:56.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:29:21', tmtdew=16.71, humidity=31.79, cloud=0.0, wind=24.28, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:29:34.426', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:28:00')
2025-12-03T21:29:56.871 [DEBUG] [Thread-123970] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:29:56.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:29:56.965 [DEBUG] [Thread-123973] [transport.py] [_log()] starting thread (client mode): 0xa514ca00
2025-12-03T21:29:56.965 [DEBUG] [Thread-123973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:29:56.982 [DEBUG] [Thread-123973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:29:56.982 [INFO] [Thread-123973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:29:56.989 [DEBUG] [Thread-123973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] client lang: <none>
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] server lang: <none>
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] kex follows: False
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] Compression: none
2025-12-03T21:29:56.990 [DEBUG] [Thread-123973] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:29:57.047 [DEBUG] [Thread-123973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:29:57.047 [DEBUG] [Thread-123973] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:29:57.047 [DEBUG] [Thread-123973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:29:57.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:29:57.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:29:57.104 [DEBUG] [Thread-123973] [transport.py] [_log()] userauth is OK
2025-12-03T21:29:57.104 [DEBUG] [Thread-123973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:29:57.104 [DEBUG] [Thread-123973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:29:57.104 [DEBUG] [Thread-123973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:29:57.104 [DEBUG] [Thread-123973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:29:57.120 [INFO] [Thread-123973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:29:57.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:29:57.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:29:57.951 [DEBUG] [Thread-123973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:29:57.951 [DEBUG] [Thread-123973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:29:57.998 [DEBUG] [Thread-123973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:29:57.998 [DEBUG] [Thread-123973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:29:58.007 [DEBUG] [Thread-123973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:29:58.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:29:58.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:29:58.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:29:58.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:29:58.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:29:58.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:29:58.038 [DEBUG] [Thread-123973] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:30:07.071 [DEBUG] [Thread-123975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:11.852 [DEBUG] [Thread-123976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:13.470 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:22.130 [DEBUG] [Thread-123977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:30:28.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:30:28.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:30:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 30, 25), 16.61, 31.92, 0.0, 24.37, 16.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:30:28.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:30:25
2025-12-03T21:30:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:30:29.026 [DEBUG] [Thread-123978] [transport.py] [_log()] starting thread (client mode): 0xa2760790
2025-12-03T21:30:29.026 [DEBUG] [Thread-123978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:30:29.048 [DEBUG] [Thread-123978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:30:29.048 [INFO] [Thread-123978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:30:29.051 [DEBUG] [Thread-123978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] client lang: <none>
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] server lang: <none>
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] kex follows: False
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:30:29.052 [DEBUG] [Thread-123978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:30:29.053 [DEBUG] [Thread-123978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:30:29.053 [DEBUG] [Thread-123978] [transport.py] [_log()] Compression: none
2025-12-03T21:30:29.053 [DEBUG] [Thread-123978] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:30:29.070 [DEBUG] [Thread-123978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:30:29.070 [DEBUG] [Thread-123978] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:30:29.071 [DEBUG] [Thread-123978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:30:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:30:29.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:30:29.072 [DEBUG] [Thread-123978] [transport.py] [_log()] userauth is OK
2025-12-03T21:30:29.072 [DEBUG] [Thread-123978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:30:29.072 [DEBUG] [Thread-123978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:30:29.073 [DEBUG] [Thread-123978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:30:29.073 [DEBUG] [Thread-123978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:30:29.090 [INFO] [Thread-123978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:30:29.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:30:29.770 [DEBUG] [Thread-123978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:30:29.770 [DEBUG] [Thread-123978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:30:29.770 [DEBUG] [Thread-123978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:30:29.810 [DEBUG] [Thread-123978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:30:29.811 [DEBUG] [Thread-123978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:30:29.813 [DEBUG] [Thread-123978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:30:29.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:30:29.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:30:29.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:30:29.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:30:29.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:30:29.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:30:29.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:30:29.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.812550 -999.00  +16.30  17.13     37   +1.80 1 1 1 1 1     0    0 14.52 -3.45 ZNESW 17.1 17.1 146.8 21.7 16.7 -25.4 16.6 -24.6 16.4 -23.1 16.6 -24.1
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.812550
2025-12-03T21:30:29.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:30:29.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:30:29.838 [DEBUG] [Thread-123978] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:30:29.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:30:29.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:30:29.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:30:29.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:30:25', tmtdew=16.61, humidity=31.92, cloud=0.0, wind=24.37, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:30:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:28:00')
2025-12-03T21:30:29.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:30:29.941 [DEBUG] [Thread-123981] [transport.py] [_log()] starting thread (client mode): 0xa2761b70
2025-12-03T21:30:29.942 [DEBUG] [Thread-123981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:30:29.959 [DEBUG] [Thread-123981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:30:29.959 [INFO] [Thread-123981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:30:29.967 [DEBUG] [Thread-123981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] client lang: <none>
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] server lang: <none>
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] kex follows: False
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] Compression: none
2025-12-03T21:30:29.968 [DEBUG] [Thread-123981] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:30:30.024 [DEBUG] [Thread-123981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:30:30.025 [DEBUG] [Thread-123981] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:30:30.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:30:30.025 [DEBUG] [Thread-123981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:30:30.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:30:30.080 [DEBUG] [Thread-123981] [transport.py] [_log()] userauth is OK
2025-12-03T21:30:30.081 [DEBUG] [Thread-123981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:30:30.081 [DEBUG] [Thread-123981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:30:30.081 [DEBUG] [Thread-123981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:30:30.081 [DEBUG] [Thread-123981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:30:30.099 [INFO] [Thread-123981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:30:30.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:30:30.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:30:30.962 [DEBUG] [Thread-123981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:30:30.962 [DEBUG] [Thread-123981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:30:31.010 [DEBUG] [Thread-123981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:30:31.011 [DEBUG] [Thread-123981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:30:31.021 [DEBUG] [Thread-123981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:30:31.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:30:31.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:30:31.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:30:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:30:31.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:30:31.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:30:31.060 [DEBUG] [Thread-123981] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:30:33.885 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:37.165 [DEBUG] [Thread-123983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:51.521 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:51.522 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:52.214 [DEBUG] [Thread-123984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:30:54.327 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:01.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:31:01.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:31:01.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:31:01.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 30, 57), 16.7, 31.94, 0.0, 22.89, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:31:01.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:30:57
2025-12-03T21:31:01.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:31:02.046 [DEBUG] [Thread-123985] [transport.py] [_log()] starting thread (client mode): 0xa27295d0
2025-12-03T21:31:02.047 [DEBUG] [Thread-123985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:31:02.067 [DEBUG] [Thread-123985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:31:02.067 [INFO] [Thread-123985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:31:02.070 [DEBUG] [Thread-123985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:31:02.070 [DEBUG] [Thread-123985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:31:02.070 [DEBUG] [Thread-123985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:31:02.070 [DEBUG] [Thread-123985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] client lang: <none>
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] server lang: <none>
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] kex follows: False
2025-12-03T21:31:02.071 [DEBUG] [Thread-123985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] Compression: none
2025-12-03T21:31:02.072 [DEBUG] [Thread-123985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:31:02.090 [DEBUG] [Thread-123985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:31:02.091 [DEBUG] [Thread-123985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:31:02.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:31:02.092 [DEBUG] [Thread-123985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:31:02.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:31:02.094 [DEBUG] [Thread-123985] [transport.py] [_log()] userauth is OK
2025-12-03T21:31:02.094 [DEBUG] [Thread-123985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:31:02.095 [DEBUG] [Thread-123985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:31:02.095 [DEBUG] [Thread-123985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:31:02.095 [DEBUG] [Thread-123985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:31:02.108 [INFO] [Thread-123985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:31:02.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:31:02.760 [DEBUG] [Thread-123985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:31:02.761 [DEBUG] [Thread-123985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:31:02.761 [DEBUG] [Thread-123985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:31:02.802 [DEBUG] [Thread-123985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:31:02.802 [DEBUG] [Thread-123985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:31:02.805 [DEBUG] [Thread-123985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:31:02.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:31:02.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:31:02.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:31:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:31:02.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:31:02.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:31:02.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:31:02.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:31:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:31:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.812898 -999.00  +16.40  20.02     37   +1.80 1 1 1 1 1     0    0 14.42 -3.31 ZNESW 20.0 20.0 138.6 30.0 16.6 -25.3 16.6 -24.8 16.4 -23.2 16.6 -24.0
2025-12-03T21:31:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:31:02.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:31:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.812898
2025-12-03T21:31:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:31:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:31:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:31:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:31:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:31:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:30:57', tmtdew=16.7, humidity=31.94, cloud=0.0, wind=22.89, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:27:45', seeing=0.96, atlas_timestamp='2025-12-03T19:30:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:28:00')
2025-12-03T21:31:02.828 [DEBUG] [Thread-123985] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:31:02.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:31:02.932 [DEBUG] [Thread-123988] [transport.py] [_log()] starting thread (client mode): 0xa51d3460
2025-12-03T21:31:02.932 [DEBUG] [Thread-123988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:31:02.946 [DEBUG] [Thread-123988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:31:02.946 [INFO] [Thread-123988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:31:02.954 [DEBUG] [Thread-123988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:31:02.954 [DEBUG] [Thread-123988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:31:02.954 [DEBUG] [Thread-123988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:31:02.954 [DEBUG] [Thread-123988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:02.954 [DEBUG] [Thread-123988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] client lang: <none>
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] server lang: <none>
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] kex follows: False
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] Compression: none
2025-12-03T21:31:02.955 [DEBUG] [Thread-123988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:31:03.012 [DEBUG] [Thread-123988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:31:03.012 [DEBUG] [Thread-123988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:31:03.013 [DEBUG] [Thread-123988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:31:03.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:31:03.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:31:03.068 [DEBUG] [Thread-123988] [transport.py] [_log()] userauth is OK
2025-12-03T21:31:03.068 [DEBUG] [Thread-123988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:31:03.068 [DEBUG] [Thread-123988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:31:03.069 [DEBUG] [Thread-123988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:31:03.069 [DEBUG] [Thread-123988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:31:03.087 [INFO] [Thread-123988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:31:03.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:31:03.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:31:03.941 [DEBUG] [Thread-123988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:31:03.941 [DEBUG] [Thread-123988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:31:03.988 [DEBUG] [Thread-123988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:31:03.989 [DEBUG] [Thread-123988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:31:03.997 [DEBUG] [Thread-123988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:31:04.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:31:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:31:04.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:31:04.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:31:04.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:31:04.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:31:04.031 [DEBUG] [Thread-123988] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:31:07.251 [DEBUG] [Thread-123990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:11.904 [DEBUG] [Thread-123991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:14.722 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:22.311 [DEBUG] [Thread-123992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:34.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:31:34.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:31:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:31:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 31, 29), 16.72, 31.89, 0.0, 22.96, 16.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:31:34.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:31:29
2025-12-03T21:31:34.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:31:35.009 [DEBUG] [Thread-123993] [transport.py] [_log()] starting thread (client mode): 0xa2729990
2025-12-03T21:31:35.009 [DEBUG] [Thread-123993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:31:35.030 [DEBUG] [Thread-123993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:31:35.030 [INFO] [Thread-123993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:35.034 [DEBUG] [Thread-123993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] client lang: <none>
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] server lang: <none>
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] kex follows: False
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:31:35.035 [DEBUG] [Thread-123993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:31:35.036 [DEBUG] [Thread-123993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:31:35.036 [DEBUG] [Thread-123993] [transport.py] [_log()] Compression: none
2025-12-03T21:31:35.036 [DEBUG] [Thread-123993] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:31:35.055 [DEBUG] [Thread-123993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:31:35.056 [DEBUG] [Thread-123993] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:31:35.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:31:35.057 [DEBUG] [Thread-123993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:31:35.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:31:35.059 [DEBUG] [Thread-123993] [transport.py] [_log()] userauth is OK
2025-12-03T21:31:35.060 [DEBUG] [Thread-123993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:31:35.060 [DEBUG] [Thread-123993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:31:35.060 [DEBUG] [Thread-123993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:31:35.060 [DEBUG] [Thread-123993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:31:35.089 [INFO] [Thread-123993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:31:35.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:31:35.186 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:35.749 [DEBUG] [Thread-123993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:31:35.749 [DEBUG] [Thread-123993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:31:35.750 [DEBUG] [Thread-123993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:31:35.790 [DEBUG] [Thread-123993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:31:35.790 [DEBUG] [Thread-123993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:31:35.792 [DEBUG] [Thread-123993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:31:35.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:31:35.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:31:35.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:31:35.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:31:35.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:31:35.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:31:35.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.813245 -999.00  +16.30  14.49     37   +1.80 1 1 1 1 1     0    0 14.32 -3.16 ZNESW 14.5 14.5 146.0 24.1 16.6 -25.2 16.6 -24.7 16.3 -23.1 16.6 -23.9
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:31:35.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.813245
2025-12-03T21:31:35.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:31:35.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:31:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:31:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:31:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:31:35.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:31:29', tmtdew=16.72, humidity=31.89, cloud=0.0, wind=22.96, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:31:29', seeing=1.05, atlas_timestamp='2025-12-03T19:31:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:28:00')
2025-12-03T21:31:35.816 [DEBUG] [Thread-123993] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:31:35.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:31:35.919 [DEBUG] [Thread-123996] [transport.py] [_log()] starting thread (client mode): 0xa2762890
2025-12-03T21:31:35.919 [DEBUG] [Thread-123996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:31:35.939 [DEBUG] [Thread-123996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:31:35.939 [INFO] [Thread-123996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:31:35.946 [DEBUG] [Thread-123996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:31:35.946 [DEBUG] [Thread-123996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:31:35.946 [DEBUG] [Thread-123996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:31:35.946 [DEBUG] [Thread-123996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] client lang: <none>
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] server lang: <none>
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] kex follows: False
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] Compression: none
2025-12-03T21:31:35.947 [DEBUG] [Thread-123996] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:31:36.004 [DEBUG] [Thread-123996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:31:36.004 [DEBUG] [Thread-123996] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:31:36.005 [DEBUG] [Thread-123996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:31:36.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:31:36.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:31:36.063 [DEBUG] [Thread-123996] [transport.py] [_log()] userauth is OK
2025-12-03T21:31:36.063 [DEBUG] [Thread-123996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:31:36.063 [DEBUG] [Thread-123996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:31:36.064 [DEBUG] [Thread-123996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:31:36.064 [DEBUG] [Thread-123996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:31:36.083 [INFO] [Thread-123996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:31:36.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:31:36.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:31:36.914 [DEBUG] [Thread-123996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:31:36.914 [DEBUG] [Thread-123996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:31:36.963 [DEBUG] [Thread-123996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:31:36.963 [DEBUG] [Thread-123996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:31:36.972 [DEBUG] [Thread-123996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:31:36.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:31:36.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:31:36.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:31:37.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:31:37.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:31:37.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:31:37.014 [DEBUG] [Thread-123996] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:31:37.346 [DEBUG] [Thread-123998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:51.721 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:51.722 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:52.405 [DEBUG] [Thread-123999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:31:55.606 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:07.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:32:07.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:32:07.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:32:07.440 [DEBUG] [Thread-124000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 32, 1), 16.67, 31.89, 0.0, 24.01, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:32:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:32:01
2025-12-03T21:32:07.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:32:07.983 [DEBUG] [Thread-124001] [transport.py] [_log()] starting thread (client mode): 0xa51d1ab0
2025-12-03T21:32:07.983 [DEBUG] [Thread-124001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:32:08.003 [DEBUG] [Thread-124001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:32:08.003 [INFO] [Thread-124001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:32:08.006 [DEBUG] [Thread-124001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] client lang: <none>
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] server lang: <none>
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] kex follows: False
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] Compression: none
2025-12-03T21:32:08.007 [DEBUG] [Thread-124001] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:32:08.025 [DEBUG] [Thread-124001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:32:08.026 [DEBUG] [Thread-124001] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:32:08.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:32:08.027 [DEBUG] [Thread-124001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:32:08.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:32:08.028 [DEBUG] [Thread-124001] [transport.py] [_log()] userauth is OK
2025-12-03T21:32:08.028 [DEBUG] [Thread-124001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:32:08.028 [DEBUG] [Thread-124001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:32:08.029 [DEBUG] [Thread-124001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:32:08.029 [DEBUG] [Thread-124001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:32:08.050 [INFO] [Thread-124001] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:32:08.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:32:08.663 [DEBUG] [Thread-124001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:32:08.663 [DEBUG] [Thread-124001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:32:08.663 [DEBUG] [Thread-124001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:32:08.704 [DEBUG] [Thread-124001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:32:08.704 [DEBUG] [Thread-124001] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:32:08.707 [DEBUG] [Thread-124001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:32:08.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:32:08.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:32:08.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:32:08.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:32:08.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:32:08.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:32:08.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:32:08.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:32:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:32:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.813592 -999.00  +16.30  19.60     37   +1.80 1 1 1 1 1     0    0 14.67 -3.24 ZNESW 19.6 19.6 137.4 25.0 16.6 -25.3 16.6 -24.7 16.4 -23.0 16.6 -23.8
2025-12-03T21:32:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:32:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:32:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.813592
2025-12-03T21:32:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:32:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:32:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:32:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:32:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:32:08.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:32:01', tmtdew=16.67, humidity=31.89, cloud=0.0, wind=24.01, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:32:01', seeing=1.21, atlas_timestamp='2025-12-03T19:31:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.025249999999999773, 0.003750000000000142, 0.022500000000000853, -0.04449999999999932, -0.0007500000000000284, -0.044500000000001094, -0.11874999999999858, -0.02850000000000108, -0.0860000000000003, -0.00975000000000037, -0.00849999999999973, 0.036999999999999034, -0.003750000000000142, -0.050499999999999545, -0.12750000000000128, -0.03575000000000017, 0.00849999999999973, 0.023999999999999133, -0.02275000000000027, 0.09499999999999886, 0.0337499999999995, -0.11674999999999969, -0.02224999999999966, 0.0039999999999995595, 0.0495000000000001, -0.015750000000000597, 0.03950000000000031, 0.10899999999999999, 0.025000000000000355, -0.007999999999999119, -0.5204999999999984, -0.06025000000000169], zp_timestamp='2025-12-03T19:28:00')
2025-12-03T21:32:08.732 [DEBUG] [Thread-124001] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:32:08.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:32:08.835 [DEBUG] [Thread-124004] [transport.py] [_log()] starting thread (client mode): 0xa51e65c0
2025-12-03T21:32:08.835 [DEBUG] [Thread-124004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:32:08.851 [DEBUG] [Thread-124004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:32:08.851 [INFO] [Thread-124004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:32:08.862 [DEBUG] [Thread-124004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:32:08.862 [DEBUG] [Thread-124004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:32:08.863 [DEBUG] [Thread-124004] [transport.py] [_log()] client lang: <none>
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] server lang: <none>
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] kex follows: False
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] Compression: none
2025-12-03T21:32:08.864 [DEBUG] [Thread-124004] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:32:08.920 [DEBUG] [Thread-124004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:32:08.921 [DEBUG] [Thread-124004] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:32:08.921 [DEBUG] [Thread-124004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:32:08.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:32:08.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:32:08.977 [DEBUG] [Thread-124004] [transport.py] [_log()] userauth is OK
2025-12-03T21:32:08.977 [DEBUG] [Thread-124004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:32:08.977 [DEBUG] [Thread-124004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:32:08.977 [DEBUG] [Thread-124004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:32:08.977 [DEBUG] [Thread-124004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:32:08.997 [INFO] [Thread-124004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:32:08.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:32:08.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:32:09.860 [DEBUG] [Thread-124004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:32:09.861 [DEBUG] [Thread-124004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:32:09.909 [DEBUG] [Thread-124004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:32:09.909 [DEBUG] [Thread-124004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:32:09.918 [DEBUG] [Thread-124004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:32:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:32:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:32:09.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:32:09.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:32:09.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:32:09.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:32:09.955 [DEBUG] [Thread-124004] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:32:11.982 [DEBUG] [Thread-124006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:16.103 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:22.475 [DEBUG] [Thread-124007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:36.688 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:37.541 [DEBUG] [Thread-124008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:39.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:32:39.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:32:39.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:32:40.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 32, 33), 16.65, 31.96, 0.0, 23.84, 16.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:32:40.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:32:33
2025-12-03T21:32:40.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:32:40.932 [DEBUG] [Thread-124009] [transport.py] [_log()] starting thread (client mode): 0xa2728130
2025-12-03T21:32:40.933 [DEBUG] [Thread-124009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:32:40.950 [DEBUG] [Thread-124009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:32:40.950 [INFO] [Thread-124009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:40.954 [DEBUG] [Thread-124009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] client lang: <none>
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] server lang: <none>
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] kex follows: False
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:32:40.955 [DEBUG] [Thread-124009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:32:40.956 [DEBUG] [Thread-124009] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:32:40.956 [DEBUG] [Thread-124009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:32:40.956 [DEBUG] [Thread-124009] [transport.py] [_log()] Compression: none
2025-12-03T21:32:40.956 [DEBUG] [Thread-124009] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:32:40.975 [DEBUG] [Thread-124009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:32:40.975 [DEBUG] [Thread-124009] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:32:40.976 [DEBUG] [Thread-124009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:32:40.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:32:40.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:32:40.978 [DEBUG] [Thread-124009] [transport.py] [_log()] userauth is OK
2025-12-03T21:32:40.978 [DEBUG] [Thread-124009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:32:40.978 [DEBUG] [Thread-124009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:32:40.978 [DEBUG] [Thread-124009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:32:40.978 [DEBUG] [Thread-124009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:32:40.996 [INFO] [Thread-124009] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:32:40.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:32:41.593 [DEBUG] [Thread-124009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:32:41.593 [DEBUG] [Thread-124009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:32:41.594 [DEBUG] [Thread-124009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:32:41.635 [DEBUG] [Thread-124009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:32:41.635 [DEBUG] [Thread-124009] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:32:41.637 [DEBUG] [Thread-124009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:32:41.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:32:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:32:41.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:32:41.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:32:41.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:32:41.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:32:41.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:32:41.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:32:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:32:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.814287 -999.00  +16.30  21.38     37   +1.80 1 1 1 1 1     0    0 14.50 -3.00 ZNESW 21.4 21.4 146.8 25.1 16.6 -25.2 16.6 -24.7 16.4 -23.1 16.6 -23.9
2025-12-03T21:32:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:32:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:32:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.814287
2025-12-03T21:32:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:32:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:32:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:32:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:32:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:32:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:32:33', tmtdew=16.65, humidity=31.96, cloud=0.0, wind=23.84, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:32:33', seeing=1.05, atlas_timestamp='2025-12-03T19:32:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:32:41.664 [DEBUG] [Thread-124009] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:32:41.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:32:41.766 [DEBUG] [Thread-124012] [transport.py] [_log()] starting thread (client mode): 0xa272a020
2025-12-03T21:32:41.766 [DEBUG] [Thread-124012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:32:41.781 [DEBUG] [Thread-124012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:32:41.781 [INFO] [Thread-124012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] client lang: <none>
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] server lang: <none>
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] kex follows: False
2025-12-03T21:32:41.789 [DEBUG] [Thread-124012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] Compression: none
2025-12-03T21:32:41.790 [DEBUG] [Thread-124012] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:32:41.854 [DEBUG] [Thread-124012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:32:41.855 [DEBUG] [Thread-124012] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:32:41.855 [DEBUG] [Thread-124012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:32:41.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:32:41.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:32:41.913 [DEBUG] [Thread-124012] [transport.py] [_log()] userauth is OK
2025-12-03T21:32:41.913 [DEBUG] [Thread-124012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:32:41.913 [DEBUG] [Thread-124012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:32:41.913 [DEBUG] [Thread-124012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:32:41.913 [DEBUG] [Thread-124012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:32:41.933 [INFO] [Thread-124012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:32:41.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:32:41.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:32:42.769 [DEBUG] [Thread-124012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:32:42.770 [DEBUG] [Thread-124012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:32:42.818 [DEBUG] [Thread-124012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:32:42.818 [DEBUG] [Thread-124012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:32:42.826 [DEBUG] [Thread-124012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:32:42.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:32:42.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:32:42.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:32:42.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:32:42.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:32:42.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:32:42.861 [DEBUG] [Thread-124012] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:32:51.927 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:51.928 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:52.579 [DEBUG] [Thread-124014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:32:57.091 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:07.647 [DEBUG] [Thread-124015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:12.037 [DEBUG] [Thread-124016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:33:12.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:33:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:33:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 33, 5), 16.64, 31.96, 0.0, 23.61, 16.36, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:33:13.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:33:05
2025-12-03T21:33:13.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:33:13.834 [DEBUG] [Thread-124017] [transport.py] [_log()] starting thread (client mode): 0xa2762590
2025-12-03T21:33:13.834 [DEBUG] [Thread-124017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:33:13.853 [DEBUG] [Thread-124017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:33:13.853 [INFO] [Thread-124017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] client lang: <none>
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] server lang: <none>
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] kex follows: False
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] Compression: none
2025-12-03T21:33:13.855 [DEBUG] [Thread-124017] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:33:13.864 [DEBUG] [Thread-124017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:33:13.865 [DEBUG] [Thread-124017] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:33:13.865 [DEBUG] [Thread-124017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:33:13.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:33:13.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:33:13.865 [DEBUG] [Thread-124017] [transport.py] [_log()] userauth is OK
2025-12-03T21:33:13.866 [DEBUG] [Thread-124017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:33:13.866 [DEBUG] [Thread-124017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:33:13.866 [DEBUG] [Thread-124017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:33:13.866 [DEBUG] [Thread-124017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:33:13.875 [INFO] [Thread-124017] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:33:13.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:33:14.467 [DEBUG] [Thread-124017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:33:14.467 [DEBUG] [Thread-124017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:33:14.467 [DEBUG] [Thread-124017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:33:14.508 [DEBUG] [Thread-124017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:33:14.508 [DEBUG] [Thread-124017] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:33:14.510 [DEBUG] [Thread-124017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:33:14.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:33:14.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:33:14.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:33:14.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:33:14.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:33:14.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:33:14.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.814634 -999.00  +16.30  16.48     37   +1.80 1 1 1 1 1     0    0 14.34 -2.84 ZNESW 16.5 16.5 145.2 24.7 16.6 -25.2 16.6 -24.9 16.3 -23.0 16.6 -24.0
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.814634
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:33:14.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:33:05', tmtdew=16.64, humidity=31.96, cloud=0.0, wind=23.61, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:33:05', seeing=1.05, atlas_timestamp='2025-12-03T19:33:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:33:14.532 [DEBUG] [Thread-124017] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:33:14.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:33:14.626 [DEBUG] [Thread-124020] [transport.py] [_log()] starting thread (client mode): 0xa514bdc0
2025-12-03T21:33:14.626 [DEBUG] [Thread-124020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:33:14.641 [DEBUG] [Thread-124020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:33:14.642 [INFO] [Thread-124020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:33:14.649 [DEBUG] [Thread-124020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:33:14.649 [DEBUG] [Thread-124020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:33:14.649 [DEBUG] [Thread-124020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] client lang: <none>
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] server lang: <none>
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] kex follows: False
2025-12-03T21:33:14.650 [DEBUG] [Thread-124020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] Compression: none
2025-12-03T21:33:14.651 [DEBUG] [Thread-124020] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:33:14.710 [DEBUG] [Thread-124020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:33:14.711 [DEBUG] [Thread-124020] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:33:14.711 [DEBUG] [Thread-124020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:33:14.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:33:14.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:33:14.769 [DEBUG] [Thread-124020] [transport.py] [_log()] userauth is OK
2025-12-03T21:33:14.770 [DEBUG] [Thread-124020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:33:14.770 [DEBUG] [Thread-124020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:33:14.770 [DEBUG] [Thread-124020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:33:14.770 [DEBUG] [Thread-124020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:33:14.792 [INFO] [Thread-124020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:33:14.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:33:14.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:33:15.613 [DEBUG] [Thread-124020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:33:15.613 [DEBUG] [Thread-124020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:33:15.660 [DEBUG] [Thread-124020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:33:15.661 [DEBUG] [Thread-124020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:33:15.669 [DEBUG] [Thread-124020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:33:15.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:33:15.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:33:15.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:33:15.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:33:15.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:33:15.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:33:15.704 [DEBUG] [Thread-124020] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:33:17.513 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:22.683 [DEBUG] [Thread-124022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:37.752 [DEBUG] [Thread-124023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:37.936 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:45.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:33:45.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:33:45.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:33:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 33, 37), 16.6, 31.94, 0.0, 24.17, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:33:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:33:37
2025-12-03T21:33:46.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:33:46.664 [DEBUG] [Thread-124024] [transport.py] [_log()] starting thread (client mode): 0xa51e48e0
2025-12-03T21:33:46.665 [DEBUG] [Thread-124024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:33:46.685 [DEBUG] [Thread-124024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:33:46.686 [INFO] [Thread-124024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:46.690 [DEBUG] [Thread-124024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] client lang: <none>
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] server lang: <none>
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] kex follows: False
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:33:46.691 [DEBUG] [Thread-124024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:33:46.692 [DEBUG] [Thread-124024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:33:46.692 [DEBUG] [Thread-124024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:33:46.692 [DEBUG] [Thread-124024] [transport.py] [_log()] Compression: none
2025-12-03T21:33:46.692 [DEBUG] [Thread-124024] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:33:46.716 [DEBUG] [Thread-124024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:33:46.717 [DEBUG] [Thread-124024] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:33:46.717 [DEBUG] [Thread-124024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:33:46.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:33:46.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:33:46.719 [DEBUG] [Thread-124024] [transport.py] [_log()] userauth is OK
2025-12-03T21:33:46.719 [DEBUG] [Thread-124024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:33:46.719 [DEBUG] [Thread-124024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:33:46.720 [DEBUG] [Thread-124024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:33:46.720 [DEBUG] [Thread-124024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:33:46.740 [INFO] [Thread-124024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:33:46.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:33:47.349 [DEBUG] [Thread-124024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:33:47.349 [DEBUG] [Thread-124024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:33:47.350 [DEBUG] [Thread-124024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:33:47.390 [DEBUG] [Thread-124024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:33:47.390 [DEBUG] [Thread-124024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:33:47.393 [DEBUG] [Thread-124024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:33:47.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:33:47.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:33:47.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:33:47.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:33:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:33:47.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:33:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:33:47.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:33:47.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:33:47.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.814634 -999.00  +16.30  16.48     37   +1.80 1 1 1 1 1     0    0 14.34 -2.84 ZNESW 16.5 16.5 145.2 24.7 16.6 -25.2 16.6 -24.9 16.3 -23.0 16.6 -24.0
2025-12-03T21:33:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:33:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:33:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.814634
2025-12-03T21:33:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:33:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:33:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:33:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:33:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:33:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:33:37', tmtdew=16.6, humidity=31.94, cloud=0.0, wind=24.17, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:33:37', seeing=1.11, atlas_timestamp='2025-12-03T19:33:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:33:47.417 [DEBUG] [Thread-124024] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:33:47.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:33:47.516 [DEBUG] [Thread-124027] [transport.py] [_log()] starting thread (client mode): 0xa27cb4c0
2025-12-03T21:33:47.516 [DEBUG] [Thread-124027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:33:47.531 [DEBUG] [Thread-124027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:33:47.531 [INFO] [Thread-124027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:33:47.538 [DEBUG] [Thread-124027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:33:47.538 [DEBUG] [Thread-124027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:33:47.538 [DEBUG] [Thread-124027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:33:47.538 [DEBUG] [Thread-124027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] client lang: <none>
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] server lang: <none>
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] kex follows: False
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] Compression: none
2025-12-03T21:33:47.539 [DEBUG] [Thread-124027] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:33:47.601 [DEBUG] [Thread-124027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:33:47.602 [DEBUG] [Thread-124027] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:33:47.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:33:47.603 [DEBUG] [Thread-124027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:33:47.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:33:47.659 [DEBUG] [Thread-124027] [transport.py] [_log()] userauth is OK
2025-12-03T21:33:47.659 [DEBUG] [Thread-124027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:33:47.660 [DEBUG] [Thread-124027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:33:47.660 [DEBUG] [Thread-124027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:33:47.660 [DEBUG] [Thread-124027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:33:47.681 [INFO] [Thread-124027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:33:47.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:33:47.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:33:48.500 [DEBUG] [Thread-124027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:33:48.500 [DEBUG] [Thread-124027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:33:48.549 [DEBUG] [Thread-124027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:33:48.549 [DEBUG] [Thread-124027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:33:48.557 [DEBUG] [Thread-124027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:33:48.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:33:48.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:33:48.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:33:48.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:33:48.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:33:48.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:33:48.592 [DEBUG] [Thread-124027] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:33:52.128 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:52.129 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:52.791 [DEBUG] [Thread-124029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:33:58.432 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:07.851 [DEBUG] [Thread-124030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:12.107 [DEBUG] [Thread-124031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:18.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:34:18.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:34:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:34:18.999 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 34, 9), 16.59, 31.94, 0.0, 24.12, 16.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:34:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:34:09
2025-12-03T21:34:19.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:34:19.551 [DEBUG] [Thread-124032] [transport.py] [_log()] starting thread (client mode): 0xa2762a10
2025-12-03T21:34:19.551 [DEBUG] [Thread-124032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:34:19.571 [DEBUG] [Thread-124032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:34:19.571 [INFO] [Thread-124032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:34:19.574 [DEBUG] [Thread-124032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:34:19.574 [DEBUG] [Thread-124032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] client lang: <none>
2025-12-03T21:34:19.575 [DEBUG] [Thread-124032] [transport.py] [_log()] server lang: <none>
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] kex follows: False
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] Compression: none
2025-12-03T21:34:19.576 [DEBUG] [Thread-124032] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:34:19.597 [DEBUG] [Thread-124032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:34:19.597 [DEBUG] [Thread-124032] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:34:19.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:34:19.599 [DEBUG] [Thread-124032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:34:19.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:34:19.601 [DEBUG] [Thread-124032] [transport.py] [_log()] userauth is OK
2025-12-03T21:34:19.601 [DEBUG] [Thread-124032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:34:19.601 [DEBUG] [Thread-124032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:34:19.601 [DEBUG] [Thread-124032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:34:19.602 [DEBUG] [Thread-124032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:34:19.623 [INFO] [Thread-124032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:34:19.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:34:20.261 [DEBUG] [Thread-124032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:34:20.261 [DEBUG] [Thread-124032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:34:20.262 [DEBUG] [Thread-124032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:34:20.303 [DEBUG] [Thread-124032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:34:20.303 [DEBUG] [Thread-124032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:34:20.306 [DEBUG] [Thread-124032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:34:20.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:34:20.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:34:20.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:34:20.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:34:20.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:34:20.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:34:20.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.814981 -999.00  +16.30  18.81     37   +1.80 1 1 1 1 1     0    0 14.30 -2.60 ZNESW 18.8 18.8 143.0 21.8 16.6 -25.4 16.6 -24.8 16.3 -23.1 16.6 -24.0
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:34:20.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.814981
2025-12-03T21:34:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:34:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:34:20.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:34:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:34:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:34:20.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:34:09', tmtdew=16.59, humidity=31.94, cloud=0.0, wind=24.12, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:34:10', seeing=1.07, atlas_timestamp='2025-12-03T19:33:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:34:20.328 [DEBUG] [Thread-124032] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:34:20.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:34:20.432 [DEBUG] [Thread-124035] [transport.py] [_log()] starting thread (client mode): 0xa27c99f0
2025-12-03T21:34:20.432 [DEBUG] [Thread-124035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:34:20.447 [DEBUG] [Thread-124035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:34:20.447 [INFO] [Thread-124035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:34:20.454 [DEBUG] [Thread-124035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] client lang: <none>
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] server lang: <none>
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] kex follows: False
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:34:20.455 [DEBUG] [Thread-124035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:34:20.456 [DEBUG] [Thread-124035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:34:20.456 [DEBUG] [Thread-124035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:34:20.456 [DEBUG] [Thread-124035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:34:20.456 [DEBUG] [Thread-124035] [transport.py] [_log()] Compression: none
2025-12-03T21:34:20.456 [DEBUG] [Thread-124035] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:34:20.517 [DEBUG] [Thread-124035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:34:20.518 [DEBUG] [Thread-124035] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:34:20.518 [DEBUG] [Thread-124035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:34:20.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:34:20.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:34:20.573 [DEBUG] [Thread-124035] [transport.py] [_log()] userauth is OK
2025-12-03T21:34:20.573 [DEBUG] [Thread-124035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:34:20.574 [DEBUG] [Thread-124035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:34:20.574 [DEBUG] [Thread-124035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:34:20.574 [DEBUG] [Thread-124035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:34:20.596 [INFO] [Thread-124035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:34:20.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:34:20.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:34:21.401 [DEBUG] [Thread-124035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:34:21.401 [DEBUG] [Thread-124035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:34:21.452 [DEBUG] [Thread-124035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:34:21.452 [DEBUG] [Thread-124035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:34:21.460 [DEBUG] [Thread-124035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:34:21.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:34:21.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:34:21.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:34:21.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:34:21.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:34:21.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:34:21.493 [DEBUG] [Thread-124035] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:34:22.885 [DEBUG] [Thread-124037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:37.950 [DEBUG] [Thread-124038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:39.497 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:51.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:34:51.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:34:51.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:34:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 34, 41), 16.64, 31.96, 0.0, 22.66, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:34:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:34:41
2025-12-03T21:34:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:34:52.331 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:52.332 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:52.472 [DEBUG] [Thread-124039] [transport.py] [_log()] starting thread (client mode): 0xa2761600
2025-12-03T21:34:52.472 [DEBUG] [Thread-124039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:34:52.491 [DEBUG] [Thread-124039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:34:52.492 [INFO] [Thread-124039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:52.495 [DEBUG] [Thread-124039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] client lang: <none>
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] server lang: <none>
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] kex follows: False
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:34:52.496 [DEBUG] [Thread-124039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:34:52.497 [DEBUG] [Thread-124039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:34:52.497 [DEBUG] [Thread-124039] [transport.py] [_log()] Compression: none
2025-12-03T21:34:52.497 [DEBUG] [Thread-124039] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:34:52.517 [DEBUG] [Thread-124039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:34:52.518 [DEBUG] [Thread-124039] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:34:52.518 [DEBUG] [Thread-124039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:34:52.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:34:52.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:34:52.561 [DEBUG] [Thread-124039] [transport.py] [_log()] userauth is OK
2025-12-03T21:34:52.561 [DEBUG] [Thread-124039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:34:52.561 [DEBUG] [Thread-124039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:34:52.561 [DEBUG] [Thread-124039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:34:52.562 [DEBUG] [Thread-124039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:34:52.581 [INFO] [Thread-124039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:34:52.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:34:52.987 [DEBUG] [Thread-124041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:34:53.203 [DEBUG] [Thread-124039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:34:53.203 [DEBUG] [Thread-124039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:34:53.203 [DEBUG] [Thread-124039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:34:53.244 [DEBUG] [Thread-124039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:34:53.244 [DEBUG] [Thread-124039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:34:53.247 [DEBUG] [Thread-124039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:34:53.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:34:53.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:34:53.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:34:53.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:34:53.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:34:53.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:34:53.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:34:53.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:34:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:34:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.815328 -999.00  +16.30  16.97     37   +1.80 1 1 1 1 1     0    0 14.59 -2.09 ZNESW 17.0 17.0 145.2 24.6 16.6 -25.2 16.5 -24.8 16.4 -23.2 16.6 -24.0
2025-12-03T21:34:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:34:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:34:53.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.815328
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:34:53.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:34:41', tmtdew=16.64, humidity=31.96, cloud=0.0, wind=22.66, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:34:42', seeing=1.14, atlas_timestamp='2025-12-03T19:34:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:34:53.274 [DEBUG] [Thread-124039] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:34:53.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:34:53.376 [DEBUG] [Thread-124043] [transport.py] [_log()] starting thread (client mode): 0xa517d420
2025-12-03T21:34:53.376 [DEBUG] [Thread-124043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:34:53.390 [DEBUG] [Thread-124043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:34:53.391 [INFO] [Thread-124043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:34:53.398 [DEBUG] [Thread-124043] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:34:53.398 [DEBUG] [Thread-124043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] client lang: <none>
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] server lang: <none>
2025-12-03T21:34:53.399 [DEBUG] [Thread-124043] [transport.py] [_log()] kex follows: False
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:34:53.400 [DEBUG] [Thread-124043] [transport.py] [_log()] Compression: none
2025-12-03T21:34:53.401 [DEBUG] [Thread-124043] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:34:53.457 [DEBUG] [Thread-124043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:34:53.457 [DEBUG] [Thread-124043] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:34:53.458 [DEBUG] [Thread-124043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:34:53.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:34:53.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:34:53.514 [DEBUG] [Thread-124043] [transport.py] [_log()] userauth is OK
2025-12-03T21:34:53.514 [DEBUG] [Thread-124043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:34:53.514 [DEBUG] [Thread-124043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:34:53.514 [DEBUG] [Thread-124043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:34:53.514 [DEBUG] [Thread-124043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:34:53.533 [INFO] [Thread-124043] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:34:53.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:34:53.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:34:54.328 [DEBUG] [Thread-124043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:34:54.328 [DEBUG] [Thread-124043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:34:54.376 [DEBUG] [Thread-124043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:34:54.376 [DEBUG] [Thread-124043] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:34:54.385 [DEBUG] [Thread-124043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:34:54.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:34:54.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:34:54.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:34:54.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:34:54.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:34:54.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:34:54.419 [DEBUG] [Thread-124043] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:35:08.021 [DEBUG] [Thread-124045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:12.172 [DEBUG] [Thread-124046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:23.074 [DEBUG] [Thread-124047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:35:24.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:35:24.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:35:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 35, 14), 16.64, 31.97, 0.0, 22.94, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:35:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:35:14
2025-12-03T21:35:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:35:25.393 [DEBUG] [Thread-124048] [transport.py] [_log()] starting thread (client mode): 0xa2751e10
2025-12-03T21:35:25.393 [DEBUG] [Thread-124048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:35:25.413 [DEBUG] [Thread-124048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:35:25.413 [INFO] [Thread-124048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:35:25.416 [DEBUG] [Thread-124048] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] client lang: <none>
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] server lang: <none>
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] kex follows: False
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] Compression: none
2025-12-03T21:35:25.417 [DEBUG] [Thread-124048] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:35:25.434 [DEBUG] [Thread-124048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:35:25.435 [DEBUG] [Thread-124048] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:35:25.435 [DEBUG] [Thread-124048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:35:25.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:35:25.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:35:25.437 [DEBUG] [Thread-124048] [transport.py] [_log()] userauth is OK
2025-12-03T21:35:25.437 [DEBUG] [Thread-124048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:35:25.437 [DEBUG] [Thread-124048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:35:25.437 [DEBUG] [Thread-124048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:35:25.437 [DEBUG] [Thread-124048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:35:25.455 [INFO] [Thread-124048] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:35:25.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:35:26.040 [DEBUG] [Thread-124048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:35:26.040 [DEBUG] [Thread-124048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:35:26.040 [DEBUG] [Thread-124048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:35:26.081 [DEBUG] [Thread-124048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:35:26.081 [DEBUG] [Thread-124048] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:35:26.083 [DEBUG] [Thread-124048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:35:26.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:35:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:35:26.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:35:26.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:35:26.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:35:26.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:35:26.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:35:26.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:35:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:35:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.815676 -999.00  +16.30  18.60     37   +1.80 1 1 1 1 1     0    0 14.61 -1.72 ZNESW 18.6 18.6 142.2 28.2 16.6 -25.2 16.5 -24.7 16.3 -23.1 16.6 -23.8
2025-12-03T21:35:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:35:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:35:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.815676
2025-12-03T21:35:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:35:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:35:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:35:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:35:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:35:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:35:14', tmtdew=16.64, humidity=31.97, cloud=0.0, wind=22.94, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:35:14', seeing=1.18, atlas_timestamp='2025-12-03T19:34:34.406', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, 0.005250000000000199, 0.02925000000000111, -0.0129999999999999, -0.09750000000000014, 0.03575000000000017, -0.03700000000000081, -0.11674999999999969, 0.024499999999999744, -0.015499999999999403, -0.0027500000000006963, -0.031000000000000583, 0.027499999999999858, 0.06625000000000014, -0.06300000000000061, -0.15750000000000064, -0.014749999999999375, 0.007500000000000284, 0.034000000000000696, -0.0012500000000006395, 0.05799999999999983, 0.06674999999999898, -0.06774999999999842, -0.11275000000000013, 0.034999999999998366, 0.031000000000000583, -0.004249999999998977, 0.05950000000000166, 0.120000000000001, 1.7763568394002505e-15, 0.023000000000001464, -0.2259999999999991, -0.06625000000000014], zp_timestamp='2025-12-03T19:31:00')
2025-12-03T21:35:26.105 [DEBUG] [Thread-124048] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:35:26.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:35:26.208 [DEBUG] [Thread-124051] [transport.py] [_log()] starting thread (client mode): 0xa514fbb0
2025-12-03T21:35:26.208 [DEBUG] [Thread-124051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:35:26.223 [DEBUG] [Thread-124051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:35:26.223 [INFO] [Thread-124051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:35:26.230 [DEBUG] [Thread-124051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:35:26.230 [DEBUG] [Thread-124051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:35:26.230 [DEBUG] [Thread-124051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:35:26.230 [DEBUG] [Thread-124051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] client lang: <none>
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] server lang: <none>
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] kex follows: False
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] Compression: none
2025-12-03T21:35:26.231 [DEBUG] [Thread-124051] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:35:26.289 [DEBUG] [Thread-124051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:35:26.290 [DEBUG] [Thread-124051] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:35:26.290 [DEBUG] [Thread-124051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:35:26.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:35:26.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:35:26.345 [DEBUG] [Thread-124051] [transport.py] [_log()] userauth is OK
2025-12-03T21:35:26.345 [DEBUG] [Thread-124051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:35:26.345 [DEBUG] [Thread-124051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:35:26.345 [DEBUG] [Thread-124051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:35:26.345 [DEBUG] [Thread-124051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:35:26.359 [INFO] [Thread-124051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:35:26.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:35:26.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:35:27.204 [DEBUG] [Thread-124051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:35:27.205 [DEBUG] [Thread-124051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:35:27.253 [DEBUG] [Thread-124051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:35:27.253 [DEBUG] [Thread-124051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:35:27.262 [DEBUG] [Thread-124051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:35:27.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:35:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:35:27.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:35:27.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:35:27.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:35:27.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:35:27.302 [DEBUG] [Thread-124051] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:35:38.112 [DEBUG] [Thread-124053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:52.537 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:52.538 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:53.179 [DEBUG] [Thread-124054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:35:57.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:35:57.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:35:57.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:35:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 35, 46), 16.51, 32.52, 0.0, 25.37, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:35:57.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:35:46
2025-12-03T21:35:58.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:35:58.258 [DEBUG] [Thread-124055] [transport.py] [_log()] starting thread (client mode): 0xa271c8e0
2025-12-03T21:35:58.258 [DEBUG] [Thread-124055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:35:58.277 [DEBUG] [Thread-124055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:35:58.278 [INFO] [Thread-124055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] client lang: <none>
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] server lang: <none>
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] kex follows: False
2025-12-03T21:35:58.281 [DEBUG] [Thread-124055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] Compression: none
2025-12-03T21:35:58.282 [DEBUG] [Thread-124055] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:35:58.299 [DEBUG] [Thread-124055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:35:58.300 [DEBUG] [Thread-124055] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:35:58.300 [DEBUG] [Thread-124055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:35:58.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:35:58.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:35:58.302 [DEBUG] [Thread-124055] [transport.py] [_log()] userauth is OK
2025-12-03T21:35:58.302 [DEBUG] [Thread-124055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:35:58.302 [DEBUG] [Thread-124055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:35:58.302 [DEBUG] [Thread-124055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:35:58.302 [DEBUG] [Thread-124055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:35:58.325 [INFO] [Thread-124055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:35:58.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:35:58.934 [DEBUG] [Thread-124055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:35:58.934 [DEBUG] [Thread-124055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:35:58.935 [DEBUG] [Thread-124055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:35:58.976 [DEBUG] [Thread-124055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:35:58.976 [DEBUG] [Thread-124055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:35:58.979 [DEBUG] [Thread-124055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:35:58.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:35:58.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:35:58.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:35:58.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:35:58.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:35:59.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:35:59.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:35:59.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.816022 -999.00  +16.30  19.61     37   +1.80 1 1 1 1 1     0    0 14.70 -1.36 ZNESW 19.6 19.6 144.2 26.7 16.6 -25.2 16.5 -24.7 16.3 -23.2 16.6 -23.9
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.816022
2025-12-03T21:35:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:35:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:35:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:35:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:35:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:35:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:35:46', tmtdew=16.51, humidity=32.52, cloud=0.0, wind=25.37, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:35:46', seeing=1.05, atlas_timestamp='2025-12-03T19:35:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:34:00')
2025-12-03T21:35:59.002 [DEBUG] [Thread-124055] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:35:59.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:35:59.105 [DEBUG] [Thread-124058] [transport.py] [_log()] starting thread (client mode): 0xa27c9120
2025-12-03T21:35:59.105 [DEBUG] [Thread-124058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:35:59.120 [DEBUG] [Thread-124058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:35:59.120 [INFO] [Thread-124058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:35:59.128 [DEBUG] [Thread-124058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:35:59.128 [DEBUG] [Thread-124058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:35:59.128 [DEBUG] [Thread-124058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:35:59.128 [DEBUG] [Thread-124058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:59.128 [DEBUG] [Thread-124058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] client lang: <none>
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] server lang: <none>
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] kex follows: False
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:35:59.129 [DEBUG] [Thread-124058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:35:59.130 [DEBUG] [Thread-124058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:35:59.130 [DEBUG] [Thread-124058] [transport.py] [_log()] Compression: none
2025-12-03T21:35:59.130 [DEBUG] [Thread-124058] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:35:59.185 [DEBUG] [Thread-124058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:35:59.186 [DEBUG] [Thread-124058] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:35:59.186 [DEBUG] [Thread-124058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:35:59.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:35:59.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:35:59.241 [DEBUG] [Thread-124058] [transport.py] [_log()] userauth is OK
2025-12-03T21:35:59.242 [DEBUG] [Thread-124058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:35:59.242 [DEBUG] [Thread-124058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:35:59.242 [DEBUG] [Thread-124058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:35:59.242 [DEBUG] [Thread-124058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:35:59.261 [INFO] [Thread-124058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:35:59.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:35:59.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:36:00.092 [DEBUG] [Thread-124058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:36:00.092 [DEBUG] [Thread-124058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:36:00.140 [DEBUG] [Thread-124058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:36:00.140 [DEBUG] [Thread-124058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:36:00.149 [DEBUG] [Thread-124058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:36:00.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:36:00.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:36:00.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:36:00.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:36:00.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:36:00.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:36:00.184 [DEBUG] [Thread-124058] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:36:08.219 [DEBUG] [Thread-124060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:12.239 [DEBUG] [Thread-124061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:23.293 [DEBUG] [Thread-124062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:30.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:36:30.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:36:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:36:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 36, 18), 16.49, 32.59, 0.0, 24.38, 16.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:36:30.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:36:18
2025-12-03T21:36:30.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:36:31.143 [DEBUG] [Thread-124063] [transport.py] [_log()] starting thread (client mode): 0xa51d31c0
2025-12-03T21:36:31.143 [DEBUG] [Thread-124063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:36:31.159 [DEBUG] [Thread-124063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:36:31.159 [INFO] [Thread-124063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:36:31.162 [DEBUG] [Thread-124063] [transport.py] [_log()] client lang: <none>
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] server lang: <none>
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] kex follows: False
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] Compression: none
2025-12-03T21:36:31.163 [DEBUG] [Thread-124063] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:36:31.180 [DEBUG] [Thread-124063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:36:31.180 [DEBUG] [Thread-124063] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:36:31.181 [DEBUG] [Thread-124063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:36:31.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:36:31.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:36:31.182 [DEBUG] [Thread-124063] [transport.py] [_log()] userauth is OK
2025-12-03T21:36:31.183 [DEBUG] [Thread-124063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:36:31.183 [DEBUG] [Thread-124063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:36:31.183 [DEBUG] [Thread-124063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:36:31.183 [DEBUG] [Thread-124063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:36:31.203 [INFO] [Thread-124063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:36:31.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:36:31.937 [DEBUG] [Thread-124063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:36:31.938 [DEBUG] [Thread-124063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:36:31.938 [DEBUG] [Thread-124063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:36:31.979 [DEBUG] [Thread-124063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:36:31.979 [DEBUG] [Thread-124063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:36:31.982 [DEBUG] [Thread-124063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:36:31.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:36:31.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:36:31.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:36:31.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:36:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:36:32.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:36:32.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:36:32.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:36:32.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:36:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.816370 -999.00  +16.30  17.60     37   +1.80 1 1 1 1 1     0    0 14.44 -0.84 ZNESW 17.6 17.6 141.2 23.3 16.6 -25.3 16.5 -24.8 16.3 -23.2 16.5 -24.1
2025-12-03T21:36:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:36:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:36:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.816370
2025-12-03T21:36:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:36:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:36:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:36:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:36:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:36:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:36:18', tmtdew=16.49, humidity=32.59, cloud=0.0, wind=24.38, temperature=16.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:36:18', seeing=1.05, atlas_timestamp='2025-12-03T19:35:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:34:00')
2025-12-03T21:36:32.006 [DEBUG] [Thread-124063] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:36:32.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:36:32.109 [DEBUG] [Thread-124066] [transport.py] [_log()] starting thread (client mode): 0xa514b0d0
2025-12-03T21:36:32.110 [DEBUG] [Thread-124066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:36:32.124 [DEBUG] [Thread-124066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:36:32.125 [INFO] [Thread-124066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:36:32.132 [DEBUG] [Thread-124066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:36:32.133 [DEBUG] [Thread-124066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] client lang: <none>
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] server lang: <none>
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] kex follows: False
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:36:32.134 [DEBUG] [Thread-124066] [transport.py] [_log()] Compression: none
2025-12-03T21:36:32.135 [DEBUG] [Thread-124066] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:36:32.193 [DEBUG] [Thread-124066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:36:32.193 [DEBUG] [Thread-124066] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:36:32.194 [DEBUG] [Thread-124066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:36:32.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:36:32.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:36:32.250 [DEBUG] [Thread-124066] [transport.py] [_log()] userauth is OK
2025-12-03T21:36:32.250 [DEBUG] [Thread-124066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:36:32.250 [DEBUG] [Thread-124066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:36:32.250 [DEBUG] [Thread-124066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:36:32.250 [DEBUG] [Thread-124066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:36:32.272 [INFO] [Thread-124066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:36:32.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:36:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:36:33.098 [DEBUG] [Thread-124066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:36:33.098 [DEBUG] [Thread-124066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:36:33.146 [DEBUG] [Thread-124066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:36:33.146 [DEBUG] [Thread-124066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:36:33.155 [DEBUG] [Thread-124066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:36:33.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:36:33.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:36:33.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:36:33.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:36:33.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:36:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:36:33.190 [DEBUG] [Thread-124066] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:36:38.334 [DEBUG] [Thread-124068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:52.736 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:52.737 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:36:53.391 [DEBUG] [Thread-124069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:37:03.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:37:03.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:37:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 36, 50), 16.57, 32.52, 0.0, 24.93, 16.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:37:03.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:36:50
2025-12-03T21:37:04.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:37:04.201 [DEBUG] [Thread-124070] [transport.py] [_log()] starting thread (client mode): 0xa271ddb0
2025-12-03T21:37:04.201 [DEBUG] [Thread-124070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:37:04.220 [DEBUG] [Thread-124070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:37:04.220 [INFO] [Thread-124070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:37:04.223 [DEBUG] [Thread-124070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] client lang: <none>
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] server lang: <none>
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] kex follows: False
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] Compression: none
2025-12-03T21:37:04.224 [DEBUG] [Thread-124070] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:37:04.238 [DEBUG] [Thread-124070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:37:04.238 [DEBUG] [Thread-124070] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:37:04.239 [DEBUG] [Thread-124070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:37:04.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:37:04.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:37:04.239 [DEBUG] [Thread-124070] [transport.py] [_log()] userauth is OK
2025-12-03T21:37:04.239 [DEBUG] [Thread-124070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:37:04.239 [DEBUG] [Thread-124070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:37:04.239 [DEBUG] [Thread-124070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:37:04.240 [DEBUG] [Thread-124070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:37:04.266 [INFO] [Thread-124070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:37:04.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:37:04.900 [DEBUG] [Thread-124070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:37:04.900 [DEBUG] [Thread-124070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:37:04.900 [DEBUG] [Thread-124070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:37:04.941 [DEBUG] [Thread-124070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:37:04.941 [DEBUG] [Thread-124070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:37:04.943 [DEBUG] [Thread-124070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:37:04.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:37:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:37:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:37:04.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:37:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:37:04.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:37:04.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:37:04.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.817064 -999.00  +16.20  19.71     37   +1.80 1 1 1 1 1     0    0 14.25 -0.31 ZNESW 19.7 19.7 145.8 22.4 16.6 -25.5 16.5 -24.8 16.3 -23.2 16.6 -23.9
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.817064
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:37:04.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:36:50', tmtdew=16.57, humidity=32.52, cloud=0.0, wind=24.93, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:36:51', seeing=1.11, atlas_timestamp='2025-12-03T19:36:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:34:00')
2025-12-03T21:37:04.962 [DEBUG] [Thread-124070] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:37:05.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:37:05.058 [DEBUG] [Thread-124073] [transport.py] [_log()] starting thread (client mode): 0xa514c250
2025-12-03T21:37:05.058 [DEBUG] [Thread-124073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:37:05.074 [DEBUG] [Thread-124073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:37:05.074 [INFO] [Thread-124073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:05.081 [DEBUG] [Thread-124073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] client lang: <none>
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] server lang: <none>
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] kex follows: False
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] Compression: none
2025-12-03T21:37:05.082 [DEBUG] [Thread-124073] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:37:05.141 [DEBUG] [Thread-124073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:37:05.141 [DEBUG] [Thread-124073] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:37:05.141 [DEBUG] [Thread-124073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:37:05.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:37:05.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:37:05.198 [DEBUG] [Thread-124073] [transport.py] [_log()] userauth is OK
2025-12-03T21:37:05.198 [DEBUG] [Thread-124073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:37:05.198 [DEBUG] [Thread-124073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:37:05.198 [DEBUG] [Thread-124073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:37:05.198 [DEBUG] [Thread-124073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:37:05.211 [INFO] [Thread-124073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:37:05.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:37:05.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:37:06.050 [DEBUG] [Thread-124073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:37:06.050 [DEBUG] [Thread-124073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:37:06.099 [DEBUG] [Thread-124073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:37:06.099 [DEBUG] [Thread-124073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:37:06.107 [DEBUG] [Thread-124073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:37:06.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:37:06.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:37:06.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:37:06.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:37:06.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:37:06.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:37:06.147 [DEBUG] [Thread-124073] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:37:08.425 [DEBUG] [Thread-124075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:12.300 [DEBUG] [Thread-124076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:23.484 [DEBUG] [Thread-124077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:37:36.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:37:36.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:37:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 37, 23), 16.59, 32.47, 0.0, 22.37, 16.34, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:37:36.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:37:23
2025-12-03T21:37:36.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:37:37.134 [DEBUG] [Thread-124078] [transport.py] [_log()] starting thread (client mode): 0xa2778670
2025-12-03T21:37:37.134 [DEBUG] [Thread-124078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:37:37.154 [DEBUG] [Thread-124078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:37:37.154 [INFO] [Thread-124078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] client lang: <none>
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] server lang: <none>
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] kex follows: False
2025-12-03T21:37:37.157 [DEBUG] [Thread-124078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] Compression: none
2025-12-03T21:37:37.158 [DEBUG] [Thread-124078] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:37:37.175 [DEBUG] [Thread-124078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:37:37.176 [DEBUG] [Thread-124078] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:37:37.176 [DEBUG] [Thread-124078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:37:37.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:37:37.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:37:37.178 [DEBUG] [Thread-124078] [transport.py] [_log()] userauth is OK
2025-12-03T21:37:37.178 [DEBUG] [Thread-124078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:37:37.178 [DEBUG] [Thread-124078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:37:37.178 [DEBUG] [Thread-124078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:37:37.178 [DEBUG] [Thread-124078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:37:37.196 [INFO] [Thread-124078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:37:37.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:37:37.959 [DEBUG] [Thread-124078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:37:37.960 [DEBUG] [Thread-124078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:37:37.960 [DEBUG] [Thread-124078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:37:38.001 [DEBUG] [Thread-124078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:37:38.001 [DEBUG] [Thread-124078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:37:38.004 [DEBUG] [Thread-124078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:37:38.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:37:38.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:37:38.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:37:38.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:37:38.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:37:38.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:37:38.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.817412 -999.00  +16.20  18.09     37   +1.80 1 1 1 1 1     0    0 14.53 -0.08 ZNESW 18.1 18.1 148.2 22.8 16.6 -25.4 16.5 -24.9 16.2 -23.2 16.5 -24.2
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:37:38.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.817412
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:37:38.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:37:23', tmtdew=16.59, humidity=32.47, cloud=0.0, wind=22.37, temperature=16.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:37:23', seeing=1.37, atlas_timestamp='2025-12-03T19:37:04.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:34:00')
2025-12-03T21:37:38.029 [DEBUG] [Thread-124078] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:37:38.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:37:38.130 [DEBUG] [Thread-124081] [transport.py] [_log()] starting thread (client mode): 0xa27cb6d0
2025-12-03T21:37:38.130 [DEBUG] [Thread-124081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:37:38.145 [DEBUG] [Thread-124081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:37:38.145 [INFO] [Thread-124081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] client lang: <none>
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] server lang: <none>
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] kex follows: False
2025-12-03T21:37:38.153 [DEBUG] [Thread-124081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] Compression: none
2025-12-03T21:37:38.154 [DEBUG] [Thread-124081] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:37:38.209 [DEBUG] [Thread-124081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:37:38.210 [DEBUG] [Thread-124081] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:37:38.210 [DEBUG] [Thread-124081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:37:38.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:37:38.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:37:38.266 [DEBUG] [Thread-124081] [transport.py] [_log()] userauth is OK
2025-12-03T21:37:38.266 [DEBUG] [Thread-124081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:37:38.266 [DEBUG] [Thread-124081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:37:38.267 [DEBUG] [Thread-124081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:37:38.267 [DEBUG] [Thread-124081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:37:38.286 [INFO] [Thread-124081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:37:38.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:37:38.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:37:38.519 [DEBUG] [Thread-124083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:39.100 [DEBUG] [Thread-124081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:37:39.100 [DEBUG] [Thread-124081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:37:39.148 [DEBUG] [Thread-124081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:37:39.148 [DEBUG] [Thread-124081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:37:39.157 [DEBUG] [Thread-124081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:37:39.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:37:39.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:37:39.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:37:39.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:37:39.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:37:39.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:37:39.198 [DEBUG] [Thread-124081] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:37:52.939 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:52.940 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:37:53.585 [DEBUG] [Thread-124084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:08.621 [DEBUG] [Thread-124085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:09.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:38:09.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:38:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:38:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 37, 55), 16.52, 32.51, 0.0, 23.41, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:38:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:37:55
2025-12-03T21:38:10.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:38:10.170 [DEBUG] [Thread-124086] [transport.py] [_log()] starting thread (client mode): 0xa514b5e0
2025-12-03T21:38:10.170 [DEBUG] [Thread-124086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:38:10.192 [DEBUG] [Thread-124086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:38:10.193 [INFO] [Thread-124086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:10.196 [DEBUG] [Thread-124086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] client lang: <none>
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] server lang: <none>
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] kex follows: False
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:38:10.197 [DEBUG] [Thread-124086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:38:10.198 [DEBUG] [Thread-124086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:38:10.198 [DEBUG] [Thread-124086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:38:10.198 [DEBUG] [Thread-124086] [transport.py] [_log()] Compression: none
2025-12-03T21:38:10.198 [DEBUG] [Thread-124086] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:38:10.218 [DEBUG] [Thread-124086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:38:10.218 [DEBUG] [Thread-124086] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:38:10.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:38:10.219 [DEBUG] [Thread-124086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:38:10.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:38:10.221 [DEBUG] [Thread-124086] [transport.py] [_log()] userauth is OK
2025-12-03T21:38:10.221 [DEBUG] [Thread-124086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:38:10.221 [DEBUG] [Thread-124086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:38:10.221 [DEBUG] [Thread-124086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:38:10.222 [DEBUG] [Thread-124086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:38:10.256 [INFO] [Thread-124086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:38:10.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:38:10.886 [DEBUG] [Thread-124086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:38:10.886 [DEBUG] [Thread-124086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:38:10.886 [DEBUG] [Thread-124086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:38:10.927 [DEBUG] [Thread-124086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:38:10.927 [DEBUG] [Thread-124086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:38:10.930 [DEBUG] [Thread-124086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:38:10.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:38:10.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:38:10.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:38:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:38:10.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:38:10.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:38:10.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.817759 -999.00  +16.20  15.60     37   +1.80 1 1 1 1 1     0    0 14.66 -0.08 ZNESW 15.6 15.6 141.8 20.2 16.6 -25.3 16.5 -24.7 16.2 -23.0 16.5 -24.1
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:38:10.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.817759
2025-12-03T21:38:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:38:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:38:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:38:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:38:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:38:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:37:55', tmtdew=16.52, humidity=32.51, cloud=0.0, wind=23.41, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:37:55', seeing=1.39, atlas_timestamp='2025-12-03T19:37:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:34:00')
2025-12-03T21:38:10.954 [DEBUG] [Thread-124086] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:38:11.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:38:11.057 [DEBUG] [Thread-124089] [transport.py] [_log()] starting thread (client mode): 0xa51d2bf0
2025-12-03T21:38:11.057 [DEBUG] [Thread-124089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:38:11.071 [DEBUG] [Thread-124089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:38:11.071 [INFO] [Thread-124089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:38:11.079 [DEBUG] [Thread-124089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:38:11.079 [DEBUG] [Thread-124089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:38:11.079 [DEBUG] [Thread-124089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:38:11.079 [DEBUG] [Thread-124089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:11.079 [DEBUG] [Thread-124089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] client lang: <none>
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] server lang: <none>
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] kex follows: False
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:38:11.080 [DEBUG] [Thread-124089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:38:11.081 [DEBUG] [Thread-124089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:38:11.081 [DEBUG] [Thread-124089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:38:11.081 [DEBUG] [Thread-124089] [transport.py] [_log()] Compression: none
2025-12-03T21:38:11.081 [DEBUG] [Thread-124089] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:38:11.138 [DEBUG] [Thread-124089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:38:11.138 [DEBUG] [Thread-124089] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:38:11.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:38:11.139 [DEBUG] [Thread-124089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:38:11.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:38:11.194 [DEBUG] [Thread-124089] [transport.py] [_log()] userauth is OK
2025-12-03T21:38:11.194 [DEBUG] [Thread-124089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:38:11.194 [DEBUG] [Thread-124089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:38:11.194 [DEBUG] [Thread-124089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:38:11.194 [DEBUG] [Thread-124089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:38:11.213 [INFO] [Thread-124089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:38:11.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:38:11.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:38:12.053 [DEBUG] [Thread-124089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:38:12.053 [DEBUG] [Thread-124089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:38:12.100 [DEBUG] [Thread-124089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:38:12.101 [DEBUG] [Thread-124089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:38:12.109 [DEBUG] [Thread-124089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:38:12.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:38:12.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:38:12.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:38:12.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:38:12.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:38:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:38:12.143 [DEBUG] [Thread-124089] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:38:12.359 [DEBUG] [Thread-124091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:23.656 [DEBUG] [Thread-124092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:38.709 [DEBUG] [Thread-124093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:42.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:38:42.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:38:42.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:38:42.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 38, 27), 16.5, 32.56, 0.0, 23.4, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:38:42.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:38:27
2025-12-03T21:38:42.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:38:43.138 [DEBUG] [Thread-124094] [transport.py] [_log()] starting thread (client mode): 0xa271e230
2025-12-03T21:38:43.138 [DEBUG] [Thread-124094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:38:43.158 [DEBUG] [Thread-124094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:38:43.158 [INFO] [Thread-124094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:38:43.161 [DEBUG] [Thread-124094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:38:43.161 [DEBUG] [Thread-124094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:38:43.161 [DEBUG] [Thread-124094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:38:43.161 [DEBUG] [Thread-124094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:43.161 [DEBUG] [Thread-124094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] client lang: <none>
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] server lang: <none>
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] kex follows: False
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:38:43.162 [DEBUG] [Thread-124094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:38:43.163 [DEBUG] [Thread-124094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:38:43.163 [DEBUG] [Thread-124094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:38:43.163 [DEBUG] [Thread-124094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:38:43.163 [DEBUG] [Thread-124094] [transport.py] [_log()] Compression: none
2025-12-03T21:38:43.163 [DEBUG] [Thread-124094] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:38:43.180 [DEBUG] [Thread-124094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:38:43.181 [DEBUG] [Thread-124094] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:38:43.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:38:43.182 [DEBUG] [Thread-124094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:38:43.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:38:43.184 [DEBUG] [Thread-124094] [transport.py] [_log()] userauth is OK
2025-12-03T21:38:43.184 [DEBUG] [Thread-124094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:38:43.184 [DEBUG] [Thread-124094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:38:43.184 [DEBUG] [Thread-124094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:38:43.184 [DEBUG] [Thread-124094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:38:43.203 [INFO] [Thread-124094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:38:43.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:38:43.997 [DEBUG] [Thread-124094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:38:43.998 [DEBUG] [Thread-124094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:38:43.998 [DEBUG] [Thread-124094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:38:44.039 [DEBUG] [Thread-124094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:38:44.039 [DEBUG] [Thread-124094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:38:44.042 [DEBUG] [Thread-124094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:38:44.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:38:44.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:38:44.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:38:44.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:38:44.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:38:44.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:38:44.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:38:44.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.818106 -999.00  +16.20  20.10     37   +1.80 1 1 1 1 1     0    0 14.58 -0.05 ZNESW 20.1 20.1 145.6 27.1 16.6 -25.4 16.5 -24.7 16.2 -23.1 16.5 -24.0
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.818106
2025-12-03T21:38:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:38:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:38:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:38:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:38:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:38:44.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:38:27', tmtdew=16.5, humidity=32.56, cloud=0.0, wind=23.4, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:38:27', seeing=1.21, atlas_timestamp='2025-12-03T19:38:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:38:44.066 [DEBUG] [Thread-124094] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:38:44.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:38:44.170 [DEBUG] [Thread-124097] [transport.py] [_log()] starting thread (client mode): 0xa271d6c0
2025-12-03T21:38:44.170 [DEBUG] [Thread-124097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:38:44.188 [DEBUG] [Thread-124097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:38:44.188 [INFO] [Thread-124097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:38:44.196 [DEBUG] [Thread-124097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:38:44.196 [DEBUG] [Thread-124097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:38:44.196 [DEBUG] [Thread-124097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:38:44.196 [DEBUG] [Thread-124097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:44.196 [DEBUG] [Thread-124097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] client lang: <none>
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] server lang: <none>
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] kex follows: False
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:38:44.197 [DEBUG] [Thread-124097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:38:44.198 [DEBUG] [Thread-124097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:38:44.198 [DEBUG] [Thread-124097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:38:44.198 [DEBUG] [Thread-124097] [transport.py] [_log()] Compression: none
2025-12-03T21:38:44.198 [DEBUG] [Thread-124097] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:38:44.254 [DEBUG] [Thread-124097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:38:44.254 [DEBUG] [Thread-124097] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:38:44.255 [DEBUG] [Thread-124097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:38:44.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:38:44.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:38:44.310 [DEBUG] [Thread-124097] [transport.py] [_log()] userauth is OK
2025-12-03T21:38:44.310 [DEBUG] [Thread-124097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:38:44.310 [DEBUG] [Thread-124097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:38:44.311 [DEBUG] [Thread-124097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:38:44.311 [DEBUG] [Thread-124097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:38:44.328 [INFO] [Thread-124097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:38:44.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:38:44.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:38:45.131 [DEBUG] [Thread-124097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:38:45.131 [DEBUG] [Thread-124097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:38:45.180 [DEBUG] [Thread-124097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:38:45.180 [DEBUG] [Thread-124097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:38:45.188 [DEBUG] [Thread-124097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:38:45.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:38:45.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:38:45.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:38:45.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:38:45.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:38:45.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:38:45.223 [DEBUG] [Thread-124097] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:38:53.139 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:53.140 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:38:53.746 [DEBUG] [Thread-124099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:08.799 [DEBUG] [Thread-124100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:10.375 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:12.428 [DEBUG] [Thread-124101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:13.535 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:39:15.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:39:15.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:39:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 38, 59), 16.54, 32.57, 0.0, 23.77, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:39:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:38:59
2025-12-03T21:39:16.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:39:16.171 [DEBUG] [Thread-124102] [transport.py] [_log()] starting thread (client mode): 0xa271df90
2025-12-03T21:39:16.171 [DEBUG] [Thread-124102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:39:16.193 [DEBUG] [Thread-124102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:39:16.193 [INFO] [Thread-124102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:39:16.196 [DEBUG] [Thread-124102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:39:16.196 [DEBUG] [Thread-124102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:39:16.196 [DEBUG] [Thread-124102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] client lang: <none>
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] server lang: <none>
2025-12-03T21:39:16.197 [DEBUG] [Thread-124102] [transport.py] [_log()] kex follows: False
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] Compression: none
2025-12-03T21:39:16.198 [DEBUG] [Thread-124102] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:39:16.218 [DEBUG] [Thread-124102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:39:16.218 [DEBUG] [Thread-124102] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:39:16.219 [DEBUG] [Thread-124102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:39:16.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:39:16.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:39:16.220 [DEBUG] [Thread-124102] [transport.py] [_log()] userauth is OK
2025-12-03T21:39:16.220 [DEBUG] [Thread-124102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:39:16.221 [DEBUG] [Thread-124102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:39:16.221 [DEBUG] [Thread-124102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:39:16.221 [DEBUG] [Thread-124102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:39:16.244 [INFO] [Thread-124102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:39:16.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:39:16.880 [DEBUG] [Thread-124102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:39:16.881 [DEBUG] [Thread-124102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:39:16.881 [DEBUG] [Thread-124102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:39:16.922 [DEBUG] [Thread-124102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:39:16.922 [DEBUG] [Thread-124102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:39:16.925 [DEBUG] [Thread-124102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:39:16.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:39:16.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:39:16.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:39:16.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:39:16.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:39:16.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:39:16.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:39:16.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.818453 -999.00  +16.20  17.23     37   +1.80 1 1 1 1 1     0    0 14.57 -0.25 ZNESW 17.2 17.2 137.0 24.9 16.6 -25.3 16.4 -24.7 16.3 -23.2 16.5 -24.1
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.818453
2025-12-03T21:39:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:39:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:39:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:39:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:39:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:39:16.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:38:59', tmtdew=16.54, humidity=32.57, cloud=0.0, wind=23.77, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:38:59', seeing=1.49, atlas_timestamp='2025-12-03T19:38:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:39:16.951 [DEBUG] [Thread-124102] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:39:17.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:39:17.055 [DEBUG] [Thread-124105] [transport.py] [_log()] starting thread (client mode): 0xa27cab90
2025-12-03T21:39:17.055 [DEBUG] [Thread-124105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:39:17.070 [DEBUG] [Thread-124105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:39:17.070 [INFO] [Thread-124105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:17.077 [DEBUG] [Thread-124105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] client lang: <none>
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] server lang: <none>
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] kex follows: False
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] Compression: none
2025-12-03T21:39:17.078 [DEBUG] [Thread-124105] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:39:17.133 [DEBUG] [Thread-124105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:39:17.134 [DEBUG] [Thread-124105] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:39:17.134 [DEBUG] [Thread-124105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:39:17.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:39:17.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:39:17.190 [DEBUG] [Thread-124105] [transport.py] [_log()] userauth is OK
2025-12-03T21:39:17.190 [DEBUG] [Thread-124105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:39:17.190 [DEBUG] [Thread-124105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:39:17.190 [DEBUG] [Thread-124105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:39:17.190 [DEBUG] [Thread-124105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:39:17.213 [INFO] [Thread-124105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:39:17.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:39:17.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:39:18.018 [DEBUG] [Thread-124105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:39:18.018 [DEBUG] [Thread-124105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:39:18.066 [DEBUG] [Thread-124105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:39:18.066 [DEBUG] [Thread-124105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:39:18.074 [DEBUG] [Thread-124105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:39:18.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:39:18.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:39:18.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:39:18.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:39:18.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:39:18.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:39:18.108 [DEBUG] [Thread-124105] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:39:18.634 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:23.834 [DEBUG] [Thread-124107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:24.024 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:38.891 [DEBUG] [Thread-124108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:43.466 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:47.842 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:39:48.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:39:48.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:39:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 39, 31), 16.49, 32.69, 0.0, 23.36, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:39:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:39:31
2025-12-03T21:39:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:39:49.065 [DEBUG] [Thread-124109] [transport.py] [_log()] starting thread (client mode): 0xa517d8d0
2025-12-03T21:39:49.065 [DEBUG] [Thread-124109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:39:49.085 [DEBUG] [Thread-124109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:39:49.085 [INFO] [Thread-124109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:39:49.088 [DEBUG] [Thread-124109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:39:49.088 [DEBUG] [Thread-124109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:39:49.088 [DEBUG] [Thread-124109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] client lang: <none>
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] server lang: <none>
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] kex follows: False
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] Compression: none
2025-12-03T21:39:49.089 [DEBUG] [Thread-124109] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:39:49.105 [DEBUG] [Thread-124109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:39:49.106 [DEBUG] [Thread-124109] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:39:49.106 [DEBUG] [Thread-124109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:39:49.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:39:49.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:39:49.108 [DEBUG] [Thread-124109] [transport.py] [_log()] userauth is OK
2025-12-03T21:39:49.108 [DEBUG] [Thread-124109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:39:49.108 [DEBUG] [Thread-124109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:39:49.108 [DEBUG] [Thread-124109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:39:49.108 [DEBUG] [Thread-124109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:39:49.131 [INFO] [Thread-124109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:39:49.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:39:50.129 [DEBUG] [Thread-124109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:39:50.129 [DEBUG] [Thread-124109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:39:50.129 [DEBUG] [Thread-124109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:39:50.170 [DEBUG] [Thread-124109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:39:50.170 [DEBUG] [Thread-124109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:39:50.173 [DEBUG] [Thread-124109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:39:50.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:39:50.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:39:50.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:39:50.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:39:50.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:39:50.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:39:50.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.818800 -999.00  +16.20  18.40     37   +1.80 1 1 1 1 1     0    0 14.57 -0.65 ZNESW 18.4 18.4 146.8 23.3 16.6 -25.4 16.5 -24.8 16.3 -23.2 16.5 -24.1
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:39:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.818800
2025-12-03T21:39:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:39:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:39:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:39:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:39:50.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:39:50.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:39:31', tmtdew=16.49, humidity=32.69, cloud=0.0, wind=23.36, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:39:31', seeing=1.41, atlas_timestamp='2025-12-03T19:39:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:39:50.197 [DEBUG] [Thread-124109] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:39:50.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:39:50.292 [DEBUG] [Thread-124112] [transport.py] [_log()] starting thread (client mode): 0xa517f340
2025-12-03T21:39:50.292 [DEBUG] [Thread-124112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:39:50.307 [DEBUG] [Thread-124112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:39:50.307 [INFO] [Thread-124112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:39:50.314 [DEBUG] [Thread-124112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:39:50.315 [DEBUG] [Thread-124112] [transport.py] [_log()] client lang: <none>
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] server lang: <none>
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] kex follows: False
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] Compression: none
2025-12-03T21:39:50.316 [DEBUG] [Thread-124112] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:39:50.374 [DEBUG] [Thread-124112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:39:50.375 [DEBUG] [Thread-124112] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:39:50.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:39:50.376 [DEBUG] [Thread-124112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:39:50.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:39:50.430 [DEBUG] [Thread-124112] [transport.py] [_log()] userauth is OK
2025-12-03T21:39:50.430 [DEBUG] [Thread-124112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:39:50.430 [DEBUG] [Thread-124112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:39:50.430 [DEBUG] [Thread-124112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:39:50.430 [DEBUG] [Thread-124112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:39:50.444 [INFO] [Thread-124112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:39:50.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:39:50.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:39:51.270 [DEBUG] [Thread-124112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:39:51.270 [DEBUG] [Thread-124112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:39:51.318 [DEBUG] [Thread-124112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:39:51.319 [DEBUG] [Thread-124112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:39:51.327 [DEBUG] [Thread-124112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:39:51.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:39:51.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:39:51.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:39:51.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:39:51.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:39:51.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:39:51.358 [DEBUG] [Thread-124112] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:39:53.364 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:53.365 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:53.919 [DEBUG] [Thread-124114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:39:57.215 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:01.606 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:08.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:08.999 [DEBUG] [Thread-124115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:12.500 [DEBUG] [Thread-124116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:12.701 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:21.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:40:21.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:40:21.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:40:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 40, 3), 16.49, 32.69, 0.0, 23.01, 16.29, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:40:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:40:03
2025-12-03T21:40:22.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:40:22.322 [DEBUG] [Thread-124117] [transport.py] [_log()] starting thread (client mode): 0xa51e4c40
2025-12-03T21:40:22.322 [DEBUG] [Thread-124117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:40:22.343 [DEBUG] [Thread-124117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:40:22.343 [INFO] [Thread-124117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] client lang: <none>
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] server lang: <none>
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] kex follows: False
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:40:22.346 [DEBUG] [Thread-124117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:40:22.347 [DEBUG] [Thread-124117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:40:22.347 [DEBUG] [Thread-124117] [transport.py] [_log()] Compression: none
2025-12-03T21:40:22.347 [DEBUG] [Thread-124117] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:40:22.362 [DEBUG] [Thread-124117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:40:22.363 [DEBUG] [Thread-124117] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:40:22.363 [DEBUG] [Thread-124117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:40:22.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:40:22.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:40:22.365 [DEBUG] [Thread-124117] [transport.py] [_log()] userauth is OK
2025-12-03T21:40:22.366 [DEBUG] [Thread-124117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:40:22.366 [DEBUG] [Thread-124117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:40:22.366 [DEBUG] [Thread-124117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:40:22.366 [DEBUG] [Thread-124117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:40:22.388 [INFO] [Thread-124117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:40:22.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:40:22.978 [DEBUG] [Thread-124117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:40:22.979 [DEBUG] [Thread-124117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:40:22.979 [DEBUG] [Thread-124117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:40:23.020 [DEBUG] [Thread-124117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:40:23.020 [DEBUG] [Thread-124117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:40:23.023 [DEBUG] [Thread-124117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:40:23.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:40:23.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:40:23.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:40:23.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:40:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:40:23.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:40:23.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:40:23.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:40:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:40:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.819495 -999.00  +16.20  15.88     37   +1.80 1 1 1 1 1     0    0 14.55 -1.29 ZNESW 15.9 15.9 143.8 24.8 16.5 -25.3 16.5 -24.8 16.2 -23.1 16.4 -23.9
2025-12-03T21:40:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:40:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:40:23.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.819495
2025-12-03T21:40:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:40:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:40:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:40:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:40:23.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:40:23.047 [DEBUG] [Thread-124117] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:40:23.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:40:03', tmtdew=16.49, humidity=32.69, cloud=0.0, wind=23.01, temperature=16.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:40:03', seeing=1.41, atlas_timestamp='2025-12-03T19:40:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:40:23.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:40:23.153 [DEBUG] [Thread-124120] [transport.py] [_log()] starting thread (client mode): 0xa271ed70
2025-12-03T21:40:23.153 [DEBUG] [Thread-124120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:40:23.173 [DEBUG] [Thread-124120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:40:23.173 [INFO] [Thread-124120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:23.181 [DEBUG] [Thread-124120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] client lang: <none>
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] server lang: <none>
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] kex follows: False
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:40:23.182 [DEBUG] [Thread-124120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:40:23.183 [DEBUG] [Thread-124120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:40:23.183 [DEBUG] [Thread-124120] [transport.py] [_log()] Compression: none
2025-12-03T21:40:23.183 [DEBUG] [Thread-124120] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:40:23.239 [DEBUG] [Thread-124120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:40:23.239 [DEBUG] [Thread-124120] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:40:23.240 [DEBUG] [Thread-124120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:40:23.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:40:23.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:40:23.294 [DEBUG] [Thread-124120] [transport.py] [_log()] userauth is OK
2025-12-03T21:40:23.295 [DEBUG] [Thread-124120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:40:23.295 [DEBUG] [Thread-124120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:40:23.295 [DEBUG] [Thread-124120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:40:23.295 [DEBUG] [Thread-124120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:40:23.314 [INFO] [Thread-124120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:40:23.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:40:23.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:40:24.034 [DEBUG] [Thread-124122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:24.160 [DEBUG] [Thread-124120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:40:24.160 [DEBUG] [Thread-124120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:40:24.208 [DEBUG] [Thread-124120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:40:24.208 [DEBUG] [Thread-124120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:40:24.217 [DEBUG] [Thread-124120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:40:24.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:40:24.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:40:24.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:40:24.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:40:24.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:40:24.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:40:24.251 [DEBUG] [Thread-124120] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:40:39.093 [DEBUG] [Thread-124123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:53.564 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:53.565 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:54.127 [DEBUG] [Thread-124124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:40:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:40:54.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:40:54.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:40:54.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 40, 35), 16.49, 32.69, 0.0, 23.96, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:40:54.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:40:35
2025-12-03T21:40:55.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:40:55.234 [DEBUG] [Thread-124125] [transport.py] [_log()] starting thread (client mode): 0xa517cd30
2025-12-03T21:40:55.235 [DEBUG] [Thread-124125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:40:55.254 [DEBUG] [Thread-124125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:40:55.255 [INFO] [Thread-124125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] client lang: <none>
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] server lang: <none>
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] kex follows: False
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] Compression: none
2025-12-03T21:40:55.258 [DEBUG] [Thread-124125] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:40:55.273 [DEBUG] [Thread-124125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:40:55.273 [DEBUG] [Thread-124125] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:40:55.273 [DEBUG] [Thread-124125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:40:55.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:40:55.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:40:55.274 [DEBUG] [Thread-124125] [transport.py] [_log()] userauth is OK
2025-12-03T21:40:55.274 [DEBUG] [Thread-124125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:40:55.274 [DEBUG] [Thread-124125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:40:55.274 [DEBUG] [Thread-124125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:40:55.274 [DEBUG] [Thread-124125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:40:55.300 [INFO] [Thread-124125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:40:55.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:40:55.953 [DEBUG] [Thread-124125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:40:55.953 [DEBUG] [Thread-124125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:40:55.953 [DEBUG] [Thread-124125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:40:55.994 [DEBUG] [Thread-124125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:40:55.994 [DEBUG] [Thread-124125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:40:55.996 [DEBUG] [Thread-124125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:40:56.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:40:56.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:40:56.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:40:56.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:40:56.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:40:56.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:40:56.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.819842 -999.00  +16.10  18.44     38   +1.80 1 1 1 1 1     0    0 14.27 -1.75 ZNESW 18.4 18.4 150.8 25.7 16.5 -25.3 16.4 -24.8 16.2 -23.2 16.4 -23.8
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.819842
2025-12-03T21:40:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:40:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:40:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:40:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:40:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:40:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:40:35', tmtdew=16.49, humidity=32.69, cloud=0.0, wind=23.96, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:40:35', seeing=1.38, atlas_timestamp='2025-12-03T19:40:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:40:56.013 [DEBUG] [Thread-124125] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:40:56.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:40:56.108 [DEBUG] [Thread-124128] [transport.py] [_log()] starting thread (client mode): 0xa517c580
2025-12-03T21:40:56.108 [DEBUG] [Thread-124128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:40:56.122 [DEBUG] [Thread-124128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:40:56.122 [INFO] [Thread-124128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:40:56.129 [DEBUG] [Thread-124128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:40:56.129 [DEBUG] [Thread-124128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] client lang: <none>
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] server lang: <none>
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] kex follows: False
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] Compression: none
2025-12-03T21:40:56.130 [DEBUG] [Thread-124128] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:40:56.184 [DEBUG] [Thread-124128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:40:56.184 [DEBUG] [Thread-124128] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:40:56.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:40:56.185 [DEBUG] [Thread-124128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:40:56.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:40:56.242 [DEBUG] [Thread-124128] [transport.py] [_log()] userauth is OK
2025-12-03T21:40:56.243 [DEBUG] [Thread-124128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:40:56.243 [DEBUG] [Thread-124128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:40:56.243 [DEBUG] [Thread-124128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:40:56.243 [DEBUG] [Thread-124128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:40:56.258 [INFO] [Thread-124128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:40:56.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:40:56.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:40:57.079 [DEBUG] [Thread-124128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:40:57.079 [DEBUG] [Thread-124128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:40:57.127 [DEBUG] [Thread-124128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:40:57.127 [DEBUG] [Thread-124128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:40:57.135 [DEBUG] [Thread-124128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:40:57.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:40:57.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:40:57.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:40:57.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:40:57.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:40:57.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:40:57.168 [DEBUG] [Thread-124128] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:41:09.158 [DEBUG] [Thread-124130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:11.357 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:12.558 [DEBUG] [Thread-124131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:14.407 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:24.221 [DEBUG] [Thread-124132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:27.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:41:27.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:41:27.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:41:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 41, 7), 16.48, 32.71, 0.0, 22.92, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:41:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:41:07
2025-12-03T21:41:27.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:41:28.145 [DEBUG] [Thread-124133] [transport.py] [_log()] starting thread (client mode): 0xa51e7730
2025-12-03T21:41:28.145 [DEBUG] [Thread-124133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:41:28.165 [DEBUG] [Thread-124133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:41:28.165 [INFO] [Thread-124133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:41:28.168 [DEBUG] [Thread-124133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:41:28.168 [DEBUG] [Thread-124133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] client lang: <none>
2025-12-03T21:41:28.169 [DEBUG] [Thread-124133] [transport.py] [_log()] server lang: <none>
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] kex follows: False
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] Compression: none
2025-12-03T21:41:28.170 [DEBUG] [Thread-124133] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:41:28.187 [DEBUG] [Thread-124133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:41:28.187 [DEBUG] [Thread-124133] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:41:28.188 [DEBUG] [Thread-124133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:41:28.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:41:28.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:41:28.190 [DEBUG] [Thread-124133] [transport.py] [_log()] userauth is OK
2025-12-03T21:41:28.190 [DEBUG] [Thread-124133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:41:28.190 [DEBUG] [Thread-124133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:41:28.190 [DEBUG] [Thread-124133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:41:28.190 [DEBUG] [Thread-124133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:41:28.213 [INFO] [Thread-124133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:41:28.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:41:28.840 [DEBUG] [Thread-124133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:41:28.841 [DEBUG] [Thread-124133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:41:28.841 [DEBUG] [Thread-124133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:41:28.882 [DEBUG] [Thread-124133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:41:28.882 [DEBUG] [Thread-124133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:41:28.885 [DEBUG] [Thread-124133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:41:28.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:41:28.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:41:28.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:41:28.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:41:28.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:41:28.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:41:28.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:41:28.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.820189 -999.00  +16.20  17.84     38   +1.80 1 1 1 1 1     0    0 14.31 -2.01 ZNESW 17.8 17.8 140.8 23.7 16.6 -25.3 16.4 -24.7 16.2 -23.1 16.5 -23.9
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.820189
2025-12-03T21:41:28.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:41:28.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:41:28.910 [DEBUG] [Thread-124133] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:41:28.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:41:28.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:41:07', tmtdew=16.48, humidity=32.71, cloud=0.0, wind=22.92, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:41:07', seeing=1.46, atlas_timestamp='2025-12-03T19:41:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03474999999999895, -0.07474999999999987, -0.08675000000000033, -0.034000000000000696, -0.06349999999999945, 0.01925000000000132, -0.0730000000000004, -0.031749999999998835, 0.08349999999999902, -0.028999999999999915, 0.015750000000000597, -0.006999999999999673, 0.049999999999998934, 0.0652500000000007, -0.14300000000000068, -0.09299999999999997, 0.04124999999999979, 0.03550000000000075, 0.04399999999999871, -0.016250000000001208, 0.02299999999999791, 0.01774999999999949, -0.06874999999999787, -0.16724999999999923, 0.0039999999999995595, 0.028499999999999304, 0.00575000000000081, 0.042500000000000426, 0.07500000000000107, -0.008999999999998565, -0.019499999999998963, -0.12149999999999928, -0.06325000000000003], zp_timestamp='2025-12-03T19:37:00')
2025-12-03T21:41:28.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:41:29.016 [DEBUG] [Thread-124136] [transport.py] [_log()] starting thread (client mode): 0xa27c9810
2025-12-03T21:41:29.016 [DEBUG] [Thread-124136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:41:29.031 [DEBUG] [Thread-124136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:41:29.031 [INFO] [Thread-124136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:41:29.038 [DEBUG] [Thread-124136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:41:29.038 [DEBUG] [Thread-124136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] client lang: <none>
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] server lang: <none>
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] kex follows: False
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] Compression: none
2025-12-03T21:41:29.039 [DEBUG] [Thread-124136] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:41:29.097 [DEBUG] [Thread-124136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:41:29.098 [DEBUG] [Thread-124136] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:41:29.098 [DEBUG] [Thread-124136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:41:29.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:41:29.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:41:29.154 [DEBUG] [Thread-124136] [transport.py] [_log()] userauth is OK
2025-12-03T21:41:29.154 [DEBUG] [Thread-124136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:41:29.154 [DEBUG] [Thread-124136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:41:29.154 [DEBUG] [Thread-124136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:41:29.154 [DEBUG] [Thread-124136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:41:29.177 [INFO] [Thread-124136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:41:29.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:41:29.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:41:29.987 [DEBUG] [Thread-124136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:41:29.987 [DEBUG] [Thread-124136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:41:30.036 [DEBUG] [Thread-124136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:41:30.036 [DEBUG] [Thread-124136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:41:30.049 [DEBUG] [Thread-124136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:41:30.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:41:30.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:41:30.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:41:30.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:41:30.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:41:30.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:41:30.084 [DEBUG] [Thread-124136] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:41:39.257 [DEBUG] [Thread-124138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:53.763 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:53.764 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:41:54.331 [DEBUG] [Thread-124139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:00.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:42:00.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:42:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:42:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 41, 39), 16.43, 32.71, 0.0, 22.96, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:42:00.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:41:39
2025-12-03T21:42:00.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:42:01.063 [DEBUG] [Thread-124140] [transport.py] [_log()] starting thread (client mode): 0xa51d0af0
2025-12-03T21:42:01.063 [DEBUG] [Thread-124140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:42:01.083 [DEBUG] [Thread-124140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:42:01.083 [INFO] [Thread-124140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:42:01.086 [DEBUG] [Thread-124140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:42:01.087 [DEBUG] [Thread-124140] [transport.py] [_log()] client lang: <none>
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] server lang: <none>
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] kex follows: False
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] Compression: none
2025-12-03T21:42:01.088 [DEBUG] [Thread-124140] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:42:01.099 [DEBUG] [Thread-124140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:42:01.100 [DEBUG] [Thread-124140] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:42:01.100 [DEBUG] [Thread-124140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:42:01.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:42:01.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:42:01.102 [DEBUG] [Thread-124140] [transport.py] [_log()] userauth is OK
2025-12-03T21:42:01.102 [DEBUG] [Thread-124140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:42:01.102 [DEBUG] [Thread-124140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:42:01.103 [DEBUG] [Thread-124140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:42:01.103 [DEBUG] [Thread-124140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:42:01.120 [INFO] [Thread-124140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:42:01.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:42:01.761 [DEBUG] [Thread-124140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:42:01.761 [DEBUG] [Thread-124140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:42:01.762 [DEBUG] [Thread-124140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:42:01.802 [DEBUG] [Thread-124140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:42:01.802 [DEBUG] [Thread-124140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:42:01.805 [DEBUG] [Thread-124140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:42:01.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:42:01.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:42:01.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:42:01.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:42:01.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:42:01.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:42:01.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:42:01.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:42:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:42:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.820537 -999.00  +16.20  21.91     38   +1.90 1 1 1 1 1     0    0 14.47 -2.48 ZNESW 21.9 21.9 142.8 28.4 16.6 -25.3 16.4 -24.7 16.2 -23.1 16.5 -23.9
2025-12-03T21:42:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:42:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:42:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.820537
2025-12-03T21:42:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:42:01.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:42:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:42:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:42:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:42:01.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:41:39', tmtdew=16.43, humidity=32.71, cloud=0.0, wind=22.96, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:41:39', seeing=1.15, atlas_timestamp='2025-12-03T19:41:34.397', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:40:00')
2025-12-03T21:42:01.827 [DEBUG] [Thread-124140] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:42:01.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:42:01.931 [DEBUG] [Thread-124143] [transport.py] [_log()] starting thread (client mode): 0xa517f6a0
2025-12-03T21:42:01.931 [DEBUG] [Thread-124143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:42:01.945 [DEBUG] [Thread-124143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:42:01.945 [INFO] [Thread-124143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:42:01.953 [DEBUG] [Thread-124143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:42:01.953 [DEBUG] [Thread-124143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] client lang: <none>
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] server lang: <none>
2025-12-03T21:42:01.954 [DEBUG] [Thread-124143] [transport.py] [_log()] kex follows: False
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] Compression: none
2025-12-03T21:42:01.955 [DEBUG] [Thread-124143] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:42:02.010 [DEBUG] [Thread-124143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:42:02.011 [DEBUG] [Thread-124143] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:42:02.020 [DEBUG] [Thread-124143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:42:02.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:42:02.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:42:02.067 [DEBUG] [Thread-124143] [transport.py] [_log()] userauth is OK
2025-12-03T21:42:02.067 [DEBUG] [Thread-124143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:42:02.067 [DEBUG] [Thread-124143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:42:02.067 [DEBUG] [Thread-124143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:42:02.067 [DEBUG] [Thread-124143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:42:02.090 [INFO] [Thread-124143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:42:02.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:42:02.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:42:02.908 [DEBUG] [Thread-124143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:42:02.908 [DEBUG] [Thread-124143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:42:02.958 [DEBUG] [Thread-124143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:42:02.958 [DEBUG] [Thread-124143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:42:02.967 [DEBUG] [Thread-124143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:42:02.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:42:02.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:42:02.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:42:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:42:02.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:42:02.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:42:03.004 [DEBUG] [Thread-124143] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:42:09.367 [DEBUG] [Thread-124145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:12.612 [DEBUG] [Thread-124146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:24.432 [DEBUG] [Thread-124147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:33.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:42:33.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:42:33.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:42:33.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 42, 11), 16.42, 32.72, 0.0, 22.6, 16.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:42:33.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:42:11
2025-12-03T21:42:33.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:42:33.964 [DEBUG] [Thread-124148] [transport.py] [_log()] starting thread (client mode): 0xa51e63e0
2025-12-03T21:42:33.964 [DEBUG] [Thread-124148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:42:33.986 [DEBUG] [Thread-124148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:42:33.986 [INFO] [Thread-124148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:42:33.989 [DEBUG] [Thread-124148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:42:33.989 [DEBUG] [Thread-124148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:42:33.990 [DEBUG] [Thread-124148] [transport.py] [_log()] client lang: <none>
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] server lang: <none>
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] kex follows: False
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:42:33.991 [DEBUG] [Thread-124148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:42:33.992 [DEBUG] [Thread-124148] [transport.py] [_log()] Compression: none
2025-12-03T21:42:33.992 [DEBUG] [Thread-124148] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:42:34.011 [DEBUG] [Thread-124148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:42:34.012 [DEBUG] [Thread-124148] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:42:34.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:42:34.014 [DEBUG] [Thread-124148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:42:34.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:42:34.016 [DEBUG] [Thread-124148] [transport.py] [_log()] userauth is OK
2025-12-03T21:42:34.016 [DEBUG] [Thread-124148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:42:34.016 [DEBUG] [Thread-124148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:42:34.016 [DEBUG] [Thread-124148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:42:34.016 [DEBUG] [Thread-124148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:42:34.035 [INFO] [Thread-124148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:42:34.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:42:34.649 [DEBUG] [Thread-124148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:42:34.649 [DEBUG] [Thread-124148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:42:34.649 [DEBUG] [Thread-124148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:42:34.690 [DEBUG] [Thread-124148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:42:34.690 [DEBUG] [Thread-124148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:42:34.693 [DEBUG] [Thread-124148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:42:34.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:42:34.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:42:34.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:42:34.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:42:34.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:42:34.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:42:34.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.820884 -999.00  +16.20  18.05     37   +1.80 1 1 1 1 1     0    0 14.50 -3.25 ZNESW 18.1 18.1 139.6 24.6 16.5 -25.3 16.4 -24.8 16.2 -23.1 16.5 -24.0
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:42:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.820884
2025-12-03T21:42:34.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:42:34.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:42:34.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:42:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:42:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:42:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:42:11', tmtdew=16.42, humidity=32.72, cloud=0.0, wind=22.6, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:42:11', seeing=1.15, atlas_timestamp='2025-12-03T19:42:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:40:00')
2025-12-03T21:42:34.719 [DEBUG] [Thread-124148] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:42:34.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:42:34.823 [DEBUG] [Thread-124151] [transport.py] [_log()] starting thread (client mode): 0xa27cbfd0
2025-12-03T21:42:34.823 [DEBUG] [Thread-124151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:42:34.839 [DEBUG] [Thread-124151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:42:34.839 [INFO] [Thread-124151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:42:34.852 [DEBUG] [Thread-124151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] client lang: <none>
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] server lang: <none>
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] kex follows: False
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:42:34.853 [DEBUG] [Thread-124151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:42:34.854 [DEBUG] [Thread-124151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:42:34.854 [DEBUG] [Thread-124151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:42:34.854 [DEBUG] [Thread-124151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:42:34.854 [DEBUG] [Thread-124151] [transport.py] [_log()] Compression: none
2025-12-03T21:42:34.854 [DEBUG] [Thread-124151] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:42:34.906 [DEBUG] [Thread-124151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:42:34.906 [DEBUG] [Thread-124151] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:42:34.907 [DEBUG] [Thread-124151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:42:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:42:34.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:42:34.966 [DEBUG] [Thread-124151] [transport.py] [_log()] userauth is OK
2025-12-03T21:42:34.966 [DEBUG] [Thread-124151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:42:34.966 [DEBUG] [Thread-124151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:42:34.966 [DEBUG] [Thread-124151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:42:34.966 [DEBUG] [Thread-124151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:42:34.986 [INFO] [Thread-124151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:42:34.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:42:34.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:42:35.809 [DEBUG] [Thread-124151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:42:35.809 [DEBUG] [Thread-124151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:42:35.857 [DEBUG] [Thread-124151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:42:35.857 [DEBUG] [Thread-124151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:42:35.865 [DEBUG] [Thread-124151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:42:35.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:42:35.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:42:35.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:42:35.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:42:35.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:42:35.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:42:35.900 [DEBUG] [Thread-124151] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:42:39.469 [DEBUG] [Thread-124153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:53.968 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:53.969 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:42:54.532 [DEBUG] [Thread-124154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:05.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:43:05.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:43:05.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:43:06.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 42, 43), 16.37, 32.84, 0.0, 23.26, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:43:06.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:42:43
2025-12-03T21:43:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:43:06.883 [DEBUG] [Thread-124155] [transport.py] [_log()] starting thread (client mode): 0xa27cb4c0
2025-12-03T21:43:06.883 [DEBUG] [Thread-124155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:43:06.903 [DEBUG] [Thread-124155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:43:06.903 [INFO] [Thread-124155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:06.907 [DEBUG] [Thread-124155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] client lang: <none>
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] server lang: <none>
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] kex follows: False
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:43:06.908 [DEBUG] [Thread-124155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:43:06.909 [DEBUG] [Thread-124155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:43:06.909 [DEBUG] [Thread-124155] [transport.py] [_log()] Compression: none
2025-12-03T21:43:06.909 [DEBUG] [Thread-124155] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:43:06.927 [DEBUG] [Thread-124155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:43:06.928 [DEBUG] [Thread-124155] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:43:06.928 [DEBUG] [Thread-124155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:43:06.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:43:06.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:43:06.930 [DEBUG] [Thread-124155] [transport.py] [_log()] userauth is OK
2025-12-03T21:43:06.931 [DEBUG] [Thread-124155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:43:06.931 [DEBUG] [Thread-124155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:43:06.931 [DEBUG] [Thread-124155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:43:06.931 [DEBUG] [Thread-124155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:43:06.948 [INFO] [Thread-124155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:43:06.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:43:07.536 [DEBUG] [Thread-124155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:43:07.537 [DEBUG] [Thread-124155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:43:07.537 [DEBUG] [Thread-124155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:43:07.578 [DEBUG] [Thread-124155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:43:07.578 [DEBUG] [Thread-124155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:43:07.581 [DEBUG] [Thread-124155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:43:07.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:43:07.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:43:07.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:43:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:43:07.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:43:07.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:43:07.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:43:07.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:43:07.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:43:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.821231 -999.00  +16.20  18.60     38   +1.80 1 1 1 1 1     0    0 14.34 -3.78 ZNESW 18.6 18.6 136.4 21.9 16.5 -25.4 16.4 -24.7 16.2 -23.1 16.4 -24.0
2025-12-03T21:43:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:43:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:43:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.821231
2025-12-03T21:43:07.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:43:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:43:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:43:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:43:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:43:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:42:43', tmtdew=16.37, humidity=32.84, cloud=0.0, wind=23.26, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:42:43', seeing=1.06, atlas_timestamp='2025-12-03T19:42:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:40:00')
2025-12-03T21:43:07.602 [DEBUG] [Thread-124155] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:43:07.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:43:07.701 [DEBUG] [Thread-124158] [transport.py] [_log()] starting thread (client mode): 0xa27ca620
2025-12-03T21:43:07.701 [DEBUG] [Thread-124158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:43:07.719 [DEBUG] [Thread-124158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:43:07.720 [INFO] [Thread-124158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:07.730 [DEBUG] [Thread-124158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] client lang: <none>
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] server lang: <none>
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] kex follows: False
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:43:07.731 [DEBUG] [Thread-124158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:43:07.732 [DEBUG] [Thread-124158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:43:07.732 [DEBUG] [Thread-124158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:43:07.732 [DEBUG] [Thread-124158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:43:07.732 [DEBUG] [Thread-124158] [transport.py] [_log()] Compression: none
2025-12-03T21:43:07.732 [DEBUG] [Thread-124158] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:43:07.787 [DEBUG] [Thread-124158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:43:07.787 [DEBUG] [Thread-124158] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:43:07.787 [DEBUG] [Thread-124158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:43:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:43:07.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:43:07.850 [DEBUG] [Thread-124158] [transport.py] [_log()] userauth is OK
2025-12-03T21:43:07.850 [DEBUG] [Thread-124158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:43:07.850 [DEBUG] [Thread-124158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:43:07.850 [DEBUG] [Thread-124158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:43:07.850 [DEBUG] [Thread-124158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:43:07.872 [INFO] [Thread-124158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:43:07.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:43:07.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:43:08.709 [DEBUG] [Thread-124158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:43:08.710 [DEBUG] [Thread-124158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:43:08.758 [DEBUG] [Thread-124158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:43:08.758 [DEBUG] [Thread-124158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:43:08.767 [DEBUG] [Thread-124158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:43:08.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:43:08.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:43:08.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:43:08.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:43:08.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:43:08.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:43:08.801 [DEBUG] [Thread-124158] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:43:09.568 [DEBUG] [Thread-124160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:12.677 [DEBUG] [Thread-124161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:24.621 [DEBUG] [Thread-124162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:38.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:43:38.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:43:38.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:43:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 43, 15), 16.37, 32.84, 0.0, 23.63, 16.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:43:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:43:15
2025-12-03T21:43:39.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:43:39.655 [DEBUG] [Thread-124163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:39.801 [DEBUG] [Thread-124164] [transport.py] [_log()] starting thread (client mode): 0xa271c220
2025-12-03T21:43:39.802 [DEBUG] [Thread-124164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:43:39.821 [DEBUG] [Thread-124164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:43:39.822 [INFO] [Thread-124164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:39.825 [DEBUG] [Thread-124164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] client lang: <none>
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] server lang: <none>
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] kex follows: False
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:43:39.826 [DEBUG] [Thread-124164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:43:39.827 [DEBUG] [Thread-124164] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:43:39.827 [DEBUG] [Thread-124164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:43:39.827 [DEBUG] [Thread-124164] [transport.py] [_log()] Compression: none
2025-12-03T21:43:39.827 [DEBUG] [Thread-124164] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:43:39.851 [DEBUG] [Thread-124164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:43:39.852 [DEBUG] [Thread-124164] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:43:39.852 [DEBUG] [Thread-124164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:43:39.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:43:39.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:43:39.854 [DEBUG] [Thread-124164] [transport.py] [_log()] userauth is OK
2025-12-03T21:43:39.854 [DEBUG] [Thread-124164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:43:39.854 [DEBUG] [Thread-124164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:43:39.854 [DEBUG] [Thread-124164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:43:39.854 [DEBUG] [Thread-124164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:43:39.878 [INFO] [Thread-124164] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:43:39.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:43:40.503 [DEBUG] [Thread-124164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:43:40.503 [DEBUG] [Thread-124164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:43:40.504 [DEBUG] [Thread-124164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:43:40.544 [DEBUG] [Thread-124164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:43:40.545 [DEBUG] [Thread-124164] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:43:40.547 [DEBUG] [Thread-124164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:43:40.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:43:40.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:43:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:43:40.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:43:40.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:43:40.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:43:40.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:43:40.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.821231 -999.00  +16.20  18.60     38   +1.80 1 1 1 1 1     0    0 14.34 -3.78 ZNESW 18.6 18.6 136.4 21.9 16.5 -25.4 16.4 -24.7 16.2 -23.1 16.4 -24.0
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.821231
2025-12-03T21:43:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:43:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:43:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:43:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:43:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:43:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:43:15', tmtdew=16.37, humidity=32.84, cloud=0.0, wind=23.63, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:43:15', seeing=1.06, atlas_timestamp='2025-12-03T19:42:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:40:00')
2025-12-03T21:43:40.573 [DEBUG] [Thread-124164] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:43:40.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:43:40.682 [DEBUG] [Thread-124167] [transport.py] [_log()] starting thread (client mode): 0xa51d2ef0
2025-12-03T21:43:40.683 [DEBUG] [Thread-124167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:43:40.697 [DEBUG] [Thread-124167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:43:40.697 [INFO] [Thread-124167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:43:40.705 [DEBUG] [Thread-124167] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:43:40.705 [DEBUG] [Thread-124167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:43:40.705 [DEBUG] [Thread-124167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:43:40.705 [DEBUG] [Thread-124167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] client lang: <none>
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] server lang: <none>
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] kex follows: False
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:43:40.706 [DEBUG] [Thread-124167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:43:40.707 [DEBUG] [Thread-124167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:43:40.707 [DEBUG] [Thread-124167] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:43:40.707 [DEBUG] [Thread-124167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:43:40.707 [DEBUG] [Thread-124167] [transport.py] [_log()] Compression: none
2025-12-03T21:43:40.707 [DEBUG] [Thread-124167] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:43:40.761 [DEBUG] [Thread-124167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:43:40.762 [DEBUG] [Thread-124167] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:43:40.762 [DEBUG] [Thread-124167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:43:40.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:43:40.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:43:40.820 [DEBUG] [Thread-124167] [transport.py] [_log()] userauth is OK
2025-12-03T21:43:40.820 [DEBUG] [Thread-124167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:43:40.821 [DEBUG] [Thread-124167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:43:40.821 [DEBUG] [Thread-124167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:43:40.821 [DEBUG] [Thread-124167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:43:40.841 [INFO] [Thread-124167] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:43:40.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:43:40.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:43:41.678 [DEBUG] [Thread-124167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:43:41.678 [DEBUG] [Thread-124167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:43:41.726 [DEBUG] [Thread-124167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:43:41.726 [DEBUG] [Thread-124167] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:43:41.735 [DEBUG] [Thread-124167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:43:41.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:43:41.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:43:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:43:41.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:43:41.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:43:41.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:43:41.770 [DEBUG] [Thread-124167] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:43:54.170 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:54.171 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:43:54.692 [DEBUG] [Thread-124169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:09.748 [DEBUG] [Thread-124170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:44:11.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:44:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:44:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 43, 47), 16.31, 32.87, 0.0, 23.59, 16.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:44:12.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:43:47
2025-12-03T21:44:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:44:12.730 [DEBUG] [Thread-124171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:12.766 [DEBUG] [Thread-124172] [transport.py] [_log()] starting thread (client mode): 0xa51d3df0
2025-12-03T21:44:12.766 [DEBUG] [Thread-124172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:44:12.787 [DEBUG] [Thread-124172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:44:12.787 [INFO] [Thread-124172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] client lang: <none>
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] server lang: <none>
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] kex follows: False
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:44:12.791 [DEBUG] [Thread-124172] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:44:12.792 [DEBUG] [Thread-124172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:44:12.792 [DEBUG] [Thread-124172] [transport.py] [_log()] Compression: none
2025-12-03T21:44:12.792 [DEBUG] [Thread-124172] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:44:12.808 [DEBUG] [Thread-124172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:44:12.809 [DEBUG] [Thread-124172] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:44:12.809 [DEBUG] [Thread-124172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:44:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:44:12.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:44:12.811 [DEBUG] [Thread-124172] [transport.py] [_log()] userauth is OK
2025-12-03T21:44:12.812 [DEBUG] [Thread-124172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:44:12.812 [DEBUG] [Thread-124172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:44:12.812 [DEBUG] [Thread-124172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:44:12.812 [DEBUG] [Thread-124172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:44:12.835 [INFO] [Thread-124172] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:44:12.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:44:13.502 [DEBUG] [Thread-124172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:44:13.503 [DEBUG] [Thread-124172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:44:13.503 [DEBUG] [Thread-124172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:44:13.543 [DEBUG] [Thread-124172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:44:13.543 [DEBUG] [Thread-124172] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:44:13.546 [DEBUG] [Thread-124172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:44:13.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:44:13.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:44:13.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:44:13.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:44:13.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:44:13.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:44:13.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:44:13.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:44:13.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:44:13.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.821925 -999.00  +16.20  23.28     38   +1.90 1 1 1 1 1     0    0 14.17 -6.75 ZNESW 23.3 23.3 146.8 28.2 16.5 -25.1 16.4 -24.7 16.2 -23.1 16.5 -23.8
2025-12-03T21:44:13.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:44:13.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:44:13.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.821925
2025-12-03T21:44:13.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:44:13.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:44:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:44:13.570 [DEBUG] [Thread-124172] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:44:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:44:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:44:13.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:43:47', tmtdew=16.31, humidity=32.87, cloud=0.0, wind=23.59, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:43:47', seeing=0.98, atlas_timestamp='2025-12-03T19:43:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:40:00')
2025-12-03T21:44:13.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:44:13.678 [DEBUG] [Thread-124175] [transport.py] [_log()] starting thread (client mode): 0xa271cf70
2025-12-03T21:44:13.678 [DEBUG] [Thread-124175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:44:13.694 [DEBUG] [Thread-124175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:44:13.694 [INFO] [Thread-124175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:44:13.701 [DEBUG] [Thread-124175] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:44:13.701 [DEBUG] [Thread-124175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:44:13.701 [DEBUG] [Thread-124175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] client lang: <none>
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] server lang: <none>
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] kex follows: False
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] Compression: none
2025-12-03T21:44:13.702 [DEBUG] [Thread-124175] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:44:13.761 [DEBUG] [Thread-124175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:44:13.762 [DEBUG] [Thread-124175] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:44:13.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:44:13.763 [DEBUG] [Thread-124175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:44:13.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:44:13.817 [DEBUG] [Thread-124175] [transport.py] [_log()] userauth is OK
2025-12-03T21:44:13.818 [DEBUG] [Thread-124175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:44:13.818 [DEBUG] [Thread-124175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:44:13.818 [DEBUG] [Thread-124175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:44:13.818 [DEBUG] [Thread-124175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:44:13.838 [INFO] [Thread-124175] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:44:13.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:44:13.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:44:14.663 [DEBUG] [Thread-124175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:44:14.664 [DEBUG] [Thread-124175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:44:14.712 [DEBUG] [Thread-124175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:44:14.712 [DEBUG] [Thread-124175] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:44:14.720 [DEBUG] [Thread-124175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:44:14.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:44:14.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:44:14.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:44:14.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:44:14.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:44:14.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:44:14.753 [DEBUG] [Thread-124175] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:44:24.785 [DEBUG] [Thread-124177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:38.132 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:39.847 [DEBUG] [Thread-124178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:42.943 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:44.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:44:44.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:44:44.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:44:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 44, 19), 16.34, 32.81, 0.0, 22.89, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:44:45.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:44:19
2025-12-03T21:44:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:44:45.764 [DEBUG] [Thread-124179] [transport.py] [_log()] starting thread (client mode): 0xa271ef20
2025-12-03T21:44:45.764 [DEBUG] [Thread-124179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:44:45.783 [DEBUG] [Thread-124179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:44:45.783 [INFO] [Thread-124179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] client lang: <none>
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] server lang: <none>
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] kex follows: False
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] Compression: none
2025-12-03T21:44:45.787 [DEBUG] [Thread-124179] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:44:45.804 [DEBUG] [Thread-124179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:44:45.804 [DEBUG] [Thread-124179] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:44:45.804 [DEBUG] [Thread-124179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:44:45.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:44:45.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:44:45.805 [DEBUG] [Thread-124179] [transport.py] [_log()] userauth is OK
2025-12-03T21:44:45.805 [DEBUG] [Thread-124179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:44:45.805 [DEBUG] [Thread-124179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:44:45.805 [DEBUG] [Thread-124179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:44:45.805 [DEBUG] [Thread-124179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:44:45.818 [INFO] [Thread-124179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:44:45.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:44:45.998 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:46.531 [DEBUG] [Thread-124179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:44:46.531 [DEBUG] [Thread-124179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:44:46.532 [DEBUG] [Thread-124179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:44:46.573 [DEBUG] [Thread-124179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:44:46.573 [DEBUG] [Thread-124179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:44:46.575 [DEBUG] [Thread-124179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:44:46.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:44:46.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:44:46.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:44:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:44:46.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:44:46.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:44:46.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.822273 -999.00  +16.20  17.24     38   +2.00 1 1 1 1 1     0    0 14.21 -9.26 ZNESW 17.2 17.2 137.0 23.6 16.6 -25.3 16.4 -24.6 16.1 -23.0 16.5 -23.7
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:44:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.822273
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:44:46.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:44:19', tmtdew=16.34, humidity=32.81, cloud=0.0, wind=22.89, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:44:19', seeing=0.98, atlas_timestamp='2025-12-03T19:44:04.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:44:00')
2025-12-03T21:44:46.592 [DEBUG] [Thread-124179] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:44:46.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:44:46.695 [DEBUG] [Thread-124182] [transport.py] [_log()] starting thread (client mode): 0xa2751d20
2025-12-03T21:44:46.695 [DEBUG] [Thread-124182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:44:46.710 [DEBUG] [Thread-124182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:44:46.710 [INFO] [Thread-124182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] client lang: <none>
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] server lang: <none>
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] kex follows: False
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] Compression: none
2025-12-03T21:44:46.718 [DEBUG] [Thread-124182] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:44:46.776 [DEBUG] [Thread-124182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:44:46.777 [DEBUG] [Thread-124182] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:44:46.777 [DEBUG] [Thread-124182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:44:46.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:44:46.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:44:46.833 [DEBUG] [Thread-124182] [transport.py] [_log()] userauth is OK
2025-12-03T21:44:46.833 [DEBUG] [Thread-124182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:44:46.833 [DEBUG] [Thread-124182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:44:46.833 [DEBUG] [Thread-124182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:44:46.833 [DEBUG] [Thread-124182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:44:46.851 [INFO] [Thread-124182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:44:46.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:44:46.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:44:47.659 [DEBUG] [Thread-124182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:44:47.659 [DEBUG] [Thread-124182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:44:47.707 [DEBUG] [Thread-124182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:44:47.708 [DEBUG] [Thread-124182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:44:47.716 [DEBUG] [Thread-124182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:44:47.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:44:47.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:44:47.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:44:47.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:44:47.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:44:47.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:44:47.748 [DEBUG] [Thread-124182] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:44:52.450 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:54.369 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:54.370 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:44:54.883 [DEBUG] [Thread-124184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:09.946 [DEBUG] [Thread-124185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:12.797 [DEBUG] [Thread-124186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:17.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:45:17.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:45:17.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:45:18.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 44, 51), 16.28, 32.84, 0.0, 21.14, 16.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:45:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:44:51
2025-12-03T21:45:18.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:45:18.733 [DEBUG] [Thread-124187] [transport.py] [_log()] starting thread (client mode): 0xa517ef20
2025-12-03T21:45:18.733 [DEBUG] [Thread-124187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:45:18.756 [DEBUG] [Thread-124187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:45:18.756 [INFO] [Thread-124187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:45:18.760 [DEBUG] [Thread-124187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:45:18.760 [DEBUG] [Thread-124187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:45:18.760 [DEBUG] [Thread-124187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:45:18.760 [DEBUG] [Thread-124187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] client lang: <none>
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] server lang: <none>
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] kex follows: False
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] Compression: none
2025-12-03T21:45:18.761 [DEBUG] [Thread-124187] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:45:18.779 [DEBUG] [Thread-124187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:45:18.779 [DEBUG] [Thread-124187] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:45:18.780 [DEBUG] [Thread-124187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:45:18.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:45:18.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:45:18.782 [DEBUG] [Thread-124187] [transport.py] [_log()] userauth is OK
2025-12-03T21:45:18.782 [DEBUG] [Thread-124187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:45:18.782 [DEBUG] [Thread-124187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:45:18.782 [DEBUG] [Thread-124187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:45:18.782 [DEBUG] [Thread-124187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:45:18.827 [INFO] [Thread-124187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:45:18.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:45:19.447 [DEBUG] [Thread-124187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:45:19.447 [DEBUG] [Thread-124187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:45:19.448 [DEBUG] [Thread-124187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:45:19.489 [DEBUG] [Thread-124187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:45:19.489 [DEBUG] [Thread-124187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:45:19.492 [DEBUG] [Thread-124187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:45:19.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:45:19.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:45:19.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:45:19.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:45:19.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:45:19.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:45:19.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:45:19.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.822620 -999.00  +16.30  20.77     38   +2.00 1 1 1 1 1     0    0 14.18 -9.84 ZNESW 20.8 20.8 138.2 27.9 16.5 -25.3 16.4 -24.5 16.2 -22.9 16.5 -23.8
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.822620
2025-12-03T21:45:19.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:45:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:45:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:45:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:45:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:45:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:44:51', tmtdew=16.28, humidity=32.84, cloud=0.0, wind=21.14, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:44:52', seeing=0.92, atlas_timestamp='2025-12-03T19:44:34.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:44:00')
2025-12-03T21:45:19.527 [DEBUG] [Thread-124187] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:45:19.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:45:19.631 [DEBUG] [Thread-124190] [transport.py] [_log()] starting thread (client mode): 0xa27cbaf0
2025-12-03T21:45:19.631 [DEBUG] [Thread-124190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:45:19.646 [DEBUG] [Thread-124190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:45:19.646 [INFO] [Thread-124190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:19.653 [DEBUG] [Thread-124190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] client lang: <none>
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] server lang: <none>
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] kex follows: False
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] Compression: none
2025-12-03T21:45:19.654 [DEBUG] [Thread-124190] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:45:19.713 [DEBUG] [Thread-124190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:45:19.713 [DEBUG] [Thread-124190] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:45:19.714 [DEBUG] [Thread-124190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:45:19.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:45:19.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:45:19.769 [DEBUG] [Thread-124190] [transport.py] [_log()] userauth is OK
2025-12-03T21:45:19.769 [DEBUG] [Thread-124190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:45:19.769 [DEBUG] [Thread-124190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:45:19.769 [DEBUG] [Thread-124190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:45:19.769 [DEBUG] [Thread-124190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:45:19.791 [INFO] [Thread-124190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:45:19.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:45:19.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:45:20.608 [DEBUG] [Thread-124190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:45:20.609 [DEBUG] [Thread-124190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:45:20.657 [DEBUG] [Thread-124190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:45:20.657 [DEBUG] [Thread-124190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:45:20.666 [DEBUG] [Thread-124190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:45:20.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:45:20.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:45:20.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:45:20.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:45:20.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:45:20.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:45:20.701 [DEBUG] [Thread-124190] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:45:24.985 [DEBUG] [Thread-124192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:40.032 [DEBUG] [Thread-124193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:45:50.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:45:50.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:45:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 45, 24), 16.23, 32.92, 0.0, 21.86, 16.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:45:51.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:45:24
2025-12-03T21:45:51.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:45:51.693 [DEBUG] [Thread-124194] [transport.py] [_log()] starting thread (client mode): 0xa27ca0b0
2025-12-03T21:45:51.693 [DEBUG] [Thread-124194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:45:51.712 [DEBUG] [Thread-124194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:45:51.712 [INFO] [Thread-124194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:51.714 [DEBUG] [Thread-124194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] client lang: <none>
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] server lang: <none>
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] kex follows: False
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:45:51.715 [DEBUG] [Thread-124194] [transport.py] [_log()] Compression: none
2025-12-03T21:45:51.716 [DEBUG] [Thread-124194] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:45:51.730 [DEBUG] [Thread-124194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:45:51.731 [DEBUG] [Thread-124194] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:45:51.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:45:51.732 [DEBUG] [Thread-124194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:45:51.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:45:51.734 [DEBUG] [Thread-124194] [transport.py] [_log()] userauth is OK
2025-12-03T21:45:51.734 [DEBUG] [Thread-124194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:45:51.735 [DEBUG] [Thread-124194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:45:51.735 [DEBUG] [Thread-124194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:45:51.735 [DEBUG] [Thread-124194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:45:51.770 [INFO] [Thread-124194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:45:51.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:45:52.553 [DEBUG] [Thread-124194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:45:52.553 [DEBUG] [Thread-124194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:45:52.553 [DEBUG] [Thread-124194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:45:52.594 [DEBUG] [Thread-124194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:45:52.594 [DEBUG] [Thread-124194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:45:52.596 [DEBUG] [Thread-124194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:45:52.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:45:52.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:45:52.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:45:52.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:45:52.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:45:52.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:45:52.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:45:52.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:45:52.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.822967 -999.00  +16.20  21.74     38   +1.90 1 1 1 1 1     0    0 14.20 -11.44 ZNESW 21.7 21.7 145.8 24.0 16.6 -25.3 16.4 -24.7 16.2 -23.1 16.4 -23.9
2025-12-03T21:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.822967
2025-12-03T21:45:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:45:52.611 [DEBUG] [Thread-124194] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:45:52.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:45:52.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:45:52.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:45:52.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:45:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:45:24', tmtdew=16.23, humidity=32.92, cloud=0.0, wind=21.86, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:45:24', seeing=0.91, atlas_timestamp='2025-12-03T19:45:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:44:00')
2025-12-03T21:45:52.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:45:52.715 [DEBUG] [Thread-124197] [transport.py] [_log()] starting thread (client mode): 0xa2762e30
2025-12-03T21:45:52.715 [DEBUG] [Thread-124197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:45:52.730 [DEBUG] [Thread-124197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:45:52.730 [INFO] [Thread-124197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:45:52.737 [DEBUG] [Thread-124197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:45:52.737 [DEBUG] [Thread-124197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:45:52.737 [DEBUG] [Thread-124197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] client lang: <none>
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] server lang: <none>
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] kex follows: False
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] Compression: none
2025-12-03T21:45:52.738 [DEBUG] [Thread-124197] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:45:52.796 [DEBUG] [Thread-124197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:45:52.797 [DEBUG] [Thread-124197] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:45:52.797 [DEBUG] [Thread-124197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:45:52.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:45:52.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:45:52.853 [DEBUG] [Thread-124197] [transport.py] [_log()] userauth is OK
2025-12-03T21:45:52.853 [DEBUG] [Thread-124197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:45:52.853 [DEBUG] [Thread-124197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:45:52.853 [DEBUG] [Thread-124197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:45:52.853 [DEBUG] [Thread-124197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:45:52.872 [INFO] [Thread-124197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:45:52.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:45:52.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:45:53.724 [DEBUG] [Thread-124197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:45:53.724 [DEBUG] [Thread-124197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:45:53.772 [DEBUG] [Thread-124197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:45:53.773 [DEBUG] [Thread-124197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:45:53.782 [DEBUG] [Thread-124197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:45:53.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:45:53.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:45:53.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:45:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:45:53.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:45:53.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:45:53.816 [DEBUG] [Thread-124197] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:45:54.569 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:54.570 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:45:55.068 [DEBUG] [Thread-124199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:10.116 [DEBUG] [Thread-124200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:12.867 [DEBUG] [Thread-124201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:23.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:46:23.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:46:23.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:46:24.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 45, 56), 16.27, 32.95, 0.0, 23.31, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:46:24.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:45:56
2025-12-03T21:46:24.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:46:24.800 [DEBUG] [Thread-124202] [transport.py] [_log()] starting thread (client mode): 0xa51d35b0
2025-12-03T21:46:24.801 [DEBUG] [Thread-124202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:46:24.821 [DEBUG] [Thread-124202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:46:24.821 [INFO] [Thread-124202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:46:24.824 [DEBUG] [Thread-124202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:46:24.824 [DEBUG] [Thread-124202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:46:24.824 [DEBUG] [Thread-124202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:46:24.824 [DEBUG] [Thread-124202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:24.824 [DEBUG] [Thread-124202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] client lang: <none>
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] server lang: <none>
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] kex follows: False
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:46:24.825 [DEBUG] [Thread-124202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:46:24.826 [DEBUG] [Thread-124202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:46:24.826 [DEBUG] [Thread-124202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:46:24.826 [DEBUG] [Thread-124202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:46:24.826 [DEBUG] [Thread-124202] [transport.py] [_log()] Compression: none
2025-12-03T21:46:24.826 [DEBUG] [Thread-124202] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:46:24.845 [DEBUG] [Thread-124202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:46:24.846 [DEBUG] [Thread-124202] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:46:24.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:46:24.847 [DEBUG] [Thread-124202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:46:24.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:46:24.849 [DEBUG] [Thread-124202] [transport.py] [_log()] userauth is OK
2025-12-03T21:46:24.849 [DEBUG] [Thread-124202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:46:24.849 [DEBUG] [Thread-124202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:46:24.849 [DEBUG] [Thread-124202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:46:24.849 [DEBUG] [Thread-124202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:46:24.873 [INFO] [Thread-124202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:46:24.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:46:25.153 [DEBUG] [Thread-124204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:25.456 [DEBUG] [Thread-124202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:46:25.456 [DEBUG] [Thread-124202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:46:25.456 [DEBUG] [Thread-124202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:46:25.497 [DEBUG] [Thread-124202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:46:25.497 [DEBUG] [Thread-124202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:46:25.500 [DEBUG] [Thread-124202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:46:25.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:46:25.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:46:25.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:46:25.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:46:25.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:46:25.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:46:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:46:25.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.823314 -999.00  +16.20  17.58     38   +2.00 1 1 1 1 1     0    0 13.84 -12.14 ZNESW 17.6 17.6 140.0 25.0 16.5 -25.3 16.4 -24.7 16.2 -23.0 16.5 -23.7
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.823314
2025-12-03T21:46:25.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:46:25.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:46:25.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:46:25.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:46:25.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:46:25.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:45:56', tmtdew=16.27, humidity=32.95, cloud=0.0, wind=23.31, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:45:56', seeing=0.97, atlas_timestamp='2025-12-03T19:45:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:44:00')
2025-12-03T21:46:25.525 [DEBUG] [Thread-124202] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:46:25.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:46:25.634 [DEBUG] [Thread-124206] [transport.py] [_log()] starting thread (client mode): 0xa51d2da0
2025-12-03T21:46:25.634 [DEBUG] [Thread-124206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:46:25.648 [DEBUG] [Thread-124206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:46:25.648 [INFO] [Thread-124206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] client lang: <none>
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] server lang: <none>
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] kex follows: False
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:46:25.656 [DEBUG] [Thread-124206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:46:25.657 [DEBUG] [Thread-124206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:46:25.657 [DEBUG] [Thread-124206] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:46:25.657 [DEBUG] [Thread-124206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:46:25.657 [DEBUG] [Thread-124206] [transport.py] [_log()] Compression: none
2025-12-03T21:46:25.657 [DEBUG] [Thread-124206] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:46:25.718 [DEBUG] [Thread-124206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:46:25.718 [DEBUG] [Thread-124206] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:46:25.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:46:25.719 [DEBUG] [Thread-124206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:46:25.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:46:25.773 [DEBUG] [Thread-124206] [transport.py] [_log()] userauth is OK
2025-12-03T21:46:25.773 [DEBUG] [Thread-124206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:46:25.773 [DEBUG] [Thread-124206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:46:25.773 [DEBUG] [Thread-124206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:46:25.773 [DEBUG] [Thread-124206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:46:25.792 [INFO] [Thread-124206] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:46:25.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:46:25.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:46:26.602 [DEBUG] [Thread-124206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:46:26.602 [DEBUG] [Thread-124206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:46:26.650 [DEBUG] [Thread-124206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:46:26.650 [DEBUG] [Thread-124206] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:46:26.659 [DEBUG] [Thread-124206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:46:26.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:46:26.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:46:26.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:46:26.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:46:26.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:46:26.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:46:26.693 [DEBUG] [Thread-124206] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:46:40.188 [DEBUG] [Thread-124208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:54.770 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:54.771 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:55.254 [DEBUG] [Thread-124209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:46:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:46:56.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:46:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:46:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 46, 28), 16.25, 33.02, 0.0, 24.61, 16.27, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:46:57.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:46:28
2025-12-03T21:46:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:46:57.672 [DEBUG] [Thread-124210] [transport.py] [_log()] starting thread (client mode): 0xa271faf0
2025-12-03T21:46:57.672 [DEBUG] [Thread-124210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:46:57.695 [DEBUG] [Thread-124210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:46:57.696 [INFO] [Thread-124210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:57.699 [DEBUG] [Thread-124210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] client lang: <none>
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] server lang: <none>
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] kex follows: False
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] Compression: none
2025-12-03T21:46:57.700 [DEBUG] [Thread-124210] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:46:57.719 [DEBUG] [Thread-124210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:46:57.720 [DEBUG] [Thread-124210] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:46:57.720 [DEBUG] [Thread-124210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:46:57.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:46:57.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:46:57.722 [DEBUG] [Thread-124210] [transport.py] [_log()] userauth is OK
2025-12-03T21:46:57.722 [DEBUG] [Thread-124210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:46:57.722 [DEBUG] [Thread-124210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:46:57.723 [DEBUG] [Thread-124210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:46:57.723 [DEBUG] [Thread-124210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:46:57.740 [INFO] [Thread-124210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:46:57.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:46:58.541 [DEBUG] [Thread-124210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:46:58.541 [DEBUG] [Thread-124210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:46:58.541 [DEBUG] [Thread-124210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:46:58.581 [DEBUG] [Thread-124210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:46:58.582 [DEBUG] [Thread-124210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:46:58.584 [DEBUG] [Thread-124210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:46:58.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:46:58.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:46:58.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:46:58.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:46:58.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:46:58.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:46:58.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:46:58.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.823661 -999.00  +16.30  15.84     38   +2.00 1 1 1 1 1     0    0 14.07 -13.33 ZNESW 15.8 15.8 134.4 24.3 16.6 -25.3 16.4 -24.7 16.2 -23.0 16.5 -23.8
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.823661
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:46:58.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:46:28', tmtdew=16.25, humidity=33.02, cloud=0.0, wind=24.61, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:46:28', seeing=0.97, atlas_timestamp='2025-12-03T19:46:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.01624999999999943, 0.024250000000000327, -0.033500000000000085, -0.01249999999999929, 0.03675000000000139, -0.04750000000000121, -0.020749999999999602, 0.023999999999999133, 0.011499999999999844, -0.03974999999999973, -0.06349999999999945, 0.02850000000000108, 0.01025000000000098, -0.08950000000000102, -0.22100000000000009, -0.006750000000000256, 0.028499999999999304, 0.04099999999999859, 0.003249999999999531, 0.03799999999999848, 0.07174999999999798, -0.06374999999999886, -0.13824999999999932, -0.012000000000000455, 0.026500000000000412, 0.021750000000000824, -0.016500000000000625, 0.11400000000000077, 0.08000000000000185, 0.013000000000001677, -0.18599999999999994, -0.015250000000001762], zp_timestamp='2025-12-03T19:44:00')
2025-12-03T21:46:58.603 [DEBUG] [Thread-124210] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:46:58.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:46:58.695 [DEBUG] [Thread-124213] [transport.py] [_log()] starting thread (client mode): 0xa2752770
2025-12-03T21:46:58.695 [DEBUG] [Thread-124213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:46:58.709 [DEBUG] [Thread-124213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:46:58.710 [INFO] [Thread-124213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:46:58.720 [DEBUG] [Thread-124213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:46:58.720 [DEBUG] [Thread-124213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:46:58.720 [DEBUG] [Thread-124213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:46:58.720 [DEBUG] [Thread-124213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] client lang: <none>
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] server lang: <none>
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] kex follows: False
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:46:58.721 [DEBUG] [Thread-124213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:46:58.722 [DEBUG] [Thread-124213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:46:58.722 [DEBUG] [Thread-124213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:46:58.722 [DEBUG] [Thread-124213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:46:58.722 [DEBUG] [Thread-124213] [transport.py] [_log()] Compression: none
2025-12-03T21:46:58.722 [DEBUG] [Thread-124213] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:46:58.776 [DEBUG] [Thread-124213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:46:58.777 [DEBUG] [Thread-124213] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:46:58.777 [DEBUG] [Thread-124213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:46:58.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:46:58.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:46:58.833 [DEBUG] [Thread-124213] [transport.py] [_log()] userauth is OK
2025-12-03T21:46:58.834 [DEBUG] [Thread-124213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:46:58.834 [DEBUG] [Thread-124213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:46:58.834 [DEBUG] [Thread-124213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:46:58.834 [DEBUG] [Thread-124213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:46:58.853 [INFO] [Thread-124213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:46:58.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:46:58.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:46:59.658 [DEBUG] [Thread-124213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:46:59.658 [DEBUG] [Thread-124213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:46:59.706 [DEBUG] [Thread-124213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:46:59.706 [DEBUG] [Thread-124213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:46:59.715 [DEBUG] [Thread-124213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:46:59.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:46:59.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:46:59.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:46:59.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:46:59.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:46:59.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:46:59.749 [DEBUG] [Thread-124213] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:47:10.289 [DEBUG] [Thread-124215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:12.936 [DEBUG] [Thread-124216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:25.344 [DEBUG] [Thread-124217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:29.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:47:29.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:47:29.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:47:30.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 46, 28), 16.3, 33.02, 0.0, 24.61, 16.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:47:30.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:46:28
2025-12-03T21:47:30.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:47:30.707 [DEBUG] [Thread-124218] [transport.py] [_log()] starting thread (client mode): 0xa2752890
2025-12-03T21:47:30.707 [DEBUG] [Thread-124218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:47:30.727 [DEBUG] [Thread-124218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:47:30.727 [INFO] [Thread-124218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:47:30.730 [DEBUG] [Thread-124218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:47:30.730 [DEBUG] [Thread-124218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:47:30.730 [DEBUG] [Thread-124218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:47:30.730 [DEBUG] [Thread-124218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] client lang: <none>
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] server lang: <none>
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] kex follows: False
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:47:30.731 [DEBUG] [Thread-124218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:47:30.732 [DEBUG] [Thread-124218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:47:30.732 [DEBUG] [Thread-124218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:47:30.732 [DEBUG] [Thread-124218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:47:30.732 [DEBUG] [Thread-124218] [transport.py] [_log()] Compression: none
2025-12-03T21:47:30.732 [DEBUG] [Thread-124218] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:47:30.750 [DEBUG] [Thread-124218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:47:30.750 [DEBUG] [Thread-124218] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:47:30.751 [DEBUG] [Thread-124218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:47:30.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:47:30.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:47:30.753 [DEBUG] [Thread-124218] [transport.py] [_log()] userauth is OK
2025-12-03T21:47:30.753 [DEBUG] [Thread-124218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:47:30.753 [DEBUG] [Thread-124218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:47:30.753 [DEBUG] [Thread-124218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:47:30.753 [DEBUG] [Thread-124218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:47:30.776 [INFO] [Thread-124218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:47:30.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:47:31.395 [DEBUG] [Thread-124218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:47:31.396 [DEBUG] [Thread-124218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:47:31.396 [DEBUG] [Thread-124218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:47:31.437 [DEBUG] [Thread-124218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:47:31.437 [DEBUG] [Thread-124218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:47:31.440 [DEBUG] [Thread-124218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:47:31.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:47:31.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:47:31.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:47:31.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:47:31.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:47:31.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:47:31.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:47:31.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:47:31.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:47:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.824356 -999.00  +16.30  17.56     38   +2.00 1 1 1 1 1     0    0 13.95 -14.00 ZNESW 17.6 17.6 129.4 21.3 16.5 -25.3 16.4 -24.7 16.1 -23.0 16.5 -24.1
2025-12-03T21:47:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:47:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:47:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.824356
2025-12-03T21:47:31.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:47:31.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:47:31.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:47:31.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:47:31.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:47:31.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:46:28', tmtdew=16.3, humidity=33.02, cloud=0.0, wind=24.61, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:47:00', seeing=0.97, atlas_timestamp='2025-12-03T19:47:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:47:31.467 [DEBUG] [Thread-124218] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:47:31.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:47:31.569 [DEBUG] [Thread-124221] [transport.py] [_log()] starting thread (client mode): 0xa51d1b70
2025-12-03T21:47:31.569 [DEBUG] [Thread-124221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:47:31.584 [DEBUG] [Thread-124221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:47:31.584 [INFO] [Thread-124221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:47:31.592 [DEBUG] [Thread-124221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] client lang: <none>
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] server lang: <none>
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] kex follows: False
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:47:31.593 [DEBUG] [Thread-124221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:47:31.594 [DEBUG] [Thread-124221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:47:31.594 [DEBUG] [Thread-124221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:47:31.594 [DEBUG] [Thread-124221] [transport.py] [_log()] Compression: none
2025-12-03T21:47:31.594 [DEBUG] [Thread-124221] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:47:31.649 [DEBUG] [Thread-124221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:47:31.649 [DEBUG] [Thread-124221] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:47:31.650 [DEBUG] [Thread-124221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:47:31.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:47:31.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:47:31.705 [DEBUG] [Thread-124221] [transport.py] [_log()] userauth is OK
2025-12-03T21:47:31.705 [DEBUG] [Thread-124221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:47:31.705 [DEBUG] [Thread-124221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:47:31.706 [DEBUG] [Thread-124221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:47:31.706 [DEBUG] [Thread-124221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:47:31.724 [INFO] [Thread-124221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:47:31.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:47:31.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:47:32.636 [DEBUG] [Thread-124221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:47:32.636 [DEBUG] [Thread-124221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:47:32.684 [DEBUG] [Thread-124221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:47:32.684 [DEBUG] [Thread-124221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:47:32.692 [DEBUG] [Thread-124221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:47:32.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:47:32.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:47:32.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:47:32.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:47:32.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:47:32.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:47:32.724 [DEBUG] [Thread-124221] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:47:40.381 [DEBUG] [Thread-124223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:54.971 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:54.972 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:47:55.437 [DEBUG] [Thread-124224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:02.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:48:02.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:48:02.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:48:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 47, 32), 16.3, 33.02, 0.0, 24.0, 16.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:48:03.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:47:32
2025-12-03T21:48:03.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:48:03.737 [DEBUG] [Thread-124225] [transport.py] [_log()] starting thread (client mode): 0xa2761d80
2025-12-03T21:48:03.737 [DEBUG] [Thread-124225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:48:03.756 [DEBUG] [Thread-124225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:48:03.757 [INFO] [Thread-124225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:48:03.759 [DEBUG] [Thread-124225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:48:03.759 [DEBUG] [Thread-124225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] client lang: <none>
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] server lang: <none>
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] kex follows: False
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] Compression: none
2025-12-03T21:48:03.760 [DEBUG] [Thread-124225] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:48:03.775 [DEBUG] [Thread-124225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:48:03.775 [DEBUG] [Thread-124225] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:48:03.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:48:03.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] userauth is OK
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:48:03.776 [DEBUG] [Thread-124225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:48:03.792 [INFO] [Thread-124225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:48:03.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:48:04.617 [DEBUG] [Thread-124225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:48:04.617 [DEBUG] [Thread-124225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:48:04.617 [DEBUG] [Thread-124225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:48:04.658 [DEBUG] [Thread-124225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:48:04.658 [DEBUG] [Thread-124225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:48:04.660 [DEBUG] [Thread-124225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:48:04.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:48:04.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:48:04.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:48:04.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:48:04.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:48:04.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:48:04.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.824703 -999.00  +16.20  16.93     38   +2.00 1 1 1 1 1     0    0 14.12 -15.06 ZNESW 16.9 16.9 140.6 21.3 16.5 -25.4 16.4 -24.7 16.2 -23.1 16.5 -23.8
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.824703
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:48:04.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:47:32', tmtdew=16.3, humidity=33.02, cloud=0.0, wind=24.0, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:47:32', seeing=0.99, atlas_timestamp='2025-12-03T19:47:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:48:04.679 [DEBUG] [Thread-124225] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:48:04.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:48:04.771 [DEBUG] [Thread-124228] [transport.py] [_log()] starting thread (client mode): 0xa2761ab0
2025-12-03T21:48:04.771 [DEBUG] [Thread-124228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:48:04.786 [DEBUG] [Thread-124228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:48:04.786 [INFO] [Thread-124228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] client lang: <none>
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] server lang: <none>
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] kex follows: False
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] Compression: none
2025-12-03T21:48:04.793 [DEBUG] [Thread-124228] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:48:04.851 [DEBUG] [Thread-124228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:48:04.851 [DEBUG] [Thread-124228] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:48:04.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:48:04.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:48:04.852 [DEBUG] [Thread-124228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:48:04.912 [DEBUG] [Thread-124228] [transport.py] [_log()] userauth is OK
2025-12-03T21:48:04.912 [DEBUG] [Thread-124228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:48:04.912 [DEBUG] [Thread-124228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:48:04.912 [DEBUG] [Thread-124228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:48:04.912 [DEBUG] [Thread-124228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:48:04.926 [INFO] [Thread-124228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:48:04.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:48:04.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:48:05.766 [DEBUG] [Thread-124228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:48:05.766 [DEBUG] [Thread-124228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:48:05.814 [DEBUG] [Thread-124228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:48:05.814 [DEBUG] [Thread-124228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:48:05.822 [DEBUG] [Thread-124228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:48:05.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:48:05.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:48:05.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:48:05.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:48:05.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:48:05.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:48:05.853 [DEBUG] [Thread-124228] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:48:10.470 [DEBUG] [Thread-124230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:13.018 [DEBUG] [Thread-124231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:25.527 [DEBUG] [Thread-124232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:48:35.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:48:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:48:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 48, 4), 16.33, 32.94, 0.0, 22.9, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:48:36.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:48:04
2025-12-03T21:48:36.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:48:36.854 [DEBUG] [Thread-124233] [transport.py] [_log()] starting thread (client mode): 0xa2751d20
2025-12-03T21:48:36.854 [DEBUG] [Thread-124233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:48:36.869 [DEBUG] [Thread-124233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:48:36.869 [INFO] [Thread-124233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:48:36.872 [DEBUG] [Thread-124233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] client lang: <none>
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] server lang: <none>
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] kex follows: False
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] Compression: none
2025-12-03T21:48:36.873 [DEBUG] [Thread-124233] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:48:36.886 [DEBUG] [Thread-124233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:48:36.886 [DEBUG] [Thread-124233] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:48:36.886 [DEBUG] [Thread-124233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:48:36.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:48:36.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:48:36.887 [DEBUG] [Thread-124233] [transport.py] [_log()] userauth is OK
2025-12-03T21:48:36.887 [DEBUG] [Thread-124233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:48:36.887 [DEBUG] [Thread-124233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:48:36.887 [DEBUG] [Thread-124233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:48:36.887 [DEBUG] [Thread-124233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:48:36.913 [INFO] [Thread-124233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:48:36.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:48:37.547 [DEBUG] [Thread-124233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:48:37.547 [DEBUG] [Thread-124233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:48:37.547 [DEBUG] [Thread-124233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:48:37.589 [DEBUG] [Thread-124233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:48:37.589 [DEBUG] [Thread-124233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:48:37.591 [DEBUG] [Thread-124233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:48:37.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:48:37.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:48:37.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:48:37.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:48:37.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:48:37.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:48:37.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.825050 -999.00  +16.30  17.07     38   +2.00 1 1 1 1 1     0    0 14.11 -16.89 ZNESW 17.1 17.1 140.4 24.4 16.5 -25.3 16.4 -24.6 16.2 -23.1 16.4 -24.0
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.825050
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:48:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:48:04', tmtdew=16.33, humidity=32.94, cloud=0.0, wind=22.9, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:48:04', seeing=0.92, atlas_timestamp='2025-12-03T19:48:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:48:37.611 [DEBUG] [Thread-124233] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:48:37.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:48:37.707 [DEBUG] [Thread-124236] [transport.py] [_log()] starting thread (client mode): 0xa514d3c0
2025-12-03T21:48:37.707 [DEBUG] [Thread-124236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:48:37.722 [DEBUG] [Thread-124236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:48:37.722 [INFO] [Thread-124236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] client lang: <none>
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] server lang: <none>
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] kex follows: False
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:48:37.729 [DEBUG] [Thread-124236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:48:37.730 [DEBUG] [Thread-124236] [transport.py] [_log()] Compression: none
2025-12-03T21:48:37.730 [DEBUG] [Thread-124236] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:48:37.787 [DEBUG] [Thread-124236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:48:37.787 [DEBUG] [Thread-124236] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:48:37.788 [DEBUG] [Thread-124236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:48:37.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:48:37.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:48:37.845 [DEBUG] [Thread-124236] [transport.py] [_log()] userauth is OK
2025-12-03T21:48:37.845 [DEBUG] [Thread-124236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:48:37.845 [DEBUG] [Thread-124236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:48:37.845 [DEBUG] [Thread-124236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:48:37.845 [DEBUG] [Thread-124236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:48:37.862 [INFO] [Thread-124236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:48:37.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:48:37.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:48:38.725 [DEBUG] [Thread-124236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:48:38.726 [DEBUG] [Thread-124236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:48:38.773 [DEBUG] [Thread-124236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:48:38.773 [DEBUG] [Thread-124236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:48:38.782 [DEBUG] [Thread-124236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:48:38.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:48:38.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:48:38.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:48:38.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:48:38.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:48:38.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:48:38.813 [DEBUG] [Thread-124236] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:48:40.562 [DEBUG] [Thread-124238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:55.169 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:55.170 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:48:55.621 [DEBUG] [Thread-124239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:08.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:49:08.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:49:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:49:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 48, 36), 16.3, 32.9, 0.0, 23.47, 16.31, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:49:09.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:48:36
2025-12-03T21:49:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:49:09.846 [DEBUG] [Thread-124240] [transport.py] [_log()] starting thread (client mode): 0xa5194fa0
2025-12-03T21:49:09.846 [DEBUG] [Thread-124240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:49:09.866 [DEBUG] [Thread-124240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:49:09.866 [INFO] [Thread-124240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] client lang: <none>
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] server lang: <none>
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] kex follows: False
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] Compression: none
2025-12-03T21:49:09.869 [DEBUG] [Thread-124240] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:49:09.893 [DEBUG] [Thread-124240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:49:09.893 [DEBUG] [Thread-124240] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:49:09.894 [DEBUG] [Thread-124240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:49:09.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:49:09.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:49:09.895 [DEBUG] [Thread-124240] [transport.py] [_log()] userauth is OK
2025-12-03T21:49:09.895 [DEBUG] [Thread-124240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:49:09.895 [DEBUG] [Thread-124240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:49:09.895 [DEBUG] [Thread-124240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:49:09.895 [DEBUG] [Thread-124240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:49:09.914 [INFO] [Thread-124240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:49:09.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:49:10.583 [DEBUG] [Thread-124240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:49:10.583 [DEBUG] [Thread-124240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:49:10.583 [DEBUG] [Thread-124240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:49:10.623 [DEBUG] [Thread-124240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:49:10.624 [DEBUG] [Thread-124240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:49:10.626 [DEBUG] [Thread-124240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:49:10.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:49:10.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:49:10.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:49:10.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:49:10.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:49:10.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:49:10.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.825397 -999.00  +16.20  19.74     38   +2.00 1 1 1 1 1     0    0 14.08 -17.86 ZNESW 19.7 19.7 135.8 27.6 16.5 -25.3 16.4 -24.7 16.2 -23.2 16.5 -23.9
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.825397
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:49:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:48:36', tmtdew=16.3, humidity=32.9, cloud=0.0, wind=23.47, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:49:08', seeing=0.98, atlas_timestamp='2025-12-03T19:48:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:49:10.637 [DEBUG] [Thread-124240] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:49:10.659 [DEBUG] [Thread-124243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:10.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:49:10.730 [DEBUG] [Thread-124244] [transport.py] [_log()] starting thread (client mode): 0xa272ada0
2025-12-03T21:49:10.730 [DEBUG] [Thread-124244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:49:10.744 [DEBUG] [Thread-124244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:49:10.744 [INFO] [Thread-124244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:49:10.751 [DEBUG] [Thread-124244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:49:10.752 [DEBUG] [Thread-124244] [transport.py] [_log()] client lang: <none>
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] server lang: <none>
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] kex follows: False
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:49:10.753 [DEBUG] [Thread-124244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:49:10.754 [DEBUG] [Thread-124244] [transport.py] [_log()] Compression: none
2025-12-03T21:49:10.754 [DEBUG] [Thread-124244] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:49:10.814 [DEBUG] [Thread-124244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:49:10.815 [DEBUG] [Thread-124244] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:49:10.815 [DEBUG] [Thread-124244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:49:10.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:49:10.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:49:10.876 [DEBUG] [Thread-124244] [transport.py] [_log()] userauth is OK
2025-12-03T21:49:10.877 [DEBUG] [Thread-124244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:49:10.877 [DEBUG] [Thread-124244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:49:10.877 [DEBUG] [Thread-124244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:49:10.877 [DEBUG] [Thread-124244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:49:10.896 [INFO] [Thread-124244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:49:10.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:49:10.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:49:11.717 [DEBUG] [Thread-124244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:49:11.717 [DEBUG] [Thread-124244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:49:11.765 [DEBUG] [Thread-124244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:49:11.765 [DEBUG] [Thread-124244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:49:11.774 [DEBUG] [Thread-124244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:49:11.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:49:11.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:49:11.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:49:11.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:49:11.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:49:11.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:49:11.808 [DEBUG] [Thread-124244] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:49:13.079 [DEBUG] [Thread-124246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:25.708 [DEBUG] [Thread-124247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:40.740 [DEBUG] [Thread-124248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:41.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:49:41.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:49:41.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:49:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 49, 8), 16.27, 32.95, 0.0, 23.33, 16.24, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:49:42.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:49:08
2025-12-03T21:49:42.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:49:42.829 [DEBUG] [Thread-124249] [transport.py] [_log()] starting thread (client mode): 0xa27616c0
2025-12-03T21:49:42.829 [DEBUG] [Thread-124249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:49:42.850 [DEBUG] [Thread-124249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:49:42.850 [INFO] [Thread-124249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:49:42.852 [DEBUG] [Thread-124249] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:49:42.852 [DEBUG] [Thread-124249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:49:42.852 [DEBUG] [Thread-124249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:49:42.852 [DEBUG] [Thread-124249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] client lang: <none>
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] server lang: <none>
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] kex follows: False
2025-12-03T21:49:42.853 [DEBUG] [Thread-124249] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] Compression: none
2025-12-03T21:49:42.854 [DEBUG] [Thread-124249] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:49:42.867 [DEBUG] [Thread-124249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:49:42.868 [DEBUG] [Thread-124249] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:49:42.868 [DEBUG] [Thread-124249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:49:42.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:49:42.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:49:42.872 [DEBUG] [Thread-124249] [transport.py] [_log()] userauth is OK
2025-12-03T21:49:42.872 [DEBUG] [Thread-124249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:49:42.872 [DEBUG] [Thread-124249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:49:42.872 [DEBUG] [Thread-124249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:49:42.872 [DEBUG] [Thread-124249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:49:42.908 [INFO] [Thread-124249] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:49:42.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:49:43.523 [DEBUG] [Thread-124249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:49:43.523 [DEBUG] [Thread-124249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:49:43.523 [DEBUG] [Thread-124249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:49:43.564 [DEBUG] [Thread-124249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:49:43.564 [DEBUG] [Thread-124249] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:49:43.567 [DEBUG] [Thread-124249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:49:43.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:49:43.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:49:43.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:49:43.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:49:43.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:49:43.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:49:43.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:49:43.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:49:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:49:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.825745 -999.00  +16.30  20.91     38   +2.20 1 1 1 1 1     0    0 13.64 -18.76 ZNESW 20.9 20.9 139.6 28.6 16.5 -25.2 16.5 -24.7 16.2 -23.0 16.5 -23.8
2025-12-03T21:49:43.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:49:43.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:49:43.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.825745
2025-12-03T21:49:43.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:49:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:49:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:49:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:49:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:49:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:49:08', tmtdew=16.27, humidity=32.95, cloud=0.0, wind=23.33, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:49:40', seeing=0.98, atlas_timestamp='2025-12-03T19:49:04.368', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:49:43.595 [DEBUG] [Thread-124249] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:49:43.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:49:43.699 [DEBUG] [Thread-124252] [transport.py] [_log()] starting thread (client mode): 0xa2761ae0
2025-12-03T21:49:43.700 [DEBUG] [Thread-124252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:49:43.714 [DEBUG] [Thread-124252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:49:43.714 [INFO] [Thread-124252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:49:43.721 [DEBUG] [Thread-124252] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:49:43.721 [DEBUG] [Thread-124252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] client lang: <none>
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] server lang: <none>
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] kex follows: False
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:49:43.722 [DEBUG] [Thread-124252] [transport.py] [_log()] Compression: none
2025-12-03T21:49:43.723 [DEBUG] [Thread-124252] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:49:43.780 [DEBUG] [Thread-124252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:49:43.781 [DEBUG] [Thread-124252] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:49:43.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:49:43.781 [DEBUG] [Thread-124252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:49:43.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:49:43.837 [DEBUG] [Thread-124252] [transport.py] [_log()] userauth is OK
2025-12-03T21:49:43.837 [DEBUG] [Thread-124252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:49:43.837 [DEBUG] [Thread-124252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:49:43.837 [DEBUG] [Thread-124252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:49:43.837 [DEBUG] [Thread-124252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:49:43.856 [INFO] [Thread-124252] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:49:43.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:49:43.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:49:44.682 [DEBUG] [Thread-124252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:49:44.682 [DEBUG] [Thread-124252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:49:44.731 [DEBUG] [Thread-124252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:49:44.731 [DEBUG] [Thread-124252] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:49:44.740 [DEBUG] [Thread-124252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:49:44.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:49:44.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:49:44.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:49:44.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:49:44.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:49:44.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:49:44.775 [DEBUG] [Thread-124252] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:49:55.370 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:55.371 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:49:55.778 [DEBUG] [Thread-124254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:10.834 [DEBUG] [Thread-124255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:13.143 [DEBUG] [Thread-124256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:50:14.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:50:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:50:15.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 49, 40), 16.13, 33.45, 0.0, 24.84, 16.26, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:50:15.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:49:40
2025-12-03T21:50:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:50:15.769 [DEBUG] [Thread-124257] [transport.py] [_log()] starting thread (client mode): 0xa2760c40
2025-12-03T21:50:15.769 [DEBUG] [Thread-124257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:50:15.790 [DEBUG] [Thread-124257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:50:15.790 [INFO] [Thread-124257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:50:15.793 [DEBUG] [Thread-124257] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:50:15.793 [DEBUG] [Thread-124257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:50:15.793 [DEBUG] [Thread-124257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:50:15.793 [DEBUG] [Thread-124257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:15.793 [DEBUG] [Thread-124257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] client lang: <none>
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] server lang: <none>
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] kex follows: False
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] Compression: none
2025-12-03T21:50:15.794 [DEBUG] [Thread-124257] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:50:15.814 [DEBUG] [Thread-124257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:50:15.814 [DEBUG] [Thread-124257] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:50:15.815 [DEBUG] [Thread-124257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:50:15.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:50:15.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:50:15.817 [DEBUG] [Thread-124257] [transport.py] [_log()] userauth is OK
2025-12-03T21:50:15.817 [DEBUG] [Thread-124257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:50:15.817 [DEBUG] [Thread-124257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:50:15.817 [DEBUG] [Thread-124257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:50:15.817 [DEBUG] [Thread-124257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:50:15.852 [INFO] [Thread-124257] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:50:15.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:50:16.595 [DEBUG] [Thread-124257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:50:16.595 [DEBUG] [Thread-124257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:50:16.595 [DEBUG] [Thread-124257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:50:16.636 [DEBUG] [Thread-124257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:50:16.636 [DEBUG] [Thread-124257] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:50:16.639 [DEBUG] [Thread-124257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:50:16.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:50:16.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:50:16.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:50:16.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:50:16.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:50:16.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:50:16.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:50:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:50:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:50:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.826092 -999.00  +16.30  19.45     38   +2.10 1 1 1 1 1     0    0 13.88 -19.99 ZNESW 19.4 19.4 146.8 24.6 16.6 -25.3 16.4 -24.7 16.2 -23.1 16.5 -23.9
2025-12-03T21:50:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:50:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:50:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.826092
2025-12-03T21:50:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:50:16.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:50:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:50:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:50:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:50:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:49:40', tmtdew=16.13, humidity=33.45, cloud=0.0, wind=24.84, temperature=16.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:50:12', seeing=0.9, atlas_timestamp='2025-12-03T19:49:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.02674999999999983, -0.011749999999999261, -0.040500000000001535, 0.028499999999999304, 0.02125000000000199, -0.06250000000000178, -0.025749999999998607, 0.0034999999999989484, 0.0030000000000001137, 0.051750000000000185, -0.045999999999999375, 0.04800000000000004, 0.02824999999999811, -0.07250000000000156, -0.12700000000000067, 0.0072499999999990905, 0.009500000000000952, 0.02549999999999919, -0.0027500000000006963, 0.02099999999999902, 0.04174999999999862, -0.07174999999999798, -0.1412500000000012, -0.012500000000001066, 0.04600000000000115, 0.029749999999999943, 0.014499999999999957, 0.16300000000000026, 0.032000000000001805, -0.010999999999999233, -0.2629999999999999, -0.00575000000000081], zp_timestamp='2025-12-03T19:46:00')
2025-12-03T21:50:16.678 [DEBUG] [Thread-124257] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:50:16.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:50:16.780 [DEBUG] [Thread-124260] [transport.py] [_log()] starting thread (client mode): 0xa2725db0
2025-12-03T21:50:16.781 [DEBUG] [Thread-124260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:50:16.795 [DEBUG] [Thread-124260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:50:16.795 [INFO] [Thread-124260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:50:16.803 [DEBUG] [Thread-124260] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:50:16.803 [DEBUG] [Thread-124260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:50:16.803 [DEBUG] [Thread-124260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:50:16.803 [DEBUG] [Thread-124260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:16.803 [DEBUG] [Thread-124260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] client lang: <none>
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] server lang: <none>
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] kex follows: False
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:50:16.804 [DEBUG] [Thread-124260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:50:16.805 [DEBUG] [Thread-124260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:50:16.805 [DEBUG] [Thread-124260] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:50:16.805 [DEBUG] [Thread-124260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:50:16.805 [DEBUG] [Thread-124260] [transport.py] [_log()] Compression: none
2025-12-03T21:50:16.805 [DEBUG] [Thread-124260] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:50:16.864 [DEBUG] [Thread-124260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:50:16.865 [DEBUG] [Thread-124260] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:50:16.865 [DEBUG] [Thread-124260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:50:16.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:50:16.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:50:16.920 [DEBUG] [Thread-124260] [transport.py] [_log()] userauth is OK
2025-12-03T21:50:16.921 [DEBUG] [Thread-124260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:50:16.921 [DEBUG] [Thread-124260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:50:16.921 [DEBUG] [Thread-124260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:50:16.921 [DEBUG] [Thread-124260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:50:16.939 [INFO] [Thread-124260] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:50:16.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:50:16.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:50:17.761 [DEBUG] [Thread-124260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:50:17.761 [DEBUG] [Thread-124260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:50:17.810 [DEBUG] [Thread-124260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:50:17.810 [DEBUG] [Thread-124260] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:50:17.818 [DEBUG] [Thread-124260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:50:17.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:50:17.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:50:17.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:50:17.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:50:17.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:50:17.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:50:17.852 [DEBUG] [Thread-124260] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:50:25.872 [DEBUG] [Thread-124262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:40.937 [DEBUG] [Thread-124263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:50:47.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:50:47.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:50:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 50, 44), 16.17, 33.47, 0.0, 21.72, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:50:48.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:50:44
2025-12-03T21:50:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:50:48.822 [DEBUG] [Thread-124264] [transport.py] [_log()] starting thread (client mode): 0xa2726800
2025-12-03T21:50:48.822 [DEBUG] [Thread-124264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:50:48.843 [DEBUG] [Thread-124264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:50:48.843 [INFO] [Thread-124264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] client lang: <none>
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] server lang: <none>
2025-12-03T21:50:48.846 [DEBUG] [Thread-124264] [transport.py] [_log()] kex follows: False
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] Compression: none
2025-12-03T21:50:48.847 [DEBUG] [Thread-124264] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:50:48.867 [DEBUG] [Thread-124264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:50:48.868 [DEBUG] [Thread-124264] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:50:48.868 [DEBUG] [Thread-124264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:50:48.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:50:48.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:50:48.870 [DEBUG] [Thread-124264] [transport.py] [_log()] userauth is OK
2025-12-03T21:50:48.870 [DEBUG] [Thread-124264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:50:48.871 [DEBUG] [Thread-124264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:50:48.871 [DEBUG] [Thread-124264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:50:48.871 [DEBUG] [Thread-124264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:50:48.895 [INFO] [Thread-124264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:50:48.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:50:49.508 [DEBUG] [Thread-124264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:50:49.508 [DEBUG] [Thread-124264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:50:49.509 [DEBUG] [Thread-124264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:50:49.550 [DEBUG] [Thread-124264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:50:49.550 [DEBUG] [Thread-124264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:50:49.553 [DEBUG] [Thread-124264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:50:49.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:50:49.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:50:49.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:50:49.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:50:49.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:50:49.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:50:49.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:50:49.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.826786 -999.00  +16.30  18.21     38   +2.10 1 1 1 1 1     0    0 13.90 -19.87 ZNESW 18.2 18.2 144.2 24.8 16.5 -25.2 16.4 -24.6 16.1 -23.0 16.5 -23.7
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.826786
2025-12-03T21:50:49.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:50:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:50:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:50:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:50:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:50:49.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:50:44', tmtdew=16.17, humidity=33.47, cloud=0.0, wind=21.72, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:50:44', seeing=0.85, atlas_timestamp='2025-12-03T19:50:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:49:00')
2025-12-03T21:50:49.579 [DEBUG] [Thread-124264] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:50:49.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:50:49.685 [DEBUG] [Thread-124267] [transport.py] [_log()] starting thread (client mode): 0xa2724070
2025-12-03T21:50:49.685 [DEBUG] [Thread-124267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:50:49.700 [DEBUG] [Thread-124267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:50:49.700 [INFO] [Thread-124267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:50:49.708 [DEBUG] [Thread-124267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] client lang: <none>
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] server lang: <none>
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] kex follows: False
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:50:49.709 [DEBUG] [Thread-124267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:50:49.710 [DEBUG] [Thread-124267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:50:49.710 [DEBUG] [Thread-124267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:50:49.710 [DEBUG] [Thread-124267] [transport.py] [_log()] Compression: none
2025-12-03T21:50:49.710 [DEBUG] [Thread-124267] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:50:49.771 [DEBUG] [Thread-124267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:50:49.772 [DEBUG] [Thread-124267] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:50:49.772 [DEBUG] [Thread-124267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:50:49.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:50:49.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:50:49.830 [DEBUG] [Thread-124267] [transport.py] [_log()] userauth is OK
2025-12-03T21:50:49.831 [DEBUG] [Thread-124267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:50:49.831 [DEBUG] [Thread-124267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:50:49.831 [DEBUG] [Thread-124267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:50:49.831 [DEBUG] [Thread-124267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:50:49.854 [INFO] [Thread-124267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:50:49.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:50:49.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:50:50.704 [DEBUG] [Thread-124267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:50:50.704 [DEBUG] [Thread-124267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:50:50.753 [DEBUG] [Thread-124267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:50:50.753 [DEBUG] [Thread-124267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:50:50.762 [DEBUG] [Thread-124267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:50:50.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:50:50.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:50:50.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:50:50.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:50:50.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:50:50.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:50:50.804 [DEBUG] [Thread-124267] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:50:52.633 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:55.570 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:55.571 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:55.830 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:50:55.975 [DEBUG] [Thread-124269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:00.889 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:06.263 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:11.036 [DEBUG] [Thread-124270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:13.196 [DEBUG] [Thread-124271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:51:20.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:51:20.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:51:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 51, 16), 16.16, 33.49, 0.0, 21.51, 16.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:51:21.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:51:16
2025-12-03T21:51:21.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:51:21.793 [DEBUG] [Thread-124272] [transport.py] [_log()] starting thread (client mode): 0xa5195210
2025-12-03T21:51:21.793 [DEBUG] [Thread-124272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:51:21.813 [DEBUG] [Thread-124272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:51:21.813 [INFO] [Thread-124272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:51:21.817 [DEBUG] [Thread-124272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] client lang: <none>
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] server lang: <none>
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] kex follows: False
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:51:21.818 [DEBUG] [Thread-124272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:51:21.819 [DEBUG] [Thread-124272] [transport.py] [_log()] Compression: none
2025-12-03T21:51:21.819 [DEBUG] [Thread-124272] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:51:21.837 [DEBUG] [Thread-124272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:51:21.837 [DEBUG] [Thread-124272] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:51:21.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:51:21.838 [DEBUG] [Thread-124272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:51:21.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:51:21.840 [DEBUG] [Thread-124272] [transport.py] [_log()] userauth is OK
2025-12-03T21:51:21.840 [DEBUG] [Thread-124272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:51:21.840 [DEBUG] [Thread-124272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:51:21.840 [DEBUG] [Thread-124272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:51:21.840 [DEBUG] [Thread-124272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:51:21.858 [INFO] [Thread-124272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:51:21.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:51:22.465 [DEBUG] [Thread-124272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:51:22.465 [DEBUG] [Thread-124272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:51:22.465 [DEBUG] [Thread-124272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:51:22.506 [DEBUG] [Thread-124272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:51:22.506 [DEBUG] [Thread-124272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:51:22.509 [DEBUG] [Thread-124272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:51:22.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:51:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:51:22.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:51:22.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:51:22.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:51:22.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:51:22.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:51:22.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:51:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:51:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.827134 -999.00  +16.30  16.36     38   +2.00 1 1 1 1 1     0    0 13.82 -20.27 ZNESW 16.4 16.4 147.2 27.7 16.5 -25.5 16.4 -24.7 16.2 -23.2 16.4 -24.0
2025-12-03T21:51:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:51:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:51:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.827134
2025-12-03T21:51:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:51:22.532 [DEBUG] [Thread-124272] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:51:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:51:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:51:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:51:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:51:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:51:16', tmtdew=16.16, humidity=33.49, cloud=0.0, wind=21.51, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:51:16', seeing=0.9, atlas_timestamp='2025-12-03T19:51:04.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:49:00')
2025-12-03T21:51:22.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:51:22.638 [DEBUG] [Thread-124275] [transport.py] [_log()] starting thread (client mode): 0xa2729210
2025-12-03T21:51:22.638 [DEBUG] [Thread-124275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:51:22.656 [DEBUG] [Thread-124275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:51:22.657 [INFO] [Thread-124275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:51:22.666 [DEBUG] [Thread-124275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:51:22.666 [DEBUG] [Thread-124275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] client lang: <none>
2025-12-03T21:51:22.667 [DEBUG] [Thread-124275] [transport.py] [_log()] server lang: <none>
2025-12-03T21:51:22.668 [DEBUG] [Thread-124275] [transport.py] [_log()] kex follows: False
2025-12-03T21:51:22.668 [DEBUG] [Thread-124275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:51:22.668 [DEBUG] [Thread-124275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:51:22.668 [DEBUG] [Thread-124275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:51:22.669 [DEBUG] [Thread-124275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:51:22.669 [DEBUG] [Thread-124275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:51:22.669 [DEBUG] [Thread-124275] [transport.py] [_log()] Compression: none
2025-12-03T21:51:22.669 [DEBUG] [Thread-124275] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:51:22.725 [DEBUG] [Thread-124275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:51:22.725 [DEBUG] [Thread-124275] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:51:22.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:51:22.726 [DEBUG] [Thread-124275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:51:22.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:51:22.781 [DEBUG] [Thread-124275] [transport.py] [_log()] userauth is OK
2025-12-03T21:51:22.781 [DEBUG] [Thread-124275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:51:22.781 [DEBUG] [Thread-124275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:51:22.781 [DEBUG] [Thread-124275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:51:22.781 [DEBUG] [Thread-124275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:51:22.800 [INFO] [Thread-124275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:51:22.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:51:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:51:23.644 [DEBUG] [Thread-124275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:51:23.645 [DEBUG] [Thread-124275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:51:23.693 [DEBUG] [Thread-124275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:51:23.693 [DEBUG] [Thread-124275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:51:23.702 [DEBUG] [Thread-124275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:51:23.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:51:23.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:51:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:51:23.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:51:23.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:51:23.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:51:23.736 [DEBUG] [Thread-124275] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:51:25.656 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:26.070 [DEBUG] [Thread-124277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:30.005 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:39.410 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:41.140 [DEBUG] [Thread-124278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:43.770 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:50.735 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:51:53.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:51:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:51:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 51, 48), 16.06, 33.6, 0.0, 25.39, 16.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:51:54.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:51:48
2025-12-03T21:51:54.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:51:54.755 [DEBUG] [Thread-124279] [transport.py] [_log()] starting thread (client mode): 0xa272b220
2025-12-03T21:51:54.755 [DEBUG] [Thread-124279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:51:54.775 [DEBUG] [Thread-124279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:51:54.775 [INFO] [Thread-124279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:51:54.778 [DEBUG] [Thread-124279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] client lang: <none>
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] server lang: <none>
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] kex follows: False
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] Compression: none
2025-12-03T21:51:54.779 [DEBUG] [Thread-124279] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:51:54.795 [DEBUG] [Thread-124279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:51:54.795 [DEBUG] [Thread-124279] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:51:54.795 [DEBUG] [Thread-124279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:51:54.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:51:54.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:51:54.836 [DEBUG] [Thread-124279] [transport.py] [_log()] userauth is OK
2025-12-03T21:51:54.836 [DEBUG] [Thread-124279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:51:54.836 [DEBUG] [Thread-124279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:51:54.836 [DEBUG] [Thread-124279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:51:54.836 [DEBUG] [Thread-124279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:51:54.851 [INFO] [Thread-124279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:51:54.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:51:55.107 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:55.524 [DEBUG] [Thread-124279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:51:55.524 [DEBUG] [Thread-124279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:51:55.524 [DEBUG] [Thread-124279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:51:55.566 [DEBUG] [Thread-124279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:51:55.566 [DEBUG] [Thread-124279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:51:55.568 [DEBUG] [Thread-124279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:51:55.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:51:55.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:51:55.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:51:55.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:51:55.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:51:55.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:51:55.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.827481 -999.00  +16.30  19.77     38   +2.10 1 1 1 1 1     0    0 14.02 -19.99 ZNESW 19.8 19.8 137.6 27.8 16.5 -25.2 16.4 -24.8 16.1 -23.1 16.4 -23.9
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.827481
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:51:55.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:51:48', tmtdew=16.06, humidity=33.6, cloud=0.0, wind=25.39, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:51:48', seeing=1.25, atlas_timestamp='2025-12-03T19:51:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:49:00')
2025-12-03T21:51:55.587 [DEBUG] [Thread-124279] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:51:55.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:51:55.679 [DEBUG] [Thread-124282] [transport.py] [_log()] starting thread (client mode): 0xa5197910
2025-12-03T21:51:55.679 [DEBUG] [Thread-124282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:51:55.693 [DEBUG] [Thread-124282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:51:55.693 [INFO] [Thread-124282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] client lang: <none>
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] server lang: <none>
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] kex follows: False
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] Compression: none
2025-12-03T21:51:55.701 [DEBUG] [Thread-124282] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:51:55.759 [DEBUG] [Thread-124282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:51:55.759 [DEBUG] [Thread-124282] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:51:55.759 [DEBUG] [Thread-124282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:51:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:51:55.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:51:55.769 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:55.770 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:55.816 [DEBUG] [Thread-124282] [transport.py] [_log()] userauth is OK
2025-12-03T21:51:55.816 [DEBUG] [Thread-124282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:51:55.816 [DEBUG] [Thread-124282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:51:55.816 [DEBUG] [Thread-124282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:51:55.816 [DEBUG] [Thread-124282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:51:55.830 [INFO] [Thread-124282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:51:55.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:51:55.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:51:56.172 [DEBUG] [Thread-124284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:51:56.664 [DEBUG] [Thread-124282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:51:56.664 [DEBUG] [Thread-124282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:51:56.712 [DEBUG] [Thread-124282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:51:56.712 [DEBUG] [Thread-124282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:51:56.721 [DEBUG] [Thread-124282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:51:56.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:51:56.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:51:56.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:51:56.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:51:56.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:51:56.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:51:56.755 [DEBUG] [Thread-124282] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:52:11.223 [DEBUG] [Thread-124285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:13.255 [DEBUG] [Thread-124286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:26.257 [DEBUG] [Thread-124287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:26.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:52:26.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:52:26.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:52:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 52, 21), 16.06, 33.6, 0.0, 23.73, 16.21, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:52:27.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:52:21
2025-12-03T21:52:27.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:52:27.740 [DEBUG] [Thread-124288] [transport.py] [_log()] starting thread (client mode): 0xa2760ee0
2025-12-03T21:52:27.740 [DEBUG] [Thread-124288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:52:27.761 [DEBUG] [Thread-124288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:52:27.762 [INFO] [Thread-124288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:52:27.763 [DEBUG] [Thread-124288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] client lang: <none>
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] server lang: <none>
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] kex follows: False
2025-12-03T21:52:27.764 [DEBUG] [Thread-124288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] Compression: none
2025-12-03T21:52:27.765 [DEBUG] [Thread-124288] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:52:27.777 [DEBUG] [Thread-124288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:52:27.777 [DEBUG] [Thread-124288] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:52:27.778 [DEBUG] [Thread-124288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:52:27.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:52:27.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:52:27.780 [DEBUG] [Thread-124288] [transport.py] [_log()] userauth is OK
2025-12-03T21:52:27.780 [DEBUG] [Thread-124288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:52:27.780 [DEBUG] [Thread-124288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:52:27.780 [DEBUG] [Thread-124288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:52:27.780 [DEBUG] [Thread-124288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:52:27.804 [INFO] [Thread-124288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:52:27.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:52:28.447 [DEBUG] [Thread-124288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:52:28.447 [DEBUG] [Thread-124288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:52:28.447 [DEBUG] [Thread-124288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:52:28.488 [DEBUG] [Thread-124288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:52:28.488 [DEBUG] [Thread-124288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:52:28.490 [DEBUG] [Thread-124288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:52:28.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:52:28.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:52:28.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:52:28.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:52:28.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:52:28.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:52:28.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:52:28.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.827828 -999.00  +16.30  19.13     38   +2.20 1 1 1 1 1     0    0 13.80 -20.11 ZNESW 19.1 19.1 148.4 26.1 16.5 -25.3 16.4 -24.7 16.1 -23.0 16.5 -24.0
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.827828
2025-12-03T21:52:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:52:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:52:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:52:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:52:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:52:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:52:21', tmtdew=16.06, humidity=33.6, cloud=0.0, wind=23.73, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:52:21', seeing=0.96, atlas_timestamp='2025-12-03T19:52:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:49:00')
2025-12-03T21:52:28.514 [DEBUG] [Thread-124288] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:52:28.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:52:28.617 [DEBUG] [Thread-124291] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T21:52:28.618 [DEBUG] [Thread-124291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:52:28.632 [DEBUG] [Thread-124291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:52:28.632 [INFO] [Thread-124291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:52:28.640 [DEBUG] [Thread-124291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] client lang: <none>
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] server lang: <none>
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] kex follows: False
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:52:28.641 [DEBUG] [Thread-124291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:52:28.642 [DEBUG] [Thread-124291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:52:28.642 [DEBUG] [Thread-124291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:52:28.642 [DEBUG] [Thread-124291] [transport.py] [_log()] Compression: none
2025-12-03T21:52:28.642 [DEBUG] [Thread-124291] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:52:28.705 [DEBUG] [Thread-124291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:52:28.705 [DEBUG] [Thread-124291] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:52:28.706 [DEBUG] [Thread-124291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:52:28.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:52:28.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:52:28.760 [DEBUG] [Thread-124291] [transport.py] [_log()] userauth is OK
2025-12-03T21:52:28.761 [DEBUG] [Thread-124291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:52:28.761 [DEBUG] [Thread-124291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:52:28.761 [DEBUG] [Thread-124291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:52:28.761 [DEBUG] [Thread-124291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:52:28.781 [INFO] [Thread-124291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:52:28.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:52:28.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:52:29.591 [DEBUG] [Thread-124291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:52:29.591 [DEBUG] [Thread-124291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:52:29.640 [DEBUG] [Thread-124291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:52:29.640 [DEBUG] [Thread-124291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:52:29.648 [DEBUG] [Thread-124291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:52:29.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:52:29.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:52:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:52:29.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:52:29.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:52:29.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:52:29.680 [DEBUG] [Thread-124291] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:52:41.292 [DEBUG] [Thread-124293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:53.761 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:55.968 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:55.969 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:56.348 [DEBUG] [Thread-124294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:56.827 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:52:59.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:52:59.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:52:59.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:53:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 52, 53), 16.11, 33.6, 0.0, 23.48, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:53:00.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:52:53
2025-12-03T21:53:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:53:00.644 [DEBUG] [Thread-124295] [transport.py] [_log()] starting thread (client mode): 0xa272b130
2025-12-03T21:53:00.645 [DEBUG] [Thread-124295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:53:00.665 [DEBUG] [Thread-124295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:53:00.665 [INFO] [Thread-124295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:53:00.667 [DEBUG] [Thread-124295] [transport.py] [_log()] client lang: <none>
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] server lang: <none>
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] kex follows: False
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] Compression: none
2025-12-03T21:53:00.668 [DEBUG] [Thread-124295] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:53:00.683 [DEBUG] [Thread-124295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:53:00.683 [DEBUG] [Thread-124295] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:53:00.684 [DEBUG] [Thread-124295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:53:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:53:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:53:00.685 [DEBUG] [Thread-124295] [transport.py] [_log()] userauth is OK
2025-12-03T21:53:00.685 [DEBUG] [Thread-124295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:53:00.686 [DEBUG] [Thread-124295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:53:00.686 [DEBUG] [Thread-124295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:53:00.686 [DEBUG] [Thread-124295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:53:00.703 [INFO] [Thread-124295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:53:00.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:53:01.281 [DEBUG] [Thread-124295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:53:01.282 [DEBUG] [Thread-124295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:53:01.282 [DEBUG] [Thread-124295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:53:01.323 [DEBUG] [Thread-124295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:53:01.323 [DEBUG] [Thread-124295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:53:01.325 [DEBUG] [Thread-124295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:53:01.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:53:01.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:53:01.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:53:01.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:53:01.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:53:01.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:53:01.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.828175 -999.00  +16.30  20.64     38   +2.20 1 1 1 1 1     0    0 13.87 -21.26 ZNESW 20.6 20.6 143.0 27.3 16.5 -25.2 16.5 -24.8 16.2 -23.1 16.4 -23.9
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:53:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.828175
2025-12-03T21:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:53:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:53:01.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:52:53', tmtdew=16.11, humidity=33.6, cloud=0.0, wind=23.48, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:52:53', seeing=0.96, atlas_timestamp='2025-12-03T19:52:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:49:00')
2025-12-03T21:53:01.348 [DEBUG] [Thread-124295] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:53:01.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:53:01.473 [DEBUG] [Thread-124298] [transport.py] [_log()] starting thread (client mode): 0xa2761000
2025-12-03T21:53:01.473 [DEBUG] [Thread-124298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:53:01.487 [DEBUG] [Thread-124298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:53:01.487 [INFO] [Thread-124298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] client lang: <none>
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] server lang: <none>
2025-12-03T21:53:01.495 [DEBUG] [Thread-124298] [transport.py] [_log()] kex follows: False
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] Compression: none
2025-12-03T21:53:01.496 [DEBUG] [Thread-124298] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:53:01.552 [DEBUG] [Thread-124298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:53:01.552 [DEBUG] [Thread-124298] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:53:01.553 [DEBUG] [Thread-124298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:53:01.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:53:01.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:53:01.608 [DEBUG] [Thread-124298] [transport.py] [_log()] userauth is OK
2025-12-03T21:53:01.608 [DEBUG] [Thread-124298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:53:01.608 [DEBUG] [Thread-124298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:53:01.608 [DEBUG] [Thread-124298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:53:01.608 [DEBUG] [Thread-124298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:53:01.623 [INFO] [Thread-124298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:53:01.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:53:01.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:53:02.468 [DEBUG] [Thread-124298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:53:02.468 [DEBUG] [Thread-124298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:53:02.516 [DEBUG] [Thread-124298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:53:02.516 [DEBUG] [Thread-124298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:53:02.524 [DEBUG] [Thread-124298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:53:02.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:53:02.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:53:02.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:53:02.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:53:02.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:53:02.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:53:02.559 [DEBUG] [Thread-124298] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:53:11.382 [DEBUG] [Thread-124300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:13.308 [DEBUG] [Thread-124301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:26.428 [DEBUG] [Thread-124302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:32.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:53:32.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:53:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:53:33.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 53, 25), 16.1, 33.62, 0.0, 24.14, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:53:33.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:53:25
2025-12-03T21:53:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:53:33.552 [DEBUG] [Thread-124303] [transport.py] [_log()] starting thread (client mode): 0xa272a7a0
2025-12-03T21:53:33.552 [DEBUG] [Thread-124303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:53:33.573 [DEBUG] [Thread-124303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:53:33.573 [INFO] [Thread-124303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:53:33.576 [DEBUG] [Thread-124303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] client lang: <none>
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] server lang: <none>
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] kex follows: False
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] Compression: none
2025-12-03T21:53:33.577 [DEBUG] [Thread-124303] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:53:33.596 [DEBUG] [Thread-124303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:53:33.596 [DEBUG] [Thread-124303] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:53:33.597 [DEBUG] [Thread-124303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:53:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:53:33.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:53:33.599 [DEBUG] [Thread-124303] [transport.py] [_log()] userauth is OK
2025-12-03T21:53:33.599 [DEBUG] [Thread-124303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:53:33.599 [DEBUG] [Thread-124303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:53:33.599 [DEBUG] [Thread-124303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:53:33.599 [DEBUG] [Thread-124303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:53:33.624 [INFO] [Thread-124303] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:53:33.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:53:34.239 [DEBUG] [Thread-124303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:53:34.239 [DEBUG] [Thread-124303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:53:34.239 [DEBUG] [Thread-124303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:53:34.280 [DEBUG] [Thread-124303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:53:34.280 [DEBUG] [Thread-124303] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:53:34.283 [DEBUG] [Thread-124303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:53:34.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:53:34.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:53:34.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:53:34.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:53:34.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:53:34.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:53:34.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:53:34.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:53:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:53:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.828175 -999.00  +16.30  20.64     38   +2.20 1 1 1 1 1     0    0 13.87 -21.26 ZNESW 20.6 20.6 143.0 27.3 16.5 -25.2 16.5 -24.8 16.2 -23.1 16.4 -23.9
2025-12-03T21:53:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:53:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:53:34.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.828175
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:53:34.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:53:25', tmtdew=16.1, humidity=33.62, cloud=0.0, wind=24.14, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:53:25', seeing=0.96, atlas_timestamp='2025-12-03T19:52:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:53:34.310 [DEBUG] [Thread-124303] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:53:34.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:53:34.424 [DEBUG] [Thread-124306] [transport.py] [_log()] starting thread (client mode): 0xa277a530
2025-12-03T21:53:34.424 [DEBUG] [Thread-124306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:53:34.438 [DEBUG] [Thread-124306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:53:34.438 [INFO] [Thread-124306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] client lang: <none>
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] server lang: <none>
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] kex follows: False
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] Compression: none
2025-12-03T21:53:34.446 [DEBUG] [Thread-124306] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:53:34.504 [DEBUG] [Thread-124306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:53:34.505 [DEBUG] [Thread-124306] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:53:34.505 [DEBUG] [Thread-124306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:53:34.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:53:34.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:53:34.561 [DEBUG] [Thread-124306] [transport.py] [_log()] userauth is OK
2025-12-03T21:53:34.561 [DEBUG] [Thread-124306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:53:34.561 [DEBUG] [Thread-124306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:53:34.561 [DEBUG] [Thread-124306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:53:34.561 [DEBUG] [Thread-124306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:53:34.584 [INFO] [Thread-124306] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:53:34.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:53:34.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:53:35.394 [DEBUG] [Thread-124306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:53:35.394 [DEBUG] [Thread-124306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:53:35.442 [DEBUG] [Thread-124306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:53:35.442 [DEBUG] [Thread-124306] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:53:35.451 [DEBUG] [Thread-124306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:53:35.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:53:35.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:53:35.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:53:35.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:53:35.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:53:35.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:53:35.485 [DEBUG] [Thread-124306] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:53:41.459 [DEBUG] [Thread-124308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:56.170 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:56.171 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:53:56.513 [DEBUG] [Thread-124309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:54:05.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:54:05.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:54:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 53, 57), 16.03, 33.69, 0.0, 23.48, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:54:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:53:57
2025-12-03T21:54:06.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:54:06.468 [DEBUG] [Thread-124310] [transport.py] [_log()] starting thread (client mode): 0xa272be80
2025-12-03T21:54:06.469 [DEBUG] [Thread-124310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:54:06.487 [DEBUG] [Thread-124310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:54:06.488 [INFO] [Thread-124310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:06.491 [DEBUG] [Thread-124310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] client lang: <none>
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] server lang: <none>
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] kex follows: False
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:54:06.492 [DEBUG] [Thread-124310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:54:06.493 [DEBUG] [Thread-124310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:54:06.493 [DEBUG] [Thread-124310] [transport.py] [_log()] Compression: none
2025-12-03T21:54:06.493 [DEBUG] [Thread-124310] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:54:06.511 [DEBUG] [Thread-124310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:54:06.512 [DEBUG] [Thread-124310] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:54:06.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:54:06.513 [DEBUG] [Thread-124310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:54:06.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:54:06.515 [DEBUG] [Thread-124310] [transport.py] [_log()] userauth is OK
2025-12-03T21:54:06.515 [DEBUG] [Thread-124310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:54:06.515 [DEBUG] [Thread-124310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:54:06.515 [DEBUG] [Thread-124310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:54:06.515 [DEBUG] [Thread-124310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:54:06.540 [INFO] [Thread-124310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:54:06.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:54:07.171 [DEBUG] [Thread-124310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:54:07.171 [DEBUG] [Thread-124310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:54:07.172 [DEBUG] [Thread-124310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:54:07.213 [DEBUG] [Thread-124310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:54:07.213 [DEBUG] [Thread-124310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:54:07.216 [DEBUG] [Thread-124310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:54:07.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:54:07.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:54:07.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:54:07.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:54:07.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:54:07.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:54:07.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:54:07.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:54:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:54:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.828522 -999.00  +16.30  20.73     38   +2.10 1 1 1 1 1     0    0 13.65 -19.42 ZNESW 20.7 20.7 141.8 25.2 16.5 -25.3 16.4 -24.8 16.2 -23.2 16.4 -24.1
2025-12-03T21:54:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:54:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:54:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.828522
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:54:07.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:53:57', tmtdew=16.03, humidity=33.69, cloud=0.0, wind=23.48, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:53:57', seeing=1.1, atlas_timestamp='2025-12-03T19:53:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:54:07.240 [DEBUG] [Thread-124310] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:54:07.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:54:07.344 [DEBUG] [Thread-124313] [transport.py] [_log()] starting thread (client mode): 0xa27cbaf0
2025-12-03T21:54:07.344 [DEBUG] [Thread-124313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:54:07.358 [DEBUG] [Thread-124313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:54:07.358 [INFO] [Thread-124313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] client lang: <none>
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] server lang: <none>
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] kex follows: False
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:54:07.366 [DEBUG] [Thread-124313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:54:07.367 [DEBUG] [Thread-124313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:54:07.367 [DEBUG] [Thread-124313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:54:07.367 [DEBUG] [Thread-124313] [transport.py] [_log()] Compression: none
2025-12-03T21:54:07.367 [DEBUG] [Thread-124313] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:54:07.431 [DEBUG] [Thread-124313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:54:07.431 [DEBUG] [Thread-124313] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:54:07.432 [DEBUG] [Thread-124313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:54:07.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:54:07.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:54:07.489 [DEBUG] [Thread-124313] [transport.py] [_log()] userauth is OK
2025-12-03T21:54:07.489 [DEBUG] [Thread-124313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:54:07.489 [DEBUG] [Thread-124313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:54:07.489 [DEBUG] [Thread-124313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:54:07.489 [DEBUG] [Thread-124313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:54:07.508 [INFO] [Thread-124313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:54:07.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:54:07.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:54:08.334 [DEBUG] [Thread-124313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:54:08.334 [DEBUG] [Thread-124313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:54:08.383 [DEBUG] [Thread-124313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:54:08.383 [DEBUG] [Thread-124313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:54:08.392 [DEBUG] [Thread-124313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:54:08.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:54:08.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:54:08.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:54:08.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:54:08.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:54:08.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:54:08.426 [DEBUG] [Thread-124313] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:54:11.549 [DEBUG] [Thread-124315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:13.367 [DEBUG] [Thread-124316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:26.603 [DEBUG] [Thread-124317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:54:38.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:54:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:54:39.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 54, 29), 16.02, 33.7, 0.0, 21.19, 16.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:54:39.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:54:29
2025-12-03T21:54:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:54:39.394 [DEBUG] [Thread-124318] [transport.py] [_log()] starting thread (client mode): 0xa5194cd0
2025-12-03T21:54:39.395 [DEBUG] [Thread-124318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:54:39.415 [DEBUG] [Thread-124318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:54:39.415 [INFO] [Thread-124318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:54:39.418 [DEBUG] [Thread-124318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:54:39.418 [DEBUG] [Thread-124318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] client lang: <none>
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] server lang: <none>
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] kex follows: False
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] Compression: none
2025-12-03T21:54:39.419 [DEBUG] [Thread-124318] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:54:39.440 [DEBUG] [Thread-124318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:54:39.440 [DEBUG] [Thread-124318] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:54:39.441 [DEBUG] [Thread-124318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:54:39.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:54:39.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:54:39.443 [DEBUG] [Thread-124318] [transport.py] [_log()] userauth is OK
2025-12-03T21:54:39.443 [DEBUG] [Thread-124318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:54:39.443 [DEBUG] [Thread-124318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:54:39.443 [DEBUG] [Thread-124318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:54:39.443 [DEBUG] [Thread-124318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:54:39.467 [INFO] [Thread-124318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:54:39.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:54:40.097 [DEBUG] [Thread-124318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:54:40.097 [DEBUG] [Thread-124318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:54:40.098 [DEBUG] [Thread-124318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:54:40.138 [DEBUG] [Thread-124318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:54:40.138 [DEBUG] [Thread-124318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:54:40.141 [DEBUG] [Thread-124318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:54:40.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:54:40.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:54:40.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:54:40.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:54:40.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:54:40.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:54:40.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:54:40.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:54:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:54:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.829217 -999.00  +16.30  21.58     38   +2.20 1 1 1 1 1     0    0 13.92 -19.47 ZNESW 21.6 21.6 145.2 26.8 16.5 -25.4 16.4 -24.7 16.2 -23.1 16.5 -24.0
2025-12-03T21:54:40.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:54:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:54:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.829217
2025-12-03T21:54:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:54:40.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:54:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:54:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:54:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:54:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:54:29', tmtdew=16.02, humidity=33.7, cloud=0.0, wind=21.19, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:54:29', seeing=1.08, atlas_timestamp='2025-12-03T19:54:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:54:40.164 [DEBUG] [Thread-124318] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:54:40.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:54:40.282 [DEBUG] [Thread-124321] [transport.py] [_log()] starting thread (client mode): 0xa2728e50
2025-12-03T21:54:40.282 [DEBUG] [Thread-124321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:54:40.296 [DEBUG] [Thread-124321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:54:40.296 [INFO] [Thread-124321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:54:40.303 [DEBUG] [Thread-124321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] client lang: <none>
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] server lang: <none>
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] kex follows: False
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] Compression: none
2025-12-03T21:54:40.304 [DEBUG] [Thread-124321] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:54:40.359 [DEBUG] [Thread-124321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:54:40.360 [DEBUG] [Thread-124321] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:54:40.360 [DEBUG] [Thread-124321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:54:40.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:54:40.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:54:40.416 [DEBUG] [Thread-124321] [transport.py] [_log()] userauth is OK
2025-12-03T21:54:40.416 [DEBUG] [Thread-124321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:54:40.417 [DEBUG] [Thread-124321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:54:40.417 [DEBUG] [Thread-124321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:54:40.417 [DEBUG] [Thread-124321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:54:40.435 [INFO] [Thread-124321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:54:40.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:54:40.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:54:41.233 [DEBUG] [Thread-124321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:54:41.233 [DEBUG] [Thread-124321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:54:41.281 [DEBUG] [Thread-124321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:54:41.281 [DEBUG] [Thread-124321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:54:41.290 [DEBUG] [Thread-124321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:54:41.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:54:41.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:54:41.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:54:41.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:54:41.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:54:41.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:54:41.331 [DEBUG] [Thread-124321] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:54:41.634 [DEBUG] [Thread-124323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:56.375 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:56.377 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:54:56.691 [DEBUG] [Thread-124324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:11.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:55:11.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:55:11.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:55:11.725 [DEBUG] [Thread-124325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 55, 1), 16.02, 33.7, 0.0, 25.53, 16.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:55:12.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:55:01
2025-12-03T21:55:12.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:55:12.290 [DEBUG] [Thread-124326] [transport.py] [_log()] starting thread (client mode): 0xa514f250
2025-12-03T21:55:12.290 [DEBUG] [Thread-124326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:55:12.309 [DEBUG] [Thread-124326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:55:12.309 [INFO] [Thread-124326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] client lang: <none>
2025-12-03T21:55:12.312 [DEBUG] [Thread-124326] [transport.py] [_log()] server lang: <none>
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] kex follows: False
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] Compression: none
2025-12-03T21:55:12.313 [DEBUG] [Thread-124326] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:55:12.330 [DEBUG] [Thread-124326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:55:12.331 [DEBUG] [Thread-124326] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:55:12.331 [DEBUG] [Thread-124326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:55:12.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:55:12.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:55:12.333 [DEBUG] [Thread-124326] [transport.py] [_log()] userauth is OK
2025-12-03T21:55:12.333 [DEBUG] [Thread-124326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:55:12.334 [DEBUG] [Thread-124326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:55:12.334 [DEBUG] [Thread-124326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:55:12.334 [DEBUG] [Thread-124326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:55:12.352 [INFO] [Thread-124326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:55:12.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:55:13.336 [DEBUG] [Thread-124326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:55:13.337 [DEBUG] [Thread-124326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:55:13.337 [DEBUG] [Thread-124326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:55:13.378 [DEBUG] [Thread-124326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:55:13.378 [DEBUG] [Thread-124326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:55:13.381 [DEBUG] [Thread-124326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:55:13.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:55:13.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:55:13.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:55:13.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:55:13.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:55:13.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:55:13.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.829564 -999.00  +16.30  18.94     38   +2.10 1 1 1 1 1     0    0 13.70 -19.54 ZNESW 18.9 18.9 142.8 26.4 16.5 -25.4 16.4 -24.8 16.2 -23.1 16.4 -24.0
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.829564
2025-12-03T21:55:13.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:55:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:55:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:55:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:55:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:55:13.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:55:01', tmtdew=16.02, humidity=33.7, cloud=0.0, wind=25.53, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:55:01', seeing=0.91, atlas_timestamp='2025-12-03T19:54:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:55:13.401 [DEBUG] [Thread-124326] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:55:13.437 [DEBUG] [Thread-124329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:13.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:55:13.507 [DEBUG] [Thread-124330] [transport.py] [_log()] starting thread (client mode): 0xa2752470
2025-12-03T21:55:13.507 [DEBUG] [Thread-124330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:55:13.522 [DEBUG] [Thread-124330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:55:13.522 [INFO] [Thread-124330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:13.529 [DEBUG] [Thread-124330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] client lang: <none>
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] server lang: <none>
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] kex follows: False
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] Compression: none
2025-12-03T21:55:13.530 [DEBUG] [Thread-124330] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:55:13.588 [DEBUG] [Thread-124330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:55:13.588 [DEBUG] [Thread-124330] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:55:13.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:55:13.589 [DEBUG] [Thread-124330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:55:13.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:55:13.644 [DEBUG] [Thread-124330] [transport.py] [_log()] userauth is OK
2025-12-03T21:55:13.645 [DEBUG] [Thread-124330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:55:13.645 [DEBUG] [Thread-124330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:55:13.645 [DEBUG] [Thread-124330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:55:13.645 [DEBUG] [Thread-124330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:55:13.663 [INFO] [Thread-124330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:55:13.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:55:13.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:55:14.473 [DEBUG] [Thread-124330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:55:14.473 [DEBUG] [Thread-124330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:55:14.520 [DEBUG] [Thread-124330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:55:14.521 [DEBUG] [Thread-124330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:55:14.529 [DEBUG] [Thread-124330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:55:14.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:55:14.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:55:14.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:55:14.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:55:14.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:55:14.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:55:14.564 [DEBUG] [Thread-124330] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:55:26.757 [DEBUG] [Thread-124332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:41.823 [DEBUG] [Thread-124333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:44.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:55:44.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:55:44.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:55:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 55, 33), 16.01, 33.72, 0.0, 24.05, 16.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:55:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:55:33
2025-12-03T21:55:45.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:55:45.521 [DEBUG] [Thread-124334] [transport.py] [_log()] starting thread (client mode): 0xa272a830
2025-12-03T21:55:45.521 [DEBUG] [Thread-124334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:55:45.542 [DEBUG] [Thread-124334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:55:45.542 [INFO] [Thread-124334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] client lang: <none>
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] server lang: <none>
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] kex follows: False
2025-12-03T21:55:45.545 [DEBUG] [Thread-124334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] Compression: none
2025-12-03T21:55:45.546 [DEBUG] [Thread-124334] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:55:45.562 [DEBUG] [Thread-124334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:55:45.562 [DEBUG] [Thread-124334] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:55:45.562 [DEBUG] [Thread-124334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:55:45.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:55:45.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:55:45.563 [DEBUG] [Thread-124334] [transport.py] [_log()] userauth is OK
2025-12-03T21:55:45.563 [DEBUG] [Thread-124334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:55:45.563 [DEBUG] [Thread-124334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:55:45.563 [DEBUG] [Thread-124334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:55:45.563 [DEBUG] [Thread-124334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:55:45.572 [INFO] [Thread-124334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:55:45.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:55:46.192 [DEBUG] [Thread-124334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:55:46.192 [DEBUG] [Thread-124334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:55:46.192 [DEBUG] [Thread-124334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:55:46.233 [DEBUG] [Thread-124334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:55:46.233 [DEBUG] [Thread-124334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:55:46.236 [DEBUG] [Thread-124334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:55:46.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:55:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:55:46.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:55:46.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:55:46.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:55:46.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.829911 -999.00  +16.20  20.46     38   +2.10 1 1 1 1 1     0    0 14.05 -20.22 ZNESW 20.5 20.5 141.6 24.5 16.5 -25.4 16.5 -24.9 16.1 -23.3 16.4 -24.2
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.829911
2025-12-03T21:55:46.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:55:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:55:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:55:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:55:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:55:46.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:55:33', tmtdew=16.01, humidity=33.72, cloud=0.0, wind=24.05, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:55:33', seeing=0.89, atlas_timestamp='2025-12-03T19:55:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:55:46.255 [DEBUG] [Thread-124334] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:55:46.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:55:46.361 [DEBUG] [Thread-124337] [transport.py] [_log()] starting thread (client mode): 0xa517c2e0
2025-12-03T21:55:46.361 [DEBUG] [Thread-124337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:55:46.376 [DEBUG] [Thread-124337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:55:46.376 [INFO] [Thread-124337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] client lang: <none>
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] server lang: <none>
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] kex follows: False
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] Compression: none
2025-12-03T21:55:46.383 [DEBUG] [Thread-124337] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:55:46.438 [DEBUG] [Thread-124337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:55:46.438 [DEBUG] [Thread-124337] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:55:46.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:55:46.438 [DEBUG] [Thread-124337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:55:46.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:55:46.496 [DEBUG] [Thread-124337] [transport.py] [_log()] userauth is OK
2025-12-03T21:55:46.496 [DEBUG] [Thread-124337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:55:46.496 [DEBUG] [Thread-124337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:55:46.496 [DEBUG] [Thread-124337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:55:46.496 [DEBUG] [Thread-124337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:55:46.510 [INFO] [Thread-124337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:55:46.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:55:46.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:55:47.359 [DEBUG] [Thread-124337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:55:47.359 [DEBUG] [Thread-124337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:55:47.407 [DEBUG] [Thread-124337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:55:47.408 [DEBUG] [Thread-124337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:55:47.416 [DEBUG] [Thread-124337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:55:47.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:55:47.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:55:47.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:55:47.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:55:47.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:55:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:55:47.447 [DEBUG] [Thread-124337] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:55:56.575 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:56.577 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:55:56.862 [DEBUG] [Thread-124339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:11.930 [DEBUG] [Thread-124340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:13.493 [DEBUG] [Thread-124341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:17.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:56:17.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:56:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:56:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 56, 5), 15.99, 33.77, 0.0, 26.29, 16.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:56:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:56:05
2025-12-03T21:56:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:56:18.433 [DEBUG] [Thread-124342] [transport.py] [_log()] starting thread (client mode): 0xa2761f30
2025-12-03T21:56:18.433 [DEBUG] [Thread-124342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:56:18.453 [DEBUG] [Thread-124342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:56:18.453 [INFO] [Thread-124342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:56:18.456 [DEBUG] [Thread-124342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:56:18.457 [DEBUG] [Thread-124342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:56:18.457 [DEBUG] [Thread-124342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:56:18.458 [DEBUG] [Thread-124342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:18.458 [DEBUG] [Thread-124342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:18.458 [DEBUG] [Thread-124342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:18.458 [DEBUG] [Thread-124342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:18.458 [DEBUG] [Thread-124342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:56:18.459 [DEBUG] [Thread-124342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:56:18.459 [DEBUG] [Thread-124342] [transport.py] [_log()] client lang: <none>
2025-12-03T21:56:18.459 [DEBUG] [Thread-124342] [transport.py] [_log()] server lang: <none>
2025-12-03T21:56:18.459 [DEBUG] [Thread-124342] [transport.py] [_log()] kex follows: False
2025-12-03T21:56:18.459 [DEBUG] [Thread-124342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:56:18.460 [DEBUG] [Thread-124342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:56:18.460 [DEBUG] [Thread-124342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:56:18.460 [DEBUG] [Thread-124342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:56:18.460 [DEBUG] [Thread-124342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:56:18.460 [DEBUG] [Thread-124342] [transport.py] [_log()] Compression: none
2025-12-03T21:56:18.461 [DEBUG] [Thread-124342] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:56:18.479 [DEBUG] [Thread-124342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:56:18.480 [DEBUG] [Thread-124342] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:56:18.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:56:18.481 [DEBUG] [Thread-124342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:56:18.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:56:18.482 [DEBUG] [Thread-124342] [transport.py] [_log()] userauth is OK
2025-12-03T21:56:18.482 [DEBUG] [Thread-124342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:56:18.482 [DEBUG] [Thread-124342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:56:18.483 [DEBUG] [Thread-124342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:56:18.483 [DEBUG] [Thread-124342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:56:18.517 [INFO] [Thread-124342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:56:18.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:56:19.285 [DEBUG] [Thread-124342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:56:19.285 [DEBUG] [Thread-124342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:56:19.285 [DEBUG] [Thread-124342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:56:19.326 [DEBUG] [Thread-124342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:56:19.326 [DEBUG] [Thread-124342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:56:19.329 [DEBUG] [Thread-124342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:56:19.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:56:19.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:56:19.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:56:19.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:56:19.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:56:19.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:56:19.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:56:19.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:56:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:56:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.830259 -999.00  +16.20  19.69     38   +2.10 1 1 1 1 1     0    0 13.86 -20.99 ZNESW 19.7 19.7 144.6 24.2 16.5 -25.3 16.4 -24.8 16.1 -23.2 16.4 -23.9
2025-12-03T21:56:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:56:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:56:19.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.830259
2025-12-03T21:56:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:56:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:56:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:56:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:56:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:56:19.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:56:05', tmtdew=15.99, humidity=33.77, cloud=0.0, wind=26.29, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:56:05', seeing=0.86, atlas_timestamp='2025-12-03T19:55:34.378', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.02424999999999855, 0.01925000000000132, -0.05349999999999966, -0.010500000000000398, 0.005250000000000199, -0.10599999999999987, 0.03325000000000067, 0.039499999999998536, -0.02999999999999936, 0.012249999999998096, -0.06850000000000023, 0.022999999999999687, 0.025249999999999773, -0.057000000000000384, -0.120000000000001, -0.006750000000000256, 0.008000000000000895, 0.017999999999998906, -0.0012500000000024158, 0.010999999999999233, 0.0722499999999986, -0.10474999999999923, -0.15975000000000072, -0.051000000000000156, 0.037499999999999645, 0.03074999999999939, 0.04349999999999987, 0.1349999999999998, 0.053500000000001435, -0.008999999999998565, -0.05549999999999855, -0.03625000000000078], zp_timestamp='2025-12-03T19:52:00')
2025-12-03T21:56:19.355 [DEBUG] [Thread-124342] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:56:19.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:56:19.458 [DEBUG] [Thread-124345] [transport.py] [_log()] starting thread (client mode): 0xa51958a0
2025-12-03T21:56:19.458 [DEBUG] [Thread-124345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:56:19.475 [DEBUG] [Thread-124345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:56:19.476 [INFO] [Thread-124345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:56:19.483 [DEBUG] [Thread-124345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:56:19.483 [DEBUG] [Thread-124345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:56:19.483 [DEBUG] [Thread-124345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:56:19.483 [DEBUG] [Thread-124345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] client lang: <none>
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] server lang: <none>
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] kex follows: False
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] Compression: none
2025-12-03T21:56:19.484 [DEBUG] [Thread-124345] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:56:19.544 [DEBUG] [Thread-124345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:56:19.545 [DEBUG] [Thread-124345] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:56:19.545 [DEBUG] [Thread-124345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:56:19.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:56:19.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:56:19.601 [DEBUG] [Thread-124345] [transport.py] [_log()] userauth is OK
2025-12-03T21:56:19.601 [DEBUG] [Thread-124345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:56:19.601 [DEBUG] [Thread-124345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:56:19.601 [DEBUG] [Thread-124345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:56:19.602 [DEBUG] [Thread-124345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:56:19.621 [INFO] [Thread-124345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:56:19.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:56:19.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:56:20.437 [DEBUG] [Thread-124345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:56:20.437 [DEBUG] [Thread-124345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:56:20.485 [DEBUG] [Thread-124345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:56:20.485 [DEBUG] [Thread-124345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:56:20.494 [DEBUG] [Thread-124345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:56:20.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:56:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:56:20.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:56:20.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:56:20.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:56:20.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:56:20.530 [DEBUG] [Thread-124345] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:56:20.619 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:25.448 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:26.966 [DEBUG] [Thread-124347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:28.489 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:34.857 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:42.022 [DEBUG] [Thread-124348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:50.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:56:50.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:56:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:56:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 56, 37), 15.92, 33.82, 0.0, 22.69, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:56:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:56:37
2025-12-03T21:56:51.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:56:51.478 [DEBUG] [Thread-124349] [transport.py] [_log()] starting thread (client mode): 0xa51968f0
2025-12-03T21:56:51.479 [DEBUG] [Thread-124349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:56:51.499 [DEBUG] [Thread-124349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:56:51.500 [INFO] [Thread-124349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] client lang: <none>
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] server lang: <none>
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] kex follows: False
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:56:51.503 [DEBUG] [Thread-124349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:56:51.504 [DEBUG] [Thread-124349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:56:51.504 [DEBUG] [Thread-124349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:56:51.504 [DEBUG] [Thread-124349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:56:51.504 [DEBUG] [Thread-124349] [transport.py] [_log()] Compression: none
2025-12-03T21:56:51.504 [DEBUG] [Thread-124349] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:56:51.521 [DEBUG] [Thread-124349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:56:51.522 [DEBUG] [Thread-124349] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:56:51.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:56:51.523 [DEBUG] [Thread-124349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:56:51.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:56:51.525 [DEBUG] [Thread-124349] [transport.py] [_log()] userauth is OK
2025-12-03T21:56:51.525 [DEBUG] [Thread-124349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:56:51.525 [DEBUG] [Thread-124349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:56:51.525 [DEBUG] [Thread-124349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:56:51.525 [DEBUG] [Thread-124349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:56:51.547 [INFO] [Thread-124349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:56:51.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:56:52.224 [DEBUG] [Thread-124349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:56:52.224 [DEBUG] [Thread-124349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:56:52.225 [DEBUG] [Thread-124349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:56:52.265 [DEBUG] [Thread-124349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:56:52.265 [DEBUG] [Thread-124349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:56:52.268 [DEBUG] [Thread-124349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:56:52.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:56:52.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:56:52.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:56:52.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:56:52.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:56:52.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:56:52.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:56:52.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.830606 -999.00  +16.20  20.11     38   +2.20 1 1 1 1 1     0    0 13.77 -22.19 ZNESW 20.1 20.1 141.6 26.2 16.5 -25.4 16.4 -24.7 16.1 -23.3 16.4 -24.1
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.830606
2025-12-03T21:56:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:56:52.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:56:52.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:56:52.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:56:52.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:56:52.291 [DEBUG] [Thread-124349] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:56:52.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:56:37', tmtdew=15.92, humidity=33.82, cloud=0.0, wind=22.69, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:56:37', seeing=0.86, atlas_timestamp='2025-12-03T19:56:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:54:00')
2025-12-03T21:56:52.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:56:52.406 [DEBUG] [Thread-124352] [transport.py] [_log()] starting thread (client mode): 0xa51948b0
2025-12-03T21:56:52.406 [DEBUG] [Thread-124352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:56:52.421 [DEBUG] [Thread-124352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:56:52.422 [INFO] [Thread-124352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:56:52.429 [DEBUG] [Thread-124352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:56:52.429 [DEBUG] [Thread-124352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] client lang: <none>
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] server lang: <none>
2025-12-03T21:56:52.430 [DEBUG] [Thread-124352] [transport.py] [_log()] kex follows: False
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] Compression: none
2025-12-03T21:56:52.431 [DEBUG] [Thread-124352] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:56:52.488 [DEBUG] [Thread-124352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:56:52.489 [DEBUG] [Thread-124352] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:56:52.489 [DEBUG] [Thread-124352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:56:52.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:56:52.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:56:52.544 [DEBUG] [Thread-124352] [transport.py] [_log()] userauth is OK
2025-12-03T21:56:52.544 [DEBUG] [Thread-124352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:56:52.545 [DEBUG] [Thread-124352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:56:52.545 [DEBUG] [Thread-124352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:56:52.545 [DEBUG] [Thread-124352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:56:52.564 [INFO] [Thread-124352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:56:52.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:56:52.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:56:53.367 [DEBUG] [Thread-124352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:56:53.367 [DEBUG] [Thread-124352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:56:53.415 [DEBUG] [Thread-124352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:56:53.415 [DEBUG] [Thread-124352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:56:53.424 [DEBUG] [Thread-124352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:56:53.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:56:53.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:56:53.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:56:53.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:56:53.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:56:53.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:56:53.458 [DEBUG] [Thread-124352] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:56:56.781 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:56.782 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:56:57.059 [DEBUG] [Thread-124354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:12.127 [DEBUG] [Thread-124355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:13.568 [DEBUG] [Thread-124356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:23.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:57:23.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:57:23.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:57:24.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 57, 9), 15.91, 33.82, 0.0, 24.26, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:57:24.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:57:09
2025-12-03T21:57:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:57:24.425 [DEBUG] [Thread-124357] [transport.py] [_log()] starting thread (client mode): 0xa2762470
2025-12-03T21:57:24.425 [DEBUG] [Thread-124357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:57:24.445 [DEBUG] [Thread-124357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:57:24.445 [INFO] [Thread-124357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] client lang: <none>
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] server lang: <none>
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] kex follows: False
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:57:24.448 [DEBUG] [Thread-124357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:57:24.449 [DEBUG] [Thread-124357] [transport.py] [_log()] Compression: none
2025-12-03T21:57:24.449 [DEBUG] [Thread-124357] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:57:24.471 [DEBUG] [Thread-124357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:57:24.472 [DEBUG] [Thread-124357] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:57:24.472 [DEBUG] [Thread-124357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:57:24.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:57:24.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:57:24.474 [DEBUG] [Thread-124357] [transport.py] [_log()] userauth is OK
2025-12-03T21:57:24.474 [DEBUG] [Thread-124357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:57:24.474 [DEBUG] [Thread-124357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:57:24.474 [DEBUG] [Thread-124357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:57:24.474 [DEBUG] [Thread-124357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:57:24.499 [INFO] [Thread-124357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:57:24.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:57:25.317 [DEBUG] [Thread-124357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:57:25.317 [DEBUG] [Thread-124357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:57:25.318 [DEBUG] [Thread-124357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:57:25.358 [DEBUG] [Thread-124357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:57:25.358 [DEBUG] [Thread-124357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:57:25.361 [DEBUG] [Thread-124357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:57:25.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:57:25.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:57:25.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:57:25.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:57:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:57:25.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:57:25.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.830953 -999.00  +16.20  19.74     38   +2.10 1 1 1 1 1     0    0 13.66 -20.78 ZNESW 19.7 19.7 144.8 24.8 16.4 -25.3 16.4 -24.8 16.1 -23.3 16.4 -24.0
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:57:25.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.830953
2025-12-03T21:57:25.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:57:25.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:57:25.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:57:25.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:57:25.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:57:25.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:57:09', tmtdew=15.91, humidity=33.82, cloud=0.0, wind=24.26, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:57:09', seeing=0.86, atlas_timestamp='2025-12-03T19:56:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:54:00')
2025-12-03T21:57:25.387 [DEBUG] [Thread-124357] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:57:25.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:57:25.490 [DEBUG] [Thread-124360] [transport.py] [_log()] starting thread (client mode): 0xa517c070
2025-12-03T21:57:25.491 [DEBUG] [Thread-124360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:57:25.507 [DEBUG] [Thread-124360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:57:25.508 [INFO] [Thread-124360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:57:25.515 [DEBUG] [Thread-124360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:57:25.515 [DEBUG] [Thread-124360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:57:25.515 [DEBUG] [Thread-124360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] client lang: <none>
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] server lang: <none>
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] kex follows: False
2025-12-03T21:57:25.516 [DEBUG] [Thread-124360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] Compression: none
2025-12-03T21:57:25.517 [DEBUG] [Thread-124360] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:57:25.575 [DEBUG] [Thread-124360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:57:25.576 [DEBUG] [Thread-124360] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:57:25.576 [DEBUG] [Thread-124360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:57:25.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:57:25.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:57:25.636 [DEBUG] [Thread-124360] [transport.py] [_log()] userauth is OK
2025-12-03T21:57:25.636 [DEBUG] [Thread-124360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:57:25.636 [DEBUG] [Thread-124360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:57:25.636 [DEBUG] [Thread-124360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:57:25.637 [DEBUG] [Thread-124360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:57:25.658 [INFO] [Thread-124360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:57:25.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:57:25.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:57:26.509 [DEBUG] [Thread-124360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:57:26.509 [DEBUG] [Thread-124360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:57:26.558 [DEBUG] [Thread-124360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:57:26.558 [DEBUG] [Thread-124360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:57:26.566 [DEBUG] [Thread-124360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:57:26.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:57:26.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:57:26.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:57:26.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:57:26.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:57:26.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:57:26.600 [DEBUG] [Thread-124360] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:57:27.164 [DEBUG] [Thread-124362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:42.239 [DEBUG] [Thread-124363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:56.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:57:56.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:57:56.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:57:56.992 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:56.993 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:57.274 [DEBUG] [Thread-124364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:57:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 57, 41), 15.92, 33.8, 0.0, 26.8, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:57:57.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:57:41
2025-12-03T21:57:57.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:57:57.575 [DEBUG] [Thread-124365] [transport.py] [_log()] starting thread (client mode): 0xa51d0a60
2025-12-03T21:57:57.575 [DEBUG] [Thread-124365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:57:57.595 [DEBUG] [Thread-124365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:57:57.595 [INFO] [Thread-124365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] client lang: <none>
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] server lang: <none>
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] kex follows: False
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:57:57.597 [DEBUG] [Thread-124365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:57:57.598 [DEBUG] [Thread-124365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:57:57.598 [DEBUG] [Thread-124365] [transport.py] [_log()] Compression: none
2025-12-03T21:57:57.598 [DEBUG] [Thread-124365] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:57:57.618 [DEBUG] [Thread-124365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:57:57.618 [DEBUG] [Thread-124365] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:57:57.619 [DEBUG] [Thread-124365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:57:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:57:57.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:57:57.620 [DEBUG] [Thread-124365] [transport.py] [_log()] userauth is OK
2025-12-03T21:57:57.621 [DEBUG] [Thread-124365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:57:57.621 [DEBUG] [Thread-124365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:57:57.621 [DEBUG] [Thread-124365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:57:57.621 [DEBUG] [Thread-124365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:57:57.638 [INFO] [Thread-124365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:57:57.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:57:58.252 [DEBUG] [Thread-124365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:57:58.252 [DEBUG] [Thread-124365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:57:58.253 [DEBUG] [Thread-124365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:57:58.293 [DEBUG] [Thread-124365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:57:58.293 [DEBUG] [Thread-124365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:57:58.296 [DEBUG] [Thread-124365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:57:58.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:57:58.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:57:58.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:57:58.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:57:58.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:57:58.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:57:58.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:57:58.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.831647 -999.00  +16.10  18.76     38   +2.10 1 1 1 1 1     0    0 13.47 -20.08 ZNESW 18.8 18.8 150.6 24.8 16.4 -25.3 16.4 -24.7 16.1 -23.2 16.4 -24.2
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.831647
2025-12-03T21:57:58.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:57:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:57:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:57:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:57:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:57:58.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:57:41', tmtdew=15.92, humidity=33.8, cloud=0.0, wind=26.8, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:57:41', seeing=0.88, atlas_timestamp='2025-12-03T19:57:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:54:00')
2025-12-03T21:57:58.321 [DEBUG] [Thread-124365] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:57:58.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:57:58.418 [DEBUG] [Thread-124368] [transport.py] [_log()] starting thread (client mode): 0xa51d07f0
2025-12-03T21:57:58.418 [DEBUG] [Thread-124368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:57:58.433 [DEBUG] [Thread-124368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:57:58.433 [INFO] [Thread-124368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:57:58.441 [DEBUG] [Thread-124368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] client lang: <none>
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] server lang: <none>
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] kex follows: False
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] Compression: none
2025-12-03T21:57:58.442 [DEBUG] [Thread-124368] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:57:58.500 [DEBUG] [Thread-124368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:57:58.500 [DEBUG] [Thread-124368] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:57:58.501 [DEBUG] [Thread-124368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:57:58.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:57:58.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:57:58.556 [DEBUG] [Thread-124368] [transport.py] [_log()] userauth is OK
2025-12-03T21:57:58.556 [DEBUG] [Thread-124368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:57:58.557 [DEBUG] [Thread-124368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:57:58.557 [DEBUG] [Thread-124368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:57:58.557 [DEBUG] [Thread-124368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:57:58.576 [INFO] [Thread-124368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:57:58.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:57:58.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:57:59.379 [DEBUG] [Thread-124368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:57:59.380 [DEBUG] [Thread-124368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:57:59.428 [DEBUG] [Thread-124368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:57:59.428 [DEBUG] [Thread-124368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:57:59.438 [DEBUG] [Thread-124368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:57:59.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:57:59.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:57:59.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:57:59.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:57:59.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:57:59.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:57:59.473 [DEBUG] [Thread-124368] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:58:12.311 [DEBUG] [Thread-124370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:13.646 [DEBUG] [Thread-124371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:27.365 [DEBUG] [Thread-124372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:29.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:58:29.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:58:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:58:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 58, 13), 15.93, 33.8, 0.0, 25.02, 16.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:58:30.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:58:13
2025-12-03T21:58:30.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:58:30.433 [DEBUG] [Thread-124373] [transport.py] [_log()] starting thread (client mode): 0xa5196500
2025-12-03T21:58:30.433 [DEBUG] [Thread-124373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:58:30.454 [DEBUG] [Thread-124373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:58:30.455 [INFO] [Thread-124373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:58:30.457 [DEBUG] [Thread-124373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:58:30.458 [DEBUG] [Thread-124373] [transport.py] [_log()] client lang: <none>
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] server lang: <none>
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] kex follows: False
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] Compression: none
2025-12-03T21:58:30.459 [DEBUG] [Thread-124373] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:58:30.478 [DEBUG] [Thread-124373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:58:30.479 [DEBUG] [Thread-124373] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:58:30.479 [DEBUG] [Thread-124373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:58:30.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:58:30.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:58:30.481 [DEBUG] [Thread-124373] [transport.py] [_log()] userauth is OK
2025-12-03T21:58:30.481 [DEBUG] [Thread-124373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:58:30.481 [DEBUG] [Thread-124373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:58:30.481 [DEBUG] [Thread-124373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:58:30.481 [DEBUG] [Thread-124373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:58:30.499 [INFO] [Thread-124373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:58:30.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:58:31.305 [DEBUG] [Thread-124373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:58:31.305 [DEBUG] [Thread-124373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:58:31.305 [DEBUG] [Thread-124373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:58:31.346 [DEBUG] [Thread-124373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:58:31.346 [DEBUG] [Thread-124373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:58:31.349 [DEBUG] [Thread-124373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:58:31.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:58:31.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:58:31.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:58:31.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:58:31.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:58:31.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:58:31.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.831994 -999.00  +16.10  16.16     39   +2.20 1 1 1 1 1     0    0 13.44 -20.88 ZNESW 16.2 16.2 140.6 23.3 16.4 -25.4 16.4 -24.7 16.1 -23.1 16.4 -23.9
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:58:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.831994
2025-12-03T21:58:31.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:58:31.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:58:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:58:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:58:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:58:31.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:58:13', tmtdew=15.93, humidity=33.8, cloud=0.0, wind=25.02, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:58:13', seeing=0.85, atlas_timestamp='2025-12-03T19:58:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:54:00')
2025-12-03T21:58:31.374 [DEBUG] [Thread-124373] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:58:31.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:58:31.477 [DEBUG] [Thread-124376] [transport.py] [_log()] starting thread (client mode): 0xa514b040
2025-12-03T21:58:31.477 [DEBUG] [Thread-124376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:58:31.492 [DEBUG] [Thread-124376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:58:31.492 [INFO] [Thread-124376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:58:31.499 [DEBUG] [Thread-124376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] client lang: <none>
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] server lang: <none>
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] kex follows: False
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:58:31.500 [DEBUG] [Thread-124376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:58:31.501 [DEBUG] [Thread-124376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:58:31.501 [DEBUG] [Thread-124376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:58:31.501 [DEBUG] [Thread-124376] [transport.py] [_log()] Compression: none
2025-12-03T21:58:31.501 [DEBUG] [Thread-124376] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:58:31.559 [DEBUG] [Thread-124376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:58:31.560 [DEBUG] [Thread-124376] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:58:31.560 [DEBUG] [Thread-124376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:58:31.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:58:31.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:58:31.616 [DEBUG] [Thread-124376] [transport.py] [_log()] userauth is OK
2025-12-03T21:58:31.616 [DEBUG] [Thread-124376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:58:31.616 [DEBUG] [Thread-124376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:58:31.617 [DEBUG] [Thread-124376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:58:31.617 [DEBUG] [Thread-124376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:58:31.635 [INFO] [Thread-124376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:58:31.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:58:31.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:58:32.435 [DEBUG] [Thread-124376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:58:32.435 [DEBUG] [Thread-124376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:58:32.483 [DEBUG] [Thread-124376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:58:32.483 [DEBUG] [Thread-124376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:58:32.492 [DEBUG] [Thread-124376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:58:32.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:58:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:58:32.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:58:32.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:58:32.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:58:32.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:58:32.526 [DEBUG] [Thread-124376] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:58:42.401 [DEBUG] [Thread-124378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:57.196 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:57.198 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:58:57.461 [DEBUG] [Thread-124379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:02.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:59:02.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:59:02.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:59:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 58, 45), 16.02, 33.72, 0.0, 26.11, 16.22, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:59:03.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:58:45
2025-12-03T21:59:03.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:59:03.541 [DEBUG] [Thread-124380] [transport.py] [_log()] starting thread (client mode): 0xa514f160
2025-12-03T21:59:03.541 [DEBUG] [Thread-124380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:59:03.561 [DEBUG] [Thread-124380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:59:03.561 [INFO] [Thread-124380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:59:03.564 [DEBUG] [Thread-124380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:59:03.564 [DEBUG] [Thread-124380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:59:03.564 [DEBUG] [Thread-124380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:59:03.564 [DEBUG] [Thread-124380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:03.564 [DEBUG] [Thread-124380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] client lang: <none>
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] server lang: <none>
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] kex follows: False
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] Compression: none
2025-12-03T21:59:03.565 [DEBUG] [Thread-124380] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:59:03.582 [DEBUG] [Thread-124380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:59:03.582 [DEBUG] [Thread-124380] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:59:03.583 [DEBUG] [Thread-124380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:59:03.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:59:03.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:59:03.585 [DEBUG] [Thread-124380] [transport.py] [_log()] userauth is OK
2025-12-03T21:59:03.585 [DEBUG] [Thread-124380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:59:03.585 [DEBUG] [Thread-124380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:59:03.585 [DEBUG] [Thread-124380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:59:03.585 [DEBUG] [Thread-124380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:59:03.619 [INFO] [Thread-124380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:59:03.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:59:04.232 [DEBUG] [Thread-124380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:59:04.232 [DEBUG] [Thread-124380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:59:04.232 [DEBUG] [Thread-124380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:59:04.273 [DEBUG] [Thread-124380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:59:04.273 [DEBUG] [Thread-124380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:59:04.276 [DEBUG] [Thread-124380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:59:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:59:04.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:59:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:59:04.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:59:04.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:59:04.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:59:04.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:59:04.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:59:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:59:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.832342 -999.00  +16.10  15.63     39   +2.10 1 1 1 1 1     0    0 13.67 -20.67 ZNESW 15.6 15.6 141.6 22.6 16.4 -25.4 16.4 -24.7 16.1 -23.1 16.4 -24.0
2025-12-03T21:59:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:59:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:59:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.832342
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:59:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:58:45', tmtdew=16.02, humidity=33.72, cloud=0.0, wind=26.11, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:58:45', seeing=0.87, atlas_timestamp='2025-12-03T19:58:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:54:00')
2025-12-03T21:59:04.299 [DEBUG] [Thread-124380] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:59:04.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:59:04.403 [DEBUG] [Thread-124383] [transport.py] [_log()] starting thread (client mode): 0xa272a650
2025-12-03T21:59:04.403 [DEBUG] [Thread-124383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:59:04.417 [DEBUG] [Thread-124383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:59:04.418 [INFO] [Thread-124383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:59:04.425 [DEBUG] [Thread-124383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:59:04.425 [DEBUG] [Thread-124383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:59:04.425 [DEBUG] [Thread-124383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:59:04.425 [DEBUG] [Thread-124383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] client lang: <none>
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] server lang: <none>
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] kex follows: False
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] Compression: none
2025-12-03T21:59:04.426 [DEBUG] [Thread-124383] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:59:04.484 [DEBUG] [Thread-124383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:59:04.485 [DEBUG] [Thread-124383] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:59:04.485 [DEBUG] [Thread-124383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:59:04.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:59:04.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:59:04.540 [DEBUG] [Thread-124383] [transport.py] [_log()] userauth is OK
2025-12-03T21:59:04.540 [DEBUG] [Thread-124383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:59:04.540 [DEBUG] [Thread-124383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:59:04.540 [DEBUG] [Thread-124383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:59:04.541 [DEBUG] [Thread-124383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:59:04.560 [INFO] [Thread-124383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:59:04.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:59:04.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:59:05.376 [DEBUG] [Thread-124383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:59:05.377 [DEBUG] [Thread-124383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:59:05.425 [DEBUG] [Thread-124383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:59:05.425 [DEBUG] [Thread-124383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:59:05.437 [DEBUG] [Thread-124383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:59:05.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:59:05.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:59:05.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:59:05.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:59:05.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:59:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:59:05.475 [DEBUG] [Thread-124383] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:59:12.498 [DEBUG] [Thread-124385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:13.719 [DEBUG] [Thread-124386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:27.555 [DEBUG] [Thread-124387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:35.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T21:59:35.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T21:59:35.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T21:59:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 59, 17), 15.97, 33.82, 0.0, 25.87, 16.19, 0, 0, 0, 2, 0, 0),)
2025-12-03T21:59:36.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:59:17
2025-12-03T21:59:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T21:59:36.444 [DEBUG] [Thread-124388] [transport.py] [_log()] starting thread (client mode): 0xa271d900
2025-12-03T21:59:36.444 [DEBUG] [Thread-124388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:59:36.464 [DEBUG] [Thread-124388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T21:59:36.464 [INFO] [Thread-124388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] client lang: <none>
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] server lang: <none>
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] kex follows: False
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] Compression: none
2025-12-03T21:59:36.468 [DEBUG] [Thread-124388] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:59:36.485 [DEBUG] [Thread-124388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:59:36.485 [DEBUG] [Thread-124388] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:59:36.486 [DEBUG] [Thread-124388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T21:59:36.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T21:59:36.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:59:36.487 [DEBUG] [Thread-124388] [transport.py] [_log()] userauth is OK
2025-12-03T21:59:36.487 [DEBUG] [Thread-124388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:59:36.487 [DEBUG] [Thread-124388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:59:36.487 [DEBUG] [Thread-124388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T21:59:36.487 [DEBUG] [Thread-124388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:59:36.504 [INFO] [Thread-124388] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:59:36.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:59:37.172 [DEBUG] [Thread-124388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:59:37.172 [DEBUG] [Thread-124388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:59:37.172 [DEBUG] [Thread-124388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T21:59:37.212 [DEBUG] [Thread-124388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:59:37.213 [DEBUG] [Thread-124388] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:59:37.215 [DEBUG] [Thread-124388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:59:37.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:59:37.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T21:59:37.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T21:59:37.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T21:59:37.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:59:37.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T21:59:37.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.832689 -999.00  +16.10  19.69     39   +2.10 1 1 1 1 1     0    0 13.54 -20.84 ZNESW 19.7 19.7 144.4 25.8 16.4 -25.3 16.4 -24.8 16.1 -23.1 16.4 -24.0
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.832689
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T21:59:37.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:59:17', tmtdew=15.97, humidity=33.82, cloud=0.0, wind=25.87, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:59:17', seeing=0.87, atlas_timestamp='2025-12-03T19:59:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T21:59:37.233 [DEBUG] [Thread-124388] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:59:37.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T21:59:37.328 [DEBUG] [Thread-124391] [transport.py] [_log()] starting thread (client mode): 0xa514e830
2025-12-03T21:59:37.328 [DEBUG] [Thread-124391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T21:59:37.343 [DEBUG] [Thread-124391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T21:59:37.343 [INFO] [Thread-124391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] client lang: <none>
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] server lang: <none>
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] kex follows: False
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] Compression: none
2025-12-03T21:59:37.351 [DEBUG] [Thread-124391] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T21:59:37.411 [DEBUG] [Thread-124391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T21:59:37.411 [DEBUG] [Thread-124391] [transport.py] [_log()] Switch to new keys ...
2025-12-03T21:59:37.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T21:59:37.411 [DEBUG] [Thread-124391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T21:59:37.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T21:59:37.468 [DEBUG] [Thread-124391] [transport.py] [_log()] userauth is OK
2025-12-03T21:59:37.468 [DEBUG] [Thread-124391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T21:59:37.468 [DEBUG] [Thread-124391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T21:59:37.468 [DEBUG] [Thread-124391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T21:59:37.468 [DEBUG] [Thread-124391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T21:59:37.482 [INFO] [Thread-124391] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T21:59:37.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T21:59:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T21:59:38.332 [DEBUG] [Thread-124391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T21:59:38.333 [DEBUG] [Thread-124391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T21:59:38.380 [DEBUG] [Thread-124391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T21:59:38.380 [DEBUG] [Thread-124391] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T21:59:38.388 [DEBUG] [Thread-124391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T21:59:38.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T21:59:38.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T21:59:38.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T21:59:38.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T21:59:38.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T21:59:38.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T21:59:38.420 [DEBUG] [Thread-124391] [transport.py] [_log()] EOF in transport thread
2025-12-03T21:59:42.593 [DEBUG] [Thread-124393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:57.396 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:57.398 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T21:59:57.648 [DEBUG] [Thread-124394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:08.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:00:08.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:00:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:00:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 21, 59, 49), 15.9, 33.87, 0.0, 24.17, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:00:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 21:59:49
2025-12-03T22:00:09.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:00:09.410 [DEBUG] [Thread-124395] [transport.py] [_log()] starting thread (client mode): 0xa51d1d20
2025-12-03T22:00:09.410 [DEBUG] [Thread-124395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:00:09.430 [DEBUG] [Thread-124395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:00:09.430 [INFO] [Thread-124395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:00:09.433 [DEBUG] [Thread-124395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] client lang: <none>
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] server lang: <none>
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] kex follows: False
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] Compression: none
2025-12-03T22:00:09.434 [DEBUG] [Thread-124395] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:00:09.451 [DEBUG] [Thread-124395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:00:09.451 [DEBUG] [Thread-124395] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:00:09.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:00:09.452 [DEBUG] [Thread-124395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:00:09.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:00:09.454 [DEBUG] [Thread-124395] [transport.py] [_log()] userauth is OK
2025-12-03T22:00:09.454 [DEBUG] [Thread-124395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:00:09.454 [DEBUG] [Thread-124395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:00:09.455 [DEBUG] [Thread-124395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:00:09.455 [DEBUG] [Thread-124395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:00:09.473 [INFO] [Thread-124395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:00:09.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:00:10.248 [DEBUG] [Thread-124395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:00:10.248 [DEBUG] [Thread-124395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:00:10.249 [DEBUG] [Thread-124395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:00:10.290 [DEBUG] [Thread-124395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:00:10.291 [DEBUG] [Thread-124395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:00:10.293 [DEBUG] [Thread-124395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:00:10.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:00:10.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:00:10.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:00:10.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:00:10.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:00:10.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:00:10.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:00:10.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:00:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:00:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.833036 -999.00  +16.10  14.05     39   +2.20 1 1 1 1 1     0    0 13.61 -23.28 ZNESW 14.1 14.1 138.2 18.5 16.4 -25.4 16.3 -24.8 16.1 -23.1 16.3 -23.9
2025-12-03T22:00:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:00:10.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:00:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.833036
2025-12-03T22:00:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:00:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:00:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:00:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:00:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:00:10.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T21:59:49', tmtdew=15.9, humidity=33.87, cloud=0.0, wind=24.17, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T21:59:49', seeing=0.95, atlas_timestamp='2025-12-03T19:59:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T22:00:10.317 [DEBUG] [Thread-124395] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:00:10.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:00:10.425 [DEBUG] [Thread-124398] [transport.py] [_log()] starting thread (client mode): 0xa5197d90
2025-12-03T22:00:10.425 [DEBUG] [Thread-124398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:00:10.440 [DEBUG] [Thread-124398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:00:10.440 [INFO] [Thread-124398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:00:10.447 [DEBUG] [Thread-124398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] client lang: <none>
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] server lang: <none>
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] kex follows: False
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:00:10.448 [DEBUG] [Thread-124398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:00:10.449 [DEBUG] [Thread-124398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:00:10.449 [DEBUG] [Thread-124398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:00:10.449 [DEBUG] [Thread-124398] [transport.py] [_log()] Compression: none
2025-12-03T22:00:10.449 [DEBUG] [Thread-124398] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:00:10.505 [DEBUG] [Thread-124398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:00:10.506 [DEBUG] [Thread-124398] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:00:10.506 [DEBUG] [Thread-124398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:00:10.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:00:10.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:00:10.564 [DEBUG] [Thread-124398] [transport.py] [_log()] userauth is OK
2025-12-03T22:00:10.564 [DEBUG] [Thread-124398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:00:10.564 [DEBUG] [Thread-124398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:00:10.564 [DEBUG] [Thread-124398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:00:10.565 [DEBUG] [Thread-124398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:00:10.583 [INFO] [Thread-124398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:00:10.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:00:10.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:00:11.407 [DEBUG] [Thread-124398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:00:11.408 [DEBUG] [Thread-124398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:00:11.456 [DEBUG] [Thread-124398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:00:11.456 [DEBUG] [Thread-124398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:00:11.465 [DEBUG] [Thread-124398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:00:11.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:00:11.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:00:11.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:00:11.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:00:11.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:00:11.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:00:11.500 [DEBUG] [Thread-124398] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:00:12.687 [DEBUG] [Thread-124400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:13.779 [DEBUG] [Thread-124401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:27.736 [DEBUG] [Thread-124402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:41.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:00:41.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:00:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:00:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 0, 21), 15.94, 33.77, 0.0, 22.37, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:00:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:00:21
2025-12-03T22:00:42.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:00:42.468 [DEBUG] [Thread-124403] [transport.py] [_log()] starting thread (client mode): 0xa51e65c0
2025-12-03T22:00:42.468 [DEBUG] [Thread-124403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:00:42.489 [DEBUG] [Thread-124403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:00:42.489 [INFO] [Thread-124403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:00:42.492 [DEBUG] [Thread-124403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:00:42.492 [DEBUG] [Thread-124403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:00:42.492 [DEBUG] [Thread-124403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] client lang: <none>
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] server lang: <none>
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] kex follows: False
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] Compression: none
2025-12-03T22:00:42.493 [DEBUG] [Thread-124403] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:00:42.510 [DEBUG] [Thread-124403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:00:42.511 [DEBUG] [Thread-124403] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:00:42.511 [DEBUG] [Thread-124403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:00:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:00:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:00:42.513 [DEBUG] [Thread-124403] [transport.py] [_log()] userauth is OK
2025-12-03T22:00:42.513 [DEBUG] [Thread-124403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:00:42.514 [DEBUG] [Thread-124403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:00:42.514 [DEBUG] [Thread-124403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:00:42.514 [DEBUG] [Thread-124403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:00:42.537 [INFO] [Thread-124403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:00:42.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:00:42.773 [DEBUG] [Thread-124405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:43.173 [DEBUG] [Thread-124403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:00:43.173 [DEBUG] [Thread-124403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:00:43.173 [DEBUG] [Thread-124403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:00:43.214 [DEBUG] [Thread-124403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:00:43.214 [DEBUG] [Thread-124403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:00:43.217 [DEBUG] [Thread-124403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:00:43.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:00:43.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:00:43.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:00:43.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:00:43.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:00:43.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:00:43.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:00:43.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.833383 -999.00  +16.10  16.56     39   +2.10 1 1 1 1 1     0    0 13.40 -23.82 ZNESW 16.6 16.6 144.6 27.1 16.4 -25.3 16.3 -24.7 16.1 -23.1 16.4 -24.1
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.833383
2025-12-03T22:00:43.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:00:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:00:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:00:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:00:43.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:00:43.242 [DEBUG] [Thread-124403] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:00:43.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:00:21', tmtdew=15.94, humidity=33.77, cloud=0.0, wind=22.37, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:00:21', seeing=0.95, atlas_timestamp='2025-12-03T20:00:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T22:00:43.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:00:43.345 [DEBUG] [Thread-124407] [transport.py] [_log()] starting thread (client mode): 0xa27ca620
2025-12-03T22:00:43.345 [DEBUG] [Thread-124407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:00:43.360 [DEBUG] [Thread-124407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:00:43.360 [INFO] [Thread-124407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] client lang: <none>
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] server lang: <none>
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] kex follows: False
2025-12-03T22:00:43.368 [DEBUG] [Thread-124407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] Compression: none
2025-12-03T22:00:43.369 [DEBUG] [Thread-124407] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:00:43.428 [DEBUG] [Thread-124407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:00:43.428 [DEBUG] [Thread-124407] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:00:43.428 [DEBUG] [Thread-124407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:00:43.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:00:43.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:00:43.484 [DEBUG] [Thread-124407] [transport.py] [_log()] userauth is OK
2025-12-03T22:00:43.484 [DEBUG] [Thread-124407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:00:43.484 [DEBUG] [Thread-124407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:00:43.485 [DEBUG] [Thread-124407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:00:43.485 [DEBUG] [Thread-124407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:00:43.504 [INFO] [Thread-124407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:00:43.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:00:43.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:00:44.346 [DEBUG] [Thread-124407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:00:44.346 [DEBUG] [Thread-124407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:00:44.394 [DEBUG] [Thread-124407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:00:44.394 [DEBUG] [Thread-124407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:00:44.403 [DEBUG] [Thread-124407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:00:44.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:00:44.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:00:44.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:00:44.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:00:44.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:00:44.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:00:44.438 [DEBUG] [Thread-124407] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:00:57.605 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:57.606 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:00:57.805 [DEBUG] [Thread-124409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:12.856 [DEBUG] [Thread-124410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:13.836 [DEBUG] [Thread-124411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:01:14.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:01:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 0, 53), 15.93, 33.79, 0.0, 22.44, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:00:53
2025-12-03T22:01:15.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:01:15.412 [DEBUG] [Thread-124412] [transport.py] [_log()] starting thread (client mode): 0xa51d0df0
2025-12-03T22:01:15.412 [DEBUG] [Thread-124412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:01:15.433 [DEBUG] [Thread-124412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:01:15.433 [INFO] [Thread-124412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:01:15.436 [DEBUG] [Thread-124412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:01:15.437 [DEBUG] [Thread-124412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] client lang: <none>
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] server lang: <none>
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] kex follows: False
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:01:15.438 [DEBUG] [Thread-124412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:01:15.439 [DEBUG] [Thread-124412] [transport.py] [_log()] Compression: none
2025-12-03T22:01:15.439 [DEBUG] [Thread-124412] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:01:15.458 [DEBUG] [Thread-124412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:01:15.459 [DEBUG] [Thread-124412] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:01:15.459 [DEBUG] [Thread-124412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:01:15.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:01:15.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:01:15.461 [DEBUG] [Thread-124412] [transport.py] [_log()] userauth is OK
2025-12-03T22:01:15.462 [DEBUG] [Thread-124412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:01:15.462 [DEBUG] [Thread-124412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:01:15.462 [DEBUG] [Thread-124412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:01:15.462 [DEBUG] [Thread-124412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:01:15.486 [INFO] [Thread-124412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:01:15.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:01:16.140 [DEBUG] [Thread-124412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:01:16.140 [DEBUG] [Thread-124412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:01:16.141 [DEBUG] [Thread-124412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:01:16.182 [DEBUG] [Thread-124412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:01:16.182 [DEBUG] [Thread-124412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:01:16.184 [DEBUG] [Thread-124412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:01:16.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:01:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:01:16.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:01:16.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:01:16.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:01:16.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:01:16.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:01:16.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.833731 -999.00  +16.10  19.04     39   +2.10 1 1 1 1 1     0    0 13.59 -24.08 ZNESW 19.0 19.0 142.0 23.5 16.4 -25.4 16.3 -24.9 16.1 -23.2 16.3 -24.0
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.833731
2025-12-03T22:01:16.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:01:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:01:16.206 [DEBUG] [Thread-124412] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:01:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:01:16.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:01:16.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:01:16.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:00:53', tmtdew=15.93, humidity=33.79, cloud=0.0, wind=22.44, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:00:53', seeing=0.94, atlas_timestamp='2025-12-03T20:00:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T22:01:16.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:01:16.307 [DEBUG] [Thread-124415] [transport.py] [_log()] starting thread (client mode): 0xa271fd60
2025-12-03T22:01:16.307 [DEBUG] [Thread-124415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:01:16.322 [DEBUG] [Thread-124415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:01:16.322 [INFO] [Thread-124415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:01:16.329 [DEBUG] [Thread-124415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] client lang: <none>
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] server lang: <none>
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] kex follows: False
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:01:16.330 [DEBUG] [Thread-124415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:01:16.331 [DEBUG] [Thread-124415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:01:16.331 [DEBUG] [Thread-124415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:01:16.331 [DEBUG] [Thread-124415] [transport.py] [_log()] Compression: none
2025-12-03T22:01:16.331 [DEBUG] [Thread-124415] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:01:16.387 [DEBUG] [Thread-124415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:01:16.388 [DEBUG] [Thread-124415] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:01:16.388 [DEBUG] [Thread-124415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:01:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:01:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:01:16.448 [DEBUG] [Thread-124415] [transport.py] [_log()] userauth is OK
2025-12-03T22:01:16.448 [DEBUG] [Thread-124415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:01:16.448 [DEBUG] [Thread-124415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:01:16.448 [DEBUG] [Thread-124415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:01:16.448 [DEBUG] [Thread-124415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:01:16.466 [INFO] [Thread-124415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:01:16.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:01:16.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:01:17.314 [DEBUG] [Thread-124415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:01:17.314 [DEBUG] [Thread-124415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:01:17.362 [DEBUG] [Thread-124415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:01:17.362 [DEBUG] [Thread-124415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:01:17.371 [DEBUG] [Thread-124415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:01:17.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:01:17.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:01:17.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:01:17.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:01:17.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:01:17.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:01:17.406 [DEBUG] [Thread-124415] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:01:27.897 [DEBUG] [Thread-124417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:42.955 [DEBUG] [Thread-124418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:47.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:01:47.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:01:47.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:01:47.849 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:48.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 1, 26), 15.89, 33.89, 0.0, 21.88, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:01:48.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:01:26
2025-12-03T22:01:48.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:01:48.379 [DEBUG] [Thread-124419] [transport.py] [_log()] starting thread (client mode): 0xa27c8a60
2025-12-03T22:01:48.379 [DEBUG] [Thread-124419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:01:48.395 [DEBUG] [Thread-124419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:01:48.395 [INFO] [Thread-124419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] client lang: <none>
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] server lang: <none>
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] kex follows: False
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] Compression: none
2025-12-03T22:01:48.398 [DEBUG] [Thread-124419] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:01:48.417 [DEBUG] [Thread-124419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:01:48.417 [DEBUG] [Thread-124419] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:01:48.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:01:48.418 [DEBUG] [Thread-124419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:01:48.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:01:48.460 [DEBUG] [Thread-124419] [transport.py] [_log()] userauth is OK
2025-12-03T22:01:48.461 [DEBUG] [Thread-124419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:01:48.461 [DEBUG] [Thread-124419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:01:48.461 [DEBUG] [Thread-124419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:01:48.461 [DEBUG] [Thread-124419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:01:48.496 [INFO] [Thread-124419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:01:48.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:01:49.113 [DEBUG] [Thread-124419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:01:49.113 [DEBUG] [Thread-124419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:01:49.114 [DEBUG] [Thread-124419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:01:49.154 [DEBUG] [Thread-124419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:01:49.154 [DEBUG] [Thread-124419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:01:49.157 [DEBUG] [Thread-124419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:01:49.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:01:49.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:01:49.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:01:49.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:01:49.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:01:49.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:01:49.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.834425 -999.00  +16.00  17.99     39   +2.20 1 1 1 1 1     0    0 13.31 -28.55 ZNESW 18.0 18.0 151.8 27.8 16.4 -25.2 16.3 -24.6 16.1 -23.1 16.4 -23.9
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:01:49.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.834425
2025-12-03T22:01:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:01:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:01:49.183 [DEBUG] [Thread-124419] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:01:49.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:01:49.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:01:49.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:01:49.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:01:26', tmtdew=15.89, humidity=33.89, cloud=0.0, wind=21.88, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:01:26', seeing=0.95, atlas_timestamp='2025-12-03T20:01:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T22:01:49.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:01:49.286 [DEBUG] [Thread-124422] [transport.py] [_log()] starting thread (client mode): 0xa27c8d00
2025-12-03T22:01:49.286 [DEBUG] [Thread-124422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:01:49.300 [DEBUG] [Thread-124422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:01:49.301 [INFO] [Thread-124422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:01:49.308 [DEBUG] [Thread-124422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:01:49.308 [DEBUG] [Thread-124422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:01:49.308 [DEBUG] [Thread-124422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:01:49.308 [DEBUG] [Thread-124422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:49.308 [DEBUG] [Thread-124422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] client lang: <none>
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] server lang: <none>
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] kex follows: False
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:01:49.309 [DEBUG] [Thread-124422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:01:49.310 [DEBUG] [Thread-124422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:01:49.310 [DEBUG] [Thread-124422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:01:49.310 [DEBUG] [Thread-124422] [transport.py] [_log()] Compression: none
2025-12-03T22:01:49.310 [DEBUG] [Thread-124422] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:01:49.368 [DEBUG] [Thread-124422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:01:49.369 [DEBUG] [Thread-124422] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:01:49.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:01:49.370 [DEBUG] [Thread-124422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:01:49.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:01:49.424 [DEBUG] [Thread-124422] [transport.py] [_log()] userauth is OK
2025-12-03T22:01:49.424 [DEBUG] [Thread-124422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:01:49.424 [DEBUG] [Thread-124422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:01:49.424 [DEBUG] [Thread-124422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:01:49.424 [DEBUG] [Thread-124422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:01:49.444 [INFO] [Thread-124422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:01:49.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:01:49.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:01:50.299 [DEBUG] [Thread-124422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:01:50.299 [DEBUG] [Thread-124422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:01:50.347 [DEBUG] [Thread-124422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:01:50.347 [DEBUG] [Thread-124422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:01:50.356 [DEBUG] [Thread-124422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:01:50.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:01:50.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:01:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:01:50.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:01:50.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:01:50.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:01:50.390 [DEBUG] [Thread-124422] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:01:51.008 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:56.049 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:57.815 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:57.817 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:01:57.992 [DEBUG] [Thread-124424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:01.481 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:13.047 [DEBUG] [Thread-124425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:13.890 [DEBUG] [Thread-124426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:20.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:02:20.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:02:20.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:02:20.803 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 1, 58), 15.9, 33.87, 0.0, 25.41, 16.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:02:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:01:58
2025-12-03T22:02:21.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:02:21.371 [DEBUG] [Thread-124427] [transport.py] [_log()] starting thread (client mode): 0xa27c8430
2025-12-03T22:02:21.371 [DEBUG] [Thread-124427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:02:21.391 [DEBUG] [Thread-124427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:02:21.391 [INFO] [Thread-124427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:02:21.392 [DEBUG] [Thread-124427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:02:21.392 [DEBUG] [Thread-124427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:02:21.392 [DEBUG] [Thread-124427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:02:21.392 [DEBUG] [Thread-124427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:21.392 [DEBUG] [Thread-124427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] client lang: <none>
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] server lang: <none>
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] kex follows: False
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] Compression: none
2025-12-03T22:02:21.393 [DEBUG] [Thread-124427] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:02:21.401 [DEBUG] [Thread-124427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:02:21.401 [DEBUG] [Thread-124427] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:02:21.401 [DEBUG] [Thread-124427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:02:21.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:02:21.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:02:21.402 [DEBUG] [Thread-124427] [transport.py] [_log()] userauth is OK
2025-12-03T22:02:21.402 [DEBUG] [Thread-124427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:02:21.402 [DEBUG] [Thread-124427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:02:21.402 [DEBUG] [Thread-124427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:02:21.402 [DEBUG] [Thread-124427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:02:21.411 [INFO] [Thread-124427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:02:21.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:02:22.021 [DEBUG] [Thread-124427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:02:22.021 [DEBUG] [Thread-124427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:02:22.021 [DEBUG] [Thread-124427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:02:22.062 [DEBUG] [Thread-124427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:02:22.062 [DEBUG] [Thread-124427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:02:22.064 [DEBUG] [Thread-124427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:02:22.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:02:22.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:02:22.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:02:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:02:22.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:02:22.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:02:22.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:02:22.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:02:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:02:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.834772 -999.00  +16.10  23.44     39   +2.20 1 1 1 1 1     0    0 13.38 -28.94 ZNESW 23.4 23.4 146.0 27.0 16.4 -25.3 16.3 -24.7 16.1 -23.1 16.4 -23.8
2025-12-03T22:02:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:02:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:02:22.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.834772
2025-12-03T22:02:22.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:02:22.089 [DEBUG] [Thread-124427] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:02:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:02:22.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:02:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:02:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:02:22.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:01:58', tmtdew=15.9, humidity=33.87, cloud=0.0, wind=25.41, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:01:58', seeing=0.87, atlas_timestamp='2025-12-03T20:02:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.005250000000000199, -0.051750000000000185, 0.05925000000000047, -0.0365000000000002, 0.03449999999999953, -0.005749999999999034, -0.027000000000001023, -0.003750000000000142, 0.07049999999999912, 0.0009999999999994458, -0.003750000000000142, -0.07499999999999929, 0.0600000000000005, 0.0467499999999994, -0.02500000000000213, -0.10699999999999932, -0.03275000000000006, 0.05149999999999899, 0.02099999999999902, -0.019750000000001933, -0.030000000000001137, 0.021749999999999048, 0.026250000000000995, -0.4077499999999983, -0.07350000000000101, 0.045499999999998764, 0.010749999999999815, 0.017999999999998906, 0.12299999999999933, 0.08500000000000085, -0.02549999999999919, -0.2530000000000001, 0.023749999999999716], zp_timestamp='2025-12-03T19:58:00')
2025-12-03T22:02:22.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:02:22.211 [DEBUG] [Thread-124430] [transport.py] [_log()] starting thread (client mode): 0xa2728310
2025-12-03T22:02:22.211 [DEBUG] [Thread-124430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:02:22.227 [DEBUG] [Thread-124430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:02:22.227 [INFO] [Thread-124430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:02:22.234 [DEBUG] [Thread-124430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:02:22.235 [DEBUG] [Thread-124430] [transport.py] [_log()] client lang: <none>
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] server lang: <none>
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] kex follows: False
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:02:22.236 [DEBUG] [Thread-124430] [transport.py] [_log()] Compression: none
2025-12-03T22:02:22.237 [DEBUG] [Thread-124430] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:02:22.291 [DEBUG] [Thread-124430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:02:22.292 [DEBUG] [Thread-124430] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:02:22.292 [DEBUG] [Thread-124430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:02:22.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:02:22.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:02:22.348 [DEBUG] [Thread-124430] [transport.py] [_log()] userauth is OK
2025-12-03T22:02:22.348 [DEBUG] [Thread-124430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:02:22.348 [DEBUG] [Thread-124430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:02:22.348 [DEBUG] [Thread-124430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:02:22.349 [DEBUG] [Thread-124430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:02:22.367 [INFO] [Thread-124430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:02:22.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:02:22.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:02:23.212 [DEBUG] [Thread-124430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:02:23.212 [DEBUG] [Thread-124430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:02:23.260 [DEBUG] [Thread-124430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:02:23.260 [DEBUG] [Thread-124430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:02:23.272 [DEBUG] [Thread-124430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:02:23.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:02:23.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:02:23.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:02:23.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:02:23.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:02:23.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:02:23.307 [DEBUG] [Thread-124430] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:02:25.204 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:28.081 [DEBUG] [Thread-124432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:43.139 [DEBUG] [Thread-124433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:44.575 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:48.968 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:53.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:02:53.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:02:53.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:02:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 2, 30), 15.84, 34.0, 0.0, 26.7, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:02:54.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:02:30
2025-12-03T22:02:54.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:02:54.306 [DEBUG] [Thread-124434] [transport.py] [_log()] starting thread (client mode): 0xa51d3100
2025-12-03T22:02:54.306 [DEBUG] [Thread-124434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:02:54.327 [DEBUG] [Thread-124434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:02:54.327 [INFO] [Thread-124434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] client lang: <none>
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] server lang: <none>
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] kex follows: False
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] Compression: none
2025-12-03T22:02:54.329 [DEBUG] [Thread-124434] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:02:54.346 [DEBUG] [Thread-124434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:02:54.346 [DEBUG] [Thread-124434] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:02:54.346 [DEBUG] [Thread-124434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:02:54.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:02:54.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:02:54.347 [DEBUG] [Thread-124434] [transport.py] [_log()] userauth is OK
2025-12-03T22:02:54.347 [DEBUG] [Thread-124434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:02:54.347 [DEBUG] [Thread-124434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:02:54.347 [DEBUG] [Thread-124434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:02:54.347 [DEBUG] [Thread-124434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:02:54.358 [INFO] [Thread-124434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:02:54.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:02:54.942 [DEBUG] [Thread-124434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:02:54.942 [DEBUG] [Thread-124434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:02:54.942 [DEBUG] [Thread-124434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:02:54.983 [DEBUG] [Thread-124434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:02:54.983 [DEBUG] [Thread-124434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:02:54.985 [DEBUG] [Thread-124434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:02:54.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:02:54.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:02:54.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:02:54.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:02:55.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:02:55.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:02:55.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.835119 -999.00  +16.10  19.49     39   +2.20 1 1 1 1 1     0    0 12.99 -33.21 ZNESW 19.5 19.5 144.6 28.8 16.4 -25.3 16.3 -24.7 16.1 -23.1 16.3 -23.8
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.835119
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:02:55.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:02:30', tmtdew=15.84, humidity=34.0, cloud=0.0, wind=26.7, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:02:30', seeing=0.98, atlas_timestamp='2025-12-03T20:02:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.026250000000000995, 0.006249999999999645, 0.05149999999999899, 0.014499999999999957, 0.008750000000000924, -0.06649999999999956, -0.008749999999999147, 0.0034999999999989484, 0.03500000000000014, -0.014750000000001151, -0.0519999999999996, 0.06099999999999994, 0.09124999999999872, -0.051000000000000156, -0.013999999999999346, 0.0182500000000001, 0.05599999999999916, 0.03999999999999915, -0.0037500000000019185, 0.03599999999999959, 0.06374999999999886, -0.05274999999999963, -0.2672499999999989, -0.021500000000001407, 0.024499999999999744, 0.03325000000000067, 0.06750000000000078, 0.19400000000000084, 0.11350000000000193, 0.03900000000000148, -0.1609999999999978, 0.021749999999999048], zp_timestamp='2025-12-03T20:01:00')
2025-12-03T22:02:55.004 [DEBUG] [Thread-124434] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:02:55.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:02:55.089 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:55.097 [DEBUG] [Thread-124437] [transport.py] [_log()] starting thread (client mode): 0xa51d08e0
2025-12-03T22:02:55.097 [DEBUG] [Thread-124437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:02:55.113 [DEBUG] [Thread-124437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:02:55.113 [INFO] [Thread-124437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] client lang: <none>
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] server lang: <none>
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] kex follows: False
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] Compression: none
2025-12-03T22:02:55.121 [DEBUG] [Thread-124437] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:02:55.178 [DEBUG] [Thread-124437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:02:55.178 [DEBUG] [Thread-124437] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:02:55.178 [DEBUG] [Thread-124437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:02:55.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:02:55.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:02:55.236 [DEBUG] [Thread-124437] [transport.py] [_log()] userauth is OK
2025-12-03T22:02:55.236 [DEBUG] [Thread-124437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:02:55.236 [DEBUG] [Thread-124437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:02:55.237 [DEBUG] [Thread-124437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:02:55.237 [DEBUG] [Thread-124437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:02:55.251 [INFO] [Thread-124437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:02:55.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:02:55.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:02:56.090 [DEBUG] [Thread-124437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:02:56.091 [DEBUG] [Thread-124437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:02:56.139 [DEBUG] [Thread-124437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:02:56.139 [DEBUG] [Thread-124437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:02:56.147 [DEBUG] [Thread-124437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:02:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:02:56.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:02:56.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:02:56.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:02:56.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:02:56.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:02:56.182 [DEBUG] [Thread-124437] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:02:58.020 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:58.021 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:58.176 [DEBUG] [Thread-124439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:02:59.497 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:13.235 [DEBUG] [Thread-124440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:13.954 [DEBUG] [Thread-124441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:26.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:03:26.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:03:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:03:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 3, 2), 15.83, 34.02, 0.0, 26.45, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:03:26.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:03:02
2025-12-03T22:03:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:03:27.145 [DEBUG] [Thread-124442] [transport.py] [_log()] starting thread (client mode): 0xa27c9cc0
2025-12-03T22:03:27.145 [DEBUG] [Thread-124442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:03:27.165 [DEBUG] [Thread-124442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:03:27.165 [INFO] [Thread-124442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:03:27.168 [DEBUG] [Thread-124442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:03:27.168 [DEBUG] [Thread-124442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] client lang: <none>
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] server lang: <none>
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] kex follows: False
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] Compression: none
2025-12-03T22:03:27.169 [DEBUG] [Thread-124442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:03:27.187 [DEBUG] [Thread-124442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:03:27.187 [DEBUG] [Thread-124442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:03:27.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:03:27.188 [DEBUG] [Thread-124442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:03:27.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:03:27.190 [DEBUG] [Thread-124442] [transport.py] [_log()] userauth is OK
2025-12-03T22:03:27.190 [DEBUG] [Thread-124442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:03:27.190 [DEBUG] [Thread-124442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:03:27.190 [DEBUG] [Thread-124442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:03:27.190 [DEBUG] [Thread-124442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:03:27.214 [INFO] [Thread-124442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:03:27.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:03:27.810 [DEBUG] [Thread-124442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:03:27.810 [DEBUG] [Thread-124442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:03:27.810 [DEBUG] [Thread-124442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:03:27.851 [DEBUG] [Thread-124442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:03:27.851 [DEBUG] [Thread-124442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:03:27.854 [DEBUG] [Thread-124442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:03:27.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:03:27.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:03:27.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:03:27.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:03:27.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:03:27.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:03:27.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.835119 -999.00  +16.10  19.49     39   +2.20 1 1 1 1 1     0    0 12.99 -33.21 ZNESW 19.5 19.5 144.6 28.8 16.4 -25.3 16.3 -24.7 16.1 -23.1 16.3 -23.8
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:03:27.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.835119
2025-12-03T22:03:27.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:03:27.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:03:27.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:03:27.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:03:27.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:03:27.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:03:02', tmtdew=15.83, humidity=34.02, cloud=0.0, wind=26.45, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:03:02', seeing=0.98, atlas_timestamp='2025-12-03T20:02:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.026250000000000995, 0.006249999999999645, 0.05149999999999899, 0.014499999999999957, 0.008750000000000924, -0.06649999999999956, -0.008749999999999147, 0.0034999999999989484, 0.03500000000000014, -0.014750000000001151, -0.0519999999999996, 0.06099999999999994, 0.09124999999999872, -0.051000000000000156, -0.013999999999999346, 0.0182500000000001, 0.05599999999999916, 0.03999999999999915, -0.0037500000000019185, 0.03599999999999959, 0.06374999999999886, -0.05274999999999963, -0.2672499999999989, -0.021500000000001407, 0.024499999999999744, 0.03325000000000067, 0.06750000000000078, 0.19400000000000084, 0.11350000000000193, 0.03900000000000148, -0.1609999999999978, 0.021749999999999048], zp_timestamp='2025-12-03T20:01:00')
2025-12-03T22:03:27.880 [DEBUG] [Thread-124442] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:03:27.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:03:27.984 [DEBUG] [Thread-124445] [transport.py] [_log()] starting thread (client mode): 0xa271cbb0
2025-12-03T22:03:27.984 [DEBUG] [Thread-124445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:03:28.000 [DEBUG] [Thread-124445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:03:28.000 [INFO] [Thread-124445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] client lang: <none>
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] server lang: <none>
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] kex follows: False
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] Compression: none
2025-12-03T22:03:28.008 [DEBUG] [Thread-124445] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:03:28.067 [DEBUG] [Thread-124445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:03:28.067 [DEBUG] [Thread-124445] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:03:28.067 [DEBUG] [Thread-124445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:03:28.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:03:28.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:03:28.128 [DEBUG] [Thread-124445] [transport.py] [_log()] userauth is OK
2025-12-03T22:03:28.128 [DEBUG] [Thread-124445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:03:28.128 [DEBUG] [Thread-124445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:03:28.128 [DEBUG] [Thread-124445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:03:28.128 [DEBUG] [Thread-124445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:03:28.146 [INFO] [Thread-124445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:03:28.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:03:28.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:03:28.272 [DEBUG] [Thread-124447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:29.003 [DEBUG] [Thread-124445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:03:29.003 [DEBUG] [Thread-124445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:03:29.052 [DEBUG] [Thread-124445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:03:29.052 [DEBUG] [Thread-124445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:03:29.060 [DEBUG] [Thread-124445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:03:29.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:03:29.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:03:29.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:03:29.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:03:29.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:03:29.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:03:29.093 [DEBUG] [Thread-124445] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:03:43.318 [DEBUG] [Thread-124448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:58.235 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:58.237 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:58.353 [DEBUG] [Thread-124449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:03:59.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:03:59.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:03:59.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:03:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 3, 34), 15.82, 34.04, 0.0, 24.21, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:03:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:03:34
2025-12-03T22:03:59.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:04:00.125 [DEBUG] [Thread-124450] [transport.py] [_log()] starting thread (client mode): 0xa271e290
2025-12-03T22:04:00.125 [DEBUG] [Thread-124450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:04:00.145 [DEBUG] [Thread-124450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:04:00.145 [INFO] [Thread-124450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:04:00.148 [DEBUG] [Thread-124450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] client lang: <none>
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] server lang: <none>
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] kex follows: False
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] Compression: none
2025-12-03T22:04:00.149 [DEBUG] [Thread-124450] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:04:00.166 [DEBUG] [Thread-124450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:04:00.167 [DEBUG] [Thread-124450] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:04:00.167 [DEBUG] [Thread-124450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:04:00.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:04:00.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:04:00.169 [DEBUG] [Thread-124450] [transport.py] [_log()] userauth is OK
2025-12-03T22:04:00.169 [DEBUG] [Thread-124450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:04:00.170 [DEBUG] [Thread-124450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:04:00.170 [DEBUG] [Thread-124450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:04:00.170 [DEBUG] [Thread-124450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:04:00.187 [INFO] [Thread-124450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:04:00.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:04:00.820 [DEBUG] [Thread-124450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:04:00.821 [DEBUG] [Thread-124450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:04:00.821 [DEBUG] [Thread-124450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:04:00.862 [DEBUG] [Thread-124450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:04:00.862 [DEBUG] [Thread-124450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:04:00.865 [DEBUG] [Thread-124450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:04:00.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:04:00.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:04:00.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:04:00.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:04:00.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:04:00.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:04:00.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.835467 -999.00  +16.10  16.05     39   +2.20 1 1 1 1 1     0    0 12.99 -32.49 ZNESW 16.1 16.1 141.8 21.7 16.4 -25.4 16.3 -24.8 16.1 -23.1 16.3 -23.9
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:04:00.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.835467
2025-12-03T22:04:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:04:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:04:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:04:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:04:00.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:04:00.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:03:34', tmtdew=15.82, humidity=34.04, cloud=0.0, wind=24.21, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:03:34', seeing=1.01, atlas_timestamp='2025-12-03T20:03:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.026250000000000995, 0.006249999999999645, 0.05149999999999899, 0.014499999999999957, 0.008750000000000924, -0.06649999999999956, -0.008749999999999147, 0.0034999999999989484, 0.03500000000000014, -0.014750000000001151, -0.0519999999999996, 0.06099999999999994, 0.09124999999999872, -0.051000000000000156, -0.013999999999999346, 0.0182500000000001, 0.05599999999999916, 0.03999999999999915, -0.0037500000000019185, 0.03599999999999959, 0.06374999999999886, -0.05274999999999963, -0.2672499999999989, -0.021500000000001407, 0.024499999999999744, 0.03325000000000067, 0.06750000000000078, 0.19400000000000084, 0.11350000000000193, 0.03900000000000148, -0.1609999999999978, 0.021749999999999048], zp_timestamp='2025-12-03T20:01:00')
2025-12-03T22:04:00.887 [DEBUG] [Thread-124450] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:04:00.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:04:00.991 [DEBUG] [Thread-124453] [transport.py] [_log()] starting thread (client mode): 0xa27607c0
2025-12-03T22:04:00.991 [DEBUG] [Thread-124453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:04:01.010 [DEBUG] [Thread-124453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:04:01.010 [INFO] [Thread-124453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:04:01.017 [DEBUG] [Thread-124453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:04:01.017 [DEBUG] [Thread-124453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:04:01.017 [DEBUG] [Thread-124453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] client lang: <none>
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] server lang: <none>
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] kex follows: False
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] Compression: none
2025-12-03T22:04:01.018 [DEBUG] [Thread-124453] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:04:01.076 [DEBUG] [Thread-124453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:04:01.076 [DEBUG] [Thread-124453] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:04:01.077 [DEBUG] [Thread-124453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:04:01.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:04:01.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:04:01.132 [DEBUG] [Thread-124453] [transport.py] [_log()] userauth is OK
2025-12-03T22:04:01.132 [DEBUG] [Thread-124453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:04:01.132 [DEBUG] [Thread-124453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:04:01.132 [DEBUG] [Thread-124453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:04:01.132 [DEBUG] [Thread-124453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:04:01.151 [INFO] [Thread-124453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:04:01.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:04:01.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:04:02.013 [DEBUG] [Thread-124453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:04:02.013 [DEBUG] [Thread-124453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:04:02.065 [DEBUG] [Thread-124453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:04:02.066 [DEBUG] [Thread-124453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:04:02.075 [DEBUG] [Thread-124453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:04:02.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:04:02.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:04:02.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:04:02.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:04:02.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:04:02.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:04:02.110 [DEBUG] [Thread-124453] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:04:10.332 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:13.386 [DEBUG] [Thread-124455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:14.023 [DEBUG] [Thread-124456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:14.402 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:28.447 [DEBUG] [Thread-124457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:32.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:04:32.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:04:32.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:04:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 4, 6), 15.84, 34.0, 0.0, 22.62, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:04:32.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:04:06
2025-12-03T22:04:32.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:04:33.087 [DEBUG] [Thread-124458] [transport.py] [_log()] starting thread (client mode): 0xa27cacb0
2025-12-03T22:04:33.087 [DEBUG] [Thread-124458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:04:33.106 [DEBUG] [Thread-124458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:04:33.106 [INFO] [Thread-124458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:04:33.109 [DEBUG] [Thread-124458] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:04:33.109 [DEBUG] [Thread-124458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:04:33.109 [DEBUG] [Thread-124458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:04:33.109 [DEBUG] [Thread-124458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] client lang: <none>
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] server lang: <none>
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] kex follows: False
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] Compression: none
2025-12-03T22:04:33.110 [DEBUG] [Thread-124458] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:04:33.131 [DEBUG] [Thread-124458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:04:33.131 [DEBUG] [Thread-124458] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:04:33.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:04:33.132 [DEBUG] [Thread-124458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:04:33.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:04:33.134 [DEBUG] [Thread-124458] [transport.py] [_log()] userauth is OK
2025-12-03T22:04:33.134 [DEBUG] [Thread-124458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:04:33.135 [DEBUG] [Thread-124458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:04:33.135 [DEBUG] [Thread-124458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:04:33.135 [DEBUG] [Thread-124458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:04:33.156 [INFO] [Thread-124458] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:04:33.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:04:33.827 [DEBUG] [Thread-124458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:04:33.827 [DEBUG] [Thread-124458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:04:33.828 [DEBUG] [Thread-124458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:04:33.868 [DEBUG] [Thread-124458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:04:33.868 [DEBUG] [Thread-124458] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:04:33.871 [DEBUG] [Thread-124458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:04:33.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:04:33.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:04:33.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:04:33.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:04:33.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:04:33.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:04:33.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:04:33.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:04:33.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:04:33.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.835814 -999.00  +16.10  18.42     39   +2.20 1 1 1 1 1     0    0 13.19 -34.55 ZNESW 18.4 18.4 145.6 23.5 16.4 -25.2 16.3 -24.8 16.1 -23.0 16.4 -24.0
2025-12-03T22:04:33.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:04:33.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:04:33.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.835814
2025-12-03T22:04:33.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:04:33.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:04:33.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:04:33.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:04:33.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:04:33.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:04:06', tmtdew=15.84, humidity=34.0, cloud=0.0, wind=22.62, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:04:06', seeing=1.03, atlas_timestamp='2025-12-03T20:03:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.026250000000000995, 0.006249999999999645, 0.05149999999999899, 0.014499999999999957, 0.008750000000000924, -0.06649999999999956, -0.008749999999999147, 0.0034999999999989484, 0.03500000000000014, -0.014750000000001151, -0.0519999999999996, 0.06099999999999994, 0.09124999999999872, -0.051000000000000156, -0.013999999999999346, 0.0182500000000001, 0.05599999999999916, 0.03999999999999915, -0.0037500000000019185, 0.03599999999999959, 0.06374999999999886, -0.05274999999999963, -0.2672499999999989, -0.021500000000001407, 0.024499999999999744, 0.03325000000000067, 0.06750000000000078, 0.19400000000000084, 0.11350000000000193, 0.03900000000000148, -0.1609999999999978, 0.021749999999999048], zp_timestamp='2025-12-03T20:01:00')
2025-12-03T22:04:33.896 [DEBUG] [Thread-124458] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:04:33.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:04:34.002 [DEBUG] [Thread-124461] [transport.py] [_log()] starting thread (client mode): 0xa51d3640
2025-12-03T22:04:34.002 [DEBUG] [Thread-124461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:04:34.016 [DEBUG] [Thread-124461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:04:34.017 [INFO] [Thread-124461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:04:34.024 [DEBUG] [Thread-124461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] client lang: <none>
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] server lang: <none>
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] kex follows: False
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] Compression: none
2025-12-03T22:04:34.025 [DEBUG] [Thread-124461] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:04:34.084 [DEBUG] [Thread-124461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:04:34.084 [DEBUG] [Thread-124461] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:04:34.085 [DEBUG] [Thread-124461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:04:34.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:04:34.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:04:34.148 [DEBUG] [Thread-124461] [transport.py] [_log()] userauth is OK
2025-12-03T22:04:34.149 [DEBUG] [Thread-124461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:04:34.149 [DEBUG] [Thread-124461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:04:34.149 [DEBUG] [Thread-124461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:04:34.149 [DEBUG] [Thread-124461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:04:34.168 [INFO] [Thread-124461] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:04:34.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:04:34.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:04:34.998 [DEBUG] [Thread-124461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:04:34.998 [DEBUG] [Thread-124461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:04:35.049 [DEBUG] [Thread-124461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:04:35.049 [DEBUG] [Thread-124461] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:04:35.061 [DEBUG] [Thread-124461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:04:35.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:04:35.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:04:35.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:04:35.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:04:35.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:04:35.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:04:35.107 [DEBUG] [Thread-124461] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:04:35.833 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:43.483 [DEBUG] [Thread-124463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:56.232 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:58.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:58.448 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:04:58.542 [DEBUG] [Thread-124464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:05.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:05:05.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:05:05.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:05:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 4, 38), 15.84, 34.0, 0.0, 23.84, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:05:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:04:38
2025-12-03T22:05:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:05:06.073 [DEBUG] [Thread-124465] [transport.py] [_log()] starting thread (client mode): 0xa271f160
2025-12-03T22:05:06.073 [DEBUG] [Thread-124465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:05:06.093 [DEBUG] [Thread-124465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:05:06.093 [INFO] [Thread-124465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] client lang: <none>
2025-12-03T22:05:06.096 [DEBUG] [Thread-124465] [transport.py] [_log()] server lang: <none>
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] kex follows: False
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] Compression: none
2025-12-03T22:05:06.097 [DEBUG] [Thread-124465] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:05:06.113 [DEBUG] [Thread-124465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:05:06.114 [DEBUG] [Thread-124465] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:05:06.114 [DEBUG] [Thread-124465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:05:06.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:05:06.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:05:06.116 [DEBUG] [Thread-124465] [transport.py] [_log()] userauth is OK
2025-12-03T22:05:06.116 [DEBUG] [Thread-124465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:05:06.116 [DEBUG] [Thread-124465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:05:06.116 [DEBUG] [Thread-124465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:05:06.116 [DEBUG] [Thread-124465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:05:06.140 [INFO] [Thread-124465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:05:06.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:05:07.355 [DEBUG] [Thread-124465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:05:07.355 [DEBUG] [Thread-124465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:05:07.356 [DEBUG] [Thread-124465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:05:07.396 [DEBUG] [Thread-124465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:05:07.396 [DEBUG] [Thread-124465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:05:07.398 [DEBUG] [Thread-124465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:05:07.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:05:07.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:05:07.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:05:07.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:05:07.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:05:07.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:05:07.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:05:07.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:05:07.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:05:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.836161 -999.00  +16.10  17.84     39   +2.20 1 1 1 1 1     0    0 13.36 -34.57 ZNESW 17.8 17.8 140.0 25.0 16.4 -25.2 16.3 -24.7 16.0 -23.2 16.3 -23.9
2025-12-03T22:05:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:05:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:05:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.836161
2025-12-03T22:05:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:05:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:05:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:05:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:05:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:05:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:04:38', tmtdew=15.84, humidity=34.0, cloud=0.0, wind=23.84, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:04:38', seeing=1.12, atlas_timestamp='2025-12-03T20:04:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.00975000000000037, 0.026250000000000995, 0.006249999999999645, 0.05149999999999899, 0.014499999999999957, 0.008750000000000924, -0.06649999999999956, -0.008749999999999147, 0.0034999999999989484, 0.03500000000000014, -0.014750000000001151, -0.0519999999999996, 0.06099999999999994, 0.09124999999999872, -0.051000000000000156, -0.013999999999999346, 0.0182500000000001, 0.05599999999999916, 0.03999999999999915, -0.0037500000000019185, 0.03599999999999959, 0.06374999999999886, -0.05274999999999963, -0.2672499999999989, -0.021500000000001407, 0.024499999999999744, 0.03325000000000067, 0.06750000000000078, 0.19400000000000084, 0.11350000000000193, 0.03900000000000148, -0.1609999999999978, 0.021749999999999048], zp_timestamp='2025-12-03T20:01:00')
2025-12-03T22:05:07.423 [DEBUG] [Thread-124465] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:05:07.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:05:07.526 [DEBUG] [Thread-124468] [transport.py] [_log()] starting thread (client mode): 0xa27c8b50
2025-12-03T22:05:07.526 [DEBUG] [Thread-124468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:05:07.544 [DEBUG] [Thread-124468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:05:07.544 [INFO] [Thread-124468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:05:07.551 [DEBUG] [Thread-124468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:05:07.552 [DEBUG] [Thread-124468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] client lang: <none>
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] server lang: <none>
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] kex follows: False
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] Compression: none
2025-12-03T22:05:07.553 [DEBUG] [Thread-124468] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:05:07.612 [DEBUG] [Thread-124468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:05:07.612 [DEBUG] [Thread-124468] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:05:07.613 [DEBUG] [Thread-124468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:05:07.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:05:07.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:05:07.668 [DEBUG] [Thread-124468] [transport.py] [_log()] userauth is OK
2025-12-03T22:05:07.668 [DEBUG] [Thread-124468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:05:07.669 [DEBUG] [Thread-124468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:05:07.669 [DEBUG] [Thread-124468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:05:07.669 [DEBUG] [Thread-124468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:05:07.688 [INFO] [Thread-124468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:05:07.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:05:07.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:05:08.532 [DEBUG] [Thread-124468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:05:08.532 [DEBUG] [Thread-124468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:05:08.580 [DEBUG] [Thread-124468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:05:08.580 [DEBUG] [Thread-124468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:05:08.589 [DEBUG] [Thread-124468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:05:08.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:05:08.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:05:08.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:05:08.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:05:08.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:05:08.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:05:08.623 [DEBUG] [Thread-124468] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:05:13.580 [DEBUG] [Thread-124470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:14.097 [DEBUG] [Thread-124471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:16.647 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:28.633 [DEBUG] [Thread-124472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:37.079 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:05:38.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:05:38.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:05:39.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 5, 10), 15.87, 33.92, 0.0, 22.78, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:05:39.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:05:10
2025-12-03T22:05:39.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:05:39.576 [DEBUG] [Thread-124473] [transport.py] [_log()] starting thread (client mode): 0xa517f850
2025-12-03T22:05:39.576 [DEBUG] [Thread-124473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:05:39.597 [DEBUG] [Thread-124473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:05:39.597 [INFO] [Thread-124473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:05:39.600 [DEBUG] [Thread-124473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:05:39.600 [DEBUG] [Thread-124473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:05:39.600 [DEBUG] [Thread-124473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] client lang: <none>
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] server lang: <none>
2025-12-03T22:05:39.601 [DEBUG] [Thread-124473] [transport.py] [_log()] kex follows: False
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] Compression: none
2025-12-03T22:05:39.602 [DEBUG] [Thread-124473] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:05:39.621 [DEBUG] [Thread-124473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:05:39.621 [DEBUG] [Thread-124473] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:05:39.622 [DEBUG] [Thread-124473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:05:39.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:05:39.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:05:39.623 [DEBUG] [Thread-124473] [transport.py] [_log()] userauth is OK
2025-12-03T22:05:39.624 [DEBUG] [Thread-124473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:05:39.624 [DEBUG] [Thread-124473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:05:39.624 [DEBUG] [Thread-124473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:05:39.624 [DEBUG] [Thread-124473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:05:39.642 [INFO] [Thread-124473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:05:39.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:05:40.244 [DEBUG] [Thread-124473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:05:40.244 [DEBUG] [Thread-124473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:05:40.244 [DEBUG] [Thread-124473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:05:40.285 [DEBUG] [Thread-124473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:05:40.285 [DEBUG] [Thread-124473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:05:40.288 [DEBUG] [Thread-124473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:05:40.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:05:40.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:05:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:05:40.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:05:40.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:05:40.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:05:40.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:05:40.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:05:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:05:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.836856 -999.00  +16.10  11.79     39   +2.30 1 1 1 1 1     0    0 13.13 -34.46 ZNESW 11.8 11.8 146.0 24.4 16.4 -25.3 16.3 -24.7 16.1 -23.2 16.3 -23.8
2025-12-03T22:05:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:05:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:05:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.836856
2025-12-03T22:05:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:05:40.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:05:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:05:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:05:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:05:40.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:05:10', tmtdew=15.87, humidity=33.92, cloud=0.0, wind=22.78, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:05:10', seeing=0.96, atlas_timestamp='2025-12-03T20:05:04.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:05:40.313 [DEBUG] [Thread-124473] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:05:40.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:05:40.424 [DEBUG] [Thread-124476] [transport.py] [_log()] starting thread (client mode): 0xa2760040
2025-12-03T22:05:40.424 [DEBUG] [Thread-124476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:05:40.440 [DEBUG] [Thread-124476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:05:40.440 [INFO] [Thread-124476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] client lang: <none>
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] server lang: <none>
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] kex follows: False
2025-12-03T22:05:40.448 [DEBUG] [Thread-124476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] Compression: none
2025-12-03T22:05:40.449 [DEBUG] [Thread-124476] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:05:40.507 [DEBUG] [Thread-124476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:05:40.508 [DEBUG] [Thread-124476] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:05:40.508 [DEBUG] [Thread-124476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:05:40.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:05:40.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:05:40.564 [DEBUG] [Thread-124476] [transport.py] [_log()] userauth is OK
2025-12-03T22:05:40.564 [DEBUG] [Thread-124476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:05:40.564 [DEBUG] [Thread-124476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:05:40.564 [DEBUG] [Thread-124476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:05:40.564 [DEBUG] [Thread-124476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:05:40.588 [INFO] [Thread-124476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:05:40.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:05:41.447 [DEBUG] [Thread-124476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:05:41.447 [DEBUG] [Thread-124476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:05:41.495 [DEBUG] [Thread-124476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:05:41.495 [DEBUG] [Thread-124476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:05:41.504 [DEBUG] [Thread-124476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:05:41.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:05:41.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:05:41.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:05:41.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:05:41.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:05:41.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:05:41.538 [DEBUG] [Thread-124476] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:05:43.664 [DEBUG] [Thread-124478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:57.516 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:58.655 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:58.656 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:05:58.712 [DEBUG] [Thread-124479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:11.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:06:11.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:06:11.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:06:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 5, 42), 15.74, 34.0, 0.0, 21.56, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:06:12.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:05:42
2025-12-03T22:06:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:06:12.515 [DEBUG] [Thread-124480] [transport.py] [_log()] starting thread (client mode): 0xa2761000
2025-12-03T22:06:12.515 [DEBUG] [Thread-124480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:06:12.536 [DEBUG] [Thread-124480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:06:12.536 [INFO] [Thread-124480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:06:12.539 [DEBUG] [Thread-124480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:06:12.539 [DEBUG] [Thread-124480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:06:12.539 [DEBUG] [Thread-124480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:06:12.539 [DEBUG] [Thread-124480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] client lang: <none>
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] server lang: <none>
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] kex follows: False
2025-12-03T22:06:12.540 [DEBUG] [Thread-124480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] Compression: none
2025-12-03T22:06:12.541 [DEBUG] [Thread-124480] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:06:12.559 [DEBUG] [Thread-124480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:06:12.559 [DEBUG] [Thread-124480] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:06:12.560 [DEBUG] [Thread-124480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:06:12.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:06:12.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:06:12.561 [DEBUG] [Thread-124480] [transport.py] [_log()] userauth is OK
2025-12-03T22:06:12.562 [DEBUG] [Thread-124480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:06:12.562 [DEBUG] [Thread-124480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:06:12.562 [DEBUG] [Thread-124480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:06:12.562 [DEBUG] [Thread-124480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:06:12.578 [INFO] [Thread-124480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:06:12.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:06:13.217 [DEBUG] [Thread-124480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:06:13.217 [DEBUG] [Thread-124480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:06:13.218 [DEBUG] [Thread-124480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:06:13.258 [DEBUG] [Thread-124480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:06:13.258 [DEBUG] [Thread-124480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:06:13.261 [DEBUG] [Thread-124480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:06:13.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:06:13.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:06:13.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:06:13.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:06:13.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:06:13.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:06:13.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:06:13.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:06:13.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:06:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.837203 -999.00  +16.10  16.68     39   +2.30 1 1 1 1 1     0    0 13.23 -33.19 ZNESW 16.7 16.7 134.2 21.9 16.4 -25.3 16.3 -24.7 16.1 -23.1 16.3 -24.0
2025-12-03T22:06:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:06:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:06:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.837203
2025-12-03T22:06:13.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:06:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:06:13.277 [DEBUG] [Thread-124480] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:06:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:06:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:06:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:06:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:05:42', tmtdew=15.74, humidity=34.0, cloud=0.0, wind=21.56, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:05:42', seeing=0.96, atlas_timestamp='2025-12-03T20:05:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:06:13.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:06:13.373 [DEBUG] [Thread-124483] [transport.py] [_log()] starting thread (client mode): 0xa271f790
2025-12-03T22:06:13.373 [DEBUG] [Thread-124483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:06:13.386 [DEBUG] [Thread-124483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:06:13.387 [INFO] [Thread-124483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:06:13.394 [DEBUG] [Thread-124483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:06:13.394 [DEBUG] [Thread-124483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:06:13.394 [DEBUG] [Thread-124483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:06:13.394 [DEBUG] [Thread-124483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] client lang: <none>
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] server lang: <none>
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] kex follows: False
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] Compression: none
2025-12-03T22:06:13.395 [DEBUG] [Thread-124483] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:06:13.451 [DEBUG] [Thread-124483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:06:13.452 [DEBUG] [Thread-124483] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:06:13.452 [DEBUG] [Thread-124483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:06:13.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:06:13.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:06:13.512 [DEBUG] [Thread-124483] [transport.py] [_log()] userauth is OK
2025-12-03T22:06:13.512 [DEBUG] [Thread-124483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:06:13.512 [DEBUG] [Thread-124483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:06:13.512 [DEBUG] [Thread-124483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:06:13.512 [DEBUG] [Thread-124483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:06:13.529 [INFO] [Thread-124483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:06:13.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:06:13.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:06:13.747 [DEBUG] [Thread-124485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:14.167 [DEBUG] [Thread-124486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:14.371 [DEBUG] [Thread-124483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:06:14.371 [DEBUG] [Thread-124483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:06:14.421 [DEBUG] [Thread-124483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:06:14.421 [DEBUG] [Thread-124483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:06:14.429 [DEBUG] [Thread-124483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:06:14.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:06:14.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:06:14.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:06:14.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:06:14.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:06:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:06:14.463 [DEBUG] [Thread-124483] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:06:17.968 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:28.801 [DEBUG] [Thread-124487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:38.396 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:43.836 [DEBUG] [Thread-124488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:44.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:06:44.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:06:44.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:06:45.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 6, 14), 15.72, 34.05, 0.0, 22.18, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:06:45.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:06:14
2025-12-03T22:06:45.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:06:45.469 [DEBUG] [Thread-124489] [transport.py] [_log()] starting thread (client mode): 0xa271cd30
2025-12-03T22:06:45.469 [DEBUG] [Thread-124489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:06:45.490 [DEBUG] [Thread-124489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:06:45.490 [INFO] [Thread-124489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:06:45.493 [DEBUG] [Thread-124489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:06:45.493 [DEBUG] [Thread-124489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:06:45.493 [DEBUG] [Thread-124489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:06:45.493 [DEBUG] [Thread-124489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] client lang: <none>
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] server lang: <none>
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] kex follows: False
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] Compression: none
2025-12-03T22:06:45.494 [DEBUG] [Thread-124489] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:06:45.508 [DEBUG] [Thread-124489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:06:45.508 [DEBUG] [Thread-124489] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:06:45.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:06:45.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] userauth is OK
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:06:45.509 [DEBUG] [Thread-124489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:06:45.538 [INFO] [Thread-124489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:06:45.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:06:46.273 [DEBUG] [Thread-124489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:06:46.273 [DEBUG] [Thread-124489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:06:46.273 [DEBUG] [Thread-124489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:06:46.313 [DEBUG] [Thread-124489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:06:46.314 [DEBUG] [Thread-124489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:06:46.316 [DEBUG] [Thread-124489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:06:46.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:06:46.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:06:46.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:06:46.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:06:46.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:06:46.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:06:46.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.837550 -999.00  +16.10  17.37     39   +2.30 1 1 1 1 1     0    0 13.30 -28.64 ZNESW 17.4 17.4 129.3 22.7 16.4 -25.2 16.3 -24.9 16.1 -23.1 16.3 -24.0
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.837550
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:06:46.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:06:14', tmtdew=15.72, humidity=34.05, cloud=0.0, wind=22.18, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:06:14', seeing=0.91, atlas_timestamp='2025-12-03T20:06:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:06:46.332 [DEBUG] [Thread-124489] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:06:46.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:06:46.425 [DEBUG] [Thread-124492] [transport.py] [_log()] starting thread (client mode): 0xa517c0d0
2025-12-03T22:06:46.425 [DEBUG] [Thread-124492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:06:46.440 [DEBUG] [Thread-124492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:06:46.440 [INFO] [Thread-124492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] client lang: <none>
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] server lang: <none>
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] kex follows: False
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] Compression: none
2025-12-03T22:06:46.447 [DEBUG] [Thread-124492] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:06:46.506 [DEBUG] [Thread-124492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:06:46.506 [DEBUG] [Thread-124492] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:06:46.506 [DEBUG] [Thread-124492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:06:46.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:06:46.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:06:46.563 [DEBUG] [Thread-124492] [transport.py] [_log()] userauth is OK
2025-12-03T22:06:46.564 [DEBUG] [Thread-124492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:06:46.564 [DEBUG] [Thread-124492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:06:46.564 [DEBUG] [Thread-124492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:06:46.564 [DEBUG] [Thread-124492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:06:46.577 [INFO] [Thread-124492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:06:46.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:06:46.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:06:47.437 [DEBUG] [Thread-124492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:06:47.437 [DEBUG] [Thread-124492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:06:47.485 [DEBUG] [Thread-124492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:06:47.485 [DEBUG] [Thread-124492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:06:47.493 [DEBUG] [Thread-124492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:06:47.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:06:47.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:06:47.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:06:47.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:06:47.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:06:47.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:06:47.525 [DEBUG] [Thread-124492] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:06:58.866 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:58.867 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:58.872 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:06:58.873 [DEBUG] [Thread-124494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:13.934 [DEBUG] [Thread-124495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:14.226 [DEBUG] [Thread-124496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:17.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:07:17.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:07:17.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:07:18.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 6, 46), 15.8, 34.09, 0.0, 21.76, 16.14, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:07:18.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:06:46
2025-12-03T22:07:18.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:07:18.491 [DEBUG] [Thread-124497] [transport.py] [_log()] starting thread (client mode): 0xa272b280
2025-12-03T22:07:18.491 [DEBUG] [Thread-124497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:07:18.510 [DEBUG] [Thread-124497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:07:18.510 [INFO] [Thread-124497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] client lang: <none>
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] server lang: <none>
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] kex follows: False
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:07:18.514 [DEBUG] [Thread-124497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:07:18.515 [DEBUG] [Thread-124497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:07:18.515 [DEBUG] [Thread-124497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:07:18.515 [DEBUG] [Thread-124497] [transport.py] [_log()] Compression: none
2025-12-03T22:07:18.515 [DEBUG] [Thread-124497] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:07:18.531 [DEBUG] [Thread-124497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:07:18.532 [DEBUG] [Thread-124497] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:07:18.532 [DEBUG] [Thread-124497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:07:18.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:07:18.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:07:18.534 [DEBUG] [Thread-124497] [transport.py] [_log()] userauth is OK
2025-12-03T22:07:18.535 [DEBUG] [Thread-124497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:07:18.535 [DEBUG] [Thread-124497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:07:18.535 [DEBUG] [Thread-124497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:07:18.535 [DEBUG] [Thread-124497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:07:18.551 [INFO] [Thread-124497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:07:18.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:07:19.196 [DEBUG] [Thread-124497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:07:19.196 [DEBUG] [Thread-124497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:07:19.196 [DEBUG] [Thread-124497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:07:19.237 [DEBUG] [Thread-124497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:07:19.237 [DEBUG] [Thread-124497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:07:19.239 [DEBUG] [Thread-124497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:07:19.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:07:19.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:07:19.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:07:19.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:07:19.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:07:19.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:07:19.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.837897 -999.00  +16.10  12.75     39   +2.30 1 1 1 1 1     0    0 12.99 -29.84 ZNESW 12.8 12.8 135.0 20.6 16.4 -25.2 16.3 -24.7 16.0 -23.0 16.3 -23.9
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:07:19.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.837897
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:07:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:06:46', tmtdew=15.8, humidity=34.09, cloud=0.0, wind=21.76, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:06:46', seeing=1.1, atlas_timestamp='2025-12-03T20:06:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:07:19.256 [DEBUG] [Thread-124497] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:07:19.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:07:19.348 [DEBUG] [Thread-124500] [transport.py] [_log()] starting thread (client mode): 0xa27ca8c0
2025-12-03T22:07:19.348 [DEBUG] [Thread-124500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:07:19.363 [DEBUG] [Thread-124500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:07:19.363 [INFO] [Thread-124500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] client lang: <none>
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] server lang: <none>
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] kex follows: False
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:07:19.372 [DEBUG] [Thread-124500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:07:19.373 [DEBUG] [Thread-124500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:07:19.373 [DEBUG] [Thread-124500] [transport.py] [_log()] Compression: none
2025-12-03T22:07:19.373 [DEBUG] [Thread-124500] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:07:19.408 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:19.429 [DEBUG] [Thread-124500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:07:19.429 [DEBUG] [Thread-124500] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:07:19.429 [DEBUG] [Thread-124500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:07:19.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:07:19.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:07:19.493 [DEBUG] [Thread-124500] [transport.py] [_log()] userauth is OK
2025-12-03T22:07:19.493 [DEBUG] [Thread-124500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:07:19.493 [DEBUG] [Thread-124500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:07:19.493 [DEBUG] [Thread-124500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:07:19.493 [DEBUG] [Thread-124500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:07:19.507 [INFO] [Thread-124500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:07:19.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:07:19.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:07:20.317 [DEBUG] [Thread-124500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:07:20.317 [DEBUG] [Thread-124500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:07:20.364 [DEBUG] [Thread-124500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:07:20.364 [DEBUG] [Thread-124500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:07:20.373 [DEBUG] [Thread-124500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:07:20.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:07:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:07:20.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:07:20.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:07:20.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:07:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:07:20.405 [DEBUG] [Thread-124500] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:07:28.969 [DEBUG] [Thread-124502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:39.857 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:44.023 [DEBUG] [Thread-124503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:07:50.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:07:50.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:07:51.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 7, 18), 15.79, 34.13, 0.0, 22.41, 16.16, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:07:51.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:07:18
2025-12-03T22:07:51.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:07:51.411 [DEBUG] [Thread-124504] [transport.py] [_log()] starting thread (client mode): 0xa51963b0
2025-12-03T22:07:51.411 [DEBUG] [Thread-124504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:07:51.431 [DEBUG] [Thread-124504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:07:51.431 [INFO] [Thread-124504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:07:51.434 [DEBUG] [Thread-124504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] client lang: <none>
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] server lang: <none>
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] kex follows: False
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] Compression: none
2025-12-03T22:07:51.435 [DEBUG] [Thread-124504] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:07:51.453 [DEBUG] [Thread-124504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:07:51.453 [DEBUG] [Thread-124504] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:07:51.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:07:51.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:07:51.454 [DEBUG] [Thread-124504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:07:51.454 [DEBUG] [Thread-124504] [transport.py] [_log()] userauth is OK
2025-12-03T22:07:51.454 [DEBUG] [Thread-124504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:07:51.454 [DEBUG] [Thread-124504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:07:51.455 [DEBUG] [Thread-124504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:07:51.455 [DEBUG] [Thread-124504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:07:51.464 [INFO] [Thread-124504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:07:51.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:07:52.223 [DEBUG] [Thread-124504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:07:52.223 [DEBUG] [Thread-124504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:07:52.223 [DEBUG] [Thread-124504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:07:52.263 [DEBUG] [Thread-124504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:07:52.263 [DEBUG] [Thread-124504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:07:52.265 [DEBUG] [Thread-124504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:07:52.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:07:52.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:07:52.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:07:52.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:07:52.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:07:52.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:07:52.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.838244 -999.00  +16.10  17.29     39   +2.30 1 1 1 1 1     0    0 13.38 -28.84 ZNESW 17.3 17.3 144.8 21.5 16.3 -25.3 16.2 -24.8 16.0 -23.3 16.3 -23.9
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.838244
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:07:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:07:18', tmtdew=15.79, humidity=34.13, cloud=0.0, wind=22.41, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:07:18', seeing=0.88, atlas_timestamp='2025-12-03T20:07:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:07:52.285 [DEBUG] [Thread-124504] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:07:52.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:07:52.376 [DEBUG] [Thread-124507] [transport.py] [_log()] starting thread (client mode): 0xa514cbe0
2025-12-03T22:07:52.376 [DEBUG] [Thread-124507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:07:52.390 [DEBUG] [Thread-124507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:07:52.390 [INFO] [Thread-124507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] client lang: <none>
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] server lang: <none>
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] kex follows: False
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:07:52.398 [DEBUG] [Thread-124507] [transport.py] [_log()] Compression: none
2025-12-03T22:07:52.399 [DEBUG] [Thread-124507] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:07:52.454 [DEBUG] [Thread-124507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:07:52.454 [DEBUG] [Thread-124507] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:07:52.455 [DEBUG] [Thread-124507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:07:52.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:07:52.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:07:52.511 [DEBUG] [Thread-124507] [transport.py] [_log()] userauth is OK
2025-12-03T22:07:52.512 [DEBUG] [Thread-124507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:07:52.512 [DEBUG] [Thread-124507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:07:52.512 [DEBUG] [Thread-124507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:07:52.512 [DEBUG] [Thread-124507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:07:52.526 [INFO] [Thread-124507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:07:52.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:07:52.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:07:53.355 [DEBUG] [Thread-124507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:07:53.355 [DEBUG] [Thread-124507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:07:53.403 [DEBUG] [Thread-124507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:07:53.403 [DEBUG] [Thread-124507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:07:53.412 [DEBUG] [Thread-124507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:07:53.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:07:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:07:53.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:07:53.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:07:53.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:07:53.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:07:53.446 [DEBUG] [Thread-124507] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:07:59.059 [DEBUG] [Thread-124509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:59.084 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:07:59.085 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:00.362 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:14.118 [DEBUG] [Thread-124510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:14.286 [DEBUG] [Thread-124511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:20.822 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:08:23.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:08:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:08:24.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 7, 50), 15.77, 34.04, 0.0, 24.07, 16.09, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:08:24.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:07:50
2025-12-03T22:08:24.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:08:24.488 [DEBUG] [Thread-124512] [transport.py] [_log()] starting thread (client mode): 0xa51493f0
2025-12-03T22:08:24.488 [DEBUG] [Thread-124512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:08:24.507 [DEBUG] [Thread-124512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:08:24.507 [INFO] [Thread-124512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] client lang: <none>
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] server lang: <none>
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] kex follows: False
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] Compression: none
2025-12-03T22:08:24.510 [DEBUG] [Thread-124512] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:08:24.526 [DEBUG] [Thread-124512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:08:24.526 [DEBUG] [Thread-124512] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:08:24.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:08:24.527 [DEBUG] [Thread-124512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:08:24.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:08:24.527 [DEBUG] [Thread-124512] [transport.py] [_log()] userauth is OK
2025-12-03T22:08:24.527 [DEBUG] [Thread-124512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:08:24.527 [DEBUG] [Thread-124512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:08:24.528 [DEBUG] [Thread-124512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:08:24.528 [DEBUG] [Thread-124512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:08:24.554 [INFO] [Thread-124512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:08:24.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:08:25.201 [DEBUG] [Thread-124512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:08:25.201 [DEBUG] [Thread-124512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:08:25.202 [DEBUG] [Thread-124512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:08:25.242 [DEBUG] [Thread-124512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:08:25.242 [DEBUG] [Thread-124512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:08:25.245 [DEBUG] [Thread-124512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:08:25.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:08:25.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:08:25.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:08:25.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:08:25.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:08:25.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:08:25.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.838592 -999.00  +16.00  21.07     39   +2.30 1 1 1 1 1     0    0 13.31 -27.05 ZNESW 21.1 21.1 144.0 26.5 16.4 -25.4 16.3 -24.9 16.0 -23.3 16.3 -24.2
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:08:25.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.838592
2025-12-03T22:08:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:08:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:08:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:08:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:08:25.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:08:25.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:07:50', tmtdew=15.77, humidity=34.04, cloud=0.0, wind=24.07, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:08:22', seeing=0.99, atlas_timestamp='2025-12-03T20:07:34.349', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:04:00')
2025-12-03T22:08:25.272 [DEBUG] [Thread-124512] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:08:25.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:08:25.375 [DEBUG] [Thread-124515] [transport.py] [_log()] starting thread (client mode): 0xa514ada0
2025-12-03T22:08:25.375 [DEBUG] [Thread-124515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:08:25.390 [DEBUG] [Thread-124515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:08:25.390 [INFO] [Thread-124515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:08:25.397 [DEBUG] [Thread-124515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] client lang: <none>
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] server lang: <none>
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] kex follows: False
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:08:25.398 [DEBUG] [Thread-124515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:08:25.399 [DEBUG] [Thread-124515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:08:25.399 [DEBUG] [Thread-124515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:08:25.399 [DEBUG] [Thread-124515] [transport.py] [_log()] Compression: none
2025-12-03T22:08:25.399 [DEBUG] [Thread-124515] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:08:25.455 [DEBUG] [Thread-124515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:08:25.456 [DEBUG] [Thread-124515] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:08:25.456 [DEBUG] [Thread-124515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:08:25.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:08:25.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:08:25.512 [DEBUG] [Thread-124515] [transport.py] [_log()] userauth is OK
2025-12-03T22:08:25.512 [DEBUG] [Thread-124515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:08:25.512 [DEBUG] [Thread-124515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:08:25.512 [DEBUG] [Thread-124515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:08:25.512 [DEBUG] [Thread-124515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:08:25.531 [INFO] [Thread-124515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:08:25.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:08:25.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:08:26.353 [DEBUG] [Thread-124515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:08:26.354 [DEBUG] [Thread-124515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:08:26.403 [DEBUG] [Thread-124515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:08:26.403 [DEBUG] [Thread-124515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:08:26.412 [DEBUG] [Thread-124515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:08:26.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:08:26.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:08:26.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:08:26.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:08:26.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:08:26.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:08:26.446 [DEBUG] [Thread-124515] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:08:29.154 [DEBUG] [Thread-124517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:41.352 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:44.210 [DEBUG] [Thread-124518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:08:56.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:08:56.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:08:57.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 8, 22), 15.77, 34.05, 0.0, 23.66, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:08:57.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:08:22
2025-12-03T22:08:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:08:57.450 [DEBUG] [Thread-124519] [transport.py] [_log()] starting thread (client mode): 0xa27631c0
2025-12-03T22:08:57.450 [DEBUG] [Thread-124519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:08:57.471 [DEBUG] [Thread-124519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:08:57.471 [INFO] [Thread-124519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:57.475 [DEBUG] [Thread-124519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] client lang: <none>
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] server lang: <none>
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] kex follows: False
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] Compression: none
2025-12-03T22:08:57.476 [DEBUG] [Thread-124519] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:08:57.493 [DEBUG] [Thread-124519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:08:57.493 [DEBUG] [Thread-124519] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:08:57.494 [DEBUG] [Thread-124519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:08:57.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:08:57.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:08:57.496 [DEBUG] [Thread-124519] [transport.py] [_log()] userauth is OK
2025-12-03T22:08:57.496 [DEBUG] [Thread-124519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:08:57.496 [DEBUG] [Thread-124519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:08:57.496 [DEBUG] [Thread-124519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:08:57.496 [DEBUG] [Thread-124519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:08:57.520 [INFO] [Thread-124519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:08:57.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:08:58.321 [DEBUG] [Thread-124519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:08:58.321 [DEBUG] [Thread-124519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:08:58.322 [DEBUG] [Thread-124519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:08:58.363 [DEBUG] [Thread-124519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:08:58.363 [DEBUG] [Thread-124519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:08:58.366 [DEBUG] [Thread-124519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:08:58.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:08:58.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:08:58.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:08:58.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:08:58.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:08:58.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:08:58.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:08:58.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:08:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:08:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.839286 -999.00  +16.10  18.76     39   +2.30 1 1 1 1 1     0    0 13.06 -27.06 ZNESW 18.8 18.8 146.6 21.6 16.3 -25.3 16.3 -24.9 16.0 -23.2 16.3 -23.9
2025-12-03T22:08:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:08:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:08:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.839286
2025-12-03T22:08:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:08:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:08:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:08:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:08:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:08:58.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:08:22', tmtdew=15.77, humidity=34.05, cloud=0.0, wind=23.66, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:08:55', seeing=0.99, atlas_timestamp='2025-12-03T20:08:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:07:00')
2025-12-03T22:08:58.390 [DEBUG] [Thread-124519] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:08:58.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:08:58.498 [DEBUG] [Thread-124522] [transport.py] [_log()] starting thread (client mode): 0xa2728e20
2025-12-03T22:08:58.498 [DEBUG] [Thread-124522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:08:58.513 [DEBUG] [Thread-124522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:08:58.513 [INFO] [Thread-124522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:08:58.527 [DEBUG] [Thread-124522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] client lang: <none>
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] server lang: <none>
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] kex follows: False
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] Compression: none
2025-12-03T22:08:58.528 [DEBUG] [Thread-124522] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:08:58.579 [DEBUG] [Thread-124522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:08:58.580 [DEBUG] [Thread-124522] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:08:58.580 [DEBUG] [Thread-124522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:08:58.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:08:58.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:08:58.636 [DEBUG] [Thread-124522] [transport.py] [_log()] userauth is OK
2025-12-03T22:08:58.636 [DEBUG] [Thread-124522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:08:58.636 [DEBUG] [Thread-124522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:08:58.636 [DEBUG] [Thread-124522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:08:58.636 [DEBUG] [Thread-124522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:08:58.655 [INFO] [Thread-124522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:08:58.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:08:58.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:08:59.246 [DEBUG] [Thread-124524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:59.346 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:59.347 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:08:59.519 [DEBUG] [Thread-124522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:08:59.519 [DEBUG] [Thread-124522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:08:59.567 [DEBUG] [Thread-124522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:08:59.567 [DEBUG] [Thread-124522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:08:59.576 [DEBUG] [Thread-124522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:08:59.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:08:59.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:08:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:08:59.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:08:59.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:08:59.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:08:59.612 [DEBUG] [Thread-124522] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:09:01.777 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:14.311 [DEBUG] [Thread-124525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:14.349 [DEBUG] [Thread-124526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:22.195 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:29.343 [DEBUG] [Thread-124527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:29.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:09:29.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:09:29.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:09:30.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 9, 27), 15.75, 34.1, 0.0, 22.02, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:09:30.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:09:27
2025-12-03T22:09:30.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:09:30.594 [DEBUG] [Thread-124528] [transport.py] [_log()] starting thread (client mode): 0xa27503a0
2025-12-03T22:09:30.594 [DEBUG] [Thread-124528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:09:30.614 [DEBUG] [Thread-124528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:09:30.614 [INFO] [Thread-124528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:09:30.617 [DEBUG] [Thread-124528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:09:30.617 [DEBUG] [Thread-124528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] client lang: <none>
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] server lang: <none>
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] kex follows: False
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:09:30.618 [DEBUG] [Thread-124528] [transport.py] [_log()] Compression: none
2025-12-03T22:09:30.619 [DEBUG] [Thread-124528] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:09:30.634 [DEBUG] [Thread-124528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:09:30.635 [DEBUG] [Thread-124528] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:09:30.635 [DEBUG] [Thread-124528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:09:30.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:09:30.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:09:30.637 [DEBUG] [Thread-124528] [transport.py] [_log()] userauth is OK
2025-12-03T22:09:30.637 [DEBUG] [Thread-124528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:09:30.637 [DEBUG] [Thread-124528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:09:30.637 [DEBUG] [Thread-124528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:09:30.637 [DEBUG] [Thread-124528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:09:30.653 [INFO] [Thread-124528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:09:30.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:09:31.315 [DEBUG] [Thread-124528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:09:31.315 [DEBUG] [Thread-124528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:09:31.315 [DEBUG] [Thread-124528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:09:31.356 [DEBUG] [Thread-124528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:09:31.356 [DEBUG] [Thread-124528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:09:31.359 [DEBUG] [Thread-124528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:09:31.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:09:31.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:09:31.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:09:31.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:09:31.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:09:31.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:09:31.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:09:31.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:09:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:09:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.839633 -999.00  +16.10  20.28     39   +2.30 1 1 1 1 1     0    0 13.33 -27.61 ZNESW 20.3 20.3 144.6 26.9 16.4 -25.3 16.3 -24.8 16.0 -23.0 16.3 -24.1
2025-12-03T22:09:31.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:09:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:09:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.839633
2025-12-03T22:09:31.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:09:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:09:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:09:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:09:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:09:31.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:09:27', tmtdew=15.75, humidity=34.1, cloud=0.0, wind=22.02, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:09:27', seeing=0.93, atlas_timestamp='2025-12-03T20:09:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:07:00')
2025-12-03T22:09:31.382 [DEBUG] [Thread-124528] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:09:31.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:09:31.489 [DEBUG] [Thread-124531] [transport.py] [_log()] starting thread (client mode): 0xa2724490
2025-12-03T22:09:31.489 [DEBUG] [Thread-124531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:09:31.503 [DEBUG] [Thread-124531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:09:31.503 [INFO] [Thread-124531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] client lang: <none>
2025-12-03T22:09:31.511 [DEBUG] [Thread-124531] [transport.py] [_log()] server lang: <none>
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] kex follows: False
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] Compression: none
2025-12-03T22:09:31.512 [DEBUG] [Thread-124531] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:09:31.567 [DEBUG] [Thread-124531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:09:31.568 [DEBUG] [Thread-124531] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:09:31.568 [DEBUG] [Thread-124531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:09:31.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:09:31.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:09:31.624 [DEBUG] [Thread-124531] [transport.py] [_log()] userauth is OK
2025-12-03T22:09:31.624 [DEBUG] [Thread-124531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:09:31.624 [DEBUG] [Thread-124531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:09:31.624 [DEBUG] [Thread-124531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:09:31.624 [DEBUG] [Thread-124531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:09:31.642 [INFO] [Thread-124531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:09:31.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:09:31.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:09:32.491 [DEBUG] [Thread-124531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:09:32.491 [DEBUG] [Thread-124531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:09:32.539 [DEBUG] [Thread-124531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:09:32.539 [DEBUG] [Thread-124531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:09:32.548 [DEBUG] [Thread-124531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:09:32.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:09:32.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:09:32.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:09:32.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:09:32.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:09:32.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:09:32.582 [DEBUG] [Thread-124531] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:09:42.621 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:44.382 [DEBUG] [Thread-124533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:59.438 [DEBUG] [Thread-124534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:59.546 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:09:59.547 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:02.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:10:02.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:10:02.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:10:03.099 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 9, 59), 15.69, 34.1, 0.0, 22.04, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:10:03.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:09:59
2025-12-03T22:10:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:10:03.572 [DEBUG] [Thread-124535] [transport.py] [_log()] starting thread (client mode): 0xa271efe0
2025-12-03T22:10:03.572 [DEBUG] [Thread-124535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:10:03.587 [DEBUG] [Thread-124535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:10:03.587 [INFO] [Thread-124535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] client lang: <none>
2025-12-03T22:10:03.591 [DEBUG] [Thread-124535] [transport.py] [_log()] server lang: <none>
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] kex follows: False
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] Compression: none
2025-12-03T22:10:03.592 [DEBUG] [Thread-124535] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:10:03.610 [DEBUG] [Thread-124535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:10:03.610 [DEBUG] [Thread-124535] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:10:03.611 [DEBUG] [Thread-124535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:10:03.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:10:03.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:10:03.612 [DEBUG] [Thread-124535] [transport.py] [_log()] userauth is OK
2025-12-03T22:10:03.613 [DEBUG] [Thread-124535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:10:03.613 [DEBUG] [Thread-124535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:10:03.613 [DEBUG] [Thread-124535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:10:03.613 [DEBUG] [Thread-124535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:10:03.631 [INFO] [Thread-124535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:10:03.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:10:04.326 [DEBUG] [Thread-124535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:10:04.326 [DEBUG] [Thread-124535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:10:04.326 [DEBUG] [Thread-124535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:10:04.366 [DEBUG] [Thread-124535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:10:04.367 [DEBUG] [Thread-124535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:10:04.369 [DEBUG] [Thread-124535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:10:04.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:10:04.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:10:04.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:10:04.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:10:04.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:10:04.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:10:04.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.839981 -999.00  +16.00  25.19     39   +2.30 1 1 1 1 1     0    0 13.34 -27.37 ZNESW 25.2 25.2 141.8 27.3 16.4 -25.3 16.2 -24.6 16.0 -23.3 16.3 -23.8
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:10:04.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.839981
2025-12-03T22:10:04.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:10:04.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:10:04.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:10:04.392 [DEBUG] [Thread-124535] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:10:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:10:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:10:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:09:59', tmtdew=15.69, humidity=34.1, cloud=0.0, wind=22.04, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:09:59', seeing=0.89, atlas_timestamp='2025-12-03T20:09:34.358', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:07:00')
2025-12-03T22:10:04.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:10:04.496 [DEBUG] [Thread-124538] [transport.py] [_log()] starting thread (client mode): 0xa5194eb0
2025-12-03T22:10:04.496 [DEBUG] [Thread-124538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:10:04.511 [DEBUG] [Thread-124538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:10:04.511 [INFO] [Thread-124538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] client lang: <none>
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] server lang: <none>
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] kex follows: False
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:10:04.519 [DEBUG] [Thread-124538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:10:04.520 [DEBUG] [Thread-124538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:10:04.520 [DEBUG] [Thread-124538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:10:04.520 [DEBUG] [Thread-124538] [transport.py] [_log()] Compression: none
2025-12-03T22:10:04.520 [DEBUG] [Thread-124538] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:10:04.586 [DEBUG] [Thread-124538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:10:04.586 [DEBUG] [Thread-124538] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:10:04.587 [DEBUG] [Thread-124538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:10:04.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:10:04.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:10:04.644 [DEBUG] [Thread-124538] [transport.py] [_log()] userauth is OK
2025-12-03T22:10:04.644 [DEBUG] [Thread-124538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:10:04.644 [DEBUG] [Thread-124538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:10:04.644 [DEBUG] [Thread-124538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:10:04.644 [DEBUG] [Thread-124538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:10:04.663 [INFO] [Thread-124538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:10:04.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:10:04.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:10:05.484 [DEBUG] [Thread-124538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:10:05.484 [DEBUG] [Thread-124538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:10:05.533 [DEBUG] [Thread-124538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:10:05.533 [DEBUG] [Thread-124538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:10:05.542 [DEBUG] [Thread-124538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:10:05.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:10:05.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:10:05.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:10:05.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:10:05.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:10:05.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:10:05.575 [DEBUG] [Thread-124538] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:10:14.414 [DEBUG] [Thread-124540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:14.473 [DEBUG] [Thread-124541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:23.505 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:29.531 [DEBUG] [Thread-124542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:10:35.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:10:35.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:10:36.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 10, 31), 15.69, 34.12, 0.0, 20.84, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:10:36.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:10:31
2025-12-03T22:10:36.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:10:36.595 [DEBUG] [Thread-124543] [transport.py] [_log()] starting thread (client mode): 0xa271cf70
2025-12-03T22:10:36.595 [DEBUG] [Thread-124543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:10:36.614 [DEBUG] [Thread-124543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:10:36.614 [INFO] [Thread-124543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:36.617 [DEBUG] [Thread-124543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] client lang: <none>
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] server lang: <none>
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] kex follows: False
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] Compression: none
2025-12-03T22:10:36.618 [DEBUG] [Thread-124543] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:10:36.635 [DEBUG] [Thread-124543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:10:36.635 [DEBUG] [Thread-124543] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:10:36.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:10:36.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] userauth is OK
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:10:36.636 [DEBUG] [Thread-124543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:10:36.646 [INFO] [Thread-124543] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:10:36.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:10:37.283 [DEBUG] [Thread-124543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:10:37.283 [DEBUG] [Thread-124543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:10:37.283 [DEBUG] [Thread-124543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:10:37.324 [DEBUG] [Thread-124543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:10:37.324 [DEBUG] [Thread-124543] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:10:37.326 [DEBUG] [Thread-124543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:10:37.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:10:37.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:10:37.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:10:37.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:10:37.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:10:37.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:10:37.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.840328 -999.00  +16.10  21.10     39   +2.30 1 1 1 1 1     0    0 13.07 -26.55 ZNESW 21.1 21.1 150.8 25.6 16.3 -25.4 16.2 -24.8 16.0 -23.2 16.3 -24.1
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.840328
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:10:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:10:31', tmtdew=15.69, humidity=34.12, cloud=0.0, wind=20.84, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:10:31', seeing=0.86, atlas_timestamp='2025-12-03T20:10:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:07:00')
2025-12-03T22:10:37.346 [DEBUG] [Thread-124543] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:10:37.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:10:37.438 [DEBUG] [Thread-124546] [transport.py] [_log()] starting thread (client mode): 0xa271e020
2025-12-03T22:10:37.438 [DEBUG] [Thread-124546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:10:37.453 [DEBUG] [Thread-124546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:10:37.453 [INFO] [Thread-124546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] client lang: <none>
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] server lang: <none>
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] kex follows: False
2025-12-03T22:10:37.460 [DEBUG] [Thread-124546] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] Compression: none
2025-12-03T22:10:37.461 [DEBUG] [Thread-124546] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:10:37.518 [DEBUG] [Thread-124546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:10:37.518 [DEBUG] [Thread-124546] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:10:37.518 [DEBUG] [Thread-124546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:10:37.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:10:37.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:10:37.576 [DEBUG] [Thread-124546] [transport.py] [_log()] userauth is OK
2025-12-03T22:10:37.576 [DEBUG] [Thread-124546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:10:37.576 [DEBUG] [Thread-124546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:10:37.576 [DEBUG] [Thread-124546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:10:37.576 [DEBUG] [Thread-124546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:10:37.589 [INFO] [Thread-124546] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:10:37.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:10:37.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:10:38.394 [DEBUG] [Thread-124546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:10:38.394 [DEBUG] [Thread-124546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:10:38.443 [DEBUG] [Thread-124546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:10:38.443 [DEBUG] [Thread-124546] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:10:38.451 [DEBUG] [Thread-124546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:10:38.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:10:38.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:10:38.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:10:38.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:10:38.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:10:38.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:10:38.482 [DEBUG] [Thread-124546] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:10:43.927 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:44.567 [DEBUG] [Thread-124548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:59.624 [DEBUG] [Thread-124549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:59.761 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:10:59.763 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:04.357 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:11:08.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:11:08.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:11:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 11, 3), 15.66, 34.18, 0.0, 24.03, 16.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:11:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:11:03
2025-12-03T22:11:09.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:11:09.440 [DEBUG] [Thread-124550] [transport.py] [_log()] starting thread (client mode): 0xa514cbe0
2025-12-03T22:11:09.440 [DEBUG] [Thread-124550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:11:09.459 [DEBUG] [Thread-124550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:11:09.460 [INFO] [Thread-124550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:09.461 [DEBUG] [Thread-124550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] client lang: <none>
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] server lang: <none>
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] kex follows: False
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:11:09.462 [DEBUG] [Thread-124550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:11:09.463 [DEBUG] [Thread-124550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:11:09.463 [DEBUG] [Thread-124550] [transport.py] [_log()] Compression: none
2025-12-03T22:11:09.463 [DEBUG] [Thread-124550] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:11:09.471 [DEBUG] [Thread-124550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:11:09.472 [DEBUG] [Thread-124550] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:11:09.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:11:09.473 [DEBUG] [Thread-124550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:11:09.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:11:09.475 [DEBUG] [Thread-124550] [transport.py] [_log()] userauth is OK
2025-12-03T22:11:09.475 [DEBUG] [Thread-124550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:11:09.475 [DEBUG] [Thread-124550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:11:09.475 [DEBUG] [Thread-124550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:11:09.475 [DEBUG] [Thread-124550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:11:09.510 [INFO] [Thread-124550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:11:09.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:11:10.164 [DEBUG] [Thread-124550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:11:10.165 [DEBUG] [Thread-124550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:11:10.165 [DEBUG] [Thread-124550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:11:10.206 [DEBUG] [Thread-124550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:11:10.206 [DEBUG] [Thread-124550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:11:10.209 [DEBUG] [Thread-124550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:11:10.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:11:10.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:11:10.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:11:10.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:11:10.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:11:10.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:11:10.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.840675 -999.00  +16.10  16.96     39   +2.30 1 1 1 1 1     0    0 12.97 -28.83 ZNESW 17.0 17.0 141.4 21.6 16.4 -25.3 16.3 -24.9 16.0 -23.2 16.3 -23.8
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:11:10.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.840675
2025-12-03T22:11:10.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:11:10.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:11:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:11:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:11:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:11:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:11:03', tmtdew=15.66, humidity=34.18, cloud=0.0, wind=24.03, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:11:03', seeing=0.86, atlas_timestamp='2025-12-03T20:10:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.11775000000000091, -0.00274999999999892, -0.0470000000000006, -0.04449999999999932, -0.05624999999999858, -0.01750000000000007, -0.05874999999999986, -0.018499999999999517, -0.015000000000000568, -0.003750000000000142, -0.04100000000000037, 0.04550000000000054, 0.005250000000000199, -0.07800000000000118, -0.16600000000000037, 0.013749999999999929, -0.0030000000000001137, 0.026500000000000412, 0.018249999999998323, -0.04650000000000176, -0.020250000000000767, -0.06974999999999909, -0.4612499999999997, -0.06049999999999933, 0.026500000000000412, 0.007749999999999702, 0.033500000000000085, 0.06799999999999962, 0.1590000000000007, -0.18599999999999817, -0.24349999999999916, -0.0002500000000011937], zp_timestamp='2025-12-03T20:07:00')
2025-12-03T22:11:10.242 [DEBUG] [Thread-124550] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:11:10.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:11:10.342 [DEBUG] [Thread-124553] [transport.py] [_log()] starting thread (client mode): 0xa2750ac0
2025-12-03T22:11:10.343 [DEBUG] [Thread-124553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:11:10.357 [DEBUG] [Thread-124553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:11:10.358 [INFO] [Thread-124553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:11:10.365 [DEBUG] [Thread-124553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:11:10.365 [DEBUG] [Thread-124553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:11:10.365 [DEBUG] [Thread-124553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:11:10.365 [DEBUG] [Thread-124553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:10.365 [DEBUG] [Thread-124553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] client lang: <none>
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] server lang: <none>
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] kex follows: False
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:11:10.366 [DEBUG] [Thread-124553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:11:10.367 [DEBUG] [Thread-124553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:11:10.367 [DEBUG] [Thread-124553] [transport.py] [_log()] Compression: none
2025-12-03T22:11:10.367 [DEBUG] [Thread-124553] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:11:10.424 [DEBUG] [Thread-124553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:11:10.424 [DEBUG] [Thread-124553] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:11:10.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:11:10.425 [DEBUG] [Thread-124553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:11:10.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:11:10.480 [DEBUG] [Thread-124553] [transport.py] [_log()] userauth is OK
2025-12-03T22:11:10.480 [DEBUG] [Thread-124553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:11:10.480 [DEBUG] [Thread-124553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:11:10.480 [DEBUG] [Thread-124553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:11:10.480 [DEBUG] [Thread-124553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:11:10.499 [INFO] [Thread-124553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:11:10.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:11:10.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:11:11.337 [DEBUG] [Thread-124553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:11:11.338 [DEBUG] [Thread-124553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:11:11.385 [DEBUG] [Thread-124553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:11:11.385 [DEBUG] [Thread-124553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:11:11.393 [DEBUG] [Thread-124553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:11:11.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:11:11.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:11:11.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:11:11.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:11:11.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:11:11.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:11:11.424 [DEBUG] [Thread-124553] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:11:14.475 [DEBUG] [Thread-124555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:14.663 [DEBUG] [Thread-124556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:24.806 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:29.711 [DEBUG] [Thread-124557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:41.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:11:41.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:11:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:11:42.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 11, 35), 15.74, 34.12, 0.0, 24.61, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:11:42.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:11:35
2025-12-03T22:11:42.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:11:42.406 [DEBUG] [Thread-124558] [transport.py] [_log()] starting thread (client mode): 0xa2727010
2025-12-03T22:11:42.406 [DEBUG] [Thread-124558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:11:42.426 [DEBUG] [Thread-124558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:11:42.426 [INFO] [Thread-124558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:11:42.429 [DEBUG] [Thread-124558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:11:42.429 [DEBUG] [Thread-124558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] client lang: <none>
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] server lang: <none>
2025-12-03T22:11:42.430 [DEBUG] [Thread-124558] [transport.py] [_log()] kex follows: False
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] Compression: none
2025-12-03T22:11:42.431 [DEBUG] [Thread-124558] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:11:42.449 [DEBUG] [Thread-124558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:11:42.450 [DEBUG] [Thread-124558] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:11:42.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:11:42.451 [DEBUG] [Thread-124558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:11:42.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:11:42.453 [DEBUG] [Thread-124558] [transport.py] [_log()] userauth is OK
2025-12-03T22:11:42.453 [DEBUG] [Thread-124558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:11:42.453 [DEBUG] [Thread-124558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:11:42.453 [DEBUG] [Thread-124558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:11:42.453 [DEBUG] [Thread-124558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:11:42.471 [INFO] [Thread-124558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:11:42.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:11:43.086 [DEBUG] [Thread-124558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:11:43.086 [DEBUG] [Thread-124558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:11:43.086 [DEBUG] [Thread-124558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:11:43.127 [DEBUG] [Thread-124558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:11:43.127 [DEBUG] [Thread-124558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:11:43.130 [DEBUG] [Thread-124558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:11:43.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:11:43.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:11:43.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:11:43.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:11:43.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:11:43.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:11:43.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:11:43.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.841022 -999.00  +16.10  20.01     39   +2.30 1 1 1 1 1     0    0 13.21 -31.00 ZNESW 20.0 20.0 142.6 26.2 16.3 -25.3 16.2 -24.6 16.1 -23.2 16.3 -24.0
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.841022
2025-12-03T22:11:43.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:11:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:11:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:11:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:11:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:11:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:11:35', tmtdew=15.74, humidity=34.12, cloud=0.0, wind=24.61, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:11:35', seeing=0.93, atlas_timestamp='2025-12-03T20:11:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:11:43.155 [DEBUG] [Thread-124558] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:11:43.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:11:43.256 [DEBUG] [Thread-124561] [transport.py] [_log()] starting thread (client mode): 0xa2725810
2025-12-03T22:11:43.256 [DEBUG] [Thread-124561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:11:43.270 [DEBUG] [Thread-124561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:11:43.270 [INFO] [Thread-124561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:11:43.278 [DEBUG] [Thread-124561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] client lang: <none>
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] server lang: <none>
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] kex follows: False
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:11:43.279 [DEBUG] [Thread-124561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:11:43.280 [DEBUG] [Thread-124561] [transport.py] [_log()] Compression: none
2025-12-03T22:11:43.280 [DEBUG] [Thread-124561] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:11:43.336 [DEBUG] [Thread-124561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:11:43.337 [DEBUG] [Thread-124561] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:11:43.338 [DEBUG] [Thread-124561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:11:43.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:11:43.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:11:43.392 [DEBUG] [Thread-124561] [transport.py] [_log()] userauth is OK
2025-12-03T22:11:43.392 [DEBUG] [Thread-124561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:11:43.392 [DEBUG] [Thread-124561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:11:43.392 [DEBUG] [Thread-124561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:11:43.393 [DEBUG] [Thread-124561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:11:43.414 [INFO] [Thread-124561] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:11:43.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:11:43.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:11:44.222 [DEBUG] [Thread-124561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:11:44.222 [DEBUG] [Thread-124561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:11:44.270 [DEBUG] [Thread-124561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:11:44.270 [DEBUG] [Thread-124561] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:11:44.279 [DEBUG] [Thread-124561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:11:44.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:11:44.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:11:44.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:11:44.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:11:44.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:11:44.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:11:44.314 [DEBUG] [Thread-124561] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:11:44.747 [DEBUG] [Thread-124563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:45.299 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:59.804 [DEBUG] [Thread-124564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:59.972 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:11:59.973 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:05.798 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:14.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:12:14.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:12:14.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:12:14.529 [DEBUG] [Thread-124565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:14.844 [DEBUG] [Thread-124566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:15.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 12, 7), 15.71, 34.17, 0.0, 24.91, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:12:15.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:12:07
2025-12-03T22:12:15.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:12:15.309 [DEBUG] [Thread-124567] [transport.py] [_log()] starting thread (client mode): 0xa272a170
2025-12-03T22:12:15.309 [DEBUG] [Thread-124567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:12:15.328 [DEBUG] [Thread-124567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:12:15.328 [INFO] [Thread-124567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:12:15.331 [DEBUG] [Thread-124567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] client lang: <none>
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] server lang: <none>
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] kex follows: False
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:12:15.332 [DEBUG] [Thread-124567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:12:15.333 [DEBUG] [Thread-124567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:12:15.333 [DEBUG] [Thread-124567] [transport.py] [_log()] Compression: none
2025-12-03T22:12:15.333 [DEBUG] [Thread-124567] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:12:15.341 [DEBUG] [Thread-124567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:12:15.342 [DEBUG] [Thread-124567] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:12:15.342 [DEBUG] [Thread-124567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:12:15.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:12:15.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:12:15.344 [DEBUG] [Thread-124567] [transport.py] [_log()] userauth is OK
2025-12-03T22:12:15.344 [DEBUG] [Thread-124567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:12:15.344 [DEBUG] [Thread-124567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:12:15.344 [DEBUG] [Thread-124567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:12:15.344 [DEBUG] [Thread-124567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:12:15.368 [INFO] [Thread-124567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:12:15.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:12:15.987 [DEBUG] [Thread-124567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:12:15.988 [DEBUG] [Thread-124567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:12:15.988 [DEBUG] [Thread-124567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:12:16.029 [DEBUG] [Thread-124567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:12:16.029 [DEBUG] [Thread-124567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:12:16.032 [DEBUG] [Thread-124567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:12:16.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:12:16.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:12:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:12:16.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:12:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:12:16.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:12:16.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:12:16.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:12:16.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:12:16.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.841717 -999.00  +16.10  16.71     39   +2.30 1 1 1 1 1     0    0 13.04 -32.03 ZNESW 16.7 16.7 144.8 24.2 16.3 -25.2 16.2 -24.6 15.9 -23.1 16.3 -24.0
2025-12-03T22:12:16.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:12:16.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:12:16.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.841717
2025-12-03T22:12:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:12:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:12:16.058 [DEBUG] [Thread-124567] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:12:16.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:12:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:12:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:12:16.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:12:07', tmtdew=15.71, humidity=34.17, cloud=0.0, wind=24.91, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:12:07', seeing=0.93, atlas_timestamp='2025-12-03T20:12:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:12:16.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:12:16.160 [DEBUG] [Thread-124570] [transport.py] [_log()] starting thread (client mode): 0xa272bac0
2025-12-03T22:12:16.160 [DEBUG] [Thread-124570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:12:16.175 [DEBUG] [Thread-124570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:12:16.175 [INFO] [Thread-124570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:12:16.182 [DEBUG] [Thread-124570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:12:16.182 [DEBUG] [Thread-124570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:12:16.182 [DEBUG] [Thread-124570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] client lang: <none>
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] server lang: <none>
2025-12-03T22:12:16.183 [DEBUG] [Thread-124570] [transport.py] [_log()] kex follows: False
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] Compression: none
2025-12-03T22:12:16.184 [DEBUG] [Thread-124570] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:12:16.240 [DEBUG] [Thread-124570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:12:16.240 [DEBUG] [Thread-124570] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:12:16.241 [DEBUG] [Thread-124570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:12:16.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:12:16.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:12:16.296 [DEBUG] [Thread-124570] [transport.py] [_log()] userauth is OK
2025-12-03T22:12:16.296 [DEBUG] [Thread-124570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:12:16.296 [DEBUG] [Thread-124570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:12:16.296 [DEBUG] [Thread-124570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:12:16.296 [DEBUG] [Thread-124570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:12:16.316 [INFO] [Thread-124570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:12:16.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:12:16.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:12:17.143 [DEBUG] [Thread-124570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:12:17.144 [DEBUG] [Thread-124570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:12:17.192 [DEBUG] [Thread-124570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:12:17.192 [DEBUG] [Thread-124570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:12:17.201 [DEBUG] [Thread-124570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:12:17.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:12:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:12:17.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:12:17.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:12:17.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:12:17.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:12:17.235 [DEBUG] [Thread-124570] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:12:26.329 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:29.874 [DEBUG] [Thread-124572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:44.921 [DEBUG] [Thread-124573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:46.863 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:12:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:12:47.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:12:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:12:47.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 12, 39), 15.66, 34.18, 0.0, 21.84, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:12:47.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:12:39
2025-12-03T22:12:48.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:12:48.204 [DEBUG] [Thread-124574] [transport.py] [_log()] starting thread (client mode): 0xa2728310
2025-12-03T22:12:48.204 [DEBUG] [Thread-124574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:12:48.221 [DEBUG] [Thread-124574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:12:48.221 [INFO] [Thread-124574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:12:48.222 [DEBUG] [Thread-124574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] client lang: <none>
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] server lang: <none>
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] kex follows: False
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] Compression: none
2025-12-03T22:12:48.223 [DEBUG] [Thread-124574] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:12:48.234 [DEBUG] [Thread-124574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:12:48.234 [DEBUG] [Thread-124574] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:12:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:12:48.235 [DEBUG] [Thread-124574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:12:48.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:12:48.237 [DEBUG] [Thread-124574] [transport.py] [_log()] userauth is OK
2025-12-03T22:12:48.237 [DEBUG] [Thread-124574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:12:48.237 [DEBUG] [Thread-124574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:12:48.237 [DEBUG] [Thread-124574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:12:48.237 [DEBUG] [Thread-124574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:12:48.254 [INFO] [Thread-124574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:12:48.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:12:48.796 [DEBUG] [Thread-124574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:12:48.796 [DEBUG] [Thread-124574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:12:48.796 [DEBUG] [Thread-124574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:12:48.837 [DEBUG] [Thread-124574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:12:48.837 [DEBUG] [Thread-124574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:12:48.839 [DEBUG] [Thread-124574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:12:48.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:12:48.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:12:48.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:12:48.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:12:48.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:12:48.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:12:48.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:12:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:12:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:12:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.842064 -999.00  +16.10  15.74     39   +2.30 1 1 1 1 1     0    0 12.99 -30.95 ZNESW 15.7 15.7 142.2 26.0 16.3 -25.4 16.2 -24.8 16.0 -23.0 16.2 -23.9
2025-12-03T22:12:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:12:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:12:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.842064
2025-12-03T22:12:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:12:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:12:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:12:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:12:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:12:48.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:12:39', tmtdew=15.66, humidity=34.18, cloud=0.0, wind=21.84, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:12:39', seeing=1.02, atlas_timestamp='2025-12-03T20:12:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:12:48.865 [DEBUG] [Thread-124574] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:12:48.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:12:48.965 [DEBUG] [Thread-124577] [transport.py] [_log()] starting thread (client mode): 0xa514c3d0
2025-12-03T22:12:48.965 [DEBUG] [Thread-124577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:12:48.980 [DEBUG] [Thread-124577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:12:48.980 [INFO] [Thread-124577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:12:48.987 [DEBUG] [Thread-124577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:12:48.987 [DEBUG] [Thread-124577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] client lang: <none>
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] server lang: <none>
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] kex follows: False
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:12:48.988 [DEBUG] [Thread-124577] [transport.py] [_log()] Compression: none
2025-12-03T22:12:48.989 [DEBUG] [Thread-124577] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:12:49.044 [DEBUG] [Thread-124577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:12:49.044 [DEBUG] [Thread-124577] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:12:49.045 [DEBUG] [Thread-124577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:12:49.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:12:49.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:12:49.100 [DEBUG] [Thread-124577] [transport.py] [_log()] userauth is OK
2025-12-03T22:12:49.100 [DEBUG] [Thread-124577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:12:49.100 [DEBUG] [Thread-124577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:12:49.100 [DEBUG] [Thread-124577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:12:49.100 [DEBUG] [Thread-124577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:12:49.119 [INFO] [Thread-124577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:12:49.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:12:49.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:12:49.970 [DEBUG] [Thread-124577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:12:49.970 [DEBUG] [Thread-124577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:12:50.018 [DEBUG] [Thread-124577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:12:50.018 [DEBUG] [Thread-124577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:12:50.027 [DEBUG] [Thread-124577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:12:50.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:12:50.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:12:50.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:12:50.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:12:50.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:12:50.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:12:50.062 [DEBUG] [Thread-124577] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:12:59.958 [DEBUG] [Thread-124579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:00.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:00.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:07.477 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:14.607 [DEBUG] [Thread-124580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:15.014 [DEBUG] [Thread-124581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:13:20.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:13:20.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:13:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 13, 11), 15.67, 34.15, 0.0, 22.97, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:13:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:13:11
2025-12-03T22:13:20.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:13:21.035 [DEBUG] [Thread-124582] [transport.py] [_log()] starting thread (client mode): 0xa514c460
2025-12-03T22:13:21.035 [DEBUG] [Thread-124582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:13:21.052 [DEBUG] [Thread-124582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:13:21.052 [INFO] [Thread-124582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] client lang: <none>
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] server lang: <none>
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] kex follows: False
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:13:21.055 [DEBUG] [Thread-124582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:13:21.056 [DEBUG] [Thread-124582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:13:21.056 [DEBUG] [Thread-124582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:13:21.056 [DEBUG] [Thread-124582] [transport.py] [_log()] Compression: none
2025-12-03T22:13:21.056 [DEBUG] [Thread-124582] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:13:21.075 [DEBUG] [Thread-124582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:13:21.076 [DEBUG] [Thread-124582] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:13:21.076 [DEBUG] [Thread-124582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:13:21.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:13:21.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:13:21.078 [DEBUG] [Thread-124582] [transport.py] [_log()] userauth is OK
2025-12-03T22:13:21.078 [DEBUG] [Thread-124582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:13:21.078 [DEBUG] [Thread-124582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:13:21.078 [DEBUG] [Thread-124582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:13:21.078 [DEBUG] [Thread-124582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:13:21.095 [INFO] [Thread-124582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:13:21.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:13:21.641 [DEBUG] [Thread-124582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:13:21.642 [DEBUG] [Thread-124582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:13:21.642 [DEBUG] [Thread-124582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:13:21.683 [DEBUG] [Thread-124582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:13:21.683 [DEBUG] [Thread-124582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:13:21.685 [DEBUG] [Thread-124582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:13:21.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:13:21.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:13:21.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:13:21.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:13:21.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:13:21.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:13:21.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.842411 -999.00  +16.10  16.26     39   +2.30 1 1 1 1 1     0    0 13.08 -29.58 ZNESW 16.3 16.3 141.2 21.7 16.3 -25.3 16.2 -24.7 16.0 -23.1 16.2 -23.9
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.842411
2025-12-03T22:13:21.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:13:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:13:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:13:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:13:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:13:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:13:11', tmtdew=15.67, humidity=34.15, cloud=0.0, wind=22.97, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:13:11', seeing=0.98, atlas_timestamp='2025-12-03T20:13:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:13:21.707 [DEBUG] [Thread-124582] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:13:21.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:13:21.807 [DEBUG] [Thread-124585] [transport.py] [_log()] starting thread (client mode): 0xa2726a10
2025-12-03T22:13:21.807 [DEBUG] [Thread-124585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:13:21.822 [DEBUG] [Thread-124585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:13:21.822 [INFO] [Thread-124585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:13:21.829 [DEBUG] [Thread-124585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] client lang: <none>
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] server lang: <none>
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] kex follows: False
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:13:21.830 [DEBUG] [Thread-124585] [transport.py] [_log()] Compression: none
2025-12-03T22:13:21.831 [DEBUG] [Thread-124585] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:13:21.888 [DEBUG] [Thread-124585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:13:21.889 [DEBUG] [Thread-124585] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:13:21.889 [DEBUG] [Thread-124585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:13:21.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:13:21.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:13:21.944 [DEBUG] [Thread-124585] [transport.py] [_log()] userauth is OK
2025-12-03T22:13:21.944 [DEBUG] [Thread-124585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:13:21.944 [DEBUG] [Thread-124585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:13:21.944 [DEBUG] [Thread-124585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:13:21.944 [DEBUG] [Thread-124585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:13:21.963 [INFO] [Thread-124585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:13:21.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:13:21.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:13:22.806 [DEBUG] [Thread-124585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:13:22.806 [DEBUG] [Thread-124585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:13:22.853 [DEBUG] [Thread-124585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:13:22.854 [DEBUG] [Thread-124585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:13:22.863 [DEBUG] [Thread-124585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:13:22.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:13:22.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:13:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:13:22.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:13:22.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:13:22.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:13:22.899 [DEBUG] [Thread-124585] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:13:27.964 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:30.051 [DEBUG] [Thread-124587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:45.115 [DEBUG] [Thread-124588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:48.496 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:13:52.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:13:52.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:13:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:13:53.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 13, 43), 15.62, 34.78, 0.0, 24.93, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:13:53.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:13:43
2025-12-03T22:13:53.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:13:53.878 [DEBUG] [Thread-124589] [transport.py] [_log()] starting thread (client mode): 0xa514ce80
2025-12-03T22:13:53.878 [DEBUG] [Thread-124589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:13:53.898 [DEBUG] [Thread-124589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:13:53.898 [INFO] [Thread-124589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:13:53.901 [DEBUG] [Thread-124589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:13:53.901 [DEBUG] [Thread-124589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:13:53.901 [DEBUG] [Thread-124589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:13:53.901 [DEBUG] [Thread-124589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:53.901 [DEBUG] [Thread-124589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] client lang: <none>
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] server lang: <none>
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] kex follows: False
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] Compression: none
2025-12-03T22:13:53.902 [DEBUG] [Thread-124589] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:13:53.921 [DEBUG] [Thread-124589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:13:53.921 [DEBUG] [Thread-124589] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:13:53.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:13:53.922 [DEBUG] [Thread-124589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:13:53.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:13:53.924 [DEBUG] [Thread-124589] [transport.py] [_log()] userauth is OK
2025-12-03T22:13:53.924 [DEBUG] [Thread-124589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:13:53.924 [DEBUG] [Thread-124589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:13:53.924 [DEBUG] [Thread-124589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:13:53.924 [DEBUG] [Thread-124589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:13:53.960 [INFO] [Thread-124589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:13:53.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:13:54.625 [DEBUG] [Thread-124589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:13:54.625 [DEBUG] [Thread-124589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:13:54.625 [DEBUG] [Thread-124589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:13:54.666 [DEBUG] [Thread-124589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:13:54.666 [DEBUG] [Thread-124589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:13:54.669 [DEBUG] [Thread-124589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:13:54.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:13:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:13:54.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:13:54.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:13:54.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:13:54.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:13:54.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.842411 -999.00  +16.10  16.26     39   +2.30 1 1 1 1 1     0    0 13.08 -29.58 ZNESW 16.3 16.3 141.2 21.7 16.3 -25.3 16.2 -24.7 16.0 -23.1 16.2 -23.9
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:13:54.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.842411
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:13:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:13:43', tmtdew=15.62, humidity=34.78, cloud=0.0, wind=24.93, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:13:43', seeing=1.03, atlas_timestamp='2025-12-03T20:13:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:13:54.693 [DEBUG] [Thread-124589] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:13:54.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:13:54.796 [DEBUG] [Thread-124592] [transport.py] [_log()] starting thread (client mode): 0xa2729990
2025-12-03T22:13:54.796 [DEBUG] [Thread-124592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:13:54.811 [DEBUG] [Thread-124592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:13:54.811 [INFO] [Thread-124592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:13:54.819 [DEBUG] [Thread-124592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] client lang: <none>
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] server lang: <none>
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] kex follows: False
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] Compression: none
2025-12-03T22:13:54.820 [DEBUG] [Thread-124592] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:13:54.875 [DEBUG] [Thread-124592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:13:54.875 [DEBUG] [Thread-124592] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:13:54.876 [DEBUG] [Thread-124592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:13:54.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:13:54.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:13:54.932 [DEBUG] [Thread-124592] [transport.py] [_log()] userauth is OK
2025-12-03T22:13:54.932 [DEBUG] [Thread-124592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:13:54.932 [DEBUG] [Thread-124592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:13:54.932 [DEBUG] [Thread-124592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:13:54.932 [DEBUG] [Thread-124592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:13:54.951 [INFO] [Thread-124592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:13:54.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:13:54.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:13:55.793 [DEBUG] [Thread-124592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:13:55.794 [DEBUG] [Thread-124592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:13:55.842 [DEBUG] [Thread-124592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:13:55.842 [DEBUG] [Thread-124592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:13:55.850 [DEBUG] [Thread-124592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:13:55.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:13:55.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:13:55.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:13:55.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:13:55.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:13:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:13:55.884 [DEBUG] [Thread-124592] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:14:00.147 [DEBUG] [Thread-124594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:00.377 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:00.378 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:09.042 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:14.675 [DEBUG] [Thread-124595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:15.205 [DEBUG] [Thread-124596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:25.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:14:25.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:14:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:14:26.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 14, 15), 15.64, 34.73, 0.0, 23.98, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:14:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:14:15
2025-12-03T22:14:26.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:14:26.897 [DEBUG] [Thread-124597] [transport.py] [_log()] starting thread (client mode): 0xa2728b80
2025-12-03T22:14:26.897 [DEBUG] [Thread-124597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:14:26.916 [DEBUG] [Thread-124597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:14:26.916 [INFO] [Thread-124597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] client lang: <none>
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] server lang: <none>
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] kex follows: False
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] Compression: none
2025-12-03T22:14:26.919 [DEBUG] [Thread-124597] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:14:26.935 [DEBUG] [Thread-124597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:14:26.935 [DEBUG] [Thread-124597] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:14:26.935 [DEBUG] [Thread-124597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:14:26.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:14:26.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:14:26.936 [DEBUG] [Thread-124597] [transport.py] [_log()] userauth is OK
2025-12-03T22:14:26.936 [DEBUG] [Thread-124597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:14:26.936 [DEBUG] [Thread-124597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:14:26.936 [DEBUG] [Thread-124597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:14:26.936 [DEBUG] [Thread-124597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:14:26.945 [INFO] [Thread-124597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:14:26.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:14:27.568 [DEBUG] [Thread-124597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:14:27.568 [DEBUG] [Thread-124597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:14:27.568 [DEBUG] [Thread-124597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:14:27.609 [DEBUG] [Thread-124597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:14:27.609 [DEBUG] [Thread-124597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:14:27.611 [DEBUG] [Thread-124597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:14:27.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:14:27.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:14:27.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:14:27.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:14:27.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:14:27.628 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:14:27.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.842758 -999.00  +16.10  16.74     39   +2.30 1 1 1 1 1     0    0 12.75 -29.33 ZNESW 16.7 16.7 140.0 27.1 16.3 -25.4 16.2 -24.8 16.0 -23.1 16.2 -24.0
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.842758
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:14:27.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:14:15', tmtdew=15.64, humidity=34.73, cloud=0.0, wind=23.98, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:14:15', seeing=1.03, atlas_timestamp='2025-12-03T20:13:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:10:00')
2025-12-03T22:14:27.629 [DEBUG] [Thread-124597] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:14:27.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:14:27.721 [DEBUG] [Thread-124600] [transport.py] [_log()] starting thread (client mode): 0xa514c8b0
2025-12-03T22:14:27.721 [DEBUG] [Thread-124600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:14:27.740 [DEBUG] [Thread-124600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:14:27.740 [INFO] [Thread-124600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] client lang: <none>
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] server lang: <none>
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] kex follows: False
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] Compression: none
2025-12-03T22:14:27.748 [DEBUG] [Thread-124600] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:14:27.804 [DEBUG] [Thread-124600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:14:27.804 [DEBUG] [Thread-124600] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:14:27.804 [DEBUG] [Thread-124600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:14:27.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:14:27.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:14:27.863 [DEBUG] [Thread-124600] [transport.py] [_log()] userauth is OK
2025-12-03T22:14:27.863 [DEBUG] [Thread-124600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:14:27.863 [DEBUG] [Thread-124600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:14:27.863 [DEBUG] [Thread-124600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:14:27.863 [DEBUG] [Thread-124600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:14:27.877 [INFO] [Thread-124600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:14:27.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:14:27.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:14:28.735 [DEBUG] [Thread-124600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:14:28.735 [DEBUG] [Thread-124600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:14:28.783 [DEBUG] [Thread-124600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:14:28.783 [DEBUG] [Thread-124600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:14:28.791 [DEBUG] [Thread-124600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:14:28.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:14:28.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:14:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:14:28.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:14:28.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:14:28.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:14:28.823 [DEBUG] [Thread-124600] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:14:29.523 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:30.238 [DEBUG] [Thread-124602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:45.290 [DEBUG] [Thread-124603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:50.020 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:14:58.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:14:58.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:14:58.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:14:59.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 14, 47), 15.62, 34.67, 0.0, 23.5, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:14:59.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:14:47
2025-12-03T22:14:59.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:14:59.824 [DEBUG] [Thread-124604] [transport.py] [_log()] starting thread (client mode): 0xa51957e0
2025-12-03T22:14:59.824 [DEBUG] [Thread-124604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:14:59.845 [DEBUG] [Thread-124604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:14:59.846 [INFO] [Thread-124604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] client lang: <none>
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] server lang: <none>
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] kex follows: False
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:14:59.847 [DEBUG] [Thread-124604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:14:59.848 [DEBUG] [Thread-124604] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:14:59.848 [DEBUG] [Thread-124604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:14:59.848 [DEBUG] [Thread-124604] [transport.py] [_log()] Compression: none
2025-12-03T22:14:59.848 [DEBUG] [Thread-124604] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:14:59.856 [DEBUG] [Thread-124604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:14:59.857 [DEBUG] [Thread-124604] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:14:59.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:14:59.857 [DEBUG] [Thread-124604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:14:59.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:14:59.859 [DEBUG] [Thread-124604] [transport.py] [_log()] userauth is OK
2025-12-03T22:14:59.859 [DEBUG] [Thread-124604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:14:59.859 [DEBUG] [Thread-124604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:14:59.859 [DEBUG] [Thread-124604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:14:59.859 [DEBUG] [Thread-124604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:14:59.883 [INFO] [Thread-124604] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:14:59.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:15:00.330 [DEBUG] [Thread-124606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:00.497 [DEBUG] [Thread-124604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:15:00.498 [DEBUG] [Thread-124604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:15:00.498 [DEBUG] [Thread-124604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:15:00.542 [DEBUG] [Thread-124604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:15:00.542 [DEBUG] [Thread-124604] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:15:00.544 [DEBUG] [Thread-124604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:15:00.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:15:00.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:15:00.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:15:00.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:15:00.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:15:00.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:15:00.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.843105 -999.00  +16.00  19.77     39   +2.30 1 1 1 1 1     0    0 13.02 -28.16 ZNESW 19.8 19.8 143.0 22.2 16.3 -25.5 16.2 -24.8 16.0 -23.0 16.3 -24.2
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.843105
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:15:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:14:47', tmtdew=15.62, humidity=34.67, cloud=0.0, wind=23.5, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:14:47', seeing=1.09, atlas_timestamp='2025-12-03T20:14:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:13:00')
2025-12-03T22:15:00.557 [DEBUG] [Thread-124604] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:15:00.576 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:00.577 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:00.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:15:00.649 [DEBUG] [Thread-124608] [transport.py] [_log()] starting thread (client mode): 0xa2761270
2025-12-03T22:15:00.649 [DEBUG] [Thread-124608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:15:00.665 [DEBUG] [Thread-124608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:15:00.665 [INFO] [Thread-124608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:15:00.672 [DEBUG] [Thread-124608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:15:00.672 [DEBUG] [Thread-124608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] client lang: <none>
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] server lang: <none>
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] kex follows: False
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] Compression: none
2025-12-03T22:15:00.673 [DEBUG] [Thread-124608] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:15:00.733 [DEBUG] [Thread-124608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:15:00.734 [DEBUG] [Thread-124608] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:15:00.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:15:00.735 [DEBUG] [Thread-124608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:15:00.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:15:00.791 [DEBUG] [Thread-124608] [transport.py] [_log()] userauth is OK
2025-12-03T22:15:00.792 [DEBUG] [Thread-124608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:15:00.792 [DEBUG] [Thread-124608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:15:00.792 [DEBUG] [Thread-124608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:15:00.792 [DEBUG] [Thread-124608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:15:00.812 [INFO] [Thread-124608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:15:00.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:15:00.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:15:01.665 [DEBUG] [Thread-124608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:15:01.665 [DEBUG] [Thread-124608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:15:01.716 [DEBUG] [Thread-124608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:15:01.716 [DEBUG] [Thread-124608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:15:01.728 [DEBUG] [Thread-124608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:15:01.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:15:01.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:15:01.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:15:01.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:15:01.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:15:01.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:15:01.769 [DEBUG] [Thread-124608] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:15:10.510 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:14.746 [DEBUG] [Thread-124610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:15.370 [DEBUG] [Thread-124611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:30.430 [DEBUG] [Thread-124612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:31.006 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:31.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:15:31.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:15:31.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:15:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 15, 19), 15.65, 34.6, 0.0, 22.5, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:15:32.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:15:19
2025-12-03T22:15:32.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:15:32.757 [DEBUG] [Thread-124613] [transport.py] [_log()] starting thread (client mode): 0xa27616c0
2025-12-03T22:15:32.757 [DEBUG] [Thread-124613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:15:32.776 [DEBUG] [Thread-124613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:15:32.776 [INFO] [Thread-124613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:15:32.779 [DEBUG] [Thread-124613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:15:32.779 [DEBUG] [Thread-124613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] client lang: <none>
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] server lang: <none>
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] kex follows: False
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] Compression: none
2025-12-03T22:15:32.780 [DEBUG] [Thread-124613] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:15:32.797 [DEBUG] [Thread-124613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:15:32.797 [DEBUG] [Thread-124613] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:15:32.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:15:32.798 [DEBUG] [Thread-124613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:15:32.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:15:32.800 [DEBUG] [Thread-124613] [transport.py] [_log()] userauth is OK
2025-12-03T22:15:32.800 [DEBUG] [Thread-124613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:15:32.800 [DEBUG] [Thread-124613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:15:32.800 [DEBUG] [Thread-124613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:15:32.800 [DEBUG] [Thread-124613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:15:32.824 [INFO] [Thread-124613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:15:32.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:15:33.444 [DEBUG] [Thread-124613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:15:33.444 [DEBUG] [Thread-124613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:15:33.444 [DEBUG] [Thread-124613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:15:33.485 [DEBUG] [Thread-124613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:15:33.485 [DEBUG] [Thread-124613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:15:33.488 [DEBUG] [Thread-124613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:15:33.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:15:33.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:15:33.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:15:33.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:15:33.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:15:33.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:15:33.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:15:33.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:15:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:15:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.843453 -999.00  +16.00  17.01     39   +2.30 1 1 1 1 1     0    0 12.99 -29.22 ZNESW 17.0 17.0 140.6 22.2 16.3 -25.3 16.2 -24.8 15.9 -23.1 16.2 -24.1
2025-12-03T22:15:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:15:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:15:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.843453
2025-12-03T22:15:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:15:33.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:15:33.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:15:33.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:15:33.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:15:33.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:15:19', tmtdew=15.65, humidity=34.6, cloud=0.0, wind=22.5, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:15:19', seeing=1.07, atlas_timestamp='2025-12-03T20:14:34.339', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:13:00')
2025-12-03T22:15:33.512 [DEBUG] [Thread-124613] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:15:33.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:15:33.618 [DEBUG] [Thread-124616] [transport.py] [_log()] starting thread (client mode): 0xa51966b0
2025-12-03T22:15:33.619 [DEBUG] [Thread-124616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:15:33.633 [DEBUG] [Thread-124616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:15:33.633 [INFO] [Thread-124616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:15:33.641 [DEBUG] [Thread-124616] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:15:33.641 [DEBUG] [Thread-124616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:15:33.641 [DEBUG] [Thread-124616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:15:33.641 [DEBUG] [Thread-124616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:33.641 [DEBUG] [Thread-124616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] client lang: <none>
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] server lang: <none>
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] kex follows: False
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:15:33.642 [DEBUG] [Thread-124616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:15:33.643 [DEBUG] [Thread-124616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:15:33.643 [DEBUG] [Thread-124616] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:15:33.643 [DEBUG] [Thread-124616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:15:33.643 [DEBUG] [Thread-124616] [transport.py] [_log()] Compression: none
2025-12-03T22:15:33.643 [DEBUG] [Thread-124616] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:15:33.698 [DEBUG] [Thread-124616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:15:33.699 [DEBUG] [Thread-124616] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:15:33.699 [DEBUG] [Thread-124616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:15:33.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:15:33.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:15:33.755 [DEBUG] [Thread-124616] [transport.py] [_log()] userauth is OK
2025-12-03T22:15:33.755 [DEBUG] [Thread-124616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:15:33.755 [DEBUG] [Thread-124616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:15:33.755 [DEBUG] [Thread-124616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:15:33.755 [DEBUG] [Thread-124616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:15:33.777 [INFO] [Thread-124616] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:15:33.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:15:33.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:15:34.625 [DEBUG] [Thread-124616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:15:34.625 [DEBUG] [Thread-124616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:15:34.673 [DEBUG] [Thread-124616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:15:34.673 [DEBUG] [Thread-124616] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:15:34.682 [DEBUG] [Thread-124616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:15:34.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:15:34.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:15:34.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:15:34.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:15:34.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:15:34.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:15:34.717 [DEBUG] [Thread-124616] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:15:45.462 [DEBUG] [Thread-124618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:15:51.578 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:00.512 [DEBUG] [Thread-124619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:00.774 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:00.776 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:04.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:16:04.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:16:04.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:16:05.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 15, 51), 15.62, 34.55, 0.0, 22.8, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:16:05.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:15:51
2025-12-03T22:16:05.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:16:05.707 [DEBUG] [Thread-124620] [transport.py] [_log()] starting thread (client mode): 0xa51967d0
2025-12-03T22:16:05.707 [DEBUG] [Thread-124620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:16:05.726 [DEBUG] [Thread-124620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:16:05.726 [INFO] [Thread-124620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:05.730 [DEBUG] [Thread-124620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] client lang: <none>
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] server lang: <none>
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] kex follows: False
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:16:05.731 [DEBUG] [Thread-124620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:16:05.732 [DEBUG] [Thread-124620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:16:05.732 [DEBUG] [Thread-124620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:16:05.732 [DEBUG] [Thread-124620] [transport.py] [_log()] Compression: none
2025-12-03T22:16:05.732 [DEBUG] [Thread-124620] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:16:05.749 [DEBUG] [Thread-124620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:16:05.749 [DEBUG] [Thread-124620] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:16:05.750 [DEBUG] [Thread-124620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:16:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:16:05.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:16:05.793 [DEBUG] [Thread-124620] [transport.py] [_log()] userauth is OK
2025-12-03T22:16:05.793 [DEBUG] [Thread-124620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:16:05.793 [DEBUG] [Thread-124620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:16:05.793 [DEBUG] [Thread-124620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:16:05.793 [DEBUG] [Thread-124620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:16:05.828 [INFO] [Thread-124620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:16:05.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:16:06.544 [DEBUG] [Thread-124620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:16:06.544 [DEBUG] [Thread-124620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:16:06.545 [DEBUG] [Thread-124620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:16:06.586 [DEBUG] [Thread-124620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:16:06.586 [DEBUG] [Thread-124620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:16:06.589 [DEBUG] [Thread-124620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:16:06.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:16:06.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:16:06.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:16:06.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:16:06.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:16:06.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:16:06.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:16:06.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:16:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:16:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.844147 -999.00  +15.90  18.08     39   +2.30 1 1 1 1 1     0    0 12.97 -29.90 ZNESW 18.1 18.1 142.6 26.4 16.3 -25.4 16.2 -24.8 15.9 -23.3 16.2 -24.2
2025-12-03T22:16:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:16:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:16:06.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.844147
2025-12-03T22:16:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:16:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:16:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:16:06.614 [DEBUG] [Thread-124620] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:16:06.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:16:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:16:06.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:15:51', tmtdew=15.62, humidity=34.55, cloud=0.0, wind=22.8, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:15:51', seeing=0.98, atlas_timestamp='2025-12-03T20:15:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:13:00')
2025-12-03T22:16:06.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:16:06.718 [DEBUG] [Thread-124623] [transport.py] [_log()] starting thread (client mode): 0xa51d35b0
2025-12-03T22:16:06.718 [DEBUG] [Thread-124623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:16:06.733 [DEBUG] [Thread-124623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:16:06.733 [INFO] [Thread-124623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:16:06.740 [DEBUG] [Thread-124623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:16:06.741 [DEBUG] [Thread-124623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] client lang: <none>
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] server lang: <none>
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] kex follows: False
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:16:06.742 [DEBUG] [Thread-124623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:16:06.743 [DEBUG] [Thread-124623] [transport.py] [_log()] Compression: none
2025-12-03T22:16:06.743 [DEBUG] [Thread-124623] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:16:06.805 [DEBUG] [Thread-124623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:16:06.805 [DEBUG] [Thread-124623] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:16:06.806 [DEBUG] [Thread-124623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:16:06.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:16:06.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:16:06.867 [DEBUG] [Thread-124623] [transport.py] [_log()] userauth is OK
2025-12-03T22:16:06.867 [DEBUG] [Thread-124623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:16:06.867 [DEBUG] [Thread-124623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:16:06.867 [DEBUG] [Thread-124623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:16:06.867 [DEBUG] [Thread-124623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:16:06.889 [INFO] [Thread-124623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:16:06.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:16:06.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:16:07.782 [DEBUG] [Thread-124623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:16:07.782 [DEBUG] [Thread-124623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:16:07.830 [DEBUG] [Thread-124623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:16:07.830 [DEBUG] [Thread-124623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:16:07.839 [DEBUG] [Thread-124623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:16:07.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:16:07.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:16:07.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:16:07.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:16:07.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:16:07.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:16:07.873 [DEBUG] [Thread-124623] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:16:12.071 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:14.813 [DEBUG] [Thread-124625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:15.552 [DEBUG] [Thread-124626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:30.609 [DEBUG] [Thread-124627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:32.455 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:37.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:16:37.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:16:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:16:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 16, 23), 15.62, 34.57, 0.0, 23.56, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:16:38.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:16:23
2025-12-03T22:16:38.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:16:38.842 [DEBUG] [Thread-124628] [transport.py] [_log()] starting thread (client mode): 0xa514ead0
2025-12-03T22:16:38.842 [DEBUG] [Thread-124628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:16:38.864 [DEBUG] [Thread-124628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:16:38.864 [INFO] [Thread-124628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:16:38.867 [DEBUG] [Thread-124628] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:16:38.867 [DEBUG] [Thread-124628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] client lang: <none>
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] server lang: <none>
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] kex follows: False
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] Compression: none
2025-12-03T22:16:38.868 [DEBUG] [Thread-124628] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:16:38.886 [DEBUG] [Thread-124628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:16:38.887 [DEBUG] [Thread-124628] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:16:38.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:16:38.887 [DEBUG] [Thread-124628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:16:38.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:16:38.889 [DEBUG] [Thread-124628] [transport.py] [_log()] userauth is OK
2025-12-03T22:16:38.889 [DEBUG] [Thread-124628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:16:38.890 [DEBUG] [Thread-124628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:16:38.890 [DEBUG] [Thread-124628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:16:38.890 [DEBUG] [Thread-124628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:16:38.925 [INFO] [Thread-124628] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:16:38.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:16:39.572 [DEBUG] [Thread-124628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:16:39.572 [DEBUG] [Thread-124628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:16:39.572 [DEBUG] [Thread-124628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:16:39.613 [DEBUG] [Thread-124628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:16:39.613 [DEBUG] [Thread-124628] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:16:39.616 [DEBUG] [Thread-124628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:16:39.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:16:39.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:16:39.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:16:39.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:16:39.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:16:39.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:16:39.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:16:39.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:16:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:16:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.844494 -999.00  +15.90  22.31     39   +2.30 1 1 1 1 1     0    0 12.90 -34.72 ZNESW 22.3 22.3 141.2 25.5 16.2 -25.2 16.2 -24.8 15.9 -23.0 16.2 -24.3
2025-12-03T22:16:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:16:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:16:39.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.844494
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:16:39.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:16:23', tmtdew=15.62, humidity=34.57, cloud=0.0, wind=23.56, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:16:23', seeing=0.93, atlas_timestamp='2025-12-03T20:16:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:13:00')
2025-12-03T22:16:39.641 [DEBUG] [Thread-124628] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:16:39.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:16:39.745 [DEBUG] [Thread-124631] [transport.py] [_log()] starting thread (client mode): 0xa5196b60
2025-12-03T22:16:39.745 [DEBUG] [Thread-124631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:16:39.760 [DEBUG] [Thread-124631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:16:39.760 [INFO] [Thread-124631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:16:39.767 [DEBUG] [Thread-124631] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:16:39.768 [DEBUG] [Thread-124631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] client lang: <none>
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] server lang: <none>
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] kex follows: False
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:16:39.769 [DEBUG] [Thread-124631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:16:39.770 [DEBUG] [Thread-124631] [transport.py] [_log()] Compression: none
2025-12-03T22:16:39.770 [DEBUG] [Thread-124631] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:16:39.829 [DEBUG] [Thread-124631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:16:39.830 [DEBUG] [Thread-124631] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:16:39.830 [DEBUG] [Thread-124631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:16:39.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:16:39.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:16:39.891 [DEBUG] [Thread-124631] [transport.py] [_log()] userauth is OK
2025-12-03T22:16:39.891 [DEBUG] [Thread-124631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:16:39.891 [DEBUG] [Thread-124631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:16:39.891 [DEBUG] [Thread-124631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:16:39.891 [DEBUG] [Thread-124631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:16:39.917 [INFO] [Thread-124631] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:16:39.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:16:39.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:16:40.791 [DEBUG] [Thread-124631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:16:40.791 [DEBUG] [Thread-124631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:16:40.841 [DEBUG] [Thread-124631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:16:40.841 [DEBUG] [Thread-124631] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:16:40.850 [DEBUG] [Thread-124631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:16:40.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:16:40.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:16:40.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:16:40.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:16:40.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:16:40.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:16:40.884 [DEBUG] [Thread-124631] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:16:45.646 [DEBUG] [Thread-124633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:16:52.877 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:00.697 [DEBUG] [Thread-124634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:00.980 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:00.981 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:10.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:17:10.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:17:10.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:17:11.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 16, 55), 15.63, 34.54, 0.0, 23.86, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:17:11.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:16:55
2025-12-03T22:17:11.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:17:11.855 [DEBUG] [Thread-124635] [transport.py] [_log()] starting thread (client mode): 0xa27288e0
2025-12-03T22:17:11.856 [DEBUG] [Thread-124635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:17:11.876 [DEBUG] [Thread-124635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:17:11.876 [INFO] [Thread-124635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:17:11.879 [DEBUG] [Thread-124635] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:17:11.879 [DEBUG] [Thread-124635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] client lang: <none>
2025-12-03T22:17:11.880 [DEBUG] [Thread-124635] [transport.py] [_log()] server lang: <none>
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] kex follows: False
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] Compression: none
2025-12-03T22:17:11.881 [DEBUG] [Thread-124635] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:17:11.901 [DEBUG] [Thread-124635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:17:11.902 [DEBUG] [Thread-124635] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:17:11.903 [DEBUG] [Thread-124635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:17:11.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:17:11.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:17:11.905 [DEBUG] [Thread-124635] [transport.py] [_log()] userauth is OK
2025-12-03T22:17:11.905 [DEBUG] [Thread-124635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:17:11.906 [DEBUG] [Thread-124635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:17:11.906 [DEBUG] [Thread-124635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:17:11.906 [DEBUG] [Thread-124635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:17:11.925 [INFO] [Thread-124635] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:17:11.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:17:12.674 [DEBUG] [Thread-124635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:17:12.674 [DEBUG] [Thread-124635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:17:12.674 [DEBUG] [Thread-124635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:17:12.715 [DEBUG] [Thread-124635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:17:12.716 [DEBUG] [Thread-124635] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:17:12.718 [DEBUG] [Thread-124635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:17:12.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:17:12.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:17:12.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:17:12.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:17:12.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:17:12.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:17:12.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.844841 -999.00  +16.00  16.18     39   +2.30 1 1 1 1 1     0    0 13.20 -33.25 ZNESW 16.2 16.2 148.0 27.5 16.3 -25.4 16.1 -24.7 16.0 -23.0 16.2 -23.8
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:17:12.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.844841
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:17:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:16:55', tmtdew=15.63, humidity=34.54, cloud=0.0, wind=23.86, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:16:55', seeing=1.03, atlas_timestamp='2025-12-03T20:16:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.03725000000000023, -0.055749999999999744, 0.04025000000000034, 0.06099999999999994, 0.042500000000000426, 0.1252500000000012, 0.062499999999998224, 0.06675000000000075, 0.08249999999999957, 0.0940000000000012, 0.0572499999999998, 0.032999999999999474, 0.06599999999999895, 0.10125000000000028, -0.02800000000000047, 0.017999999999998906, 0.10524999999999984, 0.0754999999999999, 0.09999999999999964, 0.06524999999999892, 0.06899999999999906, 0.048749999999998295, -0.03774999999999906, -0.54725, 0.0019999999999988916, 0.05250000000000021, 0.08575000000000088, 0.13750000000000107, 0.1880000000000006, 0.2560000000000011, -0.0929999999999982, -0.30799999999999983, 0.05674999999999919], zp_timestamp='2025-12-03T20:13:00')
2025-12-03T22:17:12.733 [DEBUG] [Thread-124635] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:17:12.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:17:12.838 [DEBUG] [Thread-124638] [transport.py] [_log()] starting thread (client mode): 0xa27cb6d0
2025-12-03T22:17:12.838 [DEBUG] [Thread-124638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:17:12.853 [DEBUG] [Thread-124638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:17:12.853 [INFO] [Thread-124638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:17:12.861 [DEBUG] [Thread-124638] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:17:12.861 [DEBUG] [Thread-124638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:17:12.861 [DEBUG] [Thread-124638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:17:12.861 [DEBUG] [Thread-124638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:12.861 [DEBUG] [Thread-124638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] client lang: <none>
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] server lang: <none>
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] kex follows: False
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:17:12.862 [DEBUG] [Thread-124638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:17:12.863 [DEBUG] [Thread-124638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:17:12.863 [DEBUG] [Thread-124638] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:17:12.863 [DEBUG] [Thread-124638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:17:12.863 [DEBUG] [Thread-124638] [transport.py] [_log()] Compression: none
2025-12-03T22:17:12.863 [DEBUG] [Thread-124638] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:17:12.923 [DEBUG] [Thread-124638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:17:12.923 [DEBUG] [Thread-124638] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:17:12.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:17:12.925 [DEBUG] [Thread-124638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:17:12.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:17:12.980 [DEBUG] [Thread-124638] [transport.py] [_log()] userauth is OK
2025-12-03T22:17:12.980 [DEBUG] [Thread-124638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:17:12.980 [DEBUG] [Thread-124638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:17:12.980 [DEBUG] [Thread-124638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:17:12.981 [DEBUG] [Thread-124638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:17:13.004 [INFO] [Thread-124638] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:17:13.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:17:13.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:17:13.269 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:13.829 [DEBUG] [Thread-124638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:17:13.829 [DEBUG] [Thread-124638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:17:13.877 [DEBUG] [Thread-124638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:17:13.877 [DEBUG] [Thread-124638] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:17:13.886 [DEBUG] [Thread-124638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:17:13.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:17:13.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:17:13.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:17:13.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:17:13.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:17:13.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:17:13.921 [DEBUG] [Thread-124638] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:17:14.879 [DEBUG] [Thread-124640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:15.732 [DEBUG] [Thread-124641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:30.786 [DEBUG] [Thread-124642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:33.722 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:43.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:17:43.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:17:43.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:17:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 17, 27), 15.6, 34.6, 0.0, 22.11, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:17:44.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:17:27
2025-12-03T22:17:44.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:17:44.876 [DEBUG] [Thread-124643] [transport.py] [_log()] starting thread (client mode): 0xa51d3e80
2025-12-03T22:17:44.876 [DEBUG] [Thread-124643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:17:44.896 [DEBUG] [Thread-124643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:17:44.896 [INFO] [Thread-124643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:17:44.899 [DEBUG] [Thread-124643] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:17:44.900 [DEBUG] [Thread-124643] [transport.py] [_log()] client lang: <none>
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] server lang: <none>
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] kex follows: False
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:17:44.901 [DEBUG] [Thread-124643] [transport.py] [_log()] Compression: none
2025-12-03T22:17:44.902 [DEBUG] [Thread-124643] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:17:44.919 [DEBUG] [Thread-124643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:17:44.920 [DEBUG] [Thread-124643] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:17:44.921 [DEBUG] [Thread-124643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:17:44.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:17:44.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:17:44.923 [DEBUG] [Thread-124643] [transport.py] [_log()] userauth is OK
2025-12-03T22:17:44.923 [DEBUG] [Thread-124643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:17:44.924 [DEBUG] [Thread-124643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:17:44.924 [DEBUG] [Thread-124643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:17:44.924 [DEBUG] [Thread-124643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:17:44.945 [INFO] [Thread-124643] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:17:44.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:17:45.536 [DEBUG] [Thread-124643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:17:45.536 [DEBUG] [Thread-124643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:17:45.537 [DEBUG] [Thread-124643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:17:45.578 [DEBUG] [Thread-124643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:17:45.578 [DEBUG] [Thread-124643] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:17:45.581 [DEBUG] [Thread-124643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:17:45.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:17:45.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:17:45.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:17:45.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:17:45.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:17:45.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:17:45.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:17:45.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.845189 -999.00  +16.00  15.88     39   +2.30 1 1 1 1 1     0    0 13.15 -34.73 ZNESW 15.9 15.9 138.8 23.1 16.3 -25.4 16.1 -24.8 16.0 -23.3 16.3 -24.0
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.845189
2025-12-03T22:17:45.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:17:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:17:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:17:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:17:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:17:45.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:17:27', tmtdew=15.6, humidity=34.6, cloud=0.0, wind=22.11, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:17:27', seeing=1.03, atlas_timestamp='2025-12-03T20:17:04.330', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:17:45.606 [DEBUG] [Thread-124643] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:17:45.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:17:45.709 [DEBUG] [Thread-124646] [transport.py] [_log()] starting thread (client mode): 0xa5149930
2025-12-03T22:17:45.709 [DEBUG] [Thread-124646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:17:45.724 [DEBUG] [Thread-124646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:17:45.725 [INFO] [Thread-124646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:17:45.732 [DEBUG] [Thread-124646] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:17:45.732 [DEBUG] [Thread-124646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:17:45.732 [DEBUG] [Thread-124646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:17:45.732 [DEBUG] [Thread-124646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] client lang: <none>
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] server lang: <none>
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] kex follows: False
2025-12-03T22:17:45.733 [DEBUG] [Thread-124646] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] Compression: none
2025-12-03T22:17:45.734 [DEBUG] [Thread-124646] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:17:45.790 [DEBUG] [Thread-124646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:17:45.791 [DEBUG] [Thread-124646] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:17:45.792 [DEBUG] [Thread-124646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:17:45.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:17:45.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:17:45.822 [DEBUG] [Thread-124648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:17:45.845 [DEBUG] [Thread-124646] [transport.py] [_log()] userauth is OK
2025-12-03T22:17:45.846 [DEBUG] [Thread-124646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:17:45.846 [DEBUG] [Thread-124646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:17:45.846 [DEBUG] [Thread-124646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:17:45.846 [DEBUG] [Thread-124646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:17:45.868 [INFO] [Thread-124646] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:17:45.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:17:45.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:17:46.778 [DEBUG] [Thread-124646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:17:46.779 [DEBUG] [Thread-124646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:17:46.827 [DEBUG] [Thread-124646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:17:46.827 [DEBUG] [Thread-124646] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:17:46.835 [DEBUG] [Thread-124646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:17:46.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:17:46.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:17:46.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:17:46.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:17:46.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:17:46.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:17:46.870 [DEBUG] [Thread-124646] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:17:54.150 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:00.878 [DEBUG] [Thread-124649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:01.179 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:01.182 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:14.571 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:14.947 [DEBUG] [Thread-124650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:15.911 [DEBUG] [Thread-124651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:16.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:18:16.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:18:16.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:18:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 17, 59), 15.62, 34.55, 0.0, 23.42, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:18:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:17:59
2025-12-03T22:18:17.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:18:17.881 [DEBUG] [Thread-124652] [transport.py] [_log()] starting thread (client mode): 0xa5149630
2025-12-03T22:18:17.881 [DEBUG] [Thread-124652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:18:17.900 [DEBUG] [Thread-124652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:18:17.901 [INFO] [Thread-124652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] client lang: <none>
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] server lang: <none>
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] kex follows: False
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] Compression: none
2025-12-03T22:18:17.903 [DEBUG] [Thread-124652] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:18:17.913 [DEBUG] [Thread-124652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:18:17.913 [DEBUG] [Thread-124652] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:18:17.913 [DEBUG] [Thread-124652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:18:17.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:18:17.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:18:17.914 [DEBUG] [Thread-124652] [transport.py] [_log()] userauth is OK
2025-12-03T22:18:17.914 [DEBUG] [Thread-124652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:18:17.914 [DEBUG] [Thread-124652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:18:17.914 [DEBUG] [Thread-124652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:18:17.914 [DEBUG] [Thread-124652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:18:17.923 [INFO] [Thread-124652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:18:17.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:18:18.718 [DEBUG] [Thread-124652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:18:18.719 [DEBUG] [Thread-124652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:18:18.719 [DEBUG] [Thread-124652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:18:18.759 [DEBUG] [Thread-124652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:18:18.759 [DEBUG] [Thread-124652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:18:18.762 [DEBUG] [Thread-124652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:18:18.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:18:18.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:18:18.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:18:18.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:18:18.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:18:18.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:18:18.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:18:18.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:18:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.845536 -999.00  +15.90  20.96     39   +2.30 1 1 1 1 1     0    0 12.95 -35.89 ZNESW 21.0 21.0 149.2 25.4 16.3 -25.2 16.2 -24.8 15.9 -23.3 16.2 -24.1
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.845536
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:18:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:17:59', tmtdew=15.62, humidity=34.55, cloud=0.0, wind=23.42, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:18:00', seeing=0.95, atlas_timestamp='2025-12-03T20:17:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:18:18.781 [DEBUG] [Thread-124652] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:18:18.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:18:18.873 [DEBUG] [Thread-124655] [transport.py] [_log()] starting thread (client mode): 0xa2760100
2025-12-03T22:18:18.873 [DEBUG] [Thread-124655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:18:18.888 [DEBUG] [Thread-124655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:18:18.888 [INFO] [Thread-124655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] client lang: <none>
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] server lang: <none>
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] kex follows: False
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] Compression: none
2025-12-03T22:18:18.896 [DEBUG] [Thread-124655] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:18:18.953 [DEBUG] [Thread-124655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:18:18.953 [DEBUG] [Thread-124655] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:18:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:18:18.953 [DEBUG] [Thread-124655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:18:18.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:18:19.010 [DEBUG] [Thread-124655] [transport.py] [_log()] userauth is OK
2025-12-03T22:18:19.010 [DEBUG] [Thread-124655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:18:19.010 [DEBUG] [Thread-124655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:18:19.010 [DEBUG] [Thread-124655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:18:19.010 [DEBUG] [Thread-124655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:18:19.024 [INFO] [Thread-124655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:18:19.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:18:19.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:18:19.841 [DEBUG] [Thread-124655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:18:19.841 [DEBUG] [Thread-124655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:18:19.889 [DEBUG] [Thread-124655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:18:19.889 [DEBUG] [Thread-124655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:18:19.897 [DEBUG] [Thread-124655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:18:19.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:18:19.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:18:19.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:18:19.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:18:19.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:18:19.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:18:19.929 [DEBUG] [Thread-124655] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:18:30.949 [DEBUG] [Thread-124657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:34.971 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:46.015 [DEBUG] [Thread-124658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:18:49.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:18:49.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:18:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 18, 32), 15.58, 34.64, 0.0, 23.33, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:18:50.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:18:32
2025-12-03T22:18:50.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:18:50.891 [DEBUG] [Thread-124659] [transport.py] [_log()] starting thread (client mode): 0xa2761d20
2025-12-03T22:18:50.892 [DEBUG] [Thread-124659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:18:50.911 [DEBUG] [Thread-124659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:18:50.911 [INFO] [Thread-124659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:18:50.914 [DEBUG] [Thread-124659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:18:50.914 [DEBUG] [Thread-124659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] client lang: <none>
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] server lang: <none>
2025-12-03T22:18:50.915 [DEBUG] [Thread-124659] [transport.py] [_log()] kex follows: False
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] Compression: none
2025-12-03T22:18:50.916 [DEBUG] [Thread-124659] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:18:50.934 [DEBUG] [Thread-124659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:18:50.935 [DEBUG] [Thread-124659] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:18:50.935 [DEBUG] [Thread-124659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:18:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:18:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:18:50.976 [DEBUG] [Thread-124659] [transport.py] [_log()] userauth is OK
2025-12-03T22:18:50.977 [DEBUG] [Thread-124659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:18:50.977 [DEBUG] [Thread-124659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:18:50.977 [DEBUG] [Thread-124659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:18:50.977 [DEBUG] [Thread-124659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:18:51.009 [INFO] [Thread-124659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:18:51.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:18:51.628 [DEBUG] [Thread-124659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:18:51.628 [DEBUG] [Thread-124659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:18:51.628 [DEBUG] [Thread-124659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:18:51.669 [DEBUG] [Thread-124659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:18:51.669 [DEBUG] [Thread-124659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:18:51.672 [DEBUG] [Thread-124659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:18:51.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:18:51.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:18:51.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:18:51.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:18:51.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:18:51.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:18:51.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.845883 -999.00  +16.00  17.91     39   +2.30 1 1 1 1 1     0    0 12.63 -33.33 ZNESW 17.9 17.9 144.0 22.9 16.2 -25.3 16.2 -24.8 15.9 -23.1 16.2 -23.9
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:18:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.845883
2025-12-03T22:18:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:18:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:18:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:18:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:18:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:18:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:18:32', tmtdew=15.58, humidity=34.64, cloud=0.0, wind=23.33, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:18:32', seeing=1.03, atlas_timestamp='2025-12-03T20:18:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:18:51.696 [DEBUG] [Thread-124659] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:18:51.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:18:51.798 [DEBUG] [Thread-124662] [transport.py] [_log()] starting thread (client mode): 0xa2762080
2025-12-03T22:18:51.798 [DEBUG] [Thread-124662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:18:51.813 [DEBUG] [Thread-124662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:18:51.813 [INFO] [Thread-124662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:18:51.820 [DEBUG] [Thread-124662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] client lang: <none>
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] server lang: <none>
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] kex follows: False
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:18:51.821 [DEBUG] [Thread-124662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:18:51.822 [DEBUG] [Thread-124662] [transport.py] [_log()] Compression: none
2025-12-03T22:18:51.822 [DEBUG] [Thread-124662] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:18:51.880 [DEBUG] [Thread-124662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:18:51.880 [DEBUG] [Thread-124662] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:18:51.881 [DEBUG] [Thread-124662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:18:51.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:18:51.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:18:51.936 [DEBUG] [Thread-124662] [transport.py] [_log()] userauth is OK
2025-12-03T22:18:51.936 [DEBUG] [Thread-124662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:18:51.937 [DEBUG] [Thread-124662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:18:51.937 [DEBUG] [Thread-124662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:18:51.937 [DEBUG] [Thread-124662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:18:51.955 [INFO] [Thread-124662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:18:51.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:18:51.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:18:52.804 [DEBUG] [Thread-124662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:18:52.804 [DEBUG] [Thread-124662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:18:52.852 [DEBUG] [Thread-124662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:18:52.852 [DEBUG] [Thread-124662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:18:52.861 [DEBUG] [Thread-124662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:18:52.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:18:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:18:52.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:18:52.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:18:52.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:18:52.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:18:52.896 [DEBUG] [Thread-124662] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:18:55.353 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:01.050 [DEBUG] [Thread-124664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:01.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:01.485 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:15.012 [DEBUG] [Thread-124665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:15.734 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:16.106 [DEBUG] [Thread-124666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:22.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:19:22.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:19:22.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:19:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 19, 4), 15.52, 34.78, 0.0, 24.69, 15.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:19:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:19:04
2025-12-03T22:19:23.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:19:23.877 [DEBUG] [Thread-124667] [transport.py] [_log()] starting thread (client mode): 0xa27cab90
2025-12-03T22:19:23.877 [DEBUG] [Thread-124667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:19:23.898 [DEBUG] [Thread-124667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:19:23.898 [INFO] [Thread-124667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:23.901 [DEBUG] [Thread-124667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] client lang: <none>
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] server lang: <none>
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] kex follows: False
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:19:23.902 [DEBUG] [Thread-124667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:19:23.903 [DEBUG] [Thread-124667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:19:23.903 [DEBUG] [Thread-124667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:19:23.903 [DEBUG] [Thread-124667] [transport.py] [_log()] Compression: none
2025-12-03T22:19:23.903 [DEBUG] [Thread-124667] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:19:23.922 [DEBUG] [Thread-124667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:19:23.923 [DEBUG] [Thread-124667] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:19:23.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:19:23.924 [DEBUG] [Thread-124667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:19:23.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:19:23.926 [DEBUG] [Thread-124667] [transport.py] [_log()] userauth is OK
2025-12-03T22:19:23.926 [DEBUG] [Thread-124667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:19:23.926 [DEBUG] [Thread-124667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:19:23.926 [DEBUG] [Thread-124667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:19:23.926 [DEBUG] [Thread-124667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:19:23.950 [INFO] [Thread-124667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:19:23.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:19:24.602 [DEBUG] [Thread-124667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:19:24.602 [DEBUG] [Thread-124667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:19:24.602 [DEBUG] [Thread-124667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:19:24.643 [DEBUG] [Thread-124667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:19:24.643 [DEBUG] [Thread-124667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:19:24.646 [DEBUG] [Thread-124667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:19:24.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:19:24.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:19:24.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:19:24.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:19:24.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:19:24.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:19:24.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:19:24.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:19:24.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:19:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.846578 -999.00  +16.00  16.60     39   +2.30 1 1 1 1 1     0    0 12.85 -30.45 ZNESW 16.6 16.6 134.0 22.4 16.2 -25.3 16.1 -24.8 15.9 -23.1 16.2 -24.1
2025-12-03T22:19:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:19:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:19:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.846578
2025-12-03T22:19:24.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:19:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:19:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:19:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:19:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:19:24.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:19:04', tmtdew=15.52, humidity=34.78, cloud=0.0, wind=24.69, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:19:04', seeing=1.02, atlas_timestamp='2025-12-03T20:19:04.339', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:19:24.669 [DEBUG] [Thread-124667] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:19:24.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:19:24.774 [DEBUG] [Thread-124670] [transport.py] [_log()] starting thread (client mode): 0xa51d19c0
2025-12-03T22:19:24.774 [DEBUG] [Thread-124670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:19:24.788 [DEBUG] [Thread-124670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:19:24.788 [INFO] [Thread-124670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:24.796 [DEBUG] [Thread-124670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] client lang: <none>
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] server lang: <none>
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] kex follows: False
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:19:24.797 [DEBUG] [Thread-124670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:19:24.798 [DEBUG] [Thread-124670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:19:24.798 [DEBUG] [Thread-124670] [transport.py] [_log()] Compression: none
2025-12-03T22:19:24.798 [DEBUG] [Thread-124670] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:19:24.854 [DEBUG] [Thread-124670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:19:24.854 [DEBUG] [Thread-124670] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:19:24.855 [DEBUG] [Thread-124670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:19:24.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:19:24.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:19:24.909 [DEBUG] [Thread-124670] [transport.py] [_log()] userauth is OK
2025-12-03T22:19:24.910 [DEBUG] [Thread-124670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:19:24.910 [DEBUG] [Thread-124670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:19:24.910 [DEBUG] [Thread-124670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:19:24.910 [DEBUG] [Thread-124670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:19:24.930 [INFO] [Thread-124670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:19:24.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:19:24.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:19:25.824 [DEBUG] [Thread-124670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:19:25.825 [DEBUG] [Thread-124670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:19:25.872 [DEBUG] [Thread-124670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:19:25.872 [DEBUG] [Thread-124670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:19:25.881 [DEBUG] [Thread-124670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:19:25.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:19:25.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:19:25.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:19:25.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:19:25.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:19:25.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:19:25.914 [DEBUG] [Thread-124670] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:19:31.153 [DEBUG] [Thread-124672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:36.114 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:46.209 [DEBUG] [Thread-124673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:55.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:19:55.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:19:55.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:19:56.494 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:19:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 19, 36), 15.54, 34.83, 0.0, 22.07, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:19:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:19:36
2025-12-03T22:19:56.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:19:56.885 [DEBUG] [Thread-124674] [transport.py] [_log()] starting thread (client mode): 0xa27ca590
2025-12-03T22:19:56.885 [DEBUG] [Thread-124674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:19:56.905 [DEBUG] [Thread-124674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:19:56.906 [INFO] [Thread-124674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:56.909 [DEBUG] [Thread-124674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] client lang: <none>
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] server lang: <none>
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] kex follows: False
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:19:56.910 [DEBUG] [Thread-124674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:19:56.911 [DEBUG] [Thread-124674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:19:56.911 [DEBUG] [Thread-124674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:19:56.911 [DEBUG] [Thread-124674] [transport.py] [_log()] Compression: none
2025-12-03T22:19:56.911 [DEBUG] [Thread-124674] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:19:56.928 [DEBUG] [Thread-124674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:19:56.929 [DEBUG] [Thread-124674] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:19:56.929 [DEBUG] [Thread-124674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:19:56.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:19:56.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:19:56.931 [DEBUG] [Thread-124674] [transport.py] [_log()] userauth is OK
2025-12-03T22:19:56.931 [DEBUG] [Thread-124674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:19:56.932 [DEBUG] [Thread-124674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:19:56.932 [DEBUG] [Thread-124674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:19:56.932 [DEBUG] [Thread-124674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:19:56.955 [INFO] [Thread-124674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:19:56.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:19:57.578 [DEBUG] [Thread-124674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:19:57.578 [DEBUG] [Thread-124674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:19:57.579 [DEBUG] [Thread-124674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:19:57.620 [DEBUG] [Thread-124674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:19:57.620 [DEBUG] [Thread-124674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:19:57.623 [DEBUG] [Thread-124674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:19:57.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:19:57.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:19:57.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:19:57.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:19:57.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:19:57.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:19:57.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.846925 -999.00  +16.00  16.92     39   +2.40 1 1 1 1 1     0    0 12.76 -31.55 ZNESW 16.9 16.9 142.0 20.3 16.2 -25.3 16.2 -24.8 15.9 -23.2 16.2 -24.1
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:19:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.846925
2025-12-03T22:19:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:19:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:19:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:19:57.646 [DEBUG] [Thread-124674] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:19:57.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:19:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:19:57.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:19:36', tmtdew=15.54, humidity=34.83, cloud=0.0, wind=22.07, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:19:36', seeing=0.95, atlas_timestamp='2025-12-03T20:19:34.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:19:57.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:19:57.751 [DEBUG] [Thread-124677] [transport.py] [_log()] starting thread (client mode): 0xa51d0490
2025-12-03T22:19:57.751 [DEBUG] [Thread-124677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:19:57.764 [DEBUG] [Thread-124677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:19:57.764 [INFO] [Thread-124677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:19:57.772 [DEBUG] [Thread-124677] [transport.py] [_log()] client lang: <none>
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] server lang: <none>
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] kex follows: False
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] Compression: none
2025-12-03T22:19:57.773 [DEBUG] [Thread-124677] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:19:57.839 [DEBUG] [Thread-124677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:19:57.840 [DEBUG] [Thread-124677] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:19:57.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:19:57.841 [DEBUG] [Thread-124677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:19:57.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:19:57.899 [DEBUG] [Thread-124677] [transport.py] [_log()] userauth is OK
2025-12-03T22:19:57.899 [DEBUG] [Thread-124677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:19:57.899 [DEBUG] [Thread-124677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:19:57.899 [DEBUG] [Thread-124677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:19:57.899 [DEBUG] [Thread-124677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:19:57.918 [INFO] [Thread-124677] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:19:57.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:19:57.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:19:58.726 [DEBUG] [Thread-124677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:19:58.726 [DEBUG] [Thread-124677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:19:58.774 [DEBUG] [Thread-124677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:19:58.774 [DEBUG] [Thread-124677] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:19:58.783 [DEBUG] [Thread-124677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:19:58.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:19:58.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:19:58.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:19:58.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:19:58.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:19:58.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:19:58.819 [DEBUG] [Thread-124677] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:20:01.246 [DEBUG] [Thread-124679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:01.719 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:01.719 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:15.065 [DEBUG] [Thread-124680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:16.299 [DEBUG] [Thread-124681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:16.906 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:28.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:20:28.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:20:28.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:20:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 20, 8), 15.53, 34.87, 0.0, 23.33, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:20:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:20:08
2025-12-03T22:20:29.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:20:29.805 [DEBUG] [Thread-124682] [transport.py] [_log()] starting thread (client mode): 0xa2763a90
2025-12-03T22:20:29.805 [DEBUG] [Thread-124682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:20:29.825 [DEBUG] [Thread-124682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:20:29.825 [INFO] [Thread-124682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] client lang: <none>
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] server lang: <none>
2025-12-03T22:20:29.828 [DEBUG] [Thread-124682] [transport.py] [_log()] kex follows: False
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] Compression: none
2025-12-03T22:20:29.829 [DEBUG] [Thread-124682] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:20:29.845 [DEBUG] [Thread-124682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:20:29.846 [DEBUG] [Thread-124682] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:20:29.846 [DEBUG] [Thread-124682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:20:29.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:20:29.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:20:29.848 [DEBUG] [Thread-124682] [transport.py] [_log()] userauth is OK
2025-12-03T22:20:29.848 [DEBUG] [Thread-124682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:20:29.849 [DEBUG] [Thread-124682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:20:29.849 [DEBUG] [Thread-124682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:20:29.849 [DEBUG] [Thread-124682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:20:29.883 [INFO] [Thread-124682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:20:29.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:20:30.524 [DEBUG] [Thread-124682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:20:30.524 [DEBUG] [Thread-124682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:20:30.525 [DEBUG] [Thread-124682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:20:30.566 [DEBUG] [Thread-124682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:20:30.566 [DEBUG] [Thread-124682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:20:30.569 [DEBUG] [Thread-124682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:20:30.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:20:30.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:20:30.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:20:30.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:20:30.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:20:30.588 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:20:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.847272 -999.00  +16.00  18.79     39   +2.30 1 1 1 1 1     0    0 13.17 -27.17 ZNESW 18.8 18.8 137.4 23.9 16.2 -25.4 16.1 -24.8 15.9 -23.2 16.2 -23.8
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:20:30.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.847272
2025-12-03T22:20:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:20:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:20:30.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:20:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:20:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:20:30.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:20:08', tmtdew=15.53, humidity=34.87, cloud=0.0, wind=23.33, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:20:08', seeing=1.08, atlas_timestamp='2025-12-03T20:20:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.07974999999999888, -0.0017499999999994742, -0.026500000000000412, 0.06850000000000023, 0.005750000000002586, -0.05649999999999977, -0.11774999999999913, -0.05650000000000155, -0.0030000000000001137, 0.006249999999999645, -0.06700000000000017, 0.038000000000000256, 0.04224999999999923, -0.06900000000000084, -0.14800000000000146, 0.005250000000000199, 0.009500000000000952, 0.02099999999999902, -0.03325000000000067, 0.02499999999999858, 0.026749999999998053, -0.1587499999999995, -0.5382499999999997, -0.05550000000000033, -0.009499999999999176, 0.003750000000000142, 0.03550000000000075, 0.11500000000000021, 0.120000000000001, -0.17549999999999955, -0.3039999999999985, -0.05175000000000196], zp_timestamp='2025-12-03T20:16:00')
2025-12-03T22:20:30.591 [DEBUG] [Thread-124682] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:20:30.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:20:30.695 [DEBUG] [Thread-124685] [transport.py] [_log()] starting thread (client mode): 0xa2762290
2025-12-03T22:20:30.695 [DEBUG] [Thread-124685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:20:30.710 [DEBUG] [Thread-124685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:20:30.710 [INFO] [Thread-124685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:20:30.717 [DEBUG] [Thread-124685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:20:30.717 [DEBUG] [Thread-124685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] client lang: <none>
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] server lang: <none>
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] kex follows: False
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:20:30.718 [DEBUG] [Thread-124685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:20:30.719 [DEBUG] [Thread-124685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:20:30.719 [DEBUG] [Thread-124685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:20:30.719 [DEBUG] [Thread-124685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:20:30.719 [DEBUG] [Thread-124685] [transport.py] [_log()] Compression: none
2025-12-03T22:20:30.719 [DEBUG] [Thread-124685] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:20:30.781 [DEBUG] [Thread-124685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:20:30.781 [DEBUG] [Thread-124685] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:20:30.782 [DEBUG] [Thread-124685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:20:30.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:20:30.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:20:30.836 [DEBUG] [Thread-124685] [transport.py] [_log()] userauth is OK
2025-12-03T22:20:30.836 [DEBUG] [Thread-124685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:20:30.836 [DEBUG] [Thread-124685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:20:30.837 [DEBUG] [Thread-124685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:20:30.837 [DEBUG] [Thread-124685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:20:30.857 [INFO] [Thread-124685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:20:30.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:20:30.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:20:31.336 [DEBUG] [Thread-124687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:31.717 [DEBUG] [Thread-124685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:20:31.718 [DEBUG] [Thread-124685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:20:31.766 [DEBUG] [Thread-124685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:20:31.766 [DEBUG] [Thread-124685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:20:31.774 [DEBUG] [Thread-124685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:20:31.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:20:31.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:20:31.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:20:31.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:20:31.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:20:31.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:20:31.808 [DEBUG] [Thread-124685] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:20:37.386 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:46.389 [DEBUG] [Thread-124688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:20:57.874 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:01.424 [DEBUG] [Thread-124689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:01.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:21:01.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:21:01.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:21:01.960 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:01.961 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 20, 40), 15.55, 34.82, 0.0, 24.61, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:21:02.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:20:40
2025-12-03T22:21:02.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:21:02.785 [DEBUG] [Thread-124690] [transport.py] [_log()] starting thread (client mode): 0xa51d0490
2025-12-03T22:21:02.785 [DEBUG] [Thread-124690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:21:02.804 [DEBUG] [Thread-124690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:21:02.804 [INFO] [Thread-124690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:21:02.807 [DEBUG] [Thread-124690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:21:02.807 [DEBUG] [Thread-124690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:21:02.807 [DEBUG] [Thread-124690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:21:02.807 [DEBUG] [Thread-124690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:02.807 [DEBUG] [Thread-124690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] client lang: <none>
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] server lang: <none>
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] kex follows: False
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] Compression: none
2025-12-03T22:21:02.808 [DEBUG] [Thread-124690] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:21:02.825 [DEBUG] [Thread-124690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:21:02.826 [DEBUG] [Thread-124690] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:21:02.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:21:02.826 [DEBUG] [Thread-124690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:21:02.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:21:02.828 [DEBUG] [Thread-124690] [transport.py] [_log()] userauth is OK
2025-12-03T22:21:02.828 [DEBUG] [Thread-124690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:21:02.829 [DEBUG] [Thread-124690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:21:02.829 [DEBUG] [Thread-124690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:21:02.829 [DEBUG] [Thread-124690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:21:02.853 [INFO] [Thread-124690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:21:02.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:21:03.488 [DEBUG] [Thread-124690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:21:03.488 [DEBUG] [Thread-124690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:21:03.488 [DEBUG] [Thread-124690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:21:03.529 [DEBUG] [Thread-124690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:21:03.529 [DEBUG] [Thread-124690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:21:03.532 [DEBUG] [Thread-124690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:21:03.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:21:03.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:21:03.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:21:03.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:21:03.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:21:03.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:21:03.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:21:03.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.847619 -999.00  +16.00  14.78     39   +2.30 1 1 1 1 1     0    0 13.22 -28.31 ZNESW 14.8 14.8 141.8 20.5 16.2 -25.4 16.1 -24.9 15.9 -23.3 16.2 -24.0
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.847619
2025-12-03T22:21:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:21:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:21:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:21:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:21:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:21:03.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:20:40', tmtdew=15.55, humidity=34.82, cloud=0.0, wind=24.61, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:20:40', seeing=1.15, atlas_timestamp='2025-12-03T20:20:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:19:00')
2025-12-03T22:21:03.556 [DEBUG] [Thread-124690] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:21:03.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:21:03.660 [DEBUG] [Thread-124693] [transport.py] [_log()] starting thread (client mode): 0xa2760790
2025-12-03T22:21:03.660 [DEBUG] [Thread-124693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:21:03.676 [DEBUG] [Thread-124693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:21:03.676 [INFO] [Thread-124693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:21:03.683 [DEBUG] [Thread-124693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:21:03.683 [DEBUG] [Thread-124693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:21:03.683 [DEBUG] [Thread-124693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] client lang: <none>
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] server lang: <none>
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] kex follows: False
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] Compression: none
2025-12-03T22:21:03.684 [DEBUG] [Thread-124693] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:21:03.740 [DEBUG] [Thread-124693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:21:03.741 [DEBUG] [Thread-124693] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:21:03.741 [DEBUG] [Thread-124693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:21:03.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:21:03.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:21:03.802 [DEBUG] [Thread-124693] [transport.py] [_log()] userauth is OK
2025-12-03T22:21:03.802 [DEBUG] [Thread-124693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:21:03.802 [DEBUG] [Thread-124693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:21:03.802 [DEBUG] [Thread-124693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:21:03.802 [DEBUG] [Thread-124693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:21:03.821 [INFO] [Thread-124693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:21:03.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:21:03.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:21:04.647 [DEBUG] [Thread-124693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:21:04.647 [DEBUG] [Thread-124693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:21:04.696 [DEBUG] [Thread-124693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:21:04.696 [DEBUG] [Thread-124693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:21:04.705 [DEBUG] [Thread-124693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:21:04.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:21:04.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:21:04.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:21:04.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:21:04.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:21:04.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:21:04.742 [DEBUG] [Thread-124693] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:21:15.134 [DEBUG] [Thread-124695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:16.462 [DEBUG] [Thread-124696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:18.350 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:31.527 [DEBUG] [Thread-124697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:21:34.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:21:34.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:21:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 21, 12), 15.59, 34.72, 0.0, 26.17, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:21:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:21:12
2025-12-03T22:21:35.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:21:35.715 [DEBUG] [Thread-124698] [transport.py] [_log()] starting thread (client mode): 0xa272afe0
2025-12-03T22:21:35.715 [DEBUG] [Thread-124698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:21:35.734 [DEBUG] [Thread-124698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:21:35.734 [INFO] [Thread-124698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] client lang: <none>
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] server lang: <none>
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] kex follows: False
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:21:35.737 [DEBUG] [Thread-124698] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:21:35.738 [DEBUG] [Thread-124698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:21:35.738 [DEBUG] [Thread-124698] [transport.py] [_log()] Compression: none
2025-12-03T22:21:35.738 [DEBUG] [Thread-124698] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:21:35.753 [DEBUG] [Thread-124698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:21:35.753 [DEBUG] [Thread-124698] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:21:35.753 [DEBUG] [Thread-124698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:21:35.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:21:35.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:21:35.754 [DEBUG] [Thread-124698] [transport.py] [_log()] userauth is OK
2025-12-03T22:21:35.754 [DEBUG] [Thread-124698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:21:35.755 [DEBUG] [Thread-124698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:21:35.755 [DEBUG] [Thread-124698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:21:35.755 [DEBUG] [Thread-124698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:21:35.764 [INFO] [Thread-124698] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:21:35.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:21:36.393 [DEBUG] [Thread-124698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:21:36.394 [DEBUG] [Thread-124698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:21:36.394 [DEBUG] [Thread-124698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:21:36.435 [DEBUG] [Thread-124698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:21:36.435 [DEBUG] [Thread-124698] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:21:36.438 [DEBUG] [Thread-124698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:21:36.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:21:36.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:21:36.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:21:36.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:21:36.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:21:36.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:21:36.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:21:36.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.847966 -999.00  +15.90  18.14     39   +2.30 1 1 1 1 1     0    0 12.90 -25.85 ZNESW 18.1 18.1 146.8 23.8 16.2 -25.4 16.1 -24.9 15.9 -23.2 16.2 -24.3
2025-12-03T22:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:21:36.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.847966
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:21:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:21:12', tmtdew=15.59, humidity=34.72, cloud=0.0, wind=26.17, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:21:12', seeing=1.15, atlas_timestamp='2025-12-03T20:21:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:19:00')
2025-12-03T22:21:36.464 [DEBUG] [Thread-124698] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:21:36.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:21:36.567 [DEBUG] [Thread-124701] [transport.py] [_log()] starting thread (client mode): 0xa514e1a0
2025-12-03T22:21:36.567 [DEBUG] [Thread-124701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:21:36.582 [DEBUG] [Thread-124701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:21:36.582 [INFO] [Thread-124701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:36.590 [DEBUG] [Thread-124701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] client lang: <none>
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] server lang: <none>
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] kex follows: False
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] Compression: none
2025-12-03T22:21:36.591 [DEBUG] [Thread-124701] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:21:36.645 [DEBUG] [Thread-124701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:21:36.646 [DEBUG] [Thread-124701] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:21:36.646 [DEBUG] [Thread-124701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:21:36.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:21:36.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:21:36.702 [DEBUG] [Thread-124701] [transport.py] [_log()] userauth is OK
2025-12-03T22:21:36.702 [DEBUG] [Thread-124701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:21:36.702 [DEBUG] [Thread-124701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:21:36.703 [DEBUG] [Thread-124701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:21:36.703 [DEBUG] [Thread-124701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:21:36.723 [INFO] [Thread-124701] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:21:36.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:21:36.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:21:37.567 [DEBUG] [Thread-124701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:21:37.567 [DEBUG] [Thread-124701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:21:37.615 [DEBUG] [Thread-124701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:21:37.615 [DEBUG] [Thread-124701] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:21:37.624 [DEBUG] [Thread-124701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:21:37.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:21:37.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:21:37.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:21:37.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:21:37.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:21:37.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:21:37.659 [DEBUG] [Thread-124701] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:21:38.747 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:46.557 [DEBUG] [Thread-124703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:21:59.180 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:01.604 [DEBUG] [Thread-124704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:02.180 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:02.182 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:07.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:22:07.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:22:07.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:22:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 21, 44), 15.56, 34.69, 0.0, 24.3, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:22:08.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:21:44
2025-12-03T22:22:08.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:22:08.657 [DEBUG] [Thread-124705] [transport.py] [_log()] starting thread (client mode): 0xa5195ff0
2025-12-03T22:22:08.657 [DEBUG] [Thread-124705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:22:08.670 [DEBUG] [Thread-124705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:22:08.670 [INFO] [Thread-124705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:22:08.672 [DEBUG] [Thread-124705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:22:08.672 [DEBUG] [Thread-124705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] client lang: <none>
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] server lang: <none>
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] kex follows: False
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] Compression: none
2025-12-03T22:22:08.673 [DEBUG] [Thread-124705] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:22:08.688 [DEBUG] [Thread-124705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:22:08.689 [DEBUG] [Thread-124705] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:22:08.689 [DEBUG] [Thread-124705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:22:08.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:22:08.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:22:08.691 [DEBUG] [Thread-124705] [transport.py] [_log()] userauth is OK
2025-12-03T22:22:08.691 [DEBUG] [Thread-124705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:22:08.691 [DEBUG] [Thread-124705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:22:08.691 [DEBUG] [Thread-124705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:22:08.691 [DEBUG] [Thread-124705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:22:08.712 [INFO] [Thread-124705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:22:08.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:22:09.280 [DEBUG] [Thread-124705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:22:09.280 [DEBUG] [Thread-124705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:22:09.280 [DEBUG] [Thread-124705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:22:09.320 [DEBUG] [Thread-124705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:22:09.320 [DEBUG] [Thread-124705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:22:09.323 [DEBUG] [Thread-124705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:22:09.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:22:09.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:22:09.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:22:09.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:22:09.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:22:09.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:22:09.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.848314 -999.00  +15.80  15.04     40   +2.30 1 1 1 1 1     0    0 13.01 -25.08 ZNESW 15.0 15.0 142.5 20.4 16.2 -25.5 16.1 -24.8 15.9 -23.3 16.2 -24.1
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.848314
2025-12-03T22:22:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:22:09.333 [DEBUG] [Thread-124705] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:22:09.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:21:44', tmtdew=15.56, humidity=34.69, cloud=0.0, wind=24.3, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:21:44', seeing=1.21, atlas_timestamp='2025-12-03T20:21:34.330', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:19:00')
2025-12-03T22:22:09.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:22:09.429 [DEBUG] [Thread-124708] [transport.py] [_log()] starting thread (client mode): 0xa514cd30
2025-12-03T22:22:09.429 [DEBUG] [Thread-124708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:22:09.444 [DEBUG] [Thread-124708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:22:09.444 [INFO] [Thread-124708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] client lang: <none>
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] server lang: <none>
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] kex follows: False
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] Compression: none
2025-12-03T22:22:09.452 [DEBUG] [Thread-124708] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:22:09.511 [DEBUG] [Thread-124708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:22:09.511 [DEBUG] [Thread-124708] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:22:09.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:22:09.511 [DEBUG] [Thread-124708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:22:09.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:22:09.576 [DEBUG] [Thread-124708] [transport.py] [_log()] userauth is OK
2025-12-03T22:22:09.576 [DEBUG] [Thread-124708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:22:09.576 [DEBUG] [Thread-124708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:22:09.576 [DEBUG] [Thread-124708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:22:09.576 [DEBUG] [Thread-124708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:22:09.591 [INFO] [Thread-124708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:22:09.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:22:09.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:22:10.421 [DEBUG] [Thread-124708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:22:10.421 [DEBUG] [Thread-124708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:22:10.468 [DEBUG] [Thread-124708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:22:10.468 [DEBUG] [Thread-124708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:22:10.477 [DEBUG] [Thread-124708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:22:10.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:22:10.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:22:10.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:22:10.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:22:10.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:22:10.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:22:10.509 [DEBUG] [Thread-124708] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:22:15.206 [DEBUG] [Thread-124710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:16.638 [DEBUG] [Thread-124711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:19.624 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:31.698 [DEBUG] [Thread-124712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:40.040 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:22:40.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:22:40.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:22:40.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:22:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 22, 16), 15.59, 34.62, 0.0, 22.87, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:22:41.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:22:16
2025-12-03T22:22:41.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:22:41.492 [DEBUG] [Thread-124713] [transport.py] [_log()] starting thread (client mode): 0xa51e7940
2025-12-03T22:22:41.492 [DEBUG] [Thread-124713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:22:41.509 [DEBUG] [Thread-124713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:22:41.510 [INFO] [Thread-124713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:22:41.512 [DEBUG] [Thread-124713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:22:41.513 [DEBUG] [Thread-124713] [transport.py] [_log()] client lang: <none>
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] server lang: <none>
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] kex follows: False
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] Compression: none
2025-12-03T22:22:41.514 [DEBUG] [Thread-124713] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:22:41.534 [DEBUG] [Thread-124713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:22:41.534 [DEBUG] [Thread-124713] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:22:41.535 [DEBUG] [Thread-124713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:22:41.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:22:41.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:22:41.536 [DEBUG] [Thread-124713] [transport.py] [_log()] userauth is OK
2025-12-03T22:22:41.537 [DEBUG] [Thread-124713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:22:41.537 [DEBUG] [Thread-124713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:22:41.537 [DEBUG] [Thread-124713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:22:41.537 [DEBUG] [Thread-124713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:22:41.553 [INFO] [Thread-124713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:22:41.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:22:42.162 [DEBUG] [Thread-124713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:22:42.162 [DEBUG] [Thread-124713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:22:42.163 [DEBUG] [Thread-124713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:22:42.203 [DEBUG] [Thread-124713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:22:42.203 [DEBUG] [Thread-124713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:22:42.204 [DEBUG] [Thread-124713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:22:42.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:22:42.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:22:42.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:22:42.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:22:42.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:22:42.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:22:42.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:22:42.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.849008 -999.00  +15.90  19.91     40   +2.30 1 1 1 1 1     0    0 12.85 -23.15 ZNESW 19.9 19.9 146.8 27.4 16.2 -25.3 16.1 -24.8 15.8 -23.1 16.2 -23.8
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.849008
2025-12-03T22:22:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:22:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:22:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:22:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:22:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:22:42.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:22:16', tmtdew=15.59, humidity=34.62, cloud=0.0, wind=22.87, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:22:16', seeing=1.27, atlas_timestamp='2025-12-03T20:22:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:19:00')
2025-12-03T22:22:42.225 [DEBUG] [Thread-124713] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:22:42.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:22:42.340 [DEBUG] [Thread-124716] [transport.py] [_log()] starting thread (client mode): 0xa2751990
2025-12-03T22:22:42.340 [DEBUG] [Thread-124716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:22:42.355 [DEBUG] [Thread-124716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:22:42.355 [INFO] [Thread-124716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] client lang: <none>
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] server lang: <none>
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] kex follows: False
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:22:42.363 [DEBUG] [Thread-124716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:22:42.364 [DEBUG] [Thread-124716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:22:42.364 [DEBUG] [Thread-124716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:22:42.364 [DEBUG] [Thread-124716] [transport.py] [_log()] Compression: none
2025-12-03T22:22:42.364 [DEBUG] [Thread-124716] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:22:42.419 [DEBUG] [Thread-124716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:22:42.420 [DEBUG] [Thread-124716] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:22:42.420 [DEBUG] [Thread-124716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:22:42.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:22:42.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:22:42.476 [DEBUG] [Thread-124716] [transport.py] [_log()] userauth is OK
2025-12-03T22:22:42.476 [DEBUG] [Thread-124716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:22:42.476 [DEBUG] [Thread-124716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:22:42.476 [DEBUG] [Thread-124716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:22:42.476 [DEBUG] [Thread-124716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:22:42.499 [INFO] [Thread-124716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:22:42.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:22:42.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:22:43.364 [DEBUG] [Thread-124716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:22:43.365 [DEBUG] [Thread-124716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:22:43.413 [DEBUG] [Thread-124716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:22:43.413 [DEBUG] [Thread-124716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:22:43.422 [DEBUG] [Thread-124716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:22:43.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:22:43.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:22:43.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:22:43.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:22:43.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:22:43.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:22:43.456 [DEBUG] [Thread-124716] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:22:46.735 [DEBUG] [Thread-124718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:00.427 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:01.789 [DEBUG] [Thread-124719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:02.380 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:02.381 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:13.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:23:13.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:23:13.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:23:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 22, 48), 15.64, 34.65, 0.0, 25.92, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:23:14.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:22:48
2025-12-03T22:23:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:23:14.410 [DEBUG] [Thread-124720] [transport.py] [_log()] starting thread (client mode): 0xa271e4d0
2025-12-03T22:23:14.410 [DEBUG] [Thread-124720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:23:14.430 [DEBUG] [Thread-124720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:23:14.430 [INFO] [Thread-124720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:23:14.433 [DEBUG] [Thread-124720] [transport.py] [_log()] client lang: <none>
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] server lang: <none>
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] kex follows: False
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] Compression: none
2025-12-03T22:23:14.434 [DEBUG] [Thread-124720] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:23:14.444 [DEBUG] [Thread-124720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:23:14.445 [DEBUG] [Thread-124720] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:23:14.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:23:14.446 [DEBUG] [Thread-124720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:23:14.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:23:14.447 [DEBUG] [Thread-124720] [transport.py] [_log()] userauth is OK
2025-12-03T22:23:14.447 [DEBUG] [Thread-124720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:23:14.447 [DEBUG] [Thread-124720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:23:14.447 [DEBUG] [Thread-124720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:23:14.447 [DEBUG] [Thread-124720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:23:14.471 [INFO] [Thread-124720] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:23:14.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:23:15.073 [DEBUG] [Thread-124720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:23:15.073 [DEBUG] [Thread-124720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:23:15.073 [DEBUG] [Thread-124720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:23:15.114 [DEBUG] [Thread-124720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:23:15.114 [DEBUG] [Thread-124720] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:23:15.125 [DEBUG] [Thread-124720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:23:15.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:23:15.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:23:15.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:23:15.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:23:15.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:23:15.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:23:15.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:23:15.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.849355 -999.00  +15.90  16.96     40   +2.30 1 1 1 1 1     0    0 13.03 -22.85 ZNESW 17.0 17.0 146.4 25.0 16.1 -25.3 16.1 -24.8 15.9 -23.2 16.2 -23.8
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.849355
2025-12-03T22:23:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:23:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:23:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:23:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:23:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:23:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:22:48', tmtdew=15.64, humidity=34.65, cloud=0.0, wind=25.92, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:22:48', seeing=1.07, atlas_timestamp='2025-12-03T20:23:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:19:00')
2025-12-03T22:23:15.143 [DEBUG] [Thread-124720] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:23:15.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:23:15.247 [DEBUG] [Thread-124723] [transport.py] [_log()] starting thread (client mode): 0xa514bdc0
2025-12-03T22:23:15.247 [DEBUG] [Thread-124723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:23:15.259 [DEBUG] [Thread-124724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:15.264 [DEBUG] [Thread-124723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:23:15.264 [INFO] [Thread-124723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] client lang: <none>
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] server lang: <none>
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] kex follows: False
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:23:15.275 [DEBUG] [Thread-124723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:23:15.276 [DEBUG] [Thread-124723] [transport.py] [_log()] Compression: none
2025-12-03T22:23:15.276 [DEBUG] [Thread-124723] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:23:15.335 [DEBUG] [Thread-124723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:23:15.335 [DEBUG] [Thread-124723] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:23:15.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:23:15.337 [DEBUG] [Thread-124723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:23:15.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:23:15.400 [DEBUG] [Thread-124723] [transport.py] [_log()] userauth is OK
2025-12-03T22:23:15.401 [DEBUG] [Thread-124723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:23:15.401 [DEBUG] [Thread-124723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:23:15.401 [DEBUG] [Thread-124723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:23:15.401 [DEBUG] [Thread-124723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:23:15.432 [INFO] [Thread-124723] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:23:15.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:23:15.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:23:16.260 [DEBUG] [Thread-124723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:23:16.260 [DEBUG] [Thread-124723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:23:16.308 [DEBUG] [Thread-124723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:23:16.308 [DEBUG] [Thread-124723] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:23:16.317 [DEBUG] [Thread-124723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:23:16.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:23:16.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:23:16.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:23:16.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:23:16.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:23:16.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:23:16.351 [DEBUG] [Thread-124723] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:23:16.827 [DEBUG] [Thread-124726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:20.853 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:31.882 [DEBUG] [Thread-124727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:41.299 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:46.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:23:46.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:23:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:23:46.916 [DEBUG] [Thread-124728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:23:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 23, 20), 15.66, 34.59, 0.0, 24.03, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:23:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:23:20
2025-12-03T22:23:47.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:23:47.331 [DEBUG] [Thread-124729] [transport.py] [_log()] starting thread (client mode): 0xa517eec0
2025-12-03T22:23:47.331 [DEBUG] [Thread-124729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:23:47.353 [DEBUG] [Thread-124729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:23:47.353 [INFO] [Thread-124729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:23:47.356 [DEBUG] [Thread-124729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:23:47.356 [DEBUG] [Thread-124729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:23:47.356 [DEBUG] [Thread-124729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:23:47.356 [DEBUG] [Thread-124729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] client lang: <none>
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] server lang: <none>
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] kex follows: False
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:23:47.357 [DEBUG] [Thread-124729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:23:47.358 [DEBUG] [Thread-124729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:23:47.358 [DEBUG] [Thread-124729] [transport.py] [_log()] Compression: none
2025-12-03T22:23:47.358 [DEBUG] [Thread-124729] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:23:47.377 [DEBUG] [Thread-124729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:23:47.377 [DEBUG] [Thread-124729] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:23:47.377 [DEBUG] [Thread-124729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:23:47.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:23:47.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:23:47.379 [DEBUG] [Thread-124729] [transport.py] [_log()] userauth is OK
2025-12-03T22:23:47.379 [DEBUG] [Thread-124729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:23:47.379 [DEBUG] [Thread-124729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:23:47.380 [DEBUG] [Thread-124729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:23:47.380 [DEBUG] [Thread-124729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:23:47.403 [INFO] [Thread-124729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:23:47.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:23:48.050 [DEBUG] [Thread-124729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:23:48.050 [DEBUG] [Thread-124729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:23:48.051 [DEBUG] [Thread-124729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:23:48.092 [DEBUG] [Thread-124729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:23:48.092 [DEBUG] [Thread-124729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:23:48.095 [DEBUG] [Thread-124729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:23:48.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:23:48.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:23:48.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:23:48.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:23:48.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:23:48.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:23:48.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:23:48.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:23:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:23:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.849355 -999.00  +15.90  16.96     40   +2.30 1 1 1 1 1     0    0 13.03 -22.85 ZNESW 17.0 17.0 146.4 25.0 16.1 -25.3 16.1 -24.8 15.9 -23.2 16.2 -23.8
2025-12-03T22:23:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:23:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:23:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.849355
2025-12-03T22:23:48.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:23:48.127 [DEBUG] [Thread-124729] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:23:48.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:23:48.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:23:48.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:23:48.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:23:48.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:23:20', tmtdew=15.66, humidity=34.59, cloud=0.0, wind=24.03, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:23:20', seeing=1.07, atlas_timestamp='2025-12-03T20:23:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:23:48.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:23:48.232 [DEBUG] [Thread-124732] [transport.py] [_log()] starting thread (client mode): 0xa2751660
2025-12-03T22:23:48.232 [DEBUG] [Thread-124732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:23:48.249 [DEBUG] [Thread-124732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:23:48.249 [INFO] [Thread-124732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:23:48.256 [DEBUG] [Thread-124732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] client lang: <none>
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] server lang: <none>
2025-12-03T22:23:48.257 [DEBUG] [Thread-124732] [transport.py] [_log()] kex follows: False
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] Compression: none
2025-12-03T22:23:48.258 [DEBUG] [Thread-124732] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:23:48.317 [DEBUG] [Thread-124732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:23:48.318 [DEBUG] [Thread-124732] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:23:48.318 [DEBUG] [Thread-124732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:23:48.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:23:48.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:23:48.374 [DEBUG] [Thread-124732] [transport.py] [_log()] userauth is OK
2025-12-03T22:23:48.374 [DEBUG] [Thread-124732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:23:48.374 [DEBUG] [Thread-124732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:23:48.374 [DEBUG] [Thread-124732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:23:48.374 [DEBUG] [Thread-124732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:23:48.393 [INFO] [Thread-124732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:23:48.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:23:48.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:23:49.263 [DEBUG] [Thread-124732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:23:49.263 [DEBUG] [Thread-124732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:23:49.311 [DEBUG] [Thread-124732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:23:49.311 [DEBUG] [Thread-124732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:23:49.320 [DEBUG] [Thread-124732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:23:49.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:23:49.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:23:49.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:23:49.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:23:49.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:23:49.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:23:49.355 [DEBUG] [Thread-124732] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:24:01.702 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:01.948 [DEBUG] [Thread-124734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:02.584 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:02.585 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:15.324 [DEBUG] [Thread-124735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:17.005 [DEBUG] [Thread-124736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:24:19.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:24:19.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:24:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 23, 52), 15.66, 34.57, 0.0, 23.82, 16.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:24:20.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:23:52
2025-12-03T22:24:20.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:24:20.336 [DEBUG] [Thread-124737] [transport.py] [_log()] starting thread (client mode): 0xa51e7640
2025-12-03T22:24:20.336 [DEBUG] [Thread-124737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:24:20.349 [DEBUG] [Thread-124737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:24:20.349 [INFO] [Thread-124737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] client lang: <none>
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] server lang: <none>
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] kex follows: False
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:24:20.351 [DEBUG] [Thread-124737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:24:20.352 [DEBUG] [Thread-124737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:24:20.352 [DEBUG] [Thread-124737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:24:20.352 [DEBUG] [Thread-124737] [transport.py] [_log()] Compression: none
2025-12-03T22:24:20.352 [DEBUG] [Thread-124737] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:24:20.360 [DEBUG] [Thread-124737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:24:20.360 [DEBUG] [Thread-124737] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:24:20.361 [DEBUG] [Thread-124737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:24:20.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:24:20.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:24:20.363 [DEBUG] [Thread-124737] [transport.py] [_log()] userauth is OK
2025-12-03T22:24:20.363 [DEBUG] [Thread-124737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:24:20.363 [DEBUG] [Thread-124737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:24:20.363 [DEBUG] [Thread-124737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:24:20.363 [DEBUG] [Thread-124737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:24:20.382 [INFO] [Thread-124737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:24:20.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:24:21.035 [DEBUG] [Thread-124737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:24:21.035 [DEBUG] [Thread-124737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:24:21.035 [DEBUG] [Thread-124737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:24:21.076 [DEBUG] [Thread-124737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:24:21.076 [DEBUG] [Thread-124737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:24:21.079 [DEBUG] [Thread-124737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:24:21.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:24:21.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:24:21.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:24:21.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:24:21.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:24:21.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:24:21.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:24:21.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:24:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:24:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.849702 -999.00  +15.90  18.61     40   +2.30 1 1 1 1 1     0    0 13.01 -23.20 ZNESW 18.6 18.6 142.8 26.0 16.2 -25.3 16.1 -24.8 15.9 -23.1 16.1 -24.1
2025-12-03T22:24:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:24:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:24:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.849702
2025-12-03T22:24:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:24:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:24:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:24:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:24:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:24:21.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:23:52', tmtdew=15.66, humidity=34.57, cloud=0.0, wind=23.82, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:23:53', seeing=1.07, atlas_timestamp='2025-12-03T20:23:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:24:21.105 [DEBUG] [Thread-124737] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:24:21.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:24:21.207 [DEBUG] [Thread-124740] [transport.py] [_log()] starting thread (client mode): 0xa51d2ef0
2025-12-03T22:24:21.207 [DEBUG] [Thread-124740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:24:21.222 [DEBUG] [Thread-124740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:24:21.222 [INFO] [Thread-124740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:21.229 [DEBUG] [Thread-124740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] client lang: <none>
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] server lang: <none>
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] kex follows: False
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] Compression: none
2025-12-03T22:24:21.230 [DEBUG] [Thread-124740] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:24:21.286 [DEBUG] [Thread-124740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:24:21.286 [DEBUG] [Thread-124740] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:24:21.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:24:21.287 [DEBUG] [Thread-124740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:24:21.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:24:21.345 [DEBUG] [Thread-124740] [transport.py] [_log()] userauth is OK
2025-12-03T22:24:21.345 [DEBUG] [Thread-124740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:24:21.345 [DEBUG] [Thread-124740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:24:21.345 [DEBUG] [Thread-124740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:24:21.345 [DEBUG] [Thread-124740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:24:21.358 [INFO] [Thread-124740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:24:21.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:24:21.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:24:22.100 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:22.166 [DEBUG] [Thread-124740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:24:22.167 [DEBUG] [Thread-124740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:24:22.214 [DEBUG] [Thread-124740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:24:22.215 [DEBUG] [Thread-124740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:24:22.223 [DEBUG] [Thread-124740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:24:22.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:24:22.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:24:22.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:24:22.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:24:22.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:24:22.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:24:22.257 [DEBUG] [Thread-124740] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:24:32.039 [DEBUG] [Thread-124742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:42.521 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:47.097 [DEBUG] [Thread-124743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:24:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:24:52.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:24:52.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:24:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 24, 25), 15.65, 34.6, 0.0, 23.24, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:24:52.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:24:25
2025-12-03T22:24:53.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:24:53.239 [DEBUG] [Thread-124744] [transport.py] [_log()] starting thread (client mode): 0xa271d900
2025-12-03T22:24:53.239 [DEBUG] [Thread-124744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:24:53.261 [DEBUG] [Thread-124744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:24:53.261 [INFO] [Thread-124744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:53.264 [DEBUG] [Thread-124744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] client lang: <none>
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] server lang: <none>
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] kex follows: False
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] Compression: none
2025-12-03T22:24:53.265 [DEBUG] [Thread-124744] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:24:53.283 [DEBUG] [Thread-124744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:24:53.284 [DEBUG] [Thread-124744] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:24:53.284 [DEBUG] [Thread-124744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:24:53.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:24:53.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:24:53.286 [DEBUG] [Thread-124744] [transport.py] [_log()] userauth is OK
2025-12-03T22:24:53.287 [DEBUG] [Thread-124744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:24:53.287 [DEBUG] [Thread-124744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:24:53.287 [DEBUG] [Thread-124744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:24:53.287 [DEBUG] [Thread-124744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:24:53.310 [INFO] [Thread-124744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:24:53.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:24:53.989 [DEBUG] [Thread-124744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:24:53.989 [DEBUG] [Thread-124744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:24:53.990 [DEBUG] [Thread-124744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:24:54.030 [DEBUG] [Thread-124744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:24:54.030 [DEBUG] [Thread-124744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:24:54.033 [DEBUG] [Thread-124744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:24:54.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:24:54.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:24:54.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:24:54.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:24:54.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:24:54.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:24:54.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:24:54.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:24:54.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:24:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.850050 -999.00  +15.90  24.52     39   +2.30 1 1 1 1 1     0    0 12.91 -22.67 ZNESW 24.5 24.5 140.6 28.6 16.2 -25.3 16.1 -24.6 15.9 -23.0 16.1 -24.1
2025-12-03T22:24:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:24:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:24:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.850050
2025-12-03T22:24:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:24:54.057 [DEBUG] [Thread-124744] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:24:54.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:24:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:24:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:24:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:24:54.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:24:25', tmtdew=15.65, humidity=34.6, cloud=0.0, wind=23.24, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:24:25', seeing=0.92, atlas_timestamp='2025-12-03T20:24:04.320', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:24:54.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:24:54.163 [DEBUG] [Thread-124747] [transport.py] [_log()] starting thread (client mode): 0xa514b850
2025-12-03T22:24:54.163 [DEBUG] [Thread-124747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:24:54.181 [DEBUG] [Thread-124747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:24:54.181 [INFO] [Thread-124747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:24:54.189 [DEBUG] [Thread-124747] [transport.py] [_log()] client lang: <none>
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] server lang: <none>
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] kex follows: False
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] Compression: none
2025-12-03T22:24:54.190 [DEBUG] [Thread-124747] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:24:54.247 [DEBUG] [Thread-124747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:24:54.247 [DEBUG] [Thread-124747] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:24:54.248 [DEBUG] [Thread-124747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:24:54.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:24:54.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:24:54.303 [DEBUG] [Thread-124747] [transport.py] [_log()] userauth is OK
2025-12-03T22:24:54.304 [DEBUG] [Thread-124747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:24:54.304 [DEBUG] [Thread-124747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:24:54.304 [DEBUG] [Thread-124747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:24:54.304 [DEBUG] [Thread-124747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:24:54.322 [INFO] [Thread-124747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:24:54.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:24:54.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:24:55.148 [DEBUG] [Thread-124747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:24:55.149 [DEBUG] [Thread-124747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:24:55.197 [DEBUG] [Thread-124747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:24:55.197 [DEBUG] [Thread-124747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:24:55.205 [DEBUG] [Thread-124747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:24:55.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:24:55.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:24:55.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:24:55.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:24:55.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:24:55.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:24:55.240 [DEBUG] [Thread-124747] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:25:02.127 [DEBUG] [Thread-124749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:02.782 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:02.783 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:02.939 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:15.394 [DEBUG] [Thread-124750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:17.189 [DEBUG] [Thread-124751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:23.325 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:25.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:25:25.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:25:25.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:25:25.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 24, 56), 15.71, 34.57, 0.0, 22.36, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:25:25.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:24:56
2025-12-03T22:25:26.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:25:26.254 [DEBUG] [Thread-124752] [transport.py] [_log()] starting thread (client mode): 0xa2752a40
2025-12-03T22:25:26.254 [DEBUG] [Thread-124752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:25:26.273 [DEBUG] [Thread-124752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:25:26.274 [INFO] [Thread-124752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] client lang: <none>
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] server lang: <none>
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] kex follows: False
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] Compression: none
2025-12-03T22:25:26.277 [DEBUG] [Thread-124752] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:25:26.291 [DEBUG] [Thread-124752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:25:26.292 [DEBUG] [Thread-124752] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:25:26.292 [DEBUG] [Thread-124752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:25:26.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:25:26.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:25:26.293 [DEBUG] [Thread-124752] [transport.py] [_log()] userauth is OK
2025-12-03T22:25:26.293 [DEBUG] [Thread-124752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:25:26.293 [DEBUG] [Thread-124752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:25:26.293 [DEBUG] [Thread-124752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:25:26.293 [DEBUG] [Thread-124752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:25:26.308 [INFO] [Thread-124752] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:25:26.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:25:27.059 [DEBUG] [Thread-124752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:25:27.060 [DEBUG] [Thread-124752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:25:27.060 [DEBUG] [Thread-124752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:25:27.101 [DEBUG] [Thread-124752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:25:27.101 [DEBUG] [Thread-124752] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:25:27.103 [DEBUG] [Thread-124752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:25:27.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:25:27.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:25:27.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:25:27.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:25:27.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:25:27.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:25:27.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.850397 -999.00  +16.00  18.64     39   +2.30 1 1 1 1 1     0    0 13.46 -21.42 ZNESW 18.6 18.6 143.8 25.4 16.2 -25.3 16.1 -24.7 15.9 -23.2 16.2 -23.8
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.850397
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:25:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:24:56', tmtdew=15.71, humidity=34.57, cloud=0.0, wind=22.36, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:24:57', seeing=0.92, atlas_timestamp='2025-12-03T20:24:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:25:27.122 [DEBUG] [Thread-124752] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:25:27.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:25:27.214 [DEBUG] [Thread-124755] [transport.py] [_log()] starting thread (client mode): 0xa517ea10
2025-12-03T22:25:27.214 [DEBUG] [Thread-124755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:25:27.227 [DEBUG] [Thread-124755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:25:27.227 [INFO] [Thread-124755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] client lang: <none>
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] server lang: <none>
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] kex follows: False
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] Compression: none
2025-12-03T22:25:27.235 [DEBUG] [Thread-124755] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:25:27.291 [DEBUG] [Thread-124755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:25:27.291 [DEBUG] [Thread-124755] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:25:27.291 [DEBUG] [Thread-124755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:25:27.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:25:27.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:25:27.355 [DEBUG] [Thread-124755] [transport.py] [_log()] userauth is OK
2025-12-03T22:25:27.355 [DEBUG] [Thread-124755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:25:27.355 [DEBUG] [Thread-124755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:25:27.355 [DEBUG] [Thread-124755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:25:27.355 [DEBUG] [Thread-124755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:25:27.369 [INFO] [Thread-124755] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:25:27.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:25:27.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:25:28.237 [DEBUG] [Thread-124755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:25:28.238 [DEBUG] [Thread-124755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:25:28.286 [DEBUG] [Thread-124755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:25:28.286 [DEBUG] [Thread-124755] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:25:28.294 [DEBUG] [Thread-124755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:25:28.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:25:28.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:25:28.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:25:28.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:25:28.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:25:28.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:25:28.327 [DEBUG] [Thread-124755] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:25:32.228 [DEBUG] [Thread-124757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:43.743 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:47.285 [DEBUG] [Thread-124758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:25:58.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:25:58.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:25:58.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:25:59.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 25, 29), 15.68, 34.65, 0.0, 21.69, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:25:59.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:25:29
2025-12-03T22:25:59.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:25:59.318 [DEBUG] [Thread-124759] [transport.py] [_log()] starting thread (client mode): 0xa517fa00
2025-12-03T22:25:59.318 [DEBUG] [Thread-124759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:25:59.339 [DEBUG] [Thread-124759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:25:59.339 [INFO] [Thread-124759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] client lang: <none>
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] server lang: <none>
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] kex follows: False
2025-12-03T22:25:59.342 [DEBUG] [Thread-124759] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] Compression: none
2025-12-03T22:25:59.343 [DEBUG] [Thread-124759] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:25:59.363 [DEBUG] [Thread-124759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:25:59.363 [DEBUG] [Thread-124759] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:25:59.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:25:59.364 [DEBUG] [Thread-124759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:25:59.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:25:59.366 [DEBUG] [Thread-124759] [transport.py] [_log()] userauth is OK
2025-12-03T22:25:59.366 [DEBUG] [Thread-124759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:25:59.366 [DEBUG] [Thread-124759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:25:59.366 [DEBUG] [Thread-124759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:25:59.367 [DEBUG] [Thread-124759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:25:59.389 [INFO] [Thread-124759] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:25:59.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:26:00.030 [DEBUG] [Thread-124759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:26:00.031 [DEBUG] [Thread-124759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:26:00.031 [DEBUG] [Thread-124759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:26:00.072 [DEBUG] [Thread-124759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:26:00.072 [DEBUG] [Thread-124759] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:26:00.075 [DEBUG] [Thread-124759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:26:00.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:26:00.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:26:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:26:00.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:26:00.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:26:00.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:26:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.850744 -999.00  +16.00  17.79     39   +2.30 1 1 1 1 1     0    0 13.39 -18.93 ZNESW 17.8 17.8 140.8 21.6 16.2 -25.3 16.1 -24.7 15.8 -23.1 16.2 -23.9
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:26:00.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.850744
2025-12-03T22:26:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:26:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:26:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:26:00.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:26:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:26:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:25:29', tmtdew=15.68, humidity=34.65, cloud=0.0, wind=21.69, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:25:29', seeing=0.91, atlas_timestamp='2025-12-03T20:25:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:26:00.098 [DEBUG] [Thread-124759] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:26:00.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:26:00.198 [DEBUG] [Thread-124762] [transport.py] [_log()] starting thread (client mode): 0xa2762110
2025-12-03T22:26:00.198 [DEBUG] [Thread-124762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:26:00.213 [DEBUG] [Thread-124762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:26:00.213 [INFO] [Thread-124762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:26:00.220 [DEBUG] [Thread-124762] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:26:00.220 [DEBUG] [Thread-124762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:26:00.221 [DEBUG] [Thread-124762] [transport.py] [_log()] client lang: <none>
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] server lang: <none>
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] kex follows: False
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] Compression: none
2025-12-03T22:26:00.222 [DEBUG] [Thread-124762] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:26:00.277 [DEBUG] [Thread-124762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:26:00.277 [DEBUG] [Thread-124762] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:26:00.277 [DEBUG] [Thread-124762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:26:00.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:26:00.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:26:00.333 [DEBUG] [Thread-124762] [transport.py] [_log()] userauth is OK
2025-12-03T22:26:00.333 [DEBUG] [Thread-124762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:26:00.333 [DEBUG] [Thread-124762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:26:00.333 [DEBUG] [Thread-124762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:26:00.333 [DEBUG] [Thread-124762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:26:00.347 [INFO] [Thread-124762] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:26:00.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:26:00.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:26:01.192 [DEBUG] [Thread-124762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:26:01.192 [DEBUG] [Thread-124762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:26:01.239 [DEBUG] [Thread-124762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:26:01.240 [DEBUG] [Thread-124762] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:26:01.248 [DEBUG] [Thread-124762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:26:01.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:26:01.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:26:01.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:26:01.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:26:01.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:26:01.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:26:01.278 [DEBUG] [Thread-124762] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:26:02.317 [DEBUG] [Thread-124764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:02.986 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:02.987 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:04.196 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:15.460 [DEBUG] [Thread-124765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:17.365 [DEBUG] [Thread-124766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:24.593 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:31.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:26:31.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:26:31.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:26:31.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 26, 1), 15.55, 34.72, 0.0, 24.24, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:26:31.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:26:01
2025-12-03T22:26:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:26:32.238 [DEBUG] [Thread-124767] [transport.py] [_log()] starting thread (client mode): 0xa5148d90
2025-12-03T22:26:32.238 [DEBUG] [Thread-124767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:26:32.257 [DEBUG] [Thread-124767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:26:32.257 [INFO] [Thread-124767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] client lang: <none>
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] server lang: <none>
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] kex follows: False
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:26:32.261 [DEBUG] [Thread-124767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:26:32.262 [DEBUG] [Thread-124767] [transport.py] [_log()] Compression: none
2025-12-03T22:26:32.262 [DEBUG] [Thread-124767] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:26:32.280 [DEBUG] [Thread-124767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:26:32.281 [DEBUG] [Thread-124767] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:26:32.281 [DEBUG] [Thread-124767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:26:32.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:26:32.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:26:32.283 [DEBUG] [Thread-124767] [transport.py] [_log()] userauth is OK
2025-12-03T22:26:32.283 [DEBUG] [Thread-124767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:26:32.283 [DEBUG] [Thread-124767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:26:32.284 [DEBUG] [Thread-124767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:26:32.284 [DEBUG] [Thread-124767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:26:32.301 [INFO] [Thread-124767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:26:32.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:26:32.401 [DEBUG] [Thread-124769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:33.101 [DEBUG] [Thread-124767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:26:33.101 [DEBUG] [Thread-124767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:26:33.102 [DEBUG] [Thread-124767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:26:33.143 [DEBUG] [Thread-124767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:26:33.143 [DEBUG] [Thread-124767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:26:33.145 [DEBUG] [Thread-124767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:26:33.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:26:33.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:26:33.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:26:33.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:26:33.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:26:33.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:26:33.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.851091 -999.00  +16.00  20.50     39   +2.30 1 1 1 1 1     0    0 13.16 -19.16 ZNESW 20.5 20.5 148.2 25.8 16.2 -25.2 16.1 -24.7 15.8 -23.0 16.1 -23.9
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:26:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.851091
2025-12-03T22:26:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:26:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:26:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:26:33.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:26:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:26:33.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:26:01', tmtdew=15.55, humidity=34.72, cloud=0.0, wind=24.24, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:26:01', seeing=0.91, atlas_timestamp='2025-12-03T20:25:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.06374999999999886, 0.010749999999999815, 0.0024999999999995026, 0.07850000000000001, 0.022250000000001435, 0.016000000000000014, -0.11474999999999902, 0.022499999999999076, 0.021000000000000796, 0.05075000000000074, -0.03049999999999997, -0.005000000000000782, 0.10024999999999906, -0.08200000000000074, -0.19200000000000017, 0.017250000000000654, 0.028499999999999304, 0.03649999999999842, 0.02824999999999811, 0.04049999999999798, 0.087749999999998, -0.023749999999999716, -0.31975000000000087, -0.006000000000002004, 0.01550000000000118, 0.00575000000000081, 0.03449999999999953, 0.15000000000000036, 0.12900000000000134, -0.15399999999999814, -0.17499999999999893, 0.0072499999999990905], zp_timestamp='2025-12-03T20:22:00')
2025-12-03T22:26:33.165 [DEBUG] [Thread-124767] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:26:33.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:26:33.269 [DEBUG] [Thread-124771] [transport.py] [_log()] starting thread (client mode): 0xa517ea10
2025-12-03T22:26:33.269 [DEBUG] [Thread-124771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:26:33.283 [DEBUG] [Thread-124771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:26:33.283 [INFO] [Thread-124771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] client lang: <none>
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] server lang: <none>
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] kex follows: False
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] Compression: none
2025-12-03T22:26:33.291 [DEBUG] [Thread-124771] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:26:33.348 [DEBUG] [Thread-124771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:26:33.349 [DEBUG] [Thread-124771] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:26:33.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:26:33.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:26:33.349 [DEBUG] [Thread-124771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:26:33.406 [DEBUG] [Thread-124771] [transport.py] [_log()] userauth is OK
2025-12-03T22:26:33.406 [DEBUG] [Thread-124771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:26:33.406 [DEBUG] [Thread-124771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:26:33.406 [DEBUG] [Thread-124771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:26:33.406 [DEBUG] [Thread-124771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:26:33.421 [INFO] [Thread-124771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:26:33.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:26:33.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:26:34.261 [DEBUG] [Thread-124771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:26:34.261 [DEBUG] [Thread-124771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:26:34.309 [DEBUG] [Thread-124771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:26:34.309 [DEBUG] [Thread-124771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:26:34.317 [DEBUG] [Thread-124771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:26:34.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:26:34.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:26:34.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:26:34.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:26:34.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:26:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:26:34.349 [DEBUG] [Thread-124771] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:26:45.021 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:26:47.435 [DEBUG] [Thread-124773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:02.491 [DEBUG] [Thread-124774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:03.190 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:03.192 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:04.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:27:04.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:27:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:27:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 26, 33), 15.56, 34.69, 0.0, 24.35, 15.94, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:27:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:26:33
2025-12-03T22:27:05.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:27:05.321 [DEBUG] [Thread-124775] [transport.py] [_log()] starting thread (client mode): 0xa517c670
2025-12-03T22:27:05.321 [DEBUG] [Thread-124775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:27:05.341 [DEBUG] [Thread-124775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:27:05.341 [INFO] [Thread-124775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] client lang: <none>
2025-12-03T22:27:05.344 [DEBUG] [Thread-124775] [transport.py] [_log()] server lang: <none>
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] kex follows: False
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] Compression: none
2025-12-03T22:27:05.345 [DEBUG] [Thread-124775] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:27:05.360 [DEBUG] [Thread-124775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:27:05.360 [DEBUG] [Thread-124775] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:27:05.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:27:05.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] userauth is OK
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:27:05.361 [DEBUG] [Thread-124775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:27:05.377 [INFO] [Thread-124775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:27:05.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:27:05.424 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:06.014 [DEBUG] [Thread-124775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:27:06.014 [DEBUG] [Thread-124775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:27:06.014 [DEBUG] [Thread-124775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:27:06.054 [DEBUG] [Thread-124775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:27:06.055 [DEBUG] [Thread-124775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:27:06.057 [DEBUG] [Thread-124775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:27:06.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:27:06.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:27:06.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:27:06.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:27:06.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:27:06.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:27:06.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:27:06.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.851786 -999.00  +16.00  16.34     39   +2.30 1 1 1 1 1     0    0 13.16 -19.20 ZNESW 16.3 16.3 131.2 22.9 16.2 -25.2 16.1 -24.8 15.9 -23.1 16.1 -24.0
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.851786
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:27:06.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:26:33', tmtdew=15.56, humidity=34.69, cloud=0.0, wind=24.35, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:26:33', seeing=0.95, atlas_timestamp='2025-12-03T20:26:34.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:24:00')
2025-12-03T22:27:06.078 [DEBUG] [Thread-124775] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:27:06.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:27:06.174 [DEBUG] [Thread-124778] [transport.py] [_log()] starting thread (client mode): 0xa517cd90
2025-12-03T22:27:06.174 [DEBUG] [Thread-124778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:27:06.189 [DEBUG] [Thread-124778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:27:06.189 [INFO] [Thread-124778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] client lang: <none>
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] server lang: <none>
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] kex follows: False
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] Compression: none
2025-12-03T22:27:06.197 [DEBUG] [Thread-124778] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:27:06.257 [DEBUG] [Thread-124778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:27:06.257 [DEBUG] [Thread-124778] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:27:06.257 [DEBUG] [Thread-124778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:27:06.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:27:06.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:27:06.314 [DEBUG] [Thread-124778] [transport.py] [_log()] userauth is OK
2025-12-03T22:27:06.314 [DEBUG] [Thread-124778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:27:06.314 [DEBUG] [Thread-124778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:27:06.314 [DEBUG] [Thread-124778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:27:06.314 [DEBUG] [Thread-124778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:27:06.329 [INFO] [Thread-124778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:27:06.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:27:06.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:27:07.229 [DEBUG] [Thread-124778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:27:07.229 [DEBUG] [Thread-124778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:27:07.279 [DEBUG] [Thread-124778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:27:07.279 [DEBUG] [Thread-124778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:27:07.288 [DEBUG] [Thread-124778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:27:07.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:27:07.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:27:07.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:27:07.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:27:07.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:27:07.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:27:07.322 [DEBUG] [Thread-124778] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:27:15.546 [DEBUG] [Thread-124780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:17.530 [DEBUG] [Thread-124781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:25.840 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:32.584 [DEBUG] [Thread-124782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:37.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:27:37.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:27:37.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:27:38.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 27, 5), 15.53, 34.75, 0.0, 23.96, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:27:38.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:27:05
2025-12-03T22:27:38.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:27:38.372 [DEBUG] [Thread-124783] [transport.py] [_log()] starting thread (client mode): 0xa51d2f80
2025-12-03T22:27:38.372 [DEBUG] [Thread-124783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:27:38.393 [DEBUG] [Thread-124783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:27:38.393 [INFO] [Thread-124783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:38.396 [DEBUG] [Thread-124783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] client lang: <none>
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] server lang: <none>
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] kex follows: False
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] Compression: none
2025-12-03T22:27:38.397 [DEBUG] [Thread-124783] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:27:38.411 [DEBUG] [Thread-124783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:27:38.412 [DEBUG] [Thread-124783] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:27:38.412 [DEBUG] [Thread-124783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:27:38.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:27:38.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:27:38.413 [DEBUG] [Thread-124783] [transport.py] [_log()] userauth is OK
2025-12-03T22:27:38.413 [DEBUG] [Thread-124783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:27:38.413 [DEBUG] [Thread-124783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:27:38.413 [DEBUG] [Thread-124783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:27:38.413 [DEBUG] [Thread-124783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:27:38.431 [INFO] [Thread-124783] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:27:38.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:27:39.174 [DEBUG] [Thread-124783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:27:39.174 [DEBUG] [Thread-124783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:27:39.174 [DEBUG] [Thread-124783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:27:39.216 [DEBUG] [Thread-124783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:27:39.216 [DEBUG] [Thread-124783] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:27:39.218 [DEBUG] [Thread-124783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:27:39.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:27:39.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:27:39.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:27:39.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:27:39.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:27:39.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:27:39.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.852133 -999.00  +16.00  13.16     39   +2.30 1 1 1 1 1     0    0 13.28 -19.84 ZNESW 13.2 13.2 138.6 20.4 16.2 -25.3 16.1 -24.8 15.9 -23.3 16.1 -24.0
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.852133
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:27:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:27:05', tmtdew=15.53, humidity=34.75, cloud=0.0, wind=23.96, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:27:37', seeing=0.85, atlas_timestamp='2025-12-03T20:27:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:24:00')
2025-12-03T22:27:39.239 [DEBUG] [Thread-124783] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:27:39.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:27:39.330 [DEBUG] [Thread-124786] [transport.py] [_log()] starting thread (client mode): 0xa2760b20
2025-12-03T22:27:39.330 [DEBUG] [Thread-124786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:27:39.344 [DEBUG] [Thread-124786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:27:39.344 [INFO] [Thread-124786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:27:39.352 [DEBUG] [Thread-124786] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:27:39.352 [DEBUG] [Thread-124786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:27:39.352 [DEBUG] [Thread-124786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:27:39.352 [DEBUG] [Thread-124786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:39.352 [DEBUG] [Thread-124786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] client lang: <none>
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] server lang: <none>
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] kex follows: False
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:27:39.353 [DEBUG] [Thread-124786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:27:39.354 [DEBUG] [Thread-124786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:27:39.354 [DEBUG] [Thread-124786] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:27:39.354 [DEBUG] [Thread-124786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:27:39.354 [DEBUG] [Thread-124786] [transport.py] [_log()] Compression: none
2025-12-03T22:27:39.354 [DEBUG] [Thread-124786] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:27:39.411 [DEBUG] [Thread-124786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:27:39.412 [DEBUG] [Thread-124786] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:27:39.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:27:39.413 [DEBUG] [Thread-124786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:27:39.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:27:39.467 [DEBUG] [Thread-124786] [transport.py] [_log()] userauth is OK
2025-12-03T22:27:39.467 [DEBUG] [Thread-124786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:27:39.468 [DEBUG] [Thread-124786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:27:39.468 [DEBUG] [Thread-124786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:27:39.468 [DEBUG] [Thread-124786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:27:39.490 [INFO] [Thread-124786] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:27:39.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:27:39.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:27:40.363 [DEBUG] [Thread-124786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:27:40.364 [DEBUG] [Thread-124786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:27:40.412 [DEBUG] [Thread-124786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:27:40.412 [DEBUG] [Thread-124786] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:27:40.421 [DEBUG] [Thread-124786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:27:40.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:27:40.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:27:40.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:27:40.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:27:40.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:27:40.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:27:40.459 [DEBUG] [Thread-124786] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:27:46.259 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:27:47.622 [DEBUG] [Thread-124788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:02.675 [DEBUG] [Thread-124789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:03.394 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:03.395 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:06.676 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:10.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:28:10.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:28:10.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:28:11.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 27, 37), 15.57, 34.78, 0.0, 22.27, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:28:11.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:27:37
2025-12-03T22:28:11.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:28:11.491 [DEBUG] [Thread-124790] [transport.py] [_log()] starting thread (client mode): 0xa2727e50
2025-12-03T22:28:11.491 [DEBUG] [Thread-124790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:28:11.512 [DEBUG] [Thread-124790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:28:11.512 [INFO] [Thread-124790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] client lang: <none>
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] server lang: <none>
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] kex follows: False
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] Compression: none
2025-12-03T22:28:11.514 [DEBUG] [Thread-124790] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:28:11.534 [DEBUG] [Thread-124790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:28:11.534 [DEBUG] [Thread-124790] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:28:11.535 [DEBUG] [Thread-124790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:28:11.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:28:11.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:28:11.537 [DEBUG] [Thread-124790] [transport.py] [_log()] userauth is OK
2025-12-03T22:28:11.537 [DEBUG] [Thread-124790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:28:11.537 [DEBUG] [Thread-124790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:28:11.537 [DEBUG] [Thread-124790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:28:11.537 [DEBUG] [Thread-124790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:28:11.561 [INFO] [Thread-124790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:28:11.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:28:12.203 [DEBUG] [Thread-124790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:28:12.203 [DEBUG] [Thread-124790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:28:12.203 [DEBUG] [Thread-124790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:28:12.244 [DEBUG] [Thread-124790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:28:12.244 [DEBUG] [Thread-124790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:28:12.247 [DEBUG] [Thread-124790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:28:12.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:28:12.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:28:12.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:28:12.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:28:12.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:28:12.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:28:12.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.852480 -999.00  +15.90  19.42     39   +2.30 1 1 1 1 1     0    0 13.08 -19.77 ZNESW 19.4 19.4 132.8 24.8 16.2 -25.4 16.1 -24.8 15.8 -23.1 16.1 -24.0
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:28:12.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.852480
2025-12-03T22:28:12.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:28:12.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:28:12.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:28:12.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:28:12.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:28:12.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:27:37', tmtdew=15.57, humidity=34.78, cloud=0.0, wind=22.27, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:28:09', seeing=0.93, atlas_timestamp='2025-12-03T20:27:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:24:00')
2025-12-03T22:28:12.271 [DEBUG] [Thread-124790] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:28:12.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:28:12.373 [DEBUG] [Thread-124793] [transport.py] [_log()] starting thread (client mode): 0xa2763790
2025-12-03T22:28:12.373 [DEBUG] [Thread-124793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:28:12.391 [DEBUG] [Thread-124793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:28:12.391 [INFO] [Thread-124793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:28:12.398 [DEBUG] [Thread-124793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] client lang: <none>
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] server lang: <none>
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] kex follows: False
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:28:12.399 [DEBUG] [Thread-124793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:28:12.400 [DEBUG] [Thread-124793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:28:12.400 [DEBUG] [Thread-124793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:28:12.400 [DEBUG] [Thread-124793] [transport.py] [_log()] Compression: none
2025-12-03T22:28:12.400 [DEBUG] [Thread-124793] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:28:12.456 [DEBUG] [Thread-124793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:28:12.457 [DEBUG] [Thread-124793] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:28:12.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:28:12.458 [DEBUG] [Thread-124793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:28:12.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:28:12.516 [DEBUG] [Thread-124793] [transport.py] [_log()] userauth is OK
2025-12-03T22:28:12.516 [DEBUG] [Thread-124793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:28:12.516 [DEBUG] [Thread-124793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:28:12.516 [DEBUG] [Thread-124793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:28:12.516 [DEBUG] [Thread-124793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:28:12.535 [INFO] [Thread-124793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:28:12.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:28:12.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:28:13.360 [DEBUG] [Thread-124793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:28:13.360 [DEBUG] [Thread-124793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:28:13.408 [DEBUG] [Thread-124793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:28:13.408 [DEBUG] [Thread-124793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:28:13.421 [DEBUG] [Thread-124793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:28:13.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:28:13.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:28:13.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:28:13.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:28:13.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:28:13.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:28:13.458 [DEBUG] [Thread-124793] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:28:15.607 [DEBUG] [Thread-124795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:17.714 [DEBUG] [Thread-124796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:27.099 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:32.774 [DEBUG] [Thread-124797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:43.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:28:43.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:28:43.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:28:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 28, 41), 15.52, 34.88, 0.0, 23.71, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:28:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:28:41
2025-12-03T22:28:44.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:28:44.447 [DEBUG] [Thread-124798] [transport.py] [_log()] starting thread (client mode): 0xa51d0160
2025-12-03T22:28:44.447 [DEBUG] [Thread-124798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:28:44.469 [DEBUG] [Thread-124798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:28:44.469 [INFO] [Thread-124798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:28:44.472 [DEBUG] [Thread-124798] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:28:44.472 [DEBUG] [Thread-124798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:28:44.472 [DEBUG] [Thread-124798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] client lang: <none>
2025-12-03T22:28:44.473 [DEBUG] [Thread-124798] [transport.py] [_log()] server lang: <none>
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] kex follows: False
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] Compression: none
2025-12-03T22:28:44.474 [DEBUG] [Thread-124798] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:28:44.494 [DEBUG] [Thread-124798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:28:44.495 [DEBUG] [Thread-124798] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:28:44.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:28:44.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:28:44.496 [DEBUG] [Thread-124798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:28:44.497 [DEBUG] [Thread-124798] [transport.py] [_log()] userauth is OK
2025-12-03T22:28:44.497 [DEBUG] [Thread-124798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:28:44.497 [DEBUG] [Thread-124798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:28:44.497 [DEBUG] [Thread-124798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:28:44.497 [DEBUG] [Thread-124798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:28:44.520 [INFO] [Thread-124798] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:28:44.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:28:45.309 [DEBUG] [Thread-124798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:28:45.309 [DEBUG] [Thread-124798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:28:45.310 [DEBUG] [Thread-124798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:28:45.350 [DEBUG] [Thread-124798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:28:45.350 [DEBUG] [Thread-124798] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:28:45.353 [DEBUG] [Thread-124798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:28:45.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:28:45.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:28:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:28:45.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:28:45.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:28:45.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:28:45.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:28:45.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:28:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:28:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.852827 -999.00  +16.00  23.46     39   +2.30 1 1 1 1 1     0    0 13.10 -21.19 ZNESW 23.5 23.5 133.4 27.2 16.2 -25.3 16.1 -24.8 15.9 -22.9 16.2 -23.9
2025-12-03T22:28:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:28:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:28:45.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.852827
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:28:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:28:41', tmtdew=15.52, humidity=34.88, cloud=0.0, wind=23.71, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:28:41', seeing=0.93, atlas_timestamp='2025-12-03T20:28:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:24:00')
2025-12-03T22:28:45.378 [DEBUG] [Thread-124798] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:28:45.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:28:45.477 [DEBUG] [Thread-124801] [transport.py] [_log()] starting thread (client mode): 0xa51d3cd0
2025-12-03T22:28:45.477 [DEBUG] [Thread-124801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:28:45.491 [DEBUG] [Thread-124801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:28:45.491 [INFO] [Thread-124801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:28:45.498 [DEBUG] [Thread-124801] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:28:45.498 [DEBUG] [Thread-124801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] client lang: <none>
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] server lang: <none>
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] kex follows: False
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:28:45.499 [DEBUG] [Thread-124801] [transport.py] [_log()] Compression: none
2025-12-03T22:28:45.500 [DEBUG] [Thread-124801] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:28:45.556 [DEBUG] [Thread-124801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:28:45.556 [DEBUG] [Thread-124801] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:28:45.557 [DEBUG] [Thread-124801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:28:45.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:28:45.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:28:45.612 [DEBUG] [Thread-124801] [transport.py] [_log()] userauth is OK
2025-12-03T22:28:45.613 [DEBUG] [Thread-124801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:28:45.613 [DEBUG] [Thread-124801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:28:45.613 [DEBUG] [Thread-124801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:28:45.613 [DEBUG] [Thread-124801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:28:45.632 [INFO] [Thread-124801] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:28:45.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:28:45.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:28:46.463 [DEBUG] [Thread-124801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:28:46.463 [DEBUG] [Thread-124801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:28:46.511 [DEBUG] [Thread-124801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:28:46.511 [DEBUG] [Thread-124801] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:28:46.519 [DEBUG] [Thread-124801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:28:46.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:28:46.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:28:46.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:28:46.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:28:46.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:28:46.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:28:46.554 [DEBUG] [Thread-124801] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:28:47.561 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:28:47.808 [DEBUG] [Thread-124803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:02.867 [DEBUG] [Thread-124804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:03.597 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:03.598 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:07.978 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:15.662 [DEBUG] [Thread-124805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:16.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:29:16.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:29:16.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:29:17.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 29, 13), 15.52, 34.88, 0.0, 24.54, 15.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:29:17.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:29:13
2025-12-03T22:29:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:29:17.568 [DEBUG] [Thread-124806] [transport.py] [_log()] starting thread (client mode): 0xa51961a0
2025-12-03T22:29:17.568 [DEBUG] [Thread-124806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:29:17.589 [DEBUG] [Thread-124806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:29:17.589 [INFO] [Thread-124806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] client lang: <none>
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] server lang: <none>
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] kex follows: False
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] Compression: none
2025-12-03T22:29:17.593 [DEBUG] [Thread-124806] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:29:17.609 [DEBUG] [Thread-124806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:29:17.609 [DEBUG] [Thread-124806] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:29:17.609 [DEBUG] [Thread-124806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:29:17.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:29:17.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:29:17.610 [DEBUG] [Thread-124806] [transport.py] [_log()] userauth is OK
2025-12-03T22:29:17.610 [DEBUG] [Thread-124806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:29:17.611 [DEBUG] [Thread-124806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:29:17.611 [DEBUG] [Thread-124806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:29:17.611 [DEBUG] [Thread-124806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:29:17.620 [INFO] [Thread-124806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:29:17.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:29:17.901 [DEBUG] [Thread-124808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:18.243 [DEBUG] [Thread-124806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:29:18.243 [DEBUG] [Thread-124806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:29:18.243 [DEBUG] [Thread-124806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:29:18.285 [DEBUG] [Thread-124806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:29:18.285 [DEBUG] [Thread-124806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:29:18.287 [DEBUG] [Thread-124806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:29:18.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:29:18.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:29:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:29:18.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:29:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:29:18.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:29:18.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:29:18.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.853174 -999.00  +16.00  17.59     39   +2.30 1 1 1 1 1     0    0 13.20 -20.58 ZNESW 17.8 17.6 136.6 23.1 16.2 -25.3 16.1 -24.8 15.8 -23.1 16.2 -23.9
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.853174
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:29:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:29:13', tmtdew=15.52, humidity=34.88, cloud=0.0, wind=24.54, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:29:13', seeing=0.93, atlas_timestamp='2025-12-03T20:28:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:24:00')
2025-12-03T22:29:18.305 [DEBUG] [Thread-124806] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:29:18.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:29:18.398 [DEBUG] [Thread-124810] [transport.py] [_log()] starting thread (client mode): 0xa2760550
2025-12-03T22:29:18.398 [DEBUG] [Thread-124810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:29:18.413 [DEBUG] [Thread-124810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:29:18.413 [INFO] [Thread-124810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:29:18.420 [DEBUG] [Thread-124810] [transport.py] [_log()] client lang: <none>
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] server lang: <none>
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] kex follows: False
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] Compression: none
2025-12-03T22:29:18.421 [DEBUG] [Thread-124810] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:29:18.475 [DEBUG] [Thread-124810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:29:18.475 [DEBUG] [Thread-124810] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:29:18.475 [DEBUG] [Thread-124810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:29:18.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:29:18.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:29:18.533 [DEBUG] [Thread-124810] [transport.py] [_log()] userauth is OK
2025-12-03T22:29:18.533 [DEBUG] [Thread-124810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:29:18.533 [DEBUG] [Thread-124810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:29:18.533 [DEBUG] [Thread-124810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:29:18.533 [DEBUG] [Thread-124810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:29:18.546 [INFO] [Thread-124810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:29:18.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:29:18.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:29:19.377 [DEBUG] [Thread-124810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:29:19.377 [DEBUG] [Thread-124810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:29:19.426 [DEBUG] [Thread-124810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:29:19.426 [DEBUG] [Thread-124810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:29:19.434 [DEBUG] [Thread-124810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:29:19.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:29:19.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:29:19.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:29:19.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:29:19.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:29:19.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:29:19.465 [DEBUG] [Thread-124810] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:29:28.395 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:32.933 [DEBUG] [Thread-124812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:47.991 [DEBUG] [Thread-124813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:48.818 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:29:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:29:49.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:29:49.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:29:50.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 29, 45), 15.53, 34.88, 0.0, 23.52, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:29:50.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:29:45
2025-12-03T22:29:50.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:29:50.438 [DEBUG] [Thread-124814] [transport.py] [_log()] starting thread (client mode): 0xa514f880
2025-12-03T22:29:50.438 [DEBUG] [Thread-124814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:29:50.460 [DEBUG] [Thread-124814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:29:50.460 [INFO] [Thread-124814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] client lang: <none>
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] server lang: <none>
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] kex follows: False
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:29:50.463 [DEBUG] [Thread-124814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:29:50.464 [DEBUG] [Thread-124814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:29:50.464 [DEBUG] [Thread-124814] [transport.py] [_log()] Compression: none
2025-12-03T22:29:50.464 [DEBUG] [Thread-124814] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:29:50.480 [DEBUG] [Thread-124814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:29:50.480 [DEBUG] [Thread-124814] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:29:50.481 [DEBUG] [Thread-124814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:29:50.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:29:50.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:29:50.483 [DEBUG] [Thread-124814] [transport.py] [_log()] userauth is OK
2025-12-03T22:29:50.483 [DEBUG] [Thread-124814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:29:50.483 [DEBUG] [Thread-124814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:29:50.483 [DEBUG] [Thread-124814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:29:50.483 [DEBUG] [Thread-124814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:29:50.507 [INFO] [Thread-124814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:29:50.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:29:51.134 [DEBUG] [Thread-124814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:29:51.134 [DEBUG] [Thread-124814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:29:51.134 [DEBUG] [Thread-124814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:29:51.175 [DEBUG] [Thread-124814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:29:51.175 [DEBUG] [Thread-124814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:29:51.178 [DEBUG] [Thread-124814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:29:51.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:29:51.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:29:51.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:29:51.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:29:51.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:29:51.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:29:51.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:29:51.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:29:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:29:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.853522 -999.00  +16.00  18.06     39   +2.40 1 1 1 1 1     0    0 13.09 -18.84 ZNESW 17.6 18.1 134.8 28.1 16.2 -25.3 16.1 -24.8 15.8 -23.0 16.1 -23.8
2025-12-03T22:29:51.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:29:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:29:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.853522
2025-12-03T22:29:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:29:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:29:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:29:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:29:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:29:51.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:29:45', tmtdew=15.53, humidity=34.88, cloud=0.0, wind=23.52, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:29:45', seeing=0.86, atlas_timestamp='2025-12-03T20:29:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:29:51.200 [DEBUG] [Thread-124814] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:29:51.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:29:51.299 [DEBUG] [Thread-124817] [transport.py] [_log()] starting thread (client mode): 0xa514df60
2025-12-03T22:29:51.299 [DEBUG] [Thread-124817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:29:51.313 [DEBUG] [Thread-124817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:29:51.313 [INFO] [Thread-124817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] client lang: <none>
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] server lang: <none>
2025-12-03T22:29:51.323 [DEBUG] [Thread-124817] [transport.py] [_log()] kex follows: False
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] Compression: none
2025-12-03T22:29:51.324 [DEBUG] [Thread-124817] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:29:51.385 [DEBUG] [Thread-124817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:29:51.386 [DEBUG] [Thread-124817] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:29:51.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:29:51.387 [DEBUG] [Thread-124817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:29:51.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:29:51.441 [DEBUG] [Thread-124817] [transport.py] [_log()] userauth is OK
2025-12-03T22:29:51.442 [DEBUG] [Thread-124817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:29:51.442 [DEBUG] [Thread-124817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:29:51.442 [DEBUG] [Thread-124817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:29:51.442 [DEBUG] [Thread-124817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:29:51.461 [INFO] [Thread-124817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:29:51.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:29:51.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:29:52.278 [DEBUG] [Thread-124817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:29:52.278 [DEBUG] [Thread-124817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:29:52.328 [DEBUG] [Thread-124817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:29:52.328 [DEBUG] [Thread-124817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:29:52.337 [DEBUG] [Thread-124817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:29:52.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:29:52.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:29:52.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:29:52.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:29:52.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:29:52.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:29:52.371 [DEBUG] [Thread-124817] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:30:03.025 [DEBUG] [Thread-124819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:03.798 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:03.799 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:09.251 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:15.736 [DEBUG] [Thread-124820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:18.081 [DEBUG] [Thread-124821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:30:22.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:30:22.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:30:23.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 30, 17), 15.59, 34.73, 0.0, 23.5, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:30:23.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:30:17
2025-12-03T22:30:23.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:30:23.365 [DEBUG] [Thread-124822] [transport.py] [_log()] starting thread (client mode): 0xa514f430
2025-12-03T22:30:23.365 [DEBUG] [Thread-124822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:30:23.385 [DEBUG] [Thread-124822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:30:23.385 [INFO] [Thread-124822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:30:23.388 [DEBUG] [Thread-124822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:30:23.388 [DEBUG] [Thread-124822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] client lang: <none>
2025-12-03T22:30:23.389 [DEBUG] [Thread-124822] [transport.py] [_log()] server lang: <none>
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] kex follows: False
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] Compression: none
2025-12-03T22:30:23.390 [DEBUG] [Thread-124822] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:30:23.407 [DEBUG] [Thread-124822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:30:23.408 [DEBUG] [Thread-124822] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:30:23.408 [DEBUG] [Thread-124822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:30:23.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:30:23.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:30:23.410 [DEBUG] [Thread-124822] [transport.py] [_log()] userauth is OK
2025-12-03T22:30:23.410 [DEBUG] [Thread-124822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:30:23.410 [DEBUG] [Thread-124822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:30:23.410 [DEBUG] [Thread-124822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:30:23.411 [DEBUG] [Thread-124822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:30:23.446 [INFO] [Thread-124822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:30:23.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:30:24.083 [DEBUG] [Thread-124822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:30:24.084 [DEBUG] [Thread-124822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:30:24.084 [DEBUG] [Thread-124822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:30:24.125 [DEBUG] [Thread-124822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:30:24.125 [DEBUG] [Thread-124822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:30:24.128 [DEBUG] [Thread-124822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:30:24.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:30:24.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:30:24.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:30:24.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:30:24.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:30:24.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:30:24.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.854217 -999.00  +16.00  16.39     39   +2.30 1 1 1 1 1     0    0 13.51 -15.95 ZNESW 14.5 16.4 133.6 23.7 16.2 -25.2 16.1 -24.7 15.9 -23.1 16.1 -23.8
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:30:24.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.854217
2025-12-03T22:30:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:30:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:30:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:30:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:30:24.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:30:24.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:30:17', tmtdew=15.59, humidity=34.73, cloud=0.0, wind=23.5, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:30:17', seeing=0.79, atlas_timestamp='2025-12-03T20:30:04.349', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:30:24.152 [DEBUG] [Thread-124822] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:30:24.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:30:24.257 [DEBUG] [Thread-124825] [transport.py] [_log()] starting thread (client mode): 0xa517c130
2025-12-03T22:30:24.257 [DEBUG] [Thread-124825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:30:24.272 [DEBUG] [Thread-124825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:30:24.272 [INFO] [Thread-124825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:24.280 [DEBUG] [Thread-124825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] client lang: <none>
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] server lang: <none>
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] kex follows: False
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] Compression: none
2025-12-03T22:30:24.281 [DEBUG] [Thread-124825] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:30:24.338 [DEBUG] [Thread-124825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:30:24.338 [DEBUG] [Thread-124825] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:30:24.339 [DEBUG] [Thread-124825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:30:24.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:30:24.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:30:24.395 [DEBUG] [Thread-124825] [transport.py] [_log()] userauth is OK
2025-12-03T22:30:24.396 [DEBUG] [Thread-124825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:30:24.396 [DEBUG] [Thread-124825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:30:24.396 [DEBUG] [Thread-124825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:30:24.396 [DEBUG] [Thread-124825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:30:24.418 [INFO] [Thread-124825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:30:24.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:30:24.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:30:25.270 [DEBUG] [Thread-124825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:30:25.270 [DEBUG] [Thread-124825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:30:25.317 [DEBUG] [Thread-124825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:30:25.318 [DEBUG] [Thread-124825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:30:25.326 [DEBUG] [Thread-124825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:30:25.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:30:25.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:30:25.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:30:25.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:30:25.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:30:25.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:30:25.361 [DEBUG] [Thread-124825] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:30:29.672 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:33.114 [DEBUG] [Thread-124827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:48.174 [DEBUG] [Thread-124828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:50.101 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:30:55.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:30:55.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:30:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:30:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 30, 49), 15.63, 34.67, 0.0, 23.11, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:30:56.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:30:49
2025-12-03T22:30:56.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:30:56.330 [DEBUG] [Thread-124829] [transport.py] [_log()] starting thread (client mode): 0xa517e950
2025-12-03T22:30:56.330 [DEBUG] [Thread-124829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:30:56.351 [DEBUG] [Thread-124829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:30:56.351 [INFO] [Thread-124829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:30:56.354 [DEBUG] [Thread-124829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:30:56.354 [DEBUG] [Thread-124829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] client lang: <none>
2025-12-03T22:30:56.355 [DEBUG] [Thread-124829] [transport.py] [_log()] server lang: <none>
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] kex follows: False
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] Compression: none
2025-12-03T22:30:56.356 [DEBUG] [Thread-124829] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:30:56.375 [DEBUG] [Thread-124829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:30:56.375 [DEBUG] [Thread-124829] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:30:56.376 [DEBUG] [Thread-124829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:30:56.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:30:56.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:30:56.377 [DEBUG] [Thread-124829] [transport.py] [_log()] userauth is OK
2025-12-03T22:30:56.378 [DEBUG] [Thread-124829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:30:56.378 [DEBUG] [Thread-124829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:30:56.378 [DEBUG] [Thread-124829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:30:56.378 [DEBUG] [Thread-124829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:30:56.402 [INFO] [Thread-124829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:30:56.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:30:57.067 [DEBUG] [Thread-124829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:30:57.067 [DEBUG] [Thread-124829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:30:57.067 [DEBUG] [Thread-124829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:30:57.108 [DEBUG] [Thread-124829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:30:57.108 [DEBUG] [Thread-124829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:30:57.111 [DEBUG] [Thread-124829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:30:57.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:30:57.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:30:57.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:30:57.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:30:57.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:30:57.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:30:57.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.854563 -999.00  +16.00  18.73     39   +2.40 1 1 1 1 1     0    0 13.09 -15.14 ZNESW 20.6 18.7 135.0 25.6 16.2 -25.3 16.1 -24.8 15.9 -23.1 16.1 -24.0
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:30:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.854563
2025-12-03T22:30:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:30:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:30:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:30:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:30:57.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:30:57.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:30:49', tmtdew=15.63, humidity=34.67, cloud=0.0, wind=23.11, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:30:49', seeing=0.79, atlas_timestamp='2025-12-03T20:30:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:30:57.136 [DEBUG] [Thread-124829] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:30:57.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:30:57.238 [DEBUG] [Thread-124832] [transport.py] [_log()] starting thread (client mode): 0xa51d05b0
2025-12-03T22:30:57.238 [DEBUG] [Thread-124832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:30:57.253 [DEBUG] [Thread-124832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:30:57.253 [INFO] [Thread-124832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] client lang: <none>
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] server lang: <none>
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] kex follows: False
2025-12-03T22:30:57.261 [DEBUG] [Thread-124832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] Compression: none
2025-12-03T22:30:57.262 [DEBUG] [Thread-124832] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:30:57.318 [DEBUG] [Thread-124832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:30:57.318 [DEBUG] [Thread-124832] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:30:57.318 [DEBUG] [Thread-124832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:30:57.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:30:57.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:30:57.375 [DEBUG] [Thread-124832] [transport.py] [_log()] userauth is OK
2025-12-03T22:30:57.375 [DEBUG] [Thread-124832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:30:57.375 [DEBUG] [Thread-124832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:30:57.375 [DEBUG] [Thread-124832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:30:57.375 [DEBUG] [Thread-124832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:30:57.394 [INFO] [Thread-124832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:30:57.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:30:57.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:30:58.208 [DEBUG] [Thread-124832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:30:58.208 [DEBUG] [Thread-124832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:30:58.256 [DEBUG] [Thread-124832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:30:58.256 [DEBUG] [Thread-124832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:30:58.265 [DEBUG] [Thread-124832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:30:58.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:30:58.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:30:58.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:30:58.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:30:58.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:30:58.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:30:58.299 [DEBUG] [Thread-124832] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:31:03.213 [DEBUG] [Thread-124834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:03.996 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:03.997 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:10.544 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:15.790 [DEBUG] [Thread-124835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:18.271 [DEBUG] [Thread-124836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:28.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:31:28.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:31:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:31:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 31, 21), 15.64, 34.64, 0.0, 23.66, 16.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:31:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:31:21
2025-12-03T22:31:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:31:29.275 [DEBUG] [Thread-124837] [transport.py] [_log()] starting thread (client mode): 0xa5195ea0
2025-12-03T22:31:29.275 [DEBUG] [Thread-124837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:31:29.296 [DEBUG] [Thread-124837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:31:29.296 [INFO] [Thread-124837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:31:29.299 [DEBUG] [Thread-124837] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:31:29.299 [DEBUG] [Thread-124837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] client lang: <none>
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] server lang: <none>
2025-12-03T22:31:29.300 [DEBUG] [Thread-124837] [transport.py] [_log()] kex follows: False
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] Compression: none
2025-12-03T22:31:29.301 [DEBUG] [Thread-124837] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:31:29.322 [DEBUG] [Thread-124837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:31:29.322 [DEBUG] [Thread-124837] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:31:29.323 [DEBUG] [Thread-124837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:31:29.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:31:29.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:31:29.324 [DEBUG] [Thread-124837] [transport.py] [_log()] userauth is OK
2025-12-03T22:31:29.325 [DEBUG] [Thread-124837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:31:29.325 [DEBUG] [Thread-124837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:31:29.325 [DEBUG] [Thread-124837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:31:29.325 [DEBUG] [Thread-124837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:31:29.360 [INFO] [Thread-124837] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:31:29.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:31:29.991 [DEBUG] [Thread-124837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:31:29.991 [DEBUG] [Thread-124837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:31:29.991 [DEBUG] [Thread-124837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:31:30.032 [DEBUG] [Thread-124837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:31:30.032 [DEBUG] [Thread-124837] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:31:30.035 [DEBUG] [Thread-124837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:31:30.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:31:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:31:30.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:31:30.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:31:30.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:31:30.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:31:30.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:31:30.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.854911 -999.00  +16.00  21.37     39   +2.40 1 1 1 1 1     0    0 13.17 -15.46 ZNESW 20.4 21.4 138.0 27.6 16.2 -25.3 16.1 -24.8 15.8 -22.9 16.2 -23.8
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.854911
2025-12-03T22:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:31:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:31:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:31:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:31:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:31:30.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:31:21', tmtdew=15.64, humidity=34.64, cloud=0.0, wind=23.66, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:31:21', seeing=0.76, atlas_timestamp='2025-12-03T20:31:04.310', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:31:30.060 [DEBUG] [Thread-124837] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:31:30.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:31:30.164 [DEBUG] [Thread-124840] [transport.py] [_log()] starting thread (client mode): 0xa517db10
2025-12-03T22:31:30.164 [DEBUG] [Thread-124840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:31:30.178 [DEBUG] [Thread-124840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:31:30.178 [INFO] [Thread-124840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] client lang: <none>
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] server lang: <none>
2025-12-03T22:31:30.186 [DEBUG] [Thread-124840] [transport.py] [_log()] kex follows: False
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] Compression: none
2025-12-03T22:31:30.187 [DEBUG] [Thread-124840] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:31:30.243 [DEBUG] [Thread-124840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:31:30.244 [DEBUG] [Thread-124840] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:31:30.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:31:30.244 [DEBUG] [Thread-124840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:31:30.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:31:30.300 [DEBUG] [Thread-124840] [transport.py] [_log()] userauth is OK
2025-12-03T22:31:30.300 [DEBUG] [Thread-124840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:31:30.300 [DEBUG] [Thread-124840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:31:30.300 [DEBUG] [Thread-124840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:31:30.300 [DEBUG] [Thread-124840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:31:30.319 [INFO] [Thread-124840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:31:30.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:31:30.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:31:31.004 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:31.124 [DEBUG] [Thread-124840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:31:31.124 [DEBUG] [Thread-124840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:31:31.172 [DEBUG] [Thread-124840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:31:31.172 [DEBUG] [Thread-124840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:31:31.181 [DEBUG] [Thread-124840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:31:31.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:31:31.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:31:31.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:31:31.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:31:31.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:31:31.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:31:31.216 [DEBUG] [Thread-124840] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:31:33.309 [DEBUG] [Thread-124842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:48.367 [DEBUG] [Thread-124843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:31:51.441 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:01.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:32:01.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:32:01.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:32:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 31, 53), 15.64, 34.65, 0.0, 24.05, 16.13, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:32:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:31:53
2025-12-03T22:32:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:32:02.170 [DEBUG] [Thread-124844] [transport.py] [_log()] starting thread (client mode): 0xa514dbd0
2025-12-03T22:32:02.170 [DEBUG] [Thread-124844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:32:02.184 [DEBUG] [Thread-124844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:32:02.184 [INFO] [Thread-124844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:32:02.186 [DEBUG] [Thread-124844] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:32:02.186 [DEBUG] [Thread-124844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] client lang: <none>
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] server lang: <none>
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] kex follows: False
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:32:02.187 [DEBUG] [Thread-124844] [transport.py] [_log()] Compression: none
2025-12-03T22:32:02.188 [DEBUG] [Thread-124844] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:32:02.201 [DEBUG] [Thread-124844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:32:02.201 [DEBUG] [Thread-124844] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:32:02.202 [DEBUG] [Thread-124844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:32:02.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:32:02.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:32:02.203 [DEBUG] [Thread-124844] [transport.py] [_log()] userauth is OK
2025-12-03T22:32:02.204 [DEBUG] [Thread-124844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:32:02.204 [DEBUG] [Thread-124844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:32:02.204 [DEBUG] [Thread-124844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:32:02.204 [DEBUG] [Thread-124844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:32:02.227 [INFO] [Thread-124844] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:32:02.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:32:02.818 [DEBUG] [Thread-124844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:32:02.819 [DEBUG] [Thread-124844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:32:02.819 [DEBUG] [Thread-124844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:32:02.860 [DEBUG] [Thread-124844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:32:02.860 [DEBUG] [Thread-124844] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:32:02.862 [DEBUG] [Thread-124844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:32:02.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:32:02.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:32:02.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:32:02.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:32:02.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:32:02.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:32:02.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:32:02.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.855258 -999.00  +16.10  17.87     39   +2.30 1 1 1 1 1     0    0 13.10 -15.03 ZNESW 16.1 17.9 132.4 27.6 16.2 -25.3 16.1 -24.9 15.9 -23.3 16.1 -24.0
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.855258
2025-12-03T22:32:02.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:32:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:32:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:32:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:32:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:32:02.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:31:53', tmtdew=15.64, humidity=34.65, cloud=0.0, wind=24.05, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:31:53', seeing=0.68, atlas_timestamp='2025-12-03T20:31:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:32:02.881 [DEBUG] [Thread-124844] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:32:02.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:32:02.996 [DEBUG] [Thread-124847] [transport.py] [_log()] starting thread (client mode): 0xa2761e70
2025-12-03T22:32:02.996 [DEBUG] [Thread-124847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:32:03.015 [DEBUG] [Thread-124847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:32:03.015 [INFO] [Thread-124847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:32:03.022 [DEBUG] [Thread-124847] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:32:03.022 [DEBUG] [Thread-124847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:32:03.022 [DEBUG] [Thread-124847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:32:03.022 [DEBUG] [Thread-124847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] client lang: <none>
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] server lang: <none>
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] kex follows: False
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] Compression: none
2025-12-03T22:32:03.023 [DEBUG] [Thread-124847] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:32:03.080 [DEBUG] [Thread-124847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:32:03.081 [DEBUG] [Thread-124847] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:32:03.081 [DEBUG] [Thread-124847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:32:03.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:32:03.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:32:03.135 [DEBUG] [Thread-124847] [transport.py] [_log()] userauth is OK
2025-12-03T22:32:03.136 [DEBUG] [Thread-124847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:32:03.136 [DEBUG] [Thread-124847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:32:03.136 [DEBUG] [Thread-124847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:32:03.136 [DEBUG] [Thread-124847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:32:03.155 [INFO] [Thread-124847] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:32:03.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:32:03.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:32:03.402 [DEBUG] [Thread-124849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:04.052 [DEBUG] [Thread-124847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:32:04.052 [DEBUG] [Thread-124847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:32:04.100 [DEBUG] [Thread-124847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:32:04.100 [DEBUG] [Thread-124847] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:32:04.109 [DEBUG] [Thread-124847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:32:04.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:32:04.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:32:04.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:32:04.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:32:04.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:32:04.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:32:04.152 [DEBUG] [Thread-124847] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:32:04.198 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:04.199 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:11.912 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:15.859 [DEBUG] [Thread-124850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:18.468 [DEBUG] [Thread-124851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:32.355 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:33.501 [DEBUG] [Thread-124852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:32:34.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:32:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:32:34.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 32, 25), 15.63, 34.67, 0.0, 21.83, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:32:34.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:32:25
2025-12-03T22:32:34.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:32:35.133 [DEBUG] [Thread-124853] [transport.py] [_log()] starting thread (client mode): 0x9fd23e20
2025-12-03T22:32:35.133 [DEBUG] [Thread-124853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:32:35.149 [DEBUG] [Thread-124853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:32:35.150 [INFO] [Thread-124853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:32:35.151 [DEBUG] [Thread-124853] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] client lang: <none>
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] server lang: <none>
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] kex follows: False
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:32:35.152 [DEBUG] [Thread-124853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:32:35.153 [DEBUG] [Thread-124853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:32:35.153 [DEBUG] [Thread-124853] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:32:35.153 [DEBUG] [Thread-124853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:32:35.153 [DEBUG] [Thread-124853] [transport.py] [_log()] Compression: none
2025-12-03T22:32:35.153 [DEBUG] [Thread-124853] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:32:35.167 [DEBUG] [Thread-124853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:32:35.167 [DEBUG] [Thread-124853] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:32:35.168 [DEBUG] [Thread-124853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:32:35.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:32:35.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:32:35.169 [DEBUG] [Thread-124853] [transport.py] [_log()] userauth is OK
2025-12-03T22:32:35.170 [DEBUG] [Thread-124853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:32:35.170 [DEBUG] [Thread-124853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:32:35.170 [DEBUG] [Thread-124853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:32:35.170 [DEBUG] [Thread-124853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:32:35.193 [INFO] [Thread-124853] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:32:35.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:32:35.807 [DEBUG] [Thread-124853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:32:35.807 [DEBUG] [Thread-124853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:32:35.807 [DEBUG] [Thread-124853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:32:35.848 [DEBUG] [Thread-124853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:32:35.848 [DEBUG] [Thread-124853] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:32:35.850 [DEBUG] [Thread-124853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:32:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:32:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:32:35.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:32:35.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:32:35.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:32:35.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:32:35.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:32:35.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:32:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:32:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.855605 -999.00  +16.00  24.45     39   +2.40 1 1 1 1 1     0    0 13.29 -14.29 ZNESW 18.5 24.4 134.2 27.0 16.2 -25.4 16.1 -24.9 15.9 -23.1 16.2 -23.9
2025-12-03T22:32:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:32:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:32:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.855605
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:32:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:32:25', tmtdew=15.63, humidity=34.67, cloud=0.0, wind=21.83, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:32:25', seeing=0.68, atlas_timestamp='2025-12-03T20:32:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.005749999999999034, -0.06374999999999886, 0.02325000000000088, -0.016500000000000625, 0.007500000000000284, -0.00975000000000037, -0.051000000000000156, -0.009249999999999758, -0.06450000000000067, -0.013500000000000512, 0.014249999999998764, -0.046499999999999986, 0.04400000000000048, 0.0752499999999987, -0.062000000000001165, -0.027000000000001023, 0.009249999999999758, -0.006999999999999673, 0.021999999999998465, 0.017249999999998877, 0.026999999999999247, 0.03774999999999906, -0.006750000000000256, -0.1792499999999997, -0.004000000000001336, 0.00849999999999973, 0.02224999999999966, 0.05150000000000077, 0.13700000000000045, 0.07400000000000162, -0.18499999999999872, -0.014999999999998792, -0.030750000000001165], zp_timestamp='2025-12-03T20:28:00')
2025-12-03T22:32:35.870 [DEBUG] [Thread-124853] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:32:35.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:32:35.972 [DEBUG] [Thread-124856] [transport.py] [_log()] starting thread (client mode): 0x9fd23e50
2025-12-03T22:32:35.972 [DEBUG] [Thread-124856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:32:35.985 [DEBUG] [Thread-124856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:32:35.985 [INFO] [Thread-124856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:32:35.992 [DEBUG] [Thread-124856] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] client lang: <none>
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] server lang: <none>
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] kex follows: False
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:32:35.993 [DEBUG] [Thread-124856] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:32:35.994 [DEBUG] [Thread-124856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:32:35.994 [DEBUG] [Thread-124856] [transport.py] [_log()] Compression: none
2025-12-03T22:32:35.994 [DEBUG] [Thread-124856] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:32:36.052 [DEBUG] [Thread-124856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:32:36.053 [DEBUG] [Thread-124856] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:32:36.053 [DEBUG] [Thread-124856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:32:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:32:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:32:36.108 [DEBUG] [Thread-124856] [transport.py] [_log()] userauth is OK
2025-12-03T22:32:36.109 [DEBUG] [Thread-124856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:32:36.109 [DEBUG] [Thread-124856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:32:36.109 [DEBUG] [Thread-124856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:32:36.109 [DEBUG] [Thread-124856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:32:36.127 [INFO] [Thread-124856] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:32:36.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:32:36.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:32:36.968 [DEBUG] [Thread-124856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:32:36.968 [DEBUG] [Thread-124856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:32:37.016 [DEBUG] [Thread-124856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:32:37.016 [DEBUG] [Thread-124856] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:32:37.025 [DEBUG] [Thread-124856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:32:37.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:32:37.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:32:37.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:32:37.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:32:37.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:32:37.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:32:37.059 [DEBUG] [Thread-124856] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:32:48.535 [DEBUG] [Thread-124858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:32:52.772 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:03.595 [DEBUG] [Thread-124859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:04.396 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:04.398 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:07.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:33:07.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:33:07.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:33:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 32, 57), 15.59, 34.6, 0.0, 23.38, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:33:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:32:57
2025-12-03T22:33:07.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:33:08.079 [DEBUG] [Thread-124860] [transport.py] [_log()] starting thread (client mode): 0xa5196620
2025-12-03T22:33:08.079 [DEBUG] [Thread-124860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:33:08.099 [DEBUG] [Thread-124860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:33:08.099 [INFO] [Thread-124860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] client lang: <none>
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] server lang: <none>
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] kex follows: False
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] Compression: none
2025-12-03T22:33:08.102 [DEBUG] [Thread-124860] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:33:08.117 [DEBUG] [Thread-124860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:33:08.117 [DEBUG] [Thread-124860] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:33:08.118 [DEBUG] [Thread-124860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:33:08.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:33:08.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:33:08.160 [DEBUG] [Thread-124860] [transport.py] [_log()] userauth is OK
2025-12-03T22:33:08.160 [DEBUG] [Thread-124860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:33:08.160 [DEBUG] [Thread-124860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:33:08.160 [DEBUG] [Thread-124860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:33:08.160 [DEBUG] [Thread-124860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:33:08.176 [INFO] [Thread-124860] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:33:08.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:33:08.745 [DEBUG] [Thread-124860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:33:08.745 [DEBUG] [Thread-124860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:33:08.745 [DEBUG] [Thread-124860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:33:08.786 [DEBUG] [Thread-124860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:33:08.786 [DEBUG] [Thread-124860] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:33:08.788 [DEBUG] [Thread-124860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:33:08.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:33:08.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:33:08.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:33:08.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:33:08.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:33:08.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:33:08.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.855952 -999.00  +16.10  16.44     39   +2.40 1 1 1 1 1     0    0 13.46 -13.54 ZNESW 18.8 16.4 133.6 25.3 16.2 -25.3 16.1 -24.8 15.9 -23.2 16.1 -23.9
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:33:08.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.855952
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:33:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:32:57', tmtdew=15.59, humidity=34.6, cloud=0.0, wind=23.38, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:32:57', seeing=0.8, atlas_timestamp='2025-12-03T20:32:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.06424999999999947, 0.010249999999999204, 0.05275000000000141, 0.045499999999998764, -0.00849999999999973, 0.056250000000000355, 0.08099999999999952, -0.18624999999999936, -0.010500000000000398, 0.03849999999999909, 0.06424999999999947, -0.028499999999999304, 0.04400000000000048, 0.036249999999999005, -0.0365000000000002, 0.04649999999999821, -0.028249999999999886, 0.026999999999999247, 0.04899999999999949, 0.022749999999998494, 0.09799999999999898, 0.06874999999999787, 0.006250000000001421, -0.25624999999999964, 0.013499999999998735, 0.02200000000000024, 0.05975000000000108, 0.10850000000000115, 0.13049999999999962, 0.13400000000000034, 0.02400000000000091, 0.10150000000000148, 0.021249999999998437], zp_timestamp='2025-12-03T20:32:00')
2025-12-03T22:33:08.826 [DEBUG] [Thread-124860] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:33:08.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:33:08.918 [DEBUG] [Thread-124863] [transport.py] [_log()] starting thread (client mode): 0xa5197ca0
2025-12-03T22:33:08.918 [DEBUG] [Thread-124863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:33:08.932 [DEBUG] [Thread-124863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:33:08.932 [INFO] [Thread-124863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] client lang: <none>
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] server lang: <none>
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] kex follows: False
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] Compression: none
2025-12-03T22:33:08.940 [DEBUG] [Thread-124863] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:33:08.994 [DEBUG] [Thread-124863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:33:08.995 [DEBUG] [Thread-124863] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:33:08.995 [DEBUG] [Thread-124863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:33:08.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:33:08.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:33:09.052 [DEBUG] [Thread-124863] [transport.py] [_log()] userauth is OK
2025-12-03T22:33:09.052 [DEBUG] [Thread-124863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:33:09.052 [DEBUG] [Thread-124863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:33:09.052 [DEBUG] [Thread-124863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:33:09.052 [DEBUG] [Thread-124863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:33:09.066 [INFO] [Thread-124863] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:33:09.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:33:09.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:33:09.880 [DEBUG] [Thread-124863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:33:09.880 [DEBUG] [Thread-124863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:33:09.928 [DEBUG] [Thread-124863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:33:09.928 [DEBUG] [Thread-124863] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:33:09.937 [DEBUG] [Thread-124863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:33:09.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:33:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:33:09.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:33:09.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:33:09.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:33:09.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:33:09.970 [DEBUG] [Thread-124863] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:33:13.196 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:15.929 [DEBUG] [Thread-124865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:18.633 [DEBUG] [Thread-124866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:33.611 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:33.698 [DEBUG] [Thread-124867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:39.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:33:39.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:33:39.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:33:40.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 33, 29), 15.57, 34.67, 0.0, 22.83, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:33:40.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:33:29
2025-12-03T22:33:40.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:33:40.950 [DEBUG] [Thread-124868] [transport.py] [_log()] starting thread (client mode): 0xa51e4760
2025-12-03T22:33:40.950 [DEBUG] [Thread-124868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:33:40.970 [DEBUG] [Thread-124868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:33:40.971 [INFO] [Thread-124868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:33:40.973 [DEBUG] [Thread-124868] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] client lang: <none>
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] server lang: <none>
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] kex follows: False
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] Compression: none
2025-12-03T22:33:40.974 [DEBUG] [Thread-124868] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:33:40.995 [DEBUG] [Thread-124868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:33:40.995 [DEBUG] [Thread-124868] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:33:40.996 [DEBUG] [Thread-124868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:33:40.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:33:40.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:33:40.998 [DEBUG] [Thread-124868] [transport.py] [_log()] userauth is OK
2025-12-03T22:33:40.998 [DEBUG] [Thread-124868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:33:40.998 [DEBUG] [Thread-124868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:33:40.998 [DEBUG] [Thread-124868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:33:40.998 [DEBUG] [Thread-124868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:33:41.022 [INFO] [Thread-124868] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:33:41.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:33:41.673 [DEBUG] [Thread-124868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:33:41.673 [DEBUG] [Thread-124868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:33:41.674 [DEBUG] [Thread-124868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:33:41.714 [DEBUG] [Thread-124868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:33:41.714 [DEBUG] [Thread-124868] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:33:41.717 [DEBUG] [Thread-124868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:33:41.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:33:41.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:33:41.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:33:41.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:33:41.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:33:41.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:33:41.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:33:41.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:33:41.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:33:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.855952 -999.00  +16.10  16.44     39   +2.40 1 1 1 1 1     0    0 13.46 -13.54 ZNESW 18.8 16.4 133.6 25.3 16.2 -25.3 16.1 -24.8 15.9 -23.2 16.1 -23.9
2025-12-03T22:33:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:33:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:33:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.855952
2025-12-03T22:33:41.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:33:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:33:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:33:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:33:41.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:33:41.749 [DEBUG] [Thread-124868] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:33:41.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:33:29', tmtdew=15.57, humidity=34.67, cloud=0.0, wind=22.83, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:33:29', seeing=0.7, atlas_timestamp='2025-12-03T20:32:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.06424999999999947, 0.010249999999999204, 0.05275000000000141, 0.045499999999998764, -0.00849999999999973, 0.056250000000000355, 0.08099999999999952, -0.18624999999999936, -0.010500000000000398, 0.03849999999999909, 0.06424999999999947, -0.028499999999999304, 0.04400000000000048, 0.036249999999999005, -0.0365000000000002, 0.04649999999999821, -0.028249999999999886, 0.026999999999999247, 0.04899999999999949, 0.022749999999998494, 0.09799999999999898, 0.06874999999999787, 0.006250000000001421, -0.25624999999999964, 0.013499999999998735, 0.02200000000000024, 0.05975000000000108, 0.10850000000000115, 0.13049999999999962, 0.13400000000000034, 0.02400000000000091, 0.10150000000000148, 0.021249999999998437], zp_timestamp='2025-12-03T20:32:00')
2025-12-03T22:33:41.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:33:41.860 [DEBUG] [Thread-124871] [transport.py] [_log()] starting thread (client mode): 0xa51e58d0
2025-12-03T22:33:41.861 [DEBUG] [Thread-124871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:33:41.881 [DEBUG] [Thread-124871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:33:41.882 [INFO] [Thread-124871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:33:41.889 [DEBUG] [Thread-124871] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:33:41.889 [DEBUG] [Thread-124871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:33:41.889 [DEBUG] [Thread-124871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] client lang: <none>
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] server lang: <none>
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] kex follows: False
2025-12-03T22:33:41.890 [DEBUG] [Thread-124871] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] Compression: none
2025-12-03T22:33:41.891 [DEBUG] [Thread-124871] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:33:41.949 [DEBUG] [Thread-124871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:33:41.949 [DEBUG] [Thread-124871] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:33:41.950 [DEBUG] [Thread-124871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:33:41.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:33:41.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:33:42.007 [DEBUG] [Thread-124871] [transport.py] [_log()] userauth is OK
2025-12-03T22:33:42.008 [DEBUG] [Thread-124871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:33:42.008 [DEBUG] [Thread-124871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:33:42.008 [DEBUG] [Thread-124871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:33:42.008 [DEBUG] [Thread-124871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:33:42.028 [INFO] [Thread-124871] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:33:42.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:33:42.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:33:42.874 [DEBUG] [Thread-124871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:33:42.875 [DEBUG] [Thread-124871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:33:42.923 [DEBUG] [Thread-124871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:33:42.923 [DEBUG] [Thread-124871] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:33:42.932 [DEBUG] [Thread-124871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:33:42.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:33:42.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:33:42.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:33:42.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:33:42.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:33:42.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:33:42.964 [DEBUG] [Thread-124871] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:33:48.738 [DEBUG] [Thread-124873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:33:54.067 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:03.788 [DEBUG] [Thread-124874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:04.600 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:04.601 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:34:12.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:34:12.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:34:13.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 34, 1), 15.63, 34.67, 0.0, 23.04, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:34:13.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:34:01
2025-12-03T22:34:13.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:34:13.943 [DEBUG] [Thread-124875] [transport.py] [_log()] starting thread (client mode): 0x9fd23820
2025-12-03T22:34:13.943 [DEBUG] [Thread-124875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:34:13.954 [DEBUG] [Thread-124875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:34:13.954 [INFO] [Thread-124875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] client lang: <none>
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] server lang: <none>
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] kex follows: False
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:34:13.958 [DEBUG] [Thread-124875] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:34:13.959 [DEBUG] [Thread-124875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:34:13.959 [DEBUG] [Thread-124875] [transport.py] [_log()] Compression: none
2025-12-03T22:34:13.959 [DEBUG] [Thread-124875] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:34:13.975 [DEBUG] [Thread-124875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:34:13.976 [DEBUG] [Thread-124875] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:34:13.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:34:13.977 [DEBUG] [Thread-124875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:34:13.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:34:13.979 [DEBUG] [Thread-124875] [transport.py] [_log()] userauth is OK
2025-12-03T22:34:13.979 [DEBUG] [Thread-124875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:34:13.979 [DEBUG] [Thread-124875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:34:13.979 [DEBUG] [Thread-124875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:34:13.979 [DEBUG] [Thread-124875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:34:14.000 [INFO] [Thread-124875] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:34:14.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:34:14.490 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:14.611 [DEBUG] [Thread-124875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:34:14.612 [DEBUG] [Thread-124875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:34:14.612 [DEBUG] [Thread-124875] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:34:14.612 [DEBUG] [Thread-124875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:34:14.612 [DEBUG] [Thread-124875] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:34:14.614 [DEBUG] [Thread-124875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:34:14.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:34:14.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:34:14.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:34:14.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:34:14.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:34:14.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:34:14.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:34:14.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.856647 -999.00  +16.00  17.33     39   +2.30 1 1 1 1 1     0    0 13.31 -10.64 ZNESW 15.5 17.3 135.2 20.6 16.2 -25.4 16.1 -24.9 15.9 -23.3 16.2 -24.1
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.856647
2025-12-03T22:34:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:34:14.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:34:14.638 [DEBUG] [Thread-124875] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:34:14.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:34:14.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:34:14.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:34:14.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:34:01', tmtdew=15.63, humidity=34.67, cloud=0.0, wind=23.04, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:34:01', seeing=0.67, atlas_timestamp='2025-12-03T20:33:34.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.06424999999999947, 0.010249999999999204, 0.05275000000000141, 0.045499999999998764, -0.00849999999999973, 0.056250000000000355, 0.08099999999999952, -0.18624999999999936, -0.010500000000000398, 0.03849999999999909, 0.06424999999999947, -0.028499999999999304, 0.04400000000000048, 0.036249999999999005, -0.0365000000000002, 0.04649999999999821, -0.028249999999999886, 0.026999999999999247, 0.04899999999999949, 0.022749999999998494, 0.09799999999999898, 0.06874999999999787, 0.006250000000001421, -0.25624999999999964, 0.013499999999998735, 0.02200000000000024, 0.05975000000000108, 0.10850000000000115, 0.13049999999999962, 0.13400000000000034, 0.02400000000000091, 0.10150000000000148, 0.021249999999998437], zp_timestamp='2025-12-03T20:32:00')
2025-12-03T22:34:14.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:34:14.742 [DEBUG] [Thread-124878] [transport.py] [_log()] starting thread (client mode): 0xa5160490
2025-12-03T22:34:14.742 [DEBUG] [Thread-124878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:34:14.757 [DEBUG] [Thread-124878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:34:14.757 [INFO] [Thread-124878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:34:14.764 [DEBUG] [Thread-124878] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] client lang: <none>
2025-12-03T22:34:14.765 [DEBUG] [Thread-124878] [transport.py] [_log()] server lang: <none>
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] kex follows: False
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] Compression: none
2025-12-03T22:34:14.766 [DEBUG] [Thread-124878] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:34:14.824 [DEBUG] [Thread-124878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:34:14.825 [DEBUG] [Thread-124878] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:34:14.825 [DEBUG] [Thread-124878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:34:14.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:34:14.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:34:14.881 [DEBUG] [Thread-124878] [transport.py] [_log()] userauth is OK
2025-12-03T22:34:14.882 [DEBUG] [Thread-124878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:34:14.882 [DEBUG] [Thread-124878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:34:14.882 [DEBUG] [Thread-124878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:34:14.882 [DEBUG] [Thread-124878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:34:14.901 [INFO] [Thread-124878] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:34:14.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:34:14.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:34:15.748 [DEBUG] [Thread-124878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:34:15.748 [DEBUG] [Thread-124878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:34:15.796 [DEBUG] [Thread-124878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:34:15.796 [DEBUG] [Thread-124878] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:34:15.805 [DEBUG] [Thread-124878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:34:15.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:34:15.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:34:15.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:34:15.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:34:15.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:34:15.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:34:15.843 [DEBUG] [Thread-124878] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:34:16.006 [DEBUG] [Thread-124880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:18.817 [DEBUG] [Thread-124881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:33.880 [DEBUG] [Thread-124882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:34.908 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:45.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:34:45.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:34:45.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:34:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 34, 33), 15.78, 34.3, 0.0, 29.32, 16.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:34:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:34:33
2025-12-03T22:34:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:34:46.801 [DEBUG] [Thread-124883] [transport.py] [_log()] starting thread (client mode): 0xa51623b0
2025-12-03T22:34:46.802 [DEBUG] [Thread-124883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:34:46.816 [DEBUG] [Thread-124883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:34:46.816 [INFO] [Thread-124883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] client lang: <none>
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] server lang: <none>
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] kex follows: False
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] Compression: none
2025-12-03T22:34:46.819 [DEBUG] [Thread-124883] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:34:46.835 [DEBUG] [Thread-124883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:34:46.836 [DEBUG] [Thread-124883] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:34:46.836 [DEBUG] [Thread-124883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:34:46.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:34:46.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:34:46.838 [DEBUG] [Thread-124883] [transport.py] [_log()] userauth is OK
2025-12-03T22:34:46.838 [DEBUG] [Thread-124883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:34:46.839 [DEBUG] [Thread-124883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:34:46.839 [DEBUG] [Thread-124883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:34:46.839 [DEBUG] [Thread-124883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:34:46.874 [INFO] [Thread-124883] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:34:46.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:34:47.495 [DEBUG] [Thread-124883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:34:47.495 [DEBUG] [Thread-124883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:34:47.495 [DEBUG] [Thread-124883] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:34:47.536 [DEBUG] [Thread-124883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:34:47.536 [DEBUG] [Thread-124883] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:34:47.539 [DEBUG] [Thread-124883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:34:47.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:34:47.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:34:47.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:34:47.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:34:47.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:34:47.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:34:47.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:34:47.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.856994 -999.00  +16.00  12.64     39   +2.30 1 1 1 1 1     0    0 13.43 -9.24 ZNESW 19.7 12.6 139.8 19.6 16.2 -25.4 16.1 -24.7 15.9 -23.2 16.2 -24.1
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.856994
2025-12-03T22:34:47.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:34:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:34:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:34:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:34:47.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:34:47.563 [DEBUG] [Thread-124883] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:34:47.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:34:33', tmtdew=15.78, humidity=34.3, cloud=0.0, wind=29.32, temperature=16.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:34:33', seeing=0.73, atlas_timestamp='2025-12-03T20:34:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.06424999999999947, 0.010249999999999204, 0.05275000000000141, 0.045499999999998764, -0.00849999999999973, 0.056250000000000355, 0.08099999999999952, -0.18624999999999936, -0.010500000000000398, 0.03849999999999909, 0.06424999999999947, -0.028499999999999304, 0.04400000000000048, 0.036249999999999005, -0.0365000000000002, 0.04649999999999821, -0.028249999999999886, 0.026999999999999247, 0.04899999999999949, 0.022749999999998494, 0.09799999999999898, 0.06874999999999787, 0.006250000000001421, -0.25624999999999964, 0.013499999999998735, 0.02200000000000024, 0.05975000000000108, 0.10850000000000115, 0.13049999999999962, 0.13400000000000034, 0.02400000000000091, 0.10150000000000148, 0.021249999999998437], zp_timestamp='2025-12-03T20:32:00')
2025-12-03T22:34:47.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:34:47.666 [DEBUG] [Thread-124886] [transport.py] [_log()] starting thread (client mode): 0xa5161420
2025-12-03T22:34:47.666 [DEBUG] [Thread-124886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:34:47.681 [DEBUG] [Thread-124886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:34:47.681 [INFO] [Thread-124886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] client lang: <none>
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] server lang: <none>
2025-12-03T22:34:47.689 [DEBUG] [Thread-124886] [transport.py] [_log()] kex follows: False
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] Compression: none
2025-12-03T22:34:47.690 [DEBUG] [Thread-124886] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:34:47.745 [DEBUG] [Thread-124886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:34:47.746 [DEBUG] [Thread-124886] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:34:47.746 [DEBUG] [Thread-124886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:34:47.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:34:47.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:34:47.802 [DEBUG] [Thread-124886] [transport.py] [_log()] userauth is OK
2025-12-03T22:34:47.802 [DEBUG] [Thread-124886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:34:47.802 [DEBUG] [Thread-124886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:34:47.802 [DEBUG] [Thread-124886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:34:47.802 [DEBUG] [Thread-124886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:34:47.821 [INFO] [Thread-124886] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:34:47.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:34:47.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:34:48.676 [DEBUG] [Thread-124886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:34:48.676 [DEBUG] [Thread-124886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:34:48.724 [DEBUG] [Thread-124886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:34:48.724 [DEBUG] [Thread-124886] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:34:48.733 [DEBUG] [Thread-124886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:34:48.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:34:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:34:48.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:34:48.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:34:48.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:34:48.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:34:48.768 [DEBUG] [Thread-124886] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:34:48.921 [DEBUG] [Thread-124888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:34:55.375 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:03.989 [DEBUG] [Thread-124889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:04.803 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:04.805 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:15.820 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:16.078 [DEBUG] [Thread-124890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:18.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:35:18.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:35:18.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:35:19.020 [DEBUG] [Thread-124891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 35, 5), 15.61, 34.57, 0.0, 21.86, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:35:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:35:05
2025-12-03T22:35:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:35:19.729 [DEBUG] [Thread-124892] [transport.py] [_log()] starting thread (client mode): 0xa5163d30
2025-12-03T22:35:19.729 [DEBUG] [Thread-124892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:35:19.750 [DEBUG] [Thread-124892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:35:19.750 [INFO] [Thread-124892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:35:19.753 [DEBUG] [Thread-124892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] client lang: <none>
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] server lang: <none>
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] kex follows: False
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:35:19.754 [DEBUG] [Thread-124892] [transport.py] [_log()] Compression: none
2025-12-03T22:35:19.755 [DEBUG] [Thread-124892] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:35:19.772 [DEBUG] [Thread-124892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:35:19.772 [DEBUG] [Thread-124892] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:35:19.773 [DEBUG] [Thread-124892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:35:19.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:35:19.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:35:19.775 [DEBUG] [Thread-124892] [transport.py] [_log()] userauth is OK
2025-12-03T22:35:19.775 [DEBUG] [Thread-124892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:35:19.775 [DEBUG] [Thread-124892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:35:19.775 [DEBUG] [Thread-124892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:35:19.775 [DEBUG] [Thread-124892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:35:19.793 [INFO] [Thread-124892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:35:19.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:35:20.415 [DEBUG] [Thread-124892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:35:20.415 [DEBUG] [Thread-124892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:35:20.415 [DEBUG] [Thread-124892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:35:20.456 [DEBUG] [Thread-124892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:35:20.456 [DEBUG] [Thread-124892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:35:20.459 [DEBUG] [Thread-124892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:35:20.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:35:20.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:35:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:35:20.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:35:20.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:35:20.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:35:20.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:35:20.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.857341 -999.00  +16.00  18.06     39   +2.30 1 1 1 1 1     0    0 13.47 -8.72 ZNESW 16.4 18.1 132.8 25.9 16.2 -25.3 16.1 -24.8 15.9 -23.1 16.1 -24.0
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.857341
2025-12-03T22:35:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:35:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:35:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:35:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:35:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:35:20.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:35:05', tmtdew=15.61, humidity=34.57, cloud=0.0, wind=21.86, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:35:05', seeing=0.73, atlas_timestamp='2025-12-03T20:34:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.06424999999999947, 0.010249999999999204, 0.05275000000000141, 0.045499999999998764, -0.00849999999999973, 0.056250000000000355, 0.08099999999999952, -0.18624999999999936, -0.010500000000000398, 0.03849999999999909, 0.06424999999999947, -0.028499999999999304, 0.04400000000000048, 0.036249999999999005, -0.0365000000000002, 0.04649999999999821, -0.028249999999999886, 0.026999999999999247, 0.04899999999999949, 0.022749999999998494, 0.09799999999999898, 0.06874999999999787, 0.006250000000001421, -0.25624999999999964, 0.013499999999998735, 0.02200000000000024, 0.05975000000000108, 0.10850000000000115, 0.13049999999999962, 0.13400000000000034, 0.02400000000000091, 0.10150000000000148, 0.021249999999998437], zp_timestamp='2025-12-03T20:32:00')
2025-12-03T22:35:20.484 [DEBUG] [Thread-124892] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:35:20.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:35:20.587 [DEBUG] [Thread-124895] [transport.py] [_log()] starting thread (client mode): 0xa5162200
2025-12-03T22:35:20.587 [DEBUG] [Thread-124895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:35:20.601 [DEBUG] [Thread-124895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:35:20.602 [INFO] [Thread-124895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:35:20.609 [DEBUG] [Thread-124895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:35:20.609 [DEBUG] [Thread-124895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:35:20.609 [DEBUG] [Thread-124895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:35:20.609 [DEBUG] [Thread-124895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:20.609 [DEBUG] [Thread-124895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] client lang: <none>
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] server lang: <none>
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] kex follows: False
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] Compression: none
2025-12-03T22:35:20.610 [DEBUG] [Thread-124895] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:35:20.667 [DEBUG] [Thread-124895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:35:20.668 [DEBUG] [Thread-124895] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:35:20.668 [DEBUG] [Thread-124895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:35:20.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:35:20.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:35:20.726 [DEBUG] [Thread-124895] [transport.py] [_log()] userauth is OK
2025-12-03T22:35:20.726 [DEBUG] [Thread-124895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:35:20.726 [DEBUG] [Thread-124895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:35:20.726 [DEBUG] [Thread-124895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:35:20.726 [DEBUG] [Thread-124895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:35:20.744 [INFO] [Thread-124895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:35:20.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:35:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:35:21.597 [DEBUG] [Thread-124895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:35:21.597 [DEBUG] [Thread-124895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:35:21.645 [DEBUG] [Thread-124895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:35:21.645 [DEBUG] [Thread-124895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:35:21.653 [DEBUG] [Thread-124895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:35:21.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:35:21.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:35:21.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:35:21.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:35:21.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:35:21.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:35:21.688 [DEBUG] [Thread-124895] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:35:34.054 [DEBUG] [Thread-124897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:36.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:49.133 [DEBUG] [Thread-124898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:35:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:35:51.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:35:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:35:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 35, 38), 15.64, 34.64, 0.0, 22.32, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:35:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:35:38
2025-12-03T22:35:52.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:35:52.664 [DEBUG] [Thread-124899] [transport.py] [_log()] starting thread (client mode): 0xa5160460
2025-12-03T22:35:52.664 [DEBUG] [Thread-124899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:35:52.684 [DEBUG] [Thread-124899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:35:52.684 [INFO] [Thread-124899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:35:52.687 [DEBUG] [Thread-124899] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:35:52.688 [DEBUG] [Thread-124899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:35:52.689 [DEBUG] [Thread-124899] [transport.py] [_log()] client lang: <none>
2025-12-03T22:35:52.689 [DEBUG] [Thread-124899] [transport.py] [_log()] server lang: <none>
2025-12-03T22:35:52.689 [DEBUG] [Thread-124899] [transport.py] [_log()] kex follows: False
2025-12-03T22:35:52.689 [DEBUG] [Thread-124899] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:35:52.689 [DEBUG] [Thread-124899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:35:52.690 [DEBUG] [Thread-124899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:35:52.690 [DEBUG] [Thread-124899] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:35:52.690 [DEBUG] [Thread-124899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:35:52.690 [DEBUG] [Thread-124899] [transport.py] [_log()] Compression: none
2025-12-03T22:35:52.690 [DEBUG] [Thread-124899] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:35:52.709 [DEBUG] [Thread-124899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:35:52.710 [DEBUG] [Thread-124899] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:35:52.710 [DEBUG] [Thread-124899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:35:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:35:52.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:35:52.712 [DEBUG] [Thread-124899] [transport.py] [_log()] userauth is OK
2025-12-03T22:35:52.712 [DEBUG] [Thread-124899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:35:52.712 [DEBUG] [Thread-124899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:35:52.712 [DEBUG] [Thread-124899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:35:52.713 [DEBUG] [Thread-124899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:35:52.727 [INFO] [Thread-124899] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:35:52.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:35:53.508 [DEBUG] [Thread-124899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:35:53.508 [DEBUG] [Thread-124899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:35:53.508 [DEBUG] [Thread-124899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:35:53.550 [DEBUG] [Thread-124899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:35:53.550 [DEBUG] [Thread-124899] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:35:53.553 [DEBUG] [Thread-124899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:35:53.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:35:53.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:35:53.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:35:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:35:53.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:35:53.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:35:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.857688 -999.00  +16.00  19.93     39   +2.30 1 1 1 1 1     0    0 13.21 -8.76 ZNESW 16.9 19.9 142.8 21.7 16.2 -25.5 16.1 -24.8 15.9 -23.1 16.1 -24.0
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:35:53.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.857688
2025-12-03T22:35:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:35:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:35:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:35:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:35:53.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:35:53.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:35:38', tmtdew=15.64, humidity=34.64, cloud=0.0, wind=22.32, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:35:38', seeing=0.76, atlas_timestamp='2025-12-03T20:35:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:35:53.577 [DEBUG] [Thread-124899] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:35:53.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:35:53.681 [DEBUG] [Thread-124902] [transport.py] [_log()] starting thread (client mode): 0xa5161390
2025-12-03T22:35:53.681 [DEBUG] [Thread-124902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:35:53.696 [DEBUG] [Thread-124902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:35:53.696 [INFO] [Thread-124902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:35:53.704 [DEBUG] [Thread-124902] [transport.py] [_log()] client lang: <none>
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] server lang: <none>
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] kex follows: False
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] Compression: none
2025-12-03T22:35:53.705 [DEBUG] [Thread-124902] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:35:53.762 [DEBUG] [Thread-124902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:35:53.763 [DEBUG] [Thread-124902] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:35:53.763 [DEBUG] [Thread-124902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:35:53.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:35:53.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:35:53.819 [DEBUG] [Thread-124902] [transport.py] [_log()] userauth is OK
2025-12-03T22:35:53.819 [DEBUG] [Thread-124902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:35:53.819 [DEBUG] [Thread-124902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:35:53.819 [DEBUG] [Thread-124902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:35:53.820 [DEBUG] [Thread-124902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:35:53.838 [INFO] [Thread-124902] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:35:53.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:35:53.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:35:54.656 [DEBUG] [Thread-124902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:35:54.656 [DEBUG] [Thread-124902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:35:54.704 [DEBUG] [Thread-124902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:35:54.704 [DEBUG] [Thread-124902] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:35:54.713 [DEBUG] [Thread-124902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:35:54.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:35:54.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:35:54.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:35:54.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:35:54.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:35:54.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:35:54.746 [DEBUG] [Thread-124902] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:35:56.775 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:04.172 [DEBUG] [Thread-124904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:05.100 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:05.101 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:16.143 [DEBUG] [Thread-124905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:17.192 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:19.239 [DEBUG] [Thread-124906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:24.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:36:24.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:36:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:36:25.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 36, 10), 15.6, 34.7, 0.0, 22.43, 16.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:36:25.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:36:10
2025-12-03T22:36:25.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:36:25.730 [DEBUG] [Thread-124907] [transport.py] [_log()] starting thread (client mode): 0xa5163160
2025-12-03T22:36:25.730 [DEBUG] [Thread-124907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:36:25.751 [DEBUG] [Thread-124907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:36:25.751 [INFO] [Thread-124907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] client lang: <none>
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] server lang: <none>
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] kex follows: False
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:36:25.755 [DEBUG] [Thread-124907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:36:25.756 [DEBUG] [Thread-124907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:36:25.756 [DEBUG] [Thread-124907] [transport.py] [_log()] Compression: none
2025-12-03T22:36:25.756 [DEBUG] [Thread-124907] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:36:25.773 [DEBUG] [Thread-124907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:36:25.773 [DEBUG] [Thread-124907] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:36:25.774 [DEBUG] [Thread-124907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:36:25.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:36:25.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:36:25.776 [DEBUG] [Thread-124907] [transport.py] [_log()] userauth is OK
2025-12-03T22:36:25.776 [DEBUG] [Thread-124907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:36:25.776 [DEBUG] [Thread-124907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:36:25.776 [DEBUG] [Thread-124907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:36:25.776 [DEBUG] [Thread-124907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:36:25.794 [INFO] [Thread-124907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:36:25.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:36:26.442 [DEBUG] [Thread-124907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:36:26.442 [DEBUG] [Thread-124907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:36:26.442 [DEBUG] [Thread-124907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:36:26.483 [DEBUG] [Thread-124907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:36:26.483 [DEBUG] [Thread-124907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:36:26.486 [DEBUG] [Thread-124907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:36:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:36:26.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:36:26.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:36:26.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:36:26.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:36:26.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:36:26.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:36:26.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.858035 -999.00  +16.00  20.74     39   +2.30 1 1 1 1 1     0    0 13.33 -8.22 ZNESW 18.8 20.7 136.8 26.4 16.2 -25.4 16.1 -24.7 15.9 -22.9 16.1 -23.9
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.858035
2025-12-03T22:36:26.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:36:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:36:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:36:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:36:26.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:36:26.510 [DEBUG] [Thread-124907] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:36:26.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:36:10', tmtdew=15.6, humidity=34.7, cloud=0.0, wind=22.43, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:36:10', seeing=0.87, atlas_timestamp='2025-12-03T20:35:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:36:26.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:36:26.613 [DEBUG] [Thread-124910] [transport.py] [_log()] starting thread (client mode): 0xa5162380
2025-12-03T22:36:26.614 [DEBUG] [Thread-124910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:36:26.628 [DEBUG] [Thread-124910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:36:26.628 [INFO] [Thread-124910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:26.641 [DEBUG] [Thread-124910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] client lang: <none>
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] server lang: <none>
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] kex follows: False
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:36:26.642 [DEBUG] [Thread-124910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:36:26.643 [DEBUG] [Thread-124910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:36:26.643 [DEBUG] [Thread-124910] [transport.py] [_log()] Compression: none
2025-12-03T22:36:26.643 [DEBUG] [Thread-124910] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:36:26.699 [DEBUG] [Thread-124910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:36:26.700 [DEBUG] [Thread-124910] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:36:26.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:36:26.701 [DEBUG] [Thread-124910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:36:26.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:36:26.755 [DEBUG] [Thread-124910] [transport.py] [_log()] userauth is OK
2025-12-03T22:36:26.755 [DEBUG] [Thread-124910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:36:26.755 [DEBUG] [Thread-124910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:36:26.755 [DEBUG] [Thread-124910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:36:26.756 [DEBUG] [Thread-124910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:36:26.775 [INFO] [Thread-124910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:36:26.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:36:26.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:36:27.591 [DEBUG] [Thread-124910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:36:27.591 [DEBUG] [Thread-124910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:36:27.639 [DEBUG] [Thread-124910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:36:27.639 [DEBUG] [Thread-124910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:36:27.648 [DEBUG] [Thread-124910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:36:27.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:36:27.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:36:27.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:36:27.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:36:27.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:36:27.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:36:27.682 [DEBUG] [Thread-124910] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:36:34.284 [DEBUG] [Thread-124912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:37.612 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:49.339 [DEBUG] [Thread-124913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:57.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:36:57.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:36:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:36:58.028 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:36:58.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 36, 42), 15.56, 34.8, 0.0, 21.84, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:36:58.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:36:42
2025-12-03T22:36:58.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:36:58.682 [DEBUG] [Thread-124914] [transport.py] [_log()] starting thread (client mode): 0xa51629e0
2025-12-03T22:36:58.682 [DEBUG] [Thread-124914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:36:58.702 [DEBUG] [Thread-124914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:36:58.702 [INFO] [Thread-124914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:36:58.705 [DEBUG] [Thread-124914] [transport.py] [_log()] client lang: <none>
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] server lang: <none>
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] kex follows: False
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] Compression: none
2025-12-03T22:36:58.706 [DEBUG] [Thread-124914] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:36:58.721 [DEBUG] [Thread-124914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:36:58.721 [DEBUG] [Thread-124914] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:36:58.722 [DEBUG] [Thread-124914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:36:58.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:36:58.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:36:58.722 [DEBUG] [Thread-124914] [transport.py] [_log()] userauth is OK
2025-12-03T22:36:58.722 [DEBUG] [Thread-124914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:36:58.723 [DEBUG] [Thread-124914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:36:58.723 [DEBUG] [Thread-124914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:36:58.723 [DEBUG] [Thread-124914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:36:58.733 [INFO] [Thread-124914] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:36:58.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:36:59.538 [DEBUG] [Thread-124914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:36:59.538 [DEBUG] [Thread-124914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:36:59.538 [DEBUG] [Thread-124914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:36:59.578 [DEBUG] [Thread-124914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:36:59.578 [DEBUG] [Thread-124914] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:36:59.581 [DEBUG] [Thread-124914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:36:59.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:36:59.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:36:59.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:36:59.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:36:59.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:36:59.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:36:59.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.858383 -999.00  +16.00  18.75     39   +2.40 1 1 1 1 1     0    0 13.33 -7.49 ZNESW 16.9 18.8 131.6 22.1 16.2 -25.3 16.1 -24.7 15.9 -23.1 16.2 -24.0
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.858383
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:36:59.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:36:42', tmtdew=15.56, humidity=34.8, cloud=0.0, wind=21.84, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:36:42', seeing=0.86, atlas_timestamp='2025-12-03T20:36:04.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:36:59.602 [DEBUG] [Thread-124914] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:36:59.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:36:59.694 [DEBUG] [Thread-124917] [transport.py] [_log()] starting thread (client mode): 0xa51610c0
2025-12-03T22:36:59.694 [DEBUG] [Thread-124917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:36:59.708 [DEBUG] [Thread-124917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:36:59.708 [INFO] [Thread-124917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:36:59.715 [DEBUG] [Thread-124917] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:36:59.715 [DEBUG] [Thread-124917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] client lang: <none>
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] server lang: <none>
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] kex follows: False
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] Compression: none
2025-12-03T22:36:59.716 [DEBUG] [Thread-124917] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:36:59.774 [DEBUG] [Thread-124917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:36:59.774 [DEBUG] [Thread-124917] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:36:59.774 [DEBUG] [Thread-124917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:36:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:36:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:36:59.831 [DEBUG] [Thread-124917] [transport.py] [_log()] userauth is OK
2025-12-03T22:36:59.831 [DEBUG] [Thread-124917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:36:59.831 [DEBUG] [Thread-124917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:36:59.831 [DEBUG] [Thread-124917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:36:59.831 [DEBUG] [Thread-124917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:36:59.847 [INFO] [Thread-124917] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:36:59.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:36:59.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:37:00.660 [DEBUG] [Thread-124917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:37:00.660 [DEBUG] [Thread-124917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:37:00.707 [DEBUG] [Thread-124917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:37:00.707 [DEBUG] [Thread-124917] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:37:00.716 [DEBUG] [Thread-124917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:37:00.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:37:00.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:37:00.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:37:00.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:37:00.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:37:00.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:37:00.748 [DEBUG] [Thread-124917] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:37:04.377 [DEBUG] [Thread-124919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:05.301 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:05.303 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:16.217 [DEBUG] [Thread-124920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:18.452 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:19.438 [DEBUG] [Thread-124921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:30.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:37:30.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:37:30.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:37:31.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 37, 14), 15.54, 34.83, 0.0, 22.34, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:37:31.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:37:14
2025-12-03T22:37:31.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:37:31.724 [DEBUG] [Thread-124922] [transport.py] [_log()] starting thread (client mode): 0xa5161c00
2025-12-03T22:37:31.724 [DEBUG] [Thread-124922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:37:31.745 [DEBUG] [Thread-124922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:37:31.745 [INFO] [Thread-124922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:37:31.748 [DEBUG] [Thread-124922] [transport.py] [_log()] client lang: <none>
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] server lang: <none>
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] kex follows: False
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] Compression: none
2025-12-03T22:37:31.749 [DEBUG] [Thread-124922] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:37:31.768 [DEBUG] [Thread-124922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:37:31.768 [DEBUG] [Thread-124922] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:37:31.769 [DEBUG] [Thread-124922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:37:31.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:37:31.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:37:31.771 [DEBUG] [Thread-124922] [transport.py] [_log()] userauth is OK
2025-12-03T22:37:31.771 [DEBUG] [Thread-124922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:37:31.771 [DEBUG] [Thread-124922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:37:31.771 [DEBUG] [Thread-124922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:37:31.771 [DEBUG] [Thread-124922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:37:31.795 [INFO] [Thread-124922] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:37:31.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:37:32.456 [DEBUG] [Thread-124922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:37:32.456 [DEBUG] [Thread-124922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:37:32.456 [DEBUG] [Thread-124922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:37:32.497 [DEBUG] [Thread-124922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:37:32.497 [DEBUG] [Thread-124922] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:37:32.501 [DEBUG] [Thread-124922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:37:32.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:37:32.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:37:32.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:37:32.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:37:32.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:37:32.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:37:32.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:37:32.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:37:32.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:37:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.859077 -999.00  +16.10  17.88     39   +2.40 1 1 1 1 1     0    0 13.60 -5.41 ZNESW 15.8 17.9 130.0 24.4 16.2 -25.3 16.1 -24.8 15.9 -23.0 16.2 -23.8
2025-12-03T22:37:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:37:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:37:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.859077
2025-12-03T22:37:32.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:37:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:37:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:37:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:37:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:37:32.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:37:14', tmtdew=15.54, humidity=34.83, cloud=0.0, wind=22.34, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:37:14', seeing=0.87, atlas_timestamp='2025-12-03T20:37:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:37:32.525 [DEBUG] [Thread-124922] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:37:32.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:37:32.629 [DEBUG] [Thread-124925] [transport.py] [_log()] starting thread (client mode): 0x9fd23640
2025-12-03T22:37:32.630 [DEBUG] [Thread-124925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:37:32.644 [DEBUG] [Thread-124925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:37:32.644 [INFO] [Thread-124925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:37:32.651 [DEBUG] [Thread-124925] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] client lang: <none>
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] server lang: <none>
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] kex follows: False
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:37:32.652 [DEBUG] [Thread-124925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:37:32.653 [DEBUG] [Thread-124925] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:37:32.653 [DEBUG] [Thread-124925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:37:32.653 [DEBUG] [Thread-124925] [transport.py] [_log()] Compression: none
2025-12-03T22:37:32.653 [DEBUG] [Thread-124925] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:37:32.711 [DEBUG] [Thread-124925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:37:32.712 [DEBUG] [Thread-124925] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:37:32.712 [DEBUG] [Thread-124925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:37:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:37:32.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:37:32.768 [DEBUG] [Thread-124925] [transport.py] [_log()] userauth is OK
2025-12-03T22:37:32.768 [DEBUG] [Thread-124925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:37:32.768 [DEBUG] [Thread-124925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:37:32.768 [DEBUG] [Thread-124925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:37:32.768 [DEBUG] [Thread-124925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:37:32.787 [INFO] [Thread-124925] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:37:32.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:37:32.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:37:33.600 [DEBUG] [Thread-124925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:37:33.600 [DEBUG] [Thread-124925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:37:33.648 [DEBUG] [Thread-124925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:37:33.648 [DEBUG] [Thread-124925] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:37:33.657 [DEBUG] [Thread-124925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:37:33.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:37:33.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:37:33.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:37:33.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:37:33.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:37:33.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:37:33.691 [DEBUG] [Thread-124925] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:37:34.475 [DEBUG] [Thread-124927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:38.908 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:49.522 [DEBUG] [Thread-124928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:37:59.404 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:03.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:38:03.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:38:03.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:38:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 37, 46), 15.56, 34.92, 0.0, 20.91, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:38:04.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:37:46
2025-12-03T22:38:04.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:38:04.559 [DEBUG] [Thread-124929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:04.651 [DEBUG] [Thread-124930] [transport.py] [_log()] starting thread (client mode): 0xa51632b0
2025-12-03T22:38:04.651 [DEBUG] [Thread-124930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:38:04.671 [DEBUG] [Thread-124930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:38:04.671 [INFO] [Thread-124930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] client lang: <none>
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] server lang: <none>
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] kex follows: False
2025-12-03T22:38:04.674 [DEBUG] [Thread-124930] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] Compression: none
2025-12-03T22:38:04.675 [DEBUG] [Thread-124930] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:38:04.695 [DEBUG] [Thread-124930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:38:04.695 [DEBUG] [Thread-124930] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:38:04.696 [DEBUG] [Thread-124930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:38:04.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:38:04.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:38:04.698 [DEBUG] [Thread-124930] [transport.py] [_log()] userauth is OK
2025-12-03T22:38:04.698 [DEBUG] [Thread-124930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:38:04.698 [DEBUG] [Thread-124930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:38:04.698 [DEBUG] [Thread-124930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:38:04.698 [DEBUG] [Thread-124930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:38:04.722 [INFO] [Thread-124930] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:38:04.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:38:05.459 [DEBUG] [Thread-124930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:38:05.459 [DEBUG] [Thread-124930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:38:05.459 [DEBUG] [Thread-124930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:38:05.500 [DEBUG] [Thread-124930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:38:05.500 [DEBUG] [Thread-124930] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:38:05.503 [DEBUG] [Thread-124930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:38:05.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:38:05.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:38:05.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:38:05.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:38:05.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:38:05.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:38:05.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:38:05.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:38:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:38:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.859424 -999.00  +16.10  16.06     39   +2.40 1 1 1 1 1     0    0 13.74 -5.27 ZNESW 15.3 16.1 140.4 21.4 16.2 -25.4 16.1 -24.8 15.9 -23.2 16.2 -23.9
2025-12-03T22:38:05.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:38:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:38:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.859424
2025-12-03T22:38:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:38:05.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:38:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:38:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:38:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:38:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:37:46', tmtdew=15.56, humidity=34.92, cloud=0.0, wind=20.91, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:37:46', seeing=0.88, atlas_timestamp='2025-12-03T20:37:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:38:05.526 [DEBUG] [Thread-124930] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:38:05.528 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:05.530 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:05.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:38:05.631 [DEBUG] [Thread-124933] [transport.py] [_log()] starting thread (client mode): 0xa51630d0
2025-12-03T22:38:05.632 [DEBUG] [Thread-124933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:38:05.647 [DEBUG] [Thread-124933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:38:05.647 [INFO] [Thread-124933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:38:05.654 [DEBUG] [Thread-124933] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] client lang: <none>
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] server lang: <none>
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] kex follows: False
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:38:05.655 [DEBUG] [Thread-124933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:38:05.656 [DEBUG] [Thread-124933] [transport.py] [_log()] Compression: none
2025-12-03T22:38:05.656 [DEBUG] [Thread-124933] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:38:05.712 [DEBUG] [Thread-124933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:38:05.713 [DEBUG] [Thread-124933] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:38:05.713 [DEBUG] [Thread-124933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:38:05.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:38:05.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:38:05.768 [DEBUG] [Thread-124933] [transport.py] [_log()] userauth is OK
2025-12-03T22:38:05.768 [DEBUG] [Thread-124933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:38:05.768 [DEBUG] [Thread-124933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:38:05.768 [DEBUG] [Thread-124933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:38:05.768 [DEBUG] [Thread-124933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:38:05.787 [INFO] [Thread-124933] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:38:05.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:38:05.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:38:06.669 [DEBUG] [Thread-124933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:38:06.670 [DEBUG] [Thread-124933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:38:06.718 [DEBUG] [Thread-124933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:38:06.718 [DEBUG] [Thread-124933] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:38:06.727 [DEBUG] [Thread-124933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:38:06.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:38:06.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:38:06.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:38:06.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:38:06.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:38:06.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:38:06.762 [DEBUG] [Thread-124933] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:38:16.279 [DEBUG] [Thread-124935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:19.591 [DEBUG] [Thread-124936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:19.947 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:34.644 [DEBUG] [Thread-124937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:38:36.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:38:36.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:38:37.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 38, 18), 15.6, 34.83, 0.0, 22.09, 16.04, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:38:37.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:38:18
2025-12-03T22:38:37.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:38:37.732 [DEBUG] [Thread-124938] [transport.py] [_log()] starting thread (client mode): 0x9fd21a80
2025-12-03T22:38:37.732 [DEBUG] [Thread-124938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:38:37.743 [DEBUG] [Thread-124938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:38:37.744 [INFO] [Thread-124938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] client lang: <none>
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] server lang: <none>
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] kex follows: False
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] Compression: none
2025-12-03T22:38:37.747 [DEBUG] [Thread-124938] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:38:37.762 [DEBUG] [Thread-124938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:38:37.763 [DEBUG] [Thread-124938] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:38:37.763 [DEBUG] [Thread-124938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:38:37.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:38:37.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:38:37.765 [DEBUG] [Thread-124938] [transport.py] [_log()] userauth is OK
2025-12-03T22:38:37.766 [DEBUG] [Thread-124938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:38:37.766 [DEBUG] [Thread-124938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:38:37.766 [DEBUG] [Thread-124938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:38:37.766 [DEBUG] [Thread-124938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:38:37.789 [INFO] [Thread-124938] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:38:37.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:38:38.421 [DEBUG] [Thread-124938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:38:38.421 [DEBUG] [Thread-124938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:38:38.421 [DEBUG] [Thread-124938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:38:38.462 [DEBUG] [Thread-124938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:38:38.462 [DEBUG] [Thread-124938] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:38:38.465 [DEBUG] [Thread-124938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:38:38.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:38:38.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:38:38.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:38:38.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:38:38.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:38:38.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:38:38.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:38:38.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.859772 -999.00  +16.10  19.62     39   +2.30 1 1 1 1 1     0    0 13.62 -4.74 ZNESW 22.0 19.6 126.0 23.7 16.2 -25.4 16.1 -24.8 15.9 -23.0 16.2 -24.1
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.859772
2025-12-03T22:38:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:38:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:38:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:38:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:38:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:38:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:38:18', tmtdew=15.6, humidity=34.83, cloud=0.0, wind=22.09, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:38:18', seeing=0.88, atlas_timestamp='2025-12-03T20:38:04.301', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:34:00')
2025-12-03T22:38:38.487 [DEBUG] [Thread-124938] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:38:38.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:38:38.599 [DEBUG] [Thread-124941] [transport.py] [_log()] starting thread (client mode): 0xa5160490
2025-12-03T22:38:38.599 [DEBUG] [Thread-124941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:38:38.613 [DEBUG] [Thread-124941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:38:38.614 [INFO] [Thread-124941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:38:38.621 [DEBUG] [Thread-124941] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:38:38.621 [DEBUG] [Thread-124941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:38:38.621 [DEBUG] [Thread-124941] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:38:38.621 [DEBUG] [Thread-124941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:38.621 [DEBUG] [Thread-124941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] client lang: <none>
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] server lang: <none>
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] kex follows: False
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] Compression: none
2025-12-03T22:38:38.622 [DEBUG] [Thread-124941] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:38:38.682 [DEBUG] [Thread-124941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:38:38.682 [DEBUG] [Thread-124941] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:38:38.683 [DEBUG] [Thread-124941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:38:38.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:38:38.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:38:38.740 [DEBUG] [Thread-124941] [transport.py] [_log()] userauth is OK
2025-12-03T22:38:38.740 [DEBUG] [Thread-124941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:38:38.741 [DEBUG] [Thread-124941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:38:38.741 [DEBUG] [Thread-124941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:38:38.741 [DEBUG] [Thread-124941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:38:38.760 [INFO] [Thread-124941] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:38:38.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:38:38.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:38:39.597 [DEBUG] [Thread-124941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:38:39.597 [DEBUG] [Thread-124941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:38:39.644 [DEBUG] [Thread-124941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:38:39.645 [DEBUG] [Thread-124941] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:38:39.653 [DEBUG] [Thread-124941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:38:39.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:38:39.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:38:39.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:38:39.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:38:39.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:38:39.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:38:39.687 [DEBUG] [Thread-124941] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:38:40.430 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:38:49.678 [DEBUG] [Thread-124943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:01.037 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:04.742 [DEBUG] [Thread-124944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:05.729 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:05.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:09.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:39:09.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:39:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:39:10.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 38, 50), 15.57, 34.77, 0.0, 22.74, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:39:10.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:38:50
2025-12-03T22:39:10.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:39:10.645 [DEBUG] [Thread-124945] [transport.py] [_log()] starting thread (client mode): 0x9fd218d0
2025-12-03T22:39:10.646 [DEBUG] [Thread-124945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:39:10.666 [DEBUG] [Thread-124945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:39:10.666 [INFO] [Thread-124945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:10.670 [DEBUG] [Thread-124945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] client lang: <none>
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] server lang: <none>
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] kex follows: False
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:39:10.671 [DEBUG] [Thread-124945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:39:10.672 [DEBUG] [Thread-124945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:39:10.672 [DEBUG] [Thread-124945] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:39:10.672 [DEBUG] [Thread-124945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:39:10.672 [DEBUG] [Thread-124945] [transport.py] [_log()] Compression: none
2025-12-03T22:39:10.672 [DEBUG] [Thread-124945] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:39:10.692 [DEBUG] [Thread-124945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:39:10.692 [DEBUG] [Thread-124945] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:39:10.693 [DEBUG] [Thread-124945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:39:10.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:39:10.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:39:10.694 [DEBUG] [Thread-124945] [transport.py] [_log()] userauth is OK
2025-12-03T22:39:10.695 [DEBUG] [Thread-124945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:39:10.695 [DEBUG] [Thread-124945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:39:10.695 [DEBUG] [Thread-124945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:39:10.695 [DEBUG] [Thread-124945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:39:10.719 [INFO] [Thread-124945] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:39:10.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:39:11.389 [DEBUG] [Thread-124945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:39:11.389 [DEBUG] [Thread-124945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:39:11.390 [DEBUG] [Thread-124945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:39:11.430 [DEBUG] [Thread-124945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:39:11.430 [DEBUG] [Thread-124945] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:39:11.432 [DEBUG] [Thread-124945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:39:11.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:39:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:39:11.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:39:11.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:39:11.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:39:11.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:39:11.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.860119 -999.00  +16.10  18.63     39   +2.40 1 1 1 1 1     0    0 13.46 -4.83 ZNESW 20.5 18.6 142.2 26.5 16.2 -25.4 16.1 -24.8 15.9 -23.2 16.1 -23.8
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:39:11.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.860119
2025-12-03T22:39:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:39:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:39:11.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:39:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:39:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:39:11.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:38:50', tmtdew=15.57, humidity=34.77, cloud=0.0, wind=22.74, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:38:50', seeing=1.06, atlas_timestamp='2025-12-03T20:38:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:38:00')
2025-12-03T22:39:11.457 [DEBUG] [Thread-124945] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:39:11.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:39:11.563 [DEBUG] [Thread-124948] [transport.py] [_log()] starting thread (client mode): 0x9fd23ac0
2025-12-03T22:39:11.563 [DEBUG] [Thread-124948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:39:11.578 [DEBUG] [Thread-124948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:39:11.579 [INFO] [Thread-124948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:39:11.586 [DEBUG] [Thread-124948] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:39:11.586 [DEBUG] [Thread-124948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:39:11.586 [DEBUG] [Thread-124948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:39:11.586 [DEBUG] [Thread-124948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] client lang: <none>
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] server lang: <none>
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] kex follows: False
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] Compression: none
2025-12-03T22:39:11.587 [DEBUG] [Thread-124948] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:39:11.644 [DEBUG] [Thread-124948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:39:11.644 [DEBUG] [Thread-124948] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:39:11.645 [DEBUG] [Thread-124948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:39:11.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:39:11.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:39:11.701 [DEBUG] [Thread-124948] [transport.py] [_log()] userauth is OK
2025-12-03T22:39:11.701 [DEBUG] [Thread-124948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:39:11.701 [DEBUG] [Thread-124948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:39:11.701 [DEBUG] [Thread-124948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:39:11.701 [DEBUG] [Thread-124948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:39:11.720 [INFO] [Thread-124948] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:39:11.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:39:11.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:39:12.561 [DEBUG] [Thread-124948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:39:12.561 [DEBUG] [Thread-124948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:39:12.612 [DEBUG] [Thread-124948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:39:12.612 [DEBUG] [Thread-124948] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:39:12.625 [DEBUG] [Thread-124948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:39:12.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:39:12.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:39:12.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:39:12.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:39:12.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:39:12.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:39:12.662 [DEBUG] [Thread-124948] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:39:16.337 [DEBUG] [Thread-124950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:19.779 [DEBUG] [Thread-124951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:21.600 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:34.830 [DEBUG] [Thread-124952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:42.204 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:39:42.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:39:42.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:39:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:39:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 39, 22), 15.57, 34.78, 0.0, 22.06, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:39:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:39:22
2025-12-03T22:39:43.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:39:43.643 [DEBUG] [Thread-124953] [transport.py] [_log()] starting thread (client mode): 0xa5163280
2025-12-03T22:39:43.643 [DEBUG] [Thread-124953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:39:43.664 [DEBUG] [Thread-124953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:39:43.664 [INFO] [Thread-124953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] client lang: <none>
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] server lang: <none>
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] kex follows: False
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:39:43.667 [DEBUG] [Thread-124953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:39:43.668 [DEBUG] [Thread-124953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:39:43.668 [DEBUG] [Thread-124953] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:39:43.668 [DEBUG] [Thread-124953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:39:43.668 [DEBUG] [Thread-124953] [transport.py] [_log()] Compression: none
2025-12-03T22:39:43.668 [DEBUG] [Thread-124953] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:39:43.688 [DEBUG] [Thread-124953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:39:43.689 [DEBUG] [Thread-124953] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:39:43.689 [DEBUG] [Thread-124953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:39:43.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:39:43.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:39:43.732 [DEBUG] [Thread-124953] [transport.py] [_log()] userauth is OK
2025-12-03T22:39:43.733 [DEBUG] [Thread-124953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:39:43.733 [DEBUG] [Thread-124953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:39:43.733 [DEBUG] [Thread-124953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:39:43.733 [DEBUG] [Thread-124953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:39:43.757 [INFO] [Thread-124953] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:39:43.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:39:44.397 [DEBUG] [Thread-124953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:39:44.398 [DEBUG] [Thread-124953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:39:44.398 [DEBUG] [Thread-124953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:39:44.439 [DEBUG] [Thread-124953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:39:44.439 [DEBUG] [Thread-124953] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:39:44.442 [DEBUG] [Thread-124953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:39:44.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:39:44.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:39:44.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:39:44.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:39:44.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:39:44.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:39:44.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:39:44.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.860466 -999.00  +16.00  16.65     39   +2.40 1 1 1 1 1     0    0 13.54 -4.72 ZNESW 16.4 16.6 133.4 21.4 16.3 -25.5 16.1 -24.9 15.8 -23.2 16.2 -24.2
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.860466
2025-12-03T22:39:44.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:39:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:39:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:39:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:39:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:39:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:39:22', tmtdew=15.57, humidity=34.78, cloud=0.0, wind=22.06, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:39:22', seeing=1.26, atlas_timestamp='2025-12-03T20:39:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:38:00')
2025-12-03T22:39:44.467 [DEBUG] [Thread-124953] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:39:44.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:39:44.572 [DEBUG] [Thread-124956] [transport.py] [_log()] starting thread (client mode): 0xa5160040
2025-12-03T22:39:44.573 [DEBUG] [Thread-124956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:39:44.587 [DEBUG] [Thread-124956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:39:44.587 [INFO] [Thread-124956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:39:44.594 [DEBUG] [Thread-124956] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] client lang: <none>
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] server lang: <none>
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] kex follows: False
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:39:44.595 [DEBUG] [Thread-124956] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:39:44.596 [DEBUG] [Thread-124956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:39:44.596 [DEBUG] [Thread-124956] [transport.py] [_log()] Compression: none
2025-12-03T22:39:44.596 [DEBUG] [Thread-124956] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:39:44.652 [DEBUG] [Thread-124956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:39:44.653 [DEBUG] [Thread-124956] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:39:44.653 [DEBUG] [Thread-124956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:39:44.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:39:44.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:39:44.709 [DEBUG] [Thread-124956] [transport.py] [_log()] userauth is OK
2025-12-03T22:39:44.709 [DEBUG] [Thread-124956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:39:44.709 [DEBUG] [Thread-124956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:39:44.709 [DEBUG] [Thread-124956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:39:44.709 [DEBUG] [Thread-124956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:39:44.729 [INFO] [Thread-124956] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:39:44.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:39:44.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:39:45.543 [DEBUG] [Thread-124956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:39:45.543 [DEBUG] [Thread-124956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:39:45.595 [DEBUG] [Thread-124956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:39:45.595 [DEBUG] [Thread-124956] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:39:45.604 [DEBUG] [Thread-124956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:39:45.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:39:45.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:39:45.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:39:45.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:39:45.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:39:45.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:39:45.638 [DEBUG] [Thread-124956] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:39:49.862 [DEBUG] [Thread-124958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:02.817 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:04.921 [DEBUG] [Thread-124959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:05.932 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:05.933 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:15.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:40:15.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:40:15.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:40:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 39, 54), 15.55, 34.83, 0.0, 22.25, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:40:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:39:54
2025-12-03T22:40:16.395 [DEBUG] [Thread-124960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:16.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:40:16.654 [DEBUG] [Thread-124961] [transport.py] [_log()] starting thread (client mode): 0xa5160130
2025-12-03T22:40:16.655 [DEBUG] [Thread-124961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:40:16.675 [DEBUG] [Thread-124961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:40:16.675 [INFO] [Thread-124961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] client lang: <none>
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] server lang: <none>
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] kex follows: False
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] Compression: none
2025-12-03T22:40:16.679 [DEBUG] [Thread-124961] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:40:16.697 [DEBUG] [Thread-124961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:40:16.697 [DEBUG] [Thread-124961] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:40:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:40:16.697 [DEBUG] [Thread-124961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:40:16.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:40:16.698 [DEBUG] [Thread-124961] [transport.py] [_log()] userauth is OK
2025-12-03T22:40:16.698 [DEBUG] [Thread-124961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:40:16.698 [DEBUG] [Thread-124961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:40:16.698 [DEBUG] [Thread-124961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:40:16.698 [DEBUG] [Thread-124961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:40:16.713 [INFO] [Thread-124961] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:40:16.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:40:17.346 [DEBUG] [Thread-124961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:40:17.346 [DEBUG] [Thread-124961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:40:17.347 [DEBUG] [Thread-124961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:40:17.387 [DEBUG] [Thread-124961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:40:17.387 [DEBUG] [Thread-124961] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:40:17.390 [DEBUG] [Thread-124961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:40:17.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:40:17.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:40:17.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:40:17.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:40:17.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:40:17.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:40:17.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:40:17.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:40:17.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:40:17.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.860813 -999.00  +16.00  17.14     39   +2.30 1 1 1 1 1     0    0 13.49 -4.98 ZNESW 17.6 17.1 128.0 22.9 16.2 -25.5 16.1 -24.8 15.9 -23.1 16.1 -24.0
2025-12-03T22:40:17.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:40:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:40:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.860813
2025-12-03T22:40:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:40:17.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:40:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:40:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:40:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:40:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:39:54', tmtdew=15.55, humidity=34.83, cloud=0.0, wind=22.25, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:39:55', seeing=0.97, atlas_timestamp='2025-12-03T20:39:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:38:00')
2025-12-03T22:40:17.429 [DEBUG] [Thread-124961] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:40:17.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:40:17.540 [DEBUG] [Thread-124964] [transport.py] [_log()] starting thread (client mode): 0xa5163100
2025-12-03T22:40:17.541 [DEBUG] [Thread-124964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:40:17.562 [DEBUG] [Thread-124964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:40:17.562 [INFO] [Thread-124964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:40:17.572 [DEBUG] [Thread-124964] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:40:17.573 [DEBUG] [Thread-124964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] client lang: <none>
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] server lang: <none>
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] kex follows: False
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:40:17.574 [DEBUG] [Thread-124964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:40:17.575 [DEBUG] [Thread-124964] [transport.py] [_log()] Compression: none
2025-12-03T22:40:17.575 [DEBUG] [Thread-124964] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:40:17.630 [DEBUG] [Thread-124964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:40:17.631 [DEBUG] [Thread-124964] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:40:17.631 [DEBUG] [Thread-124964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:40:17.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:40:17.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:40:17.689 [DEBUG] [Thread-124964] [transport.py] [_log()] userauth is OK
2025-12-03T22:40:17.690 [DEBUG] [Thread-124964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:40:17.690 [DEBUG] [Thread-124964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:40:17.690 [DEBUG] [Thread-124964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:40:17.690 [DEBUG] [Thread-124964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:40:17.709 [INFO] [Thread-124964] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:40:17.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:40:17.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:40:18.585 [DEBUG] [Thread-124964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:40:18.585 [DEBUG] [Thread-124964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:40:18.633 [DEBUG] [Thread-124964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:40:18.633 [DEBUG] [Thread-124964] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:40:18.643 [DEBUG] [Thread-124964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:40:18.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:40:18.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:40:18.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:40:18.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:40:18.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:40:18.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:40:18.684 [DEBUG] [Thread-124964] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:40:19.957 [DEBUG] [Thread-124966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:23.401 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:35.017 [DEBUG] [Thread-124967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:43.886 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:48.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:40:48.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:40:48.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:40:49.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 40, 26), 15.52, 34.88, 0.0, 22.07, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:40:49.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:40:26
2025-12-03T22:40:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:40:49.656 [DEBUG] [Thread-124968] [transport.py] [_log()] starting thread (client mode): 0x9fd23790
2025-12-03T22:40:49.656 [DEBUG] [Thread-124968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:40:49.676 [DEBUG] [Thread-124968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:40:49.676 [INFO] [Thread-124968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:40:49.677 [DEBUG] [Thread-124968] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:40:49.677 [DEBUG] [Thread-124968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] client lang: <none>
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] server lang: <none>
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] kex follows: False
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] Compression: none
2025-12-03T22:40:49.678 [DEBUG] [Thread-124968] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:40:49.690 [DEBUG] [Thread-124968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:40:49.690 [DEBUG] [Thread-124968] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:40:49.691 [DEBUG] [Thread-124968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:40:49.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:40:49.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:40:49.692 [DEBUG] [Thread-124968] [transport.py] [_log()] userauth is OK
2025-12-03T22:40:49.693 [DEBUG] [Thread-124968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:40:49.693 [DEBUG] [Thread-124968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:40:49.693 [DEBUG] [Thread-124968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:40:49.693 [DEBUG] [Thread-124968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:40:49.710 [INFO] [Thread-124968] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:40:49.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:40:50.060 [DEBUG] [Thread-124970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:40:50.331 [DEBUG] [Thread-124968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:40:50.331 [DEBUG] [Thread-124968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:40:50.331 [DEBUG] [Thread-124968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:40:50.372 [DEBUG] [Thread-124968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:40:50.372 [DEBUG] [Thread-124968] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:40:50.374 [DEBUG] [Thread-124968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:40:50.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:40:50.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:40:50.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:40:50.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:40:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:40:50.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:40:50.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.861508 -999.00  +16.00  17.73     40   +2.40 1 1 1 1 1     0    0 13.47 -3.54 ZNESW 16.8 17.7 126.0 22.4 16.2 -25.3 16.1 -24.8 15.8 -23.2 16.2 -24.0
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.861508
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:40:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:40:26', tmtdew=15.52, humidity=34.88, cloud=0.0, wind=22.07, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:40:27', seeing=0.91, atlas_timestamp='2025-12-03T20:40:34.291', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:38:00')
2025-12-03T22:40:50.392 [DEBUG] [Thread-124968] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:40:50.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:40:50.482 [DEBUG] [Thread-124972] [transport.py] [_log()] starting thread (client mode): 0x9fd22fe0
2025-12-03T22:40:50.482 [DEBUG] [Thread-124972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:40:50.497 [DEBUG] [Thread-124972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:40:50.497 [INFO] [Thread-124972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:40:50.504 [DEBUG] [Thread-124972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] client lang: <none>
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] server lang: <none>
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] kex follows: False
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] Compression: none
2025-12-03T22:40:50.505 [DEBUG] [Thread-124972] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:40:50.564 [DEBUG] [Thread-124972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:40:50.564 [DEBUG] [Thread-124972] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:40:50.564 [DEBUG] [Thread-124972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:40:50.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:40:50.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:40:50.621 [DEBUG] [Thread-124972] [transport.py] [_log()] userauth is OK
2025-12-03T22:40:50.621 [DEBUG] [Thread-124972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:40:50.621 [DEBUG] [Thread-124972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:40:50.621 [DEBUG] [Thread-124972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:40:50.621 [DEBUG] [Thread-124972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:40:50.635 [INFO] [Thread-124972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:40:50.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:40:50.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:40:51.490 [DEBUG] [Thread-124972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:40:51.490 [DEBUG] [Thread-124972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:40:51.538 [DEBUG] [Thread-124972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:40:51.538 [DEBUG] [Thread-124972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:40:51.547 [DEBUG] [Thread-124972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:40:51.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:40:51.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:40:51.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:40:51.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:40:51.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:40:51.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:40:51.580 [DEBUG] [Thread-124972] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:41:04.376 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:05.091 [DEBUG] [Thread-124974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:06.141 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:06.142 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:16.456 [DEBUG] [Thread-124975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:20.151 [DEBUG] [Thread-124976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:21.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:41:21.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:41:21.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:41:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 40, 59), 15.5, 34.93, 0.0, 22.39, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:41:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:40:59
2025-12-03T22:41:22.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:41:22.572 [DEBUG] [Thread-124977] [transport.py] [_log()] starting thread (client mode): 0xa514ce20
2025-12-03T22:41:22.572 [DEBUG] [Thread-124977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:41:22.592 [DEBUG] [Thread-124977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:41:22.592 [INFO] [Thread-124977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:41:22.595 [DEBUG] [Thread-124977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:41:22.595 [DEBUG] [Thread-124977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] client lang: <none>
2025-12-03T22:41:22.596 [DEBUG] [Thread-124977] [transport.py] [_log()] server lang: <none>
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] kex follows: False
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] Compression: none
2025-12-03T22:41:22.597 [DEBUG] [Thread-124977] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:41:22.615 [DEBUG] [Thread-124977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:41:22.616 [DEBUG] [Thread-124977] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:41:22.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:41:22.617 [DEBUG] [Thread-124977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:41:22.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:41:22.619 [DEBUG] [Thread-124977] [transport.py] [_log()] userauth is OK
2025-12-03T22:41:22.620 [DEBUG] [Thread-124977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:41:22.620 [DEBUG] [Thread-124977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:41:22.620 [DEBUG] [Thread-124977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:41:22.620 [DEBUG] [Thread-124977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:41:22.656 [INFO] [Thread-124977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:41:22.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:41:23.269 [DEBUG] [Thread-124977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:41:23.270 [DEBUG] [Thread-124977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:41:23.270 [DEBUG] [Thread-124977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:41:23.311 [DEBUG] [Thread-124977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:41:23.311 [DEBUG] [Thread-124977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:41:23.314 [DEBUG] [Thread-124977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:41:23.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:41:23.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:41:23.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:41:23.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:41:23.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:41:23.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:41:23.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.861855 -999.00  +16.00  18.04     39   +2.40 1 1 1 1 1     0    0 13.66 -3.46 ZNESW 19.6 18.0 134.0 22.9 16.2 -25.4 16.1 -24.8 15.8 -23.1 16.2 -24.0
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:41:23.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.861855
2025-12-03T22:41:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:41:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:41:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:41:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:41:23.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:41:23.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:40:59', tmtdew=15.5, humidity=34.93, cloud=0.0, wind=22.39, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:40:59', seeing=1.07, atlas_timestamp='2025-12-03T20:41:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[0.0007500000000000284, -0.0727499999999992, 0.021750000000000824, -0.04150000000000098, -0.012000000000000455, -0.025749999999998607, 0.0045000000000001705, -0.0012499999999988631, -0.0065000000000008384, 0.022999999999999687, 0.05274999999999963, -0.07000000000000028, 0.08199999999999896, 0.023249999999999105, -0.0259999999999998, -0.008000000000000895, -0.01774999999999949, 0.0235000000000003, 0.02999999999999936, 0.036249999999999005, 0.05599999999999916, 0.0007499999999982521, -0.059749999999999304, -0.1567500000000006, -0.0005000000000006111, -0.016500000000000625, 0.0417500000000004, 0.04550000000000054, 0.12950000000000017, 0.11200000000000188, -0.0259999999999998, -0.0019999999999988916, -0.011250000000000426], zp_timestamp='2025-12-03T20:38:00')
2025-12-03T22:41:23.340 [DEBUG] [Thread-124977] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:41:23.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:41:23.445 [DEBUG] [Thread-124980] [transport.py] [_log()] starting thread (client mode): 0xa514f3a0
2025-12-03T22:41:23.445 [DEBUG] [Thread-124980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:41:23.459 [DEBUG] [Thread-124980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:41:23.460 [INFO] [Thread-124980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:23.468 [DEBUG] [Thread-124980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] client lang: <none>
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] server lang: <none>
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] kex follows: False
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:41:23.469 [DEBUG] [Thread-124980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:41:23.470 [DEBUG] [Thread-124980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:41:23.470 [DEBUG] [Thread-124980] [transport.py] [_log()] Compression: none
2025-12-03T22:41:23.470 [DEBUG] [Thread-124980] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:41:23.531 [DEBUG] [Thread-124980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:41:23.531 [DEBUG] [Thread-124980] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:41:23.531 [DEBUG] [Thread-124980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:41:23.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:41:23.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:41:23.590 [DEBUG] [Thread-124980] [transport.py] [_log()] userauth is OK
2025-12-03T22:41:23.590 [DEBUG] [Thread-124980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:41:23.591 [DEBUG] [Thread-124980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:41:23.591 [DEBUG] [Thread-124980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:41:23.591 [DEBUG] [Thread-124980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:41:23.614 [INFO] [Thread-124980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:41:23.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:41:23.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:41:24.461 [DEBUG] [Thread-124980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:41:24.461 [DEBUG] [Thread-124980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:41:24.509 [DEBUG] [Thread-124980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:41:24.509 [DEBUG] [Thread-124980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:41:24.518 [DEBUG] [Thread-124980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:41:24.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:41:24.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:41:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:41:24.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:41:24.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:41:24.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:41:24.555 [DEBUG] [Thread-124980] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:41:24.945 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:35.190 [DEBUG] [Thread-124982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:45.333 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:50.256 [DEBUG] [Thread-124983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:41:54.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:41:54.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:41:54.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:41:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 41, 31), 15.48, 34.97, 0.0, 23.43, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:41:55.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:41:31
2025-12-03T22:41:55.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:41:55.529 [DEBUG] [Thread-124984] [transport.py] [_log()] starting thread (client mode): 0xa514e560
2025-12-03T22:41:55.530 [DEBUG] [Thread-124984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:41:55.543 [DEBUG] [Thread-124984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:41:55.543 [INFO] [Thread-124984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] client lang: <none>
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] server lang: <none>
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] kex follows: False
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] Compression: none
2025-12-03T22:41:55.545 [DEBUG] [Thread-124984] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:41:55.557 [DEBUG] [Thread-124984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:41:55.558 [DEBUG] [Thread-124984] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:41:55.558 [DEBUG] [Thread-124984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:41:55.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:41:55.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:41:55.560 [DEBUG] [Thread-124984] [transport.py] [_log()] userauth is OK
2025-12-03T22:41:55.560 [DEBUG] [Thread-124984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:41:55.560 [DEBUG] [Thread-124984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:41:55.561 [DEBUG] [Thread-124984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:41:55.561 [DEBUG] [Thread-124984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:41:55.579 [INFO] [Thread-124984] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:41:55.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:41:56.216 [DEBUG] [Thread-124984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:41:56.216 [DEBUG] [Thread-124984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:41:56.216 [DEBUG] [Thread-124984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:41:56.257 [DEBUG] [Thread-124984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:41:56.257 [DEBUG] [Thread-124984] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:41:56.260 [DEBUG] [Thread-124984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:41:56.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:41:56.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:41:56.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:41:56.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:41:56.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:41:56.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:41:56.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:41:56.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.862202 -999.00  +16.00  23.34     40   +2.40 1 1 1 1 1     0    0 13.90 -2.74 ZNESW 19.6 23.3 134.0 27.5 16.2 -25.5 16.1 -25.0 15.9 -23.3 16.2 -24.1
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.862202
2025-12-03T22:41:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:41:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:41:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:41:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:41:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:41:56.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:41:31', tmtdew=15.48, humidity=34.97, cloud=0.0, wind=23.43, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:41:31', seeing=1.07, atlas_timestamp='2025-12-03T20:41:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:41:56.281 [DEBUG] [Thread-124984] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:41:56.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:41:56.386 [DEBUG] [Thread-124987] [transport.py] [_log()] starting thread (client mode): 0x9fd21c60
2025-12-03T22:41:56.386 [DEBUG] [Thread-124987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:41:56.404 [DEBUG] [Thread-124987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:41:56.405 [INFO] [Thread-124987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:56.412 [DEBUG] [Thread-124987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] client lang: <none>
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] server lang: <none>
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] kex follows: False
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] Compression: none
2025-12-03T22:41:56.413 [DEBUG] [Thread-124987] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:41:56.470 [DEBUG] [Thread-124987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:41:56.470 [DEBUG] [Thread-124987] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:41:56.471 [DEBUG] [Thread-124987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:41:56.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:41:56.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:41:56.526 [DEBUG] [Thread-124987] [transport.py] [_log()] userauth is OK
2025-12-03T22:41:56.526 [DEBUG] [Thread-124987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:41:56.526 [DEBUG] [Thread-124987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:41:56.527 [DEBUG] [Thread-124987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:41:56.527 [DEBUG] [Thread-124987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:41:56.545 [INFO] [Thread-124987] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:41:56.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:41:56.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:41:57.375 [DEBUG] [Thread-124987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:41:57.375 [DEBUG] [Thread-124987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:41:57.422 [DEBUG] [Thread-124987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:41:57.423 [DEBUG] [Thread-124987] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:41:57.431 [DEBUG] [Thread-124987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:41:57.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:41:57.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:41:57.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:41:57.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:41:57.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:41:57.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:41:57.466 [DEBUG] [Thread-124987] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:42:05.291 [DEBUG] [Thread-124989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:05.770 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:06.347 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:06.347 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:16.516 [DEBUG] [Thread-124990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:20.347 [DEBUG] [Thread-124991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:26.164 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:42:27.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:42:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:42:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 42, 3), 15.48, 34.98, 0.0, 22.96, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:42:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:42:03
2025-12-03T22:42:28.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:42:28.444 [DEBUG] [Thread-124992] [transport.py] [_log()] starting thread (client mode): 0xa514ebf0
2025-12-03T22:42:28.444 [DEBUG] [Thread-124992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:42:28.466 [DEBUG] [Thread-124992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:42:28.466 [INFO] [Thread-124992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:42:28.470 [DEBUG] [Thread-124992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] client lang: <none>
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] server lang: <none>
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] kex follows: False
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:42:28.471 [DEBUG] [Thread-124992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:42:28.472 [DEBUG] [Thread-124992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:42:28.472 [DEBUG] [Thread-124992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:42:28.472 [DEBUG] [Thread-124992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:42:28.472 [DEBUG] [Thread-124992] [transport.py] [_log()] Compression: none
2025-12-03T22:42:28.472 [DEBUG] [Thread-124992] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:42:28.488 [DEBUG] [Thread-124992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:42:28.488 [DEBUG] [Thread-124992] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:42:28.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:42:28.489 [DEBUG] [Thread-124992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:42:28.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:42:28.491 [DEBUG] [Thread-124992] [transport.py] [_log()] userauth is OK
2025-12-03T22:42:28.491 [DEBUG] [Thread-124992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:42:28.491 [DEBUG] [Thread-124992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:42:28.491 [DEBUG] [Thread-124992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:42:28.491 [DEBUG] [Thread-124992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:42:28.514 [INFO] [Thread-124992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:42:28.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:42:29.117 [DEBUG] [Thread-124992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:42:29.117 [DEBUG] [Thread-124992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:42:29.118 [DEBUG] [Thread-124992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:42:29.158 [DEBUG] [Thread-124992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:42:29.158 [DEBUG] [Thread-124992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:42:29.161 [DEBUG] [Thread-124992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:42:29.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:42:29.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:42:29.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:42:29.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:42:29.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:42:29.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:42:29.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:42:29.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.862549 -999.00  +16.00  21.46     39   +2.40 1 1 1 1 1     0    0 13.47 -2.07 ZNESW 19.8 21.5 139.8 26.1 16.2 -25.4 16.1 -24.8 15.9 -23.3 16.2 -24.1
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.862549
2025-12-03T22:42:29.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:42:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:42:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:42:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:42:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:42:29.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:42:03', tmtdew=15.48, humidity=34.98, cloud=0.0, wind=22.96, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:42:03', seeing=1.31, atlas_timestamp='2025-12-03T20:42:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:42:29.184 [DEBUG] [Thread-124992] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:42:29.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:42:29.287 [DEBUG] [Thread-124995] [transport.py] [_log()] starting thread (client mode): 0xa514cb20
2025-12-03T22:42:29.288 [DEBUG] [Thread-124995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:42:29.303 [DEBUG] [Thread-124995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:42:29.303 [INFO] [Thread-124995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:42:29.310 [DEBUG] [Thread-124995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:42:29.310 [DEBUG] [Thread-124995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:42:29.310 [DEBUG] [Thread-124995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:42:29.310 [DEBUG] [Thread-124995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] client lang: <none>
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] server lang: <none>
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] kex follows: False
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] Compression: none
2025-12-03T22:42:29.311 [DEBUG] [Thread-124995] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:42:29.370 [DEBUG] [Thread-124995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:42:29.371 [DEBUG] [Thread-124995] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:42:29.371 [DEBUG] [Thread-124995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:42:29.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:42:29.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:42:29.427 [DEBUG] [Thread-124995] [transport.py] [_log()] userauth is OK
2025-12-03T22:42:29.427 [DEBUG] [Thread-124995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:42:29.427 [DEBUG] [Thread-124995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:42:29.427 [DEBUG] [Thread-124995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:42:29.427 [DEBUG] [Thread-124995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:42:29.447 [INFO] [Thread-124995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:42:29.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:42:29.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:42:30.364 [DEBUG] [Thread-124995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:42:30.364 [DEBUG] [Thread-124995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:42:30.413 [DEBUG] [Thread-124995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:42:30.413 [DEBUG] [Thread-124995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:42:30.421 [DEBUG] [Thread-124995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:42:30.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:42:30.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:42:30.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:42:30.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:42:30.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:42:30.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:42:30.457 [DEBUG] [Thread-124995] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:42:35.388 [DEBUG] [Thread-124997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:46.590 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:42:50.439 [DEBUG] [Thread-124998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:00.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:43:00.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:43:00.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:43:01.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 42, 35), 15.45, 34.95, 0.0, 24.07, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:43:01.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:42:35
2025-12-03T22:43:01.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:43:01.436 [DEBUG] [Thread-124999] [transport.py] [_log()] starting thread (client mode): 0xa514cbb0
2025-12-03T22:43:01.436 [DEBUG] [Thread-124999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:43:01.457 [DEBUG] [Thread-124999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:43:01.457 [INFO] [Thread-124999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:01.460 [DEBUG] [Thread-124999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] client lang: <none>
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] server lang: <none>
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] kex follows: False
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] Compression: none
2025-12-03T22:43:01.461 [DEBUG] [Thread-124999] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:43:01.479 [DEBUG] [Thread-124999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:43:01.479 [DEBUG] [Thread-124999] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:43:01.480 [DEBUG] [Thread-124999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:43:01.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:43:01.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:43:01.481 [DEBUG] [Thread-124999] [transport.py] [_log()] userauth is OK
2025-12-03T22:43:01.482 [DEBUG] [Thread-124999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:43:01.482 [DEBUG] [Thread-124999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:43:01.482 [DEBUG] [Thread-124999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:43:01.482 [DEBUG] [Thread-124999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:43:01.505 [INFO] [Thread-124999] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:43:01.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:43:02.180 [DEBUG] [Thread-124999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:43:02.181 [DEBUG] [Thread-124999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:43:02.181 [DEBUG] [Thread-124999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:43:02.222 [DEBUG] [Thread-124999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:43:02.222 [DEBUG] [Thread-124999] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:43:02.226 [DEBUG] [Thread-124999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:43:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:43:02.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:43:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:43:02.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:43:02.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:43:02.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:43:02.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:43:02.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:43:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:43:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.862898 -999.00  +16.00  20.43     40   +2.40 1 1 1 1 1     0    0 13.56 -1.68 ZNESW 18.8 20.4 138.0 21.9 16.2 -25.6 16.1 -24.9 15.9 -23.2 16.2 -24.1
2025-12-03T22:43:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:43:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:43:02.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.862898
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:43:02.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:42:35', tmtdew=15.45, humidity=34.95, cloud=0.0, wind=24.07, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:42:35', seeing=1.13, atlas_timestamp='2025-12-03T20:42:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:43:02.254 [DEBUG] [Thread-124999] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:43:02.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:43:02.358 [DEBUG] [Thread-125002] [transport.py] [_log()] starting thread (client mode): 0xa514e3b0
2025-12-03T22:43:02.358 [DEBUG] [Thread-125002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:43:02.373 [DEBUG] [Thread-125002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:43:02.373 [INFO] [Thread-125002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:43:02.380 [DEBUG] [Thread-125002] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] client lang: <none>
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] server lang: <none>
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] kex follows: False
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:43:02.381 [DEBUG] [Thread-125002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:43:02.382 [DEBUG] [Thread-125002] [transport.py] [_log()] Compression: none
2025-12-03T22:43:02.382 [DEBUG] [Thread-125002] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:43:02.439 [DEBUG] [Thread-125002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:43:02.439 [DEBUG] [Thread-125002] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:43:02.439 [DEBUG] [Thread-125002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:43:02.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:43:02.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:43:02.496 [DEBUG] [Thread-125002] [transport.py] [_log()] userauth is OK
2025-12-03T22:43:02.496 [DEBUG] [Thread-125002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:43:02.497 [DEBUG] [Thread-125002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:43:02.497 [DEBUG] [Thread-125002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:43:02.497 [DEBUG] [Thread-125002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:43:02.517 [INFO] [Thread-125002] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:43:02.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:43:02.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:43:03.367 [DEBUG] [Thread-125002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:43:03.367 [DEBUG] [Thread-125002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:43:03.416 [DEBUG] [Thread-125002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:43:03.417 [DEBUG] [Thread-125002] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:43:03.430 [DEBUG] [Thread-125002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:43:03.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:43:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:43:03.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:43:03.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:43:03.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:43:03.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:43:03.465 [DEBUG] [Thread-125002] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:43:05.472 [DEBUG] [Thread-125004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:06.561 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:06.562 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:06.985 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:16.585 [DEBUG] [Thread-125005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:20.531 [DEBUG] [Thread-125006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:27.392 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:33.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:43:33.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:43:33.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:43:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 43, 7), 15.42, 35.02, 0.0, 27.58, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:43:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:43:07
2025-12-03T22:43:34.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:43:34.454 [DEBUG] [Thread-125007] [transport.py] [_log()] starting thread (client mode): 0x9fd21780
2025-12-03T22:43:34.455 [DEBUG] [Thread-125007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:43:34.475 [DEBUG] [Thread-125007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:43:34.475 [INFO] [Thread-125007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:34.478 [DEBUG] [Thread-125007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] client lang: <none>
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] server lang: <none>
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] kex follows: False
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] Compression: none
2025-12-03T22:43:34.479 [DEBUG] [Thread-125007] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:43:34.496 [DEBUG] [Thread-125007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:43:34.496 [DEBUG] [Thread-125007] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:43:34.497 [DEBUG] [Thread-125007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:43:34.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:43:34.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:43:34.498 [DEBUG] [Thread-125007] [transport.py] [_log()] userauth is OK
2025-12-03T22:43:34.499 [DEBUG] [Thread-125007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:43:34.499 [DEBUG] [Thread-125007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:43:34.499 [DEBUG] [Thread-125007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:43:34.499 [DEBUG] [Thread-125007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:43:34.522 [INFO] [Thread-125007] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:43:34.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:43:35.170 [DEBUG] [Thread-125007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:43:35.170 [DEBUG] [Thread-125007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:43:35.170 [DEBUG] [Thread-125007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:43:35.211 [DEBUG] [Thread-125007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:43:35.211 [DEBUG] [Thread-125007] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:43:35.214 [DEBUG] [Thread-125007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:43:35.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:43:35.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:43:35.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:43:35.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:43:35.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:43:35.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:43:35.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:43:35.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:43:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:43:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.862898 -999.00  +16.00  20.43     40   +2.40 1 1 1 1 1     0    0 13.56 -1.68 ZNESW 18.8 20.4 138.0 21.9 16.2 -25.6 16.1 -24.9 15.9 -23.2 16.2 -24.1
2025-12-03T22:43:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:43:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:43:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.862898
2025-12-03T22:43:35.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:43:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:43:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:43:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:43:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:43:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:43:07', tmtdew=15.42, humidity=35.02, cloud=0.0, wind=27.58, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:43:07', seeing=0.83, atlas_timestamp='2025-12-03T20:42:34.387', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:43:35.236 [DEBUG] [Thread-125007] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:43:35.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:43:35.340 [DEBUG] [Thread-125010] [transport.py] [_log()] starting thread (client mode): 0x9fd23c40
2025-12-03T22:43:35.340 [DEBUG] [Thread-125010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:43:35.354 [DEBUG] [Thread-125010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:43:35.355 [INFO] [Thread-125010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:43:35.362 [DEBUG] [Thread-125010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] client lang: <none>
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] server lang: <none>
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] kex follows: False
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:43:35.363 [DEBUG] [Thread-125010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:43:35.364 [DEBUG] [Thread-125010] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:43:35.364 [DEBUG] [Thread-125010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:43:35.364 [DEBUG] [Thread-125010] [transport.py] [_log()] Compression: none
2025-12-03T22:43:35.364 [DEBUG] [Thread-125010] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:43:35.419 [DEBUG] [Thread-125010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:43:35.419 [DEBUG] [Thread-125010] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:43:35.420 [DEBUG] [Thread-125010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:43:35.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:43:35.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:43:35.475 [DEBUG] [Thread-125010] [transport.py] [_log()] userauth is OK
2025-12-03T22:43:35.475 [DEBUG] [Thread-125010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:43:35.475 [DEBUG] [Thread-125010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:43:35.476 [DEBUG] [Thread-125010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:43:35.476 [DEBUG] [Thread-125010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:43:35.494 [INFO] [Thread-125010] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:43:35.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:43:35.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:43:35.569 [DEBUG] [Thread-125012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:36.346 [DEBUG] [Thread-125010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:43:36.346 [DEBUG] [Thread-125010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:43:36.395 [DEBUG] [Thread-125010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:43:36.395 [DEBUG] [Thread-125010] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:43:36.404 [DEBUG] [Thread-125010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:43:36.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:43:36.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:43:36.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:43:36.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:43:36.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:43:36.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:43:36.439 [DEBUG] [Thread-125010] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:43:47.839 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:43:50.636 [DEBUG] [Thread-125013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:05.674 [DEBUG] [Thread-125014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:06.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:44:06.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:44:06.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:44:06.769 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:06.769 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:07.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 43, 39), 15.45, 34.95, 0.0, 25.81, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:44:07.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:43:39
2025-12-03T22:44:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:44:07.478 [DEBUG] [Thread-125015] [transport.py] [_log()] starting thread (client mode): 0x9fd202e0
2025-12-03T22:44:07.479 [DEBUG] [Thread-125015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:44:07.499 [DEBUG] [Thread-125015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:44:07.499 [INFO] [Thread-125015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] client lang: <none>
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] server lang: <none>
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] kex follows: False
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] Compression: none
2025-12-03T22:44:07.502 [DEBUG] [Thread-125015] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:44:07.517 [DEBUG] [Thread-125015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:44:07.517 [DEBUG] [Thread-125015] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:44:07.517 [DEBUG] [Thread-125015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:44:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:44:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:44:07.518 [DEBUG] [Thread-125015] [transport.py] [_log()] userauth is OK
2025-12-03T22:44:07.518 [DEBUG] [Thread-125015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:44:07.518 [DEBUG] [Thread-125015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:44:07.518 [DEBUG] [Thread-125015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:44:07.518 [DEBUG] [Thread-125015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:44:07.527 [INFO] [Thread-125015] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:44:07.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:44:08.135 [DEBUG] [Thread-125015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:44:08.135 [DEBUG] [Thread-125015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:44:08.135 [DEBUG] [Thread-125015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:44:08.175 [DEBUG] [Thread-125015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:44:08.175 [DEBUG] [Thread-125015] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:44:08.177 [DEBUG] [Thread-125015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:44:08.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:44:08.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:44:08.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:44:08.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:44:08.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:44:08.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:44:08.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.863244 -999.00  +16.00  20.74     40   +2.40 1 1 1 1 1     0    0 13.81 -1.35 ZNESW 19.2 20.7 129.0 27.4 16.2 -25.4 16.1 -24.8 15.9 -23.1 16.1 -23.9
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.863244
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:44:08.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:43:39', tmtdew=15.45, humidity=34.95, cloud=0.0, wind=25.81, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:43:39', seeing=0.96, atlas_timestamp='2025-12-03T20:43:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:44:08.193 [DEBUG] [Thread-125015] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:44:08.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:44:08.281 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:08.287 [DEBUG] [Thread-125018] [transport.py] [_log()] starting thread (client mode): 0xa514db40
2025-12-03T22:44:08.287 [DEBUG] [Thread-125018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:44:08.301 [DEBUG] [Thread-125018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:44:08.301 [INFO] [Thread-125018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:44:08.308 [DEBUG] [Thread-125018] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:44:08.308 [DEBUG] [Thread-125018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:44:08.308 [DEBUG] [Thread-125018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:44:08.308 [DEBUG] [Thread-125018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] client lang: <none>
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] server lang: <none>
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] kex follows: False
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] Compression: none
2025-12-03T22:44:08.309 [DEBUG] [Thread-125018] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:44:08.366 [DEBUG] [Thread-125018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:44:08.366 [DEBUG] [Thread-125018] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:44:08.366 [DEBUG] [Thread-125018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:44:08.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:44:08.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:44:08.423 [DEBUG] [Thread-125018] [transport.py] [_log()] userauth is OK
2025-12-03T22:44:08.423 [DEBUG] [Thread-125018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:44:08.423 [DEBUG] [Thread-125018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:44:08.423 [DEBUG] [Thread-125018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:44:08.423 [DEBUG] [Thread-125018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:44:08.437 [INFO] [Thread-125018] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:44:08.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:44:08.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:44:09.301 [DEBUG] [Thread-125018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:44:09.301 [DEBUG] [Thread-125018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:44:09.349 [DEBUG] [Thread-125018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:44:09.349 [DEBUG] [Thread-125018] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:44:09.357 [DEBUG] [Thread-125018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:44:09.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:44:09.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:44:09.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:44:09.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:44:09.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:44:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:44:09.391 [DEBUG] [Thread-125018] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:44:16.659 [DEBUG] [Thread-125020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:20.704 [DEBUG] [Thread-125021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:28.651 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:35.761 [DEBUG] [Thread-125022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:44:39.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:44:39.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:44:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 44, 11), 15.49, 34.87, 0.0, 26.73, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:44:40.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:44:11
2025-12-03T22:44:40.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:44:40.391 [DEBUG] [Thread-125023] [transport.py] [_log()] starting thread (client mode): 0xa514e3b0
2025-12-03T22:44:40.391 [DEBUG] [Thread-125023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:44:40.413 [DEBUG] [Thread-125023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:44:40.413 [INFO] [Thread-125023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] client lang: <none>
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] server lang: <none>
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] kex follows: False
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:44:40.416 [DEBUG] [Thread-125023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:44:40.417 [DEBUG] [Thread-125023] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:44:40.417 [DEBUG] [Thread-125023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:44:40.417 [DEBUG] [Thread-125023] [transport.py] [_log()] Compression: none
2025-12-03T22:44:40.417 [DEBUG] [Thread-125023] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:44:40.433 [DEBUG] [Thread-125023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:44:40.434 [DEBUG] [Thread-125023] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:44:40.434 [DEBUG] [Thread-125023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:44:40.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:44:40.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:44:40.436 [DEBUG] [Thread-125023] [transport.py] [_log()] userauth is OK
2025-12-03T22:44:40.436 [DEBUG] [Thread-125023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:44:40.438 [DEBUG] [Thread-125023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:44:40.438 [DEBUG] [Thread-125023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:44:40.438 [DEBUG] [Thread-125023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:44:40.462 [INFO] [Thread-125023] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:44:40.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:44:41.064 [DEBUG] [Thread-125023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:44:41.065 [DEBUG] [Thread-125023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:44:41.065 [DEBUG] [Thread-125023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:44:41.106 [DEBUG] [Thread-125023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:44:41.106 [DEBUG] [Thread-125023] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:44:41.108 [DEBUG] [Thread-125023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:44:41.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:44:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:44:41.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:44:41.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:44:41.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:44:41.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:44:41.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:44:41.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:44:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:44:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.863938 -999.00  +16.00  18.13     40   +2.40 1 1 1 1 1     0    0 13.74 -0.74 ZNESW 17.9 18.1 137.4 28.0 16.2 -25.4 16.1 -24.8 15.9 -23.3 16.1 -24.2
2025-12-03T22:44:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:44:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:44:41.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.863938
2025-12-03T22:44:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:44:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:44:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:44:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:44:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:44:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:44:11', tmtdew=15.49, humidity=34.87, cloud=0.0, wind=26.73, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:44:11', seeing=0.96, atlas_timestamp='2025-12-03T20:44:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:40:00')
2025-12-03T22:44:41.134 [DEBUG] [Thread-125023] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:44:41.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:44:41.234 [DEBUG] [Thread-125026] [transport.py] [_log()] starting thread (client mode): 0xa514cd90
2025-12-03T22:44:41.234 [DEBUG] [Thread-125026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:44:41.249 [DEBUG] [Thread-125026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:44:41.249 [INFO] [Thread-125026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:44:41.256 [DEBUG] [Thread-125026] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:44:41.257 [DEBUG] [Thread-125026] [transport.py] [_log()] client lang: <none>
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] server lang: <none>
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] kex follows: False
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] Compression: none
2025-12-03T22:44:41.258 [DEBUG] [Thread-125026] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:44:41.315 [DEBUG] [Thread-125026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:44:41.316 [DEBUG] [Thread-125026] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:44:41.316 [DEBUG] [Thread-125026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:44:41.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:44:41.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:44:41.372 [DEBUG] [Thread-125026] [transport.py] [_log()] userauth is OK
2025-12-03T22:44:41.372 [DEBUG] [Thread-125026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:44:41.372 [DEBUG] [Thread-125026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:44:41.372 [DEBUG] [Thread-125026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:44:41.372 [DEBUG] [Thread-125026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:44:41.392 [INFO] [Thread-125026] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:44:41.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:44:41.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:44:42.189 [DEBUG] [Thread-125026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:44:42.189 [DEBUG] [Thread-125026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:44:42.237 [DEBUG] [Thread-125026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:44:42.237 [DEBUG] [Thread-125026] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:44:42.245 [DEBUG] [Thread-125026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:44:42.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:44:42.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:44:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:44:42.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:44:42.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:44:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:44:42.276 [DEBUG] [Thread-125026] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:44:49.035 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:44:50.797 [DEBUG] [Thread-125028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:05.855 [DEBUG] [Thread-125029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:06.966 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:06.967 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:09.432 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:12.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:45:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:45:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:45:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 44, 43), 15.5, 34.85, 0.0, 22.51, 15.99, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:45:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:44:43
2025-12-03T22:45:13.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:45:13.242 [DEBUG] [Thread-125030] [transport.py] [_log()] starting thread (client mode): 0xa514d990
2025-12-03T22:45:13.243 [DEBUG] [Thread-125030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:45:13.263 [DEBUG] [Thread-125030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:45:13.263 [INFO] [Thread-125030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:45:13.265 [DEBUG] [Thread-125030] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:45:13.266 [DEBUG] [Thread-125030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] client lang: <none>
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] server lang: <none>
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] kex follows: False
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:45:13.267 [DEBUG] [Thread-125030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:45:13.268 [DEBUG] [Thread-125030] [transport.py] [_log()] Compression: none
2025-12-03T22:45:13.268 [DEBUG] [Thread-125030] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:45:13.286 [DEBUG] [Thread-125030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:45:13.286 [DEBUG] [Thread-125030] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:45:13.287 [DEBUG] [Thread-125030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:45:13.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:45:13.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:45:13.289 [DEBUG] [Thread-125030] [transport.py] [_log()] userauth is OK
2025-12-03T22:45:13.289 [DEBUG] [Thread-125030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:45:13.289 [DEBUG] [Thread-125030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:45:13.289 [DEBUG] [Thread-125030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:45:13.289 [DEBUG] [Thread-125030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:45:13.314 [INFO] [Thread-125030] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:45:13.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:45:13.977 [DEBUG] [Thread-125030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:45:13.977 [DEBUG] [Thread-125030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:45:13.977 [DEBUG] [Thread-125030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:45:14.018 [DEBUG] [Thread-125030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:45:14.018 [DEBUG] [Thread-125030] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:45:14.021 [DEBUG] [Thread-125030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:45:14.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:45:14.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:45:14.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:45:14.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:45:14.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:45:14.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:45:14.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:45:14.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:45:14.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:45:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.864285 -999.00  +16.00  16.73     40   +2.40 1 1 1 1 1     0    0 13.70 -0.71 ZNESW 16.7 16.7 133.8 22.1 16.2 -25.6 16.1 -24.9 15.8 -23.3 16.2 -24.2
2025-12-03T22:45:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:45:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:45:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.864285
2025-12-03T22:45:14.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:45:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:45:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:45:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:45:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:45:14.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:44:43', tmtdew=15.5, humidity=34.85, cloud=0.0, wind=22.51, temperature=15.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:44:43', seeing=0.98, atlas_timestamp='2025-12-03T20:44:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:43:00')
2025-12-03T22:45:14.046 [DEBUG] [Thread-125030] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:45:14.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:45:14.149 [DEBUG] [Thread-125033] [transport.py] [_log()] starting thread (client mode): 0xa514f7f0
2025-12-03T22:45:14.149 [DEBUG] [Thread-125033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:45:14.163 [DEBUG] [Thread-125033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:45:14.163 [INFO] [Thread-125033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] client lang: <none>
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] server lang: <none>
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] kex follows: False
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:45:14.171 [DEBUG] [Thread-125033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:45:14.172 [DEBUG] [Thread-125033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:45:14.172 [DEBUG] [Thread-125033] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:45:14.172 [DEBUG] [Thread-125033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:45:14.172 [DEBUG] [Thread-125033] [transport.py] [_log()] Compression: none
2025-12-03T22:45:14.172 [DEBUG] [Thread-125033] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:45:14.232 [DEBUG] [Thread-125033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:45:14.232 [DEBUG] [Thread-125033] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:45:14.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:45:14.233 [DEBUG] [Thread-125033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:45:14.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:45:14.288 [DEBUG] [Thread-125033] [transport.py] [_log()] userauth is OK
2025-12-03T22:45:14.288 [DEBUG] [Thread-125033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:45:14.288 [DEBUG] [Thread-125033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:45:14.288 [DEBUG] [Thread-125033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:45:14.289 [DEBUG] [Thread-125033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:45:14.311 [INFO] [Thread-125033] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:45:14.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:45:14.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:45:15.151 [DEBUG] [Thread-125033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:45:15.151 [DEBUG] [Thread-125033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:45:15.199 [DEBUG] [Thread-125033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:45:15.199 [DEBUG] [Thread-125033] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:45:15.207 [DEBUG] [Thread-125033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:45:15.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:45:15.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:45:15.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:45:15.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:45:15.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:45:15.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:45:15.242 [DEBUG] [Thread-125033] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:45:16.715 [DEBUG] [Thread-125035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:20.888 [DEBUG] [Thread-125036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:29.835 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:35.938 [DEBUG] [Thread-125037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:45.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:45:45.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:45:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:45:45.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 45, 15), 15.5, 34.83, 0.0, 23.31, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:45:45.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:45:15
2025-12-03T22:45:46.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:45:46.229 [DEBUG] [Thread-125038] [transport.py] [_log()] starting thread (client mode): 0xa514f370
2025-12-03T22:45:46.229 [DEBUG] [Thread-125038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:45:46.249 [DEBUG] [Thread-125038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:45:46.249 [INFO] [Thread-125038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:45:46.252 [DEBUG] [Thread-125038] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:45:46.253 [DEBUG] [Thread-125038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] client lang: <none>
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] server lang: <none>
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] kex follows: False
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:45:46.254 [DEBUG] [Thread-125038] [transport.py] [_log()] Compression: none
2025-12-03T22:45:46.255 [DEBUG] [Thread-125038] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:45:46.272 [DEBUG] [Thread-125038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:45:46.273 [DEBUG] [Thread-125038] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:45:46.274 [DEBUG] [Thread-125038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:45:46.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:45:46.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:45:46.276 [DEBUG] [Thread-125038] [transport.py] [_log()] userauth is OK
2025-12-03T22:45:46.276 [DEBUG] [Thread-125038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:45:46.276 [DEBUG] [Thread-125038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:45:46.276 [DEBUG] [Thread-125038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:45:46.277 [DEBUG] [Thread-125038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:45:46.299 [INFO] [Thread-125038] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:45:46.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:45:46.940 [DEBUG] [Thread-125038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:45:46.940 [DEBUG] [Thread-125038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:45:46.940 [DEBUG] [Thread-125038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:45:46.982 [DEBUG] [Thread-125038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:45:46.982 [DEBUG] [Thread-125038] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:45:46.985 [DEBUG] [Thread-125038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:45:46.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:45:46.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:45:46.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:45:47.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:45:47.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:45:47.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:45:47.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.864632 -999.00  +15.90  20.03     40   +2.40 1 1 1 1 1     0    0 13.77 -1.05 ZNESW 16.3 20.0 134.0 24.6 16.2 -25.5 16.1 -24.9 15.8 -23.4 16.1 -24.2
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.864632
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:45:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:45:47.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:45:15', tmtdew=15.5, humidity=34.83, cloud=0.0, wind=23.31, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:45:15', seeing=0.98, atlas_timestamp='2025-12-03T20:45:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:43:00')
2025-12-03T22:45:47.004 [DEBUG] [Thread-125038] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:45:47.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:45:47.099 [DEBUG] [Thread-125041] [transport.py] [_log()] starting thread (client mode): 0xa514e3e0
2025-12-03T22:45:47.099 [DEBUG] [Thread-125041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:45:47.114 [DEBUG] [Thread-125041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:45:47.114 [INFO] [Thread-125041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:45:47.121 [DEBUG] [Thread-125041] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:45:47.121 [DEBUG] [Thread-125041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:45:47.121 [DEBUG] [Thread-125041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] client lang: <none>
2025-12-03T22:45:47.122 [DEBUG] [Thread-125041] [transport.py] [_log()] server lang: <none>
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] kex follows: False
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] Compression: none
2025-12-03T22:45:47.123 [DEBUG] [Thread-125041] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:45:47.180 [DEBUG] [Thread-125041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:45:47.181 [DEBUG] [Thread-125041] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:45:47.181 [DEBUG] [Thread-125041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:45:47.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:45:47.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:45:47.236 [DEBUG] [Thread-125041] [transport.py] [_log()] userauth is OK
2025-12-03T22:45:47.236 [DEBUG] [Thread-125041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:45:47.237 [DEBUG] [Thread-125041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:45:47.237 [DEBUG] [Thread-125041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:45:47.237 [DEBUG] [Thread-125041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:45:47.254 [INFO] [Thread-125041] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:45:47.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:45:47.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:45:48.098 [DEBUG] [Thread-125041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:45:48.098 [DEBUG] [Thread-125041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:45:48.145 [DEBUG] [Thread-125041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:45:48.145 [DEBUG] [Thread-125041] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:45:48.154 [DEBUG] [Thread-125041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:45:48.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:45:48.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:45:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:45:48.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:45:48.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:45:48.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:45:48.185 [DEBUG] [Thread-125041] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:45:50.214 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:45:50.975 [DEBUG] [Thread-125043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:06.030 [DEBUG] [Thread-125044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:07.169 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:07.170 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:10.604 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:16.774 [DEBUG] [Thread-125045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:18.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:46:18.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:46:18.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:46:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 45, 47), 15.5, 34.83, 0.0, 24.67, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:46:18.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:45:47
2025-12-03T22:46:19.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:46:19.159 [DEBUG] [Thread-125046] [transport.py] [_log()] starting thread (client mode): 0xa514e020
2025-12-03T22:46:19.160 [DEBUG] [Thread-125046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:46:19.179 [DEBUG] [Thread-125046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:46:19.179 [INFO] [Thread-125046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:46:19.182 [DEBUG] [Thread-125046] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:46:19.182 [DEBUG] [Thread-125046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:46:19.182 [DEBUG] [Thread-125046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:46:19.182 [DEBUG] [Thread-125046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:19.182 [DEBUG] [Thread-125046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] client lang: <none>
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] server lang: <none>
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] kex follows: False
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] Compression: none
2025-12-03T22:46:19.183 [DEBUG] [Thread-125046] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:46:19.201 [DEBUG] [Thread-125046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:46:19.202 [DEBUG] [Thread-125046] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:46:19.202 [DEBUG] [Thread-125046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:46:19.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:46:19.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:46:19.205 [DEBUG] [Thread-125046] [transport.py] [_log()] userauth is OK
2025-12-03T22:46:19.205 [DEBUG] [Thread-125046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:46:19.205 [DEBUG] [Thread-125046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:46:19.205 [DEBUG] [Thread-125046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:46:19.205 [DEBUG] [Thread-125046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:46:19.224 [INFO] [Thread-125046] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:46:19.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:46:20.002 [DEBUG] [Thread-125046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:46:20.002 [DEBUG] [Thread-125046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:46:20.002 [DEBUG] [Thread-125046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:46:20.044 [DEBUG] [Thread-125046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:46:20.044 [DEBUG] [Thread-125046] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:46:20.046 [DEBUG] [Thread-125046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:46:20.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:46:20.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:46:20.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:46:20.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:46:20.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:46:20.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:46:20.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.864980 -999.00  +15.90  16.87     40   +2.40 1 1 1 1 1     0    0 13.72 -1.39 ZNESW 21.4 16.9 134.2 22.1 16.2 -25.5 16.1 -24.8 15.8 -23.3 16.1 -23.7
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.864980
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:46:20.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:45:47', tmtdew=15.5, humidity=34.83, cloud=0.0, wind=24.67, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:45:47', seeing=0.79, atlas_timestamp='2025-12-03T20:45:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:43:00')
2025-12-03T22:46:20.064 [DEBUG] [Thread-125046] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:46:20.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:46:20.157 [DEBUG] [Thread-125049] [transport.py] [_log()] starting thread (client mode): 0xa514efe0
2025-12-03T22:46:20.157 [DEBUG] [Thread-125049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:46:20.172 [DEBUG] [Thread-125049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:46:20.172 [INFO] [Thread-125049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] client lang: <none>
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] server lang: <none>
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] kex follows: False
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] Compression: none
2025-12-03T22:46:20.180 [DEBUG] [Thread-125049] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:46:20.237 [DEBUG] [Thread-125049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:46:20.237 [DEBUG] [Thread-125049] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:46:20.237 [DEBUG] [Thread-125049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:46:20.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:46:20.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:46:20.308 [DEBUG] [Thread-125049] [transport.py] [_log()] userauth is OK
2025-12-03T22:46:20.308 [DEBUG] [Thread-125049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:46:20.308 [DEBUG] [Thread-125049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:46:20.309 [DEBUG] [Thread-125049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:46:20.309 [DEBUG] [Thread-125049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:46:20.323 [INFO] [Thread-125049] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:46:20.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:46:20.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:46:21.069 [DEBUG] [Thread-125051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:21.171 [DEBUG] [Thread-125049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:46:21.171 [DEBUG] [Thread-125049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:46:21.219 [DEBUG] [Thread-125049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:46:21.219 [DEBUG] [Thread-125049] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:46:21.227 [DEBUG] [Thread-125049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:46:21.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:46:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:46:21.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:46:21.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:46:21.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:46:21.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:46:21.258 [DEBUG] [Thread-125049] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:46:31.051 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:36.121 [DEBUG] [Thread-125052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:51.156 [DEBUG] [Thread-125053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:46:51.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:46:51.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:46:51.499 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:46:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 46, 19), 15.5, 34.83, 0.0, 22.87, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:46:51.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:46:19
2025-12-03T22:46:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:46:52.278 [DEBUG] [Thread-125054] [transport.py] [_log()] starting thread (client mode): 0xa514e050
2025-12-03T22:46:52.279 [DEBUG] [Thread-125054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:46:52.301 [DEBUG] [Thread-125054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:46:52.301 [INFO] [Thread-125054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:52.304 [DEBUG] [Thread-125054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] client lang: <none>
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] server lang: <none>
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] kex follows: False
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] Compression: none
2025-12-03T22:46:52.305 [DEBUG] [Thread-125054] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:46:52.322 [DEBUG] [Thread-125054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:46:52.322 [DEBUG] [Thread-125054] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:46:52.322 [DEBUG] [Thread-125054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:46:52.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:46:52.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:46:52.323 [DEBUG] [Thread-125054] [transport.py] [_log()] userauth is OK
2025-12-03T22:46:52.323 [DEBUG] [Thread-125054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:46:52.323 [DEBUG] [Thread-125054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:46:52.323 [DEBUG] [Thread-125054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:46:52.323 [DEBUG] [Thread-125054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:46:52.351 [INFO] [Thread-125054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:46:52.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:46:53.016 [DEBUG] [Thread-125054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:46:53.016 [DEBUG] [Thread-125054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:46:53.016 [DEBUG] [Thread-125054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:46:53.057 [DEBUG] [Thread-125054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:46:53.057 [DEBUG] [Thread-125054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:46:53.060 [DEBUG] [Thread-125054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:46:53.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:46:53.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:46:53.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:46:53.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:46:53.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:46:53.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:46:53.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.865327 -999.00  +16.00  17.52     40   +2.40 1 1 1 1 1     0    0 13.43 -1.67 ZNESW 19.2 17.5 135.0 24.1 16.2 -25.5 16.1 -25.0 15.8 -23.3 16.2 -24.3
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.865327
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:46:53.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:46:19', tmtdew=15.5, humidity=34.83, cloud=0.0, wind=22.87, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:46:19', seeing=0.92, atlas_timestamp='2025-12-03T20:46:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:43:00')
2025-12-03T22:46:53.087 [DEBUG] [Thread-125054] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:46:53.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:46:53.179 [DEBUG] [Thread-125057] [transport.py] [_log()] starting thread (client mode): 0xa514ca90
2025-12-03T22:46:53.180 [DEBUG] [Thread-125057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:46:53.194 [DEBUG] [Thread-125057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:46:53.194 [INFO] [Thread-125057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] client lang: <none>
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] server lang: <none>
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] kex follows: False
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:46:53.201 [DEBUG] [Thread-125057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:46:53.202 [DEBUG] [Thread-125057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:46:53.202 [DEBUG] [Thread-125057] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:46:53.202 [DEBUG] [Thread-125057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:46:53.202 [DEBUG] [Thread-125057] [transport.py] [_log()] Compression: none
2025-12-03T22:46:53.202 [DEBUG] [Thread-125057] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:46:53.260 [DEBUG] [Thread-125057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:46:53.260 [DEBUG] [Thread-125057] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:46:53.260 [DEBUG] [Thread-125057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:46:53.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:46:53.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:46:53.317 [DEBUG] [Thread-125057] [transport.py] [_log()] userauth is OK
2025-12-03T22:46:53.317 [DEBUG] [Thread-125057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:46:53.317 [DEBUG] [Thread-125057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:46:53.317 [DEBUG] [Thread-125057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:46:53.317 [DEBUG] [Thread-125057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:46:53.331 [INFO] [Thread-125057] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:46:53.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:46:53.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:46:54.178 [DEBUG] [Thread-125057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:46:54.179 [DEBUG] [Thread-125057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:46:54.227 [DEBUG] [Thread-125057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:46:54.227 [DEBUG] [Thread-125057] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:46:54.236 [DEBUG] [Thread-125057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:46:54.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:46:54.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:46:54.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:46:54.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:46:54.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:46:54.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:46:54.269 [DEBUG] [Thread-125057] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:47:06.193 [DEBUG] [Thread-125059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:07.371 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:07.372 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:12.063 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:16.826 [DEBUG] [Thread-125060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:21.248 [DEBUG] [Thread-125061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:24.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:47:24.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:47:24.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:47:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 46, 51), 15.53, 34.88, 0.0, 20.56, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:47:25.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:46:51
2025-12-03T22:47:25.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:47:25.295 [DEBUG] [Thread-125062] [transport.py] [_log()] starting thread (client mode): 0xa514f5b0
2025-12-03T22:47:25.295 [DEBUG] [Thread-125062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:47:25.315 [DEBUG] [Thread-125062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:47:25.315 [INFO] [Thread-125062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] client lang: <none>
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] server lang: <none>
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] kex follows: False
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] Compression: none
2025-12-03T22:47:25.318 [DEBUG] [Thread-125062] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:47:25.334 [DEBUG] [Thread-125062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:47:25.334 [DEBUG] [Thread-125062] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:47:25.334 [DEBUG] [Thread-125062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:47:25.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:47:25.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:47:25.335 [DEBUG] [Thread-125062] [transport.py] [_log()] userauth is OK
2025-12-03T22:47:25.335 [DEBUG] [Thread-125062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:47:25.335 [DEBUG] [Thread-125062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:47:25.335 [DEBUG] [Thread-125062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:47:25.335 [DEBUG] [Thread-125062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:47:25.350 [INFO] [Thread-125062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:47:25.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:47:26.093 [DEBUG] [Thread-125062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:47:26.093 [DEBUG] [Thread-125062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:47:26.094 [DEBUG] [Thread-125062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:47:26.135 [DEBUG] [Thread-125062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:47:26.135 [DEBUG] [Thread-125062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:47:26.138 [DEBUG] [Thread-125062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:47:26.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:47:26.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:47:26.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:47:26.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:47:26.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:47:26.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:47:26.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:47:26.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:47:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:47:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.865674 -999.00  +16.00  19.12     40   +2.40 1 1 1 1 1     0    0 13.43 -1.57 ZNESW 17.6 19.1 134.6 21.8 16.2 -25.6 16.1 -25.0 15.8 -23.4 16.1 -24.2
2025-12-03T22:47:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:47:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:47:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.865674
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:47:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:46:51', tmtdew=15.53, humidity=34.88, cloud=0.0, wind=20.56, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:47:23', seeing=0.87, atlas_timestamp='2025-12-03T20:46:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.09474999999999945, -0.04124999999999979, -0.029500000000000526, 0.027000000000001023, -0.004749999999999588, 0.005499999999999616, -0.01774999999999949, -0.06050000000000111, 0.0004999999999988347, 0.014249999999998764, -0.07000000000000028, -0.012000000000000455, 0.0012500000000006395, -0.06300000000000061, -0.042500000000000426, -0.06975000000000087, 0.0235000000000003, 0.016000000000000014, -0.00575000000000081, 0.05599999999999916, 0.02424999999999855, -0.0857499999999991, -0.19175000000000075, -0.040000000000000924, 0.0024999999999995026, -0.01624999999999943, 0.015499999999999403, 0.07750000000000057, 0.18200000000000216, -0.06199999999999939, -0.05999999999999872, -0.035250000000001336], zp_timestamp='2025-12-03T20:43:00')
2025-12-03T22:47:26.163 [DEBUG] [Thread-125062] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:47:26.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:47:26.267 [DEBUG] [Thread-125065] [transport.py] [_log()] starting thread (client mode): 0xa514c220
2025-12-03T22:47:26.267 [DEBUG] [Thread-125065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:47:26.284 [DEBUG] [Thread-125065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:47:26.284 [INFO] [Thread-125065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:47:26.294 [DEBUG] [Thread-125065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] client lang: <none>
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] server lang: <none>
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] kex follows: False
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:47:26.295 [DEBUG] [Thread-125065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:47:26.296 [DEBUG] [Thread-125065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:47:26.296 [DEBUG] [Thread-125065] [transport.py] [_log()] Compression: none
2025-12-03T22:47:26.296 [DEBUG] [Thread-125065] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:47:26.352 [DEBUG] [Thread-125065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:47:26.353 [DEBUG] [Thread-125065] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:47:26.353 [DEBUG] [Thread-125065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:47:26.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:47:26.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:47:26.409 [DEBUG] [Thread-125065] [transport.py] [_log()] userauth is OK
2025-12-03T22:47:26.410 [DEBUG] [Thread-125065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:47:26.410 [DEBUG] [Thread-125065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:47:26.410 [DEBUG] [Thread-125065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:47:26.410 [DEBUG] [Thread-125065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:47:26.428 [INFO] [Thread-125065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:47:26.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:47:26.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:47:27.251 [DEBUG] [Thread-125065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:47:27.251 [DEBUG] [Thread-125065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:47:27.300 [DEBUG] [Thread-125065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:47:27.300 [DEBUG] [Thread-125065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:47:27.308 [DEBUG] [Thread-125065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:47:27.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:47:27.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:47:27.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:47:27.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:47:27.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:47:27.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:47:27.343 [DEBUG] [Thread-125065] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:47:32.460 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:36.282 [DEBUG] [Thread-125067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:51.338 [DEBUG] [Thread-125068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:52.855 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:47:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:47:57.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:47:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:47:58.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 47, 23), 15.5, 34.93, 0.0, 24.07, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:47:58.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:47:23
2025-12-03T22:47:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:47:58.389 [DEBUG] [Thread-125069] [transport.py] [_log()] starting thread (client mode): 0xa514cf40
2025-12-03T22:47:58.389 [DEBUG] [Thread-125069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:47:58.408 [DEBUG] [Thread-125069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:47:58.408 [INFO] [Thread-125069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] client lang: <none>
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] server lang: <none>
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] kex follows: False
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] Compression: none
2025-12-03T22:47:58.412 [DEBUG] [Thread-125069] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:47:58.427 [DEBUG] [Thread-125069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:47:58.427 [DEBUG] [Thread-125069] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:47:58.427 [DEBUG] [Thread-125069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:47:58.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:47:58.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:47:58.429 [DEBUG] [Thread-125069] [transport.py] [_log()] userauth is OK
2025-12-03T22:47:58.429 [DEBUG] [Thread-125069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:47:58.429 [DEBUG] [Thread-125069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:47:58.429 [DEBUG] [Thread-125069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:47:58.429 [DEBUG] [Thread-125069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:47:58.439 [INFO] [Thread-125069] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:47:58.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:47:59.008 [DEBUG] [Thread-125069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:47:59.008 [DEBUG] [Thread-125069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:47:59.008 [DEBUG] [Thread-125069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:47:59.049 [DEBUG] [Thread-125069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:47:59.049 [DEBUG] [Thread-125069] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:47:59.052 [DEBUG] [Thread-125069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:47:59.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:47:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:47:59.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:47:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:47:59.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:47:59.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:47:59.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:47:59.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.866369 -999.00  +15.90  19.07     40   +2.40 1 1 1 1 1     0    0 13.45 -1.67 ZNESW 17.6 19.1 138.8 22.5 16.2 -25.7 16.1 -24.9 15.8 -23.4 16.1 -24.2
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.866369
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:47:59.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:47:23', tmtdew=15.5, humidity=34.93, cloud=0.0, wind=24.07, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:47:55', seeing=0.88, atlas_timestamp='2025-12-03T20:47:34.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.0467499999999994, -0.027749999999999275, 0.030999999999998806, 0.02800000000000047, -0.04574999999999996, -0.026000000000001577, -0.016750000000000043, -0.15450000000000053, 0.010999999999999233, -0.0002500000000011937, -0.10299999999999976, -0.006000000000000227, -0.06424999999999947, -0.15249999999999986, -0.08900000000000041, -0.03974999999999973, 0.014499999999999957, 0.005999999999998451, -0.006750000000000256, 0.05099999999999838, -0.026750000000001606, -0.10524999999999984, -0.2292500000000004, -0.04800000000000004, -0.027499999999999858, -0.04224999999999923, -0.032999999999999474, 0.08300000000000018, 0.136000000000001, -0.09549999999999947, -0.192499999999999, -0.05525000000000091], zp_timestamp='2025-12-03T20:46:00')
2025-12-03T22:47:59.063 [DEBUG] [Thread-125069] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:47:59.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:47:59.157 [DEBUG] [Thread-125072] [transport.py] [_log()] starting thread (client mode): 0xa514d0f0
2025-12-03T22:47:59.157 [DEBUG] [Thread-125072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:47:59.175 [DEBUG] [Thread-125072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:47:59.175 [INFO] [Thread-125072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] client lang: <none>
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] server lang: <none>
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] kex follows: False
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] Compression: none
2025-12-03T22:47:59.183 [DEBUG] [Thread-125072] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:47:59.249 [DEBUG] [Thread-125072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:47:59.249 [DEBUG] [Thread-125072] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:47:59.249 [DEBUG] [Thread-125072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:47:59.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:47:59.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:47:59.306 [DEBUG] [Thread-125072] [transport.py] [_log()] userauth is OK
2025-12-03T22:47:59.306 [DEBUG] [Thread-125072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:47:59.306 [DEBUG] [Thread-125072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:47:59.306 [DEBUG] [Thread-125072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:47:59.306 [DEBUG] [Thread-125072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:47:59.320 [INFO] [Thread-125072] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:47:59.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:47:59.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:48:00.150 [DEBUG] [Thread-125072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:48:00.150 [DEBUG] [Thread-125072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:48:00.198 [DEBUG] [Thread-125072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:48:00.198 [DEBUG] [Thread-125072] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:48:00.206 [DEBUG] [Thread-125072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:48:00.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:48:00.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:48:00.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:48:00.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:48:00.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:48:00.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:48:00.241 [DEBUG] [Thread-125072] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:48:06.380 [DEBUG] [Thread-125074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:07.569 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:07.570 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:13.318 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:16.886 [DEBUG] [Thread-125075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:21.445 [DEBUG] [Thread-125076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:30.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:48:30.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:48:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:48:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 48, 28), 15.49, 34.97, 0.0, 27.14, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:48:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:48:28
2025-12-03T22:48:31.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:48:31.202 [DEBUG] [Thread-125077] [transport.py] [_log()] starting thread (client mode): 0x9fd21ab0
2025-12-03T22:48:31.202 [DEBUG] [Thread-125077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:48:31.215 [DEBUG] [Thread-125077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:48:31.215 [INFO] [Thread-125077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] client lang: <none>
2025-12-03T22:48:31.218 [DEBUG] [Thread-125077] [transport.py] [_log()] server lang: <none>
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] kex follows: False
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] Compression: none
2025-12-03T22:48:31.219 [DEBUG] [Thread-125077] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:48:31.235 [DEBUG] [Thread-125077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:48:31.236 [DEBUG] [Thread-125077] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:48:31.236 [DEBUG] [Thread-125077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:48:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:48:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:48:31.237 [DEBUG] [Thread-125077] [transport.py] [_log()] userauth is OK
2025-12-03T22:48:31.237 [DEBUG] [Thread-125077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:48:31.237 [DEBUG] [Thread-125077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:48:31.237 [DEBUG] [Thread-125077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:48:31.237 [DEBUG] [Thread-125077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:48:31.251 [INFO] [Thread-125077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:48:31.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:48:32.018 [DEBUG] [Thread-125077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:48:32.018 [DEBUG] [Thread-125077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:48:32.018 [DEBUG] [Thread-125077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:48:32.059 [DEBUG] [Thread-125077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:48:32.059 [DEBUG] [Thread-125077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:48:32.062 [DEBUG] [Thread-125077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:48:32.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:48:32.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:48:32.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:48:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:48:32.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:48:32.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:48:32.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.866716 -999.00  +15.90  16.66     40   +2.40 1 1 1 1 1     0    0 13.49 -2.15 ZNESW 17.5 16.7 137.8 21.6 16.2 -25.6 16.1 -25.0 15.8 -23.4 16.1 -24.4
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:48:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.866716
2025-12-03T22:48:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:48:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:48:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:48:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:48:32.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:48:32.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:48:28', tmtdew=15.49, humidity=34.97, cloud=0.0, wind=27.14, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:48:28', seeing=0.88, atlas_timestamp='2025-12-03T20:48:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.0467499999999994, -0.027749999999999275, 0.030999999999998806, 0.02800000000000047, -0.04574999999999996, -0.026000000000001577, -0.016750000000000043, -0.15450000000000053, 0.010999999999999233, -0.0002500000000011937, -0.10299999999999976, -0.006000000000000227, -0.06424999999999947, -0.15249999999999986, -0.08900000000000041, -0.03974999999999973, 0.014499999999999957, 0.005999999999998451, -0.006750000000000256, 0.05099999999999838, -0.026750000000001606, -0.10524999999999984, -0.2292500000000004, -0.04800000000000004, -0.027499999999999858, -0.04224999999999923, -0.032999999999999474, 0.08300000000000018, 0.136000000000001, -0.09549999999999947, -0.192499999999999, -0.05525000000000091], zp_timestamp='2025-12-03T20:46:00')
2025-12-03T22:48:32.083 [DEBUG] [Thread-125077] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:48:32.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:48:32.187 [DEBUG] [Thread-125080] [transport.py] [_log()] starting thread (client mode): 0x9fd22200
2025-12-03T22:48:32.188 [DEBUG] [Thread-125080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:48:32.205 [DEBUG] [Thread-125080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:48:32.205 [INFO] [Thread-125080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:48:32.212 [DEBUG] [Thread-125080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] client lang: <none>
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] server lang: <none>
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] kex follows: False
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] Compression: none
2025-12-03T22:48:32.213 [DEBUG] [Thread-125080] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:48:32.272 [DEBUG] [Thread-125080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:48:32.273 [DEBUG] [Thread-125080] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:48:32.273 [DEBUG] [Thread-125080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:48:32.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:48:32.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:48:32.333 [DEBUG] [Thread-125080] [transport.py] [_log()] userauth is OK
2025-12-03T22:48:32.334 [DEBUG] [Thread-125080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:48:32.334 [DEBUG] [Thread-125080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:48:32.334 [DEBUG] [Thread-125080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:48:32.334 [DEBUG] [Thread-125080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:48:32.354 [INFO] [Thread-125080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:48:32.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:48:32.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:48:33.183 [DEBUG] [Thread-125080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:48:33.183 [DEBUG] [Thread-125080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:48:33.232 [DEBUG] [Thread-125080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:48:33.233 [DEBUG] [Thread-125080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:48:33.241 [DEBUG] [Thread-125080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:48:33.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:48:33.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:48:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:48:33.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:48:33.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:48:33.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:48:33.275 [DEBUG] [Thread-125080] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:48:33.720 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:36.474 [DEBUG] [Thread-125082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:51.531 [DEBUG] [Thread-125083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:48:54.100 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:49:03.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:49:03.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:49:03.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 48, 28), 15.49, 34.97, 0.0, 27.14, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:49:03.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:48:28
2025-12-03T22:49:04.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:49:04.241 [DEBUG] [Thread-125084] [transport.py] [_log()] starting thread (client mode): 0xa514c0d0
2025-12-03T22:49:04.241 [DEBUG] [Thread-125084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:49:04.262 [DEBUG] [Thread-125084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:49:04.262 [INFO] [Thread-125084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:49:04.265 [DEBUG] [Thread-125084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] client lang: <none>
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] server lang: <none>
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] kex follows: False
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] Compression: none
2025-12-03T22:49:04.266 [DEBUG] [Thread-125084] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:49:04.286 [DEBUG] [Thread-125084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:49:04.286 [DEBUG] [Thread-125084] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:49:04.287 [DEBUG] [Thread-125084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:49:04.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:49:04.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:49:04.289 [DEBUG] [Thread-125084] [transport.py] [_log()] userauth is OK
2025-12-03T22:49:04.289 [DEBUG] [Thread-125084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:49:04.289 [DEBUG] [Thread-125084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:49:04.289 [DEBUG] [Thread-125084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:49:04.289 [DEBUG] [Thread-125084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:49:04.313 [INFO] [Thread-125084] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:49:04.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:49:04.947 [DEBUG] [Thread-125084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:49:04.947 [DEBUG] [Thread-125084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:49:04.947 [DEBUG] [Thread-125084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:49:04.988 [DEBUG] [Thread-125084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:49:04.988 [DEBUG] [Thread-125084] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:49:04.991 [DEBUG] [Thread-125084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:49:05.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:49:05.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:49:05.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:49:05.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:49:05.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:49:05.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:49:05.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:49:05.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.867063 -999.00  +15.90  16.86     40   +2.40 1 1 1 1 1     0    0 13.51 -2.42 ZNESW 17.9 16.9 138.2 20.3 16.1 -25.6 16.0 -25.1 15.8 -23.4 16.1 -24.3
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.867063
2025-12-03T22:49:05.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:49:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:49:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:49:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:49:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:49:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:48:28', tmtdew=15.49, humidity=34.97, cloud=0.0, wind=27.14, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:49:00', seeing=1.03, atlas_timestamp='2025-12-03T20:48:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.0467499999999994, -0.027749999999999275, 0.030999999999998806, 0.02800000000000047, -0.04574999999999996, -0.026000000000001577, -0.016750000000000043, -0.15450000000000053, 0.010999999999999233, -0.0002500000000011937, -0.10299999999999976, -0.006000000000000227, -0.06424999999999947, -0.15249999999999986, -0.08900000000000041, -0.03974999999999973, 0.014499999999999957, 0.005999999999998451, -0.006750000000000256, 0.05099999999999838, -0.026750000000001606, -0.10524999999999984, -0.2292500000000004, -0.04800000000000004, -0.027499999999999858, -0.04224999999999923, -0.032999999999999474, 0.08300000000000018, 0.136000000000001, -0.09549999999999947, -0.192499999999999, -0.05525000000000091], zp_timestamp='2025-12-03T20:46:00')
2025-12-03T22:49:05.015 [DEBUG] [Thread-125084] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:49:05.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:49:06.570 [DEBUG] [Thread-125087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:07.772 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:07.773 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:14.507 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:16.939 [DEBUG] [Thread-125088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:21.634 [DEBUG] [Thread-125089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:34.905 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:36.671 [DEBUG] [Thread-125090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:51.706 [DEBUG] [Thread-125091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:49:55.336 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:06.739 [DEBUG] [Thread-125092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:07.972 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:07.973 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:15.741 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:17.009 [DEBUG] [Thread-125093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:21.776 [DEBUG] [Thread-125094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:36.132 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:36.811 [DEBUG] [Thread-125095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:51.845 [DEBUG] [Thread-125096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:50:56.585 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:06.882 [DEBUG] [Thread-125097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:08.172 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:08.173 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:17.029 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:17.068 [DEBUG] [Thread-125098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:18.294 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T22:51:21.918 [DEBUG] [Thread-125099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:36.955 [DEBUG] [Thread-125100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:37.421 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:48.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:51:48.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:51:48.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:51:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 51, 40), 15.43, 34.88, 0.0, 24.61, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:51:49.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:51:40
2025-12-03T22:51:49.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:51:49.339 [DEBUG] [Thread-125101] [transport.py] [_log()] starting thread (client mode): 0xa514c130
2025-12-03T22:51:49.339 [DEBUG] [Thread-125101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:51:49.359 [DEBUG] [Thread-125101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:51:49.359 [INFO] [Thread-125101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] client lang: <none>
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] server lang: <none>
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] kex follows: False
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] Compression: none
2025-12-03T22:51:49.362 [DEBUG] [Thread-125101] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:51:49.377 [DEBUG] [Thread-125101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:51:49.377 [DEBUG] [Thread-125101] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:51:49.377 [DEBUG] [Thread-125101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:51:49.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:51:49.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:51:49.378 [DEBUG] [Thread-125101] [transport.py] [_log()] userauth is OK
2025-12-03T22:51:49.378 [DEBUG] [Thread-125101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:51:49.378 [DEBUG] [Thread-125101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:51:49.378 [DEBUG] [Thread-125101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:51:49.378 [DEBUG] [Thread-125101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:51:49.398 [INFO] [Thread-125101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:51:49.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:51:50.044 [DEBUG] [Thread-125101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:51:50.044 [DEBUG] [Thread-125101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:51:50.044 [DEBUG] [Thread-125101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:51:50.084 [DEBUG] [Thread-125101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:51:50.084 [DEBUG] [Thread-125101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:51:50.087 [DEBUG] [Thread-125101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:51:50.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:51:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:51:50.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:51:50.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:51:50.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:51:50.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:51:50.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.869146 -999.00  +15.90  13.54     40   +2.40 1 1 1 1 1     0    0 13.67 -5.84 ZNESW 20.3 13.5 145.6 22.4 16.1 -25.6 16.0 -24.9 15.8 -23.3 16.1 -24.2
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.869146
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:51:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:51:40', tmtdew=15.43, humidity=34.88, cloud=0.0, wind=24.61, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:51:40', seeing=1.1, atlas_timestamp='2025-12-03T20:51:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:50:00')
2025-12-03T22:51:50.104 [DEBUG] [Thread-125101] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:51:50.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:51:50.197 [DEBUG] [Thread-125104] [transport.py] [_log()] starting thread (client mode): 0xa514d420
2025-12-03T22:51:50.197 [DEBUG] [Thread-125104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:51:50.213 [DEBUG] [Thread-125104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:51:50.213 [INFO] [Thread-125104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] client lang: <none>
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] server lang: <none>
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] kex follows: False
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] Compression: none
2025-12-03T22:51:50.220 [DEBUG] [Thread-125104] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:51:50.277 [DEBUG] [Thread-125104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:51:50.277 [DEBUG] [Thread-125104] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:51:50.277 [DEBUG] [Thread-125104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:51:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:51:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:51:50.334 [DEBUG] [Thread-125104] [transport.py] [_log()] userauth is OK
2025-12-03T22:51:50.334 [DEBUG] [Thread-125104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:51:50.334 [DEBUG] [Thread-125104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:51:50.334 [DEBUG] [Thread-125104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:51:50.334 [DEBUG] [Thread-125104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:51:50.349 [INFO] [Thread-125104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:51:50.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:51:50.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:51:51.201 [DEBUG] [Thread-125104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:51:51.201 [DEBUG] [Thread-125104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:51:51.248 [DEBUG] [Thread-125104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:51:51.248 [DEBUG] [Thread-125104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:51:51.256 [DEBUG] [Thread-125104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:51:51.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:51:51.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:51:51.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:51:51.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:51:51.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:51:51.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:51:51.288 [DEBUG] [Thread-125104] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:51:51.994 [DEBUG] [Thread-125106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:51:57.830 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:07.044 [DEBUG] [Thread-125107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:08.372 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:08.373 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:17.129 [DEBUG] [Thread-125108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:18.242 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:21.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:52:21.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:52:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:52:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 52, 12), 15.4, 34.93, 0.0, 24.09, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:52:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:52:12
2025-12-03T22:52:22.078 [DEBUG] [Thread-125109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:22.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:52:22.307 [DEBUG] [Thread-125110] [transport.py] [_log()] starting thread (client mode): 0xa514cdf0
2025-12-03T22:52:22.307 [DEBUG] [Thread-125110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:52:22.321 [DEBUG] [Thread-125110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:52:22.321 [INFO] [Thread-125110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] client lang: <none>
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] server lang: <none>
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] kex follows: False
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] Compression: none
2025-12-03T22:52:22.323 [DEBUG] [Thread-125110] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:52:22.331 [DEBUG] [Thread-125110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:52:22.332 [DEBUG] [Thread-125110] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:52:22.332 [DEBUG] [Thread-125110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:52:22.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:52:22.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:52:22.334 [DEBUG] [Thread-125110] [transport.py] [_log()] userauth is OK
2025-12-03T22:52:22.334 [DEBUG] [Thread-125110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:52:22.334 [DEBUG] [Thread-125110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:52:22.334 [DEBUG] [Thread-125110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:52:22.334 [DEBUG] [Thread-125110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:52:22.351 [INFO] [Thread-125110] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:52:22.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:52:22.911 [DEBUG] [Thread-125110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:52:22.911 [DEBUG] [Thread-125110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:52:22.911 [DEBUG] [Thread-125110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:52:22.952 [DEBUG] [Thread-125110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:52:22.952 [DEBUG] [Thread-125110] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:52:22.954 [DEBUG] [Thread-125110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:52:22.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:52:22.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:52:22.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:52:22.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:52:22.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:52:22.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:52:22.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.869494 -999.00  +15.90  19.15     40   +2.40 1 1 1 1 1     0    0 13.49 -6.08 ZNESW 16.4 19.1 137.6 23.4 16.1 -25.6 16.0 -25.1 15.8 -23.3 16.0 -24.2
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.869494
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:52:22.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:52:12', tmtdew=15.4, humidity=34.93, cloud=0.0, wind=24.09, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:52:12', seeing=1.1, atlas_timestamp='2025-12-03T20:52:04.282', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:50:00')
2025-12-03T22:52:22.967 [DEBUG] [Thread-125110] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:52:23.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:52:23.057 [DEBUG] [Thread-125113] [transport.py] [_log()] starting thread (client mode): 0x9fd223e0
2025-12-03T22:52:23.057 [DEBUG] [Thread-125113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:52:23.072 [DEBUG] [Thread-125113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:52:23.072 [INFO] [Thread-125113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:52:23.079 [DEBUG] [Thread-125113] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:52:23.079 [DEBUG] [Thread-125113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] client lang: <none>
2025-12-03T22:52:23.080 [DEBUG] [Thread-125113] [transport.py] [_log()] server lang: <none>
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] kex follows: False
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] Compression: none
2025-12-03T22:52:23.081 [DEBUG] [Thread-125113] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:52:23.137 [DEBUG] [Thread-125113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:52:23.138 [DEBUG] [Thread-125113] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:52:23.138 [DEBUG] [Thread-125113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:52:23.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:52:23.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:52:23.194 [DEBUG] [Thread-125113] [transport.py] [_log()] userauth is OK
2025-12-03T22:52:23.194 [DEBUG] [Thread-125113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:52:23.194 [DEBUG] [Thread-125113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:52:23.194 [DEBUG] [Thread-125113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:52:23.194 [DEBUG] [Thread-125113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:52:23.213 [INFO] [Thread-125113] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:52:23.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:52:23.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:52:24.068 [DEBUG] [Thread-125113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:52:24.068 [DEBUG] [Thread-125113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:52:24.116 [DEBUG] [Thread-125113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:52:24.116 [DEBUG] [Thread-125113] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:52:24.125 [DEBUG] [Thread-125113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:52:24.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:52:24.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:52:24.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:52:24.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:52:24.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:52:24.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:52:24.164 [DEBUG] [Thread-125113] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:52:37.114 [DEBUG] [Thread-125115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:38.690 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:52.174 [DEBUG] [Thread-125116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:52:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:52:54.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:52:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:52:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 52, 44), 15.48, 34.98, 0.0, 26.59, 15.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:52:54.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:52:44
2025-12-03T22:52:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:52:55.149 [DEBUG] [Thread-125117] [transport.py] [_log()] starting thread (client mode): 0x9fd23070
2025-12-03T22:52:55.149 [DEBUG] [Thread-125117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:52:55.167 [DEBUG] [Thread-125117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:52:55.167 [INFO] [Thread-125117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] client lang: <none>
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] server lang: <none>
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] kex follows: False
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:52:55.168 [DEBUG] [Thread-125117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:52:55.169 [DEBUG] [Thread-125117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:52:55.169 [DEBUG] [Thread-125117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:52:55.169 [DEBUG] [Thread-125117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:52:55.169 [DEBUG] [Thread-125117] [transport.py] [_log()] Compression: none
2025-12-03T22:52:55.169 [DEBUG] [Thread-125117] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:52:55.180 [DEBUG] [Thread-125117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:52:55.181 [DEBUG] [Thread-125117] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:52:55.181 [DEBUG] [Thread-125117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:52:55.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:52:55.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:52:55.183 [DEBUG] [Thread-125117] [transport.py] [_log()] userauth is OK
2025-12-03T22:52:55.183 [DEBUG] [Thread-125117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:52:55.183 [DEBUG] [Thread-125117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:52:55.183 [DEBUG] [Thread-125117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:52:55.183 [DEBUG] [Thread-125117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:52:55.206 [INFO] [Thread-125117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:52:55.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:52:55.810 [DEBUG] [Thread-125117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:52:55.810 [DEBUG] [Thread-125117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:52:55.811 [DEBUG] [Thread-125117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:52:55.852 [DEBUG] [Thread-125117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:52:55.852 [DEBUG] [Thread-125117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:52:55.854 [DEBUG] [Thread-125117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:52:55.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:52:55.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:52:55.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:52:55.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:52:55.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:52:55.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:52:55.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:52:55.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:52:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:52:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.869841 -999.00  +15.90  22.04     40   +2.40 1 1 1 1 1     0    0 13.39 -7.10 ZNESW 20.3 22.0 135.2 28.4 16.1 -25.5 16.0 -25.0 15.8 -23.4 16.1 -24.3
2025-12-03T22:52:55.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:52:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:52:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.869841
2025-12-03T22:52:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:52:55.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:52:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:52:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:52:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:52:55.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:52:44', tmtdew=15.48, humidity=34.98, cloud=0.0, wind=26.59, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:52:44', seeing=1.12, atlas_timestamp='2025-12-03T20:52:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:50:00')
2025-12-03T22:52:55.872 [DEBUG] [Thread-125117] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:52:55.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:52:55.984 [DEBUG] [Thread-125120] [transport.py] [_log()] starting thread (client mode): 0x9fd23490
2025-12-03T22:52:55.984 [DEBUG] [Thread-125120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:52:55.999 [DEBUG] [Thread-125120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:52:56.000 [INFO] [Thread-125120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:52:56.007 [DEBUG] [Thread-125120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:52:56.007 [DEBUG] [Thread-125120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:52:56.007 [DEBUG] [Thread-125120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:52:56.007 [DEBUG] [Thread-125120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] client lang: <none>
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] server lang: <none>
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] kex follows: False
2025-12-03T22:52:56.008 [DEBUG] [Thread-125120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] Compression: none
2025-12-03T22:52:56.009 [DEBUG] [Thread-125120] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:52:56.068 [DEBUG] [Thread-125120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:52:56.069 [DEBUG] [Thread-125120] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:52:56.069 [DEBUG] [Thread-125120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:52:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:52:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:52:56.125 [DEBUG] [Thread-125120] [transport.py] [_log()] userauth is OK
2025-12-03T22:52:56.125 [DEBUG] [Thread-125120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:52:56.125 [DEBUG] [Thread-125120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:52:56.126 [DEBUG] [Thread-125120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:52:56.126 [DEBUG] [Thread-125120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:52:56.146 [INFO] [Thread-125120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:52:56.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:52:56.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:52:56.989 [DEBUG] [Thread-125120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:52:56.989 [DEBUG] [Thread-125120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:52:57.037 [DEBUG] [Thread-125120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:52:57.037 [DEBUG] [Thread-125120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:52:57.046 [DEBUG] [Thread-125120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:52:57.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:52:57.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:52:57.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:52:57.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:52:57.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:52:57.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:52:57.077 [DEBUG] [Thread-125120] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:52:59.099 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:07.208 [DEBUG] [Thread-125122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:08.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:08.574 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:17.182 [DEBUG] [Thread-125123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:19.531 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:22.254 [DEBUG] [Thread-125124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:53:27.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:53:27.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:53:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 53, 16), 15.48, 35.0, 0.0, 24.33, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:53:27.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:53:16
2025-12-03T22:53:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:53:28.044 [DEBUG] [Thread-125125] [transport.py] [_log()] starting thread (client mode): 0xa514d990
2025-12-03T22:53:28.044 [DEBUG] [Thread-125125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:53:28.064 [DEBUG] [Thread-125125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:53:28.064 [INFO] [Thread-125125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:53:28.067 [DEBUG] [Thread-125125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:53:28.067 [DEBUG] [Thread-125125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] client lang: <none>
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] server lang: <none>
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] kex follows: False
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] Compression: none
2025-12-03T22:53:28.068 [DEBUG] [Thread-125125] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:53:28.087 [DEBUG] [Thread-125125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:53:28.087 [DEBUG] [Thread-125125] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:53:28.088 [DEBUG] [Thread-125125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:53:28.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:53:28.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:53:28.090 [DEBUG] [Thread-125125] [transport.py] [_log()] userauth is OK
2025-12-03T22:53:28.090 [DEBUG] [Thread-125125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:53:28.090 [DEBUG] [Thread-125125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:53:28.090 [DEBUG] [Thread-125125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:53:28.090 [DEBUG] [Thread-125125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:53:28.107 [INFO] [Thread-125125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:53:28.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:53:28.725 [DEBUG] [Thread-125125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:53:28.725 [DEBUG] [Thread-125125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:53:28.726 [DEBUG] [Thread-125125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:53:28.766 [DEBUG] [Thread-125125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:53:28.766 [DEBUG] [Thread-125125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:53:28.768 [DEBUG] [Thread-125125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:53:28.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:53:28.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:53:28.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:53:28.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:53:28.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:53:28.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:53:28.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:53:28.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:53:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:53:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.869841 -999.00  +15.90  22.04     40   +2.40 1 1 1 1 1     0    0 13.39 -7.10 ZNESW 20.3 22.0 135.2 28.4 16.1 -25.5 16.0 -25.0 15.8 -23.4 16.1 -24.3
2025-12-03T22:53:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:53:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:53:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.869841
2025-12-03T22:53:28.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:53:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:53:28.789 [DEBUG] [Thread-125125] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:53:28.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:53:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:53:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:53:28.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:53:16', tmtdew=15.48, humidity=35.0, cloud=0.0, wind=24.33, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:53:16', seeing=1.0, atlas_timestamp='2025-12-03T20:52:34.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:50:00')
2025-12-03T22:53:28.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:53:28.897 [DEBUG] [Thread-125128] [transport.py] [_log()] starting thread (client mode): 0x9fd23640
2025-12-03T22:53:28.897 [DEBUG] [Thread-125128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:53:28.917 [DEBUG] [Thread-125128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:53:28.917 [INFO] [Thread-125128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:53:28.926 [DEBUG] [Thread-125128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] client lang: <none>
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] server lang: <none>
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] kex follows: False
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] Compression: none
2025-12-03T22:53:28.927 [DEBUG] [Thread-125128] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:53:28.985 [DEBUG] [Thread-125128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:53:28.985 [DEBUG] [Thread-125128] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:53:28.985 [DEBUG] [Thread-125128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:53:28.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:53:28.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:53:29.041 [DEBUG] [Thread-125128] [transport.py] [_log()] userauth is OK
2025-12-03T22:53:29.041 [DEBUG] [Thread-125128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:53:29.042 [DEBUG] [Thread-125128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:53:29.042 [DEBUG] [Thread-125128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:53:29.042 [DEBUG] [Thread-125128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:53:29.060 [INFO] [Thread-125128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:53:29.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:53:29.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:53:29.871 [DEBUG] [Thread-125128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:53:29.871 [DEBUG] [Thread-125128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:53:29.919 [DEBUG] [Thread-125128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:53:29.919 [DEBUG] [Thread-125128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:53:29.928 [DEBUG] [Thread-125128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:53:29.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:53:29.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:53:29.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:53:29.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:53:29.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:53:29.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:53:29.963 [DEBUG] [Thread-125128] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:53:37.292 [DEBUG] [Thread-125130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:39.949 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:52.346 [DEBUG] [Thread-125131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:53:59.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:53:59.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:53:59.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:54:00.401 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 53, 48), 15.58, 34.88, 0.0, 27.76, 16.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:54:00.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:53:48
2025-12-03T22:54:00.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:54:00.936 [DEBUG] [Thread-125132] [transport.py] [_log()] starting thread (client mode): 0x9fd21210
2025-12-03T22:54:00.936 [DEBUG] [Thread-125132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:54:00.957 [DEBUG] [Thread-125132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:54:00.957 [INFO] [Thread-125132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:54:00.960 [DEBUG] [Thread-125132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:54:00.960 [DEBUG] [Thread-125132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] client lang: <none>
2025-12-03T22:54:00.961 [DEBUG] [Thread-125132] [transport.py] [_log()] server lang: <none>
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] kex follows: False
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] Compression: none
2025-12-03T22:54:00.962 [DEBUG] [Thread-125132] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:54:00.981 [DEBUG] [Thread-125132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:54:00.982 [DEBUG] [Thread-125132] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:54:00.982 [DEBUG] [Thread-125132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:54:00.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:54:00.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:54:00.984 [DEBUG] [Thread-125132] [transport.py] [_log()] userauth is OK
2025-12-03T22:54:00.984 [DEBUG] [Thread-125132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:54:00.984 [DEBUG] [Thread-125132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:54:00.984 [DEBUG] [Thread-125132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:54:00.985 [DEBUG] [Thread-125132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:54:01.020 [INFO] [Thread-125132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:54:01.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:54:01.638 [DEBUG] [Thread-125132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:54:01.638 [DEBUG] [Thread-125132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:54:01.639 [DEBUG] [Thread-125132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:54:01.679 [DEBUG] [Thread-125132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:54:01.679 [DEBUG] [Thread-125132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:54:01.682 [DEBUG] [Thread-125132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:54:01.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:54:01.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:54:01.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:54:01.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:54:01.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:54:01.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:54:01.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.870188 -999.00  +15.90  17.21     40   +2.40 1 1 1 1 1     0    0 13.38 -7.71 ZNESW 17.7 17.2 150.0 24.4 16.1 -25.4 16.1 -25.0 15.8 -23.3 16.1 -24.0
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:54:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.870188
2025-12-03T22:54:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:54:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:54:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:54:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:54:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:54:01.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:53:48', tmtdew=15.58, humidity=34.88, cloud=0.0, wind=27.76, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:53:49', seeing=1.0, atlas_timestamp='2025-12-03T20:53:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:54:01.706 [DEBUG] [Thread-125132] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:54:01.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:54:01.813 [DEBUG] [Thread-125135] [transport.py] [_log()] starting thread (client mode): 0x9fd21900
2025-12-03T22:54:01.813 [DEBUG] [Thread-125135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:54:01.827 [DEBUG] [Thread-125135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:54:01.827 [INFO] [Thread-125135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:01.835 [DEBUG] [Thread-125135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] client lang: <none>
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] server lang: <none>
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] kex follows: False
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] Compression: none
2025-12-03T22:54:01.836 [DEBUG] [Thread-125135] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:54:01.892 [DEBUG] [Thread-125135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:54:01.893 [DEBUG] [Thread-125135] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:54:01.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:54:01.894 [DEBUG] [Thread-125135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:54:01.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:54:01.948 [DEBUG] [Thread-125135] [transport.py] [_log()] userauth is OK
2025-12-03T22:54:01.949 [DEBUG] [Thread-125135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:54:01.949 [DEBUG] [Thread-125135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:54:01.949 [DEBUG] [Thread-125135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:54:01.949 [DEBUG] [Thread-125135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:54:01.968 [INFO] [Thread-125135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:54:01.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:54:01.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:54:02.834 [DEBUG] [Thread-125135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:54:02.834 [DEBUG] [Thread-125135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:54:02.882 [DEBUG] [Thread-125135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:54:02.882 [DEBUG] [Thread-125135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:54:02.890 [DEBUG] [Thread-125135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:54:02.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:54:02.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:54:02.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:54:02.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:54:02.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:54:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:54:02.926 [DEBUG] [Thread-125135] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:54:07.381 [DEBUG] [Thread-125137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:08.775 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:08.776 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:17.245 [DEBUG] [Thread-125138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:20.848 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:22.437 [DEBUG] [Thread-125139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:32.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:54:32.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:54:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:54:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 54, 20), 15.6, 34.84, 0.0, 27.3, 16.11, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:54:33.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:54:20
2025-12-03T22:54:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:54:33.903 [DEBUG] [Thread-125140] [transport.py] [_log()] starting thread (client mode): 0xa514ed70
2025-12-03T22:54:33.903 [DEBUG] [Thread-125140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:54:33.921 [DEBUG] [Thread-125140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:54:33.921 [INFO] [Thread-125140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] client lang: <none>
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] server lang: <none>
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] kex follows: False
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:54:33.923 [DEBUG] [Thread-125140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:54:33.924 [DEBUG] [Thread-125140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:54:33.924 [DEBUG] [Thread-125140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:54:33.924 [DEBUG] [Thread-125140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:54:33.924 [DEBUG] [Thread-125140] [transport.py] [_log()] Compression: none
2025-12-03T22:54:33.924 [DEBUG] [Thread-125140] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:54:33.938 [DEBUG] [Thread-125140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:54:33.938 [DEBUG] [Thread-125140] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:54:33.939 [DEBUG] [Thread-125140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:54:33.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:54:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:54:33.941 [DEBUG] [Thread-125140] [transport.py] [_log()] userauth is OK
2025-12-03T22:54:33.941 [DEBUG] [Thread-125140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:54:33.941 [DEBUG] [Thread-125140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:54:33.941 [DEBUG] [Thread-125140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:54:33.941 [DEBUG] [Thread-125140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:54:33.965 [INFO] [Thread-125140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:54:33.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:54:34.605 [DEBUG] [Thread-125140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:54:34.605 [DEBUG] [Thread-125140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:54:34.606 [DEBUG] [Thread-125140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:54:34.647 [DEBUG] [Thread-125140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:54:34.647 [DEBUG] [Thread-125140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:54:34.649 [DEBUG] [Thread-125140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:54:34.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:54:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:54:34.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:54:34.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:54:34.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:54:34.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:54:34.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:54:34.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:54:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:54:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.870535 -999.00  +15.90  15.63     40   +2.40 1 1 1 1 1     0    0 13.33 -8.18 ZNESW 18.1 15.6 138.4 26.1 16.1 -25.6 16.0 -25.1 15.8 -23.3 16.0 -24.2
2025-12-03T22:54:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:54:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:54:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.870535
2025-12-03T22:54:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:54:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:54:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:54:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:54:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:54:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:54:20', tmtdew=15.6, humidity=34.84, cloud=0.0, wind=27.3, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:54:21', seeing=1.07, atlas_timestamp='2025-12-03T20:53:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:54:34.666 [DEBUG] [Thread-125140] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:54:34.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:54:34.768 [DEBUG] [Thread-125143] [transport.py] [_log()] starting thread (client mode): 0xa514d0f0
2025-12-03T22:54:34.768 [DEBUG] [Thread-125143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:54:34.787 [DEBUG] [Thread-125143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:54:34.787 [INFO] [Thread-125143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:54:34.794 [DEBUG] [Thread-125143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:54:34.795 [DEBUG] [Thread-125143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] client lang: <none>
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] server lang: <none>
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] kex follows: False
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:54:34.796 [DEBUG] [Thread-125143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:54:34.797 [DEBUG] [Thread-125143] [transport.py] [_log()] Compression: none
2025-12-03T22:54:34.797 [DEBUG] [Thread-125143] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:54:34.853 [DEBUG] [Thread-125143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:54:34.853 [DEBUG] [Thread-125143] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:54:34.854 [DEBUG] [Thread-125143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:54:34.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:54:34.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:54:34.908 [DEBUG] [Thread-125143] [transport.py] [_log()] userauth is OK
2025-12-03T22:54:34.908 [DEBUG] [Thread-125143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:54:34.909 [DEBUG] [Thread-125143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:54:34.909 [DEBUG] [Thread-125143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:54:34.909 [DEBUG] [Thread-125143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:54:34.931 [INFO] [Thread-125143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:54:34.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:54:34.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:54:35.755 [DEBUG] [Thread-125143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:54:35.755 [DEBUG] [Thread-125143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:54:35.803 [DEBUG] [Thread-125143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:54:35.803 [DEBUG] [Thread-125143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:54:35.812 [DEBUG] [Thread-125143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:54:35.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:54:35.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:54:35.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:54:35.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:54:35.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:54:35.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:54:35.846 [DEBUG] [Thread-125143] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:54:37.470 [DEBUG] [Thread-125145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:41.343 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:54:52.528 [DEBUG] [Thread-125146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:01.742 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:05.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:55:05.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:55:05.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:55:06.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 54, 53), 15.56, 34.8, 0.0, 25.87, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:55:06.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:54:53
2025-12-03T22:55:06.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:55:06.827 [DEBUG] [Thread-125147] [transport.py] [_log()] starting thread (client mode): 0x9fd21570
2025-12-03T22:55:06.827 [DEBUG] [Thread-125147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:55:06.849 [DEBUG] [Thread-125147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:55:06.849 [INFO] [Thread-125147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:55:06.852 [DEBUG] [Thread-125147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:55:06.852 [DEBUG] [Thread-125147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:55:06.852 [DEBUG] [Thread-125147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] client lang: <none>
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] server lang: <none>
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] kex follows: False
2025-12-03T22:55:06.853 [DEBUG] [Thread-125147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] Compression: none
2025-12-03T22:55:06.854 [DEBUG] [Thread-125147] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:55:06.874 [DEBUG] [Thread-125147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:55:06.875 [DEBUG] [Thread-125147] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:55:06.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:55:06.876 [DEBUG] [Thread-125147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:55:06.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:55:06.878 [DEBUG] [Thread-125147] [transport.py] [_log()] userauth is OK
2025-12-03T22:55:06.878 [DEBUG] [Thread-125147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:55:06.878 [DEBUG] [Thread-125147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:55:06.878 [DEBUG] [Thread-125147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:55:06.878 [DEBUG] [Thread-125147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:55:06.901 [INFO] [Thread-125147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:55:06.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:55:07.561 [DEBUG] [Thread-125149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:07.821 [DEBUG] [Thread-125147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:55:07.821 [DEBUG] [Thread-125147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:55:07.821 [DEBUG] [Thread-125147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:55:07.862 [DEBUG] [Thread-125147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:55:07.862 [DEBUG] [Thread-125147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:55:07.865 [DEBUG] [Thread-125147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:55:07.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:55:07.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:55:07.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:55:07.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:55:07.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:55:07.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:55:07.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:55:07.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:55:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:55:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.870882 -999.00  +15.80  16.96     40   +2.40 1 1 1 1 1     0    0 13.40 -9.19 ZNESW 16.6 17.0 146.0 21.7 16.1 -25.6 16.0 -25.0 15.8 -23.3 16.0 -24.4
2025-12-03T22:55:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:55:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:55:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.870882
2025-12-03T22:55:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:55:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:55:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:55:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:55:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:55:07.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:54:53', tmtdew=15.56, humidity=34.8, cloud=0.0, wind=25.87, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:54:53', seeing=1.12, atlas_timestamp='2025-12-03T20:54:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:55:07.891 [DEBUG] [Thread-125147] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:55:07.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:55:07.987 [DEBUG] [Thread-125151] [transport.py] [_log()] starting thread (client mode): 0x9fd21b40
2025-12-03T22:55:07.987 [DEBUG] [Thread-125151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:55:08.002 [DEBUG] [Thread-125151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:55:08.003 [INFO] [Thread-125151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] client lang: <none>
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] server lang: <none>
2025-12-03T22:55:08.010 [DEBUG] [Thread-125151] [transport.py] [_log()] kex follows: False
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] Compression: none
2025-12-03T22:55:08.011 [DEBUG] [Thread-125151] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:55:08.067 [DEBUG] [Thread-125151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:55:08.068 [DEBUG] [Thread-125151] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:55:08.068 [DEBUG] [Thread-125151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:55:08.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:55:08.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:55:08.126 [DEBUG] [Thread-125151] [transport.py] [_log()] userauth is OK
2025-12-03T22:55:08.126 [DEBUG] [Thread-125151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:55:08.127 [DEBUG] [Thread-125151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:55:08.127 [DEBUG] [Thread-125151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:55:08.127 [DEBUG] [Thread-125151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:55:08.149 [INFO] [Thread-125151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:55:08.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:55:08.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:55:08.985 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:08.986 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:09.010 [DEBUG] [Thread-125151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:55:09.010 [DEBUG] [Thread-125151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:55:09.058 [DEBUG] [Thread-125151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:55:09.059 [DEBUG] [Thread-125151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:55:09.067 [DEBUG] [Thread-125151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:55:09.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:55:09.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:55:09.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:55:09.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:55:09.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:55:09.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:55:09.100 [DEBUG] [Thread-125151] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:55:17.314 [DEBUG] [Thread-125153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:22.148 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:22.598 [DEBUG] [Thread-125154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:37.650 [DEBUG] [Thread-125155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:39.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:55:39.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:55:39.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:55:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 55, 25), 15.56, 34.82, 0.0, 24.93, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:55:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:55:25
2025-12-03T22:55:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:55:40.110 [DEBUG] [Thread-125156] [transport.py] [_log()] starting thread (client mode): 0xa5162500
2025-12-03T22:55:40.110 [DEBUG] [Thread-125156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:55:40.122 [DEBUG] [Thread-125156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:55:40.122 [INFO] [Thread-125156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] client lang: <none>
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] server lang: <none>
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] kex follows: False
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:55:40.125 [DEBUG] [Thread-125156] [transport.py] [_log()] Compression: none
2025-12-03T22:55:40.126 [DEBUG] [Thread-125156] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:55:40.141 [DEBUG] [Thread-125156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:55:40.141 [DEBUG] [Thread-125156] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:55:40.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:55:40.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] userauth is OK
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:55:40.142 [DEBUG] [Thread-125156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:55:40.158 [INFO] [Thread-125156] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:55:40.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:55:40.811 [DEBUG] [Thread-125156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:55:40.811 [DEBUG] [Thread-125156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:55:40.811 [DEBUG] [Thread-125156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:55:40.853 [DEBUG] [Thread-125156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:55:40.853 [DEBUG] [Thread-125156] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:55:40.855 [DEBUG] [Thread-125156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:55:40.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:55:40.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:55:40.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:55:40.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:55:40.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:55:40.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:55:40.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.871576 -999.00  +15.80  16.24     40   +2.40 1 1 1 1 1     0    0 13.20 -10.71 ZNESW 17.3 16.2 138.2 22.8 16.1 -25.6 16.0 -25.0 15.7 -23.2 16.0 -24.3
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.871576
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:55:40.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:55:25', tmtdew=15.56, humidity=34.82, cloud=0.0, wind=24.93, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:55:25', seeing=1.03, atlas_timestamp='2025-12-03T20:55:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:55:40.876 [DEBUG] [Thread-125156] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:55:40.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:55:40.968 [DEBUG] [Thread-125159] [transport.py] [_log()] starting thread (client mode): 0xa51611b0
2025-12-03T22:55:40.968 [DEBUG] [Thread-125159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:55:40.983 [DEBUG] [Thread-125159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:55:40.983 [INFO] [Thread-125159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:55:40.990 [DEBUG] [Thread-125159] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:55:40.990 [DEBUG] [Thread-125159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:55:40.990 [DEBUG] [Thread-125159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:55:40.990 [DEBUG] [Thread-125159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] client lang: <none>
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] server lang: <none>
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] kex follows: False
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] Compression: none
2025-12-03T22:55:40.991 [DEBUG] [Thread-125159] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:55:41.046 [DEBUG] [Thread-125159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:55:41.046 [DEBUG] [Thread-125159] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:55:41.046 [DEBUG] [Thread-125159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:55:41.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:55:41.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:55:41.103 [DEBUG] [Thread-125159] [transport.py] [_log()] userauth is OK
2025-12-03T22:55:41.104 [DEBUG] [Thread-125159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:55:41.104 [DEBUG] [Thread-125159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:55:41.104 [DEBUG] [Thread-125159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:55:41.104 [DEBUG] [Thread-125159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:55:41.119 [INFO] [Thread-125159] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:55:41.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:55:41.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:55:41.965 [DEBUG] [Thread-125159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:55:41.965 [DEBUG] [Thread-125159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:55:42.012 [DEBUG] [Thread-125159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:55:42.012 [DEBUG] [Thread-125159] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:55:42.021 [DEBUG] [Thread-125159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:55:42.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:55:42.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:55:42.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:55:42.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:55:42.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:55:42.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:55:42.052 [DEBUG] [Thread-125159] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:55:42.616 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:55:52.685 [DEBUG] [Thread-125161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:03.049 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:07.754 [DEBUG] [Thread-125162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:09.185 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:09.186 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:12.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:56:12.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:56:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:56:12.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 55, 57), 15.49, 34.85, 0.0, 26.8, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:56:12.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:55:57
2025-12-03T22:56:12.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:56:13.050 [DEBUG] [Thread-125163] [transport.py] [_log()] starting thread (client mode): 0xa51606a0
2025-12-03T22:56:13.050 [DEBUG] [Thread-125163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:56:13.069 [DEBUG] [Thread-125163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:56:13.070 [INFO] [Thread-125163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:56:13.074 [DEBUG] [Thread-125163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:56:13.074 [DEBUG] [Thread-125163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:56:13.075 [DEBUG] [Thread-125163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] client lang: <none>
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] server lang: <none>
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] kex follows: False
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] Compression: none
2025-12-03T22:56:13.076 [DEBUG] [Thread-125163] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:56:13.095 [DEBUG] [Thread-125163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:56:13.095 [DEBUG] [Thread-125163] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:56:13.095 [DEBUG] [Thread-125163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:56:13.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:56:13.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:56:13.098 [DEBUG] [Thread-125163] [transport.py] [_log()] userauth is OK
2025-12-03T22:56:13.098 [DEBUG] [Thread-125163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:56:13.098 [DEBUG] [Thread-125163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:56:13.098 [DEBUG] [Thread-125163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:56:13.098 [DEBUG] [Thread-125163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:56:13.122 [INFO] [Thread-125163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:56:13.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:56:13.757 [DEBUG] [Thread-125163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:56:13.757 [DEBUG] [Thread-125163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:56:13.757 [DEBUG] [Thread-125163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:56:13.798 [DEBUG] [Thread-125163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:56:13.798 [DEBUG] [Thread-125163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:56:13.801 [DEBUG] [Thread-125163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:56:13.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:56:13.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:56:13.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:56:13.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:56:13.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:56:13.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:56:13.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:56:13.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:56:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:56:13.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.871924 -999.00  +15.80  19.03     40   +2.40 1 1 1 1 1     0    0 13.03 -11.54 ZNESW 24.2 19.0 143.2 21.2 16.1 -25.7 15.9 -24.9 15.8 -23.3 16.0 -24.2
2025-12-03T22:56:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:56:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:56:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.871924
2025-12-03T22:56:13.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:56:13.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:55:57', tmtdew=15.49, humidity=34.85, cloud=0.0, wind=26.8, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:55:57', seeing=1.03, atlas_timestamp='2025-12-03T20:55:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:56:13.824 [DEBUG] [Thread-125163] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:56:13.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:56:13.927 [DEBUG] [Thread-125166] [transport.py] [_log()] starting thread (client mode): 0xa5162980
2025-12-03T22:56:13.927 [DEBUG] [Thread-125166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:56:13.942 [DEBUG] [Thread-125166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:56:13.942 [INFO] [Thread-125166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:13.950 [DEBUG] [Thread-125166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] client lang: <none>
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] server lang: <none>
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] kex follows: False
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:56:13.951 [DEBUG] [Thread-125166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:56:13.952 [DEBUG] [Thread-125166] [transport.py] [_log()] Compression: none
2025-12-03T22:56:13.952 [DEBUG] [Thread-125166] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:56:14.007 [DEBUG] [Thread-125166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:56:14.008 [DEBUG] [Thread-125166] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:56:14.008 [DEBUG] [Thread-125166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:56:14.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:56:14.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:56:14.064 [DEBUG] [Thread-125166] [transport.py] [_log()] userauth is OK
2025-12-03T22:56:14.064 [DEBUG] [Thread-125166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:56:14.064 [DEBUG] [Thread-125166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:56:14.064 [DEBUG] [Thread-125166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:56:14.064 [DEBUG] [Thread-125166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:56:14.083 [INFO] [Thread-125166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:56:14.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:56:14.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:56:14.963 [DEBUG] [Thread-125166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:56:14.963 [DEBUG] [Thread-125166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:56:15.011 [DEBUG] [Thread-125166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:56:15.011 [DEBUG] [Thread-125166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:56:15.020 [DEBUG] [Thread-125166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:56:15.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:56:15.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:56:15.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:56:15.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:56:15.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:56:15.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:56:15.055 [DEBUG] [Thread-125166] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:56:17.369 [DEBUG] [Thread-125168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:22.785 [DEBUG] [Thread-125169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:23.643 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:37.832 [DEBUG] [Thread-125170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:44.091 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:56:45.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:56:45.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:56:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:56:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 56, 29), 15.46, 34.93, 0.0, 28.16, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:56:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:56:29
2025-12-03T22:56:45.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:56:46.039 [DEBUG] [Thread-125171] [transport.py] [_log()] starting thread (client mode): 0x9fd23610
2025-12-03T22:56:46.039 [DEBUG] [Thread-125171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:56:46.061 [DEBUG] [Thread-125171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:56:46.061 [INFO] [Thread-125171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:56:46.063 [DEBUG] [Thread-125171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:56:46.063 [DEBUG] [Thread-125171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:56:46.063 [DEBUG] [Thread-125171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] client lang: <none>
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] server lang: <none>
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] kex follows: False
2025-12-03T22:56:46.064 [DEBUG] [Thread-125171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] Compression: none
2025-12-03T22:56:46.065 [DEBUG] [Thread-125171] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:56:46.075 [DEBUG] [Thread-125171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:56:46.076 [DEBUG] [Thread-125171] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:56:46.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:56:46.077 [DEBUG] [Thread-125171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:56:46.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:56:46.078 [DEBUG] [Thread-125171] [transport.py] [_log()] userauth is OK
2025-12-03T22:56:46.079 [DEBUG] [Thread-125171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:56:46.079 [DEBUG] [Thread-125171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:56:46.079 [DEBUG] [Thread-125171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:56:46.079 [DEBUG] [Thread-125171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:56:46.114 [INFO] [Thread-125171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:56:46.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:56:46.831 [DEBUG] [Thread-125171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:56:46.831 [DEBUG] [Thread-125171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:56:46.832 [DEBUG] [Thread-125171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:56:46.873 [DEBUG] [Thread-125171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:56:46.873 [DEBUG] [Thread-125171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:56:46.875 [DEBUG] [Thread-125171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:56:46.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:56:46.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:56:46.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:56:46.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:56:46.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:56:46.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:56:46.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:56:46.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.872271 -999.00  +15.80  19.59     40   +2.40 1 1 1 1 1     0    0 13.30 -11.95 ZNESW 21.3 19.6 146.5 24.0 16.1 -25.5 16.0 -24.9 15.7 -23.3 16.0 -24.1
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.872271
2025-12-03T22:56:46.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:56:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:56:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:56:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:56:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:56:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:56:29', tmtdew=15.46, humidity=34.93, cloud=0.0, wind=28.16, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:56:29', seeing=1.05, atlas_timestamp='2025-12-03T20:56:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04475000000000051, -0.051750000000000185, -0.023749999999999716, -0.011499999999999844, 0.037499999999999645, 0.026250000000000995, -0.038000000000000256, -0.04574999999999818, -0.049500000000001876, -0.0004999999999988347, -0.012750000000000483, -0.0804999999999989, -0.028999999999999915, -0.013749999999999929, -0.16300000000000026, -0.13599999999999923, -0.060750000000000526, -0.0235000000000003, -0.015000000000000568, -0.03275000000000006, 0.008999999999998565, 0.02874999999999872, -0.08224999999999838, -0.4142500000000009, -0.05000000000000071, -0.046499999999999986, -0.03824999999999967, -0.04550000000000054, 0.062000000000001165, 0.023000000000001464, -0.1429999999999989, -0.21799999999999997, -0.1172500000000003], zp_timestamp='2025-12-03T20:52:00')
2025-12-03T22:56:46.898 [DEBUG] [Thread-125171] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:56:46.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:56:47.012 [DEBUG] [Thread-125174] [transport.py] [_log()] starting thread (client mode): 0xa51b8d90
2025-12-03T22:56:47.012 [DEBUG] [Thread-125174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:56:47.027 [DEBUG] [Thread-125174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:56:47.027 [INFO] [Thread-125174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:47.035 [DEBUG] [Thread-125174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] client lang: <none>
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] server lang: <none>
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] kex follows: False
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:56:47.036 [DEBUG] [Thread-125174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:56:47.037 [DEBUG] [Thread-125174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:56:47.037 [DEBUG] [Thread-125174] [transport.py] [_log()] Compression: none
2025-12-03T22:56:47.037 [DEBUG] [Thread-125174] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:56:47.095 [DEBUG] [Thread-125174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:56:47.096 [DEBUG] [Thread-125174] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:56:47.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:56:47.097 [DEBUG] [Thread-125174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:56:47.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:56:47.151 [DEBUG] [Thread-125174] [transport.py] [_log()] userauth is OK
2025-12-03T22:56:47.152 [DEBUG] [Thread-125174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:56:47.152 [DEBUG] [Thread-125174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:56:47.152 [DEBUG] [Thread-125174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:56:47.152 [DEBUG] [Thread-125174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:56:47.173 [INFO] [Thread-125174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:56:47.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:56:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:56:48.024 [DEBUG] [Thread-125174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:56:48.024 [DEBUG] [Thread-125174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:56:48.072 [DEBUG] [Thread-125174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:56:48.072 [DEBUG] [Thread-125174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:56:48.081 [DEBUG] [Thread-125174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:56:48.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:56:48.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:56:48.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:56:48.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:56:48.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:56:48.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:56:48.115 [DEBUG] [Thread-125174] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:56:52.868 [DEBUG] [Thread-125176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:04.536 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:07.929 [DEBUG] [Thread-125177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:09.388 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:09.389 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:17.439 [DEBUG] [Thread-125178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:18.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:57:18.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:57:18.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:57:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 57, 1), 15.53, 34.88, 0.0, 24.26, 15.98, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:57:18.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:57:01
2025-12-03T22:57:18.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:57:19.106 [DEBUG] [Thread-125179] [transport.py] [_log()] starting thread (client mode): 0xa51b82e0
2025-12-03T22:57:19.106 [DEBUG] [Thread-125179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:57:19.127 [DEBUG] [Thread-125179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:57:19.127 [INFO] [Thread-125179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:57:19.130 [DEBUG] [Thread-125179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:57:19.130 [DEBUG] [Thread-125179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:57:19.130 [DEBUG] [Thread-125179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:57:19.130 [DEBUG] [Thread-125179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:19.130 [DEBUG] [Thread-125179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] client lang: <none>
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] server lang: <none>
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] kex follows: False
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] Compression: none
2025-12-03T22:57:19.131 [DEBUG] [Thread-125179] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:57:19.148 [DEBUG] [Thread-125179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:57:19.148 [DEBUG] [Thread-125179] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:57:19.149 [DEBUG] [Thread-125179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:57:19.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:57:19.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:57:19.151 [DEBUG] [Thread-125179] [transport.py] [_log()] userauth is OK
2025-12-03T22:57:19.151 [DEBUG] [Thread-125179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:57:19.151 [DEBUG] [Thread-125179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:57:19.151 [DEBUG] [Thread-125179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:57:19.151 [DEBUG] [Thread-125179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:57:19.172 [INFO] [Thread-125179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:57:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:57:19.854 [DEBUG] [Thread-125179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:57:19.855 [DEBUG] [Thread-125179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:57:19.855 [DEBUG] [Thread-125179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:57:19.896 [DEBUG] [Thread-125179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:57:19.896 [DEBUG] [Thread-125179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:57:19.899 [DEBUG] [Thread-125179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:57:19.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:57:19.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:57:19.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:57:19.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:57:19.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:57:19.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:57:19.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:57:19.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:57:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:57:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.872618 -999.00  +15.80  16.58     40   +2.40 1 1 1 1 1     0    0 13.19 -12.93 ZNESW 19.1 16.6 130.0 23.8 16.1 -25.6 15.9 -25.0 15.7 -23.2 16.0 -24.0
2025-12-03T22:57:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:57:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:57:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.872618
2025-12-03T22:57:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:57:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:57:01', tmtdew=15.53, humidity=34.88, cloud=0.0, wind=24.26, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:57:01', seeing=1.05, atlas_timestamp='2025-12-03T20:56:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:55:00')
2025-12-03T22:57:19.925 [DEBUG] [Thread-125179] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:57:20.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:57:20.028 [DEBUG] [Thread-125182] [transport.py] [_log()] starting thread (client mode): 0xa51b86a0
2025-12-03T22:57:20.028 [DEBUG] [Thread-125182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:57:20.043 [DEBUG] [Thread-125182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:57:20.043 [INFO] [Thread-125182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] client lang: <none>
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] server lang: <none>
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] kex follows: False
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:57:20.051 [DEBUG] [Thread-125182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:57:20.052 [DEBUG] [Thread-125182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:57:20.052 [DEBUG] [Thread-125182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:57:20.052 [DEBUG] [Thread-125182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:57:20.052 [DEBUG] [Thread-125182] [transport.py] [_log()] Compression: none
2025-12-03T22:57:20.052 [DEBUG] [Thread-125182] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:57:20.107 [DEBUG] [Thread-125182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:57:20.108 [DEBUG] [Thread-125182] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:57:20.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:57:20.109 [DEBUG] [Thread-125182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:57:20.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:57:20.163 [DEBUG] [Thread-125182] [transport.py] [_log()] userauth is OK
2025-12-03T22:57:20.163 [DEBUG] [Thread-125182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:57:20.163 [DEBUG] [Thread-125182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:57:20.163 [DEBUG] [Thread-125182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:57:20.163 [DEBUG] [Thread-125182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:57:20.183 [INFO] [Thread-125182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:57:20.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:57:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:57:21.024 [DEBUG] [Thread-125182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:57:21.025 [DEBUG] [Thread-125182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:57:21.073 [DEBUG] [Thread-125182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:57:21.073 [DEBUG] [Thread-125182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:57:21.082 [DEBUG] [Thread-125182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:57:21.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:57:21.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:57:21.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:57:21.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:57:21.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:57:21.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:57:21.119 [DEBUG] [Thread-125182] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:57:22.965 [DEBUG] [Thread-125184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:24.929 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:38.027 [DEBUG] [Thread-125185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:45.396 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:51.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:57:51.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:57:51.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:57:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 57, 33), 15.53, 34.88, 0.0, 25.9, 16.01, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:57:51.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:57:33
2025-12-03T22:57:51.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:57:52.059 [DEBUG] [Thread-125186] [transport.py] [_log()] starting thread (client mode): 0xa5160fd0
2025-12-03T22:57:52.060 [DEBUG] [Thread-125186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:57:52.080 [DEBUG] [Thread-125186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:57:52.080 [INFO] [Thread-125186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:57:52.083 [DEBUG] [Thread-125186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] client lang: <none>
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] server lang: <none>
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] kex follows: False
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] Compression: none
2025-12-03T22:57:52.084 [DEBUG] [Thread-125186] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:57:52.102 [DEBUG] [Thread-125186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:57:52.103 [DEBUG] [Thread-125186] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:57:52.103 [DEBUG] [Thread-125186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:57:52.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:57:52.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:57:52.105 [DEBUG] [Thread-125186] [transport.py] [_log()] userauth is OK
2025-12-03T22:57:52.105 [DEBUG] [Thread-125186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:57:52.105 [DEBUG] [Thread-125186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:57:52.105 [DEBUG] [Thread-125186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:57:52.106 [DEBUG] [Thread-125186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:57:52.130 [INFO] [Thread-125186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:57:52.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:57:52.861 [DEBUG] [Thread-125186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:57:52.861 [DEBUG] [Thread-125186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:57:52.861 [DEBUG] [Thread-125186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:57:52.902 [DEBUG] [Thread-125186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:57:52.902 [DEBUG] [Thread-125186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:57:52.905 [DEBUG] [Thread-125186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:57:52.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:57:52.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:57:52.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:57:52.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:57:52.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:57:52.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:57:52.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:57:52.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:57:52.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:57:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.872966 -999.00  +15.80  15.34     40   +2.40 1 1 1 1 1     0    0 13.31 -13.62 ZNESW 16.4 15.3 137.4 20.6 16.1 -25.6 15.9 -25.0 15.7 -23.3 16.0 -24.3
2025-12-03T22:57:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:57:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:57:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.872966
2025-12-03T22:57:52.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:57:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:57:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:57:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:57:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:57:52.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:57:33', tmtdew=15.53, humidity=34.88, cloud=0.0, wind=25.9, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:57:33', seeing=1.12, atlas_timestamp='2025-12-03T20:57:04.262', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:55:00')
2025-12-03T22:57:52.928 [DEBUG] [Thread-125186] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:57:53.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:57:53.030 [DEBUG] [Thread-125189] [transport.py] [_log()] starting thread (client mode): 0xa5163dc0
2025-12-03T22:57:53.030 [DEBUG] [Thread-125189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:57:53.044 [DEBUG] [Thread-125189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:57:53.045 [INFO] [Thread-125189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:57:53.052 [DEBUG] [Thread-125189] [transport.py] [_log()] client lang: <none>
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] server lang: <none>
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] kex follows: False
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] Compression: none
2025-12-03T22:57:53.053 [DEBUG] [Thread-125189] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:57:53.063 [DEBUG] [Thread-125191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:57:53.110 [DEBUG] [Thread-125189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:57:53.110 [DEBUG] [Thread-125189] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:57:53.111 [DEBUG] [Thread-125189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:57:53.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:57:53.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:57:53.167 [DEBUG] [Thread-125189] [transport.py] [_log()] userauth is OK
2025-12-03T22:57:53.168 [DEBUG] [Thread-125189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:57:53.168 [DEBUG] [Thread-125189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:57:53.168 [DEBUG] [Thread-125189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:57:53.168 [DEBUG] [Thread-125189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:57:53.188 [INFO] [Thread-125189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:57:53.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:57:53.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:57:54.035 [DEBUG] [Thread-125189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:57:54.035 [DEBUG] [Thread-125189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:57:54.083 [DEBUG] [Thread-125189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:57:54.083 [DEBUG] [Thread-125189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:57:54.091 [DEBUG] [Thread-125189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:57:54.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:57:54.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:57:54.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:57:54.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:57:54.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:57:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:57:54.126 [DEBUG] [Thread-125189] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:58:05.856 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:08.142 [DEBUG] [Thread-125192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:09.596 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:09.597 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:17.492 [DEBUG] [Thread-125193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:23.180 [DEBUG] [Thread-125194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:24.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:58:24.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:58:24.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:58:24.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 58, 5), 15.56, 34.82, 0.0, 21.93, 16.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:58:24.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:58:05
2025-12-03T22:58:24.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:58:25.102 [DEBUG] [Thread-125195] [transport.py] [_log()] starting thread (client mode): 0xa51b8520
2025-12-03T22:58:25.102 [DEBUG] [Thread-125195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:58:25.123 [DEBUG] [Thread-125195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:58:25.124 [INFO] [Thread-125195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] client lang: <none>
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] server lang: <none>
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] kex follows: False
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:58:25.127 [DEBUG] [Thread-125195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:58:25.128 [DEBUG] [Thread-125195] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:58:25.128 [DEBUG] [Thread-125195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:58:25.128 [DEBUG] [Thread-125195] [transport.py] [_log()] Compression: none
2025-12-03T22:58:25.128 [DEBUG] [Thread-125195] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:58:25.145 [DEBUG] [Thread-125195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:58:25.145 [DEBUG] [Thread-125195] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:58:25.146 [DEBUG] [Thread-125195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:58:25.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:58:25.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:58:25.148 [DEBUG] [Thread-125195] [transport.py] [_log()] userauth is OK
2025-12-03T22:58:25.148 [DEBUG] [Thread-125195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:58:25.148 [DEBUG] [Thread-125195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:58:25.148 [DEBUG] [Thread-125195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:58:25.148 [DEBUG] [Thread-125195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:58:25.171 [INFO] [Thread-125195] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:58:25.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:58:25.779 [DEBUG] [Thread-125195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:58:25.779 [DEBUG] [Thread-125195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:58:25.780 [DEBUG] [Thread-125195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:58:25.820 [DEBUG] [Thread-125195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:58:25.820 [DEBUG] [Thread-125195] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:58:25.823 [DEBUG] [Thread-125195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:58:25.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:58:25.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:58:25.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:58:25.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:58:25.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:58:25.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:58:25.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:58:25.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:58:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:58:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.873313 -999.00  +15.80  13.38     40   +2.40 1 1 1 1 1     0    0 13.18 -14.83 ZNESW 17.2 13.4 141.4 18.6 16.1 -25.6 15.9 -25.0 15.7 -23.4 16.0 -24.3
2025-12-03T22:58:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:58:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:58:25.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.873313
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:58:25.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:58:05', tmtdew=15.56, humidity=34.82, cloud=0.0, wind=21.93, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:58:05', seeing=1.12, atlas_timestamp='2025-12-03T20:57:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:55:00')
2025-12-03T22:58:25.848 [DEBUG] [Thread-125195] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:58:25.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:58:25.950 [DEBUG] [Thread-125198] [transport.py] [_log()] starting thread (client mode): 0xa51b8ac0
2025-12-03T22:58:25.951 [DEBUG] [Thread-125198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:58:25.965 [DEBUG] [Thread-125198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:58:25.965 [INFO] [Thread-125198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:58:25.973 [DEBUG] [Thread-125198] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:58:25.973 [DEBUG] [Thread-125198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:58:25.973 [DEBUG] [Thread-125198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:58:25.973 [DEBUG] [Thread-125198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:25.973 [DEBUG] [Thread-125198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] client lang: <none>
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] server lang: <none>
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] kex follows: False
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:58:25.974 [DEBUG] [Thread-125198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:58:25.975 [DEBUG] [Thread-125198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:58:25.975 [DEBUG] [Thread-125198] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:58:25.975 [DEBUG] [Thread-125198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:58:25.975 [DEBUG] [Thread-125198] [transport.py] [_log()] Compression: none
2025-12-03T22:58:25.975 [DEBUG] [Thread-125198] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:58:26.035 [DEBUG] [Thread-125198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:58:26.035 [DEBUG] [Thread-125198] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:58:26.036 [DEBUG] [Thread-125198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:58:26.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:58:26.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:58:26.090 [DEBUG] [Thread-125198] [transport.py] [_log()] userauth is OK
2025-12-03T22:58:26.091 [DEBUG] [Thread-125198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:58:26.091 [DEBUG] [Thread-125198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:58:26.091 [DEBUG] [Thread-125198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:58:26.091 [DEBUG] [Thread-125198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:58:26.110 [INFO] [Thread-125198] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:58:26.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:58:26.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:58:26.263 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:26.977 [DEBUG] [Thread-125198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:58:26.977 [DEBUG] [Thread-125198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:58:27.029 [DEBUG] [Thread-125198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:58:27.029 [DEBUG] [Thread-125198] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:58:27.042 [DEBUG] [Thread-125198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:58:27.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:58:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:58:27.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:58:27.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:58:27.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:58:27.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:58:27.076 [DEBUG] [Thread-125198] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:58:38.215 [DEBUG] [Thread-125200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:46.730 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:53.258 [DEBUG] [Thread-125201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:58:57.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:58:57.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:58:57.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:58:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 58, 37), 15.45, 34.85, 0.0, 23.17, 16.0, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:58:57.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:58:37
2025-12-03T22:58:57.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:58:58.078 [DEBUG] [Thread-125202] [transport.py] [_log()] starting thread (client mode): 0xa51bbe80
2025-12-03T22:58:58.078 [DEBUG] [Thread-125202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:58:58.098 [DEBUG] [Thread-125202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:58:58.098 [INFO] [Thread-125202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:58:58.101 [DEBUG] [Thread-125202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:58:58.102 [DEBUG] [Thread-125202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] client lang: <none>
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] server lang: <none>
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] kex follows: False
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:58:58.103 [DEBUG] [Thread-125202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:58:58.104 [DEBUG] [Thread-125202] [transport.py] [_log()] Compression: none
2025-12-03T22:58:58.104 [DEBUG] [Thread-125202] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:58:58.123 [DEBUG] [Thread-125202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:58:58.123 [DEBUG] [Thread-125202] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:58:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:58:58.125 [DEBUG] [Thread-125202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:58:58.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:58:58.126 [DEBUG] [Thread-125202] [transport.py] [_log()] userauth is OK
2025-12-03T22:58:58.126 [DEBUG] [Thread-125202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:58:58.126 [DEBUG] [Thread-125202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:58:58.127 [DEBUG] [Thread-125202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:58:58.127 [DEBUG] [Thread-125202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:58:58.150 [INFO] [Thread-125202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:58:58.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:58:58.952 [DEBUG] [Thread-125202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:58:58.953 [DEBUG] [Thread-125202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:58:58.953 [DEBUG] [Thread-125202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:58:58.994 [DEBUG] [Thread-125202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:58:58.994 [DEBUG] [Thread-125202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:58:58.997 [DEBUG] [Thread-125202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:58:59.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:58:59.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:58:59.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:58:59.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:58:59.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:58:59.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:58:59.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:58:59.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.874007 -999.00  +15.70  13.36     40   +2.40 1 1 1 1 1     0    0 13.28 -17.32 ZNESW 15.8 13.4 131.2 20.7 16.0 -25.6 15.9 -25.1 15.7 -23.3 -999.0 -999.0
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.874007
2025-12-03T22:58:59.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:58:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:58:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:58:59.020 [DEBUG] [Thread-125202] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:58:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:58:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:58:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:58:37', tmtdew=15.45, humidity=34.85, cloud=0.0, wind=23.17, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:58:37', seeing=0.97, atlas_timestamp='2025-12-03T20:58:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:55:00')
2025-12-03T22:58:59.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:58:59.124 [DEBUG] [Thread-125205] [transport.py] [_log()] starting thread (client mode): 0xa51b82e0
2025-12-03T22:58:59.124 [DEBUG] [Thread-125205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:58:59.138 [DEBUG] [Thread-125205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:58:59.139 [INFO] [Thread-125205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:58:59.146 [DEBUG] [Thread-125205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:58:59.146 [DEBUG] [Thread-125205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:58:59.146 [DEBUG] [Thread-125205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:58:59.146 [DEBUG] [Thread-125205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:59.146 [DEBUG] [Thread-125205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] client lang: <none>
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] server lang: <none>
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] kex follows: False
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] Compression: none
2025-12-03T22:58:59.147 [DEBUG] [Thread-125205] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:58:59.206 [DEBUG] [Thread-125205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:58:59.206 [DEBUG] [Thread-125205] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:58:59.207 [DEBUG] [Thread-125205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:58:59.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:58:59.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:58:59.266 [DEBUG] [Thread-125205] [transport.py] [_log()] userauth is OK
2025-12-03T22:58:59.266 [DEBUG] [Thread-125205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:58:59.267 [DEBUG] [Thread-125205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:58:59.267 [DEBUG] [Thread-125205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:58:59.267 [DEBUG] [Thread-125205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:58:59.284 [INFO] [Thread-125205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:58:59.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:58:59.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:59:00.112 [DEBUG] [Thread-125205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:59:00.113 [DEBUG] [Thread-125205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:59:00.161 [DEBUG] [Thread-125205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:59:00.161 [DEBUG] [Thread-125205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:59:00.170 [DEBUG] [Thread-125205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:59:00.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:59:00.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:59:00.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:59:00.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:59:00.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:59:00.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:59:00.204 [DEBUG] [Thread-125205] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:59:07.222 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:08.294 [DEBUG] [Thread-125207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:09.795 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:09.796 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:17.568 [DEBUG] [Thread-125208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:23.351 [DEBUG] [Thread-125209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:27.635 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T22:59:30.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T22:59:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T22:59:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 59, 9), 15.43, 34.88, 0.0, 23.4, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T22:59:30.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:59:09
2025-12-03T22:59:31.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T22:59:31.245 [DEBUG] [Thread-125210] [transport.py] [_log()] starting thread (client mode): 0xa51b86d0
2025-12-03T22:59:31.245 [DEBUG] [Thread-125210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:59:31.265 [DEBUG] [Thread-125210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T22:59:31.266 [INFO] [Thread-125210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] client lang: <none>
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] server lang: <none>
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] kex follows: False
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] Compression: none
2025-12-03T22:59:31.269 [DEBUG] [Thread-125210] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:59:31.284 [DEBUG] [Thread-125210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:59:31.284 [DEBUG] [Thread-125210] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:59:31.284 [DEBUG] [Thread-125210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T22:59:31.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T22:59:31.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:59:31.285 [DEBUG] [Thread-125210] [transport.py] [_log()] userauth is OK
2025-12-03T22:59:31.285 [DEBUG] [Thread-125210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:59:31.285 [DEBUG] [Thread-125210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:59:31.285 [DEBUG] [Thread-125210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T22:59:31.285 [DEBUG] [Thread-125210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:59:31.300 [INFO] [Thread-125210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:59:31.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:59:31.930 [DEBUG] [Thread-125210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:59:31.930 [DEBUG] [Thread-125210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:59:31.931 [DEBUG] [Thread-125210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T22:59:31.972 [DEBUG] [Thread-125210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:59:31.972 [DEBUG] [Thread-125210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:59:31.974 [DEBUG] [Thread-125210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:59:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:59:31.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T22:59:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T22:59:31.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T22:59:31.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:59:31.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T22:59:31.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.874354 -999.00  +15.70  22.22     40   +2.40 1 1 1 1 1     0    0 12.87 -16.20 ZNESW 17.5 22.2 147.8 26.8 16.0 -25.5 15.9 -24.9 15.7 -23.3 15.9 -24.3
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.874354
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T22:59:31.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:59:09', tmtdew=15.43, humidity=34.88, cloud=0.0, wind=23.4, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:59:09', seeing=0.91, atlas_timestamp='2025-12-03T20:59:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:55:00')
2025-12-03T22:59:31.993 [DEBUG] [Thread-125210] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:59:32.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T22:59:32.085 [DEBUG] [Thread-125213] [transport.py] [_log()] starting thread (client mode): 0xa51bb2e0
2025-12-03T22:59:32.086 [DEBUG] [Thread-125213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T22:59:32.103 [DEBUG] [Thread-125213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T22:59:32.103 [INFO] [Thread-125213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] client lang: <none>
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] server lang: <none>
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] kex follows: False
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] Compression: none
2025-12-03T22:59:32.111 [DEBUG] [Thread-125213] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T22:59:32.174 [DEBUG] [Thread-125213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T22:59:32.174 [DEBUG] [Thread-125213] [transport.py] [_log()] Switch to new keys ...
2025-12-03T22:59:32.174 [DEBUG] [Thread-125213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T22:59:32.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T22:59:32.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T22:59:32.232 [DEBUG] [Thread-125213] [transport.py] [_log()] userauth is OK
2025-12-03T22:59:32.232 [DEBUG] [Thread-125213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T22:59:32.232 [DEBUG] [Thread-125213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T22:59:32.232 [DEBUG] [Thread-125213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T22:59:32.232 [DEBUG] [Thread-125213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T22:59:32.245 [INFO] [Thread-125213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T22:59:32.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T22:59:32.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T22:59:33.060 [DEBUG] [Thread-125213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T22:59:33.060 [DEBUG] [Thread-125213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T22:59:33.111 [DEBUG] [Thread-125213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T22:59:33.111 [DEBUG] [Thread-125213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T22:59:33.123 [DEBUG] [Thread-125213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T22:59:33.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T22:59:33.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T22:59:33.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T22:59:33.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T22:59:33.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T22:59:33.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T22:59:33.155 [DEBUG] [Thread-125213] [transport.py] [_log()] EOF in transport thread
2025-12-03T22:59:38.386 [DEBUG] [Thread-125215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:48.053 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T22:59:53.446 [DEBUG] [Thread-125216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:00:03.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:00:03.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:00:03.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 22, 59, 41), 15.4, 34.93, 0.0, 26.52, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:00:03.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 22:59:41
2025-12-03T23:00:03.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:00:04.157 [DEBUG] [Thread-125217] [transport.py] [_log()] starting thread (client mode): 0xa5162a40
2025-12-03T23:00:04.157 [DEBUG] [Thread-125217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:00:04.177 [DEBUG] [Thread-125217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:00:04.177 [INFO] [Thread-125217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:04.180 [DEBUG] [Thread-125217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] client lang: <none>
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] server lang: <none>
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] kex follows: False
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] Compression: none
2025-12-03T23:00:04.181 [DEBUG] [Thread-125217] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:00:04.197 [DEBUG] [Thread-125217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:00:04.197 [DEBUG] [Thread-125217] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:00:04.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:00:04.198 [DEBUG] [Thread-125217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:00:04.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:00:04.201 [DEBUG] [Thread-125217] [transport.py] [_log()] userauth is OK
2025-12-03T23:00:04.201 [DEBUG] [Thread-125217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:00:04.201 [DEBUG] [Thread-125217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:00:04.201 [DEBUG] [Thread-125217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:00:04.201 [DEBUG] [Thread-125217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:00:04.224 [INFO] [Thread-125217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:00:04.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:00:05.003 [DEBUG] [Thread-125217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:00:05.003 [DEBUG] [Thread-125217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:00:05.003 [DEBUG] [Thread-125217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:00:05.044 [DEBUG] [Thread-125217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:00:05.044 [DEBUG] [Thread-125217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:00:05.046 [DEBUG] [Thread-125217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:00:05.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:00:05.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:00:05.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:00:05.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:00:05.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:00:05.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:00:05.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.874702 -999.00  +15.70  19.30     40   +2.30 1 1 1 1 1     0    0 12.89 -17.29 ZNESW 16.9 19.3 135.4 22.4 16.0 -25.5 15.9 -24.9 15.7 -23.4 15.9 -24.1
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:00:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.874702
2025-12-03T23:00:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:00:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:00:05.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:00:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:00:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:00:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T22:59:41', tmtdew=15.4, humidity=34.93, cloud=0.0, wind=26.52, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T22:59:41', seeing=0.88, atlas_timestamp='2025-12-03T20:59:34.253', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:00:05.069 [DEBUG] [Thread-125217] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:00:05.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:00:05.174 [DEBUG] [Thread-125220] [transport.py] [_log()] starting thread (client mode): 0xa5161f60
2025-12-03T23:00:05.174 [DEBUG] [Thread-125220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:00:05.190 [DEBUG] [Thread-125220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:00:05.190 [INFO] [Thread-125220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:00:05.200 [DEBUG] [Thread-125220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:00:05.200 [DEBUG] [Thread-125220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:00:05.200 [DEBUG] [Thread-125220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:00:05.200 [DEBUG] [Thread-125220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] client lang: <none>
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] server lang: <none>
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] kex follows: False
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] Compression: none
2025-12-03T23:00:05.201 [DEBUG] [Thread-125220] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:00:05.263 [DEBUG] [Thread-125220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:00:05.263 [DEBUG] [Thread-125220] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:00:05.264 [DEBUG] [Thread-125220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:00:05.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:00:05.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:00:05.326 [DEBUG] [Thread-125220] [transport.py] [_log()] userauth is OK
2025-12-03T23:00:05.326 [DEBUG] [Thread-125220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:00:05.326 [DEBUG] [Thread-125220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:00:05.326 [DEBUG] [Thread-125220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:00:05.326 [DEBUG] [Thread-125220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:00:05.346 [INFO] [Thread-125220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:00:05.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:00:05.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:00:06.201 [DEBUG] [Thread-125220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:00:06.201 [DEBUG] [Thread-125220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:00:06.249 [DEBUG] [Thread-125220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:00:06.249 [DEBUG] [Thread-125220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:00:06.258 [DEBUG] [Thread-125220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:00:06.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:00:06.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:00:06.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:00:06.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:00:06.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:00:06.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:00:06.292 [DEBUG] [Thread-125220] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:00:08.479 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:08.484 [DEBUG] [Thread-125222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:09.994 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:09.996 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:17.636 [DEBUG] [Thread-125223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:23.538 [DEBUG] [Thread-125224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:28.928 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:36.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:00:36.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:00:36.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:00:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 0, 13), 15.41, 34.92, 0.0, 25.6, 15.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:00:36.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:00:13
2025-12-03T23:00:37.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:00:37.282 [DEBUG] [Thread-125225] [transport.py] [_log()] starting thread (client mode): 0xa51bb8b0
2025-12-03T23:00:37.282 [DEBUG] [Thread-125225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:00:37.302 [DEBUG] [Thread-125225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:00:37.303 [INFO] [Thread-125225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] client lang: <none>
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] server lang: <none>
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] kex follows: False
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:00:37.306 [DEBUG] [Thread-125225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:00:37.307 [DEBUG] [Thread-125225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:00:37.307 [DEBUG] [Thread-125225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:00:37.307 [DEBUG] [Thread-125225] [transport.py] [_log()] Compression: none
2025-12-03T23:00:37.307 [DEBUG] [Thread-125225] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:00:37.324 [DEBUG] [Thread-125225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:00:37.324 [DEBUG] [Thread-125225] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:00:37.325 [DEBUG] [Thread-125225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:00:37.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:00:37.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:00:37.327 [DEBUG] [Thread-125225] [transport.py] [_log()] userauth is OK
2025-12-03T23:00:37.327 [DEBUG] [Thread-125225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:00:37.327 [DEBUG] [Thread-125225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:00:37.327 [DEBUG] [Thread-125225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:00:37.327 [DEBUG] [Thread-125225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:00:37.345 [INFO] [Thread-125225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:00:37.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:00:37.972 [DEBUG] [Thread-125225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:00:37.972 [DEBUG] [Thread-125225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:00:37.972 [DEBUG] [Thread-125225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:00:38.013 [DEBUG] [Thread-125225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:00:38.013 [DEBUG] [Thread-125225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:00:38.016 [DEBUG] [Thread-125225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:00:38.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:00:38.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:00:38.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:00:38.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:00:38.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:00:38.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:00:38.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:00:38.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:00:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:00:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.875048 -999.00  +15.70  13.74     40   +2.30 1 1 1 1 1     0    0 12.85 -18.07 ZNESW 18.2 13.7 140.6 20.7 16.0 -25.5 15.9 -25.0 15.7 -23.3 16.0 -24.1
2025-12-03T23:00:38.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:00:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:00:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.875048
2025-12-03T23:00:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:00:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:00:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:00:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:00:38.040 [DEBUG] [Thread-125225] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:00:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:00:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:00:13', tmtdew=15.41, humidity=34.92, cloud=0.0, wind=25.6, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:00:13', seeing=0.88, atlas_timestamp='2025-12-03T21:00:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:00:38.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:00:38.145 [DEBUG] [Thread-125228] [transport.py] [_log()] starting thread (client mode): 0xa51bbb20
2025-12-03T23:00:38.146 [DEBUG] [Thread-125228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:00:38.161 [DEBUG] [Thread-125228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:00:38.161 [INFO] [Thread-125228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:00:38.168 [DEBUG] [Thread-125228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] client lang: <none>
2025-12-03T23:00:38.169 [DEBUG] [Thread-125228] [transport.py] [_log()] server lang: <none>
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] kex follows: False
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] Compression: none
2025-12-03T23:00:38.170 [DEBUG] [Thread-125228] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:00:38.226 [DEBUG] [Thread-125228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:00:38.226 [DEBUG] [Thread-125228] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:00:38.227 [DEBUG] [Thread-125228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:00:38.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:00:38.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:00:38.282 [DEBUG] [Thread-125228] [transport.py] [_log()] userauth is OK
2025-12-03T23:00:38.282 [DEBUG] [Thread-125228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:00:38.282 [DEBUG] [Thread-125228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:00:38.282 [DEBUG] [Thread-125228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:00:38.282 [DEBUG] [Thread-125228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:00:38.302 [INFO] [Thread-125228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:00:38.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:00:38.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:00:38.574 [DEBUG] [Thread-125230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:39.131 [DEBUG] [Thread-125228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:00:39.132 [DEBUG] [Thread-125228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:00:39.180 [DEBUG] [Thread-125228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:00:39.181 [DEBUG] [Thread-125228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:00:39.191 [DEBUG] [Thread-125228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:00:39.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:00:39.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:00:39.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:00:39.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:00:39.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:00:39.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:00:39.227 [DEBUG] [Thread-125228] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:00:49.427 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:00:53.639 [DEBUG] [Thread-125231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:08.686 [DEBUG] [Thread-125232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:09.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:01:09.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:01:09.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:01:09.845 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 0, 45), 15.42, 34.92, 0.0, 23.2, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:01:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:00:45
2025-12-03T23:01:10.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:01:10.193 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:10.193 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:10.220 [DEBUG] [Thread-125233] [transport.py] [_log()] starting thread (client mode): 0xa5160b50
2025-12-03T23:01:10.221 [DEBUG] [Thread-125233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:01:10.239 [DEBUG] [Thread-125233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:01:10.240 [INFO] [Thread-125233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:10.243 [DEBUG] [Thread-125233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] client lang: <none>
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] server lang: <none>
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] kex follows: False
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:01:10.244 [DEBUG] [Thread-125233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:01:10.245 [DEBUG] [Thread-125233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:01:10.245 [DEBUG] [Thread-125233] [transport.py] [_log()] Compression: none
2025-12-03T23:01:10.245 [DEBUG] [Thread-125233] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:01:10.261 [DEBUG] [Thread-125233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:01:10.262 [DEBUG] [Thread-125233] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:01:10.262 [DEBUG] [Thread-125233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:01:10.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:01:10.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:01:10.264 [DEBUG] [Thread-125233] [transport.py] [_log()] userauth is OK
2025-12-03T23:01:10.272 [DEBUG] [Thread-125233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:01:10.272 [DEBUG] [Thread-125233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:01:10.272 [DEBUG] [Thread-125233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:01:10.273 [DEBUG] [Thread-125233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:01:10.296 [INFO] [Thread-125233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:01:10.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:01:10.952 [DEBUG] [Thread-125233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:01:10.952 [DEBUG] [Thread-125233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:01:10.953 [DEBUG] [Thread-125233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:01:10.994 [DEBUG] [Thread-125233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:01:10.994 [DEBUG] [Thread-125233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:01:10.997 [DEBUG] [Thread-125233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:01:11.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:01:11.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:01:11.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:01:11.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:01:11.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:01:11.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:01:11.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:01:11.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:01:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:01:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.875396 -999.00  +15.80  20.68     40   +2.40 1 1 1 1 1     0    0 12.94 -19.85 ZNESW 18.5 20.7 144.8 24.3 16.0 -25.4 15.9 -24.8 15.7 -23.1 15.9 -24.0
2025-12-03T23:01:11.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:01:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:01:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.875396
2025-12-03T23:01:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:01:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:01:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:01:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:01:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:01:11.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:00:45', tmtdew=15.42, humidity=34.92, cloud=0.0, wind=23.2, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:00:45', seeing=0.88, atlas_timestamp='2025-12-03T21:00:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:01:11.020 [DEBUG] [Thread-125233] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:01:11.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:01:11.124 [DEBUG] [Thread-125236] [transport.py] [_log()] starting thread (client mode): 0xa51616f0
2025-12-03T23:01:11.124 [DEBUG] [Thread-125236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:01:11.138 [DEBUG] [Thread-125236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:01:11.138 [INFO] [Thread-125236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:11.146 [DEBUG] [Thread-125236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] client lang: <none>
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] server lang: <none>
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] kex follows: False
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] Compression: none
2025-12-03T23:01:11.147 [DEBUG] [Thread-125236] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:01:11.206 [DEBUG] [Thread-125236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:01:11.206 [DEBUG] [Thread-125236] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:01:11.207 [DEBUG] [Thread-125236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:01:11.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:01:11.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:01:11.262 [DEBUG] [Thread-125236] [transport.py] [_log()] userauth is OK
2025-12-03T23:01:11.262 [DEBUG] [Thread-125236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:01:11.262 [DEBUG] [Thread-125236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:01:11.262 [DEBUG] [Thread-125236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:01:11.262 [DEBUG] [Thread-125236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:01:11.281 [INFO] [Thread-125236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:01:11.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:01:11.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:01:12.092 [DEBUG] [Thread-125236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:01:12.093 [DEBUG] [Thread-125236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:01:12.141 [DEBUG] [Thread-125236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:01:12.141 [DEBUG] [Thread-125236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:01:12.150 [DEBUG] [Thread-125236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:01:12.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:01:12.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:01:12.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:01:12.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:01:12.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:01:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:01:12.184 [DEBUG] [Thread-125236] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:01:17.697 [DEBUG] [Thread-125238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:23.720 [DEBUG] [Thread-125239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:30.311 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:38.782 [DEBUG] [Thread-125240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:42.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:01:42.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:01:42.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:01:42.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 1, 17), 15.43, 34.88, 0.0, 24.76, 15.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:01:42.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:01:17
2025-12-03T23:01:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:01:43.185 [DEBUG] [Thread-125241] [transport.py] [_log()] starting thread (client mode): 0xa5161a80
2025-12-03T23:01:43.185 [DEBUG] [Thread-125241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:01:43.205 [DEBUG] [Thread-125241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:01:43.205 [INFO] [Thread-125241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:01:43.208 [DEBUG] [Thread-125241] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:01:43.208 [DEBUG] [Thread-125241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:01:43.208 [DEBUG] [Thread-125241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:01:43.208 [DEBUG] [Thread-125241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] client lang: <none>
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] server lang: <none>
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] kex follows: False
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] Compression: none
2025-12-03T23:01:43.209 [DEBUG] [Thread-125241] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:01:43.226 [DEBUG] [Thread-125241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:01:43.226 [DEBUG] [Thread-125241] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:01:43.227 [DEBUG] [Thread-125241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:01:43.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:01:43.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:01:43.229 [DEBUG] [Thread-125241] [transport.py] [_log()] userauth is OK
2025-12-03T23:01:43.229 [DEBUG] [Thread-125241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:01:43.229 [DEBUG] [Thread-125241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:01:43.229 [DEBUG] [Thread-125241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:01:43.229 [DEBUG] [Thread-125241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:01:43.264 [INFO] [Thread-125241] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:01:43.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:01:43.886 [DEBUG] [Thread-125241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:01:43.887 [DEBUG] [Thread-125241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:01:43.887 [DEBUG] [Thread-125241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:01:43.928 [DEBUG] [Thread-125241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:01:43.928 [DEBUG] [Thread-125241] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:01:43.931 [DEBUG] [Thread-125241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:01:43.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:01:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:01:43.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:01:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:01:43.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:01:43.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:01:43.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.875743 -999.00  +15.80  17.94     40   +2.30 1 1 1 1 1     0    0 12.82 -21.18 ZNESW 18.8 17.9 133.0 26.6 16.0 -25.5 15.9 -24.9 15.7 -23.2 16.0 -24.1
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:01:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.875743
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:01:43.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:01:17', tmtdew=15.43, humidity=34.88, cloud=0.0, wind=24.76, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:01:17', seeing=0.88, atlas_timestamp='2025-12-03T21:01:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:01:43.952 [DEBUG] [Thread-125241] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:01:44.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:01:44.056 [DEBUG] [Thread-125244] [transport.py] [_log()] starting thread (client mode): 0xa514f580
2025-12-03T23:01:44.056 [DEBUG] [Thread-125244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:01:44.070 [DEBUG] [Thread-125244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:01:44.071 [INFO] [Thread-125244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:01:44.078 [DEBUG] [Thread-125244] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:01:44.078 [DEBUG] [Thread-125244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] client lang: <none>
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] server lang: <none>
2025-12-03T23:01:44.079 [DEBUG] [Thread-125244] [transport.py] [_log()] kex follows: False
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] Compression: none
2025-12-03T23:01:44.080 [DEBUG] [Thread-125244] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:01:44.141 [DEBUG] [Thread-125244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:01:44.142 [DEBUG] [Thread-125244] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:01:44.142 [DEBUG] [Thread-125244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:01:44.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:01:44.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:01:44.197 [DEBUG] [Thread-125244] [transport.py] [_log()] userauth is OK
2025-12-03T23:01:44.198 [DEBUG] [Thread-125244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:01:44.198 [DEBUG] [Thread-125244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:01:44.198 [DEBUG] [Thread-125244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:01:44.198 [DEBUG] [Thread-125244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:01:44.212 [INFO] [Thread-125244] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:01:44.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:01:44.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:01:45.034 [DEBUG] [Thread-125244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:01:45.034 [DEBUG] [Thread-125244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:01:45.082 [DEBUG] [Thread-125244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:01:45.082 [DEBUG] [Thread-125244] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:01:45.091 [DEBUG] [Thread-125244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:01:45.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:01:45.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:01:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:01:45.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:01:45.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:01:45.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:01:45.125 [DEBUG] [Thread-125244] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:01:50.774 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:01:53.817 [DEBUG] [Thread-125246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:08.880 [DEBUG] [Thread-125247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:10.392 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:10.393 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:11.176 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:02:15.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:02:15.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:02:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 1, 49), 15.36, 34.92, 0.0, 21.56, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:02:15.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:01:49
2025-12-03T23:02:15.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:02:16.098 [DEBUG] [Thread-125248] [transport.py] [_log()] starting thread (client mode): 0xa51621d0
2025-12-03T23:02:16.098 [DEBUG] [Thread-125248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:02:16.117 [DEBUG] [Thread-125248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:02:16.117 [INFO] [Thread-125248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:16.120 [DEBUG] [Thread-125248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] client lang: <none>
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] server lang: <none>
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] kex follows: False
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] Compression: none
2025-12-03T23:02:16.121 [DEBUG] [Thread-125248] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:02:16.138 [DEBUG] [Thread-125248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:02:16.138 [DEBUG] [Thread-125248] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:02:16.139 [DEBUG] [Thread-125248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:02:16.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:02:16.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:02:16.140 [DEBUG] [Thread-125248] [transport.py] [_log()] userauth is OK
2025-12-03T23:02:16.141 [DEBUG] [Thread-125248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:02:16.141 [DEBUG] [Thread-125248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:02:16.141 [DEBUG] [Thread-125248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:02:16.141 [DEBUG] [Thread-125248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:02:16.155 [INFO] [Thread-125248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:02:16.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:02:16.761 [DEBUG] [Thread-125248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:02:16.761 [DEBUG] [Thread-125248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:02:16.762 [DEBUG] [Thread-125248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:02:16.802 [DEBUG] [Thread-125248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:02:16.802 [DEBUG] [Thread-125248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:02:16.805 [DEBUG] [Thread-125248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:02:16.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:02:16.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:02:16.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:02:16.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:02:16.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:02:16.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:02:16.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.876438 -999.00  +15.80  18.63     40   +2.40 1 1 1 1 1     0    0 12.98 -19.79 ZNESW 19.9 18.6 143.0 26.1 16.0 -25.5 15.9 -24.9 15.7 -23.2 16.0 -23.9
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:02:16.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.876438
2025-12-03T23:02:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:02:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:02:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:02:16.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:02:16.830 [DEBUG] [Thread-125248] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:02:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:02:16.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:01:49', tmtdew=15.36, humidity=34.92, cloud=0.0, wind=21.56, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:01:49', seeing=1.0, atlas_timestamp='2025-12-03T21:02:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:02:16.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:02:16.932 [DEBUG] [Thread-125251] [transport.py] [_log()] starting thread (client mode): 0xa5160610
2025-12-03T23:02:16.933 [DEBUG] [Thread-125251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:02:16.947 [DEBUG] [Thread-125251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:02:16.948 [INFO] [Thread-125251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:16.955 [DEBUG] [Thread-125251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] client lang: <none>
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] server lang: <none>
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] kex follows: False
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] Compression: none
2025-12-03T23:02:16.956 [DEBUG] [Thread-125251] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:02:17.013 [DEBUG] [Thread-125251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:02:17.014 [DEBUG] [Thread-125251] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:02:17.014 [DEBUG] [Thread-125251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:02:17.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:02:17.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:02:17.070 [DEBUG] [Thread-125251] [transport.py] [_log()] userauth is OK
2025-12-03T23:02:17.070 [DEBUG] [Thread-125251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:02:17.070 [DEBUG] [Thread-125251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:02:17.070 [DEBUG] [Thread-125251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:02:17.070 [DEBUG] [Thread-125251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:02:17.089 [INFO] [Thread-125251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:02:17.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:02:17.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:02:17.756 [DEBUG] [Thread-125253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:17.923 [DEBUG] [Thread-125251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:02:17.924 [DEBUG] [Thread-125251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:02:17.972 [DEBUG] [Thread-125251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:02:17.972 [DEBUG] [Thread-125251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:02:17.980 [DEBUG] [Thread-125251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:02:17.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:02:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:02:17.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:02:18.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:02:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:02:18.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:02:18.015 [DEBUG] [Thread-125251] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:02:23.913 [DEBUG] [Thread-125254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:38.969 [DEBUG] [Thread-125255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:02:48.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:02:48.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:02:48.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:02:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 2, 21), 15.35, 34.93, 0.0, 22.76, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:02:48.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:02:21
2025-12-03T23:02:48.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:02:49.049 [DEBUG] [Thread-125256] [transport.py] [_log()] starting thread (client mode): 0xa51b9300
2025-12-03T23:02:49.049 [DEBUG] [Thread-125256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:02:49.059 [DEBUG] [Thread-125256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:02:49.059 [INFO] [Thread-125256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] client lang: <none>
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] server lang: <none>
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] kex follows: False
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:02:49.060 [DEBUG] [Thread-125256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:02:49.061 [DEBUG] [Thread-125256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:02:49.061 [DEBUG] [Thread-125256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:02:49.061 [DEBUG] [Thread-125256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:02:49.061 [DEBUG] [Thread-125256] [transport.py] [_log()] Compression: none
2025-12-03T23:02:49.061 [DEBUG] [Thread-125256] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:02:49.069 [DEBUG] [Thread-125256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:02:49.070 [DEBUG] [Thread-125256] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:02:49.070 [DEBUG] [Thread-125256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:02:49.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:02:49.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:02:49.071 [DEBUG] [Thread-125256] [transport.py] [_log()] userauth is OK
2025-12-03T23:02:49.071 [DEBUG] [Thread-125256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:02:49.071 [DEBUG] [Thread-125256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:02:49.071 [DEBUG] [Thread-125256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:02:49.071 [DEBUG] [Thread-125256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:02:49.082 [INFO] [Thread-125256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:02:49.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:02:49.667 [DEBUG] [Thread-125256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:02:49.667 [DEBUG] [Thread-125256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:02:49.667 [DEBUG] [Thread-125256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:02:49.708 [DEBUG] [Thread-125256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:02:49.708 [DEBUG] [Thread-125256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:02:49.710 [DEBUG] [Thread-125256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:02:49.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:02:49.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:02:49.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:02:49.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:02:49.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:02:49.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:02:49.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.876785 -999.00  +15.90  23.13     40   +2.40 1 1 1 1 1     0    0 12.87 -21.83 ZNESW 25.3 23.1 133.4 25.6 16.0 -25.4 15.9 -24.9 15.7 -23.2 15.9 -23.9
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.876785
2025-12-03T23:02:49.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:02:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:02:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:02:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:02:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:02:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:02:21', tmtdew=15.35, humidity=34.93, cloud=0.0, wind=22.76, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:02:21', seeing=0.89, atlas_timestamp='2025-12-03T21:02:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.08774999999999977, -0.007250000000000867, -0.08550000000000146, 0.033500000000000085, 0.03125, 0.015499999999999403, -0.13874999999999815, 0.008499999999997954, 0.002000000000000668, -0.0017500000000012506, -0.0519999999999996, 0.041499999999999204, 0.008249999999998536, -0.120000000000001, -0.0840000000000014, -0.01774999999999949, 0.02549999999999919, 0.028999999999999915, 0.02424999999999855, 0.08799999999999919, 0.014249999999998764, 0.011250000000000426, -0.27924999999999933, -0.042500000000000426, -0.046499999999999986, 0.029749999999999943, 0.014000000000001123, 0.13199999999999967, 0.03700000000000081, -0.12899999999999956, -0.036999999999999034, -0.04025000000000034], zp_timestamp='2025-12-03T20:58:00')
2025-12-03T23:02:49.731 [DEBUG] [Thread-125256] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:02:49.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:02:49.823 [DEBUG] [Thread-125259] [transport.py] [_log()] starting thread (client mode): 0xa51b9360
2025-12-03T23:02:49.823 [DEBUG] [Thread-125259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:02:49.843 [DEBUG] [Thread-125259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:02:49.843 [INFO] [Thread-125259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] client lang: <none>
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] server lang: <none>
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] kex follows: False
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:02:49.850 [DEBUG] [Thread-125259] [transport.py] [_log()] Compression: none
2025-12-03T23:02:49.851 [DEBUG] [Thread-125259] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:02:49.911 [DEBUG] [Thread-125259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:02:49.911 [DEBUG] [Thread-125259] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:02:49.911 [DEBUG] [Thread-125259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:02:49.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:02:49.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:02:49.969 [DEBUG] [Thread-125259] [transport.py] [_log()] userauth is OK
2025-12-03T23:02:49.969 [DEBUG] [Thread-125259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:02:49.969 [DEBUG] [Thread-125259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:02:49.970 [DEBUG] [Thread-125259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:02:49.970 [DEBUG] [Thread-125259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:02:49.987 [INFO] [Thread-125259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:02:49.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:02:49.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:02:50.854 [DEBUG] [Thread-125259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:02:50.855 [DEBUG] [Thread-125259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:02:50.903 [DEBUG] [Thread-125259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:02:50.903 [DEBUG] [Thread-125259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:02:50.911 [DEBUG] [Thread-125259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:02:50.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:02:50.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:02:50.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:02:50.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:02:50.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:02:50.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:02:50.946 [DEBUG] [Thread-125259] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:02:54.009 [DEBUG] [Thread-125261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:09.063 [DEBUG] [Thread-125262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:10.592 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:10.594 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:17.815 [DEBUG] [Thread-125263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:03:20.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:03:20.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:03:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 2, 53), 15.25, 35.57, 0.0, 23.75, 15.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:03:21.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:02:53
2025-12-03T23:03:21.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:03:21.946 [DEBUG] [Thread-125264] [transport.py] [_log()] starting thread (client mode): 0xa514d480
2025-12-03T23:03:21.946 [DEBUG] [Thread-125264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:03:21.965 [DEBUG] [Thread-125264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:03:21.965 [INFO] [Thread-125264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] client lang: <none>
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] server lang: <none>
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] kex follows: False
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:03:21.968 [DEBUG] [Thread-125264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:03:21.969 [DEBUG] [Thread-125264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:03:21.969 [DEBUG] [Thread-125264] [transport.py] [_log()] Compression: none
2025-12-03T23:03:21.969 [DEBUG] [Thread-125264] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:03:21.985 [DEBUG] [Thread-125264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:03:21.986 [DEBUG] [Thread-125264] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:03:21.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:03:21.987 [DEBUG] [Thread-125264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:03:21.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:03:21.989 [DEBUG] [Thread-125264] [transport.py] [_log()] userauth is OK
2025-12-03T23:03:21.989 [DEBUG] [Thread-125264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:03:21.989 [DEBUG] [Thread-125264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:03:21.989 [DEBUG] [Thread-125264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:03:21.989 [DEBUG] [Thread-125264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:03:22.005 [INFO] [Thread-125264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:03:22.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:03:22.594 [DEBUG] [Thread-125264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:03:22.594 [DEBUG] [Thread-125264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:03:22.594 [DEBUG] [Thread-125264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:03:22.635 [DEBUG] [Thread-125264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:03:22.636 [DEBUG] [Thread-125264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:03:22.639 [DEBUG] [Thread-125264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:03:22.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:03:22.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:03:22.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:03:22.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:03:22.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:03:22.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:03:22.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:03:22.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:03:22.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:03:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.877132 -999.00  +15.90  16.26     40   +2.40 1 1 1 1 1     0    0 12.92 -20.08 ZNESW 17.6 16.3 139.5 20.4 16.0 -25.5 15.9 -24.9 15.7 -23.3 15.9 -23.9
2025-12-03T23:03:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:03:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:03:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.877132
2025-12-03T23:03:22.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:03:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:03:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:03:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:03:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:03:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:02:53', tmtdew=15.25, humidity=35.57, cloud=0.0, wind=23.75, temperature=15.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:02:53', seeing=1.0, atlas_timestamp='2025-12-03T21:03:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08774999999999977, -0.07324999999999982, -0.0810000000000013, -0.041499999999999204, 0.01025000000000098, -0.05900000000000105, -0.12774999999999892, -0.025500000000000966, -0.04800000000000004, 0.0072499999999990905, -0.07099999999999973, -0.02149999999999963, -0.028750000000000497, -0.04400000000000048, -0.125, 0.0022500000000000853, 0.0015000000000000568, -0.005000000000000782, -0.021750000000000824, -0.006000000000002004, 0.04274999999999807, -0.040749999999999176, -0.32225000000000037, -0.08799999999999919, -0.007500000000000284, -0.03824999999999967, -0.04150000000000098, 0.09299999999999997, 0.01950000000000074, -0.11499999999999844, -0.04849999999999888, -0.09925000000000139], zp_timestamp='2025-12-03T21:01:00')
2025-12-03T23:03:22.659 [DEBUG] [Thread-125264] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:03:22.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:03:22.763 [DEBUG] [Thread-125267] [transport.py] [_log()] starting thread (client mode): 0xa514cd90
2025-12-03T23:03:22.763 [DEBUG] [Thread-125267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:03:22.778 [DEBUG] [Thread-125267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:03:22.779 [INFO] [Thread-125267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:03:22.786 [DEBUG] [Thread-125267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:03:22.786 [DEBUG] [Thread-125267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] client lang: <none>
2025-12-03T23:03:22.787 [DEBUG] [Thread-125267] [transport.py] [_log()] server lang: <none>
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] kex follows: False
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] Compression: none
2025-12-03T23:03:22.788 [DEBUG] [Thread-125267] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:03:22.846 [DEBUG] [Thread-125267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:03:22.847 [DEBUG] [Thread-125267] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:03:22.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:03:22.848 [DEBUG] [Thread-125267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:03:22.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:03:22.902 [DEBUG] [Thread-125267] [transport.py] [_log()] userauth is OK
2025-12-03T23:03:22.902 [DEBUG] [Thread-125267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:03:22.902 [DEBUG] [Thread-125267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:03:22.903 [DEBUG] [Thread-125267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:03:22.903 [DEBUG] [Thread-125267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:03:22.922 [INFO] [Thread-125267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:03:22.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:03:22.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:03:23.825 [DEBUG] [Thread-125267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:03:23.825 [DEBUG] [Thread-125267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:03:23.872 [DEBUG] [Thread-125267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:03:23.872 [DEBUG] [Thread-125267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:03:23.881 [DEBUG] [Thread-125267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:03:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:03:23.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:03:23.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:03:23.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:03:23.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:03:23.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:03:23.914 [DEBUG] [Thread-125267] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:03:24.102 [DEBUG] [Thread-125269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:39.169 [DEBUG] [Thread-125270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:53.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:03:53.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:03:53.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:03:54.203 [DEBUG] [Thread-125271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:03:54.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 3, 25), 15.27, 35.52, 0.0, 22.09, 15.78, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:03:54.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:03:25
2025-12-03T23:03:54.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:03:54.888 [DEBUG] [Thread-125272] [transport.py] [_log()] starting thread (client mode): 0xa514dcc0
2025-12-03T23:03:54.888 [DEBUG] [Thread-125272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:03:54.908 [DEBUG] [Thread-125272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:03:54.909 [INFO] [Thread-125272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:03:54.911 [DEBUG] [Thread-125272] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:03:54.912 [DEBUG] [Thread-125272] [transport.py] [_log()] client lang: <none>
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] server lang: <none>
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] kex follows: False
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:03:54.913 [DEBUG] [Thread-125272] [transport.py] [_log()] Compression: none
2025-12-03T23:03:54.914 [DEBUG] [Thread-125272] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:03:54.934 [DEBUG] [Thread-125272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:03:54.934 [DEBUG] [Thread-125272] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:03:54.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:03:54.935 [DEBUG] [Thread-125272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:03:54.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:03:54.937 [DEBUG] [Thread-125272] [transport.py] [_log()] userauth is OK
2025-12-03T23:03:54.937 [DEBUG] [Thread-125272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:03:54.937 [DEBUG] [Thread-125272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:03:54.937 [DEBUG] [Thread-125272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:03:54.938 [DEBUG] [Thread-125272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:03:54.961 [INFO] [Thread-125272] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:03:54.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:03:55.591 [DEBUG] [Thread-125272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:03:55.591 [DEBUG] [Thread-125272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:03:55.591 [DEBUG] [Thread-125272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:03:55.632 [DEBUG] [Thread-125272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:03:55.632 [DEBUG] [Thread-125272] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:03:55.634 [DEBUG] [Thread-125272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:03:55.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:03:55.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:03:55.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:03:55.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:03:55.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:03:55.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:03:55.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.877132 -999.00  +15.90  16.26     40   +2.40 1 1 1 1 1     0    0 12.92 -20.08 ZNESW 17.6 16.3 139.5 20.4 16.0 -25.5 15.9 -24.9 15.7 -23.3 15.9 -23.9
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.877132
2025-12-03T23:03:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:03:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:03:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:03:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:03:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:03:55.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:03:25', tmtdew=15.27, humidity=35.52, cloud=0.0, wind=22.09, temperature=15.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:03:25', seeing=0.93, atlas_timestamp='2025-12-03T21:03:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08774999999999977, -0.07324999999999982, -0.0810000000000013, -0.041499999999999204, 0.01025000000000098, -0.05900000000000105, -0.12774999999999892, -0.025500000000000966, -0.04800000000000004, 0.0072499999999990905, -0.07099999999999973, -0.02149999999999963, -0.028750000000000497, -0.04400000000000048, -0.125, 0.0022500000000000853, 0.0015000000000000568, -0.005000000000000782, -0.021750000000000824, -0.006000000000002004, 0.04274999999999807, -0.040749999999999176, -0.32225000000000037, -0.08799999999999919, -0.007500000000000284, -0.03824999999999967, -0.04150000000000098, 0.09299999999999997, 0.01950000000000074, -0.11499999999999844, -0.04849999999999888, -0.09925000000000139], zp_timestamp='2025-12-03T21:01:00')
2025-12-03T23:03:55.652 [DEBUG] [Thread-125272] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:03:55.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:03:55.748 [DEBUG] [Thread-125275] [transport.py] [_log()] starting thread (client mode): 0xa51622f0
2025-12-03T23:03:55.748 [DEBUG] [Thread-125275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:03:55.764 [DEBUG] [Thread-125275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:03:55.764 [INFO] [Thread-125275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:03:55.772 [DEBUG] [Thread-125275] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:03:55.772 [DEBUG] [Thread-125275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:03:55.772 [DEBUG] [Thread-125275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:03:55.772 [DEBUG] [Thread-125275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:55.772 [DEBUG] [Thread-125275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] client lang: <none>
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] server lang: <none>
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] kex follows: False
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] Compression: none
2025-12-03T23:03:55.773 [DEBUG] [Thread-125275] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:03:55.829 [DEBUG] [Thread-125275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:03:55.829 [DEBUG] [Thread-125275] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:03:55.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:03:55.830 [DEBUG] [Thread-125275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:03:55.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:03:55.886 [DEBUG] [Thread-125275] [transport.py] [_log()] userauth is OK
2025-12-03T23:03:55.886 [DEBUG] [Thread-125275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:03:55.886 [DEBUG] [Thread-125275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:03:55.886 [DEBUG] [Thread-125275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:03:55.887 [DEBUG] [Thread-125275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:03:55.907 [INFO] [Thread-125275] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:03:55.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:03:55.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:03:56.736 [DEBUG] [Thread-125275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:03:56.736 [DEBUG] [Thread-125275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:03:56.788 [DEBUG] [Thread-125275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:03:56.788 [DEBUG] [Thread-125275] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:03:56.798 [DEBUG] [Thread-125275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:03:56.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:03:56.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:03:56.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:03:56.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:03:56.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:03:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:03:56.839 [DEBUG] [Thread-125275] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:04:09.235 [DEBUG] [Thread-125277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:10.793 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:10.795 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:17.890 [DEBUG] [Thread-125278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:24.292 [DEBUG] [Thread-125279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:04:26.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:04:26.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:04:27.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 3, 57), 15.38, 34.98, 0.0, 22.53, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:04:27.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:03:57
2025-12-03T23:04:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:04:27.814 [DEBUG] [Thread-125280] [transport.py] [_log()] starting thread (client mode): 0xa5163a60
2025-12-03T23:04:27.814 [DEBUG] [Thread-125280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:04:27.834 [DEBUG] [Thread-125280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:04:27.834 [INFO] [Thread-125280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:04:27.837 [DEBUG] [Thread-125280] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:04:27.838 [DEBUG] [Thread-125280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] client lang: <none>
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] server lang: <none>
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] kex follows: False
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:04:27.839 [DEBUG] [Thread-125280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:04:27.840 [DEBUG] [Thread-125280] [transport.py] [_log()] Compression: none
2025-12-03T23:04:27.840 [DEBUG] [Thread-125280] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:04:27.858 [DEBUG] [Thread-125280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:04:27.858 [DEBUG] [Thread-125280] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:04:27.859 [DEBUG] [Thread-125280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:04:27.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:04:27.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:04:27.861 [DEBUG] [Thread-125280] [transport.py] [_log()] userauth is OK
2025-12-03T23:04:27.861 [DEBUG] [Thread-125280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:04:27.861 [DEBUG] [Thread-125280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:04:27.861 [DEBUG] [Thread-125280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:04:27.861 [DEBUG] [Thread-125280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:04:27.885 [INFO] [Thread-125280] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:04:27.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:04:28.504 [DEBUG] [Thread-125280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:04:28.505 [DEBUG] [Thread-125280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:04:28.505 [DEBUG] [Thread-125280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:04:28.546 [DEBUG] [Thread-125280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:04:28.546 [DEBUG] [Thread-125280] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:04:28.549 [DEBUG] [Thread-125280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:04:28.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:04:28.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:04:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:04:28.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:04:28.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:04:28.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:04:28.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:04:28.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:04:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:04:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.877479 -999.00  +15.90  19.84     40   +2.40 1 1 1 1 1     0    0 13.03 -18.06 ZNESW 19.5 19.8 136.2 27.1 16.0 -25.4 15.9 -24.9 15.7 -23.3 15.9 -23.9
2025-12-03T23:04:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:04:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:04:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.877479
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:04:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:03:57', tmtdew=15.38, humidity=34.98, cloud=0.0, wind=22.53, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:03:58', seeing=0.93, atlas_timestamp='2025-12-03T21:03:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08774999999999977, -0.07324999999999982, -0.0810000000000013, -0.041499999999999204, 0.01025000000000098, -0.05900000000000105, -0.12774999999999892, -0.025500000000000966, -0.04800000000000004, 0.0072499999999990905, -0.07099999999999973, -0.02149999999999963, -0.028750000000000497, -0.04400000000000048, -0.125, 0.0022500000000000853, 0.0015000000000000568, -0.005000000000000782, -0.021750000000000824, -0.006000000000002004, 0.04274999999999807, -0.040749999999999176, -0.32225000000000037, -0.08799999999999919, -0.007500000000000284, -0.03824999999999967, -0.04150000000000098, 0.09299999999999997, 0.01950000000000074, -0.11499999999999844, -0.04849999999999888, -0.09925000000000139], zp_timestamp='2025-12-03T21:01:00')
2025-12-03T23:04:28.573 [DEBUG] [Thread-125280] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:04:28.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:04:28.676 [DEBUG] [Thread-125283] [transport.py] [_log()] starting thread (client mode): 0xa51635e0
2025-12-03T23:04:28.676 [DEBUG] [Thread-125283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:04:28.690 [DEBUG] [Thread-125283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:04:28.691 [INFO] [Thread-125283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:04:28.698 [DEBUG] [Thread-125283] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:04:28.698 [DEBUG] [Thread-125283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:04:28.698 [DEBUG] [Thread-125283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:04:28.698 [DEBUG] [Thread-125283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] client lang: <none>
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] server lang: <none>
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] kex follows: False
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] Compression: none
2025-12-03T23:04:28.699 [DEBUG] [Thread-125283] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:04:28.761 [DEBUG] [Thread-125283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:04:28.761 [DEBUG] [Thread-125283] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:04:28.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:04:28.762 [DEBUG] [Thread-125283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:04:28.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:04:28.817 [DEBUG] [Thread-125283] [transport.py] [_log()] userauth is OK
2025-12-03T23:04:28.818 [DEBUG] [Thread-125283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:04:28.818 [DEBUG] [Thread-125283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:04:28.818 [DEBUG] [Thread-125283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:04:28.818 [DEBUG] [Thread-125283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:04:28.837 [INFO] [Thread-125283] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:04:28.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:04:28.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:04:29.683 [DEBUG] [Thread-125283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:04:29.683 [DEBUG] [Thread-125283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:04:29.731 [DEBUG] [Thread-125283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:04:29.731 [DEBUG] [Thread-125283] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:04:29.739 [DEBUG] [Thread-125283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:04:29.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:04:29.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:04:29.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:04:29.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:04:29.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:04:29.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:04:29.774 [DEBUG] [Thread-125283] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:04:39.332 [DEBUG] [Thread-125285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:54.390 [DEBUG] [Thread-125286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:04:59.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:04:59.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:04:59.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:05:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 4, 29), 15.35, 35.05, 0.0, 23.15, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:05:00.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:04:29
2025-12-03T23:05:00.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:05:00.749 [DEBUG] [Thread-125287] [transport.py] [_log()] starting thread (client mode): 0xa51612a0
2025-12-03T23:05:00.749 [DEBUG] [Thread-125287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:05:00.769 [DEBUG] [Thread-125287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:05:00.769 [INFO] [Thread-125287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:00.773 [DEBUG] [Thread-125287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] client lang: <none>
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] server lang: <none>
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] kex follows: False
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] Compression: none
2025-12-03T23:05:00.774 [DEBUG] [Thread-125287] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:05:00.791 [DEBUG] [Thread-125287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:05:00.792 [DEBUG] [Thread-125287] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:05:00.792 [DEBUG] [Thread-125287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:05:00.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:05:00.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:05:00.794 [DEBUG] [Thread-125287] [transport.py] [_log()] userauth is OK
2025-12-03T23:05:00.794 [DEBUG] [Thread-125287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:05:00.794 [DEBUG] [Thread-125287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:05:00.795 [DEBUG] [Thread-125287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:05:00.795 [DEBUG] [Thread-125287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:05:00.818 [INFO] [Thread-125287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:05:00.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:05:01.469 [DEBUG] [Thread-125287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:05:01.470 [DEBUG] [Thread-125287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:05:01.470 [DEBUG] [Thread-125287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:05:01.511 [DEBUG] [Thread-125287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:05:01.511 [DEBUG] [Thread-125287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:05:01.513 [DEBUG] [Thread-125287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:05:01.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:05:01.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:05:01.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:05:01.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:05:01.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:05:01.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:05:01.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.877827 -999.00  +15.90  15.12     40   +2.40 1 1 1 1 1     0    0 12.90 -16.80 ZNESW 16.3 15.1 134.0 22.9 16.0 -25.6 15.9 -25.0 15.7 -23.2 16.0 -24.0
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:05:01.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.877827
2025-12-03T23:05:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:05:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:05:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:05:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:05:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:05:01.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:04:29', tmtdew=15.35, humidity=35.05, cloud=0.0, wind=23.15, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:04:30', seeing=0.94, atlas_timestamp='2025-12-03T21:04:04.253', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08774999999999977, -0.07324999999999982, -0.0810000000000013, -0.041499999999999204, 0.01025000000000098, -0.05900000000000105, -0.12774999999999892, -0.025500000000000966, -0.04800000000000004, 0.0072499999999990905, -0.07099999999999973, -0.02149999999999963, -0.028750000000000497, -0.04400000000000048, -0.125, 0.0022500000000000853, 0.0015000000000000568, -0.005000000000000782, -0.021750000000000824, -0.006000000000002004, 0.04274999999999807, -0.040749999999999176, -0.32225000000000037, -0.08799999999999919, -0.007500000000000284, -0.03824999999999967, -0.04150000000000098, 0.09299999999999997, 0.01950000000000074, -0.11499999999999844, -0.04849999999999888, -0.09925000000000139], zp_timestamp='2025-12-03T21:01:00')
2025-12-03T23:05:01.530 [DEBUG] [Thread-125287] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:05:01.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:05:01.635 [DEBUG] [Thread-125290] [transport.py] [_log()] starting thread (client mode): 0x9fd22a10
2025-12-03T23:05:01.635 [DEBUG] [Thread-125290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:05:01.652 [DEBUG] [Thread-125290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:05:01.652 [INFO] [Thread-125290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:05:01.659 [DEBUG] [Thread-125290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:05:01.660 [DEBUG] [Thread-125290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] client lang: <none>
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] server lang: <none>
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] kex follows: False
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:05:01.661 [DEBUG] [Thread-125290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:05:01.662 [DEBUG] [Thread-125290] [transport.py] [_log()] Compression: none
2025-12-03T23:05:01.662 [DEBUG] [Thread-125290] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:05:01.718 [DEBUG] [Thread-125290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:05:01.719 [DEBUG] [Thread-125290] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:05:01.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:05:01.720 [DEBUG] [Thread-125290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:05:01.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:05:01.775 [DEBUG] [Thread-125290] [transport.py] [_log()] userauth is OK
2025-12-03T23:05:01.775 [DEBUG] [Thread-125290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:05:01.775 [DEBUG] [Thread-125290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:05:01.775 [DEBUG] [Thread-125290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:05:01.776 [DEBUG] [Thread-125290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:05:01.798 [INFO] [Thread-125290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:05:01.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:05:01.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:05:02.699 [DEBUG] [Thread-125290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:05:02.699 [DEBUG] [Thread-125290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:05:02.747 [DEBUG] [Thread-125290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:05:02.747 [DEBUG] [Thread-125290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:05:02.755 [DEBUG] [Thread-125290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:05:02.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:05:02.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:05:02.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:05:02.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:05:02.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:05:02.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:05:02.786 [DEBUG] [Thread-125290] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:05:09.428 [DEBUG] [Thread-125292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:10.999 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:11.000 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:17.962 [DEBUG] [Thread-125293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:24.486 [DEBUG] [Thread-125294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:32.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:05:32.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:05:32.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:05:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 5, 1), 15.35, 35.05, 0.0, 23.04, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:05:33.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:05:01
2025-12-03T23:05:33.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:05:33.770 [DEBUG] [Thread-125295] [transport.py] [_log()] starting thread (client mode): 0x9fd20340
2025-12-03T23:05:33.770 [DEBUG] [Thread-125295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:05:33.793 [DEBUG] [Thread-125295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:05:33.794 [INFO] [Thread-125295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:05:33.797 [DEBUG] [Thread-125295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:05:33.797 [DEBUG] [Thread-125295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:05:33.797 [DEBUG] [Thread-125295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:05:33.797 [DEBUG] [Thread-125295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] client lang: <none>
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] server lang: <none>
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] kex follows: False
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] Compression: none
2025-12-03T23:05:33.798 [DEBUG] [Thread-125295] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:05:33.816 [DEBUG] [Thread-125295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:05:33.817 [DEBUG] [Thread-125295] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:05:33.817 [DEBUG] [Thread-125295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:05:33.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:05:33.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:05:33.819 [DEBUG] [Thread-125295] [transport.py] [_log()] userauth is OK
2025-12-03T23:05:33.819 [DEBUG] [Thread-125295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:05:33.819 [DEBUG] [Thread-125295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:05:33.819 [DEBUG] [Thread-125295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:05:33.819 [DEBUG] [Thread-125295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:05:33.842 [INFO] [Thread-125295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:05:33.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:05:34.487 [DEBUG] [Thread-125295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:05:34.487 [DEBUG] [Thread-125295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:05:34.487 [DEBUG] [Thread-125295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:05:34.528 [DEBUG] [Thread-125295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:05:34.528 [DEBUG] [Thread-125295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:05:34.530 [DEBUG] [Thread-125295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:05:34.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:05:34.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:05:34.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:05:34.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:05:34.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:05:34.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.878174 -999.00  +15.90  18.26     40   +2.40 1 1 1 1 1     0    0 12.88 -16.82 ZNESW 19.1 18.3 132.0 27.1 16.1 -25.4 15.9 -24.9 15.7 -23.2 15.9 -23.9
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:05:34.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.878174
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:05:34.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:05:01', tmtdew=15.35, humidity=35.05, cloud=0.0, wind=23.04, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:05:02', seeing=0.93, atlas_timestamp='2025-12-03T21:04:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08774999999999977, -0.07324999999999982, -0.0810000000000013, -0.041499999999999204, 0.01025000000000098, -0.05900000000000105, -0.12774999999999892, -0.025500000000000966, -0.04800000000000004, 0.0072499999999990905, -0.07099999999999973, -0.02149999999999963, -0.028750000000000497, -0.04400000000000048, -0.125, 0.0022500000000000853, 0.0015000000000000568, -0.005000000000000782, -0.021750000000000824, -0.006000000000002004, 0.04274999999999807, -0.040749999999999176, -0.32225000000000037, -0.08799999999999919, -0.007500000000000284, -0.03824999999999967, -0.04150000000000098, 0.09299999999999997, 0.01950000000000074, -0.11499999999999844, -0.04849999999999888, -0.09925000000000139], zp_timestamp='2025-12-03T21:01:00')
2025-12-03T23:05:34.549 [DEBUG] [Thread-125295] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:05:34.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:05:34.645 [DEBUG] [Thread-125298] [transport.py] [_log()] starting thread (client mode): 0x9fd22cb0
2025-12-03T23:05:34.645 [DEBUG] [Thread-125298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:05:34.660 [DEBUG] [Thread-125298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:05:34.660 [INFO] [Thread-125298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] client lang: <none>
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] server lang: <none>
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] kex follows: False
2025-12-03T23:05:34.667 [DEBUG] [Thread-125298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] Compression: none
2025-12-03T23:05:34.668 [DEBUG] [Thread-125298] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:05:34.724 [DEBUG] [Thread-125298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:05:34.724 [DEBUG] [Thread-125298] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:05:34.724 [DEBUG] [Thread-125298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:05:34.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:05:34.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:05:34.781 [DEBUG] [Thread-125298] [transport.py] [_log()] userauth is OK
2025-12-03T23:05:34.781 [DEBUG] [Thread-125298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:05:34.781 [DEBUG] [Thread-125298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:05:34.781 [DEBUG] [Thread-125298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:05:34.781 [DEBUG] [Thread-125298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:05:34.797 [INFO] [Thread-125298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:05:34.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:05:34.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:05:35.632 [DEBUG] [Thread-125298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:05:35.632 [DEBUG] [Thread-125298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:05:35.680 [DEBUG] [Thread-125298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:05:35.680 [DEBUG] [Thread-125298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:05:35.689 [DEBUG] [Thread-125298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:05:35.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:05:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:05:35.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:05:35.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:05:35.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:05:35.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:05:35.720 [DEBUG] [Thread-125298] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:05:39.522 [DEBUG] [Thread-125300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:05:54.578 [DEBUG] [Thread-125301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:06:05.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:06:05.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:06:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 5, 34), 15.4, 35.13, 0.0, 25.93, 16.06, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:06:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:05:34
2025-12-03T23:06:06.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:06:06.735 [DEBUG] [Thread-125302] [transport.py] [_log()] starting thread (client mode): 0xa5161420
2025-12-03T23:06:06.735 [DEBUG] [Thread-125302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:06:06.747 [DEBUG] [Thread-125302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:06:06.747 [INFO] [Thread-125302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:06:06.748 [DEBUG] [Thread-125302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] client lang: <none>
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] server lang: <none>
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] kex follows: False
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] Compression: none
2025-12-03T23:06:06.749 [DEBUG] [Thread-125302] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:06:06.758 [DEBUG] [Thread-125302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:06:06.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:06:06.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] userauth is OK
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:06:06.759 [DEBUG] [Thread-125302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:06:06.768 [INFO] [Thread-125302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:06:06.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:06:07.329 [DEBUG] [Thread-125302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:06:07.329 [DEBUG] [Thread-125302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:06:07.329 [DEBUG] [Thread-125302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:06:07.370 [DEBUG] [Thread-125302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:06:07.370 [DEBUG] [Thread-125302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:06:07.372 [DEBUG] [Thread-125302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:06:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:06:07.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:06:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:06:07.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:06:07.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:06:07.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:06:07.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.878868 -999.00  +15.90  18.31     40   +2.30 1 1 1 1 1     0    0 13.10 -13.19 ZNESW 17.8 18.3 141.4 25.9 16.0 -25.4 15.9 -24.9 15.7 -23.3 15.9 -23.9
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.878868
2025-12-03T23:06:07.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:06:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:06:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:06:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:06:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:06:07.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:05:34', tmtdew=15.4, humidity=35.13, cloud=0.0, wind=25.93, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:05:34', seeing=0.93, atlas_timestamp='2025-12-03T21:05:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:04:00')
2025-12-03T23:06:07.393 [DEBUG] [Thread-125302] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:06:07.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:06:07.487 [DEBUG] [Thread-125305] [transport.py] [_log()] starting thread (client mode): 0xa514c5b0
2025-12-03T23:06:07.487 [DEBUG] [Thread-125305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:06:07.501 [DEBUG] [Thread-125305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:06:07.502 [INFO] [Thread-125305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] client lang: <none>
2025-12-03T23:06:07.509 [DEBUG] [Thread-125305] [transport.py] [_log()] server lang: <none>
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] kex follows: False
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] Compression: none
2025-12-03T23:06:07.510 [DEBUG] [Thread-125305] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:06:07.568 [DEBUG] [Thread-125305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:06:07.568 [DEBUG] [Thread-125305] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:06:07.569 [DEBUG] [Thread-125305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:06:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:06:07.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:06:07.625 [DEBUG] [Thread-125305] [transport.py] [_log()] userauth is OK
2025-12-03T23:06:07.625 [DEBUG] [Thread-125305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:06:07.625 [DEBUG] [Thread-125305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:06:07.625 [DEBUG] [Thread-125305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:06:07.625 [DEBUG] [Thread-125305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:06:07.639 [INFO] [Thread-125305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:06:07.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:06:07.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:06:08.507 [DEBUG] [Thread-125305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:06:08.507 [DEBUG] [Thread-125305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:06:08.555 [DEBUG] [Thread-125305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:06:08.555 [DEBUG] [Thread-125305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:06:08.564 [DEBUG] [Thread-125305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:06:08.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:06:08.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:06:08.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:06:08.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:06:08.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:06:08.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:06:08.598 [DEBUG] [Thread-125305] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:06:09.611 [DEBUG] [Thread-125307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:11.200 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:11.201 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:18.056 [DEBUG] [Thread-125308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:24.669 [DEBUG] [Thread-125309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:38.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:06:38.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:06:38.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:06:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 6, 6), 15.43, 34.98, 0.0, 23.29, 15.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:06:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:06:06
2025-12-03T23:06:39.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:06:39.681 [DEBUG] [Thread-125310] [transport.py] [_log()] starting thread (client mode): 0x9fd21060
2025-12-03T23:06:39.681 [DEBUG] [Thread-125310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:06:39.701 [DEBUG] [Thread-125310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:06:39.701 [INFO] [Thread-125310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] client lang: <none>
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] server lang: <none>
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] kex follows: False
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] Compression: none
2025-12-03T23:06:39.705 [DEBUG] [Thread-125310] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:06:39.711 [DEBUG] [Thread-125312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:39.719 [DEBUG] [Thread-125310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:06:39.719 [DEBUG] [Thread-125310] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:06:39.719 [DEBUG] [Thread-125310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:06:39.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:06:39.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:06:39.720 [DEBUG] [Thread-125310] [transport.py] [_log()] userauth is OK
2025-12-03T23:06:39.720 [DEBUG] [Thread-125310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:06:39.720 [DEBUG] [Thread-125310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:06:39.720 [DEBUG] [Thread-125310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:06:39.720 [DEBUG] [Thread-125310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:06:39.728 [INFO] [Thread-125310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:06:39.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:06:40.377 [DEBUG] [Thread-125310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:06:40.377 [DEBUG] [Thread-125310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:06:40.377 [DEBUG] [Thread-125310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:06:40.419 [DEBUG] [Thread-125310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:06:40.419 [DEBUG] [Thread-125310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:06:40.421 [DEBUG] [Thread-125310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:06:40.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:06:40.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:06:40.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:06:40.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:06:40.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:06:40.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:06:40.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.879215 -999.00  +15.80  19.80     40   +2.30 1 1 1 1 1     0    0 13.20 -12.58 ZNESW 18.8 19.8 147.0 26.1 16.1 -25.6 15.9 -25.0 15.7 -23.4 15.9 -24.2
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.879215
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:06:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:06:06', tmtdew=15.43, humidity=34.98, cloud=0.0, wind=23.29, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:06:38', seeing=0.86, atlas_timestamp='2025-12-03T21:06:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:04:00')
2025-12-03T23:06:40.442 [DEBUG] [Thread-125310] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:06:40.533 [DEBUG] [Thread-125314] [transport.py] [_log()] starting thread (client mode): 0x9fd23400
2025-12-03T23:06:40.533 [DEBUG] [Thread-125314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:06:40.547 [DEBUG] [Thread-125314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:06:40.547 [INFO] [Thread-125314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:06:40.554 [DEBUG] [Thread-125314] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] client lang: <none>
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] server lang: <none>
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] kex follows: False
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] Compression: none
2025-12-03T23:06:40.555 [DEBUG] [Thread-125314] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:06:40.612 [DEBUG] [Thread-125314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:06:40.612 [DEBUG] [Thread-125314] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:06:40.612 [DEBUG] [Thread-125314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:06:40.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:06:40.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:06:40.669 [DEBUG] [Thread-125314] [transport.py] [_log()] userauth is OK
2025-12-03T23:06:40.669 [DEBUG] [Thread-125314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:06:40.669 [DEBUG] [Thread-125314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:06:40.669 [DEBUG] [Thread-125314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:06:40.669 [DEBUG] [Thread-125314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:06:40.688 [INFO] [Thread-125314] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:06:40.688 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:06:40.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:06:41.525 [DEBUG] [Thread-125314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:06:41.525 [DEBUG] [Thread-125314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:06:41.572 [DEBUG] [Thread-125314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:06:41.573 [DEBUG] [Thread-125314] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:06:41.581 [DEBUG] [Thread-125314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:06:41.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:06:41.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:06:41.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:06:41.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:06:41.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:06:41.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:06:41.612 [DEBUG] [Thread-125314] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:06:54.744 [DEBUG] [Thread-125316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:06:57.202 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:00.476 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:05.769 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:09.799 [DEBUG] [Thread-125317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:11.317 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:11.402 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:11.404 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:11.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:07:11.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:07:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:07:12.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 6, 38), 15.43, 34.97, 0.0, 25.35, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:07:12.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:06:38
2025-12-03T23:07:12.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:07:12.621 [DEBUG] [Thread-125318] [transport.py] [_log()] starting thread (client mode): 0xa51b8b80
2025-12-03T23:07:12.621 [DEBUG] [Thread-125318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:07:12.641 [DEBUG] [Thread-125318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:07:12.641 [INFO] [Thread-125318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] client lang: <none>
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] server lang: <none>
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] kex follows: False
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:07:12.645 [DEBUG] [Thread-125318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:07:12.646 [DEBUG] [Thread-125318] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:07:12.646 [DEBUG] [Thread-125318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:07:12.646 [DEBUG] [Thread-125318] [transport.py] [_log()] Compression: none
2025-12-03T23:07:12.646 [DEBUG] [Thread-125318] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:07:12.663 [DEBUG] [Thread-125318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:07:12.663 [DEBUG] [Thread-125318] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:07:12.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:07:12.664 [DEBUG] [Thread-125318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:07:12.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:07:12.666 [DEBUG] [Thread-125318] [transport.py] [_log()] userauth is OK
2025-12-03T23:07:12.666 [DEBUG] [Thread-125318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:07:12.667 [DEBUG] [Thread-125318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:07:12.667 [DEBUG] [Thread-125318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:07:12.667 [DEBUG] [Thread-125318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:07:12.706 [INFO] [Thread-125318] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:07:12.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:07:13.481 [DEBUG] [Thread-125318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:07:13.481 [DEBUG] [Thread-125318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:07:13.481 [DEBUG] [Thread-125318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:07:13.522 [DEBUG] [Thread-125318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:07:13.522 [DEBUG] [Thread-125318] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:07:13.524 [DEBUG] [Thread-125318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:07:13.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:07:13.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:07:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:07:13.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:07:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:07:13.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:07:13.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:07:13.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.879563 -999.00  +15.80  14.77     40   +2.30 1 1 1 1 1     0    0 13.10 -13.46 ZNESW 13.5 14.8 133.8 18.1 16.1 -25.6 15.9 -25.1 15.7 -23.4 16.0 -24.4
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.879563
2025-12-03T23:07:13.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:07:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:07:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:07:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:07:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:07:13.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:06:38', tmtdew=15.43, humidity=34.97, cloud=0.0, wind=25.35, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:07:10', seeing=0.92, atlas_timestamp='2025-12-03T21:06:34.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:04:00')
2025-12-03T23:07:13.557 [DEBUG] [Thread-125318] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:07:13.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:07:13.659 [DEBUG] [Thread-125321] [transport.py] [_log()] starting thread (client mode): 0x9fd23340
2025-12-03T23:07:13.659 [DEBUG] [Thread-125321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:07:13.677 [DEBUG] [Thread-125321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:07:13.677 [INFO] [Thread-125321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:07:13.684 [DEBUG] [Thread-125321] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:07:13.684 [DEBUG] [Thread-125321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] client lang: <none>
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] server lang: <none>
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] kex follows: False
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] Compression: none
2025-12-03T23:07:13.685 [DEBUG] [Thread-125321] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:07:13.744 [DEBUG] [Thread-125321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:07:13.745 [DEBUG] [Thread-125321] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:07:13.745 [DEBUG] [Thread-125321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:07:13.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:07:13.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:07:13.803 [DEBUG] [Thread-125321] [transport.py] [_log()] userauth is OK
2025-12-03T23:07:13.804 [DEBUG] [Thread-125321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:07:13.804 [DEBUG] [Thread-125321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:07:13.804 [DEBUG] [Thread-125321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:07:13.804 [DEBUG] [Thread-125321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:07:13.822 [INFO] [Thread-125321] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:07:13.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:07:13.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:07:14.663 [DEBUG] [Thread-125321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:07:14.664 [DEBUG] [Thread-125321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:07:14.713 [DEBUG] [Thread-125321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:07:14.713 [DEBUG] [Thread-125321] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:07:14.723 [DEBUG] [Thread-125321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:07:14.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:07:14.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:07:14.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:07:14.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:07:14.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:07:14.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:07:14.760 [DEBUG] [Thread-125321] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:07:18.127 [DEBUG] [Thread-125323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:24.834 [DEBUG] [Thread-125324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:31.566 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:35.948 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:39.891 [DEBUG] [Thread-125325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:44.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:07:44.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:07:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:07:45.335 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 7, 42), 15.46, 34.8, 0.0, 22.8, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:07:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:07:42
2025-12-03T23:07:45.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:07:45.746 [DEBUG] [Thread-125326] [transport.py] [_log()] starting thread (client mode): 0xa2778d60
2025-12-03T23:07:45.746 [DEBUG] [Thread-125326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:07:45.767 [DEBUG] [Thread-125326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:07:45.767 [INFO] [Thread-125326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:07:45.770 [DEBUG] [Thread-125326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:07:45.770 [DEBUG] [Thread-125326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] client lang: <none>
2025-12-03T23:07:45.771 [DEBUG] [Thread-125326] [transport.py] [_log()] server lang: <none>
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] kex follows: False
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] Compression: none
2025-12-03T23:07:45.772 [DEBUG] [Thread-125326] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:07:45.792 [DEBUG] [Thread-125326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:07:45.793 [DEBUG] [Thread-125326] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:07:45.793 [DEBUG] [Thread-125326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:07:45.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:07:45.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:07:45.795 [DEBUG] [Thread-125326] [transport.py] [_log()] userauth is OK
2025-12-03T23:07:45.795 [DEBUG] [Thread-125326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:07:45.795 [DEBUG] [Thread-125326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:07:45.796 [DEBUG] [Thread-125326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:07:45.796 [DEBUG] [Thread-125326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:07:45.819 [INFO] [Thread-125326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:07:45.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:07:46.452 [DEBUG] [Thread-125326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:07:46.452 [DEBUG] [Thread-125326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:07:46.452 [DEBUG] [Thread-125326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:07:46.494 [DEBUG] [Thread-125326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:07:46.494 [DEBUG] [Thread-125326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:07:46.497 [DEBUG] [Thread-125326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:07:46.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:07:46.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:07:46.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:07:46.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:07:46.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:07:46.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:07:46.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:07:46.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.879910 -999.00  +15.70  18.06     40   +2.30 1 1 1 1 1     0    0 13.01 -11.28 ZNESW 17.1 18.1 147.0 21.1 16.0 -25.6 15.8 -25.0 15.7 -23.4 15.9 -24.3
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.879910
2025-12-03T23:07:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:07:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:07:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:07:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:07:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:07:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:07:42', tmtdew=15.46, humidity=34.8, cloud=0.0, wind=22.8, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:07:42', seeing=0.88, atlas_timestamp='2025-12-03T21:07:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:04:00')
2025-12-03T23:07:46.522 [DEBUG] [Thread-125326] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:07:46.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:07:46.628 [DEBUG] [Thread-125329] [transport.py] [_log()] starting thread (client mode): 0xa277aa40
2025-12-03T23:07:46.628 [DEBUG] [Thread-125329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:07:46.643 [DEBUG] [Thread-125329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:07:46.643 [INFO] [Thread-125329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:07:46.650 [DEBUG] [Thread-125329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] client lang: <none>
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] server lang: <none>
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] kex follows: False
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] Compression: none
2025-12-03T23:07:46.651 [DEBUG] [Thread-125329] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:07:46.709 [DEBUG] [Thread-125329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:07:46.710 [DEBUG] [Thread-125329] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:07:46.710 [DEBUG] [Thread-125329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:07:46.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:07:46.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:07:46.769 [DEBUG] [Thread-125329] [transport.py] [_log()] userauth is OK
2025-12-03T23:07:46.769 [DEBUG] [Thread-125329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:07:46.770 [DEBUG] [Thread-125329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:07:46.770 [DEBUG] [Thread-125329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:07:46.770 [DEBUG] [Thread-125329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:07:46.788 [INFO] [Thread-125329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:07:46.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:07:46.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:07:47.640 [DEBUG] [Thread-125329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:07:47.640 [DEBUG] [Thread-125329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:07:47.688 [DEBUG] [Thread-125329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:07:47.688 [DEBUG] [Thread-125329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:07:47.697 [DEBUG] [Thread-125329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:07:47.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:07:47.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:07:47.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:07:47.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:07:47.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:07:47.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:07:47.731 [DEBUG] [Thread-125329] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:07:50.047 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:54.927 [DEBUG] [Thread-125331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:07:56.850 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:01.724 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:09.984 [DEBUG] [Thread-125332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:11.603 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:11.604 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:17.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:08:17.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:08:17.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:08:18.182 [DEBUG] [Thread-125333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 8, 14), 15.46, 34.8, 0.0, 24.53, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:08:18.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:08:14
2025-12-03T23:08:18.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:08:18.720 [DEBUG] [Thread-125334] [transport.py] [_log()] starting thread (client mode): 0xa2778250
2025-12-03T23:08:18.720 [DEBUG] [Thread-125334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:08:18.740 [DEBUG] [Thread-125334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:08:18.740 [INFO] [Thread-125334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:08:18.743 [DEBUG] [Thread-125334] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] client lang: <none>
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] server lang: <none>
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] kex follows: False
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] Compression: none
2025-12-03T23:08:18.744 [DEBUG] [Thread-125334] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:08:18.762 [DEBUG] [Thread-125334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:08:18.762 [DEBUG] [Thread-125334] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:08:18.763 [DEBUG] [Thread-125334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:08:18.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:08:18.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:08:18.765 [DEBUG] [Thread-125334] [transport.py] [_log()] userauth is OK
2025-12-03T23:08:18.765 [DEBUG] [Thread-125334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:08:18.765 [DEBUG] [Thread-125334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:08:18.765 [DEBUG] [Thread-125334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:08:18.765 [DEBUG] [Thread-125334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:08:18.799 [INFO] [Thread-125334] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:08:18.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:08:19.571 [DEBUG] [Thread-125334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:08:19.571 [DEBUG] [Thread-125334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:08:19.571 [DEBUG] [Thread-125334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:08:19.612 [DEBUG] [Thread-125334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:08:19.612 [DEBUG] [Thread-125334] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:08:19.614 [DEBUG] [Thread-125334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:08:19.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:08:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:08:19.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:08:19.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:08:19.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:08:19.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:08:19.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:08:19.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:08:19.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.880257 -999.00  +15.70  14.88     40   +2.30 1 1 1 1 1     0    0 13.40 -11.16 ZNESW 22.0 14.9 143.4 19.7 16.0 -25.6 15.9 -25.0 15.6 -23.2 15.9 -24.0
2025-12-03T23:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.880257
2025-12-03T23:08:19.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:08:19.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:08:14', tmtdew=15.46, humidity=34.8, cloud=0.0, wind=24.53, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:08:14', seeing=0.88, atlas_timestamp='2025-12-03T21:07:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:04:00')
2025-12-03T23:08:19.638 [DEBUG] [Thread-125334] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:08:19.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:08:19.739 [DEBUG] [Thread-125337] [transport.py] [_log()] starting thread (client mode): 0xa277a230
2025-12-03T23:08:19.739 [DEBUG] [Thread-125337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:08:19.754 [DEBUG] [Thread-125337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:08:19.754 [INFO] [Thread-125337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:08:19.761 [DEBUG] [Thread-125337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:08:19.761 [DEBUG] [Thread-125337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:08:19.761 [DEBUG] [Thread-125337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:08:19.761 [DEBUG] [Thread-125337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] client lang: <none>
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] server lang: <none>
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] kex follows: False
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] Compression: none
2025-12-03T23:08:19.762 [DEBUG] [Thread-125337] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:08:19.821 [DEBUG] [Thread-125337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:08:19.821 [DEBUG] [Thread-125337] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:08:19.822 [DEBUG] [Thread-125337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:08:19.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:08:19.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:08:19.878 [DEBUG] [Thread-125337] [transport.py] [_log()] userauth is OK
2025-12-03T23:08:19.878 [DEBUG] [Thread-125337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:08:19.878 [DEBUG] [Thread-125337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:08:19.878 [DEBUG] [Thread-125337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:08:19.878 [DEBUG] [Thread-125337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:08:19.898 [INFO] [Thread-125337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:08:19.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:08:19.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:08:20.800 [DEBUG] [Thread-125337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:08:20.801 [DEBUG] [Thread-125337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:08:20.851 [DEBUG] [Thread-125337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:08:20.851 [DEBUG] [Thread-125337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:08:20.860 [DEBUG] [Thread-125337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:08:20.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:08:20.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:08:20.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:08:20.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:08:20.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:08:20.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:08:20.895 [DEBUG] [Thread-125337] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:08:25.021 [DEBUG] [Thread-125339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:40.078 [DEBUG] [Thread-125340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:08:50.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:08:50.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:08:50.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:08:51.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 8, 46), 15.46, 34.79, 0.0, 24.09, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:08:51.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:08:46
2025-12-03T23:08:51.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:08:51.879 [DEBUG] [Thread-125341] [transport.py] [_log()] starting thread (client mode): 0xa277b8e0
2025-12-03T23:08:51.879 [DEBUG] [Thread-125341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:08:51.899 [DEBUG] [Thread-125341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:08:51.900 [INFO] [Thread-125341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:51.903 [DEBUG] [Thread-125341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] client lang: <none>
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] server lang: <none>
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] kex follows: False
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:08:51.904 [DEBUG] [Thread-125341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:08:51.905 [DEBUG] [Thread-125341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:08:51.905 [DEBUG] [Thread-125341] [transport.py] [_log()] Compression: none
2025-12-03T23:08:51.905 [DEBUG] [Thread-125341] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:08:51.927 [DEBUG] [Thread-125341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:08:51.927 [DEBUG] [Thread-125341] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:08:51.928 [DEBUG] [Thread-125341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:08:51.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:08:51.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:08:51.930 [DEBUG] [Thread-125341] [transport.py] [_log()] userauth is OK
2025-12-03T23:08:51.930 [DEBUG] [Thread-125341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:08:51.930 [DEBUG] [Thread-125341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:08:51.930 [DEBUG] [Thread-125341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:08:51.930 [DEBUG] [Thread-125341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:08:51.954 [INFO] [Thread-125341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:08:51.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:08:52.587 [DEBUG] [Thread-125341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:08:52.587 [DEBUG] [Thread-125341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:08:52.587 [DEBUG] [Thread-125341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:08:52.628 [DEBUG] [Thread-125341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:08:52.628 [DEBUG] [Thread-125341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:08:52.631 [DEBUG] [Thread-125341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:08:52.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:08:52.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:08:52.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:08:52.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:08:52.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:08:52.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:08:52.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:08:52.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:08:52.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:08:52.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.880604 -999.00  +15.70  13.80     40   +2.30 1 1 1 1 1     0    0 13.35 -10.23 ZNESW 18.6 13.8 136.2 25.6 16.0 -25.5 15.9 -24.9 15.6 -23.2 15.9 -24.1
2025-12-03T23:08:52.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:08:52.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:08:52.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.880604
2025-12-03T23:08:52.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:08:52.656 [DEBUG] [Thread-125341] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:08:52.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:08:52.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:08:52.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:08:52.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:08:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:08:46', tmtdew=15.46, humidity=34.79, cloud=0.0, wind=24.09, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:08:46', seeing=0.83, atlas_timestamp='2025-12-03T21:08:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:08:52.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:08:52.765 [DEBUG] [Thread-125344] [transport.py] [_log()] starting thread (client mode): 0xa2779870
2025-12-03T23:08:52.765 [DEBUG] [Thread-125344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:08:52.782 [DEBUG] [Thread-125344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:08:52.782 [INFO] [Thread-125344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:08:52.790 [DEBUG] [Thread-125344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] client lang: <none>
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] server lang: <none>
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] kex follows: False
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] Compression: none
2025-12-03T23:08:52.791 [DEBUG] [Thread-125344] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:08:52.849 [DEBUG] [Thread-125344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:08:52.850 [DEBUG] [Thread-125344] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:08:52.850 [DEBUG] [Thread-125344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:08:52.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:08:52.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:08:52.906 [DEBUG] [Thread-125344] [transport.py] [_log()] userauth is OK
2025-12-03T23:08:52.906 [DEBUG] [Thread-125344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:08:52.906 [DEBUG] [Thread-125344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:08:52.906 [DEBUG] [Thread-125344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:08:52.906 [DEBUG] [Thread-125344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:08:52.925 [INFO] [Thread-125344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:08:52.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:08:52.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:08:53.792 [DEBUG] [Thread-125344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:08:53.792 [DEBUG] [Thread-125344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:08:53.840 [DEBUG] [Thread-125344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:08:53.840 [DEBUG] [Thread-125344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:08:53.849 [DEBUG] [Thread-125344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:08:53.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:08:53.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:08:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:08:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:08:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:08:53.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:08:53.884 [DEBUG] [Thread-125344] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:08:55.110 [DEBUG] [Thread-125346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:10.159 [DEBUG] [Thread-125347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:11.802 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:11.803 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:12.402 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:16.509 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:18.249 [DEBUG] [Thread-125348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:09:23.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:09:23.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:09:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 9, 18), 15.44, 34.85, 0.0, 25.9, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:09:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:09:18
2025-12-03T23:09:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:09:24.858 [DEBUG] [Thread-125349] [transport.py] [_log()] starting thread (client mode): 0xa277a020
2025-12-03T23:09:24.859 [DEBUG] [Thread-125349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:09:24.880 [DEBUG] [Thread-125349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:09:24.880 [INFO] [Thread-125349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:09:24.883 [DEBUG] [Thread-125349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] client lang: <none>
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] server lang: <none>
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] kex follows: False
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:09:24.884 [DEBUG] [Thread-125349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:09:24.885 [DEBUG] [Thread-125349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:09:24.885 [DEBUG] [Thread-125349] [transport.py] [_log()] Compression: none
2025-12-03T23:09:24.885 [DEBUG] [Thread-125349] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:09:24.904 [DEBUG] [Thread-125349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:09:24.905 [DEBUG] [Thread-125349] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:09:24.905 [DEBUG] [Thread-125349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:09:24.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:09:24.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:09:24.907 [DEBUG] [Thread-125349] [transport.py] [_log()] userauth is OK
2025-12-03T23:09:24.907 [DEBUG] [Thread-125349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:09:24.907 [DEBUG] [Thread-125349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:09:24.907 [DEBUG] [Thread-125349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:09:24.907 [DEBUG] [Thread-125349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:09:24.923 [INFO] [Thread-125349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:09:24.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:09:25.193 [DEBUG] [Thread-125351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:25.532 [DEBUG] [Thread-125349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:09:25.532 [DEBUG] [Thread-125349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:09:25.532 [DEBUG] [Thread-125349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:09:25.573 [DEBUG] [Thread-125349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:09:25.573 [DEBUG] [Thread-125349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:09:25.576 [DEBUG] [Thread-125349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:09:25.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:09:25.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:09:25.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:09:25.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:09:25.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:09:25.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:09:25.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:09:25.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:09:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:09:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.881299 -999.00  +15.70  16.08     40   +2.30 1 1 1 1 1     0    0 13.11 -8.12 ZNESW 15.7 16.1 129.6 19.9 16.0 -25.5 15.8 -24.9 15.6 -23.3 15.9 -23.9
2025-12-03T23:09:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:09:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:09:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.881299
2025-12-03T23:09:25.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:09:25.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:09:25.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:09:25.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:09:25.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:09:25.599 [DEBUG] [Thread-125349] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:09:25.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:09:18', tmtdew=15.44, humidity=34.85, cloud=0.0, wind=25.9, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:09:18', seeing=0.88, atlas_timestamp='2025-12-03T21:09:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:09:25.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:09:25.702 [DEBUG] [Thread-125353] [transport.py] [_log()] starting thread (client mode): 0xa2778c70
2025-12-03T23:09:25.702 [DEBUG] [Thread-125353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:09:25.718 [DEBUG] [Thread-125353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:09:25.718 [INFO] [Thread-125353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:09:25.725 [DEBUG] [Thread-125353] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:09:25.725 [DEBUG] [Thread-125353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] client lang: <none>
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] server lang: <none>
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] kex follows: False
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] Compression: none
2025-12-03T23:09:25.726 [DEBUG] [Thread-125353] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:09:25.789 [DEBUG] [Thread-125353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:09:25.789 [DEBUG] [Thread-125353] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:09:25.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:09:25.790 [DEBUG] [Thread-125353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:09:25.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:09:25.845 [DEBUG] [Thread-125353] [transport.py] [_log()] userauth is OK
2025-12-03T23:09:25.846 [DEBUG] [Thread-125353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:09:25.846 [DEBUG] [Thread-125353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:09:25.846 [DEBUG] [Thread-125353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:09:25.846 [DEBUG] [Thread-125353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:09:25.869 [INFO] [Thread-125353] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:09:25.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:09:25.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:09:26.720 [DEBUG] [Thread-125353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:09:26.720 [DEBUG] [Thread-125353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:09:26.768 [DEBUG] [Thread-125353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:09:26.768 [DEBUG] [Thread-125353] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:09:26.777 [DEBUG] [Thread-125353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:09:26.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:09:26.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:09:26.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:09:26.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:09:26.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:09:26.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:09:26.810 [DEBUG] [Thread-125353] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:09:37.935 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:40.231 [DEBUG] [Thread-125355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:55.286 [DEBUG] [Thread-125356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:56.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:09:56.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:09:56.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:09:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 9, 50), 15.44, 34.85, 0.0, 21.99, 15.88, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:09:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:09:50
2025-12-03T23:09:57.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:09:57.796 [DEBUG] [Thread-125357] [transport.py] [_log()] starting thread (client mode): 0xa2778370
2025-12-03T23:09:57.796 [DEBUG] [Thread-125357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:09:57.816 [DEBUG] [Thread-125357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:09:57.817 [INFO] [Thread-125357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:09:57.819 [DEBUG] [Thread-125357] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:09:57.820 [DEBUG] [Thread-125357] [transport.py] [_log()] client lang: <none>
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] server lang: <none>
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] kex follows: False
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] Compression: none
2025-12-03T23:09:57.821 [DEBUG] [Thread-125357] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:09:57.835 [DEBUG] [Thread-125357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:09:57.836 [DEBUG] [Thread-125357] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:09:57.836 [DEBUG] [Thread-125357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:09:57.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:09:57.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:09:57.838 [DEBUG] [Thread-125357] [transport.py] [_log()] userauth is OK
2025-12-03T23:09:57.838 [DEBUG] [Thread-125357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:09:57.838 [DEBUG] [Thread-125357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:09:57.838 [DEBUG] [Thread-125357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:09:57.838 [DEBUG] [Thread-125357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:09:57.873 [INFO] [Thread-125357] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:09:57.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:09:58.383 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:09:58.529 [DEBUG] [Thread-125357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:09:58.529 [DEBUG] [Thread-125357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:09:58.530 [DEBUG] [Thread-125357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:09:58.570 [DEBUG] [Thread-125357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:09:58.570 [DEBUG] [Thread-125357] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:09:58.573 [DEBUG] [Thread-125357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:09:58.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:09:58.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:09:58.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:09:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:09:58.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:09:58.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:09:58.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:09:58.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.881646 -999.00  +15.70  16.19     40   +2.30 1 1 1 1 1     0    0 13.31 -7.87 ZNESW 17.8 16.2 145.8 26.7 16.0 -25.5 15.9 -24.9 15.7 -23.3 15.8 -24.1
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.881646
2025-12-03T23:09:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:09:58.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:09:58.598 [DEBUG] [Thread-125357] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:09:58.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:09:58.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:09:58.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:09:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:09:50', tmtdew=15.44, humidity=34.85, cloud=0.0, wind=21.99, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:09:50', seeing=0.88, atlas_timestamp='2025-12-03T21:09:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:09:58.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:09:58.700 [DEBUG] [Thread-125360] [transport.py] [_log()] starting thread (client mode): 0xa277b010
2025-12-03T23:09:58.700 [DEBUG] [Thread-125360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:09:58.715 [DEBUG] [Thread-125360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:09:58.715 [INFO] [Thread-125360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] client lang: <none>
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] server lang: <none>
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] kex follows: False
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:09:58.723 [DEBUG] [Thread-125360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:09:58.724 [DEBUG] [Thread-125360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:09:58.724 [DEBUG] [Thread-125360] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:09:58.724 [DEBUG] [Thread-125360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:09:58.724 [DEBUG] [Thread-125360] [transport.py] [_log()] Compression: none
2025-12-03T23:09:58.724 [DEBUG] [Thread-125360] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:09:58.785 [DEBUG] [Thread-125360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:09:58.785 [DEBUG] [Thread-125360] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:09:58.786 [DEBUG] [Thread-125360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:09:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:09:58.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:09:58.842 [DEBUG] [Thread-125360] [transport.py] [_log()] userauth is OK
2025-12-03T23:09:58.842 [DEBUG] [Thread-125360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:09:58.842 [DEBUG] [Thread-125360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:09:58.842 [DEBUG] [Thread-125360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:09:58.842 [DEBUG] [Thread-125360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:09:58.864 [INFO] [Thread-125360] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:09:58.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:09:58.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:09:59.675 [DEBUG] [Thread-125360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:09:59.676 [DEBUG] [Thread-125360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:09:59.724 [DEBUG] [Thread-125360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:09:59.724 [DEBUG] [Thread-125360] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:09:59.733 [DEBUG] [Thread-125360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:09:59.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:09:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:09:59.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:09:59.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:09:59.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:09:59.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:09:59.767 [DEBUG] [Thread-125360] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:10:10.320 [DEBUG] [Thread-125362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:12.000 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:12.001 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:18.319 [DEBUG] [Thread-125363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:18.806 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:25.376 [DEBUG] [Thread-125364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:10:29.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:10:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:10:30.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 10, 22), 15.42, 34.89, 0.0, 23.24, 15.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:10:30.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:10:22
2025-12-03T23:10:30.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:10:30.753 [DEBUG] [Thread-125365] [transport.py] [_log()] starting thread (client mode): 0xa277bbe0
2025-12-03T23:10:30.753 [DEBUG] [Thread-125365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:10:30.774 [DEBUG] [Thread-125365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:10:30.774 [INFO] [Thread-125365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] client lang: <none>
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] server lang: <none>
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] kex follows: False
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:10:30.777 [DEBUG] [Thread-125365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:10:30.778 [DEBUG] [Thread-125365] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:10:30.778 [DEBUG] [Thread-125365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:10:30.778 [DEBUG] [Thread-125365] [transport.py] [_log()] Compression: none
2025-12-03T23:10:30.778 [DEBUG] [Thread-125365] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:10:30.793 [DEBUG] [Thread-125365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:10:30.794 [DEBUG] [Thread-125365] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:10:30.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:10:30.794 [DEBUG] [Thread-125365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:10:30.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:10:30.794 [DEBUG] [Thread-125365] [transport.py] [_log()] userauth is OK
2025-12-03T23:10:30.794 [DEBUG] [Thread-125365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:10:30.794 [DEBUG] [Thread-125365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:10:30.795 [DEBUG] [Thread-125365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:10:30.795 [DEBUG] [Thread-125365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:10:30.813 [INFO] [Thread-125365] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:10:30.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:10:31.416 [DEBUG] [Thread-125365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:10:31.416 [DEBUG] [Thread-125365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:10:31.416 [DEBUG] [Thread-125365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:10:31.457 [DEBUG] [Thread-125365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:10:31.457 [DEBUG] [Thread-125365] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:10:31.459 [DEBUG] [Thread-125365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:10:31.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:10:31.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:10:31.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:10:31.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:10:31.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:10:31.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.881993 -999.00  +15.70  18.83     40   +2.30 1 1 1 1 1     0    0 13.33 -8.10 ZNESW 16.8 18.8 140.0 22.6 16.0 -25.5 15.8 -25.0 15.6 -23.2 15.9 -24.0
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:10:31.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.881993
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:10:31.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:10:22', tmtdew=15.42, humidity=34.89, cloud=0.0, wind=23.24, temperature=15.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:10:22', seeing=0.84, atlas_timestamp='2025-12-03T21:10:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:10:31.476 [DEBUG] [Thread-125365] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:10:31.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:10:31.569 [DEBUG] [Thread-125368] [transport.py] [_log()] starting thread (client mode): 0xa277b2b0
2025-12-03T23:10:31.569 [DEBUG] [Thread-125368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:10:31.584 [DEBUG] [Thread-125368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:10:31.584 [INFO] [Thread-125368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] client lang: <none>
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] server lang: <none>
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] kex follows: False
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] Compression: none
2025-12-03T23:10:31.592 [DEBUG] [Thread-125368] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:10:31.653 [DEBUG] [Thread-125368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:10:31.653 [DEBUG] [Thread-125368] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:10:31.653 [DEBUG] [Thread-125368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:10:31.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:10:31.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:10:31.709 [DEBUG] [Thread-125368] [transport.py] [_log()] userauth is OK
2025-12-03T23:10:31.709 [DEBUG] [Thread-125368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:10:31.710 [DEBUG] [Thread-125368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:10:31.710 [DEBUG] [Thread-125368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:10:31.710 [DEBUG] [Thread-125368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:10:31.728 [INFO] [Thread-125368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:10:31.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:10:31.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:10:32.580 [DEBUG] [Thread-125368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:10:32.580 [DEBUG] [Thread-125368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:10:32.628 [DEBUG] [Thread-125368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:10:32.628 [DEBUG] [Thread-125368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:10:32.636 [DEBUG] [Thread-125368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:10:32.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:10:32.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:10:32.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:10:32.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:10:32.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:10:32.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:10:32.667 [DEBUG] [Thread-125368] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:10:39.213 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:40.410 [DEBUG] [Thread-125370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:55.470 [DEBUG] [Thread-125371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:10:59.629 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:02.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:11:02.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:11:02.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:11:03.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 10, 54), 15.39, 34.95, 0.0, 22.83, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:11:03.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:10:54
2025-12-03T23:11:03.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:11:03.649 [DEBUG] [Thread-125372] [transport.py] [_log()] starting thread (client mode): 0xa27795d0
2025-12-03T23:11:03.649 [DEBUG] [Thread-125372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:11:03.669 [DEBUG] [Thread-125372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:11:03.669 [INFO] [Thread-125372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:11:03.672 [DEBUG] [Thread-125372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:11:03.673 [DEBUG] [Thread-125372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] client lang: <none>
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] server lang: <none>
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] kex follows: False
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] Compression: none
2025-12-03T23:11:03.674 [DEBUG] [Thread-125372] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:11:03.690 [DEBUG] [Thread-125372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:11:03.690 [DEBUG] [Thread-125372] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:11:03.690 [DEBUG] [Thread-125372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:11:03.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:11:03.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:11:03.691 [DEBUG] [Thread-125372] [transport.py] [_log()] userauth is OK
2025-12-03T23:11:03.691 [DEBUG] [Thread-125372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:11:03.691 [DEBUG] [Thread-125372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:11:03.691 [DEBUG] [Thread-125372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:11:03.691 [DEBUG] [Thread-125372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:11:03.702 [INFO] [Thread-125372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:11:03.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:11:04.326 [DEBUG] [Thread-125372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:11:04.326 [DEBUG] [Thread-125372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:11:04.327 [DEBUG] [Thread-125372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:11:04.367 [DEBUG] [Thread-125372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:11:04.367 [DEBUG] [Thread-125372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:11:04.370 [DEBUG] [Thread-125372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:11:04.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:11:04.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:11:04.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:11:04.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:11:04.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:11:04.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:11:04.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.882340 -999.00  +15.70  19.20     40   +2.30 1 1 1 1 1     0    0 12.99 -8.26 ZNESW 17.6 19.2 145.6 27.5 15.9 -25.4 15.9 -24.9 15.6 -23.2 15.9 -24.0
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:11:04.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.882340
2025-12-03T23:11:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:11:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:11:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:11:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:11:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:11:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:10:54', tmtdew=15.39, humidity=34.95, cloud=0.0, wind=22.83, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:10:54', seeing=0.81, atlas_timestamp='2025-12-03T21:10:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:11:04.395 [DEBUG] [Thread-125372] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:11:04.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:11:04.498 [DEBUG] [Thread-125375] [transport.py] [_log()] starting thread (client mode): 0xa2779e70
2025-12-03T23:11:04.498 [DEBUG] [Thread-125375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:11:04.515 [DEBUG] [Thread-125375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:11:04.515 [INFO] [Thread-125375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:11:04.526 [DEBUG] [Thread-125375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] client lang: <none>
2025-12-03T23:11:04.527 [DEBUG] [Thread-125375] [transport.py] [_log()] server lang: <none>
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] kex follows: False
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] Compression: none
2025-12-03T23:11:04.528 [DEBUG] [Thread-125375] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:11:04.581 [DEBUG] [Thread-125375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:11:04.582 [DEBUG] [Thread-125375] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:11:04.582 [DEBUG] [Thread-125375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:11:04.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:11:04.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:11:04.638 [DEBUG] [Thread-125375] [transport.py] [_log()] userauth is OK
2025-12-03T23:11:04.638 [DEBUG] [Thread-125375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:11:04.638 [DEBUG] [Thread-125375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:11:04.638 [DEBUG] [Thread-125375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:11:04.638 [DEBUG] [Thread-125375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:11:04.657 [INFO] [Thread-125375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:11:04.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:11:04.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:11:05.498 [DEBUG] [Thread-125375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:11:05.498 [DEBUG] [Thread-125375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:11:05.546 [DEBUG] [Thread-125375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:11:05.546 [DEBUG] [Thread-125375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:11:05.555 [DEBUG] [Thread-125375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:11:05.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:11:05.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:11:05.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:11:05.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:11:05.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:11:05.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:11:05.591 [DEBUG] [Thread-125375] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:11:10.503 [DEBUG] [Thread-125377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:12.203 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:12.204 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:18.381 [DEBUG] [Thread-125378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:20.134 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:25.553 [DEBUG] [Thread-125379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:35.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:11:35.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:11:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:11:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 11, 26), 15.36, 35.02, 0.0, 21.79, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:11:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:11:26
2025-12-03T23:11:36.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:11:36.573 [DEBUG] [Thread-125380] [transport.py] [_log()] starting thread (client mode): 0xa2778250
2025-12-03T23:11:36.573 [DEBUG] [Thread-125380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:11:36.592 [DEBUG] [Thread-125380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:11:36.593 [INFO] [Thread-125380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] client lang: <none>
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] server lang: <none>
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] kex follows: False
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:11:36.596 [DEBUG] [Thread-125380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:11:36.597 [DEBUG] [Thread-125380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:11:36.597 [DEBUG] [Thread-125380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:11:36.597 [DEBUG] [Thread-125380] [transport.py] [_log()] Compression: none
2025-12-03T23:11:36.597 [DEBUG] [Thread-125380] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:11:36.615 [DEBUG] [Thread-125380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:11:36.615 [DEBUG] [Thread-125380] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:11:36.616 [DEBUG] [Thread-125380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:11:36.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:11:36.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:11:36.617 [DEBUG] [Thread-125380] [transport.py] [_log()] userauth is OK
2025-12-03T23:11:36.618 [DEBUG] [Thread-125380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:11:36.618 [DEBUG] [Thread-125380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:11:36.618 [DEBUG] [Thread-125380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:11:36.618 [DEBUG] [Thread-125380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:11:36.635 [INFO] [Thread-125380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:11:36.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:11:37.284 [DEBUG] [Thread-125380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:11:37.284 [DEBUG] [Thread-125380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:11:37.284 [DEBUG] [Thread-125380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:11:37.325 [DEBUG] [Thread-125380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:11:37.325 [DEBUG] [Thread-125380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:11:37.328 [DEBUG] [Thread-125380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:11:37.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:11:37.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:11:37.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:11:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:11:37.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:11:37.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:11:37.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:11:37.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:11:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:11:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.882688 -999.00  +15.70  15.03     40   +2.30 1 1 1 1 1     0    0 13.23 -8.04 ZNESW 14.8 15.0 142.6 24.8 15.9 -25.4 15.8 -24.9 15.6 -23.3 15.9 -24.0
2025-12-03T23:11:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:11:37.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:11:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.882688
2025-12-03T23:11:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:11:37.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:11:37.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:11:37.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:11:37.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:11:37.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:11:26', tmtdew=15.36, humidity=35.02, cloud=0.0, wind=21.79, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:11:26', seeing=0.78, atlas_timestamp='2025-12-03T21:11:04.243', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06524999999999892, -0.08074999999999832, -0.0442499999999999, 0.015499999999999403, -0.006499999999999062, -0.022749999999998494, -0.07000000000000028, -0.08174999999999955, -0.002000000000000668, -0.03200000000000003, 0.025749999999998607, -0.01750000000000007, 0.03849999999999909, -0.0017500000000012506, -0.14949999999999974, -0.08950000000000102, -0.055749999999999744, 0.0045000000000001705, -0.012500000000001066, 0.00274999999999892, -0.014000000000001123, 0.01524999999999821, -0.08874999999999922, -0.3442500000000006, -0.05200000000000138, -0.039499999999998536, -0.06225000000000058, 0.017000000000001236, 0.09399999999999942, -0.003999999999997783, -0.1645000000000003, -0.10500000000000043, -0.012250000000001648], zp_timestamp='2025-12-03T21:07:00')
2025-12-03T23:11:37.356 [DEBUG] [Thread-125380] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:11:37.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:11:37.456 [DEBUG] [Thread-125383] [transport.py] [_log()] starting thread (client mode): 0xa2778a90
2025-12-03T23:11:37.457 [DEBUG] [Thread-125383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:11:37.471 [DEBUG] [Thread-125383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:11:37.471 [INFO] [Thread-125383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:11:37.479 [DEBUG] [Thread-125383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] client lang: <none>
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] server lang: <none>
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] kex follows: False
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] Compression: none
2025-12-03T23:11:37.480 [DEBUG] [Thread-125383] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:11:37.537 [DEBUG] [Thread-125383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:11:37.538 [DEBUG] [Thread-125383] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:11:37.538 [DEBUG] [Thread-125383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:11:37.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:11:37.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:11:37.594 [DEBUG] [Thread-125383] [transport.py] [_log()] userauth is OK
2025-12-03T23:11:37.594 [DEBUG] [Thread-125383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:11:37.594 [DEBUG] [Thread-125383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:11:37.594 [DEBUG] [Thread-125383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:11:37.594 [DEBUG] [Thread-125383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:11:37.613 [INFO] [Thread-125383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:11:37.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:11:37.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:11:38.443 [DEBUG] [Thread-125383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:11:38.444 [DEBUG] [Thread-125383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:11:38.491 [DEBUG] [Thread-125383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:11:38.492 [DEBUG] [Thread-125383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:11:38.500 [DEBUG] [Thread-125383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:11:38.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:11:38.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:11:38.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:11:38.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:11:38.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:11:38.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:11:38.534 [DEBUG] [Thread-125383] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:11:40.548 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:40.597 [DEBUG] [Thread-125385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:11:55.661 [DEBUG] [Thread-125386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:00.967 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:08.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:12:08.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:12:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:12:09.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 11, 58), 15.35, 35.05, 0.0, 21.26, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:12:09.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:11:58
2025-12-03T23:12:09.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:12:09.499 [DEBUG] [Thread-125387] [transport.py] [_log()] starting thread (client mode): 0xa277a9e0
2025-12-03T23:12:09.499 [DEBUG] [Thread-125387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:12:09.520 [DEBUG] [Thread-125387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:12:09.521 [INFO] [Thread-125387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:12:09.524 [DEBUG] [Thread-125387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:12:09.524 [DEBUG] [Thread-125387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:12:09.524 [DEBUG] [Thread-125387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:12:09.524 [DEBUG] [Thread-125387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:09.524 [DEBUG] [Thread-125387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] client lang: <none>
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] server lang: <none>
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] kex follows: False
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] Compression: none
2025-12-03T23:12:09.525 [DEBUG] [Thread-125387] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:12:09.542 [DEBUG] [Thread-125387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:12:09.543 [DEBUG] [Thread-125387] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:12:09.543 [DEBUG] [Thread-125387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:12:09.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:12:09.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:12:09.545 [DEBUG] [Thread-125387] [transport.py] [_log()] userauth is OK
2025-12-03T23:12:09.545 [DEBUG] [Thread-125387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:12:09.545 [DEBUG] [Thread-125387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:12:09.545 [DEBUG] [Thread-125387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:12:09.545 [DEBUG] [Thread-125387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:12:09.569 [INFO] [Thread-125387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:12:09.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:12:10.150 [DEBUG] [Thread-125387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:12:10.150 [DEBUG] [Thread-125387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:12:10.151 [DEBUG] [Thread-125387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:12:10.191 [DEBUG] [Thread-125387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:12:10.191 [DEBUG] [Thread-125387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:12:10.194 [DEBUG] [Thread-125387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:12:10.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:12:10.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:12:10.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:12:10.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:12:10.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:12:10.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:12:10.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.883035 -999.00  +15.70  14.38     40   +2.30 1 1 1 1 1     0    0 13.20 -7.18 ZNESW 17.1 14.4 137.6 21.4 15.9 -25.5 15.9 -24.9 15.7 -23.3 15.9 -24.0
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:12:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.883035
2025-12-03T23:12:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:12:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:12:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:12:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:12:10.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:12:10.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:11:58', tmtdew=15.35, humidity=35.05, cloud=0.0, wind=21.26, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:11:58', seeing=0.96, atlas_timestamp='2025-12-03T21:11:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:10:00')
2025-12-03T23:12:10.217 [DEBUG] [Thread-125387] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:12:10.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:12:10.319 [DEBUG] [Thread-125390] [transport.py] [_log()] starting thread (client mode): 0x9fd22530
2025-12-03T23:12:10.319 [DEBUG] [Thread-125390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:12:10.333 [DEBUG] [Thread-125390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:12:10.333 [INFO] [Thread-125390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:12:10.341 [DEBUG] [Thread-125390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:12:10.341 [DEBUG] [Thread-125390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] client lang: <none>
2025-12-03T23:12:10.342 [DEBUG] [Thread-125390] [transport.py] [_log()] server lang: <none>
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] kex follows: False
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] Compression: none
2025-12-03T23:12:10.343 [DEBUG] [Thread-125390] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:12:10.398 [DEBUG] [Thread-125390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:12:10.398 [DEBUG] [Thread-125390] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:12:10.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:12:10.399 [DEBUG] [Thread-125390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:12:10.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:12:10.454 [DEBUG] [Thread-125390] [transport.py] [_log()] userauth is OK
2025-12-03T23:12:10.454 [DEBUG] [Thread-125390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:12:10.454 [DEBUG] [Thread-125390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:12:10.455 [DEBUG] [Thread-125390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:12:10.455 [DEBUG] [Thread-125390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:12:10.477 [INFO] [Thread-125390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:12:10.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:12:10.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:12:10.701 [DEBUG] [Thread-125392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:11.322 [DEBUG] [Thread-125390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:12:11.322 [DEBUG] [Thread-125390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:12:11.370 [DEBUG] [Thread-125390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:12:11.370 [DEBUG] [Thread-125390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:12:11.378 [DEBUG] [Thread-125390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:12:11.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:12:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:12:11.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:12:11.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:12:11.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:12:11.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:12:11.414 [DEBUG] [Thread-125390] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:12:12.405 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:12.406 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:18.444 [DEBUG] [Thread-125393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:21.437 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:25.761 [DEBUG] [Thread-125394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:40.798 [DEBUG] [Thread-125395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:41.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:12:41.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:12:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:12:41.844 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:12:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 12, 30), 15.38, 35.0, 0.0, 23.36, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:12:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:12:30
2025-12-03T23:12:42.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:12:42.391 [DEBUG] [Thread-125396] [transport.py] [_log()] starting thread (client mode): 0xa514c0a0
2025-12-03T23:12:42.391 [DEBUG] [Thread-125396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:12:42.411 [DEBUG] [Thread-125396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:12:42.411 [INFO] [Thread-125396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:12:42.414 [DEBUG] [Thread-125396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:12:42.414 [DEBUG] [Thread-125396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:12:42.414 [DEBUG] [Thread-125396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:12:42.414 [DEBUG] [Thread-125396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] client lang: <none>
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] server lang: <none>
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] kex follows: False
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] Compression: none
2025-12-03T23:12:42.415 [DEBUG] [Thread-125396] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:12:42.433 [DEBUG] [Thread-125396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:12:42.433 [DEBUG] [Thread-125396] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:12:42.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:12:42.434 [DEBUG] [Thread-125396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:12:42.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:12:42.436 [DEBUG] [Thread-125396] [transport.py] [_log()] userauth is OK
2025-12-03T23:12:42.436 [DEBUG] [Thread-125396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:12:42.436 [DEBUG] [Thread-125396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:12:42.436 [DEBUG] [Thread-125396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:12:42.436 [DEBUG] [Thread-125396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:12:42.459 [INFO] [Thread-125396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:12:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:12:43.054 [DEBUG] [Thread-125396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:12:43.055 [DEBUG] [Thread-125396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:12:43.055 [DEBUG] [Thread-125396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:12:43.096 [DEBUG] [Thread-125396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:12:43.096 [DEBUG] [Thread-125396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:12:43.099 [DEBUG] [Thread-125396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:12:43.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:12:43.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:12:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:12:43.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:12:43.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:12:43.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:12:43.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:12:43.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:12:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:12:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.883729 -999.00  +15.80  18.40     40   +2.30 1 1 1 1 1     0    0 13.29 -6.75 ZNESW 17.1 18.4 139.2 26.1 15.9 -25.4 15.9 -25.0 15.6 -23.2 15.9 -24.0
2025-12-03T23:12:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:12:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:12:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.883729
2025-12-03T23:12:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:12:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:12:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:12:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:12:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:12:43.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:12:30', tmtdew=15.38, humidity=35.0, cloud=0.0, wind=23.36, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:12:30', seeing=0.96, atlas_timestamp='2025-12-03T21:12:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:10:00')
2025-12-03T23:12:43.122 [DEBUG] [Thread-125396] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:12:43.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:12:43.224 [DEBUG] [Thread-125399] [transport.py] [_log()] starting thread (client mode): 0xa514dcf0
2025-12-03T23:12:43.224 [DEBUG] [Thread-125399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:12:43.239 [DEBUG] [Thread-125399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:12:43.239 [INFO] [Thread-125399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:12:43.246 [DEBUG] [Thread-125399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:12:43.246 [DEBUG] [Thread-125399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:12:43.246 [DEBUG] [Thread-125399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:12:43.246 [DEBUG] [Thread-125399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] client lang: <none>
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] server lang: <none>
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] kex follows: False
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] Compression: none
2025-12-03T23:12:43.247 [DEBUG] [Thread-125399] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:12:43.309 [DEBUG] [Thread-125399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:12:43.309 [DEBUG] [Thread-125399] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:12:43.310 [DEBUG] [Thread-125399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:12:43.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:12:43.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:12:43.368 [DEBUG] [Thread-125399] [transport.py] [_log()] userauth is OK
2025-12-03T23:12:43.368 [DEBUG] [Thread-125399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:12:43.368 [DEBUG] [Thread-125399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:12:43.368 [DEBUG] [Thread-125399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:12:43.368 [DEBUG] [Thread-125399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:12:43.388 [INFO] [Thread-125399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:12:43.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:12:43.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:12:44.239 [DEBUG] [Thread-125399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:12:44.239 [DEBUG] [Thread-125399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:12:44.287 [DEBUG] [Thread-125399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:12:44.287 [DEBUG] [Thread-125399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:12:44.295 [DEBUG] [Thread-125399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:12:44.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:12:44.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:12:44.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:12:44.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:12:44.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:12:44.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:12:44.330 [DEBUG] [Thread-125399] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:12:55.834 [DEBUG] [Thread-125401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:02.311 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:10.887 [DEBUG] [Thread-125402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:12.610 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:12.611 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:14.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:13:14.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:13:14.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:13:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 13, 2), 15.38, 34.98, 0.0, 22.13, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:13:14.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:13:02
2025-12-03T23:13:15.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:13:15.272 [DEBUG] [Thread-125403] [transport.py] [_log()] starting thread (client mode): 0x9fd22980
2025-12-03T23:13:15.272 [DEBUG] [Thread-125403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:13:15.293 [DEBUG] [Thread-125403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:13:15.293 [INFO] [Thread-125403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] client lang: <none>
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] server lang: <none>
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] kex follows: False
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] Compression: none
2025-12-03T23:13:15.295 [DEBUG] [Thread-125403] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:13:15.306 [DEBUG] [Thread-125403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:13:15.307 [DEBUG] [Thread-125403] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:13:15.307 [DEBUG] [Thread-125403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:13:15.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:13:15.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:13:15.309 [DEBUG] [Thread-125403] [transport.py] [_log()] userauth is OK
2025-12-03T23:13:15.309 [DEBUG] [Thread-125403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:13:15.309 [DEBUG] [Thread-125403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:13:15.310 [DEBUG] [Thread-125403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:13:15.310 [DEBUG] [Thread-125403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:13:15.327 [INFO] [Thread-125403] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:13:15.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:13:15.872 [DEBUG] [Thread-125403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:13:15.872 [DEBUG] [Thread-125403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:13:15.873 [DEBUG] [Thread-125403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:13:15.914 [DEBUG] [Thread-125403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:13:15.914 [DEBUG] [Thread-125403] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:13:15.917 [DEBUG] [Thread-125403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:13:15.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:13:15.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:13:15.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:13:15.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:13:15.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:13:15.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:13:15.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:13:15.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.883729 -999.00  +15.80  18.40     40   +2.30 1 1 1 1 1     0    0 13.29 -6.75 ZNESW 17.1 18.4 139.2 26.1 15.9 -25.4 15.9 -25.0 15.6 -23.2 15.9 -24.0
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.883729
2025-12-03T23:13:15.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:13:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:13:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:13:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:13:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:13:15.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:13:02', tmtdew=15.38, humidity=34.98, cloud=0.0, wind=22.13, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:13:03', seeing=0.93, atlas_timestamp='2025-12-03T21:12:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:10:00')
2025-12-03T23:13:15.940 [DEBUG] [Thread-125403] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:13:16.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:13:16.048 [DEBUG] [Thread-125406] [transport.py] [_log()] starting thread (client mode): 0x9fd21db0
2025-12-03T23:13:16.048 [DEBUG] [Thread-125406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:13:16.062 [DEBUG] [Thread-125406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:13:16.062 [INFO] [Thread-125406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:13:16.069 [DEBUG] [Thread-125406] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:13:16.069 [DEBUG] [Thread-125406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:13:16.069 [DEBUG] [Thread-125406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:13:16.069 [DEBUG] [Thread-125406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] client lang: <none>
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] server lang: <none>
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] kex follows: False
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] Compression: none
2025-12-03T23:13:16.070 [DEBUG] [Thread-125406] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:13:16.133 [DEBUG] [Thread-125406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:13:16.133 [DEBUG] [Thread-125406] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:13:16.134 [DEBUG] [Thread-125406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:13:16.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:13:16.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:13:16.190 [DEBUG] [Thread-125406] [transport.py] [_log()] userauth is OK
2025-12-03T23:13:16.190 [DEBUG] [Thread-125406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:13:16.190 [DEBUG] [Thread-125406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:13:16.190 [DEBUG] [Thread-125406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:13:16.190 [DEBUG] [Thread-125406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:13:16.208 [INFO] [Thread-125406] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:13:16.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:13:16.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:13:17.056 [DEBUG] [Thread-125406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:13:17.056 [DEBUG] [Thread-125406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:13:17.103 [DEBUG] [Thread-125406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:13:17.103 [DEBUG] [Thread-125406] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:13:17.112 [DEBUG] [Thread-125406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:13:17.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:13:17.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:13:17.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:13:17.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:13:17.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:13:17.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:13:17.147 [DEBUG] [Thread-125406] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:13:18.511 [DEBUG] [Thread-125408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:22.719 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:25.921 [DEBUG] [Thread-125409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:40.991 [DEBUG] [Thread-125410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:43.141 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:13:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:13:47.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:13:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:13:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 13, 34), 15.32, 34.98, 0.0, 23.96, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:13:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:13:34
2025-12-03T23:13:47.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:13:48.143 [DEBUG] [Thread-125411] [transport.py] [_log()] starting thread (client mode): 0x9fd21870
2025-12-03T23:13:48.143 [DEBUG] [Thread-125411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:13:48.163 [DEBUG] [Thread-125411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:13:48.163 [INFO] [Thread-125411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] client lang: <none>
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] server lang: <none>
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] kex follows: False
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:13:48.166 [DEBUG] [Thread-125411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:13:48.167 [DEBUG] [Thread-125411] [transport.py] [_log()] Compression: none
2025-12-03T23:13:48.167 [DEBUG] [Thread-125411] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:13:48.181 [DEBUG] [Thread-125411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:13:48.181 [DEBUG] [Thread-125411] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:13:48.181 [DEBUG] [Thread-125411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:13:48.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:13:48.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:13:48.224 [DEBUG] [Thread-125411] [transport.py] [_log()] userauth is OK
2025-12-03T23:13:48.224 [DEBUG] [Thread-125411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:13:48.224 [DEBUG] [Thread-125411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:13:48.224 [DEBUG] [Thread-125411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:13:48.224 [DEBUG] [Thread-125411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:13:48.240 [INFO] [Thread-125411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:13:48.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:13:48.872 [DEBUG] [Thread-125411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:13:48.872 [DEBUG] [Thread-125411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:13:48.873 [DEBUG] [Thread-125411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:13:48.914 [DEBUG] [Thread-125411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:13:48.914 [DEBUG] [Thread-125411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:13:48.916 [DEBUG] [Thread-125411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:13:48.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:13:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:13:48.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:13:48.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:13:48.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:13:48.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:13:48.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.884076 -999.00  +15.80  17.78     40   +2.30 1 1 1 1 1     0    0 13.12 -5.74 ZNESW 14.6 17.8 145.8 21.2 16.0 -25.3 15.9 -25.0 15.6 -23.4 15.8 -23.9
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:13:48.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.884076
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:13:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:13:34', tmtdew=15.32, humidity=34.98, cloud=0.0, wind=23.96, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:13:35', seeing=0.93, atlas_timestamp='2025-12-03T21:13:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:10:00')
2025-12-03T23:13:48.937 [DEBUG] [Thread-125411] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:13:49.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:13:49.029 [DEBUG] [Thread-125414] [transport.py] [_log()] starting thread (client mode): 0x9fd23910
2025-12-03T23:13:49.029 [DEBUG] [Thread-125414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:13:49.045 [DEBUG] [Thread-125414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:13:49.045 [INFO] [Thread-125414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] client lang: <none>
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] server lang: <none>
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] kex follows: False
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] Compression: none
2025-12-03T23:13:49.053 [DEBUG] [Thread-125414] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:13:49.109 [DEBUG] [Thread-125414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:13:49.109 [DEBUG] [Thread-125414] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:13:49.109 [DEBUG] [Thread-125414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:13:49.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:13:49.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:13:49.166 [DEBUG] [Thread-125414] [transport.py] [_log()] userauth is OK
2025-12-03T23:13:49.166 [DEBUG] [Thread-125414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:13:49.166 [DEBUG] [Thread-125414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:13:49.166 [DEBUG] [Thread-125414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:13:49.166 [DEBUG] [Thread-125414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:13:49.180 [INFO] [Thread-125414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:13:49.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:13:49.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:13:50.052 [DEBUG] [Thread-125414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:13:50.052 [DEBUG] [Thread-125414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:13:50.100 [DEBUG] [Thread-125414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:13:50.100 [DEBUG] [Thread-125414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:13:50.108 [DEBUG] [Thread-125414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:13:50.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:13:50.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:13:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:13:50.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:13:50.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:13:50.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:13:50.143 [DEBUG] [Thread-125414] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:13:56.023 [DEBUG] [Thread-125416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:03.558 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:11.080 [DEBUG] [Thread-125417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:12.811 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:12.812 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:18.706 [DEBUG] [Thread-125418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:14:20.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:14:20.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:14:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 14, 7), 15.34, 34.93, 0.0, 23.36, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:14:20.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:14:07
2025-12-03T23:14:20.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:14:21.112 [DEBUG] [Thread-125419] [transport.py] [_log()] starting thread (client mode): 0xa514ed40
2025-12-03T23:14:21.112 [DEBUG] [Thread-125419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:14:21.129 [DEBUG] [Thread-125419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:14:21.130 [INFO] [Thread-125419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] client lang: <none>
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] server lang: <none>
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] kex follows: False
2025-12-03T23:14:21.132 [DEBUG] [Thread-125419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] Compression: none
2025-12-03T23:14:21.133 [DEBUG] [Thread-125419] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:14:21.150 [DEBUG] [Thread-125419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:14:21.150 [DEBUG] [Thread-125419] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:14:21.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:14:21.151 [DEBUG] [Thread-125419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:14:21.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:14:21.153 [DEBUG] [Thread-125419] [transport.py] [_log()] userauth is OK
2025-12-03T23:14:21.153 [DEBUG] [Thread-125419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:14:21.154 [DEBUG] [Thread-125419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:14:21.154 [DEBUG] [Thread-125419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:14:21.154 [DEBUG] [Thread-125419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:14:21.172 [INFO] [Thread-125419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:14:21.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:14:21.829 [DEBUG] [Thread-125419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:14:21.829 [DEBUG] [Thread-125419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:14:21.829 [DEBUG] [Thread-125419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:14:21.870 [DEBUG] [Thread-125419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:14:21.871 [DEBUG] [Thread-125419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:14:21.873 [DEBUG] [Thread-125419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:14:21.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:14:21.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:14:21.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:14:21.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:14:21.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:14:21.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:14:21.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.884424 -999.00  +15.80  19.50     40   +2.30 1 1 1 1 1     0    0 13.36 -4.61 ZNESW 20.0 19.5 145.1 28.0 16.0 -25.4 15.9 -24.9 15.6 -23.3 15.9 -23.9
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.884424
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:14:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:14:07', tmtdew=15.34, humidity=34.93, cloud=0.0, wind=23.36, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:14:07', seeing=0.96, atlas_timestamp='2025-12-03T21:13:34.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:10:00')
2025-12-03T23:14:21.891 [DEBUG] [Thread-125419] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:14:21.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:14:21.990 [DEBUG] [Thread-125422] [transport.py] [_log()] starting thread (client mode): 0x9fd23160
2025-12-03T23:14:21.990 [DEBUG] [Thread-125422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:14:22.004 [DEBUG] [Thread-125422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:14:22.004 [INFO] [Thread-125422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] client lang: <none>
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] server lang: <none>
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] kex follows: False
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] Compression: none
2025-12-03T23:14:22.012 [DEBUG] [Thread-125422] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:14:22.068 [DEBUG] [Thread-125422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:14:22.069 [DEBUG] [Thread-125422] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:14:22.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:14:22.069 [DEBUG] [Thread-125422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:14:22.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:14:22.126 [DEBUG] [Thread-125422] [transport.py] [_log()] userauth is OK
2025-12-03T23:14:22.126 [DEBUG] [Thread-125422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:14:22.126 [DEBUG] [Thread-125422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:14:22.126 [DEBUG] [Thread-125422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:14:22.126 [DEBUG] [Thread-125422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:14:22.143 [INFO] [Thread-125422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:14:22.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:14:22.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:14:22.983 [DEBUG] [Thread-125422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:14:22.983 [DEBUG] [Thread-125422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:14:23.030 [DEBUG] [Thread-125422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:14:23.031 [DEBUG] [Thread-125422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:14:23.039 [DEBUG] [Thread-125422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:14:23.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:14:23.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:14:23.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:14:23.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:14:23.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:14:23.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:14:23.071 [DEBUG] [Thread-125422] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:14:23.981 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:26.113 [DEBUG] [Thread-125424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:41.174 [DEBUG] [Thread-125425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:44.396 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:14:53.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:14:53.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:14:53.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:14:53.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 14, 39), 15.42, 34.88, 0.0, 23.54, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:14:53.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:14:39
2025-12-03T23:14:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:14:54.044 [DEBUG] [Thread-125426] [transport.py] [_log()] starting thread (client mode): 0xa2778550
2025-12-03T23:14:54.044 [DEBUG] [Thread-125426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:14:54.063 [DEBUG] [Thread-125426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:14:54.064 [INFO] [Thread-125426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:14:54.067 [DEBUG] [Thread-125426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:14:54.067 [DEBUG] [Thread-125426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:14:54.067 [DEBUG] [Thread-125426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:14:54.067 [DEBUG] [Thread-125426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:54.067 [DEBUG] [Thread-125426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] client lang: <none>
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] server lang: <none>
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] kex follows: False
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:14:54.068 [DEBUG] [Thread-125426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:14:54.069 [DEBUG] [Thread-125426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:14:54.069 [DEBUG] [Thread-125426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:14:54.069 [DEBUG] [Thread-125426] [transport.py] [_log()] Compression: none
2025-12-03T23:14:54.069 [DEBUG] [Thread-125426] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:14:54.087 [DEBUG] [Thread-125426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:14:54.088 [DEBUG] [Thread-125426] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:14:54.089 [DEBUG] [Thread-125426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:14:54.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:14:54.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:14:54.091 [DEBUG] [Thread-125426] [transport.py] [_log()] userauth is OK
2025-12-03T23:14:54.091 [DEBUG] [Thread-125426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:14:54.091 [DEBUG] [Thread-125426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:14:54.092 [DEBUG] [Thread-125426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:14:54.092 [DEBUG] [Thread-125426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:14:54.127 [INFO] [Thread-125426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:14:54.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:14:54.792 [DEBUG] [Thread-125426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:14:54.792 [DEBUG] [Thread-125426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:14:54.793 [DEBUG] [Thread-125426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:14:54.834 [DEBUG] [Thread-125426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:14:54.834 [DEBUG] [Thread-125426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:14:54.837 [DEBUG] [Thread-125426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:14:54.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:14:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:14:54.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:14:54.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:14:54.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:14:54.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:14:54.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:14:54.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.884771 -999.00  +15.80  18.01     40   +2.20 1 1 1 1 1     0    0 13.18 -3.52 ZNESW 22.7 18.0 134.8 23.6 16.0 -25.5 15.9 -24.9 15.6 -23.2 15.9 -24.1
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.884771
2025-12-03T23:14:54.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:14:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:14:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:14:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:14:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:14:54.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:14:39', tmtdew=15.42, humidity=34.88, cloud=0.0, wind=23.54, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:14:39', seeing=0.96, atlas_timestamp='2025-12-03T21:14:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:14:54.862 [DEBUG] [Thread-125426] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:14:54.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:14:54.961 [DEBUG] [Thread-125429] [transport.py] [_log()] starting thread (client mode): 0xa514e230
2025-12-03T23:14:54.961 [DEBUG] [Thread-125429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:14:54.976 [DEBUG] [Thread-125429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:14:54.976 [INFO] [Thread-125429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:14:54.983 [DEBUG] [Thread-125429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:14:54.983 [DEBUG] [Thread-125429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:14:54.983 [DEBUG] [Thread-125429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:14:54.983 [DEBUG] [Thread-125429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] client lang: <none>
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] server lang: <none>
2025-12-03T23:14:54.984 [DEBUG] [Thread-125429] [transport.py] [_log()] kex follows: False
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] Compression: none
2025-12-03T23:14:54.985 [DEBUG] [Thread-125429] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:14:55.040 [DEBUG] [Thread-125429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:14:55.040 [DEBUG] [Thread-125429] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:14:55.041 [DEBUG] [Thread-125429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:14:55.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:14:55.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:14:55.098 [DEBUG] [Thread-125429] [transport.py] [_log()] userauth is OK
2025-12-03T23:14:55.098 [DEBUG] [Thread-125429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:14:55.098 [DEBUG] [Thread-125429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:14:55.098 [DEBUG] [Thread-125429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:14:55.098 [DEBUG] [Thread-125429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:14:55.112 [INFO] [Thread-125429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:14:55.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:14:55.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:14:55.935 [DEBUG] [Thread-125429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:14:55.935 [DEBUG] [Thread-125429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:14:55.986 [DEBUG] [Thread-125429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:14:55.986 [DEBUG] [Thread-125429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:14:56.004 [DEBUG] [Thread-125429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:14:56.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:14:56.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:14:56.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:14:56.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:14:56.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:14:56.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:14:56.040 [DEBUG] [Thread-125429] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:14:56.214 [DEBUG] [Thread-125431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:04.818 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:11.270 [DEBUG] [Thread-125432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:13.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:13.027 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:18.773 [DEBUG] [Thread-125433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:25.236 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:15:26.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:15:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:15:26.302 [DEBUG] [Thread-125434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 15, 11), 15.43, 34.87, 0.0, 22.97, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:15:26.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:15:11
2025-12-03T23:15:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:15:27.010 [DEBUG] [Thread-125435] [transport.py] [_log()] starting thread (client mode): 0xa51b9270
2025-12-03T23:15:27.010 [DEBUG] [Thread-125435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:15:27.029 [DEBUG] [Thread-125435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:15:27.029 [INFO] [Thread-125435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:15:27.032 [DEBUG] [Thread-125435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] client lang: <none>
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] server lang: <none>
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] kex follows: False
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] Compression: none
2025-12-03T23:15:27.033 [DEBUG] [Thread-125435] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:15:27.051 [DEBUG] [Thread-125435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:15:27.051 [DEBUG] [Thread-125435] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:15:27.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:15:27.052 [DEBUG] [Thread-125435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:15:27.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:15:27.054 [DEBUG] [Thread-125435] [transport.py] [_log()] userauth is OK
2025-12-03T23:15:27.054 [DEBUG] [Thread-125435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:15:27.054 [DEBUG] [Thread-125435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:15:27.054 [DEBUG] [Thread-125435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:15:27.054 [DEBUG] [Thread-125435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:15:27.075 [INFO] [Thread-125435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:15:27.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:15:27.833 [DEBUG] [Thread-125435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:15:27.833 [DEBUG] [Thread-125435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:15:27.833 [DEBUG] [Thread-125435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:15:27.874 [DEBUG] [Thread-125435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:15:27.874 [DEBUG] [Thread-125435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:15:27.877 [DEBUG] [Thread-125435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:15:27.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:15:27.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:15:27.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:15:27.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:15:27.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:15:27.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:15:27.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:15:27.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:15:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:15:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.885118 -999.00  +15.80  21.00     40   +2.30 1 1 1 1 1     0    0 13.24 -3.02 ZNESW 25.4 21.0 141.2 25.9 15.9 -25.6 15.9 -24.9 15.6 -23.3 15.8 -24.1
2025-12-03T23:15:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:15:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:15:27.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.885118
2025-12-03T23:15:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:15:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:15:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:15:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:15:27.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:15:27.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:15:11', tmtdew=15.43, humidity=34.87, cloud=0.0, wind=22.97, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:15:11', seeing=0.89, atlas_timestamp='2025-12-03T21:14:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:15:27.907 [DEBUG] [Thread-125435] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:15:27.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:15:28.009 [DEBUG] [Thread-125438] [transport.py] [_log()] starting thread (client mode): 0xa51b8ee0
2025-12-03T23:15:28.009 [DEBUG] [Thread-125438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:15:28.025 [DEBUG] [Thread-125438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:15:28.025 [INFO] [Thread-125438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:15:28.033 [DEBUG] [Thread-125438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] client lang: <none>
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] server lang: <none>
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] kex follows: False
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:15:28.034 [DEBUG] [Thread-125438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:15:28.035 [DEBUG] [Thread-125438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:15:28.035 [DEBUG] [Thread-125438] [transport.py] [_log()] Compression: none
2025-12-03T23:15:28.035 [DEBUG] [Thread-125438] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:15:28.091 [DEBUG] [Thread-125438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:15:28.091 [DEBUG] [Thread-125438] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:15:28.092 [DEBUG] [Thread-125438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:15:28.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:15:28.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:15:28.150 [DEBUG] [Thread-125438] [transport.py] [_log()] userauth is OK
2025-12-03T23:15:28.151 [DEBUG] [Thread-125438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:15:28.151 [DEBUG] [Thread-125438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:15:28.151 [DEBUG] [Thread-125438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:15:28.151 [DEBUG] [Thread-125438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:15:28.172 [INFO] [Thread-125438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:15:28.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:15:28.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:15:29.045 [DEBUG] [Thread-125438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:15:29.045 [DEBUG] [Thread-125438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:15:29.093 [DEBUG] [Thread-125438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:15:29.093 [DEBUG] [Thread-125438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:15:29.104 [DEBUG] [Thread-125438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:15:29.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:15:29.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:15:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:15:29.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:15:29.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:15:29.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:15:29.138 [DEBUG] [Thread-125438] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:15:41.333 [DEBUG] [Thread-125440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:45.658 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:56.382 [DEBUG] [Thread-125441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:15:59.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:15:59.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:15:59.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:15:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 15, 43), 15.55, 34.93, 0.0, 26.03, 15.93, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:15:59.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:15:43
2025-12-03T23:15:59.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:16:00.117 [DEBUG] [Thread-125442] [transport.py] [_log()] starting thread (client mode): 0xa277bdf0
2025-12-03T23:16:00.117 [DEBUG] [Thread-125442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:16:00.139 [DEBUG] [Thread-125442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:16:00.140 [INFO] [Thread-125442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:16:00.143 [DEBUG] [Thread-125442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:16:00.143 [DEBUG] [Thread-125442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] client lang: <none>
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] server lang: <none>
2025-12-03T23:16:00.144 [DEBUG] [Thread-125442] [transport.py] [_log()] kex follows: False
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] Compression: none
2025-12-03T23:16:00.145 [DEBUG] [Thread-125442] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:16:00.163 [DEBUG] [Thread-125442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:16:00.164 [DEBUG] [Thread-125442] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:16:00.164 [DEBUG] [Thread-125442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:16:00.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:16:00.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:16:00.166 [DEBUG] [Thread-125442] [transport.py] [_log()] userauth is OK
2025-12-03T23:16:00.167 [DEBUG] [Thread-125442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:16:00.167 [DEBUG] [Thread-125442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:16:00.167 [DEBUG] [Thread-125442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:16:00.167 [DEBUG] [Thread-125442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:16:00.190 [INFO] [Thread-125442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:16:00.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:16:00.833 [DEBUG] [Thread-125442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:16:00.833 [DEBUG] [Thread-125442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:16:00.834 [DEBUG] [Thread-125442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:16:00.874 [DEBUG] [Thread-125442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:16:00.874 [DEBUG] [Thread-125442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:16:00.877 [DEBUG] [Thread-125442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:16:00.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:16:00.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:16:00.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:16:00.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:16:00.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:16:00.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:16:00.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:16:00.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:16:00.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:16:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.885465 -999.00  +15.90  17.27     40   +2.30 1 1 1 1 1     0    0 13.34 -1.93 ZNESW 22.3 17.3 137.0 27.6 16.0 -25.5 15.9 -24.9 15.6 -23.1 15.9 -24.1
2025-12-03T23:16:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:16:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:16:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.885465
2025-12-03T23:16:00.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:16:00.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:16:00.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:16:00.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:16:00.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:16:00.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:15:43', tmtdew=15.55, humidity=34.93, cloud=0.0, wind=26.03, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:15:43', seeing=1.03, atlas_timestamp='2025-12-03T21:15:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:16:00.903 [DEBUG] [Thread-125442] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:16:00.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:16:01.009 [DEBUG] [Thread-125445] [transport.py] [_log()] starting thread (client mode): 0xa2778e50
2025-12-03T23:16:01.009 [DEBUG] [Thread-125445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:16:01.024 [DEBUG] [Thread-125445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:16:01.024 [INFO] [Thread-125445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] client lang: <none>
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] server lang: <none>
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] kex follows: False
2025-12-03T23:16:01.032 [DEBUG] [Thread-125445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] Compression: none
2025-12-03T23:16:01.033 [DEBUG] [Thread-125445] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:16:01.091 [DEBUG] [Thread-125445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:16:01.091 [DEBUG] [Thread-125445] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:16:01.092 [DEBUG] [Thread-125445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:16:01.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:16:01.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:16:01.146 [DEBUG] [Thread-125445] [transport.py] [_log()] userauth is OK
2025-12-03T23:16:01.147 [DEBUG] [Thread-125445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:16:01.147 [DEBUG] [Thread-125445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:16:01.147 [DEBUG] [Thread-125445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:16:01.147 [DEBUG] [Thread-125445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:16:01.166 [INFO] [Thread-125445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:16:01.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:16:01.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:16:02.052 [DEBUG] [Thread-125445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:16:02.052 [DEBUG] [Thread-125445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:16:02.100 [DEBUG] [Thread-125445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:16:02.100 [DEBUG] [Thread-125445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:16:02.109 [DEBUG] [Thread-125445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:16:02.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:16:02.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:16:02.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:16:02.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:16:02.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:16:02.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:16:02.143 [DEBUG] [Thread-125445] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:16:06.074 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:11.416 [DEBUG] [Thread-125447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:13.226 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:13.227 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:19.341 [DEBUG] [Thread-125448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:26.479 [DEBUG] [Thread-125449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:26.492 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:16:32.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:16:32.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:16:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 16, 15), 15.57, 34.88, 0.0, 25.6, 15.9, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:16:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:16:15
2025-12-03T23:16:32.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:16:33.098 [DEBUG] [Thread-125450] [transport.py] [_log()] starting thread (client mode): 0xa514f9a0
2025-12-03T23:16:33.098 [DEBUG] [Thread-125450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:16:33.118 [DEBUG] [Thread-125450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:16:33.118 [INFO] [Thread-125450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:16:33.121 [DEBUG] [Thread-125450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:33.122 [DEBUG] [Thread-125450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] client lang: <none>
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] server lang: <none>
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] kex follows: False
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:16:33.123 [DEBUG] [Thread-125450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:16:33.124 [DEBUG] [Thread-125450] [transport.py] [_log()] Compression: none
2025-12-03T23:16:33.124 [DEBUG] [Thread-125450] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:16:33.141 [DEBUG] [Thread-125450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:16:33.142 [DEBUG] [Thread-125450] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:16:33.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:16:33.143 [DEBUG] [Thread-125450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:16:33.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:16:33.144 [DEBUG] [Thread-125450] [transport.py] [_log()] userauth is OK
2025-12-03T23:16:33.145 [DEBUG] [Thread-125450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:16:33.145 [DEBUG] [Thread-125450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:16:33.145 [DEBUG] [Thread-125450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:16:33.145 [DEBUG] [Thread-125450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:16:33.160 [INFO] [Thread-125450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:16:33.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:16:33.947 [DEBUG] [Thread-125450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:16:33.947 [DEBUG] [Thread-125450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:16:33.947 [DEBUG] [Thread-125450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:16:33.988 [DEBUG] [Thread-125450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:16:33.988 [DEBUG] [Thread-125450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:16:33.991 [DEBUG] [Thread-125450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:16:34.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:16:34.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:16:34.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:16:34.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:16:34.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:16:34.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:16:34.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.886160 -999.00  +15.90  15.95     40   +2.30 1 1 1 1 1     0    0 13.41 -0.03 ZNESW 16.4 15.9 131.0 25.3 16.0 -25.7 15.9 -25.0 15.6 -23.2 15.9 -24.3
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:16:34.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.886160
2025-12-03T23:16:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:16:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:16:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:16:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:16:34.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:16:34.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:16:15', tmtdew=15.57, humidity=34.88, cloud=0.0, wind=25.6, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:16:15', seeing=0.9, atlas_timestamp='2025-12-03T21:16:04.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:16:34.018 [DEBUG] [Thread-125450] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:16:34.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:16:34.120 [DEBUG] [Thread-125453] [transport.py] [_log()] starting thread (client mode): 0xa514cb50
2025-12-03T23:16:34.120 [DEBUG] [Thread-125453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:16:34.136 [DEBUG] [Thread-125453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:16:34.136 [INFO] [Thread-125453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:16:34.146 [DEBUG] [Thread-125453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:16:34.146 [DEBUG] [Thread-125453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] client lang: <none>
2025-12-03T23:16:34.147 [DEBUG] [Thread-125453] [transport.py] [_log()] server lang: <none>
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] kex follows: False
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] Compression: none
2025-12-03T23:16:34.148 [DEBUG] [Thread-125453] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:16:34.202 [DEBUG] [Thread-125453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:16:34.203 [DEBUG] [Thread-125453] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:16:34.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:16:34.204 [DEBUG] [Thread-125453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:16:34.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:16:34.258 [DEBUG] [Thread-125453] [transport.py] [_log()] userauth is OK
2025-12-03T23:16:34.258 [DEBUG] [Thread-125453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:16:34.258 [DEBUG] [Thread-125453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:16:34.259 [DEBUG] [Thread-125453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:16:34.259 [DEBUG] [Thread-125453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:16:34.281 [INFO] [Thread-125453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:16:34.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:16:34.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:16:35.108 [DEBUG] [Thread-125453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:16:35.108 [DEBUG] [Thread-125453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:16:35.155 [DEBUG] [Thread-125453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:16:35.156 [DEBUG] [Thread-125453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:16:35.165 [DEBUG] [Thread-125453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:16:35.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:16:35.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:16:35.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:16:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:16:35.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:16:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:16:35.199 [DEBUG] [Thread-125453] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:16:41.521 [DEBUG] [Thread-125455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:46.911 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:16:56.579 [DEBUG] [Thread-125456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:05.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:17:05.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:17:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:17:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 16, 47), 15.52, 34.88, 0.0, 22.71, 15.95, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:17:05.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:16:47
2025-12-03T23:17:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:17:06.179 [DEBUG] [Thread-125457] [transport.py] [_log()] starting thread (client mode): 0xa514f700
2025-12-03T23:17:06.179 [DEBUG] [Thread-125457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:17:06.199 [DEBUG] [Thread-125457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:17:06.199 [INFO] [Thread-125457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] client lang: <none>
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] server lang: <none>
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] kex follows: False
2025-12-03T23:17:06.203 [DEBUG] [Thread-125457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] Compression: none
2025-12-03T23:17:06.204 [DEBUG] [Thread-125457] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:17:06.223 [DEBUG] [Thread-125457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:17:06.223 [DEBUG] [Thread-125457] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:17:06.224 [DEBUG] [Thread-125457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:17:06.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:17:06.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:17:06.265 [DEBUG] [Thread-125457] [transport.py] [_log()] userauth is OK
2025-12-03T23:17:06.265 [DEBUG] [Thread-125457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:17:06.265 [DEBUG] [Thread-125457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:17:06.265 [DEBUG] [Thread-125457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:17:06.265 [DEBUG] [Thread-125457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:17:06.297 [INFO] [Thread-125457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:17:06.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:17:06.942 [DEBUG] [Thread-125457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:17:06.942 [DEBUG] [Thread-125457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:17:06.942 [DEBUG] [Thread-125457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:17:06.983 [DEBUG] [Thread-125457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:17:06.983 [DEBUG] [Thread-125457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:17:06.986 [DEBUG] [Thread-125457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:17:06.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:17:06.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:17:07.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:17:07.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:17:07.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:17:07.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:17:07.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:17:07.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.886507 -999.00  +15.80  20.46     40   +2.30 1 1 1 1 1     0    0 13.50 0.72 ZNESW 20.2 20.5 137.6 29.2 16.0 -25.5 15.9 -24.9 15.7 -23.4 15.9 -24.1
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.886507
2025-12-03T23:17:07.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:17:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:17:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:17:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:17:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:17:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:16:47', tmtdew=15.52, humidity=34.88, cloud=0.0, wind=22.71, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:16:47', seeing=0.9, atlas_timestamp='2025-12-03T21:16:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:17:07.010 [DEBUG] [Thread-125457] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:17:07.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:17:07.113 [DEBUG] [Thread-125460] [transport.py] [_log()] starting thread (client mode): 0xa514ec80
2025-12-03T23:17:07.113 [DEBUG] [Thread-125460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:17:07.132 [DEBUG] [Thread-125460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:17:07.133 [INFO] [Thread-125460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] client lang: <none>
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] server lang: <none>
2025-12-03T23:17:07.140 [DEBUG] [Thread-125460] [transport.py] [_log()] kex follows: False
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] Compression: none
2025-12-03T23:17:07.141 [DEBUG] [Thread-125460] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:17:07.201 [DEBUG] [Thread-125460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:17:07.202 [DEBUG] [Thread-125460] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:17:07.202 [DEBUG] [Thread-125460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:17:07.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:17:07.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:17:07.258 [DEBUG] [Thread-125460] [transport.py] [_log()] userauth is OK
2025-12-03T23:17:07.258 [DEBUG] [Thread-125460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:17:07.259 [DEBUG] [Thread-125460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:17:07.259 [DEBUG] [Thread-125460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:17:07.259 [DEBUG] [Thread-125460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:17:07.279 [INFO] [Thread-125460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:17:07.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:17:07.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:17:07.331 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:08.171 [DEBUG] [Thread-125460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:17:08.171 [DEBUG] [Thread-125460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:17:08.220 [DEBUG] [Thread-125460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:17:08.220 [DEBUG] [Thread-125460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:17:08.229 [DEBUG] [Thread-125460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:17:08.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:17:08.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:17:08.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:17:08.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:17:08.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:17:08.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:17:08.262 [DEBUG] [Thread-125460] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:17:11.614 [DEBUG] [Thread-125462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:13.425 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:13.427 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:19.405 [DEBUG] [Thread-125463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:26.684 [DEBUG] [Thread-125464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:27.748 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:38.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:17:38.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:17:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:17:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 17, 19), 15.5, 34.92, 0.0, 21.24, 15.91, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:17:38.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:17:19
2025-12-03T23:17:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:17:39.239 [DEBUG] [Thread-125465] [transport.py] [_log()] starting thread (client mode): 0xa51b9b40
2025-12-03T23:17:39.239 [DEBUG] [Thread-125465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:17:39.264 [DEBUG] [Thread-125465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:17:39.264 [INFO] [Thread-125465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:39.265 [DEBUG] [Thread-125465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] client lang: <none>
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] server lang: <none>
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] kex follows: False
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] Compression: none
2025-12-03T23:17:39.266 [DEBUG] [Thread-125465] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:17:39.273 [DEBUG] [Thread-125465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:17:39.274 [DEBUG] [Thread-125465] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:17:39.274 [DEBUG] [Thread-125465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:17:39.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:17:39.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:17:39.275 [DEBUG] [Thread-125465] [transport.py] [_log()] userauth is OK
2025-12-03T23:17:39.275 [DEBUG] [Thread-125465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:17:39.275 [DEBUG] [Thread-125465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:17:39.275 [DEBUG] [Thread-125465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:17:39.275 [DEBUG] [Thread-125465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:17:39.284 [INFO] [Thread-125465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:17:39.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:17:40.026 [DEBUG] [Thread-125465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:17:40.026 [DEBUG] [Thread-125465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:17:40.026 [DEBUG] [Thread-125465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:17:40.066 [DEBUG] [Thread-125465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:17:40.066 [DEBUG] [Thread-125465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:17:40.069 [DEBUG] [Thread-125465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:17:40.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:17:40.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:17:40.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:17:40.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:17:40.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:17:40.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:17:40.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.886854 -999.00  +15.90  18.41     40   +2.30 1 1 1 1 1     0    0 13.67 1.69 ZNESW 19.7 18.4 143.4 22.1 16.0 -25.4 15.9 -24.9 15.6 -23.3 15.9 -24.1
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.886854
2025-12-03T23:17:40.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:17:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:17:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:17:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:17:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:17:40.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:17:19', tmtdew=15.5, humidity=34.92, cloud=0.0, wind=21.24, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:17:19', seeing=0.98, atlas_timestamp='2025-12-03T21:17:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.02925000000000111, 0.03225000000000122, 0.023499999999998522, 0.007500000000000284, 0.005250000000000199, -0.006999999999999673, -0.03474999999999895, 0.053000000000000824, 0.027000000000001023, 0.07824999999999882, 0.012000000000000455, 0.14499999999999957, 0.0442499999999999, -0.05799999999999983, -0.0035000000000007248, 0.07225000000000037, 0.07450000000000045, 0.04449999999999932, 0.01624999999999943, 0.08749999999999858, 0.027749999999999275, -0.12174999999999869, -0.13724999999999987, 0.019999999999999574, 0.029500000000000526, 0.008750000000000924, 0.0035000000000007248, 0.1349999999999998, 0.18400000000000105, 0.012000000000000455, -0.023999999999999133, -0.011250000000000426], zp_timestamp='2025-12-03T21:13:00')
2025-12-03T23:17:40.081 [DEBUG] [Thread-125465] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:17:40.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:17:41.175 [DEBUG] [Thread-125468] [transport.py] [_log()] starting thread (client mode): 0xa51bbcd0
2025-12-03T23:17:41.175 [DEBUG] [Thread-125468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:17:41.190 [DEBUG] [Thread-125468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:17:41.190 [INFO] [Thread-125468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:41.197 [DEBUG] [Thread-125468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] client lang: <none>
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] server lang: <none>
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] kex follows: False
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] Compression: none
2025-12-03T23:17:41.198 [DEBUG] [Thread-125468] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:17:41.255 [DEBUG] [Thread-125468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:17:41.256 [DEBUG] [Thread-125468] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:17:41.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:17:41.256 [DEBUG] [Thread-125468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:17:41.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:17:41.314 [DEBUG] [Thread-125468] [transport.py] [_log()] userauth is OK
2025-12-03T23:17:41.315 [DEBUG] [Thread-125468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:17:41.315 [DEBUG] [Thread-125468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:17:41.315 [DEBUG] [Thread-125468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:17:41.315 [DEBUG] [Thread-125468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:17:41.338 [INFO] [Thread-125468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:17:41.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:17:41.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:17:41.724 [DEBUG] [Thread-125470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:42.230 [DEBUG] [Thread-125468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:17:42.230 [DEBUG] [Thread-125468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:17:42.281 [DEBUG] [Thread-125468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:17:42.281 [DEBUG] [Thread-125468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:17:42.290 [DEBUG] [Thread-125468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:17:42.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:17:42.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:17:42.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:17:42.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:17:42.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:17:42.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:17:42.325 [DEBUG] [Thread-125468] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:17:48.171 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:17:56.793 [DEBUG] [Thread-125471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:08.590 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:11.831 [DEBUG] [Thread-125472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:12.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:18:12.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:18:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:18:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 17, 51), 15.47, 35.02, 0.0, 22.29, 15.86, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:18:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:17:51
2025-12-03T23:18:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:18:13.306 [DEBUG] [Thread-125473] [transport.py] [_log()] starting thread (client mode): 0x9fd23f40
2025-12-03T23:18:13.306 [DEBUG] [Thread-125473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:18:13.326 [DEBUG] [Thread-125473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:18:13.327 [INFO] [Thread-125473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:18:13.330 [DEBUG] [Thread-125473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] client lang: <none>
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] server lang: <none>
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] kex follows: False
2025-12-03T23:18:13.336 [DEBUG] [Thread-125473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] Compression: none
2025-12-03T23:18:13.337 [DEBUG] [Thread-125473] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:18:13.358 [DEBUG] [Thread-125473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:18:13.359 [DEBUG] [Thread-125473] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:18:13.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:18:13.359 [DEBUG] [Thread-125473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:18:13.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:18:13.361 [DEBUG] [Thread-125473] [transport.py] [_log()] userauth is OK
2025-12-03T23:18:13.361 [DEBUG] [Thread-125473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:18:13.361 [DEBUG] [Thread-125473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:18:13.361 [DEBUG] [Thread-125473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:18:13.361 [DEBUG] [Thread-125473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:18:13.384 [INFO] [Thread-125473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:18:13.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:18:13.646 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:13.647 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:14.008 [DEBUG] [Thread-125473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:18:14.008 [DEBUG] [Thread-125473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:18:14.008 [DEBUG] [Thread-125473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:18:14.049 [DEBUG] [Thread-125473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:18:14.049 [DEBUG] [Thread-125473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:18:14.051 [DEBUG] [Thread-125473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:18:14.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:18:14.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:18:14.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:18:14.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:18:14.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:18:14.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:18:14.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.887201 -999.00  +15.80  15.32     40   +2.30 1 1 1 1 1     0    0 13.61 2.57 ZNESW 13.8 15.3 143.0 23.3 16.0 -25.6 15.9 -25.0 15.6 -23.3 15.9 -24.3
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.887201
2025-12-03T23:18:14.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:18:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:18:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:18:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:18:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:18:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:17:51', tmtdew=15.47, humidity=35.02, cloud=0.0, wind=22.29, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:17:51', seeing=0.99, atlas_timestamp='2025-12-03T21:17:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.022749999999998494, 0.004250000000000753, 0.0034999999999989484, -0.06049999999999933, 0.01025000000000098, -0.03350000000000186, -0.10574999999999868, 0.08949999999999925, 0.022500000000000853, 0.02775000000000105, 0.014999999999998792, 0.012000000000000455, -0.007749999999999702, -0.059499999999999886, -0.136000000000001, -0.01875000000000071, 0.03250000000000064, -0.02400000000000091, -0.00975000000000037, 0.011499999999998067, 0.0067499999999984794, -0.04574999999999996, -0.1332500000000003, -0.03599999999999959, -0.037499999999999645, -0.08425000000000082, -0.0884999999999998, 0.08450000000000024, 0.10200000000000031, -0.039499999999998536, -0.08799999999999919, -0.025750000000000384], zp_timestamp='2025-12-03T21:16:00')
2025-12-03T23:18:14.069 [DEBUG] [Thread-125473] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:18:14.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:18:14.162 [DEBUG] [Thread-125476] [transport.py] [_log()] starting thread (client mode): 0xa5162a40
2025-12-03T23:18:14.162 [DEBUG] [Thread-125476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:18:14.176 [DEBUG] [Thread-125476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:18:14.177 [INFO] [Thread-125476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] client lang: <none>
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] server lang: <none>
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] kex follows: False
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:18:14.184 [DEBUG] [Thread-125476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:18:14.185 [DEBUG] [Thread-125476] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:18:14.185 [DEBUG] [Thread-125476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:18:14.185 [DEBUG] [Thread-125476] [transport.py] [_log()] Compression: none
2025-12-03T23:18:14.185 [DEBUG] [Thread-125476] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:18:14.245 [DEBUG] [Thread-125476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:18:14.245 [DEBUG] [Thread-125476] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:18:14.246 [DEBUG] [Thread-125476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:18:14.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:18:14.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:18:14.302 [DEBUG] [Thread-125476] [transport.py] [_log()] userauth is OK
2025-12-03T23:18:14.302 [DEBUG] [Thread-125476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:18:14.302 [DEBUG] [Thread-125476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:18:14.302 [DEBUG] [Thread-125476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:18:14.302 [DEBUG] [Thread-125476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:18:14.316 [INFO] [Thread-125476] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:18:14.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:18:14.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:18:15.187 [DEBUG] [Thread-125476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:18:15.187 [DEBUG] [Thread-125476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:18:15.236 [DEBUG] [Thread-125476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:18:15.236 [DEBUG] [Thread-125476] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:18:15.244 [DEBUG] [Thread-125476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:18:15.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:18:15.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:18:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:18:15.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:18:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:18:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:18:15.275 [DEBUG] [Thread-125476] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:18:19.462 [DEBUG] [Thread-125478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:26.871 [DEBUG] [Thread-125479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:29.056 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:41.929 [DEBUG] [Thread-125480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:18:45.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:18:45.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:18:45.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 18, 23), 15.48, 34.98, 0.0, 21.16, 15.85, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:18:45.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:18:23
2025-12-03T23:18:46.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:18:46.256 [DEBUG] [Thread-125481] [transport.py] [_log()] starting thread (client mode): 0xa514cb50
2025-12-03T23:18:46.256 [DEBUG] [Thread-125481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:18:46.268 [DEBUG] [Thread-125481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:18:46.268 [INFO] [Thread-125481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] client lang: <none>
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] server lang: <none>
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] kex follows: False
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] Compression: none
2025-12-03T23:18:46.271 [DEBUG] [Thread-125481] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:18:46.287 [DEBUG] [Thread-125481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:18:46.288 [DEBUG] [Thread-125481] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:18:46.288 [DEBUG] [Thread-125481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:18:46.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:18:46.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:18:46.290 [DEBUG] [Thread-125481] [transport.py] [_log()] userauth is OK
2025-12-03T23:18:46.290 [DEBUG] [Thread-125481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:18:46.290 [DEBUG] [Thread-125481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:18:46.290 [DEBUG] [Thread-125481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:18:46.290 [DEBUG] [Thread-125481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:18:46.308 [INFO] [Thread-125481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:18:46.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:18:46.899 [DEBUG] [Thread-125481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:18:46.899 [DEBUG] [Thread-125481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:18:46.899 [DEBUG] [Thread-125481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:18:46.940 [DEBUG] [Thread-125481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:18:46.940 [DEBUG] [Thread-125481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:18:46.943 [DEBUG] [Thread-125481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:18:46.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:18:46.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:18:46.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:18:46.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:18:46.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:18:46.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:18:46.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:18:46.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.887549 -999.00  +15.80  16.79     40   +2.30 1 1 1 1 1     0    0 13.51 2.93 ZNESW 18.3 16.8 147.2 23.3 16.0 -25.5 15.8 -25.0 15.7 -23.3 15.9 -23.9
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.887549
2025-12-03T23:18:46.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:18:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:18:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:18:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:18:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:18:46.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:18:23', tmtdew=15.48, humidity=34.98, cloud=0.0, wind=21.16, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:18:23', seeing=0.99, atlas_timestamp='2025-12-03T21:18:04.234', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.022749999999998494, 0.004250000000000753, 0.0034999999999989484, -0.06049999999999933, 0.01025000000000098, -0.03350000000000186, -0.10574999999999868, 0.08949999999999925, 0.022500000000000853, 0.02775000000000105, 0.014999999999998792, 0.012000000000000455, -0.007749999999999702, -0.059499999999999886, -0.136000000000001, -0.01875000000000071, 0.03250000000000064, -0.02400000000000091, -0.00975000000000037, 0.011499999999998067, 0.0067499999999984794, -0.04574999999999996, -0.1332500000000003, -0.03599999999999959, -0.037499999999999645, -0.08425000000000082, -0.0884999999999998, 0.08450000000000024, 0.10200000000000031, -0.039499999999998536, -0.08799999999999919, -0.025750000000000384], zp_timestamp='2025-12-03T21:16:00')
2025-12-03T23:18:46.968 [DEBUG] [Thread-125481] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:18:47.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:18:47.071 [DEBUG] [Thread-125484] [transport.py] [_log()] starting thread (client mode): 0xa5161ae0
2025-12-03T23:18:47.071 [DEBUG] [Thread-125484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:18:47.086 [DEBUG] [Thread-125484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:18:47.086 [INFO] [Thread-125484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:18:47.093 [DEBUG] [Thread-125484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:18:47.093 [DEBUG] [Thread-125484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:18:47.093 [DEBUG] [Thread-125484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:18:47.093 [DEBUG] [Thread-125484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] client lang: <none>
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] server lang: <none>
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] kex follows: False
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] Compression: none
2025-12-03T23:18:47.094 [DEBUG] [Thread-125484] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:18:47.150 [DEBUG] [Thread-125484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:18:47.151 [DEBUG] [Thread-125484] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:18:47.151 [DEBUG] [Thread-125484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:18:47.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:18:47.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:18:47.207 [DEBUG] [Thread-125484] [transport.py] [_log()] userauth is OK
2025-12-03T23:18:47.207 [DEBUG] [Thread-125484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:18:47.207 [DEBUG] [Thread-125484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:18:47.207 [DEBUG] [Thread-125484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:18:47.207 [DEBUG] [Thread-125484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:18:47.229 [INFO] [Thread-125484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:18:47.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:18:47.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:18:48.095 [DEBUG] [Thread-125484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:18:48.095 [DEBUG] [Thread-125484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:18:48.143 [DEBUG] [Thread-125484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:18:48.143 [DEBUG] [Thread-125484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:18:48.152 [DEBUG] [Thread-125484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:18:48.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:18:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:18:48.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:18:48.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:18:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:18:48.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:18:48.186 [DEBUG] [Thread-125484] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:18:49.530 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:18:56.961 [DEBUG] [Thread-125486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:09.993 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:12.008 [DEBUG] [Thread-125487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:13.847 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:13.848 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:18.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:19:18.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:19:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:19:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 18, 55), 15.37, 35.0, 0.0, 20.89, 15.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:19:18.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:18:55
2025-12-03T23:19:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:19:19.161 [DEBUG] [Thread-125488] [transport.py] [_log()] starting thread (client mode): 0xa51b9270
2025-12-03T23:19:19.161 [DEBUG] [Thread-125488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:19:19.182 [DEBUG] [Thread-125488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:19:19.182 [INFO] [Thread-125488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:19.185 [DEBUG] [Thread-125488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] client lang: <none>
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] server lang: <none>
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] kex follows: False
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] Compression: none
2025-12-03T23:19:19.186 [DEBUG] [Thread-125488] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:19:19.203 [DEBUG] [Thread-125488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:19:19.203 [DEBUG] [Thread-125488] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:19:19.204 [DEBUG] [Thread-125488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:19:19.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:19:19.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:19:19.205 [DEBUG] [Thread-125488] [transport.py] [_log()] userauth is OK
2025-12-03T23:19:19.206 [DEBUG] [Thread-125488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:19:19.206 [DEBUG] [Thread-125488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:19:19.206 [DEBUG] [Thread-125488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:19:19.206 [DEBUG] [Thread-125488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:19:19.231 [INFO] [Thread-125488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:19:19.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:19:19.519 [DEBUG] [Thread-125490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:19.874 [DEBUG] [Thread-125488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:19:19.874 [DEBUG] [Thread-125488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:19:19.874 [DEBUG] [Thread-125488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:19:19.915 [DEBUG] [Thread-125488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:19:19.915 [DEBUG] [Thread-125488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:19:19.925 [DEBUG] [Thread-125488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:19:19.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:19:19.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:19:19.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:19:19.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:19:19.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:19:19.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:19:19.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:19:19.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:19:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:19:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.887896 -999.00  +15.80  18.32     40   +2.30 1 1 1 1 1     0    0 13.54 3.47 ZNESW 14.0 18.3 141.2 24.1 16.0 -25.5 15.9 -25.0 15.7 -23.4 15.9 -24.2
2025-12-03T23:19:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:19:19.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:19:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.887896
2025-12-03T23:19:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:19:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:19:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:19:19.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:19:19.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:19:19.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:18:55', tmtdew=15.37, humidity=35.0, cloud=0.0, wind=20.89, temperature=15.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:18:55', seeing=1.02, atlas_timestamp='2025-12-03T21:18:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.022749999999998494, 0.004250000000000753, 0.0034999999999989484, -0.06049999999999933, 0.01025000000000098, -0.03350000000000186, -0.10574999999999868, 0.08949999999999925, 0.022500000000000853, 0.02775000000000105, 0.014999999999998792, 0.012000000000000455, -0.007749999999999702, -0.059499999999999886, -0.136000000000001, -0.01875000000000071, 0.03250000000000064, -0.02400000000000091, -0.00975000000000037, 0.011499999999998067, 0.0067499999999984794, -0.04574999999999996, -0.1332500000000003, -0.03599999999999959, -0.037499999999999645, -0.08425000000000082, -0.0884999999999998, 0.08450000000000024, 0.10200000000000031, -0.039499999999998536, -0.08799999999999919, -0.025750000000000384], zp_timestamp='2025-12-03T21:16:00')
2025-12-03T23:19:19.950 [DEBUG] [Thread-125488] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:19:20.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:19:20.053 [DEBUG] [Thread-125492] [transport.py] [_log()] starting thread (client mode): 0xa5162f20
2025-12-03T23:19:20.053 [DEBUG] [Thread-125492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:19:20.070 [DEBUG] [Thread-125492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:19:20.070 [INFO] [Thread-125492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:19:20.082 [DEBUG] [Thread-125492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:19:20.082 [DEBUG] [Thread-125492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] client lang: <none>
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] server lang: <none>
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] kex follows: False
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:19:20.083 [DEBUG] [Thread-125492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:19:20.084 [DEBUG] [Thread-125492] [transport.py] [_log()] Compression: none
2025-12-03T23:19:20.084 [DEBUG] [Thread-125492] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:19:20.135 [DEBUG] [Thread-125492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:19:20.135 [DEBUG] [Thread-125492] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:19:20.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:19:20.136 [DEBUG] [Thread-125492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:19:20.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:19:20.196 [DEBUG] [Thread-125492] [transport.py] [_log()] userauth is OK
2025-12-03T23:19:20.196 [DEBUG] [Thread-125492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:19:20.196 [DEBUG] [Thread-125492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:19:20.196 [DEBUG] [Thread-125492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:19:20.196 [DEBUG] [Thread-125492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:19:20.214 [INFO] [Thread-125492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:19:20.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:19:20.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:19:21.051 [DEBUG] [Thread-125492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:19:21.051 [DEBUG] [Thread-125492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:19:21.099 [DEBUG] [Thread-125492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:19:21.099 [DEBUG] [Thread-125492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:19:21.113 [DEBUG] [Thread-125492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:19:21.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:19:21.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:19:21.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:19:21.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:19:21.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:19:21.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:19:21.151 [DEBUG] [Thread-125492] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:19:27.043 [DEBUG] [Thread-125494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:30.538 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:42.100 [DEBUG] [Thread-125495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:50.999 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:19:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:19:51.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:19:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:19:51.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 19, 27), 15.34, 35.07, 0.0, 23.77, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:19:51.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:19:27
2025-12-03T23:19:51.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:19:52.118 [DEBUG] [Thread-125496] [transport.py] [_log()] starting thread (client mode): 0xa5163c40
2025-12-03T23:19:52.118 [DEBUG] [Thread-125496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:19:52.141 [DEBUG] [Thread-125496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:19:52.142 [INFO] [Thread-125496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:19:52.145 [DEBUG] [Thread-125496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:19:52.145 [DEBUG] [Thread-125496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:19:52.145 [DEBUG] [Thread-125496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:19:52.145 [DEBUG] [Thread-125496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:52.145 [DEBUG] [Thread-125496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] client lang: <none>
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] server lang: <none>
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] kex follows: False
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] Compression: none
2025-12-03T23:19:52.146 [DEBUG] [Thread-125496] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:19:52.160 [DEBUG] [Thread-125496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:19:52.160 [DEBUG] [Thread-125496] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:19:52.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:19:52.161 [DEBUG] [Thread-125496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:19:52.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:19:52.163 [DEBUG] [Thread-125496] [transport.py] [_log()] userauth is OK
2025-12-03T23:19:52.163 [DEBUG] [Thread-125496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:19:52.163 [DEBUG] [Thread-125496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:19:52.163 [DEBUG] [Thread-125496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:19:52.164 [DEBUG] [Thread-125496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:19:52.187 [INFO] [Thread-125496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:19:52.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:19:52.793 [DEBUG] [Thread-125496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:19:52.793 [DEBUG] [Thread-125496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:19:52.793 [DEBUG] [Thread-125496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:19:52.834 [DEBUG] [Thread-125496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:19:52.834 [DEBUG] [Thread-125496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:19:52.837 [DEBUG] [Thread-125496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:19:52.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:19:52.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:19:52.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:19:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:19:52.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:19:52.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:19:52.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:19:52.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:19:52.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:19:52.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.888590 -999.00  +15.70  14.03     40   +2.30 1 1 1 1 1     0    0 13.51 3.44 ZNESW 16.2 14.0 136.4 17.8 15.9 -25.7 15.8 -25.1 15.6 -23.5 15.9 -24.4
2025-12-03T23:19:52.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:19:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:19:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.888590
2025-12-03T23:19:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:19:52.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:19:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:19:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:19:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:19:52.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:19:27', tmtdew=15.34, humidity=35.07, cloud=0.0, wind=23.77, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:19:27', seeing=0.99, atlas_timestamp='2025-12-03T21:19:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.022749999999998494, 0.004250000000000753, 0.0034999999999989484, -0.06049999999999933, 0.01025000000000098, -0.03350000000000186, -0.10574999999999868, 0.08949999999999925, 0.022500000000000853, 0.02775000000000105, 0.014999999999998792, 0.012000000000000455, -0.007749999999999702, -0.059499999999999886, -0.136000000000001, -0.01875000000000071, 0.03250000000000064, -0.02400000000000091, -0.00975000000000037, 0.011499999999998067, 0.0067499999999984794, -0.04574999999999996, -0.1332500000000003, -0.03599999999999959, -0.037499999999999645, -0.08425000000000082, -0.0884999999999998, 0.08450000000000024, 0.10200000000000031, -0.039499999999998536, -0.08799999999999919, -0.025750000000000384], zp_timestamp='2025-12-03T21:16:00')
2025-12-03T23:19:52.864 [DEBUG] [Thread-125496] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:19:52.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:19:52.967 [DEBUG] [Thread-125499] [transport.py] [_log()] starting thread (client mode): 0xa5162bf0
2025-12-03T23:19:52.967 [DEBUG] [Thread-125499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:19:52.982 [DEBUG] [Thread-125499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:19:52.982 [INFO] [Thread-125499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:52.990 [DEBUG] [Thread-125499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] client lang: <none>
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] server lang: <none>
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] kex follows: False
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:19:52.991 [DEBUG] [Thread-125499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:19:52.992 [DEBUG] [Thread-125499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:19:52.992 [DEBUG] [Thread-125499] [transport.py] [_log()] Compression: none
2025-12-03T23:19:52.992 [DEBUG] [Thread-125499] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:19:53.047 [DEBUG] [Thread-125499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:19:53.047 [DEBUG] [Thread-125499] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:19:53.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:19:53.048 [DEBUG] [Thread-125499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:19:53.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:19:53.103 [DEBUG] [Thread-125499] [transport.py] [_log()] userauth is OK
2025-12-03T23:19:53.103 [DEBUG] [Thread-125499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:19:53.103 [DEBUG] [Thread-125499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:19:53.103 [DEBUG] [Thread-125499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:19:53.104 [DEBUG] [Thread-125499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:19:53.125 [INFO] [Thread-125499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:19:53.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:19:53.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:19:53.999 [DEBUG] [Thread-125499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:19:54.000 [DEBUG] [Thread-125499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:19:54.051 [DEBUG] [Thread-125499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:19:54.051 [DEBUG] [Thread-125499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:19:54.063 [DEBUG] [Thread-125499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:19:54.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:19:54.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:19:54.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:19:54.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:19:54.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:19:54.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:19:54.097 [DEBUG] [Thread-125499] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:19:57.139 [DEBUG] [Thread-125501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:11.404 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:12.191 [DEBUG] [Thread-125502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:14.046 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:14.047 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:19.578 [DEBUG] [Thread-125503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:24.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:20:24.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:20:24.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:20:24.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 19, 59), 15.27, 35.12, 0.0, 23.08, 15.68, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:20:24.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:19:59
2025-12-03T23:20:24.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:20:25.092 [DEBUG] [Thread-125504] [transport.py] [_log()] starting thread (client mode): 0xa514e800
2025-12-03T23:20:25.092 [DEBUG] [Thread-125504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:20:25.112 [DEBUG] [Thread-125504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:20:25.112 [INFO] [Thread-125504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] client lang: <none>
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] server lang: <none>
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] kex follows: False
2025-12-03T23:20:25.114 [DEBUG] [Thread-125504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] Compression: none
2025-12-03T23:20:25.115 [DEBUG] [Thread-125504] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:20:25.132 [DEBUG] [Thread-125504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:20:25.133 [DEBUG] [Thread-125504] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:20:25.133 [DEBUG] [Thread-125504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:20:25.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:20:25.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:20:25.135 [DEBUG] [Thread-125504] [transport.py] [_log()] userauth is OK
2025-12-03T23:20:25.135 [DEBUG] [Thread-125504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:20:25.135 [DEBUG] [Thread-125504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:20:25.135 [DEBUG] [Thread-125504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:20:25.135 [DEBUG] [Thread-125504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:20:25.155 [INFO] [Thread-125504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:20:25.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:20:25.813 [DEBUG] [Thread-125504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:20:25.813 [DEBUG] [Thread-125504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:20:25.814 [DEBUG] [Thread-125504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:20:25.864 [DEBUG] [Thread-125504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:20:25.864 [DEBUG] [Thread-125504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:20:25.867 [DEBUG] [Thread-125504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:20:25.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:20:25.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:20:25.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:20:25.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:20:25.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:20:25.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:20:25.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:20:25.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.888937 -999.00  +15.60  14.05     40   +2.20 1 1 1 1 1     0    0 13.78 3.45 ZNESW 15.8 14.1 144.0 20.7 15.9 -25.6 15.8 -25.0 15.6 -23.4 15.8 -24.4
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.888937
2025-12-03T23:20:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:20:25.889 [DEBUG] [Thread-125504] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:20:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:20:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:20:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:20:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:20:25.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:19:59', tmtdew=15.27, humidity=35.12, cloud=0.0, wind=23.08, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:19:59', seeing=1.09, atlas_timestamp='2025-12-03T21:20:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.022749999999998494, 0.004250000000000753, 0.0034999999999989484, -0.06049999999999933, 0.01025000000000098, -0.03350000000000186, -0.10574999999999868, 0.08949999999999925, 0.022500000000000853, 0.02775000000000105, 0.014999999999998792, 0.012000000000000455, -0.007749999999999702, -0.059499999999999886, -0.136000000000001, -0.01875000000000071, 0.03250000000000064, -0.02400000000000091, -0.00975000000000037, 0.011499999999998067, 0.0067499999999984794, -0.04574999999999996, -0.1332500000000003, -0.03599999999999959, -0.037499999999999645, -0.08425000000000082, -0.0884999999999998, 0.08450000000000024, 0.10200000000000031, -0.039499999999998536, -0.08799999999999919, -0.025750000000000384], zp_timestamp='2025-12-03T21:16:00')
2025-12-03T23:20:25.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:20:25.995 [DEBUG] [Thread-125507] [transport.py] [_log()] starting thread (client mode): 0xa514ceb0
2025-12-03T23:20:25.995 [DEBUG] [Thread-125507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:20:26.011 [DEBUG] [Thread-125507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:20:26.011 [INFO] [Thread-125507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:20:26.018 [DEBUG] [Thread-125507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:20:26.018 [DEBUG] [Thread-125507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:20:26.018 [DEBUG] [Thread-125507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] client lang: <none>
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] server lang: <none>
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] kex follows: False
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] Compression: none
2025-12-03T23:20:26.019 [DEBUG] [Thread-125507] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:20:26.082 [DEBUG] [Thread-125507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:20:26.083 [DEBUG] [Thread-125507] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:20:26.083 [DEBUG] [Thread-125507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:20:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:20:26.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:20:26.139 [DEBUG] [Thread-125507] [transport.py] [_log()] userauth is OK
2025-12-03T23:20:26.139 [DEBUG] [Thread-125507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:20:26.139 [DEBUG] [Thread-125507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:20:26.139 [DEBUG] [Thread-125507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:20:26.140 [DEBUG] [Thread-125507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:20:26.158 [INFO] [Thread-125507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:20:26.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:20:26.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:20:27.048 [DEBUG] [Thread-125507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:20:27.048 [DEBUG] [Thread-125507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:20:27.096 [DEBUG] [Thread-125507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:20:27.096 [DEBUG] [Thread-125507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:20:27.105 [DEBUG] [Thread-125507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:20:27.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:20:27.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:20:27.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:20:27.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:20:27.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:20:27.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:20:27.138 [DEBUG] [Thread-125507] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:20:27.228 [DEBUG] [Thread-125509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:31.824 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:42.295 [DEBUG] [Thread-125510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:52.312 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:20:57.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:20:57.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:20:57.331 [DEBUG] [Thread-125511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:20:57.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 20, 31), 15.29, 35.07, 0.0, 23.5, 15.71, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:20:57.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:20:31
2025-12-03T23:20:57.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:20:58.115 [DEBUG] [Thread-125512] [transport.py] [_log()] starting thread (client mode): 0xa51ba8c0
2025-12-03T23:20:58.115 [DEBUG] [Thread-125512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:20:58.133 [DEBUG] [Thread-125512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:20:58.133 [INFO] [Thread-125512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:20:58.136 [DEBUG] [Thread-125512] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] client lang: <none>
2025-12-03T23:20:58.137 [DEBUG] [Thread-125512] [transport.py] [_log()] server lang: <none>
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] kex follows: False
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] Compression: none
2025-12-03T23:20:58.138 [DEBUG] [Thread-125512] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:20:58.159 [DEBUG] [Thread-125512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:20:58.159 [DEBUG] [Thread-125512] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:20:58.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:20:58.160 [DEBUG] [Thread-125512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:20:58.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:20:58.162 [DEBUG] [Thread-125512] [transport.py] [_log()] userauth is OK
2025-12-03T23:20:58.162 [DEBUG] [Thread-125512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:20:58.163 [DEBUG] [Thread-125512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:20:58.163 [DEBUG] [Thread-125512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:20:58.163 [DEBUG] [Thread-125512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:20:58.186 [INFO] [Thread-125512] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:20:58.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:20:58.829 [DEBUG] [Thread-125512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:20:58.829 [DEBUG] [Thread-125512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:20:58.829 [DEBUG] [Thread-125512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:20:58.870 [DEBUG] [Thread-125512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:20:58.870 [DEBUG] [Thread-125512] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:20:58.873 [DEBUG] [Thread-125512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:20:58.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:20:58.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:20:58.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:20:58.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:20:58.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:20:58.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:20:58.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.889285 -999.00  +15.60  14.81     40   +2.20 1 1 1 1 1     0    0 13.62 2.95 ZNESW 14.5 14.8 135.6 20.4 15.9 -25.7 15.8 -25.0 15.6 -23.5 15.8 -24.3
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:20:58.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.889285
2025-12-03T23:20:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:20:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:20:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:20:58.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:20:58.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:20:58.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:20:31', tmtdew=15.29, humidity=35.07, cloud=0.0, wind=23.5, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:20:31', seeing=1.0, atlas_timestamp='2025-12-03T21:20:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:20:58.896 [DEBUG] [Thread-125512] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:20:58.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:20:58.999 [DEBUG] [Thread-125515] [transport.py] [_log()] starting thread (client mode): 0xa51b81f0
2025-12-03T23:20:58.999 [DEBUG] [Thread-125515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:20:59.013 [DEBUG] [Thread-125515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:20:59.014 [INFO] [Thread-125515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:20:59.021 [DEBUG] [Thread-125515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:20:59.021 [DEBUG] [Thread-125515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:20:59.021 [DEBUG] [Thread-125515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:20:59.021 [DEBUG] [Thread-125515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] client lang: <none>
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] server lang: <none>
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] kex follows: False
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] Compression: none
2025-12-03T23:20:59.022 [DEBUG] [Thread-125515] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:20:59.079 [DEBUG] [Thread-125515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:20:59.079 [DEBUG] [Thread-125515] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:20:59.080 [DEBUG] [Thread-125515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:20:59.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:20:59.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:20:59.135 [DEBUG] [Thread-125515] [transport.py] [_log()] userauth is OK
2025-12-03T23:20:59.135 [DEBUG] [Thread-125515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:20:59.135 [DEBUG] [Thread-125515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:20:59.135 [DEBUG] [Thread-125515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:20:59.135 [DEBUG] [Thread-125515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:20:59.158 [INFO] [Thread-125515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:20:59.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:20:59.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:21:00.003 [DEBUG] [Thread-125515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:21:00.003 [DEBUG] [Thread-125515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:21:00.051 [DEBUG] [Thread-125515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:21:00.052 [DEBUG] [Thread-125515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:21:00.060 [DEBUG] [Thread-125515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:21:00.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:21:00.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:21:00.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:21:00.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:21:00.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:21:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:21:00.095 [DEBUG] [Thread-125515] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:21:12.361 [DEBUG] [Thread-125517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:12.746 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:14.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:14.288 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:19.641 [DEBUG] [Thread-125518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:27.415 [DEBUG] [Thread-125519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:21:30.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:21:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:21:30.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 21, 3), 15.32, 35.0, 0.0, 23.13, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:21:30.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:21:03
2025-12-03T23:21:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:21:31.124 [DEBUG] [Thread-125520] [transport.py] [_log()] starting thread (client mode): 0xa514f700
2025-12-03T23:21:31.124 [DEBUG] [Thread-125520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:21:31.145 [DEBUG] [Thread-125520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:21:31.145 [INFO] [Thread-125520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] client lang: <none>
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] server lang: <none>
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] kex follows: False
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] Compression: none
2025-12-03T23:21:31.148 [DEBUG] [Thread-125520] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:21:31.163 [DEBUG] [Thread-125520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:21:31.164 [DEBUG] [Thread-125520] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:21:31.164 [DEBUG] [Thread-125520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:21:31.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:21:31.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:21:31.165 [DEBUG] [Thread-125520] [transport.py] [_log()] userauth is OK
2025-12-03T23:21:31.165 [DEBUG] [Thread-125520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:21:31.165 [DEBUG] [Thread-125520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:21:31.165 [DEBUG] [Thread-125520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:21:31.165 [DEBUG] [Thread-125520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:21:31.175 [INFO] [Thread-125520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:21:31.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:21:31.789 [DEBUG] [Thread-125520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:21:31.790 [DEBUG] [Thread-125520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:21:31.790 [DEBUG] [Thread-125520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:21:31.831 [DEBUG] [Thread-125520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:21:31.831 [DEBUG] [Thread-125520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:21:31.833 [DEBUG] [Thread-125520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:21:31.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:21:31.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:21:31.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:21:31.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:21:31.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:21:31.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:21:31.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:21:31.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:21:31.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:21:31.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.889632 -999.00  +15.60  16.82     40   +2.20 1 1 1 1 1     0    0 13.43 2.70 ZNESW 15.6 16.8 137.2 26.1 15.9 -25.5 15.8 -24.9 15.6 -23.5 15.8 -23.9
2025-12-03T23:21:31.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.889632
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:21:31.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:21:03', tmtdew=15.32, humidity=35.0, cloud=0.0, wind=23.13, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:21:03', seeing=1.0, atlas_timestamp='2025-12-03T21:21:04.205', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:21:31.852 [DEBUG] [Thread-125520] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:21:31.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:21:31.950 [DEBUG] [Thread-125523] [transport.py] [_log()] starting thread (client mode): 0xa5162aa0
2025-12-03T23:21:31.950 [DEBUG] [Thread-125523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:21:31.968 [DEBUG] [Thread-125523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:21:31.968 [INFO] [Thread-125523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:21:31.975 [DEBUG] [Thread-125523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] client lang: <none>
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] server lang: <none>
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] kex follows: False
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] Compression: none
2025-12-03T23:21:31.976 [DEBUG] [Thread-125523] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:21:32.034 [DEBUG] [Thread-125523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:21:32.034 [DEBUG] [Thread-125523] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:21:32.034 [DEBUG] [Thread-125523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:21:32.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:21:32.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:21:32.091 [DEBUG] [Thread-125523] [transport.py] [_log()] userauth is OK
2025-12-03T23:21:32.091 [DEBUG] [Thread-125523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:21:32.091 [DEBUG] [Thread-125523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:21:32.091 [DEBUG] [Thread-125523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:21:32.091 [DEBUG] [Thread-125523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:21:32.109 [INFO] [Thread-125523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:21:32.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:21:32.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:21:32.985 [DEBUG] [Thread-125523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:21:32.985 [DEBUG] [Thread-125523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:21:33.032 [DEBUG] [Thread-125523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:21:33.033 [DEBUG] [Thread-125523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:21:33.041 [DEBUG] [Thread-125523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:21:33.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:21:33.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:21:33.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:21:33.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:21:33.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:21:33.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:21:33.073 [DEBUG] [Thread-125523] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:21:33.212 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:42.449 [DEBUG] [Thread-125525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:53.698 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:21:57.519 [DEBUG] [Thread-125526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:22:03.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:22:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:22:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 21, 35), 15.43, 34.98, 0.0, 21.97, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:22:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:21:35
2025-12-03T23:22:03.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:22:04.060 [DEBUG] [Thread-125527] [transport.py] [_log()] starting thread (client mode): 0xa51b99c0
2025-12-03T23:22:04.060 [DEBUG] [Thread-125527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:22:04.079 [DEBUG] [Thread-125527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:22:04.079 [INFO] [Thread-125527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] client lang: <none>
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] server lang: <none>
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] kex follows: False
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:22:04.082 [DEBUG] [Thread-125527] [transport.py] [_log()] Compression: none
2025-12-03T23:22:04.083 [DEBUG] [Thread-125527] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:22:04.098 [DEBUG] [Thread-125527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:22:04.099 [DEBUG] [Thread-125527] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:22:04.099 [DEBUG] [Thread-125527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:22:04.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:22:04.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:22:04.101 [DEBUG] [Thread-125527] [transport.py] [_log()] userauth is OK
2025-12-03T23:22:04.101 [DEBUG] [Thread-125527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:22:04.101 [DEBUG] [Thread-125527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:22:04.101 [DEBUG] [Thread-125527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:22:04.101 [DEBUG] [Thread-125527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:22:04.124 [INFO] [Thread-125527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:22:04.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:22:04.709 [DEBUG] [Thread-125527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:22:04.709 [DEBUG] [Thread-125527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:22:04.709 [DEBUG] [Thread-125527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:22:04.750 [DEBUG] [Thread-125527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:22:04.750 [DEBUG] [Thread-125527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:22:04.753 [DEBUG] [Thread-125527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:22:04.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:22:04.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:22:04.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:22:04.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:22:04.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:22:04.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:22:04.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:22:04.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:22:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:22:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.889979 -999.00  +15.60  13.85     40   +2.20 1 1 1 1 1     0    0 13.76 2.02 ZNESW 19.7 13.8 142.8 20.7 15.9 -25.6 15.8 -24.9 15.6 -23.4 15.8 -24.1
2025-12-03T23:22:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:22:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:22:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.889979
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:22:04.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:21:35', tmtdew=15.43, humidity=34.98, cloud=0.0, wind=21.97, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:21:36', seeing=0.97, atlas_timestamp='2025-12-03T21:21:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:22:04.778 [DEBUG] [Thread-125527] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:22:04.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:22:04.876 [DEBUG] [Thread-125530] [transport.py] [_log()] starting thread (client mode): 0xa5161ae0
2025-12-03T23:22:04.876 [DEBUG] [Thread-125530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:22:04.891 [DEBUG] [Thread-125530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:22:04.891 [INFO] [Thread-125530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:04.898 [DEBUG] [Thread-125530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] client lang: <none>
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] server lang: <none>
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] kex follows: False
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:22:04.899 [DEBUG] [Thread-125530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:22:04.900 [DEBUG] [Thread-125530] [transport.py] [_log()] Compression: none
2025-12-03T23:22:04.900 [DEBUG] [Thread-125530] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:22:04.955 [DEBUG] [Thread-125530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:22:04.955 [DEBUG] [Thread-125530] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:22:04.956 [DEBUG] [Thread-125530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:22:04.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:22:04.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:22:05.011 [DEBUG] [Thread-125530] [transport.py] [_log()] userauth is OK
2025-12-03T23:22:05.011 [DEBUG] [Thread-125530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:22:05.011 [DEBUG] [Thread-125530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:22:05.011 [DEBUG] [Thread-125530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:22:05.012 [DEBUG] [Thread-125530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:22:05.029 [INFO] [Thread-125530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:22:05.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:22:05.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:22:05.882 [DEBUG] [Thread-125530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:22:05.882 [DEBUG] [Thread-125530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:22:05.930 [DEBUG] [Thread-125530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:22:05.930 [DEBUG] [Thread-125530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:22:05.939 [DEBUG] [Thread-125530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:22:05.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:22:05.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:22:05.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:22:05.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:22:05.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:22:05.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:22:05.973 [DEBUG] [Thread-125530] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:22:12.554 [DEBUG] [Thread-125532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:14.107 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:14.497 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:14.498 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:19.705 [DEBUG] [Thread-125533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:27.624 [DEBUG] [Thread-125534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:34.574 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:35.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:22:35.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:22:35.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:22:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 22, 8), 15.43, 34.98, 0.0, 23.29, 15.8, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:22:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:22:08
2025-12-03T23:22:36.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:22:36.944 [DEBUG] [Thread-125535] [transport.py] [_log()] starting thread (client mode): 0xa5163ac0
2025-12-03T23:22:36.944 [DEBUG] [Thread-125535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:22:36.963 [DEBUG] [Thread-125535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:22:36.963 [INFO] [Thread-125535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:22:36.966 [DEBUG] [Thread-125535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] client lang: <none>
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] server lang: <none>
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] kex follows: False
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] Compression: none
2025-12-03T23:22:36.967 [DEBUG] [Thread-125535] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:22:36.989 [DEBUG] [Thread-125535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:22:36.989 [DEBUG] [Thread-125535] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:22:36.990 [DEBUG] [Thread-125535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:22:36.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:22:36.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:22:36.992 [DEBUG] [Thread-125535] [transport.py] [_log()] userauth is OK
2025-12-03T23:22:36.992 [DEBUG] [Thread-125535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:22:36.992 [DEBUG] [Thread-125535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:22:36.992 [DEBUG] [Thread-125535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:22:36.992 [DEBUG] [Thread-125535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:22:37.009 [INFO] [Thread-125535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:22:37.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:22:37.618 [DEBUG] [Thread-125535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:22:37.618 [DEBUG] [Thread-125535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:22:37.619 [DEBUG] [Thread-125535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:22:37.660 [DEBUG] [Thread-125535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:22:37.660 [DEBUG] [Thread-125535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:22:37.663 [DEBUG] [Thread-125535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:22:37.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:22:37.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:22:37.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:22:37.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:22:37.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:22:37.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:22:37.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:22:37.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:22:37.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:22:37.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.890326 -999.00  +15.60  18.99     40   +2.30 1 1 1 1 1     0    0 13.27 1.43 ZNESW 20.9 19.0 139.8 23.3 15.9 -25.4 15.8 -24.8 15.6 -23.5 15.8 -24.2
2025-12-03T23:22:37.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:22:37.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:22:37.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.890326
2025-12-03T23:22:37.693 [DEBUG] [Thread-125535] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:22:37.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:22:37.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:22:37.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:22:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:22:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:22:37.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:22:08', tmtdew=15.43, humidity=34.98, cloud=0.0, wind=23.29, temperature=15.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:22:08', seeing=0.96, atlas_timestamp='2025-12-03T21:22:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:22:37.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:22:37.807 [DEBUG] [Thread-125538] [transport.py] [_log()] starting thread (client mode): 0xa51ba680
2025-12-03T23:22:37.807 [DEBUG] [Thread-125538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:22:37.822 [DEBUG] [Thread-125538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:22:37.822 [INFO] [Thread-125538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:22:37.830 [DEBUG] [Thread-125538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] client lang: <none>
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] server lang: <none>
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] kex follows: False
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] Compression: none
2025-12-03T23:22:37.831 [DEBUG] [Thread-125538] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:22:37.886 [DEBUG] [Thread-125538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:22:37.887 [DEBUG] [Thread-125538] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:22:37.887 [DEBUG] [Thread-125538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:22:37.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:22:37.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:22:37.943 [DEBUG] [Thread-125538] [transport.py] [_log()] userauth is OK
2025-12-03T23:22:37.943 [DEBUG] [Thread-125538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:22:37.943 [DEBUG] [Thread-125538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:22:37.943 [DEBUG] [Thread-125538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:22:37.943 [DEBUG] [Thread-125538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:22:37.963 [INFO] [Thread-125538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:22:37.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:22:37.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:22:38.812 [DEBUG] [Thread-125538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:22:38.812 [DEBUG] [Thread-125538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:22:38.860 [DEBUG] [Thread-125538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:22:38.860 [DEBUG] [Thread-125538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:22:38.869 [DEBUG] [Thread-125538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:22:38.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:22:38.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:22:38.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:22:38.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:22:38.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:22:38.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:22:38.903 [DEBUG] [Thread-125538] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:22:42.660 [DEBUG] [Thread-125540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:54.982 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:22:57.709 [DEBUG] [Thread-125541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:08.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:23:08.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:23:08.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:23:09.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 22, 40), 15.32, 34.98, 0.0, 23.64, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:23:09.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:22:40
2025-12-03T23:23:09.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:23:09.874 [DEBUG] [Thread-125542] [transport.py] [_log()] starting thread (client mode): 0xa5161d80
2025-12-03T23:23:09.874 [DEBUG] [Thread-125542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:23:09.894 [DEBUG] [Thread-125542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:23:09.895 [INFO] [Thread-125542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:09.898 [DEBUG] [Thread-125542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] client lang: <none>
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] server lang: <none>
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] kex follows: False
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:23:09.899 [DEBUG] [Thread-125542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:23:09.900 [DEBUG] [Thread-125542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:23:09.900 [DEBUG] [Thread-125542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:23:09.900 [DEBUG] [Thread-125542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:23:09.900 [DEBUG] [Thread-125542] [transport.py] [_log()] Compression: none
2025-12-03T23:23:09.900 [DEBUG] [Thread-125542] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:23:09.918 [DEBUG] [Thread-125542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:23:09.918 [DEBUG] [Thread-125542] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:23:09.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:23:09.919 [DEBUG] [Thread-125542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:23:09.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:23:09.921 [DEBUG] [Thread-125542] [transport.py] [_log()] userauth is OK
2025-12-03T23:23:09.921 [DEBUG] [Thread-125542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:23:09.922 [DEBUG] [Thread-125542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:23:09.922 [DEBUG] [Thread-125542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:23:09.922 [DEBUG] [Thread-125542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:23:09.945 [INFO] [Thread-125542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:23:09.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:23:10.570 [DEBUG] [Thread-125542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:23:10.570 [DEBUG] [Thread-125542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:23:10.571 [DEBUG] [Thread-125542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:23:10.611 [DEBUG] [Thread-125542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:23:10.611 [DEBUG] [Thread-125542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:23:10.613 [DEBUG] [Thread-125542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:23:10.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:23:10.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:23:10.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:23:10.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:23:10.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:23:10.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:23:10.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:23:10.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:23:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:23:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.891021 -999.00  +15.60  16.68     40   +2.30 1 1 1 1 1     0    0 13.35 1.01 ZNESW 18.2 16.7 143.4 20.4 15.9 -25.5 15.8 -25.0 15.5 -23.4 15.8 -24.1
2025-12-03T23:23:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:23:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:23:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.891021
2025-12-03T23:23:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:23:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:23:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:23:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:23:10.637 [DEBUG] [Thread-125542] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:23:10.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:23:10.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:22:40', tmtdew=15.32, humidity=34.98, cloud=0.0, wind=23.64, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:22:40', seeing=0.96, atlas_timestamp='2025-12-03T21:23:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:23:10.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:23:10.747 [DEBUG] [Thread-125545] [transport.py] [_log()] starting thread (client mode): 0xa51626e0
2025-12-03T23:23:10.747 [DEBUG] [Thread-125545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:23:10.762 [DEBUG] [Thread-125545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:23:10.762 [INFO] [Thread-125545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:23:10.769 [DEBUG] [Thread-125545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] client lang: <none>
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] server lang: <none>
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] kex follows: False
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:23:10.770 [DEBUG] [Thread-125545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:23:10.771 [DEBUG] [Thread-125545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:23:10.771 [DEBUG] [Thread-125545] [transport.py] [_log()] Compression: none
2025-12-03T23:23:10.771 [DEBUG] [Thread-125545] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:23:10.827 [DEBUG] [Thread-125545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:23:10.827 [DEBUG] [Thread-125545] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:23:10.828 [DEBUG] [Thread-125545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:23:10.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:23:10.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:23:10.883 [DEBUG] [Thread-125545] [transport.py] [_log()] userauth is OK
2025-12-03T23:23:10.883 [DEBUG] [Thread-125545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:23:10.883 [DEBUG] [Thread-125545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:23:10.884 [DEBUG] [Thread-125545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:23:10.884 [DEBUG] [Thread-125545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:23:10.902 [INFO] [Thread-125545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:23:10.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:23:10.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:23:11.776 [DEBUG] [Thread-125545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:23:11.776 [DEBUG] [Thread-125545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:23:11.824 [DEBUG] [Thread-125545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:23:11.824 [DEBUG] [Thread-125545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:23:11.833 [DEBUG] [Thread-125545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:23:11.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:23:11.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:23:11.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:23:11.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:23:11.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:23:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:23:11.867 [DEBUG] [Thread-125545] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:23:12.744 [DEBUG] [Thread-125547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:14.703 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:14.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:15.492 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:19.773 [DEBUG] [Thread-125548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:27.788 [DEBUG] [Thread-125549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:36.043 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:41.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:23:41.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:23:41.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:23:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 23, 12), 15.32, 35.0, 0.0, 22.25, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:23:42.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:23:12
2025-12-03T23:23:42.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:23:42.820 [DEBUG] [Thread-125550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:42.839 [DEBUG] [Thread-125551] [transport.py] [_log()] starting thread (client mode): 0x9fd21c30
2025-12-03T23:23:42.839 [DEBUG] [Thread-125551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:23:42.859 [DEBUG] [Thread-125551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:23:42.859 [INFO] [Thread-125551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] client lang: <none>
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] server lang: <none>
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] kex follows: False
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:23:42.863 [DEBUG] [Thread-125551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:23:42.864 [DEBUG] [Thread-125551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:23:42.864 [DEBUG] [Thread-125551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:23:42.864 [DEBUG] [Thread-125551] [transport.py] [_log()] Compression: none
2025-12-03T23:23:42.864 [DEBUG] [Thread-125551] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:23:42.883 [DEBUG] [Thread-125551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:23:42.883 [DEBUG] [Thread-125551] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:23:42.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:23:42.884 [DEBUG] [Thread-125551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:23:42.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:23:42.886 [DEBUG] [Thread-125551] [transport.py] [_log()] userauth is OK
2025-12-03T23:23:42.886 [DEBUG] [Thread-125551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:23:42.886 [DEBUG] [Thread-125551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:23:42.886 [DEBUG] [Thread-125551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:23:42.886 [DEBUG] [Thread-125551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:23:42.910 [INFO] [Thread-125551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:23:42.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:23:43.557 [DEBUG] [Thread-125551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:23:43.557 [DEBUG] [Thread-125551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:23:43.557 [DEBUG] [Thread-125551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:23:43.598 [DEBUG] [Thread-125551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:23:43.598 [DEBUG] [Thread-125551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:23:43.601 [DEBUG] [Thread-125551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:23:43.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:23:43.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:23:43.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:23:43.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:23:43.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:23:43.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:23:43.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.891021 -999.00  +15.60  16.68     40   +2.30 1 1 1 1 1     0    0 13.35 1.01 ZNESW 18.2 16.7 143.4 20.4 15.9 -25.5 15.8 -25.0 15.5 -23.4 15.8 -24.1
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:23:43.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.891021
2025-12-03T23:23:43.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:23:43.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:23:43.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:23:43.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:23:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:23:43.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:23:12', tmtdew=15.32, humidity=35.0, cloud=0.0, wind=22.25, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:23:12', seeing=1.18, atlas_timestamp='2025-12-03T21:23:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:19:00')
2025-12-03T23:23:43.626 [DEBUG] [Thread-125551] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:23:43.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:23:43.730 [DEBUG] [Thread-125554] [transport.py] [_log()] starting thread (client mode): 0x9fd20e50
2025-12-03T23:23:43.730 [DEBUG] [Thread-125554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:23:43.749 [DEBUG] [Thread-125554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:23:43.749 [INFO] [Thread-125554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] client lang: <none>
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] server lang: <none>
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] kex follows: False
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:23:43.757 [DEBUG] [Thread-125554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:23:43.758 [DEBUG] [Thread-125554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:23:43.758 [DEBUG] [Thread-125554] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:23:43.758 [DEBUG] [Thread-125554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:23:43.758 [DEBUG] [Thread-125554] [transport.py] [_log()] Compression: none
2025-12-03T23:23:43.758 [DEBUG] [Thread-125554] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:23:43.814 [DEBUG] [Thread-125554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:23:43.815 [DEBUG] [Thread-125554] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:23:43.815 [DEBUG] [Thread-125554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:23:43.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:23:43.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:23:43.871 [DEBUG] [Thread-125554] [transport.py] [_log()] userauth is OK
2025-12-03T23:23:43.871 [DEBUG] [Thread-125554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:23:43.871 [DEBUG] [Thread-125554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:23:43.871 [DEBUG] [Thread-125554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:23:43.871 [DEBUG] [Thread-125554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:23:43.890 [INFO] [Thread-125554] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:23:43.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:23:43.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:23:44.717 [DEBUG] [Thread-125554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:23:44.717 [DEBUG] [Thread-125554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:23:44.765 [DEBUG] [Thread-125554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:23:44.765 [DEBUG] [Thread-125554] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:23:44.774 [DEBUG] [Thread-125554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:23:44.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:23:44.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:23:44.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:23:44.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:23:44.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:23:44.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:23:44.806 [DEBUG] [Thread-125554] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:23:56.578 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:23:57.858 [DEBUG] [Thread-125556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:12.922 [DEBUG] [Thread-125557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:14.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:24:14.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:24:14.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:24:14.903 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:14.905 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:15.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 23, 44), 15.32, 35.1, 0.0, 21.4, 15.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:24:15.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:23:44
2025-12-03T23:24:15.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:24:15.783 [DEBUG] [Thread-125558] [transport.py] [_log()] starting thread (client mode): 0xa51ba4d0
2025-12-03T23:24:15.783 [DEBUG] [Thread-125558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:24:15.803 [DEBUG] [Thread-125558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:24:15.804 [INFO] [Thread-125558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:24:15.807 [DEBUG] [Thread-125558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] client lang: <none>
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] server lang: <none>
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] kex follows: False
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] Compression: none
2025-12-03T23:24:15.808 [DEBUG] [Thread-125558] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:24:15.826 [DEBUG] [Thread-125558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:24:15.827 [DEBUG] [Thread-125558] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:24:15.827 [DEBUG] [Thread-125558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:24:15.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:24:15.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:24:15.868 [DEBUG] [Thread-125558] [transport.py] [_log()] userauth is OK
2025-12-03T23:24:15.869 [DEBUG] [Thread-125558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:24:15.869 [DEBUG] [Thread-125558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:24:15.869 [DEBUG] [Thread-125558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:24:15.869 [DEBUG] [Thread-125558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:24:15.901 [INFO] [Thread-125558] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:24:15.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:24:16.528 [DEBUG] [Thread-125558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:24:16.528 [DEBUG] [Thread-125558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:24:16.528 [DEBUG] [Thread-125558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:24:16.569 [DEBUG] [Thread-125558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:24:16.569 [DEBUG] [Thread-125558] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:24:16.571 [DEBUG] [Thread-125558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:24:16.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:24:16.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:24:16.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:24:16.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:24:16.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:24:16.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:24:16.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:24:16.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:24:16.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.891368 -999.00  +15.70  20.25     40   +2.20 1 1 1 1 1     0    0 13.40 1.31 ZNESW 18.8 20.2 145.2 24.9 15.9 -25.4 15.8 -24.9 15.6 -23.1 15.8 -24.1
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.891368
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:24:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:23:44', tmtdew=15.32, humidity=35.1, cloud=0.0, wind=21.4, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:23:44', seeing=1.07, atlas_timestamp='2025-12-03T21:23:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030250000000000554, -0.053749999999999076, -0.03974999999999973, -0.042500000000000426, -0.0129999999999999, -0.10275000000000034, -0.08150000000000013, -0.05424999999999969, 0.030999999999998806, -0.03399999999999892, 0.03524999999999956, -0.05799999999999983, 0.04100000000000037, -0.052250000000000796, -0.04550000000000054, -0.16400000000000148, -0.008749999999999147, 0.016500000000000625, -0.018500000000001293, -0.038750000000000284, 0.01899999999999835, 0.03674999999999784, -0.22775000000000034, -0.0912500000000005, -0.06400000000000006, -0.020500000000000185, -0.09124999999999872, -0.033500000000000085, 0.08200000000000074, 0.038000000000000256, -0.12099999999999866, -0.08000000000000007, -0.019249999999999545], zp_timestamp='2025-12-03T21:23:00')
2025-12-03T23:24:16.590 [DEBUG] [Thread-125558] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:24:16.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:24:17.074 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:19.853 [DEBUG] [Thread-125561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:27.957 [DEBUG] [Thread-125562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:37.568 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:43.017 [DEBUG] [Thread-125563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:58.050 [DEBUG] [Thread-125564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:24:58.058 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:13.088 [DEBUG] [Thread-125565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:15.134 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:15.135 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:18.781 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:19.919 [DEBUG] [Thread-125566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:28.123 [DEBUG] [Thread-125567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:39.267 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:43.159 [DEBUG] [Thread-125568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:58.195 [DEBUG] [Thread-125569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:25:59.672 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:13.228 [DEBUG] [Thread-125570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:15.339 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:15.340 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:19.978 [DEBUG] [Thread-125571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:20.092 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:28.264 [DEBUG] [Thread-125572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:31.830 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-03T23:26:40.561 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:43.296 [DEBUG] [Thread-125573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:26:58.329 [DEBUG] [Thread-125574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:01.180 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:01.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:27:01.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:27:01.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:27:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 26, 56), 15.36, 35.13, 0.0, 25.02, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:27:02.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:26:56
2025-12-03T23:27:02.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:27:02.832 [DEBUG] [Thread-125575] [transport.py] [_log()] starting thread (client mode): 0x9fd21030
2025-12-03T23:27:02.832 [DEBUG] [Thread-125575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:27:02.853 [DEBUG] [Thread-125575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:27:02.853 [INFO] [Thread-125575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:27:02.854 [DEBUG] [Thread-125575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] client lang: <none>
2025-12-03T23:27:02.855 [DEBUG] [Thread-125575] [transport.py] [_log()] server lang: <none>
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] kex follows: False
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] Compression: none
2025-12-03T23:27:02.856 [DEBUG] [Thread-125575] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:27:02.883 [DEBUG] [Thread-125575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:27:02.884 [DEBUG] [Thread-125575] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:27:02.884 [DEBUG] [Thread-125575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:27:02.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:27:02.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:27:02.886 [DEBUG] [Thread-125575] [transport.py] [_log()] userauth is OK
2025-12-03T23:27:02.886 [DEBUG] [Thread-125575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:27:02.886 [DEBUG] [Thread-125575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:27:02.886 [DEBUG] [Thread-125575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:27:02.887 [DEBUG] [Thread-125575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:27:02.910 [INFO] [Thread-125575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:27:02.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:27:03.515 [DEBUG] [Thread-125575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:27:03.515 [DEBUG] [Thread-125575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:27:03.516 [DEBUG] [Thread-125575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:27:03.557 [DEBUG] [Thread-125575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:27:03.557 [DEBUG] [Thread-125575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:27:03.560 [DEBUG] [Thread-125575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:27:03.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:27:03.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:27:03.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:27:03.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:27:03.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:27:03.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:27:03.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:27:03.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.893104 -999.00  +15.70  16.87     40   +2.20 1 1 1 1 1     0    0 13.36 0.30 ZNESW 16.4 16.9 135.2 26.7 15.9 -25.5 15.8 -24.9 15.6 -23.2 15.8 -24.2
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.893104
2025-12-03T23:27:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:27:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:27:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:27:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:27:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:27:03.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:26:56', tmtdew=15.36, humidity=35.13, cloud=0.0, wind=25.02, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:26:57', seeing=1.0, atlas_timestamp='2025-12-03T21:26:04.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:27:03.586 [DEBUG] [Thread-125575] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:27:03.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:27:03.681 [DEBUG] [Thread-125578] [transport.py] [_log()] starting thread (client mode): 0xa51b9270
2025-12-03T23:27:03.681 [DEBUG] [Thread-125578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:27:03.696 [DEBUG] [Thread-125578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:27:03.696 [INFO] [Thread-125578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:27:03.703 [DEBUG] [Thread-125578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:27:03.703 [DEBUG] [Thread-125578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:27:03.703 [DEBUG] [Thread-125578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] client lang: <none>
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] server lang: <none>
2025-12-03T23:27:03.704 [DEBUG] [Thread-125578] [transport.py] [_log()] kex follows: False
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] Compression: none
2025-12-03T23:27:03.705 [DEBUG] [Thread-125578] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:27:03.765 [DEBUG] [Thread-125578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:27:03.765 [DEBUG] [Thread-125578] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:27:03.766 [DEBUG] [Thread-125578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:27:03.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:27:03.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:27:03.821 [DEBUG] [Thread-125578] [transport.py] [_log()] userauth is OK
2025-12-03T23:27:03.821 [DEBUG] [Thread-125578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:27:03.822 [DEBUG] [Thread-125578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:27:03.822 [DEBUG] [Thread-125578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:27:03.822 [DEBUG] [Thread-125578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:27:03.840 [INFO] [Thread-125578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:27:03.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:27:03.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:27:04.669 [DEBUG] [Thread-125578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:27:04.669 [DEBUG] [Thread-125578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:27:04.717 [DEBUG] [Thread-125578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:27:04.717 [DEBUG] [Thread-125578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:27:04.726 [DEBUG] [Thread-125578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:27:04.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:27:04.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:27:04.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:27:04.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:27:04.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:27:04.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:27:04.761 [DEBUG] [Thread-125578] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:27:13.362 [DEBUG] [Thread-125580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:15.555 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:15.556 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:20.031 [DEBUG] [Thread-125581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:21.803 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:28.427 [DEBUG] [Thread-125582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:27:34.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:27:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:27:35.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 27, 29), 15.37, 35.12, 0.0, 25.16, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:27:35.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:27:29
2025-12-03T23:27:35.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:27:35.763 [DEBUG] [Thread-125583] [transport.py] [_log()] starting thread (client mode): 0x9fd22560
2025-12-03T23:27:35.763 [DEBUG] [Thread-125583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:27:35.783 [DEBUG] [Thread-125583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:27:35.783 [INFO] [Thread-125583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:27:35.786 [DEBUG] [Thread-125583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:27:35.786 [DEBUG] [Thread-125583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:27:35.786 [DEBUG] [Thread-125583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:27:35.786 [DEBUG] [Thread-125583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:35.786 [DEBUG] [Thread-125583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] client lang: <none>
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] server lang: <none>
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] kex follows: False
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:27:35.787 [DEBUG] [Thread-125583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:27:35.788 [DEBUG] [Thread-125583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:27:35.788 [DEBUG] [Thread-125583] [transport.py] [_log()] Compression: none
2025-12-03T23:27:35.788 [DEBUG] [Thread-125583] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:27:35.806 [DEBUG] [Thread-125583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:27:35.807 [DEBUG] [Thread-125583] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:27:35.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:27:35.808 [DEBUG] [Thread-125583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:27:35.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:27:35.848 [DEBUG] [Thread-125583] [transport.py] [_log()] userauth is OK
2025-12-03T23:27:35.848 [DEBUG] [Thread-125583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:27:35.849 [DEBUG] [Thread-125583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:27:35.849 [DEBUG] [Thread-125583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:27:35.849 [DEBUG] [Thread-125583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:27:35.884 [INFO] [Thread-125583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:27:35.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:27:36.527 [DEBUG] [Thread-125583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:27:36.527 [DEBUG] [Thread-125583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:27:36.527 [DEBUG] [Thread-125583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:27:36.568 [DEBUG] [Thread-125583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:27:36.568 [DEBUG] [Thread-125583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:27:36.570 [DEBUG] [Thread-125583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:27:36.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:27:36.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:27:36.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:27:36.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:27:36.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:27:36.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:27:36.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:27:36.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:27:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:27:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.893798 -999.00  +15.70  19.43     40   +2.20 1 1 1 1 1     0    0 13.47 0.29 ZNESW 13.3 19.4 136.2 27.8 15.9 -25.6 15.8 -25.0 15.6 -23.2 15.8 -24.1
2025-12-03T23:27:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:27:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:27:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.893798
2025-12-03T23:27:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:27:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:27:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:27:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:27:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:27:36.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:27:29', tmtdew=15.37, humidity=35.12, cloud=0.0, wind=25.16, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:27:29', seeing=0.97, atlas_timestamp='2025-12-03T21:27:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:27:36.596 [DEBUG] [Thread-125583] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:27:36.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:27:36.700 [DEBUG] [Thread-125586] [transport.py] [_log()] starting thread (client mode): 0x9fd23fd0
2025-12-03T23:27:36.700 [DEBUG] [Thread-125586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:27:36.715 [DEBUG] [Thread-125586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:27:36.715 [INFO] [Thread-125586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:27:36.722 [DEBUG] [Thread-125586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] client lang: <none>
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] server lang: <none>
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] kex follows: False
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] Compression: none
2025-12-03T23:27:36.723 [DEBUG] [Thread-125586] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:27:36.780 [DEBUG] [Thread-125586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:27:36.780 [DEBUG] [Thread-125586] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:27:36.781 [DEBUG] [Thread-125586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:27:36.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:27:36.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:27:36.836 [DEBUG] [Thread-125586] [transport.py] [_log()] userauth is OK
2025-12-03T23:27:36.836 [DEBUG] [Thread-125586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:27:36.836 [DEBUG] [Thread-125586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:27:36.837 [DEBUG] [Thread-125586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:27:36.837 [DEBUG] [Thread-125586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:27:36.855 [INFO] [Thread-125586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:27:36.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:27:36.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:27:37.672 [DEBUG] [Thread-125586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:27:37.672 [DEBUG] [Thread-125586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:27:37.720 [DEBUG] [Thread-125586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:27:37.720 [DEBUG] [Thread-125586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:27:37.729 [DEBUG] [Thread-125586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:27:37.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:27:37.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:27:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:27:37.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:27:37.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:27:37.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:27:37.763 [DEBUG] [Thread-125586] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:27:42.335 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:43.467 [DEBUG] [Thread-125588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:27:58.521 [DEBUG] [Thread-125589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:02.785 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:28:07.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:28:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:28:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 28, 1), 15.38, 35.08, 0.0, 24.83, 15.75, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:28:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:28:01
2025-12-03T23:28:08.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:28:08.731 [DEBUG] [Thread-125590] [transport.py] [_log()] starting thread (client mode): 0xa51602b0
2025-12-03T23:28:08.731 [DEBUG] [Thread-125590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:28:08.750 [DEBUG] [Thread-125590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:28:08.750 [INFO] [Thread-125590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:28:08.754 [DEBUG] [Thread-125590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] client lang: <none>
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] server lang: <none>
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] kex follows: False
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] Compression: none
2025-12-03T23:28:08.755 [DEBUG] [Thread-125590] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:28:08.772 [DEBUG] [Thread-125590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:28:08.773 [DEBUG] [Thread-125590] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:28:08.773 [DEBUG] [Thread-125590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:28:08.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:28:08.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:28:08.816 [DEBUG] [Thread-125590] [transport.py] [_log()] userauth is OK
2025-12-03T23:28:08.817 [DEBUG] [Thread-125590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:28:08.817 [DEBUG] [Thread-125590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:28:08.817 [DEBUG] [Thread-125590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:28:08.817 [DEBUG] [Thread-125590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:28:08.838 [INFO] [Thread-125590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:28:08.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:28:09.479 [DEBUG] [Thread-125590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:28:09.479 [DEBUG] [Thread-125590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:28:09.480 [DEBUG] [Thread-125590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:28:09.520 [DEBUG] [Thread-125590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:28:09.520 [DEBUG] [Thread-125590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:28:09.523 [DEBUG] [Thread-125590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:28:09.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:28:09.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:28:09.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:28:09.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:28:09.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:28:09.542 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:28:09.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:28:09.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:28:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:28:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.894146 -999.00  +15.70  16.78     40   +2.20 1 1 1 1 1     0    0 13.49 0.02 ZNESW 17.2 16.8 138.4 23.5 15.9 -25.4 15.8 -24.9 15.6 -23.3 15.8 -24.0
2025-12-03T23:28:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:28:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:28:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.894146
2025-12-03T23:28:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:28:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:28:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:28:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:28:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:28:09.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:28:01', tmtdew=15.38, humidity=35.08, cloud=0.0, wind=24.83, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:28:01', seeing=0.97, atlas_timestamp='2025-12-03T21:27:34.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:28:09.545 [DEBUG] [Thread-125590] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:28:09.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:28:09.646 [DEBUG] [Thread-125593] [transport.py] [_log()] starting thread (client mode): 0x9fd215d0
2025-12-03T23:28:09.646 [DEBUG] [Thread-125593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:28:09.661 [DEBUG] [Thread-125593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:28:09.661 [INFO] [Thread-125593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:28:09.668 [DEBUG] [Thread-125593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] client lang: <none>
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] server lang: <none>
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] kex follows: False
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:28:09.669 [DEBUG] [Thread-125593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:28:09.670 [DEBUG] [Thread-125593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:28:09.670 [DEBUG] [Thread-125593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:28:09.670 [DEBUG] [Thread-125593] [transport.py] [_log()] Compression: none
2025-12-03T23:28:09.670 [DEBUG] [Thread-125593] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:28:09.728 [DEBUG] [Thread-125593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:28:09.728 [DEBUG] [Thread-125593] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:28:09.729 [DEBUG] [Thread-125593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:28:09.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:28:09.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:28:09.784 [DEBUG] [Thread-125593] [transport.py] [_log()] userauth is OK
2025-12-03T23:28:09.784 [DEBUG] [Thread-125593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:28:09.784 [DEBUG] [Thread-125593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:28:09.785 [DEBUG] [Thread-125593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:28:09.785 [DEBUG] [Thread-125593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:28:09.803 [INFO] [Thread-125593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:28:09.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:28:09.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:28:10.631 [DEBUG] [Thread-125593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:28:10.631 [DEBUG] [Thread-125593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:28:10.680 [DEBUG] [Thread-125593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:28:10.680 [DEBUG] [Thread-125593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:28:10.688 [DEBUG] [Thread-125593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:28:10.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:28:10.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:28:10.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:28:10.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:28:10.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:28:10.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:28:10.727 [DEBUG] [Thread-125593] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:28:13.552 [DEBUG] [Thread-125595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:15.768 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:15.776 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:20.104 [DEBUG] [Thread-125596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:23.190 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:28.609 [DEBUG] [Thread-125597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:40.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:28:40.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:28:40.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:28:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 28, 33), 15.37, 35.17, 0.0, 21.38, 15.96, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:28:41.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:28:33
2025-12-03T23:28:41.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:28:41.690 [DEBUG] [Thread-125598] [transport.py] [_log()] starting thread (client mode): 0xa51bbdf0
2025-12-03T23:28:41.690 [DEBUG] [Thread-125598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:28:41.711 [DEBUG] [Thread-125598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:28:41.711 [INFO] [Thread-125598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] client lang: <none>
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] server lang: <none>
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] kex follows: False
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:28:41.714 [DEBUG] [Thread-125598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:28:41.715 [DEBUG] [Thread-125598] [transport.py] [_log()] Compression: none
2025-12-03T23:28:41.715 [DEBUG] [Thread-125598] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:28:41.731 [DEBUG] [Thread-125598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:28:41.732 [DEBUG] [Thread-125598] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:28:41.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:28:41.733 [DEBUG] [Thread-125598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:28:41.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:28:41.734 [DEBUG] [Thread-125598] [transport.py] [_log()] userauth is OK
2025-12-03T23:28:41.735 [DEBUG] [Thread-125598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:28:41.735 [DEBUG] [Thread-125598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:28:41.735 [DEBUG] [Thread-125598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:28:41.735 [DEBUG] [Thread-125598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:28:41.757 [INFO] [Thread-125598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:28:41.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:28:42.384 [DEBUG] [Thread-125598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:28:42.385 [DEBUG] [Thread-125598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:28:42.385 [DEBUG] [Thread-125598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:28:42.426 [DEBUG] [Thread-125598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:28:42.426 [DEBUG] [Thread-125598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:28:42.429 [DEBUG] [Thread-125598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:28:42.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:28:42.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:28:42.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:28:42.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:28:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:28:42.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:28:42.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:28:42.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:28:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:28:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.894493 -999.00  +15.70  16.24     40   +2.20 1 1 1 1 1     0    0 13.57 -0.11 ZNESW 19.6 16.2 140.4 24.7 15.9 -25.4 15.8 -25.0 15.5 -23.1 15.8 -24.0
2025-12-03T23:28:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:28:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:28:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.894493
2025-12-03T23:28:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:28:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:28:42.454 [DEBUG] [Thread-125598] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:28:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:28:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:28:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:28:42.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:28:33', tmtdew=15.37, humidity=35.17, cloud=0.0, wind=21.38, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:28:33', seeing=1.21, atlas_timestamp='2025-12-03T21:28:04.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:28:42.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:28:42.560 [DEBUG] [Thread-125601] [transport.py] [_log()] starting thread (client mode): 0xa5161c00
2025-12-03T23:28:42.560 [DEBUG] [Thread-125601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:28:42.574 [DEBUG] [Thread-125601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:28:42.574 [INFO] [Thread-125601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:28:42.582 [DEBUG] [Thread-125601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] client lang: <none>
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] server lang: <none>
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] kex follows: False
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] Compression: none
2025-12-03T23:28:42.583 [DEBUG] [Thread-125601] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:28:42.639 [DEBUG] [Thread-125601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:28:42.640 [DEBUG] [Thread-125601] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:28:42.640 [DEBUG] [Thread-125601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:28:42.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:28:42.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:28:42.696 [DEBUG] [Thread-125601] [transport.py] [_log()] userauth is OK
2025-12-03T23:28:42.696 [DEBUG] [Thread-125601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:28:42.696 [DEBUG] [Thread-125601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:28:42.696 [DEBUG] [Thread-125601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:28:42.696 [DEBUG] [Thread-125601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:28:42.718 [INFO] [Thread-125601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:28:42.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:28:42.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:28:43.565 [DEBUG] [Thread-125601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:28:43.565 [DEBUG] [Thread-125601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:28:43.589 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:43.613 [DEBUG] [Thread-125601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:28:43.613 [DEBUG] [Thread-125601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:28:43.622 [DEBUG] [Thread-125601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:28:43.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:28:43.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:28:43.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:28:43.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:28:43.648 [DEBUG] [Thread-125603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:28:43.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:28:43.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:28:43.657 [DEBUG] [Thread-125601] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:28:58.708 [DEBUG] [Thread-125604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:04.047 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:13.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:29:13.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:29:13.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:29:13.742 [DEBUG] [Thread-125605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 29, 5), 15.45, 35.05, 0.0, 23.2, 15.81, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:29:14.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:29:05
2025-12-03T23:29:14.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:29:14.671 [DEBUG] [Thread-125606] [transport.py] [_log()] starting thread (client mode): 0x9fd20b20
2025-12-03T23:29:14.671 [DEBUG] [Thread-125606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:29:14.691 [DEBUG] [Thread-125606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:29:14.691 [INFO] [Thread-125606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] client lang: <none>
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] server lang: <none>
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] kex follows: False
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] Compression: none
2025-12-03T23:29:14.694 [DEBUG] [Thread-125606] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:29:14.709 [DEBUG] [Thread-125606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:29:14.709 [DEBUG] [Thread-125606] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:29:14.709 [DEBUG] [Thread-125606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:29:14.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:29:14.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:29:14.710 [DEBUG] [Thread-125606] [transport.py] [_log()] userauth is OK
2025-12-03T23:29:14.710 [DEBUG] [Thread-125606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:29:14.710 [DEBUG] [Thread-125606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:29:14.710 [DEBUG] [Thread-125606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:29:14.710 [DEBUG] [Thread-125606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:29:14.724 [INFO] [Thread-125606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:29:14.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:29:15.488 [DEBUG] [Thread-125606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:29:15.488 [DEBUG] [Thread-125606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:29:15.489 [DEBUG] [Thread-125606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:29:15.530 [DEBUG] [Thread-125606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:29:15.530 [DEBUG] [Thread-125606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:29:15.532 [DEBUG] [Thread-125606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:29:15.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:29:15.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:29:15.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:29:15.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:29:15.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:29:15.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:29:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.894840 -999.00  +15.70  16.14     40   +2.20 1 1 1 1 1     0    0 13.04 -0.08 ZNESW 15.7 16.1 132.8 21.8 15.9 -25.4 15.8 -24.9 15.6 -23.2 15.8 -24.2
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.894840
2025-12-03T23:29:15.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:29:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:29:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:29:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:29:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:29:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:29:05', tmtdew=15.45, humidity=35.05, cloud=0.0, wind=23.2, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:29:06', seeing=1.21, atlas_timestamp='2025-12-03T21:28:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:29:15.550 [DEBUG] [Thread-125606] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:29:15.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:29:15.643 [DEBUG] [Thread-125609] [transport.py] [_log()] starting thread (client mode): 0x9fd22e00
2025-12-03T23:29:15.643 [DEBUG] [Thread-125609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:29:15.657 [DEBUG] [Thread-125609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:29:15.657 [INFO] [Thread-125609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:29:15.665 [DEBUG] [Thread-125609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:29:15.665 [DEBUG] [Thread-125609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:29:15.665 [DEBUG] [Thread-125609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:29:15.665 [DEBUG] [Thread-125609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:15.665 [DEBUG] [Thread-125609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] client lang: <none>
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] server lang: <none>
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] kex follows: False
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] Compression: none
2025-12-03T23:29:15.666 [DEBUG] [Thread-125609] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:29:15.723 [DEBUG] [Thread-125609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:29:15.723 [DEBUG] [Thread-125609] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:29:15.723 [DEBUG] [Thread-125609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:29:15.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:29:15.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:29:15.780 [DEBUG] [Thread-125609] [transport.py] [_log()] userauth is OK
2025-12-03T23:29:15.780 [DEBUG] [Thread-125609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:29:15.780 [DEBUG] [Thread-125609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:29:15.780 [DEBUG] [Thread-125609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:29:15.780 [DEBUG] [Thread-125609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:29:15.801 [INFO] [Thread-125609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:29:15.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:29:15.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:29:15.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:15.977 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:16.647 [DEBUG] [Thread-125609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:29:16.647 [DEBUG] [Thread-125609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:29:16.696 [DEBUG] [Thread-125609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:29:16.696 [DEBUG] [Thread-125609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:29:16.705 [DEBUG] [Thread-125609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:29:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:29:16.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:29:16.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:29:16.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:29:16.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:29:16.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:29:16.742 [DEBUG] [Thread-125609] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:29:20.171 [DEBUG] [Thread-125611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:24.476 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:28.775 [DEBUG] [Thread-125612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:43.830 [DEBUG] [Thread-125613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:44.882 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:29:46.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:29:46.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:29:46.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:29:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 29, 38), 15.42, 34.98, 0.0, 19.89, 15.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:29:47.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:29:38
2025-12-03T23:29:47.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:29:47.713 [DEBUG] [Thread-125614] [transport.py] [_log()] starting thread (client mode): 0xa51b9d20
2025-12-03T23:29:47.713 [DEBUG] [Thread-125614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:29:47.737 [DEBUG] [Thread-125614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:29:47.737 [INFO] [Thread-125614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:29:47.741 [DEBUG] [Thread-125614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:29:47.742 [DEBUG] [Thread-125614] [transport.py] [_log()] client lang: <none>
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] server lang: <none>
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] kex follows: False
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] Compression: none
2025-12-03T23:29:47.743 [DEBUG] [Thread-125614] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:29:47.761 [DEBUG] [Thread-125614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:29:47.762 [DEBUG] [Thread-125614] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:29:47.763 [DEBUG] [Thread-125614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:29:47.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:29:47.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:29:47.764 [DEBUG] [Thread-125614] [transport.py] [_log()] userauth is OK
2025-12-03T23:29:47.764 [DEBUG] [Thread-125614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:29:47.765 [DEBUG] [Thread-125614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:29:47.765 [DEBUG] [Thread-125614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:29:47.765 [DEBUG] [Thread-125614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:29:47.799 [INFO] [Thread-125614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:29:47.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:29:48.433 [DEBUG] [Thread-125614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:29:48.434 [DEBUG] [Thread-125614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:29:48.434 [DEBUG] [Thread-125614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:29:48.475 [DEBUG] [Thread-125614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:29:48.475 [DEBUG] [Thread-125614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:29:48.477 [DEBUG] [Thread-125614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:29:48.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:29:48.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:29:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:29:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:29:48.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:29:48.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:29:48.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.895187 -999.00  +15.70  17.22     40   +2.20 1 1 1 1 1     0    0 13.39 -0.64 ZNESW 15.1 17.2 128.2 18.4 15.9 -25.5 15.7 -24.8 15.5 -23.3 15.8 -24.0
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:29:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.895187
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:29:48.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:29:38', tmtdew=15.42, humidity=34.98, cloud=0.0, wind=19.89, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:29:38', seeing=1.11, atlas_timestamp='2025-12-03T21:29:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:25:00')
2025-12-03T23:29:48.496 [DEBUG] [Thread-125614] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:29:48.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:29:48.587 [DEBUG] [Thread-125617] [transport.py] [_log()] starting thread (client mode): 0xa51b9270
2025-12-03T23:29:48.587 [DEBUG] [Thread-125617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:29:48.602 [DEBUG] [Thread-125617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:29:48.603 [INFO] [Thread-125617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:29:48.610 [DEBUG] [Thread-125617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:29:48.610 [DEBUG] [Thread-125617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:29:48.610 [DEBUG] [Thread-125617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] client lang: <none>
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] server lang: <none>
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] kex follows: False
2025-12-03T23:29:48.611 [DEBUG] [Thread-125617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] Compression: none
2025-12-03T23:29:48.612 [DEBUG] [Thread-125617] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:29:48.668 [DEBUG] [Thread-125617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:29:48.669 [DEBUG] [Thread-125617] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:29:48.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:29:48.670 [DEBUG] [Thread-125617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:29:48.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:29:48.723 [DEBUG] [Thread-125617] [transport.py] [_log()] userauth is OK
2025-12-03T23:29:48.724 [DEBUG] [Thread-125617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:29:48.724 [DEBUG] [Thread-125617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:29:48.724 [DEBUG] [Thread-125617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:29:48.724 [DEBUG] [Thread-125617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:29:48.751 [INFO] [Thread-125617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:29:48.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:29:48.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:29:49.647 [DEBUG] [Thread-125617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:29:49.647 [DEBUG] [Thread-125617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:29:49.694 [DEBUG] [Thread-125617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:29:49.694 [DEBUG] [Thread-125617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:29:49.703 [DEBUG] [Thread-125617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:29:49.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:29:49.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:29:49.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:29:49.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:29:49.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:29:49.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:29:49.737 [DEBUG] [Thread-125617] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:29:58.867 [DEBUG] [Thread-125619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:05.267 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:13.924 [DEBUG] [Thread-125620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:16.184 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:16.185 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:19.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:30:19.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:30:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:30:20.225 [DEBUG] [Thread-125621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 30, 10), 15.39, 35.05, 0.0, 19.6, 15.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:30:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:30:10
2025-12-03T23:30:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:30:20.700 [DEBUG] [Thread-125622] [transport.py] [_log()] starting thread (client mode): 0xa514d960
2025-12-03T23:30:20.700 [DEBUG] [Thread-125622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:30:20.716 [DEBUG] [Thread-125622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:30:20.716 [INFO] [Thread-125622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:30:20.719 [DEBUG] [Thread-125622] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] client lang: <none>
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] server lang: <none>
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] kex follows: False
2025-12-03T23:30:20.720 [DEBUG] [Thread-125622] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] Compression: none
2025-12-03T23:30:20.721 [DEBUG] [Thread-125622] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:30:20.738 [DEBUG] [Thread-125622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:30:20.739 [DEBUG] [Thread-125622] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:30:20.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:30:20.740 [DEBUG] [Thread-125622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:30:20.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:30:20.742 [DEBUG] [Thread-125622] [transport.py] [_log()] userauth is OK
2025-12-03T23:30:20.742 [DEBUG] [Thread-125622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:30:20.742 [DEBUG] [Thread-125622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:30:20.742 [DEBUG] [Thread-125622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:30:20.742 [DEBUG] [Thread-125622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:30:20.759 [INFO] [Thread-125622] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:30:20.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:30:21.361 [DEBUG] [Thread-125622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:30:21.361 [DEBUG] [Thread-125622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:30:21.362 [DEBUG] [Thread-125622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:30:21.402 [DEBUG] [Thread-125622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:30:21.402 [DEBUG] [Thread-125622] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:30:21.404 [DEBUG] [Thread-125622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:30:21.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:30:21.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:30:21.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:30:21.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:30:21.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:30:21.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:30:21.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.895534 -999.00  +15.70  13.54     40   +2.20 1 1 1 1 1     0    0 13.56 -0.90 ZNESW 14.9 13.5 120.8 19.6 15.9 -25.5 15.8 -24.9 15.5 -23.2 15.8 -24.1
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.895534
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:30:21.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:30:10', tmtdew=15.39, humidity=35.05, cloud=0.0, wind=19.6, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:30:10', seeing=1.17, atlas_timestamp='2025-12-03T21:29:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:28:00')
2025-12-03T23:30:21.421 [DEBUG] [Thread-125622] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:30:21.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:30:21.511 [DEBUG] [Thread-125625] [transport.py] [_log()] starting thread (client mode): 0x9fd228c0
2025-12-03T23:30:21.511 [DEBUG] [Thread-125625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:30:21.526 [DEBUG] [Thread-125625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:30:21.526 [INFO] [Thread-125625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] client lang: <none>
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] server lang: <none>
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] kex follows: False
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] Compression: none
2025-12-03T23:30:21.534 [DEBUG] [Thread-125625] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:30:21.590 [DEBUG] [Thread-125625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:30:21.590 [DEBUG] [Thread-125625] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:30:21.590 [DEBUG] [Thread-125625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:30:21.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:30:21.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:30:21.648 [DEBUG] [Thread-125625] [transport.py] [_log()] userauth is OK
2025-12-03T23:30:21.648 [DEBUG] [Thread-125625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:30:21.648 [DEBUG] [Thread-125625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:30:21.648 [DEBUG] [Thread-125625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:30:21.649 [DEBUG] [Thread-125625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:30:21.671 [INFO] [Thread-125625] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:30:21.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:30:21.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:30:22.521 [DEBUG] [Thread-125625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:30:22.522 [DEBUG] [Thread-125625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:30:22.570 [DEBUG] [Thread-125625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:30:22.570 [DEBUG] [Thread-125625] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:30:22.579 [DEBUG] [Thread-125625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:30:22.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:30:22.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:30:22.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:30:22.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:30:22.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:30:22.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:30:22.613 [DEBUG] [Thread-125625] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:30:25.689 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:28.963 [DEBUG] [Thread-125627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:44.017 [DEBUG] [Thread-125628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:46.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:30:52.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:30:52.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:30:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:30:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 30, 42), 15.32, 35.1, 0.0, 23.15, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:30:53.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:30:42
2025-12-03T23:30:53.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:30:53.593 [DEBUG] [Thread-125629] [transport.py] [_log()] starting thread (client mode): 0xa5163bb0
2025-12-03T23:30:53.594 [DEBUG] [Thread-125629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:30:53.613 [DEBUG] [Thread-125629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:30:53.614 [INFO] [Thread-125629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:53.617 [DEBUG] [Thread-125629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] client lang: <none>
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] server lang: <none>
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] kex follows: False
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:30:53.618 [DEBUG] [Thread-125629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:30:53.619 [DEBUG] [Thread-125629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:30:53.619 [DEBUG] [Thread-125629] [transport.py] [_log()] Compression: none
2025-12-03T23:30:53.619 [DEBUG] [Thread-125629] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:30:53.637 [DEBUG] [Thread-125629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:30:53.638 [DEBUG] [Thread-125629] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:30:53.639 [DEBUG] [Thread-125629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:30:53.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:30:53.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:30:53.641 [DEBUG] [Thread-125629] [transport.py] [_log()] userauth is OK
2025-12-03T23:30:53.641 [DEBUG] [Thread-125629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:30:53.641 [DEBUG] [Thread-125629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:30:53.641 [DEBUG] [Thread-125629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:30:53.641 [DEBUG] [Thread-125629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:30:53.663 [INFO] [Thread-125629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:30:53.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:30:54.267 [DEBUG] [Thread-125629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:30:54.267 [DEBUG] [Thread-125629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:30:54.267 [DEBUG] [Thread-125629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:30:54.308 [DEBUG] [Thread-125629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:30:54.308 [DEBUG] [Thread-125629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:30:54.311 [DEBUG] [Thread-125629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:30:54.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:30:54.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:30:54.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:30:54.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:30:54.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:30:54.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.896230 -999.00  +15.70  16.42     40   +2.20 1 1 1 1 1     0    0 13.66 -1.33 ZNESW 17.4 16.4 136.4 24.8 15.9 -25.6 15.7 -25.0 15.5 -23.2 15.8 -24.0
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:30:54.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.896230
2025-12-03T23:30:54.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:30:54.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:30:54.333 [DEBUG] [Thread-125629] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:30:54.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:30:54.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:30:54.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:30:54.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:30:42', tmtdew=15.32, humidity=35.1, cloud=0.0, wind=23.15, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:30:42', seeing=1.29, atlas_timestamp='2025-12-03T21:30:34.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:28:00')
2025-12-03T23:30:54.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:30:54.436 [DEBUG] [Thread-125632] [transport.py] [_log()] starting thread (client mode): 0x9fd22cb0
2025-12-03T23:30:54.436 [DEBUG] [Thread-125632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:30:54.451 [DEBUG] [Thread-125632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:30:54.451 [INFO] [Thread-125632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:30:54.458 [DEBUG] [Thread-125632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] client lang: <none>
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] server lang: <none>
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] kex follows: False
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:30:54.459 [DEBUG] [Thread-125632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:30:54.460 [DEBUG] [Thread-125632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:30:54.460 [DEBUG] [Thread-125632] [transport.py] [_log()] Compression: none
2025-12-03T23:30:54.460 [DEBUG] [Thread-125632] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:30:54.517 [DEBUG] [Thread-125632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:30:54.517 [DEBUG] [Thread-125632] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:30:54.518 [DEBUG] [Thread-125632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:30:54.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:30:54.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:30:54.575 [DEBUG] [Thread-125632] [transport.py] [_log()] userauth is OK
2025-12-03T23:30:54.575 [DEBUG] [Thread-125632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:30:54.575 [DEBUG] [Thread-125632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:30:54.575 [DEBUG] [Thread-125632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:30:54.576 [DEBUG] [Thread-125632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:30:54.594 [INFO] [Thread-125632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:30:54.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:30:54.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:30:55.418 [DEBUG] [Thread-125632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:30:55.418 [DEBUG] [Thread-125632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:30:55.466 [DEBUG] [Thread-125632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:30:55.466 [DEBUG] [Thread-125632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:30:55.475 [DEBUG] [Thread-125632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:30:55.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:30:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:30:55.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:30:55.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:30:55.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:30:55.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:30:55.509 [DEBUG] [Thread-125632] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:30:59.049 [DEBUG] [Thread-125634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:07.067 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:14.103 [DEBUG] [Thread-125635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:16.391 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:16.392 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:20.292 [DEBUG] [Thread-125636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:25.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:31:25.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:31:25.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:31:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 31, 14), 15.31, 35.12, 0.0, 23.52, 15.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:31:26.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:31:14
2025-12-03T23:31:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:31:26.483 [DEBUG] [Thread-125637] [transport.py] [_log()] starting thread (client mode): 0xa2778160
2025-12-03T23:31:26.483 [DEBUG] [Thread-125637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:31:26.504 [DEBUG] [Thread-125637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:31:26.505 [INFO] [Thread-125637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] client lang: <none>
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] server lang: <none>
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] kex follows: False
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:31:26.508 [DEBUG] [Thread-125637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:31:26.509 [DEBUG] [Thread-125637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:31:26.509 [DEBUG] [Thread-125637] [transport.py] [_log()] Compression: none
2025-12-03T23:31:26.509 [DEBUG] [Thread-125637] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:31:26.526 [DEBUG] [Thread-125637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:31:26.526 [DEBUG] [Thread-125637] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:31:26.527 [DEBUG] [Thread-125637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:31:26.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:31:26.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:31:26.529 [DEBUG] [Thread-125637] [transport.py] [_log()] userauth is OK
2025-12-03T23:31:26.529 [DEBUG] [Thread-125637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:31:26.529 [DEBUG] [Thread-125637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:31:26.529 [DEBUG] [Thread-125637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:31:26.529 [DEBUG] [Thread-125637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:31:26.552 [INFO] [Thread-125637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:31:26.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:31:27.191 [DEBUG] [Thread-125637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:31:27.191 [DEBUG] [Thread-125637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:31:27.192 [DEBUG] [Thread-125637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:31:27.231 [DEBUG] [Thread-125637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:31:27.232 [DEBUG] [Thread-125637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:31:27.234 [DEBUG] [Thread-125637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:31:27.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:31:27.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:31:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:31:27.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:31:27.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:31:27.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:31:27.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:31:27.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:31:27.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:31:27.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.896576 -999.00  +15.70  16.57     40   +2.20 1 1 1 1 1     0    0 13.19 -1.10 ZNESW 20.1 16.6 142.6 24.1 15.9 -25.4 15.8 -24.9 15.5 -23.3 15.8 -24.1
2025-12-03T23:31:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:31:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:31:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.896576
2025-12-03T23:31:27.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:31:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:31:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:31:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:31:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:31:27.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:31:14', tmtdew=15.31, humidity=35.12, cloud=0.0, wind=23.52, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:31:14', seeing=1.29, atlas_timestamp='2025-12-03T21:31:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:28:00')
2025-12-03T23:31:27.252 [DEBUG] [Thread-125637] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:31:27.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:31:27.350 [DEBUG] [Thread-125640] [transport.py] [_log()] starting thread (client mode): 0xa2747d00
2025-12-03T23:31:27.350 [DEBUG] [Thread-125640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:31:27.364 [DEBUG] [Thread-125640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:31:27.365 [INFO] [Thread-125640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:27.372 [DEBUG] [Thread-125640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] client lang: <none>
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] server lang: <none>
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] kex follows: False
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] Compression: none
2025-12-03T23:31:27.373 [DEBUG] [Thread-125640] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:31:27.431 [DEBUG] [Thread-125640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:31:27.431 [DEBUG] [Thread-125640] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:31:27.432 [DEBUG] [Thread-125640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:31:27.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:31:27.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:31:27.488 [DEBUG] [Thread-125640] [transport.py] [_log()] userauth is OK
2025-12-03T23:31:27.488 [DEBUG] [Thread-125640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:31:27.488 [DEBUG] [Thread-125640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:31:27.489 [DEBUG] [Thread-125640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:31:27.489 [DEBUG] [Thread-125640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:31:27.511 [INFO] [Thread-125640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:31:27.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:31:27.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:31:27.628 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:28.371 [DEBUG] [Thread-125640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:31:28.371 [DEBUG] [Thread-125640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:31:28.419 [DEBUG] [Thread-125640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:31:28.419 [DEBUG] [Thread-125640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:31:28.431 [DEBUG] [Thread-125640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:31:28.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:31:28.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:31:28.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:31:28.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:31:28.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:31:28.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:31:28.470 [DEBUG] [Thread-125640] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:31:29.139 [DEBUG] [Thread-125642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:44.197 [DEBUG] [Thread-125643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:48.072 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:31:58.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:31:58.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:31:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 31, 46), 15.27, 35.62, 0.0, 22.0, 15.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:31:59.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:31:46
2025-12-03T23:31:59.231 [DEBUG] [Thread-125644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:31:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:31:59.439 [DEBUG] [Thread-125645] [transport.py] [_log()] starting thread (client mode): 0xa2744d90
2025-12-03T23:31:59.439 [DEBUG] [Thread-125645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:31:59.461 [DEBUG] [Thread-125645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:31:59.462 [INFO] [Thread-125645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:31:59.465 [DEBUG] [Thread-125645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:31:59.465 [DEBUG] [Thread-125645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:31:59.465 [DEBUG] [Thread-125645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] client lang: <none>
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] server lang: <none>
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] kex follows: False
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] Compression: none
2025-12-03T23:31:59.466 [DEBUG] [Thread-125645] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:31:59.483 [DEBUG] [Thread-125645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:31:59.484 [DEBUG] [Thread-125645] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:31:59.484 [DEBUG] [Thread-125645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:31:59.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:31:59.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:31:59.486 [DEBUG] [Thread-125645] [transport.py] [_log()] userauth is OK
2025-12-03T23:31:59.486 [DEBUG] [Thread-125645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:31:59.486 [DEBUG] [Thread-125645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:31:59.486 [DEBUG] [Thread-125645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:31:59.486 [DEBUG] [Thread-125645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:31:59.520 [INFO] [Thread-125645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:31:59.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:32:00.185 [DEBUG] [Thread-125645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:32:00.185 [DEBUG] [Thread-125645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:32:00.185 [DEBUG] [Thread-125645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:32:00.226 [DEBUG] [Thread-125645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:32:00.226 [DEBUG] [Thread-125645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:32:00.229 [DEBUG] [Thread-125645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:32:00.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:32:00.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:32:00.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:32:00.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:32:00.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:32:00.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:32:00.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:32:00.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:32:00.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:32:00.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.896923 -999.00  +15.70  20.02     40   +2.20 1 1 1 1 1     0    0 13.54 -1.05 ZNESW 14.5 20.0 131.2 22.4 15.8 -25.6 15.8 -25.0 15.5 -23.4 15.8 -24.4
2025-12-03T23:32:00.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:32:00.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:32:00.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.896923
2025-12-03T23:32:00.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:32:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:32:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:32:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:32:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:32:00.253 [DEBUG] [Thread-125645] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:32:00.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:31:46', tmtdew=15.27, humidity=35.62, cloud=0.0, wind=22.0, temperature=15.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:31:46', seeing=1.29, atlas_timestamp='2025-12-03T21:31:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:28:00')
2025-12-03T23:32:00.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:32:00.375 [DEBUG] [Thread-125648] [transport.py] [_log()] starting thread (client mode): 0x9fd23c10
2025-12-03T23:32:00.375 [DEBUG] [Thread-125648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:32:00.392 [DEBUG] [Thread-125648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:32:00.392 [INFO] [Thread-125648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:32:00.399 [DEBUG] [Thread-125648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] client lang: <none>
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] server lang: <none>
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] kex follows: False
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:32:00.400 [DEBUG] [Thread-125648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:32:00.401 [DEBUG] [Thread-125648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:32:00.401 [DEBUG] [Thread-125648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:32:00.401 [DEBUG] [Thread-125648] [transport.py] [_log()] Compression: none
2025-12-03T23:32:00.401 [DEBUG] [Thread-125648] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:32:00.458 [DEBUG] [Thread-125648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:32:00.459 [DEBUG] [Thread-125648] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:32:00.459 [DEBUG] [Thread-125648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:32:00.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:32:00.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:32:00.515 [DEBUG] [Thread-125648] [transport.py] [_log()] userauth is OK
2025-12-03T23:32:00.515 [DEBUG] [Thread-125648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:32:00.515 [DEBUG] [Thread-125648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:32:00.515 [DEBUG] [Thread-125648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:32:00.515 [DEBUG] [Thread-125648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:32:00.533 [INFO] [Thread-125648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:32:00.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:32:00.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:32:01.397 [DEBUG] [Thread-125648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:32:01.398 [DEBUG] [Thread-125648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:32:01.446 [DEBUG] [Thread-125648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:32:01.446 [DEBUG] [Thread-125648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:32:01.455 [DEBUG] [Thread-125648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:32:01.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:32:01.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:32:01.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:32:01.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:32:01.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:32:01.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:32:01.490 [DEBUG] [Thread-125648] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:32:08.506 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:14.265 [DEBUG] [Thread-125650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:16.592 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:16.593 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:20.349 [DEBUG] [Thread-125651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:28.968 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:29.316 [DEBUG] [Thread-125652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:31.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:32:31.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:32:31.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:32:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 32, 18), 15.27, 35.58, 0.0, 24.1, 15.56, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:32:32.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:32:18
2025-12-03T23:32:32.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:32:32.461 [DEBUG] [Thread-125653] [transport.py] [_log()] starting thread (client mode): 0xa5161c00
2025-12-03T23:32:32.461 [DEBUG] [Thread-125653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:32:32.481 [DEBUG] [Thread-125653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:32:32.481 [INFO] [Thread-125653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:32.484 [DEBUG] [Thread-125653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] client lang: <none>
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] server lang: <none>
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] kex follows: False
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] Compression: none
2025-12-03T23:32:32.485 [DEBUG] [Thread-125653] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:32:32.502 [DEBUG] [Thread-125653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:32:32.502 [DEBUG] [Thread-125653] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:32:32.503 [DEBUG] [Thread-125653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:32:32.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:32:32.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:32:32.505 [DEBUG] [Thread-125653] [transport.py] [_log()] userauth is OK
2025-12-03T23:32:32.505 [DEBUG] [Thread-125653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:32:32.505 [DEBUG] [Thread-125653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:32:32.505 [DEBUG] [Thread-125653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:32:32.505 [DEBUG] [Thread-125653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:32:32.528 [INFO] [Thread-125653] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:32:32.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:32:33.134 [DEBUG] [Thread-125653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:32:33.134 [DEBUG] [Thread-125653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:32:33.134 [DEBUG] [Thread-125653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:32:33.175 [DEBUG] [Thread-125653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:32:33.175 [DEBUG] [Thread-125653] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:32:33.177 [DEBUG] [Thread-125653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:32:33.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:32:33.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:32:33.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:32:33.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:32:33.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:32:33.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:32:33.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:32:33.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:32:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:32:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.897271 -999.00  +15.60  19.26     40   +2.20 1 1 1 1 1     0    0 13.18 -1.64 ZNESW 14.0 19.3 131.2 20.9 15.8 -25.5 15.7 -25.0 15.5 -23.3 15.8 -24.4
2025-12-03T23:32:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:32:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:32:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.897271
2025-12-03T23:32:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:32:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:32:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:32:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:32:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:32:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:32:18', tmtdew=15.27, humidity=35.58, cloud=0.0, wind=24.1, temperature=15.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:32:18', seeing=1.13, atlas_timestamp='2025-12-03T21:32:04.214', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.016250000000001208, -0.040249999999998565, -0.04449999999999932, 0.05349999999999966, -0.07024999999999793, 0.02549999999999919, -0.03874999999999851, -0.0065000000000008384, 0.0129999999999999, 0.02424999999999855, -0.038000000000000256, 0.09399999999999942, -0.023750000000001492, -0.10200000000000031, -0.14250000000000007, 0.05524999999999913, 0.0235000000000003, -0.0129999999999999, -0.03275000000000183, 0.004999999999999005, -0.0002500000000011937, -0.2472499999999993, -0.09024999999999928, -0.030000000000001137, -0.005000000000000782, -0.06174999999999997, -0.0009999999999994458, 0.10249999999999915, 0.19100000000000072, -0.01699999999999946, -0.07249999999999801, -0.03175000000000061], zp_timestamp='2025-12-03T21:28:00')
2025-12-03T23:32:33.201 [DEBUG] [Thread-125653] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:32:33.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:32:33.303 [DEBUG] [Thread-125656] [transport.py] [_log()] starting thread (client mode): 0xa2779090
2025-12-03T23:32:33.304 [DEBUG] [Thread-125656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:32:33.319 [DEBUG] [Thread-125656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:32:33.319 [INFO] [Thread-125656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:32:33.327 [DEBUG] [Thread-125656] [transport.py] [_log()] client lang: <none>
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] server lang: <none>
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] kex follows: False
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] Compression: none
2025-12-03T23:32:33.328 [DEBUG] [Thread-125656] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:32:33.386 [DEBUG] [Thread-125656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:32:33.386 [DEBUG] [Thread-125656] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:32:33.387 [DEBUG] [Thread-125656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:32:33.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:32:33.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:32:33.443 [DEBUG] [Thread-125656] [transport.py] [_log()] userauth is OK
2025-12-03T23:32:33.443 [DEBUG] [Thread-125656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:32:33.443 [DEBUG] [Thread-125656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:32:33.443 [DEBUG] [Thread-125656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:32:33.443 [DEBUG] [Thread-125656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:32:33.462 [INFO] [Thread-125656] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:32:33.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:32:33.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:32:34.320 [DEBUG] [Thread-125656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:32:34.320 [DEBUG] [Thread-125656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:32:34.367 [DEBUG] [Thread-125656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:32:34.367 [DEBUG] [Thread-125656] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:32:34.376 [DEBUG] [Thread-125656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:32:34.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:32:34.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:32:34.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:32:34.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:32:34.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:32:34.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:32:34.409 [DEBUG] [Thread-125656] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:32:44.350 [DEBUG] [Thread-125658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:50.052 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:32:59.405 [DEBUG] [Thread-125659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:04.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:33:04.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:33:04.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:33:05.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 32, 50), 15.27, 35.6, 0.0, 23.89, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:33:05.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:32:50
2025-12-03T23:33:05.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:33:05.431 [DEBUG] [Thread-125660] [transport.py] [_log()] starting thread (client mode): 0xa2746f80
2025-12-03T23:33:05.431 [DEBUG] [Thread-125660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:33:05.451 [DEBUG] [Thread-125660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:33:05.451 [INFO] [Thread-125660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] client lang: <none>
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] server lang: <none>
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] kex follows: False
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:33:05.454 [DEBUG] [Thread-125660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:33:05.455 [DEBUG] [Thread-125660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:33:05.455 [DEBUG] [Thread-125660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:33:05.455 [DEBUG] [Thread-125660] [transport.py] [_log()] Compression: none
2025-12-03T23:33:05.455 [DEBUG] [Thread-125660] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:33:05.467 [DEBUG] [Thread-125660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:33:05.467 [DEBUG] [Thread-125660] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:33:05.467 [DEBUG] [Thread-125660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:33:05.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:33:05.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:33:05.468 [DEBUG] [Thread-125660] [transport.py] [_log()] userauth is OK
2025-12-03T23:33:05.468 [DEBUG] [Thread-125660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:33:05.468 [DEBUG] [Thread-125660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:33:05.468 [DEBUG] [Thread-125660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:33:05.468 [DEBUG] [Thread-125660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:33:05.477 [INFO] [Thread-125660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:33:05.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:33:06.065 [DEBUG] [Thread-125660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:33:06.066 [DEBUG] [Thread-125660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:33:06.066 [DEBUG] [Thread-125660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:33:06.106 [DEBUG] [Thread-125660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:33:06.106 [DEBUG] [Thread-125660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:33:06.108 [DEBUG] [Thread-125660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:33:06.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:33:06.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:33:06.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:33:06.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:33:06.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:33:06.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:33:06.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.897618 -999.00  +15.60  19.25     40   +2.20 1 1 1 1 1     0    0 13.29 -2.13 ZNESW 14.2 19.2 134.6 24.1 15.9 -25.5 15.8 -24.9 15.5 -23.4 15.8 -24.1
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.897618
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:33:06.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:32:50', tmtdew=15.27, humidity=35.6, cloud=0.0, wind=23.89, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:32:50', seeing=1.11, atlas_timestamp='2025-12-03T21:32:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:33:06.127 [DEBUG] [Thread-125660] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:33:06.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:33:06.220 [DEBUG] [Thread-125663] [transport.py] [_log()] starting thread (client mode): 0xa2746920
2025-12-03T23:33:06.220 [DEBUG] [Thread-125663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:33:06.235 [DEBUG] [Thread-125663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:33:06.235 [INFO] [Thread-125663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:33:06.242 [DEBUG] [Thread-125663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:33:06.242 [DEBUG] [Thread-125663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:33:06.242 [DEBUG] [Thread-125663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] client lang: <none>
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] server lang: <none>
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] kex follows: False
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] Compression: none
2025-12-03T23:33:06.243 [DEBUG] [Thread-125663] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:33:06.298 [DEBUG] [Thread-125663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:33:06.298 [DEBUG] [Thread-125663] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:33:06.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:33:06.298 [DEBUG] [Thread-125663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:33:06.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:33:06.354 [DEBUG] [Thread-125663] [transport.py] [_log()] userauth is OK
2025-12-03T23:33:06.354 [DEBUG] [Thread-125663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:33:06.354 [DEBUG] [Thread-125663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:33:06.354 [DEBUG] [Thread-125663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:33:06.354 [DEBUG] [Thread-125663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:33:06.368 [INFO] [Thread-125663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:33:06.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:33:06.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:33:07.214 [DEBUG] [Thread-125663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:33:07.215 [DEBUG] [Thread-125663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:33:07.262 [DEBUG] [Thread-125663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:33:07.262 [DEBUG] [Thread-125663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:33:07.272 [DEBUG] [Thread-125663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:33:07.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:33:07.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:33:07.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:33:07.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:33:07.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:33:07.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:33:07.306 [DEBUG] [Thread-125663] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:33:10.489 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:14.445 [DEBUG] [Thread-125665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:16.794 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:16.796 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:20.413 [DEBUG] [Thread-125666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:29.514 [DEBUG] [Thread-125667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:30.897 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:33:37.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:33:37.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:33:37.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 33, 22), 15.28, 35.57, 0.0, 23.84, 15.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:33:37.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:33:22
2025-12-03T23:33:38.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:33:38.279 [DEBUG] [Thread-125668] [transport.py] [_log()] starting thread (client mode): 0xa27476d0
2025-12-03T23:33:38.279 [DEBUG] [Thread-125668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:33:38.299 [DEBUG] [Thread-125668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:33:38.299 [INFO] [Thread-125668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] client lang: <none>
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] server lang: <none>
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] kex follows: False
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] Compression: none
2025-12-03T23:33:38.302 [DEBUG] [Thread-125668] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:33:38.321 [DEBUG] [Thread-125668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:33:38.321 [DEBUG] [Thread-125668] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:33:38.322 [DEBUG] [Thread-125668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:33:38.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:33:38.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:33:38.323 [DEBUG] [Thread-125668] [transport.py] [_log()] userauth is OK
2025-12-03T23:33:38.324 [DEBUG] [Thread-125668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:33:38.324 [DEBUG] [Thread-125668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:33:38.324 [DEBUG] [Thread-125668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:33:38.324 [DEBUG] [Thread-125668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:33:38.346 [INFO] [Thread-125668] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:33:38.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:33:38.949 [DEBUG] [Thread-125668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:33:38.949 [DEBUG] [Thread-125668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:33:38.949 [DEBUG] [Thread-125668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:33:38.990 [DEBUG] [Thread-125668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:33:38.990 [DEBUG] [Thread-125668] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:33:38.993 [DEBUG] [Thread-125668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:33:39.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:33:39.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:33:39.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:33:39.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:33:39.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:33:39.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:33:39.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.897965 -999.00  +15.60  19.91     40   +2.20 1 1 1 1 1     0    0 13.39 -1.83 ZNESW 18.4 19.9 132.8 23.0 15.8 -25.5 15.7 -25.1 15.5 -23.3 15.8 -24.2
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:33:39.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.897965
2025-12-03T23:33:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:33:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:33:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:33:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:33:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:33:39.017 [DEBUG] [Thread-125668] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:33:39.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:33:22', tmtdew=15.28, humidity=35.57, cloud=0.0, wind=23.84, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:33:22', seeing=1.11, atlas_timestamp='2025-12-03T21:33:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:33:39.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:33:39.118 [DEBUG] [Thread-125671] [transport.py] [_log()] starting thread (client mode): 0xa27474c0
2025-12-03T23:33:39.119 [DEBUG] [Thread-125671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:33:39.133 [DEBUG] [Thread-125671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:33:39.133 [INFO] [Thread-125671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] client lang: <none>
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] server lang: <none>
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] kex follows: False
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:33:39.141 [DEBUG] [Thread-125671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:33:39.142 [DEBUG] [Thread-125671] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:33:39.142 [DEBUG] [Thread-125671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:33:39.142 [DEBUG] [Thread-125671] [transport.py] [_log()] Compression: none
2025-12-03T23:33:39.142 [DEBUG] [Thread-125671] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:33:39.198 [DEBUG] [Thread-125671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:33:39.198 [DEBUG] [Thread-125671] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:33:39.199 [DEBUG] [Thread-125671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:33:39.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:33:39.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:33:39.254 [DEBUG] [Thread-125671] [transport.py] [_log()] userauth is OK
2025-12-03T23:33:39.254 [DEBUG] [Thread-125671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:33:39.255 [DEBUG] [Thread-125671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:33:39.255 [DEBUG] [Thread-125671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:33:39.255 [DEBUG] [Thread-125671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:33:39.273 [INFO] [Thread-125671] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:33:39.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:33:39.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:33:40.080 [DEBUG] [Thread-125671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:33:40.080 [DEBUG] [Thread-125671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:33:40.127 [DEBUG] [Thread-125671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:33:40.128 [DEBUG] [Thread-125671] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:33:40.136 [DEBUG] [Thread-125671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:33:40.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:33:40.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:33:40.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:33:40.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:33:40.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:33:40.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:33:40.171 [DEBUG] [Thread-125671] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:33:44.554 [DEBUG] [Thread-125673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:51.354 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:33:59.602 [DEBUG] [Thread-125674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:10.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:34:10.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:34:10.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:34:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 33, 54), 15.25, 35.15, 0.0, 23.84, 15.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:34:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:33:54
2025-12-03T23:34:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:34:11.125 [DEBUG] [Thread-125675] [transport.py] [_log()] starting thread (client mode): 0xa27453c0
2025-12-03T23:34:11.125 [DEBUG] [Thread-125675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:34:11.145 [DEBUG] [Thread-125675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:34:11.145 [INFO] [Thread-125675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:34:11.148 [DEBUG] [Thread-125675] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:34:11.148 [DEBUG] [Thread-125675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:34:11.148 [DEBUG] [Thread-125675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] client lang: <none>
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] server lang: <none>
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] kex follows: False
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] Compression: none
2025-12-03T23:34:11.149 [DEBUG] [Thread-125675] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:34:11.167 [DEBUG] [Thread-125675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:34:11.167 [DEBUG] [Thread-125675] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:34:11.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:34:11.168 [DEBUG] [Thread-125675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:34:11.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:34:11.170 [DEBUG] [Thread-125675] [transport.py] [_log()] userauth is OK
2025-12-03T23:34:11.170 [DEBUG] [Thread-125675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:34:11.170 [DEBUG] [Thread-125675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:34:11.170 [DEBUG] [Thread-125675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:34:11.170 [DEBUG] [Thread-125675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:34:11.194 [INFO] [Thread-125675] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:34:11.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:34:11.778 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:11.833 [DEBUG] [Thread-125675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:34:11.833 [DEBUG] [Thread-125675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:34:11.833 [DEBUG] [Thread-125675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:34:11.874 [DEBUG] [Thread-125675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:34:11.874 [DEBUG] [Thread-125675] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:34:11.877 [DEBUG] [Thread-125675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:34:11.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:34:11.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:34:11.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:34:11.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:34:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:34:11.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:34:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:34:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:34:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:34:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.897965 -999.00  +15.60  19.91     40   +2.20 1 1 1 1 1     0    0 13.39 -1.83 ZNESW 18.4 19.9 132.8 23.0 15.8 -25.5 15.7 -25.1 15.5 -23.3 15.8 -24.2
2025-12-03T23:34:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:34:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:34:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.897965
2025-12-03T23:34:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:34:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:34:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:34:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:34:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:34:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:33:54', tmtdew=15.25, humidity=35.15, cloud=0.0, wind=23.84, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:33:54', seeing=1.01, atlas_timestamp='2025-12-03T21:33:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:34:11.903 [DEBUG] [Thread-125675] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:34:11.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:34:12.005 [DEBUG] [Thread-125678] [transport.py] [_log()] starting thread (client mode): 0xa2747e80
2025-12-03T23:34:12.006 [DEBUG] [Thread-125678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:34:12.020 [DEBUG] [Thread-125678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:34:12.020 [INFO] [Thread-125678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:34:12.027 [DEBUG] [Thread-125678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:34:12.027 [DEBUG] [Thread-125678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:34:12.027 [DEBUG] [Thread-125678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:34:12.027 [DEBUG] [Thread-125678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] client lang: <none>
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] server lang: <none>
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] kex follows: False
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] Compression: none
2025-12-03T23:34:12.028 [DEBUG] [Thread-125678] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:34:12.086 [DEBUG] [Thread-125678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:34:12.086 [DEBUG] [Thread-125678] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:34:12.087 [DEBUG] [Thread-125678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:34:12.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:34:12.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:34:12.142 [DEBUG] [Thread-125678] [transport.py] [_log()] userauth is OK
2025-12-03T23:34:12.143 [DEBUG] [Thread-125678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:34:12.143 [DEBUG] [Thread-125678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:34:12.143 [DEBUG] [Thread-125678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:34:12.143 [DEBUG] [Thread-125678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:34:12.161 [INFO] [Thread-125678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:34:12.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:34:12.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:34:12.964 [DEBUG] [Thread-125678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:34:12.964 [DEBUG] [Thread-125678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:34:13.012 [DEBUG] [Thread-125678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:34:13.012 [DEBUG] [Thread-125678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:34:13.020 [DEBUG] [Thread-125678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:34:13.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:34:13.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:34:13.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:34:13.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:34:13.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:34:13.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:34:13.055 [DEBUG] [Thread-125678] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:34:14.638 [DEBUG] [Thread-125680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:16.996 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:16.997 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:20.474 [DEBUG] [Thread-125681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:29.693 [DEBUG] [Thread-125682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:32.743 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:43.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:34:43.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:34:43.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:34:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 34, 26), 15.3, 35.02, 0.0, 22.55, 15.62, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:34:43.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:34:26
2025-12-03T23:34:43.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:34:44.026 [DEBUG] [Thread-125683] [transport.py] [_log()] starting thread (client mode): 0xa2746fe0
2025-12-03T23:34:44.026 [DEBUG] [Thread-125683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:34:44.049 [DEBUG] [Thread-125683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:34:44.049 [INFO] [Thread-125683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:34:44.052 [DEBUG] [Thread-125683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:34:44.053 [DEBUG] [Thread-125683] [transport.py] [_log()] client lang: <none>
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] server lang: <none>
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] kex follows: False
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:34:44.054 [DEBUG] [Thread-125683] [transport.py] [_log()] Compression: none
2025-12-03T23:34:44.055 [DEBUG] [Thread-125683] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:34:44.073 [DEBUG] [Thread-125683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:34:44.073 [DEBUG] [Thread-125683] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:34:44.074 [DEBUG] [Thread-125683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:34:44.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:34:44.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:34:44.075 [DEBUG] [Thread-125683] [transport.py] [_log()] userauth is OK
2025-12-03T23:34:44.076 [DEBUG] [Thread-125683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:34:44.076 [DEBUG] [Thread-125683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:34:44.076 [DEBUG] [Thread-125683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:34:44.076 [DEBUG] [Thread-125683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:34:44.111 [INFO] [Thread-125683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:34:44.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:34:44.728 [DEBUG] [Thread-125685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:44.735 [DEBUG] [Thread-125683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:34:44.736 [DEBUG] [Thread-125683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:34:44.736 [DEBUG] [Thread-125683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:34:44.777 [DEBUG] [Thread-125683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:34:44.777 [DEBUG] [Thread-125683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:34:44.780 [DEBUG] [Thread-125683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:34:44.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:34:44.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:34:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:34:44.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:34:44.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:34:44.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:34:44.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:34:44.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.898659 -999.00  +15.60  17.22     40   +2.20 1 1 1 1 1     0    0 13.38 -1.91 ZNESW 17.8 17.2 135.0 24.1 15.9 -25.7 15.8 -25.1 15.5 -23.4 15.8 -24.1
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.898659
2025-12-03T23:34:44.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:34:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:34:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:34:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:34:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:34:44.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:34:26', tmtdew=15.3, humidity=35.02, cloud=0.0, wind=22.55, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:34:26', seeing=1.16, atlas_timestamp='2025-12-03T21:34:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:34:44.805 [DEBUG] [Thread-125683] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:34:44.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:34:44.907 [DEBUG] [Thread-125687] [transport.py] [_log()] starting thread (client mode): 0xa27787f0
2025-12-03T23:34:44.908 [DEBUG] [Thread-125687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:34:44.922 [DEBUG] [Thread-125687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:34:44.922 [INFO] [Thread-125687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:34:44.930 [DEBUG] [Thread-125687] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:34:44.930 [DEBUG] [Thread-125687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:34:44.930 [DEBUG] [Thread-125687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:34:44.930 [DEBUG] [Thread-125687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:44.930 [DEBUG] [Thread-125687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] client lang: <none>
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] server lang: <none>
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] kex follows: False
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:34:44.931 [DEBUG] [Thread-125687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:34:44.932 [DEBUG] [Thread-125687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:34:44.932 [DEBUG] [Thread-125687] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:34:44.932 [DEBUG] [Thread-125687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:34:44.932 [DEBUG] [Thread-125687] [transport.py] [_log()] Compression: none
2025-12-03T23:34:44.932 [DEBUG] [Thread-125687] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:34:44.990 [DEBUG] [Thread-125687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:34:44.991 [DEBUG] [Thread-125687] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:34:44.992 [DEBUG] [Thread-125687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:34:44.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:34:44.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:34:45.046 [DEBUG] [Thread-125687] [transport.py] [_log()] userauth is OK
2025-12-03T23:34:45.046 [DEBUG] [Thread-125687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:34:45.047 [DEBUG] [Thread-125687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:34:45.047 [DEBUG] [Thread-125687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:34:45.047 [DEBUG] [Thread-125687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:34:45.068 [INFO] [Thread-125687] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:34:45.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:34:45.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:34:45.918 [DEBUG] [Thread-125687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:34:45.918 [DEBUG] [Thread-125687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:34:45.966 [DEBUG] [Thread-125687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:34:45.966 [DEBUG] [Thread-125687] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:34:45.975 [DEBUG] [Thread-125687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:34:45.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:34:45.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:34:45.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:34:46.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:34:46.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:34:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:34:46.010 [DEBUG] [Thread-125687] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:34:53.209 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:34:59.770 [DEBUG] [Thread-125689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:13.731 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:14.829 [DEBUG] [Thread-125690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:16.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:35:16.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:35:16.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:35:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 34, 58), 15.3, 35.53, 0.0, 21.84, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:35:16.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:34:58
2025-12-03T23:35:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:35:16.990 [DEBUG] [Thread-125691] [transport.py] [_log()] starting thread (client mode): 0xa2778160
2025-12-03T23:35:16.990 [DEBUG] [Thread-125691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:35:17.010 [DEBUG] [Thread-125691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:35:17.010 [INFO] [Thread-125691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] client lang: <none>
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] server lang: <none>
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] kex follows: False
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:35:17.014 [DEBUG] [Thread-125691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:35:17.015 [DEBUG] [Thread-125691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:35:17.015 [DEBUG] [Thread-125691] [transport.py] [_log()] Compression: none
2025-12-03T23:35:17.015 [DEBUG] [Thread-125691] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:35:17.031 [DEBUG] [Thread-125691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:35:17.032 [DEBUG] [Thread-125691] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:35:17.032 [DEBUG] [Thread-125691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:35:17.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:35:17.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:35:17.034 [DEBUG] [Thread-125691] [transport.py] [_log()] userauth is OK
2025-12-03T23:35:17.034 [DEBUG] [Thread-125691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:35:17.035 [DEBUG] [Thread-125691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:35:17.035 [DEBUG] [Thread-125691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:35:17.035 [DEBUG] [Thread-125691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:35:17.059 [INFO] [Thread-125691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:35:17.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:35:17.197 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:17.198 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:17.689 [DEBUG] [Thread-125691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:35:17.689 [DEBUG] [Thread-125691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:35:17.690 [DEBUG] [Thread-125691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:35:17.731 [DEBUG] [Thread-125691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:35:17.731 [DEBUG] [Thread-125691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:35:17.734 [DEBUG] [Thread-125691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:35:17.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:35:17.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:35:17.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:35:17.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:35:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:35:17.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:35:17.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.899007 -999.00  +15.60  17.05     40   +2.20 1 1 1 1 1     0    0 13.64 -1.97 ZNESW 18.5 17.1 142.2 22.1 15.8 -25.6 15.7 -25.0 15.5 -23.4 15.7 -24.2
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:35:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.899007
2025-12-03T23:35:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:35:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:35:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:35:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:35:17.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:35:17.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:34:58', tmtdew=15.3, humidity=35.53, cloud=0.0, wind=21.84, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:34:59', seeing=1.02, atlas_timestamp='2025-12-03T21:34:34.205', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:35:17.761 [DEBUG] [Thread-125691] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:35:17.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:35:17.863 [DEBUG] [Thread-125694] [transport.py] [_log()] starting thread (client mode): 0xa277a950
2025-12-03T23:35:17.863 [DEBUG] [Thread-125694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:35:17.878 [DEBUG] [Thread-125694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:35:17.878 [INFO] [Thread-125694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:35:17.886 [DEBUG] [Thread-125694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:35:17.886 [DEBUG] [Thread-125694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:35:17.886 [DEBUG] [Thread-125694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:35:17.886 [DEBUG] [Thread-125694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:17.886 [DEBUG] [Thread-125694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] client lang: <none>
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] server lang: <none>
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] kex follows: False
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:35:17.887 [DEBUG] [Thread-125694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:35:17.888 [DEBUG] [Thread-125694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:35:17.888 [DEBUG] [Thread-125694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:35:17.888 [DEBUG] [Thread-125694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:35:17.888 [DEBUG] [Thread-125694] [transport.py] [_log()] Compression: none
2025-12-03T23:35:17.888 [DEBUG] [Thread-125694] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:35:17.946 [DEBUG] [Thread-125694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:35:17.947 [DEBUG] [Thread-125694] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:35:17.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:35:17.947 [DEBUG] [Thread-125694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:35:17.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:35:18.002 [DEBUG] [Thread-125694] [transport.py] [_log()] userauth is OK
2025-12-03T23:35:18.003 [DEBUG] [Thread-125694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:35:18.003 [DEBUG] [Thread-125694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:35:18.003 [DEBUG] [Thread-125694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:35:18.003 [DEBUG] [Thread-125694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:35:18.020 [INFO] [Thread-125694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:35:18.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:35:18.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:35:18.860 [DEBUG] [Thread-125694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:35:18.860 [DEBUG] [Thread-125694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:35:18.909 [DEBUG] [Thread-125694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:35:18.909 [DEBUG] [Thread-125694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:35:18.920 [DEBUG] [Thread-125694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:35:18.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:35:18.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:35:18.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:35:18.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:35:18.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:35:18.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:35:18.960 [DEBUG] [Thread-125694] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:35:20.534 [DEBUG] [Thread-125696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:29.864 [DEBUG] [Thread-125697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:34.152 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:44.918 [DEBUG] [Thread-125698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:48.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:35:48.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:35:48.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:35:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 35, 31), 15.28, 35.58, 0.0, 22.27, 15.66, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:35:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:35:31
2025-12-03T23:35:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:35:49.932 [DEBUG] [Thread-125699] [transport.py] [_log()] starting thread (client mode): 0xa2779d50
2025-12-03T23:35:49.932 [DEBUG] [Thread-125699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:35:49.953 [DEBUG] [Thread-125699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:35:49.953 [INFO] [Thread-125699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] client lang: <none>
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] server lang: <none>
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] kex follows: False
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:35:49.956 [DEBUG] [Thread-125699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:35:49.957 [DEBUG] [Thread-125699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:35:49.957 [DEBUG] [Thread-125699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:35:49.957 [DEBUG] [Thread-125699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:35:49.957 [DEBUG] [Thread-125699] [transport.py] [_log()] Compression: none
2025-12-03T23:35:49.957 [DEBUG] [Thread-125699] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:35:49.975 [DEBUG] [Thread-125699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:35:49.975 [DEBUG] [Thread-125699] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:35:49.976 [DEBUG] [Thread-125699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:35:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:35:49.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:35:49.978 [DEBUG] [Thread-125699] [transport.py] [_log()] userauth is OK
2025-12-03T23:35:49.978 [DEBUG] [Thread-125699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:35:49.978 [DEBUG] [Thread-125699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:35:49.978 [DEBUG] [Thread-125699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:35:49.979 [DEBUG] [Thread-125699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:35:50.002 [INFO] [Thread-125699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:35:50.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:35:50.658 [DEBUG] [Thread-125699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:35:50.658 [DEBUG] [Thread-125699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:35:50.658 [DEBUG] [Thread-125699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:35:50.699 [DEBUG] [Thread-125699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:35:50.699 [DEBUG] [Thread-125699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:35:50.702 [DEBUG] [Thread-125699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:35:50.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:35:50.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:35:50.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:35:50.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:35:50.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:35:50.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:35:50.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:35:50.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.899353 -999.00  +15.50  17.60     40   +2.20 1 1 1 1 1     0    0 13.23 -2.09 ZNESW 17.8 17.6 147.2 25.4 15.8 -25.6 15.7 -25.0 15.4 -23.4 15.8 -24.3
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.899353
2025-12-03T23:35:50.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:35:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:35:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:35:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:35:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:35:50.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:35:31', tmtdew=15.28, humidity=35.58, cloud=0.0, wind=22.27, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:35:32', seeing=1.1, atlas_timestamp='2025-12-03T21:35:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.051249999999999574, 0.04875000000000007, 0.05549999999999855, 0.01750000000000007, 0.05525000000000091, -0.03200000000000003, 0.023749999999999716, -0.04200000000000159, 0.020500000000000185, 0.04124999999999979, 0.0235000000000003, 0.09999999999999964, 0.04324999999999868, -0.021000000000000796, -0.15600000000000058, 0.051249999999999574, 0.050499999999999545, 0.03500000000000014, 0.01774999999999949, 0.08599999999999852, 0.05224999999999902, -0.15724999999999767, -0.03625000000000078, 0.03799999999999848, 0.022499999999999076, -0.004250000000000753, 0.04150000000000098, 0.11899999999999977, 0.15300000000000047, 0.006000000000000227, -0.07600000000000051, 0.035749999999998394], zp_timestamp='2025-12-03T21:32:00')
2025-12-03T23:35:50.726 [DEBUG] [Thread-125699] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:35:50.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:35:50.840 [DEBUG] [Thread-125702] [transport.py] [_log()] starting thread (client mode): 0xa2778c70
2025-12-03T23:35:50.840 [DEBUG] [Thread-125702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:35:50.855 [DEBUG] [Thread-125702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:35:50.856 [INFO] [Thread-125702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:35:50.863 [DEBUG] [Thread-125702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:35:50.863 [DEBUG] [Thread-125702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:35:50.863 [DEBUG] [Thread-125702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:35:50.863 [DEBUG] [Thread-125702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:50.863 [DEBUG] [Thread-125702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] client lang: <none>
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] server lang: <none>
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] kex follows: False
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:35:50.864 [DEBUG] [Thread-125702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:35:50.865 [DEBUG] [Thread-125702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:35:50.865 [DEBUG] [Thread-125702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:35:50.865 [DEBUG] [Thread-125702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:35:50.865 [DEBUG] [Thread-125702] [transport.py] [_log()] Compression: none
2025-12-03T23:35:50.865 [DEBUG] [Thread-125702] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:35:50.922 [DEBUG] [Thread-125702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:35:50.923 [DEBUG] [Thread-125702] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:35:50.923 [DEBUG] [Thread-125702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:35:50.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:35:50.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:35:50.978 [DEBUG] [Thread-125702] [transport.py] [_log()] userauth is OK
2025-12-03T23:35:50.979 [DEBUG] [Thread-125702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:35:50.979 [DEBUG] [Thread-125702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:35:50.979 [DEBUG] [Thread-125702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:35:50.979 [DEBUG] [Thread-125702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:35:50.997 [INFO] [Thread-125702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:35:50.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:35:50.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:35:51.874 [DEBUG] [Thread-125702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:35:51.874 [DEBUG] [Thread-125702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:35:51.922 [DEBUG] [Thread-125702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:35:51.922 [DEBUG] [Thread-125702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:35:51.931 [DEBUG] [Thread-125702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:35:51.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:35:51.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:35:51.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:35:51.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:35:51.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:35:51.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:35:51.966 [DEBUG] [Thread-125702] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:35:54.753 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:35:59.951 [DEBUG] [Thread-125704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:15.006 [DEBUG] [Thread-125705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:15.157 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:17.405 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:17.406 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:20.586 [DEBUG] [Thread-125706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:21.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:36:21.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:36:21.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:36:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 36, 4), 15.28, 35.57, 0.0, 21.46, 15.61, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:36:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:36:04
2025-12-03T23:36:22.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:36:23.008 [DEBUG] [Thread-125707] [transport.py] [_log()] starting thread (client mode): 0xa2779d20
2025-12-03T23:36:23.008 [DEBUG] [Thread-125707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:36:23.028 [DEBUG] [Thread-125707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:36:23.028 [INFO] [Thread-125707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] client lang: <none>
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] server lang: <none>
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] kex follows: False
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] Compression: none
2025-12-03T23:36:23.031 [DEBUG] [Thread-125707] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:36:23.045 [DEBUG] [Thread-125707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:36:23.045 [DEBUG] [Thread-125707] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:36:23.045 [DEBUG] [Thread-125707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:36:23.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:36:23.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:36:23.046 [DEBUG] [Thread-125707] [transport.py] [_log()] userauth is OK
2025-12-03T23:36:23.046 [DEBUG] [Thread-125707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:36:23.046 [DEBUG] [Thread-125707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:36:23.046 [DEBUG] [Thread-125707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:36:23.046 [DEBUG] [Thread-125707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:36:23.061 [INFO] [Thread-125707] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:36:23.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:36:23.694 [DEBUG] [Thread-125707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:36:23.694 [DEBUG] [Thread-125707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:36:23.694 [DEBUG] [Thread-125707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:36:23.735 [DEBUG] [Thread-125707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:36:23.735 [DEBUG] [Thread-125707] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:36:23.737 [DEBUG] [Thread-125707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:36:23.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:36:23.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:36:23.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:36:23.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:36:23.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:36:23.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:36:23.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.899701 -999.00  +15.60  17.81     40   +2.20 1 1 1 1 1     0    0 13.37 -1.90 ZNESW 16.2 17.8 139.0 22.1 15.8 -25.6 15.7 -25.1 15.5 -23.4 15.8 -24.4
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.899701
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:36:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:36:04', tmtdew=15.28, humidity=35.57, cloud=0.0, wind=21.46, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:36:04', seeing=1.0, atlas_timestamp='2025-12-03T21:35:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:34:00')
2025-12-03T23:36:23.758 [DEBUG] [Thread-125707] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:36:23.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:36:23.849 [DEBUG] [Thread-125710] [transport.py] [_log()] starting thread (client mode): 0xa2746860
2025-12-03T23:36:23.849 [DEBUG] [Thread-125710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:36:23.865 [DEBUG] [Thread-125710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:36:23.865 [INFO] [Thread-125710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] client lang: <none>
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] server lang: <none>
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] kex follows: False
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] Compression: none
2025-12-03T23:36:23.872 [DEBUG] [Thread-125710] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:36:23.928 [DEBUG] [Thread-125710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:36:23.929 [DEBUG] [Thread-125710] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:36:23.929 [DEBUG] [Thread-125710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:36:23.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:36:23.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:36:23.986 [DEBUG] [Thread-125710] [transport.py] [_log()] userauth is OK
2025-12-03T23:36:23.986 [DEBUG] [Thread-125710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:36:23.986 [DEBUG] [Thread-125710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:36:23.986 [DEBUG] [Thread-125710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:36:23.986 [DEBUG] [Thread-125710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:36:24.000 [INFO] [Thread-125710] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:36:24.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:36:24.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:36:24.858 [DEBUG] [Thread-125710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:36:24.859 [DEBUG] [Thread-125710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:36:24.907 [DEBUG] [Thread-125710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:36:24.907 [DEBUG] [Thread-125710] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:36:24.916 [DEBUG] [Thread-125710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:36:24.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:36:24.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:36:24.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:36:24.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:36:24.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:36:24.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:36:24.951 [DEBUG] [Thread-125710] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:36:30.040 [DEBUG] [Thread-125712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:35.623 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:45.094 [DEBUG] [Thread-125713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:54.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:36:54.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:36:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:36:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 36, 36), 15.18, 35.58, 0.0, 22.71, 15.53, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:36:55.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:36:36
2025-12-03T23:36:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:36:55.905 [DEBUG] [Thread-125714] [transport.py] [_log()] starting thread (client mode): 0xa514fc10
2025-12-03T23:36:55.906 [DEBUG] [Thread-125714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:36:55.926 [DEBUG] [Thread-125714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:36:55.926 [INFO] [Thread-125714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] client lang: <none>
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] server lang: <none>
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] kex follows: False
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] Compression: none
2025-12-03T23:36:55.929 [DEBUG] [Thread-125714] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:36:55.944 [DEBUG] [Thread-125714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:36:55.945 [DEBUG] [Thread-125714] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:36:55.945 [DEBUG] [Thread-125714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:36:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:36:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:36:55.946 [DEBUG] [Thread-125714] [transport.py] [_log()] userauth is OK
2025-12-03T23:36:55.946 [DEBUG] [Thread-125714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:36:55.946 [DEBUG] [Thread-125714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:36:55.946 [DEBUG] [Thread-125714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:36:55.946 [DEBUG] [Thread-125714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:36:55.964 [INFO] [Thread-125714] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:36:55.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:36:56.181 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:36:56.626 [DEBUG] [Thread-125714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:36:56.626 [DEBUG] [Thread-125714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:36:56.627 [DEBUG] [Thread-125714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:36:56.667 [DEBUG] [Thread-125714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:36:56.667 [DEBUG] [Thread-125714] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:36:56.670 [DEBUG] [Thread-125714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:36:56.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:36:56.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:36:56.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:36:56.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:36:56.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:36:56.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:36:56.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.900048 -999.00  +15.60  17.84     40   +2.20 1 1 1 1 1     0    0 13.45 -1.50 ZNESW 16.7 17.8 134.0 20.8 15.9 -25.7 15.7 -25.1 15.4 -23.5 15.8 -24.4
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:36:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.900048
2025-12-03T23:36:56.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:36:56.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:36:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:36:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:36:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:36:56.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:36:36', tmtdew=15.18, humidity=35.58, cloud=0.0, wind=22.71, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:36:36', seeing=1.0, atlas_timestamp='2025-12-03T21:36:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:34:00')
2025-12-03T23:36:56.694 [DEBUG] [Thread-125714] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:36:56.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:36:56.797 [DEBUG] [Thread-125717] [transport.py] [_log()] starting thread (client mode): 0xa514fdc0
2025-12-03T23:36:56.797 [DEBUG] [Thread-125717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:36:56.812 [DEBUG] [Thread-125717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:36:56.812 [INFO] [Thread-125717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:36:56.819 [DEBUG] [Thread-125717] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:36:56.819 [DEBUG] [Thread-125717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:36:56.819 [DEBUG] [Thread-125717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:36:56.819 [DEBUG] [Thread-125717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:56.819 [DEBUG] [Thread-125717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] client lang: <none>
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] server lang: <none>
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] kex follows: False
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] Compression: none
2025-12-03T23:36:56.820 [DEBUG] [Thread-125717] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:36:56.877 [DEBUG] [Thread-125717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:36:56.877 [DEBUG] [Thread-125717] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:36:56.877 [DEBUG] [Thread-125717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:36:56.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:36:56.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:36:56.934 [DEBUG] [Thread-125717] [transport.py] [_log()] userauth is OK
2025-12-03T23:36:56.934 [DEBUG] [Thread-125717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:36:56.934 [DEBUG] [Thread-125717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:36:56.934 [DEBUG] [Thread-125717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:36:56.934 [DEBUG] [Thread-125717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:36:56.948 [INFO] [Thread-125717] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:36:56.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:36:56.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:36:57.787 [DEBUG] [Thread-125717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:36:57.787 [DEBUG] [Thread-125717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:36:57.835 [DEBUG] [Thread-125717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:36:57.835 [DEBUG] [Thread-125717] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:36:57.843 [DEBUG] [Thread-125717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:36:57.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:36:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:36:57.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:36:57.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:36:57.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:36:57.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:36:57.875 [DEBUG] [Thread-125717] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:37:00.130 [DEBUG] [Thread-125719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:15.180 [DEBUG] [Thread-125720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:16.939 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:17.610 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:17.611 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:20.657 [DEBUG] [Thread-125721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:27.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:37:27.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:37:27.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:37:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 37, 8), 15.16, 35.63, 0.0, 24.01, 15.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:37:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:37:08
2025-12-03T23:37:28.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:37:28.849 [DEBUG] [Thread-125722] [transport.py] [_log()] starting thread (client mode): 0xa2779d20
2025-12-03T23:37:28.849 [DEBUG] [Thread-125722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:37:28.869 [DEBUG] [Thread-125722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:37:28.869 [INFO] [Thread-125722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:37:28.872 [DEBUG] [Thread-125722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] client lang: <none>
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] server lang: <none>
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] kex follows: False
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] Compression: none
2025-12-03T23:37:28.873 [DEBUG] [Thread-125722] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:37:28.890 [DEBUG] [Thread-125722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:37:28.891 [DEBUG] [Thread-125722] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:37:28.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:37:28.892 [DEBUG] [Thread-125722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:37:28.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:37:28.893 [DEBUG] [Thread-125722] [transport.py] [_log()] userauth is OK
2025-12-03T23:37:28.893 [DEBUG] [Thread-125722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:37:28.893 [DEBUG] [Thread-125722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:37:28.893 [DEBUG] [Thread-125722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:37:28.893 [DEBUG] [Thread-125722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:37:28.911 [INFO] [Thread-125722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:37:28.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:37:29.535 [DEBUG] [Thread-125722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:37:29.535 [DEBUG] [Thread-125722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:37:29.536 [DEBUG] [Thread-125722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:37:29.576 [DEBUG] [Thread-125722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:37:29.576 [DEBUG] [Thread-125722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:37:29.579 [DEBUG] [Thread-125722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:37:29.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:37:29.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:37:29.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:37:29.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:37:29.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:37:29.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:37:29.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:37:29.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.900395 -999.00  +15.60  17.01     40   +2.20 1 1 1 1 1     0    0 13.26 -1.45 ZNESW 16.8 17.0 144.0 24.4 15.8 -25.6 15.8 -25.2 15.5 -23.4 15.7 -24.6
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.900395
2025-12-03T23:37:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:37:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:37:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:37:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:37:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:37:29.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:37:08', tmtdew=15.16, humidity=35.63, cloud=0.0, wind=24.01, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:37:08', seeing=1.01, atlas_timestamp='2025-12-03T21:36:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:34:00')
2025-12-03T23:37:29.600 [DEBUG] [Thread-125722] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:37:29.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:37:29.702 [DEBUG] [Thread-125725] [transport.py] [_log()] starting thread (client mode): 0xa277af80
2025-12-03T23:37:29.703 [DEBUG] [Thread-125725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:37:29.717 [DEBUG] [Thread-125725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:37:29.717 [INFO] [Thread-125725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] client lang: <none>
2025-12-03T23:37:29.725 [DEBUG] [Thread-125725] [transport.py] [_log()] server lang: <none>
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] kex follows: False
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] Compression: none
2025-12-03T23:37:29.726 [DEBUG] [Thread-125725] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:37:29.786 [DEBUG] [Thread-125725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:37:29.786 [DEBUG] [Thread-125725] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:37:29.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:37:29.787 [DEBUG] [Thread-125725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:37:29.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:37:29.842 [DEBUG] [Thread-125725] [transport.py] [_log()] userauth is OK
2025-12-03T23:37:29.842 [DEBUG] [Thread-125725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:37:29.842 [DEBUG] [Thread-125725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:37:29.842 [DEBUG] [Thread-125725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:37:29.843 [DEBUG] [Thread-125725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:37:29.862 [INFO] [Thread-125725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:37:29.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:37:29.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:37:30.221 [DEBUG] [Thread-125727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:30.730 [DEBUG] [Thread-125725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:37:30.730 [DEBUG] [Thread-125725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:37:30.778 [DEBUG] [Thread-125725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:37:30.778 [DEBUG] [Thread-125725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:37:30.787 [DEBUG] [Thread-125725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:37:30.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:37:30.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:37:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:37:30.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:37:30.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:37:30.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:37:30.823 [DEBUG] [Thread-125725] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:37:38.015 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:45.287 [DEBUG] [Thread-125728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:37:58.735 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:00.323 [DEBUG] [Thread-125729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:00.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:38:00.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:38:00.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:38:01.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 37, 40), 15.14, 35.68, 0.0, 22.21, 15.5, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:38:01.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:37:40
2025-12-03T23:38:01.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:38:01.803 [DEBUG] [Thread-125730] [transport.py] [_log()] starting thread (client mode): 0xa27478e0
2025-12-03T23:38:01.803 [DEBUG] [Thread-125730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:38:01.822 [DEBUG] [Thread-125730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:38:01.822 [INFO] [Thread-125730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:38:01.825 [DEBUG] [Thread-125730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:38:01.826 [DEBUG] [Thread-125730] [transport.py] [_log()] client lang: <none>
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] server lang: <none>
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] kex follows: False
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:38:01.827 [DEBUG] [Thread-125730] [transport.py] [_log()] Compression: none
2025-12-03T23:38:01.828 [DEBUG] [Thread-125730] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:38:01.849 [DEBUG] [Thread-125730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:38:01.850 [DEBUG] [Thread-125730] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:38:01.850 [DEBUG] [Thread-125730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:38:01.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:38:01.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:38:01.852 [DEBUG] [Thread-125730] [transport.py] [_log()] userauth is OK
2025-12-03T23:38:01.852 [DEBUG] [Thread-125730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:38:01.852 [DEBUG] [Thread-125730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:38:01.852 [DEBUG] [Thread-125730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:38:01.852 [DEBUG] [Thread-125730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:38:01.876 [INFO] [Thread-125730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:38:01.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:38:02.532 [DEBUG] [Thread-125730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:38:02.533 [DEBUG] [Thread-125730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:38:02.533 [DEBUG] [Thread-125730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:38:02.574 [DEBUG] [Thread-125730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:38:02.574 [DEBUG] [Thread-125730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:38:02.577 [DEBUG] [Thread-125730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:38:02.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:38:02.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:38:02.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:38:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:38:02.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:38:02.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:38:02.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:38:02.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:38:02.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:38:02.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.901090 -999.00  +15.50  15.93     40   +2.20 1 1 1 1 1     0    0 13.28 -2.70 ZNESW 14.6 15.9 135.2 22.8 15.8 -25.7 15.7 -25.1 15.4 -23.5 15.7 -24.5
2025-12-03T23:38:02.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:38:02.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:38:02.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.901090
2025-12-03T23:38:02.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:38:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:38:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:38:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:38:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:38:02.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:37:40', tmtdew=15.14, humidity=35.68, cloud=0.0, wind=22.21, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:37:40', seeing=1.01, atlas_timestamp='2025-12-03T21:37:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:34:00')
2025-12-03T23:38:02.603 [DEBUG] [Thread-125730] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:38:02.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:38:02.725 [DEBUG] [Thread-125733] [transport.py] [_log()] starting thread (client mode): 0xa2746110
2025-12-03T23:38:02.725 [DEBUG] [Thread-125733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:38:02.739 [DEBUG] [Thread-125733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:38:02.739 [INFO] [Thread-125733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:38:02.749 [DEBUG] [Thread-125733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] client lang: <none>
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] server lang: <none>
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] kex follows: False
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:38:02.750 [DEBUG] [Thread-125733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:38:02.751 [DEBUG] [Thread-125733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:38:02.751 [DEBUG] [Thread-125733] [transport.py] [_log()] Compression: none
2025-12-03T23:38:02.751 [DEBUG] [Thread-125733] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:38:02.810 [DEBUG] [Thread-125733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:38:02.810 [DEBUG] [Thread-125733] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:38:02.811 [DEBUG] [Thread-125733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:38:02.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:38:02.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:38:02.866 [DEBUG] [Thread-125733] [transport.py] [_log()] userauth is OK
2025-12-03T23:38:02.866 [DEBUG] [Thread-125733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:38:02.866 [DEBUG] [Thread-125733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:38:02.866 [DEBUG] [Thread-125733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:38:02.866 [DEBUG] [Thread-125733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:38:02.885 [INFO] [Thread-125733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:38:02.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:38:02.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:38:03.732 [DEBUG] [Thread-125733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:38:03.732 [DEBUG] [Thread-125733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:38:03.781 [DEBUG] [Thread-125733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:38:03.781 [DEBUG] [Thread-125733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:38:03.790 [DEBUG] [Thread-125733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:38:03.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:38:03.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:38:03.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:38:03.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:38:03.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:38:03.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:38:03.824 [DEBUG] [Thread-125733] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:38:15.354 [DEBUG] [Thread-125735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:17.812 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:17.813 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:19.116 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:20.734 [DEBUG] [Thread-125736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:30.410 [DEBUG] [Thread-125737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:38:33.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:38:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:38:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 38, 12), 15.13, 35.68, 0.0, 22.25, 15.45, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:38:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:38:12
2025-12-03T23:38:34.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:38:34.778 [DEBUG] [Thread-125738] [transport.py] [_log()] starting thread (client mode): 0xa27451b0
2025-12-03T23:38:34.778 [DEBUG] [Thread-125738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:38:34.799 [DEBUG] [Thread-125738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:38:34.799 [INFO] [Thread-125738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] client lang: <none>
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] server lang: <none>
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] kex follows: False
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:38:34.802 [DEBUG] [Thread-125738] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:38:34.803 [DEBUG] [Thread-125738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:38:34.803 [DEBUG] [Thread-125738] [transport.py] [_log()] Compression: none
2025-12-03T23:38:34.803 [DEBUG] [Thread-125738] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:38:34.821 [DEBUG] [Thread-125738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:38:34.822 [DEBUG] [Thread-125738] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:38:34.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:38:34.823 [DEBUG] [Thread-125738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:38:34.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:38:34.824 [DEBUG] [Thread-125738] [transport.py] [_log()] userauth is OK
2025-12-03T23:38:34.824 [DEBUG] [Thread-125738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:38:34.824 [DEBUG] [Thread-125738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:38:34.825 [DEBUG] [Thread-125738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:38:34.825 [DEBUG] [Thread-125738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:38:34.843 [INFO] [Thread-125738] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:38:34.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:38:35.529 [DEBUG] [Thread-125738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:38:35.529 [DEBUG] [Thread-125738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:38:35.529 [DEBUG] [Thread-125738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:38:35.570 [DEBUG] [Thread-125738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:38:35.570 [DEBUG] [Thread-125738] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:38:35.573 [DEBUG] [Thread-125738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:38:35.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:38:35.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:38:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:38:35.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:38:35.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:38:35.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.901437 -999.00  +15.50  16.65     40   +2.20 1 1 1 1 1     0    0 13.45 -3.73 ZNESW 17.4 16.6 147.4 21.4 15.8 -25.6 15.6 -25.0 15.4 -23.6 15.7 -24.3
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.901437
2025-12-03T23:38:35.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:38:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:38:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:38:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:38:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:38:35.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:38:12', tmtdew=15.13, humidity=35.68, cloud=0.0, wind=22.25, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:38:12', seeing=0.95, atlas_timestamp='2025-12-03T21:38:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:34:00')
2025-12-03T23:38:35.593 [DEBUG] [Thread-125738] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:38:35.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:38:35.702 [DEBUG] [Thread-125741] [transport.py] [_log()] starting thread (client mode): 0x9fd20b50
2025-12-03T23:38:35.702 [DEBUG] [Thread-125741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:38:35.717 [DEBUG] [Thread-125741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:38:35.717 [INFO] [Thread-125741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:38:35.724 [DEBUG] [Thread-125741] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:38:35.724 [DEBUG] [Thread-125741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] client lang: <none>
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] server lang: <none>
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] kex follows: False
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] Compression: none
2025-12-03T23:38:35.725 [DEBUG] [Thread-125741] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:38:35.781 [DEBUG] [Thread-125741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:38:35.782 [DEBUG] [Thread-125741] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:38:35.782 [DEBUG] [Thread-125741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:38:35.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:38:35.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:38:35.838 [DEBUG] [Thread-125741] [transport.py] [_log()] userauth is OK
2025-12-03T23:38:35.838 [DEBUG] [Thread-125741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:38:35.838 [DEBUG] [Thread-125741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:38:35.838 [DEBUG] [Thread-125741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:38:35.838 [DEBUG] [Thread-125741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:38:35.861 [INFO] [Thread-125741] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:38:35.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:38:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:38:36.699 [DEBUG] [Thread-125741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:38:36.699 [DEBUG] [Thread-125741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:38:36.747 [DEBUG] [Thread-125741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:38:36.747 [DEBUG] [Thread-125741] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:38:36.756 [DEBUG] [Thread-125741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:38:36.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:38:36.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:38:36.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:38:36.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:38:36.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:38:36.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:38:36.790 [DEBUG] [Thread-125741] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:38:39.593 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:45.443 [DEBUG] [Thread-125743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:38:59.980 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:00.500 [DEBUG] [Thread-125744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:06.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:39:06.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:39:06.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:39:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 38, 44), 15.0, 35.77, 0.0, 24.35, 15.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:39:07.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:38:44
2025-12-03T23:39:07.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:39:07.743 [DEBUG] [Thread-125745] [transport.py] [_log()] starting thread (client mode): 0xa514efe0
2025-12-03T23:39:07.743 [DEBUG] [Thread-125745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:39:07.764 [DEBUG] [Thread-125745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:39:07.764 [INFO] [Thread-125745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:39:07.767 [DEBUG] [Thread-125745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:39:07.767 [DEBUG] [Thread-125745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:39:07.767 [DEBUG] [Thread-125745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:39:07.767 [DEBUG] [Thread-125745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] client lang: <none>
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] server lang: <none>
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] kex follows: False
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:39:07.768 [DEBUG] [Thread-125745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:39:07.769 [DEBUG] [Thread-125745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:39:07.769 [DEBUG] [Thread-125745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:39:07.769 [DEBUG] [Thread-125745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:39:07.769 [DEBUG] [Thread-125745] [transport.py] [_log()] Compression: none
2025-12-03T23:39:07.769 [DEBUG] [Thread-125745] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:39:07.790 [DEBUG] [Thread-125745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:39:07.790 [DEBUG] [Thread-125745] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:39:07.791 [DEBUG] [Thread-125745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:39:07.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:39:07.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:39:07.793 [DEBUG] [Thread-125745] [transport.py] [_log()] userauth is OK
2025-12-03T23:39:07.793 [DEBUG] [Thread-125745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:39:07.793 [DEBUG] [Thread-125745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:39:07.793 [DEBUG] [Thread-125745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:39:07.793 [DEBUG] [Thread-125745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:39:07.817 [INFO] [Thread-125745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:39:07.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:39:08.439 [DEBUG] [Thread-125745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:39:08.439 [DEBUG] [Thread-125745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:39:08.439 [DEBUG] [Thread-125745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:39:08.480 [DEBUG] [Thread-125745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:39:08.480 [DEBUG] [Thread-125745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:39:08.483 [DEBUG] [Thread-125745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:39:08.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:39:08.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:39:08.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:39:08.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:39:08.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:39:08.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:39:08.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:39:08.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:39:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:39:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.901785 -999.00  +15.40  16.95     40   +2.20 1 1 1 1 1     0    0 13.38 -4.77 ZNESW 14.1 16.9 144.6 22.3 15.8 -25.7 15.6 -25.2 15.4 -23.6 15.7 -24.5
2025-12-03T23:39:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:39:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:39:08.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.901785
2025-12-03T23:39:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:39:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:39:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:39:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:39:08.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:39:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:38:44', tmtdew=15.0, humidity=35.77, cloud=0.0, wind=24.35, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:38:44', seeing=0.92, atlas_timestamp='2025-12-03T21:38:34.224', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:39:08.508 [DEBUG] [Thread-125745] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:39:08.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:39:08.612 [DEBUG] [Thread-125748] [transport.py] [_log()] starting thread (client mode): 0xa51b9210
2025-12-03T23:39:08.612 [DEBUG] [Thread-125748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:39:08.627 [DEBUG] [Thread-125748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:39:08.627 [INFO] [Thread-125748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:39:08.634 [DEBUG] [Thread-125748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] client lang: <none>
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] server lang: <none>
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] kex follows: False
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:39:08.635 [DEBUG] [Thread-125748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:39:08.636 [DEBUG] [Thread-125748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:39:08.636 [DEBUG] [Thread-125748] [transport.py] [_log()] Compression: none
2025-12-03T23:39:08.636 [DEBUG] [Thread-125748] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:39:08.693 [DEBUG] [Thread-125748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:39:08.694 [DEBUG] [Thread-125748] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:39:08.694 [DEBUG] [Thread-125748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:39:08.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:39:08.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:39:08.750 [DEBUG] [Thread-125748] [transport.py] [_log()] userauth is OK
2025-12-03T23:39:08.750 [DEBUG] [Thread-125748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:39:08.750 [DEBUG] [Thread-125748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:39:08.751 [DEBUG] [Thread-125748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:39:08.751 [DEBUG] [Thread-125748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:39:08.772 [INFO] [Thread-125748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:39:08.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:39:08.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:39:09.601 [DEBUG] [Thread-125748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:39:09.602 [DEBUG] [Thread-125748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:39:09.650 [DEBUG] [Thread-125748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:39:09.650 [DEBUG] [Thread-125748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:39:09.659 [DEBUG] [Thread-125748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:39:09.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:39:09.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:39:09.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:39:09.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:39:09.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:39:09.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:39:09.693 [DEBUG] [Thread-125748] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:39:15.537 [DEBUG] [Thread-125750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:18.017 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:18.017 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:20.646 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:20.809 [DEBUG] [Thread-125751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:30.592 [DEBUG] [Thread-125752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:39:39.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:39:39.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 39, 16), 14.99, 35.77, 0.0, 24.0, 15.32, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:39:40.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:39:16
2025-12-03T23:39:40.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:39:40.674 [DEBUG] [Thread-125753] [transport.py] [_log()] starting thread (client mode): 0xa51603a0
2025-12-03T23:39:40.674 [DEBUG] [Thread-125753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:39:40.696 [DEBUG] [Thread-125753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:39:40.696 [INFO] [Thread-125753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:40.700 [DEBUG] [Thread-125753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] client lang: <none>
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] server lang: <none>
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] kex follows: False
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:39:40.701 [DEBUG] [Thread-125753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:39:40.702 [DEBUG] [Thread-125753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:39:40.702 [DEBUG] [Thread-125753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:39:40.702 [DEBUG] [Thread-125753] [transport.py] [_log()] Compression: none
2025-12-03T23:39:40.702 [DEBUG] [Thread-125753] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:39:40.716 [DEBUG] [Thread-125753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:39:40.717 [DEBUG] [Thread-125753] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:39:40.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:39:40.718 [DEBUG] [Thread-125753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:39:40.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:39:40.720 [DEBUG] [Thread-125753] [transport.py] [_log()] userauth is OK
2025-12-03T23:39:40.720 [DEBUG] [Thread-125753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:39:40.720 [DEBUG] [Thread-125753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:39:40.720 [DEBUG] [Thread-125753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:39:40.720 [DEBUG] [Thread-125753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:39:40.744 [INFO] [Thread-125753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:39:40.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:39:41.070 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:39:41.330 [DEBUG] [Thread-125753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:39:41.330 [DEBUG] [Thread-125753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:39:41.330 [DEBUG] [Thread-125753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:39:41.371 [DEBUG] [Thread-125753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:39:41.371 [DEBUG] [Thread-125753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:39:41.373 [DEBUG] [Thread-125753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:39:41.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:39:41.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:39:41.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:39:41.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:39:41.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:39:41.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:39:41.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:39:41.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.902131 -999.00  +15.30  20.23     41   +2.10 1 1 1 1 1     0    0 13.26 -5.77 ZNESW 16.7 20.2 139.6 25.0 15.7 -25.8 15.6 -25.2 15.4 -23.5 15.7 -24.4
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.902131
2025-12-03T23:39:41.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:39:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:39:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:39:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:39:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:39:41.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:39:16', tmtdew=14.99, humidity=35.77, cloud=0.0, wind=24.0, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:39:16', seeing=0.98, atlas_timestamp='2025-12-03T21:39:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:39:41.395 [DEBUG] [Thread-125753] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:39:41.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:39:41.507 [DEBUG] [Thread-125756] [transport.py] [_log()] starting thread (client mode): 0xa5160760
2025-12-03T23:39:41.507 [DEBUG] [Thread-125756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:39:41.522 [DEBUG] [Thread-125756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:39:41.522 [INFO] [Thread-125756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:39:41.529 [DEBUG] [Thread-125756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:39:41.529 [DEBUG] [Thread-125756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:39:41.529 [DEBUG] [Thread-125756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:39:41.529 [DEBUG] [Thread-125756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:41.529 [DEBUG] [Thread-125756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] client lang: <none>
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] server lang: <none>
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] kex follows: False
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] Compression: none
2025-12-03T23:39:41.530 [DEBUG] [Thread-125756] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:39:41.585 [DEBUG] [Thread-125756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:39:41.586 [DEBUG] [Thread-125756] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:39:41.586 [DEBUG] [Thread-125756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:39:41.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:39:41.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:39:41.642 [DEBUG] [Thread-125756] [transport.py] [_log()] userauth is OK
2025-12-03T23:39:41.642 [DEBUG] [Thread-125756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:39:41.642 [DEBUG] [Thread-125756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:39:41.642 [DEBUG] [Thread-125756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:39:41.642 [DEBUG] [Thread-125756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:39:41.662 [INFO] [Thread-125756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:39:41.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:39:41.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:39:42.498 [DEBUG] [Thread-125756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:39:42.499 [DEBUG] [Thread-125756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:39:42.547 [DEBUG] [Thread-125756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:39:42.547 [DEBUG] [Thread-125756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:39:42.556 [DEBUG] [Thread-125756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:39:42.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:39:42.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:39:42.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:39:42.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:39:42.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:39:42.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:39:42.590 [DEBUG] [Thread-125756] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:39:45.629 [DEBUG] [Thread-125758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:00.689 [DEBUG] [Thread-125759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:01.533 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:40:12.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:40:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:40:13.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 39, 48), 14.88, 36.43, 0.0, 22.44, 15.25, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:40:13.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:39:48
2025-12-03T23:40:13.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:40:13.597 [DEBUG] [Thread-125760] [transport.py] [_log()] starting thread (client mode): 0xa2747640
2025-12-03T23:40:13.597 [DEBUG] [Thread-125760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:40:13.616 [DEBUG] [Thread-125760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:40:13.616 [INFO] [Thread-125760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:40:13.617 [DEBUG] [Thread-125760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] client lang: <none>
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] server lang: <none>
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] kex follows: False
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] Compression: none
2025-12-03T23:40:13.618 [DEBUG] [Thread-125760] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:40:13.625 [DEBUG] [Thread-125760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:40:13.625 [DEBUG] [Thread-125760] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:40:13.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:40:13.625 [DEBUG] [Thread-125760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:40:13.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:40:13.626 [DEBUG] [Thread-125760] [transport.py] [_log()] userauth is OK
2025-12-03T23:40:13.626 [DEBUG] [Thread-125760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:40:13.626 [DEBUG] [Thread-125760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:40:13.626 [DEBUG] [Thread-125760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:40:13.626 [DEBUG] [Thread-125760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:40:13.635 [INFO] [Thread-125760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:40:13.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:40:14.425 [DEBUG] [Thread-125760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:40:14.425 [DEBUG] [Thread-125760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:40:14.425 [DEBUG] [Thread-125760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:40:14.466 [DEBUG] [Thread-125760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:40:14.466 [DEBUG] [Thread-125760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:40:14.468 [DEBUG] [Thread-125760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:40:14.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:40:14.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:40:14.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:40:14.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:40:14.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:40:14.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:40:14.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.902479 -999.00  +15.30  17.36     41   +2.10 1 1 1 1 1     0    0 13.11 -7.34 ZNESW 16.7 17.4 149.8 23.2 15.7 -25.7 15.6 -25.2 15.4 -23.5 15.7 -24.5
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.902479
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:40:14.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:39:48', tmtdew=14.88, humidity=36.43, cloud=0.0, wind=22.44, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:39:48', seeing=1.09, atlas_timestamp='2025-12-03T21:39:34.186', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:40:14.486 [DEBUG] [Thread-125760] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:40:14.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:40:14.578 [DEBUG] [Thread-125763] [transport.py] [_log()] starting thread (client mode): 0xa2744d00
2025-12-03T23:40:14.578 [DEBUG] [Thread-125763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:40:14.592 [DEBUG] [Thread-125763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:40:14.592 [INFO] [Thread-125763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:40:14.599 [DEBUG] [Thread-125763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] client lang: <none>
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] server lang: <none>
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] kex follows: False
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] Compression: none
2025-12-03T23:40:14.600 [DEBUG] [Thread-125763] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:40:14.656 [DEBUG] [Thread-125763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:40:14.656 [DEBUG] [Thread-125763] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:40:14.656 [DEBUG] [Thread-125763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:40:14.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:40:14.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:40:14.714 [DEBUG] [Thread-125763] [transport.py] [_log()] userauth is OK
2025-12-03T23:40:14.714 [DEBUG] [Thread-125763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:40:14.714 [DEBUG] [Thread-125763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:40:14.714 [DEBUG] [Thread-125763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:40:14.714 [DEBUG] [Thread-125763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:40:14.727 [INFO] [Thread-125763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:40:14.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:40:14.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:40:15.554 [DEBUG] [Thread-125763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:40:15.554 [DEBUG] [Thread-125763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:40:15.602 [DEBUG] [Thread-125763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:40:15.602 [DEBUG] [Thread-125763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:40:15.610 [DEBUG] [Thread-125763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:40:15.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:40:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:40:15.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:40:15.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:40:15.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:40:15.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:40:15.645 [DEBUG] [Thread-125763] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:40:15.728 [DEBUG] [Thread-125765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:18.219 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:18.220 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:20.863 [DEBUG] [Thread-125766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:21.979 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:30.785 [DEBUG] [Thread-125767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:42.748 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:45.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:40:45.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:40:45.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:40:45.820 [DEBUG] [Thread-125768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:40:46.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 40, 20), 14.85, 36.48, 0.0, 22.69, 15.2, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:40:46.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:40:20
2025-12-03T23:40:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:40:46.614 [DEBUG] [Thread-125769] [transport.py] [_log()] starting thread (client mode): 0xa51bbdf0
2025-12-03T23:40:46.614 [DEBUG] [Thread-125769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:40:46.634 [DEBUG] [Thread-125769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:40:46.634 [INFO] [Thread-125769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:46.638 [DEBUG] [Thread-125769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] client lang: <none>
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] server lang: <none>
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] kex follows: False
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] Compression: none
2025-12-03T23:40:46.639 [DEBUG] [Thread-125769] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:40:46.657 [DEBUG] [Thread-125769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:40:46.658 [DEBUG] [Thread-125769] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:40:46.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:40:46.658 [DEBUG] [Thread-125769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:40:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:40:46.660 [DEBUG] [Thread-125769] [transport.py] [_log()] userauth is OK
2025-12-03T23:40:46.660 [DEBUG] [Thread-125769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:40:46.661 [DEBUG] [Thread-125769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:40:46.661 [DEBUG] [Thread-125769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:40:46.661 [DEBUG] [Thread-125769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:40:46.685 [INFO] [Thread-125769] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:40:46.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:40:47.346 [DEBUG] [Thread-125769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:40:47.346 [DEBUG] [Thread-125769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:40:47.346 [DEBUG] [Thread-125769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:40:47.387 [DEBUG] [Thread-125769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:40:47.387 [DEBUG] [Thread-125769] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:40:47.390 [DEBUG] [Thread-125769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:40:47.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:40:47.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:40:47.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:40:47.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:40:47.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:40:47.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:40:47.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:40:47.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.902826 -999.00  +15.20  17.47     41   +2.10 1 1 1 1 1     0    0 13.17 -8.70 ZNESW 16.6 17.5 143.8 21.3 15.7 -25.7 15.6 -25.1 15.3 -23.5 15.6 -24.4
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.902826
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:40:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:40:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:40:20', tmtdew=14.85, humidity=36.48, cloud=0.0, wind=22.69, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:40:20', seeing=1.2, atlas_timestamp='2025-12-03T21:40:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:40:47.410 [DEBUG] [Thread-125769] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:40:47.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:40:47.507 [DEBUG] [Thread-125772] [transport.py] [_log()] starting thread (client mode): 0xa2745b40
2025-12-03T23:40:47.508 [DEBUG] [Thread-125772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:40:47.523 [DEBUG] [Thread-125772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:40:47.523 [INFO] [Thread-125772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:40:47.530 [DEBUG] [Thread-125772] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] client lang: <none>
2025-12-03T23:40:47.531 [DEBUG] [Thread-125772] [transport.py] [_log()] server lang: <none>
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] kex follows: False
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] Compression: none
2025-12-03T23:40:47.532 [DEBUG] [Thread-125772] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:40:47.589 [DEBUG] [Thread-125772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:40:47.590 [DEBUG] [Thread-125772] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:40:47.590 [DEBUG] [Thread-125772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:40:47.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:40:47.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:40:47.646 [DEBUG] [Thread-125772] [transport.py] [_log()] userauth is OK
2025-12-03T23:40:47.646 [DEBUG] [Thread-125772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:40:47.646 [DEBUG] [Thread-125772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:40:47.646 [DEBUG] [Thread-125772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:40:47.646 [DEBUG] [Thread-125772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:40:47.660 [INFO] [Thread-125772] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:40:47.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:40:47.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:40:48.506 [DEBUG] [Thread-125772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:40:48.507 [DEBUG] [Thread-125772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:40:48.554 [DEBUG] [Thread-125772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:40:48.555 [DEBUG] [Thread-125772] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:40:48.563 [DEBUG] [Thread-125772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:40:48.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:40:48.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:40:48.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:40:48.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:40:48.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:40:48.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:40:48.595 [DEBUG] [Thread-125772] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:41:00.852 [DEBUG] [Thread-125774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:03.166 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:15.912 [DEBUG] [Thread-125775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:18.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:18.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:18.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:41:18.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:41:18.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:41:19.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 40, 52), 14.77, 36.55, 0.0, 24.31, 15.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:41:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:40:52
2025-12-03T23:41:19.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:41:19.573 [DEBUG] [Thread-125776] [transport.py] [_log()] starting thread (client mode): 0xa514d0c0
2025-12-03T23:41:19.573 [DEBUG] [Thread-125776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:41:19.595 [DEBUG] [Thread-125776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:41:19.595 [INFO] [Thread-125776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:19.599 [DEBUG] [Thread-125776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] client lang: <none>
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] server lang: <none>
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] kex follows: False
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:41:19.600 [DEBUG] [Thread-125776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:41:19.601 [DEBUG] [Thread-125776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:41:19.601 [DEBUG] [Thread-125776] [transport.py] [_log()] Compression: none
2025-12-03T23:41:19.601 [DEBUG] [Thread-125776] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:41:19.621 [DEBUG] [Thread-125776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:41:19.621 [DEBUG] [Thread-125776] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:41:19.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:41:19.622 [DEBUG] [Thread-125776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:41:19.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:41:19.624 [DEBUG] [Thread-125776] [transport.py] [_log()] userauth is OK
2025-12-03T23:41:19.624 [DEBUG] [Thread-125776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:41:19.624 [DEBUG] [Thread-125776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:41:19.624 [DEBUG] [Thread-125776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:41:19.624 [DEBUG] [Thread-125776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:41:19.660 [INFO] [Thread-125776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:41:19.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:41:20.307 [DEBUG] [Thread-125776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:41:20.307 [DEBUG] [Thread-125776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:41:20.308 [DEBUG] [Thread-125776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:41:20.349 [DEBUG] [Thread-125776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:41:20.349 [DEBUG] [Thread-125776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:41:20.352 [DEBUG] [Thread-125776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:41:20.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:41:20.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:41:20.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:41:20.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:41:20.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:41:20.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:41:20.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:41:20.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.903520 -999.00  +15.10  20.87     41   +2.10 1 1 1 1 1     0    0 13.00 -11.94 ZNESW 16.4 20.9 142.4 23.7 15.7 -25.7 15.6 -25.1 15.3 -23.6 15.6 -24.4
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.903520
2025-12-03T23:41:20.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:41:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:41:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:41:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:41:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:41:20.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:40:52', tmtdew=14.77, humidity=36.55, cloud=0.0, wind=24.31, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:40:52', seeing=1.2, atlas_timestamp='2025-12-03T21:41:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:41:20.378 [DEBUG] [Thread-125776] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:41:20.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:41:20.479 [DEBUG] [Thread-125779] [transport.py] [_log()] starting thread (client mode): 0xa2744f40
2025-12-03T23:41:20.479 [DEBUG] [Thread-125779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:41:20.494 [DEBUG] [Thread-125779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:41:20.494 [INFO] [Thread-125779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] client lang: <none>
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] server lang: <none>
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] kex follows: False
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:41:20.502 [DEBUG] [Thread-125779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:41:20.503 [DEBUG] [Thread-125779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:41:20.503 [DEBUG] [Thread-125779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:41:20.503 [DEBUG] [Thread-125779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:41:20.503 [DEBUG] [Thread-125779] [transport.py] [_log()] Compression: none
2025-12-03T23:41:20.503 [DEBUG] [Thread-125779] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:41:20.562 [DEBUG] [Thread-125779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:41:20.562 [DEBUG] [Thread-125779] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:41:20.563 [DEBUG] [Thread-125779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:41:20.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:41:20.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:41:20.618 [DEBUG] [Thread-125779] [transport.py] [_log()] userauth is OK
2025-12-03T23:41:20.619 [DEBUG] [Thread-125779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:41:20.619 [DEBUG] [Thread-125779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:41:20.619 [DEBUG] [Thread-125779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:41:20.619 [DEBUG] [Thread-125779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:41:20.638 [INFO] [Thread-125779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:41:20.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:41:20.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:41:20.933 [DEBUG] [Thread-125781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:21.465 [DEBUG] [Thread-125779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:41:21.465 [DEBUG] [Thread-125779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:41:21.512 [DEBUG] [Thread-125779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:41:21.512 [DEBUG] [Thread-125779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:41:21.520 [DEBUG] [Thread-125779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:41:21.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:41:21.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:41:21.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:41:21.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:41:21.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:41:21.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:41:21.552 [DEBUG] [Thread-125779] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:41:23.627 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:30.945 [DEBUG] [Thread-125782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:44.077 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:45.992 [DEBUG] [Thread-125783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:41:51.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:41:51.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:41:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:41:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 41, 24), 14.76, 36.6, 0.0, 24.47, 15.12, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:41:52.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:41:24
2025-12-03T23:41:52.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:41:52.518 [DEBUG] [Thread-125784] [transport.py] [_log()] starting thread (client mode): 0xa5162110
2025-12-03T23:41:52.519 [DEBUG] [Thread-125784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:41:52.539 [DEBUG] [Thread-125784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:41:52.539 [INFO] [Thread-125784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] client lang: <none>
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] server lang: <none>
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] kex follows: False
2025-12-03T23:41:52.542 [DEBUG] [Thread-125784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] Compression: none
2025-12-03T23:41:52.543 [DEBUG] [Thread-125784] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:41:52.560 [DEBUG] [Thread-125784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:41:52.560 [DEBUG] [Thread-125784] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:41:52.561 [DEBUG] [Thread-125784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:41:52.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:41:52.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:41:52.562 [DEBUG] [Thread-125784] [transport.py] [_log()] userauth is OK
2025-12-03T23:41:52.562 [DEBUG] [Thread-125784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:41:52.563 [DEBUG] [Thread-125784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:41:52.563 [DEBUG] [Thread-125784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:41:52.563 [DEBUG] [Thread-125784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:41:52.587 [INFO] [Thread-125784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:41:52.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:41:53.239 [DEBUG] [Thread-125784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:41:53.239 [DEBUG] [Thread-125784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:41:53.240 [DEBUG] [Thread-125784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:41:53.280 [DEBUG] [Thread-125784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:41:53.280 [DEBUG] [Thread-125784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:41:53.283 [DEBUG] [Thread-125784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:41:53.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:41:53.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:41:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:41:53.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:41:53.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:41:53.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:41:53.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:41:53.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:41:53.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:41:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.903868 -999.00  +15.10  17.91     41   +2.10 1 1 1 1 1     0    0 13.10 -13.65 ZNESW 20.6 17.9 149.2 27.8 15.6 -25.6 15.5 -25.0 15.3 -23.4 15.6 -24.2
2025-12-03T23:41:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:41:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:41:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.903868
2025-12-03T23:41:53.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:41:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:41:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:41:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:41:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:41:53.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:41:24', tmtdew=14.76, humidity=36.6, cloud=0.0, wind=24.47, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:41:24', seeing=1.17, atlas_timestamp='2025-12-03T21:41:34.195', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.01425000000000054, -0.010749999999999815, 0.013499999999998735, -0.014499999999999957, -0.09924999999999962, 0.02099999999999902, 0.02725000000000044, -0.025000000000000355, -0.026999999999999247, 0.0702499999999997, 0.006000000000000227, 0.08699999999999974, 0.017249999999998877, -0.040500000000001535, -0.19500000000000028, -0.01774999999999949, 0.03250000000000064, 0.030999999999998806, 0.019249999999999545, 0.05299999999999905, -0.030250000000000554, -0.10074999999999967, -0.056250000000000355, -0.036500000000001975, -0.02800000000000047, -0.01774999999999949, 0.04800000000000004, 0.11749999999999972, 0.11400000000000077, -0.02499999999999858, -0.023499999999998522, 0.053749999999999076], zp_timestamp='2025-12-03T21:38:00')
2025-12-03T23:41:53.308 [DEBUG] [Thread-125784] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:41:53.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:41:53.410 [DEBUG] [Thread-125787] [transport.py] [_log()] starting thread (client mode): 0xa5161000
2025-12-03T23:41:53.410 [DEBUG] [Thread-125787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:41:53.425 [DEBUG] [Thread-125787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:41:53.425 [INFO] [Thread-125787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:53.433 [DEBUG] [Thread-125787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] client lang: <none>
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] server lang: <none>
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] kex follows: False
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:41:53.434 [DEBUG] [Thread-125787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:41:53.435 [DEBUG] [Thread-125787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:41:53.435 [DEBUG] [Thread-125787] [transport.py] [_log()] Compression: none
2025-12-03T23:41:53.435 [DEBUG] [Thread-125787] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:41:53.490 [DEBUG] [Thread-125787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:41:53.491 [DEBUG] [Thread-125787] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:41:53.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:41:53.492 [DEBUG] [Thread-125787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:41:53.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:41:53.546 [DEBUG] [Thread-125787] [transport.py] [_log()] userauth is OK
2025-12-03T23:41:53.546 [DEBUG] [Thread-125787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:41:53.546 [DEBUG] [Thread-125787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:41:53.546 [DEBUG] [Thread-125787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:41:53.546 [DEBUG] [Thread-125787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:41:53.565 [INFO] [Thread-125787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:41:53.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:41:53.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:41:54.403 [DEBUG] [Thread-125787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:41:54.403 [DEBUG] [Thread-125787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:41:54.452 [DEBUG] [Thread-125787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:41:54.452 [DEBUG] [Thread-125787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:41:54.461 [DEBUG] [Thread-125787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:41:54.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:41:54.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:41:54.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:41:54.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:41:54.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:41:54.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:41:54.494 [DEBUG] [Thread-125787] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:42:01.027 [DEBUG] [Thread-125789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:04.493 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:16.084 [DEBUG] [Thread-125790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:18.614 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:18.615 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:21.002 [DEBUG] [Thread-125791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:42:24.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:42:24.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:42:25.148 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:25.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 41, 56), 14.8, 36.61, 0.0, 22.29, 15.17, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:42:25.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:41:56
2025-12-03T23:42:25.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:42:25.470 [DEBUG] [Thread-125792] [transport.py] [_log()] starting thread (client mode): 0xa277a830
2025-12-03T23:42:25.470 [DEBUG] [Thread-125792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:42:25.489 [DEBUG] [Thread-125792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:42:25.489 [INFO] [Thread-125792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] client lang: <none>
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] server lang: <none>
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] kex follows: False
2025-12-03T23:42:25.492 [DEBUG] [Thread-125792] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] Compression: none
2025-12-03T23:42:25.493 [DEBUG] [Thread-125792] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:42:25.509 [DEBUG] [Thread-125792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:42:25.510 [DEBUG] [Thread-125792] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:42:25.510 [DEBUG] [Thread-125792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:42:25.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:42:25.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:42:25.512 [DEBUG] [Thread-125792] [transport.py] [_log()] userauth is OK
2025-12-03T23:42:25.512 [DEBUG] [Thread-125792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:42:25.513 [DEBUG] [Thread-125792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:42:25.513 [DEBUG] [Thread-125792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:42:25.513 [DEBUG] [Thread-125792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:42:25.537 [INFO] [Thread-125792] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:42:25.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:42:26.139 [DEBUG] [Thread-125792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:42:26.139 [DEBUG] [Thread-125792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:42:26.140 [DEBUG] [Thread-125792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:42:26.180 [DEBUG] [Thread-125792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:42:26.180 [DEBUG] [Thread-125792] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:42:26.183 [DEBUG] [Thread-125792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:42:26.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:42:26.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:42:26.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:42:26.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:42:26.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:42:26.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:42:26.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:42:26.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:42:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:42:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.904215 -999.00  +15.20  15.94     41   +2.10 1 1 1 1 1     0    0 13.07 -15.81 ZNESW 17.8 15.9 146.6 25.6 15.7 -25.7 15.6 -25.1 15.3 -23.5 15.6 -24.3
2025-12-03T23:42:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:42:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:42:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.904215
2025-12-03T23:42:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:42:26.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:42:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:42:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:42:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:42:26.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:41:56', tmtdew=14.8, humidity=36.61, cloud=0.0, wind=22.29, temperature=15.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:41:56', seeing=1.09, atlas_timestamp='2025-12-03T21:42:04.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:40:00')
2025-12-03T23:42:26.209 [DEBUG] [Thread-125792] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:42:26.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:42:26.324 [DEBUG] [Thread-125795] [transport.py] [_log()] starting thread (client mode): 0xa27a1ba0
2025-12-03T23:42:26.325 [DEBUG] [Thread-125795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:42:26.344 [DEBUG] [Thread-125795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:42:26.344 [INFO] [Thread-125795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:42:26.351 [DEBUG] [Thread-125795] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:42:26.351 [DEBUG] [Thread-125795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:42:26.351 [DEBUG] [Thread-125795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:42:26.351 [DEBUG] [Thread-125795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] client lang: <none>
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] server lang: <none>
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] kex follows: False
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] Compression: none
2025-12-03T23:42:26.352 [DEBUG] [Thread-125795] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:42:26.409 [DEBUG] [Thread-125795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:42:26.410 [DEBUG] [Thread-125795] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:42:26.410 [DEBUG] [Thread-125795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:42:26.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:42:26.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:42:26.466 [DEBUG] [Thread-125795] [transport.py] [_log()] userauth is OK
2025-12-03T23:42:26.466 [DEBUG] [Thread-125795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:42:26.466 [DEBUG] [Thread-125795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:42:26.466 [DEBUG] [Thread-125795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:42:26.466 [DEBUG] [Thread-125795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:42:26.485 [INFO] [Thread-125795] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:42:26.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:42:26.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:42:27.336 [DEBUG] [Thread-125795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:42:27.336 [DEBUG] [Thread-125795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:42:27.384 [DEBUG] [Thread-125795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:42:27.384 [DEBUG] [Thread-125795] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:42:27.393 [DEBUG] [Thread-125795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:42:27.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:42:27.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:42:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:42:27.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:42:27.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:42:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:42:27.428 [DEBUG] [Thread-125795] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:42:31.118 [DEBUG] [Thread-125797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:45.593 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:46.177 [DEBUG] [Thread-125798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:42:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:42:57.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:42:57.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:42:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 42, 28), 14.81, 36.57, 0.0, 23.68, 15.1, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:42:58.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:42:28
2025-12-03T23:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:42:58.384 [DEBUG] [Thread-125799] [transport.py] [_log()] starting thread (client mode): 0xa27a0310
2025-12-03T23:42:58.384 [DEBUG] [Thread-125799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:42:58.398 [DEBUG] [Thread-125799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:42:58.398 [INFO] [Thread-125799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:42:58.399 [DEBUG] [Thread-125799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] client lang: <none>
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] server lang: <none>
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] kex follows: False
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:42:58.400 [DEBUG] [Thread-125799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:42:58.401 [DEBUG] [Thread-125799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:42:58.401 [DEBUG] [Thread-125799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:42:58.401 [DEBUG] [Thread-125799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:42:58.401 [DEBUG] [Thread-125799] [transport.py] [_log()] Compression: none
2025-12-03T23:42:58.401 [DEBUG] [Thread-125799] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:42:58.411 [DEBUG] [Thread-125799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:42:58.412 [DEBUG] [Thread-125799] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:42:58.412 [DEBUG] [Thread-125799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:42:58.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:42:58.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:42:58.413 [DEBUG] [Thread-125799] [transport.py] [_log()] userauth is OK
2025-12-03T23:42:58.414 [DEBUG] [Thread-125799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:42:58.414 [DEBUG] [Thread-125799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:42:58.414 [DEBUG] [Thread-125799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:42:58.414 [DEBUG] [Thread-125799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:42:58.427 [INFO] [Thread-125799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:42:58.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:42:59.045 [DEBUG] [Thread-125799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:42:59.045 [DEBUG] [Thread-125799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:42:59.045 [DEBUG] [Thread-125799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:42:59.086 [DEBUG] [Thread-125799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:42:59.086 [DEBUG] [Thread-125799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:42:59.089 [DEBUG] [Thread-125799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:42:59.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:42:59.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:42:59.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:42:59.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:42:59.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:42:59.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:42:59.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:42:59.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.904562 -999.00  +15.10  17.56     41   +2.10 1 1 1 1 1     0    0 12.86 -16.74 ZNESW 15.5 17.6 153.6 25.1 15.6 -25.6 15.5 -25.1 15.3 -23.6 15.5 -24.5
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.904562
2025-12-03T23:42:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:42:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:42:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:42:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:42:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:42:59.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:42:28', tmtdew=14.81, humidity=36.57, cloud=0.0, wind=23.68, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:42:28', seeing=1.02, atlas_timestamp='2025-12-03T21:42:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:40:00')
2025-12-03T23:42:59.115 [DEBUG] [Thread-125799] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:42:59.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:42:59.218 [DEBUG] [Thread-125802] [transport.py] [_log()] starting thread (client mode): 0xa5162cb0
2025-12-03T23:42:59.219 [DEBUG] [Thread-125802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:42:59.233 [DEBUG] [Thread-125802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:42:59.233 [INFO] [Thread-125802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] client lang: <none>
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] server lang: <none>
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] kex follows: False
2025-12-03T23:42:59.241 [DEBUG] [Thread-125802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] Compression: none
2025-12-03T23:42:59.242 [DEBUG] [Thread-125802] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:42:59.304 [DEBUG] [Thread-125802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:42:59.305 [DEBUG] [Thread-125802] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:42:59.305 [DEBUG] [Thread-125802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:42:59.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:42:59.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:42:59.362 [DEBUG] [Thread-125802] [transport.py] [_log()] userauth is OK
2025-12-03T23:42:59.362 [DEBUG] [Thread-125802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:42:59.362 [DEBUG] [Thread-125802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:42:59.362 [DEBUG] [Thread-125802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:42:59.362 [DEBUG] [Thread-125802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:42:59.381 [INFO] [Thread-125802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:42:59.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:42:59.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:43:00.216 [DEBUG] [Thread-125802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:43:00.216 [DEBUG] [Thread-125802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:43:00.264 [DEBUG] [Thread-125802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:43:00.264 [DEBUG] [Thread-125802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:43:00.273 [DEBUG] [Thread-125802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:43:00.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:43:00.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:43:00.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:43:00.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:43:00.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:43:00.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:43:00.308 [DEBUG] [Thread-125802] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:43:01.211 [DEBUG] [Thread-125804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:05.980 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:16.259 [DEBUG] [Thread-125805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:18.813 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:18.814 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:21.065 [DEBUG] [Thread-125806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:26.478 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:43:30.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:43:30.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:43:30.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 43), 14.72, 36.68, 0.0, 24.23, 15.08, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:43:30.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:43:00
2025-12-03T23:43:31.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:43:31.277 [DEBUG] [Thread-125807] [transport.py] [_log()] starting thread (client mode): 0xa5163fa0
2025-12-03T23:43:31.277 [DEBUG] [Thread-125807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:43:31.291 [DEBUG] [Thread-125808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:31.299 [DEBUG] [Thread-125807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:43:31.299 [INFO] [Thread-125807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:43:31.300 [DEBUG] [Thread-125807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] client lang: <none>
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] server lang: <none>
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] kex follows: False
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] Compression: none
2025-12-03T23:43:31.301 [DEBUG] [Thread-125807] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:43:31.311 [DEBUG] [Thread-125807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:43:31.311 [DEBUG] [Thread-125807] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:43:31.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:43:31.312 [DEBUG] [Thread-125807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:43:31.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:43:31.313 [DEBUG] [Thread-125807] [transport.py] [_log()] userauth is OK
2025-12-03T23:43:31.313 [DEBUG] [Thread-125807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:43:31.313 [DEBUG] [Thread-125807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:43:31.313 [DEBUG] [Thread-125807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:43:31.314 [DEBUG] [Thread-125807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:43:31.348 [INFO] [Thread-125807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:43:31.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:43:31.948 [DEBUG] [Thread-125807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:43:31.948 [DEBUG] [Thread-125807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:43:31.949 [DEBUG] [Thread-125807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:43:31.989 [DEBUG] [Thread-125807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:43:31.989 [DEBUG] [Thread-125807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:43:31.992 [DEBUG] [Thread-125807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:43:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:43:32.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:43:32.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:43:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:43:32.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:43:32.014 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:43:32.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.904909 -999.00  +15.10  14.22     41   +2.10 1 1 1 1 1     0    0 12.69 -17.81 ZNESW 22.4 14.2 151.8 25.4 15.6 -25.7 15.5 -25.2 15.2 -23.6 15.4 -24.6
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:43:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.904909
2025-12-03T23:43:32.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:43:32.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:43:00', tmtdew=14.72, humidity=36.68, cloud=0.0, wind=24.23, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:43:00', seeing=1.02, atlas_timestamp='2025-12-03T21:43:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:40:00')
2025-12-03T23:43:32.017 [DEBUG] [Thread-125807] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:43:32.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:43:32.120 [DEBUG] [Thread-125811] [transport.py] [_log()] starting thread (client mode): 0xa5163820
2025-12-03T23:43:32.120 [DEBUG] [Thread-125811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:43:32.135 [DEBUG] [Thread-125811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:43:32.135 [INFO] [Thread-125811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:43:32.142 [DEBUG] [Thread-125811] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:43:32.143 [DEBUG] [Thread-125811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] client lang: <none>
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] server lang: <none>
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] kex follows: False
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:43:32.144 [DEBUG] [Thread-125811] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:43:32.145 [DEBUG] [Thread-125811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:43:32.145 [DEBUG] [Thread-125811] [transport.py] [_log()] Compression: none
2025-12-03T23:43:32.145 [DEBUG] [Thread-125811] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:43:32.205 [DEBUG] [Thread-125811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:43:32.206 [DEBUG] [Thread-125811] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:43:32.206 [DEBUG] [Thread-125811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:43:32.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:43:32.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:43:32.262 [DEBUG] [Thread-125811] [transport.py] [_log()] userauth is OK
2025-12-03T23:43:32.262 [DEBUG] [Thread-125811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:43:32.262 [DEBUG] [Thread-125811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:43:32.262 [DEBUG] [Thread-125811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:43:32.262 [DEBUG] [Thread-125811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:43:32.281 [INFO] [Thread-125811] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:43:32.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:43:32.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:43:33.096 [DEBUG] [Thread-125811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:43:33.096 [DEBUG] [Thread-125811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:43:33.143 [DEBUG] [Thread-125811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:43:33.143 [DEBUG] [Thread-125811] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:43:33.151 [DEBUG] [Thread-125811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:43:33.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:43:33.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:43:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:43:33.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:43:33.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:43:33.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:43:33.182 [DEBUG] [Thread-125811] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:43:46.330 [DEBUG] [Thread-125813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:43:47.156 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:01.395 [DEBUG] [Thread-125814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:03.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:44:03.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:44:03.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:44:03.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 43, 32), 14.73, 36.65, 0.0, 23.93, 15.05, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:44:03.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:43:32
2025-12-03T23:44:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:44:04.205 [DEBUG] [Thread-125815] [transport.py] [_log()] starting thread (client mode): 0xa27a2140
2025-12-03T23:44:04.205 [DEBUG] [Thread-125815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:44:04.226 [DEBUG] [Thread-125815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:44:04.226 [INFO] [Thread-125815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] client lang: <none>
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] server lang: <none>
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] kex follows: False
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] Compression: none
2025-12-03T23:44:04.229 [DEBUG] [Thread-125815] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:44:04.245 [DEBUG] [Thread-125815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:44:04.245 [DEBUG] [Thread-125815] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:44:04.245 [DEBUG] [Thread-125815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:44:04.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:44:04.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:44:04.246 [DEBUG] [Thread-125815] [transport.py] [_log()] userauth is OK
2025-12-03T23:44:04.246 [DEBUG] [Thread-125815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:44:04.246 [DEBUG] [Thread-125815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:44:04.246 [DEBUG] [Thread-125815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:44:04.246 [DEBUG] [Thread-125815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:44:04.256 [INFO] [Thread-125815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:44:04.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:44:04.888 [DEBUG] [Thread-125815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:44:04.888 [DEBUG] [Thread-125815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:44:04.888 [DEBUG] [Thread-125815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:44:04.929 [DEBUG] [Thread-125815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:44:04.930 [DEBUG] [Thread-125815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:44:04.932 [DEBUG] [Thread-125815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:44:04.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:44:04.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:44:04.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:44:04.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:44:04.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:44:04.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:44:04.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:44:04.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.904909 -999.00  +15.10  14.22     41   +2.10 1 1 1 1 1     0    0 12.69 -17.81 ZNESW 22.4 14.2 151.8 25.4 15.6 -25.7 15.5 -25.2 15.2 -23.6 15.4 -24.6
2025-12-03T23:44:04.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.904909
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:44:04.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:43:32', tmtdew=14.73, humidity=36.65, cloud=0.0, wind=23.93, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:43:32', seeing=0.88, atlas_timestamp='2025-12-03T21:43:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:40:00')
2025-12-03T23:44:04.950 [DEBUG] [Thread-125815] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:44:05.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:44:05.043 [DEBUG] [Thread-125818] [transport.py] [_log()] starting thread (client mode): 0xa5163310
2025-12-03T23:44:05.043 [DEBUG] [Thread-125818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:44:05.060 [DEBUG] [Thread-125818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:44:05.060 [INFO] [Thread-125818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] client lang: <none>
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] server lang: <none>
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] kex follows: False
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] Compression: none
2025-12-03T23:44:05.068 [DEBUG] [Thread-125818] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:44:05.124 [DEBUG] [Thread-125818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:44:05.125 [DEBUG] [Thread-125818] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:44:05.125 [DEBUG] [Thread-125818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:44:05.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:44:05.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:44:05.181 [DEBUG] [Thread-125818] [transport.py] [_log()] userauth is OK
2025-12-03T23:44:05.182 [DEBUG] [Thread-125818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:44:05.182 [DEBUG] [Thread-125818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:44:05.182 [DEBUG] [Thread-125818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:44:05.182 [DEBUG] [Thread-125818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:44:05.199 [INFO] [Thread-125818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:44:05.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:44:05.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:44:06.078 [DEBUG] [Thread-125818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:44:06.078 [DEBUG] [Thread-125818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:44:06.126 [DEBUG] [Thread-125818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:44:06.126 [DEBUG] [Thread-125818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:44:06.134 [DEBUG] [Thread-125818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:44:06.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:44:06.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:44:06.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:44:06.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:44:06.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:44:06.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:44:06.166 [DEBUG] [Thread-125818] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:44:07.610 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:16.429 [DEBUG] [Thread-125820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:19.017 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:19.018 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:21.146 [DEBUG] [Thread-125821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:27.987 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:31.486 [DEBUG] [Thread-125822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:44:36.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:44:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:44:36.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 44, 4), 14.77, 36.53, 0.0, 24.51, 15.03, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:44:36.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:44:04
2025-12-03T23:44:36.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:44:37.151 [DEBUG] [Thread-125823] [transport.py] [_log()] starting thread (client mode): 0xa27a1d20
2025-12-03T23:44:37.152 [DEBUG] [Thread-125823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:44:37.171 [DEBUG] [Thread-125823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:44:37.171 [INFO] [Thread-125823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] client lang: <none>
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] server lang: <none>
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] kex follows: False
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] Compression: none
2025-12-03T23:44:37.175 [DEBUG] [Thread-125823] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:44:37.189 [DEBUG] [Thread-125823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:44:37.189 [DEBUG] [Thread-125823] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:44:37.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:44:37.189 [DEBUG] [Thread-125823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:44:37.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:44:37.190 [DEBUG] [Thread-125823] [transport.py] [_log()] userauth is OK
2025-12-03T23:44:37.190 [DEBUG] [Thread-125823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:44:37.190 [DEBUG] [Thread-125823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:44:37.190 [DEBUG] [Thread-125823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:44:37.190 [DEBUG] [Thread-125823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:44:37.205 [INFO] [Thread-125823] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:44:37.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:44:37.769 [DEBUG] [Thread-125823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:44:37.769 [DEBUG] [Thread-125823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:44:37.770 [DEBUG] [Thread-125823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:44:37.810 [DEBUG] [Thread-125823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:44:37.810 [DEBUG] [Thread-125823] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:44:37.813 [DEBUG] [Thread-125823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:44:37.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:44:37.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:44:37.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:44:37.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:44:37.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:44:37.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:44:37.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.905256 -999.00  +15.10  18.29     41   +2.10 1 1 1 1 1     0    0 12.61 -18.78 ZNESW 20.7 18.3 143.4 25.2 15.6 -25.6 15.4 -25.1 15.2 -23.5 15.4 -24.4
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.905256
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:44:37.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:44:04', tmtdew=14.77, humidity=36.53, cloud=0.0, wind=24.51, temperature=15.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:44:04', seeing=0.92, atlas_timestamp='2025-12-03T21:43:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:40:00')
2025-12-03T23:44:37.830 [DEBUG] [Thread-125823] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:44:37.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:44:37.924 [DEBUG] [Thread-125826] [transport.py] [_log()] starting thread (client mode): 0xa27a1330
2025-12-03T23:44:37.924 [DEBUG] [Thread-125826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:44:37.937 [DEBUG] [Thread-125826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:44:37.937 [INFO] [Thread-125826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] client lang: <none>
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] server lang: <none>
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] kex follows: False
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] Compression: none
2025-12-03T23:44:37.945 [DEBUG] [Thread-125826] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:44:38.001 [DEBUG] [Thread-125826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:44:38.001 [DEBUG] [Thread-125826] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:44:38.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:44:38.001 [DEBUG] [Thread-125826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:44:38.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:44:38.058 [DEBUG] [Thread-125826] [transport.py] [_log()] userauth is OK
2025-12-03T23:44:38.058 [DEBUG] [Thread-125826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:44:38.058 [DEBUG] [Thread-125826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:44:38.058 [DEBUG] [Thread-125826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:44:38.058 [DEBUG] [Thread-125826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:44:38.075 [INFO] [Thread-125826] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:44:38.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:44:38.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:44:38.918 [DEBUG] [Thread-125826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:44:38.919 [DEBUG] [Thread-125826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:44:38.967 [DEBUG] [Thread-125826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:44:38.967 [DEBUG] [Thread-125826] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:44:38.976 [DEBUG] [Thread-125826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:44:38.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:44:38.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:44:38.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:44:39.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:44:39.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:44:39.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:44:39.011 [DEBUG] [Thread-125826] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:44:46.519 [DEBUG] [Thread-125828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:44:48.971 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:01.568 [DEBUG] [Thread-125829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:09.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:45:09.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:45:09.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:45:09.737 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 44, 36), 14.72, 36.57, 0.0, 25.0, 15.07, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:45:09.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:44:36
2025-12-03T23:45:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:45:10.049 [DEBUG] [Thread-125830] [transport.py] [_log()] starting thread (client mode): 0x9fd23610
2025-12-03T23:45:10.049 [DEBUG] [Thread-125830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:45:10.076 [DEBUG] [Thread-125830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:45:10.076 [INFO] [Thread-125830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:45:10.079 [DEBUG] [Thread-125830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] client lang: <none>
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] server lang: <none>
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] kex follows: False
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] Compression: none
2025-12-03T23:45:10.080 [DEBUG] [Thread-125830] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:45:10.087 [DEBUG] [Thread-125830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:45:10.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:45:10.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] userauth is OK
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:45:10.088 [DEBUG] [Thread-125830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:45:10.097 [INFO] [Thread-125830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:45:10.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:45:11.132 [DEBUG] [Thread-125830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:45:11.132 [DEBUG] [Thread-125830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:45:11.132 [DEBUG] [Thread-125830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:45:11.173 [DEBUG] [Thread-125830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:45:11.173 [DEBUG] [Thread-125830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:45:11.176 [DEBUG] [Thread-125830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:45:11.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:45:11.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:45:11.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:45:11.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:45:11.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:45:11.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:45:11.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:45:11.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:45:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:45:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.905951 -999.00  +15.10  13.18     41   +2.10 1 1 1 1 1     0    0 12.58 -22.38 ZNESW 16.7 13.2 147.4 25.4 15.5 -25.6 15.4 -25.2 15.2 -23.5 15.4 -24.1
2025-12-03T23:45:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:45:11.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:45:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.905951
2025-12-03T23:45:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:45:11.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:45:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:45:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:45:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:45:11.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:44:36', tmtdew=14.72, humidity=36.57, cloud=0.0, wind=25.0, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:44:37', seeing=0.88, atlas_timestamp='2025-12-03T21:44:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:45:11.200 [DEBUG] [Thread-125830] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:45:11.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:45:11.301 [DEBUG] [Thread-125833] [transport.py] [_log()] starting thread (client mode): 0x9fd23be0
2025-12-03T23:45:11.301 [DEBUG] [Thread-125833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:45:11.315 [DEBUG] [Thread-125833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:45:11.315 [INFO] [Thread-125833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] client lang: <none>
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] server lang: <none>
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] kex follows: False
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:45:11.323 [DEBUG] [Thread-125833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:45:11.324 [DEBUG] [Thread-125833] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:45:11.324 [DEBUG] [Thread-125833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:45:11.324 [DEBUG] [Thread-125833] [transport.py] [_log()] Compression: none
2025-12-03T23:45:11.324 [DEBUG] [Thread-125833] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:45:11.382 [DEBUG] [Thread-125833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:45:11.382 [DEBUG] [Thread-125833] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:45:11.382 [DEBUG] [Thread-125833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:45:11.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:45:11.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:45:11.438 [DEBUG] [Thread-125833] [transport.py] [_log()] userauth is OK
2025-12-03T23:45:11.438 [DEBUG] [Thread-125833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:45:11.438 [DEBUG] [Thread-125833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:45:11.439 [DEBUG] [Thread-125833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:45:11.439 [DEBUG] [Thread-125833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:45:11.461 [INFO] [Thread-125833] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:45:11.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:45:11.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:45:12.306 [DEBUG] [Thread-125833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:45:12.307 [DEBUG] [Thread-125833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:45:12.355 [DEBUG] [Thread-125833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:45:12.355 [DEBUG] [Thread-125833] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:45:12.364 [DEBUG] [Thread-125833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:45:12.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:45:12.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:45:12.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:45:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:45:12.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:45:12.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:45:12.398 [DEBUG] [Thread-125833] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:45:16.599 [DEBUG] [Thread-125835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:19.213 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:19.214 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:21.200 [DEBUG] [Thread-125836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:30.707 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:31.668 [DEBUG] [Thread-125837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:42.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:45:42.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:45:42.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:45:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 45, 8), 14.67, 36.66, 0.0, 27.03, 15.02, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:45:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:45:08
2025-12-03T23:45:43.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:45:43.420 [DEBUG] [Thread-125838] [transport.py] [_log()] starting thread (client mode): 0xa27a0f40
2025-12-03T23:45:43.420 [DEBUG] [Thread-125838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:45:43.436 [DEBUG] [Thread-125838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:45:43.436 [INFO] [Thread-125838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:45:43.439 [DEBUG] [Thread-125838] [transport.py] [_log()] client lang: <none>
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] server lang: <none>
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] kex follows: False
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] Compression: none
2025-12-03T23:45:43.440 [DEBUG] [Thread-125838] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:45:43.457 [DEBUG] [Thread-125838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:45:43.457 [DEBUG] [Thread-125838] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:45:43.458 [DEBUG] [Thread-125838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:45:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:45:43.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:45:43.459 [DEBUG] [Thread-125838] [transport.py] [_log()] userauth is OK
2025-12-03T23:45:43.460 [DEBUG] [Thread-125838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:45:43.460 [DEBUG] [Thread-125838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:45:43.460 [DEBUG] [Thread-125838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:45:43.460 [DEBUG] [Thread-125838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:45:43.483 [INFO] [Thread-125838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:45:43.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:45:44.111 [DEBUG] [Thread-125838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:45:44.112 [DEBUG] [Thread-125838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:45:44.112 [DEBUG] [Thread-125838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:45:44.153 [DEBUG] [Thread-125838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:45:44.153 [DEBUG] [Thread-125838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:45:44.156 [DEBUG] [Thread-125838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:45:44.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:45:44.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:45:44.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:45:44.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:45:44.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:45:44.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:45:44.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.906298 -999.00  +15.10  22.08     41   +2.20 1 1 1 1 1     0    0 12.77 -22.74 ZNESW 19.8 22.1 141.6 27.5 15.5 -25.5 15.4 -25.0 15.2 -23.6 15.4 -24.4
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:45:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.906298
2025-12-03T23:45:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:45:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:45:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:45:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:45:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:45:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:45:08', tmtdew=14.67, humidity=36.66, cloud=0.0, wind=27.03, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:45:41', seeing=0.86, atlas_timestamp='2025-12-03T21:45:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:45:44.179 [DEBUG] [Thread-125838] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:45:44.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:45:44.276 [DEBUG] [Thread-125841] [transport.py] [_log()] starting thread (client mode): 0xa27a1d20
2025-12-03T23:45:44.276 [DEBUG] [Thread-125841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:45:44.291 [DEBUG] [Thread-125841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:45:44.291 [INFO] [Thread-125841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:45:44.298 [DEBUG] [Thread-125841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:45:44.298 [DEBUG] [Thread-125841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] client lang: <none>
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] server lang: <none>
2025-12-03T23:45:44.299 [DEBUG] [Thread-125841] [transport.py] [_log()] kex follows: False
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] Compression: none
2025-12-03T23:45:44.300 [DEBUG] [Thread-125841] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:45:44.361 [DEBUG] [Thread-125841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:45:44.361 [DEBUG] [Thread-125841] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:45:44.362 [DEBUG] [Thread-125841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:45:44.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:45:44.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:45:44.419 [DEBUG] [Thread-125841] [transport.py] [_log()] userauth is OK
2025-12-03T23:45:44.420 [DEBUG] [Thread-125841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:45:44.420 [DEBUG] [Thread-125841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:45:44.420 [DEBUG] [Thread-125841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:45:44.420 [DEBUG] [Thread-125841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:45:44.442 [INFO] [Thread-125841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:45:44.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:45:44.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:45:45.296 [DEBUG] [Thread-125841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:45:45.296 [DEBUG] [Thread-125841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:45:45.344 [DEBUG] [Thread-125841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:45:45.344 [DEBUG] [Thread-125841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:45:45.352 [DEBUG] [Thread-125841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:45:45.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:45:45.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:45:45.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:45:45.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:45:45.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:45:45.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:45:45.387 [DEBUG] [Thread-125841] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:45:46.703 [DEBUG] [Thread-125843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:45:51.176 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:01.766 [DEBUG] [Thread-125844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:11.603 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:15.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:46:15.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:46:15.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:46:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 46, 13), 14.65, 36.71, 0.0, 23.24, 14.97, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:46:16.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:46:13
2025-12-03T23:46:16.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:46:16.374 [DEBUG] [Thread-125845] [transport.py] [_log()] starting thread (client mode): 0x9fd20340
2025-12-03T23:46:16.374 [DEBUG] [Thread-125845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:46:16.395 [DEBUG] [Thread-125845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:46:16.396 [INFO] [Thread-125845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:16.399 [DEBUG] [Thread-125845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] client lang: <none>
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] server lang: <none>
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] kex follows: False
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:46:16.400 [DEBUG] [Thread-125845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:46:16.401 [DEBUG] [Thread-125845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:46:16.401 [DEBUG] [Thread-125845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:46:16.401 [DEBUG] [Thread-125845] [transport.py] [_log()] Compression: none
2025-12-03T23:46:16.401 [DEBUG] [Thread-125845] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:46:16.420 [DEBUG] [Thread-125845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:46:16.420 [DEBUG] [Thread-125845] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:46:16.421 [DEBUG] [Thread-125845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:46:16.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:46:16.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:46:16.422 [DEBUG] [Thread-125845] [transport.py] [_log()] userauth is OK
2025-12-03T23:46:16.423 [DEBUG] [Thread-125845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:46:16.423 [DEBUG] [Thread-125845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:46:16.423 [DEBUG] [Thread-125845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:46:16.423 [DEBUG] [Thread-125845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:46:16.458 [INFO] [Thread-125845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:46:16.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:46:16.800 [DEBUG] [Thread-125847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:17.117 [DEBUG] [Thread-125845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:46:17.117 [DEBUG] [Thread-125845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:46:17.117 [DEBUG] [Thread-125845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:46:17.158 [DEBUG] [Thread-125845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:46:17.158 [DEBUG] [Thread-125845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:46:17.161 [DEBUG] [Thread-125845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:46:17.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:46:17.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:46:17.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:46:17.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:46:17.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:46:17.184 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:46:17.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:46:17.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.906645 -999.00  +15.10  20.54     41   +2.20 1 1 1 1 1     0    0 12.47 -23.65 ZNESW 16.3 20.5 142.2 27.9 15.5 -25.6 15.4 -25.1 15.1 -23.5 15.4 -24.5
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.906645
2025-12-03T23:46:17.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:46:17.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:46:17.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:46:17.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:46:17.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:46:17.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:46:13', tmtdew=14.65, humidity=36.71, cloud=0.0, wind=23.24, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:46:13', seeing=0.93, atlas_timestamp='2025-12-03T21:45:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:46:17.186 [DEBUG] [Thread-125845] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:46:17.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:46:17.294 [DEBUG] [Thread-125849] [transport.py] [_log()] starting thread (client mode): 0x9fd23cd0
2025-12-03T23:46:17.294 [DEBUG] [Thread-125849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:46:17.308 [DEBUG] [Thread-125849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:46:17.309 [INFO] [Thread-125849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:46:17.316 [DEBUG] [Thread-125849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:46:17.316 [DEBUG] [Thread-125849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:46:17.316 [DEBUG] [Thread-125849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:46:17.316 [DEBUG] [Thread-125849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] client lang: <none>
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] server lang: <none>
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] kex follows: False
2025-12-03T23:46:17.317 [DEBUG] [Thread-125849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] Compression: none
2025-12-03T23:46:17.318 [DEBUG] [Thread-125849] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:46:17.373 [DEBUG] [Thread-125849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:46:17.374 [DEBUG] [Thread-125849] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:46:17.374 [DEBUG] [Thread-125849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:46:17.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:46:17.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:46:17.430 [DEBUG] [Thread-125849] [transport.py] [_log()] userauth is OK
2025-12-03T23:46:17.431 [DEBUG] [Thread-125849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:46:17.431 [DEBUG] [Thread-125849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:46:17.431 [DEBUG] [Thread-125849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:46:17.431 [DEBUG] [Thread-125849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:46:17.449 [INFO] [Thread-125849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:46:17.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:46:17.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:46:18.271 [DEBUG] [Thread-125849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:46:18.272 [DEBUG] [Thread-125849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:46:18.320 [DEBUG] [Thread-125849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:46:18.320 [DEBUG] [Thread-125849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:46:18.329 [DEBUG] [Thread-125849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:46:18.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:46:18.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:46:18.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:46:18.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:46:18.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:46:18.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:46:18.363 [DEBUG] [Thread-125849] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:46:19.415 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:19.416 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:21.261 [DEBUG] [Thread-125851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:31.836 [DEBUG] [Thread-125852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:32.330 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:46.901 [DEBUG] [Thread-125853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:46:48.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:46:48.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:46:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:46:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 46, 45), 14.53, 37.25, 0.0, 23.43, 14.83, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:46:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:46:45
2025-12-03T23:46:49.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:46:49.334 [DEBUG] [Thread-125854] [transport.py] [_log()] starting thread (client mode): 0xa27a3910
2025-12-03T23:46:49.335 [DEBUG] [Thread-125854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:46:49.355 [DEBUG] [Thread-125854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:46:49.355 [INFO] [Thread-125854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:49.359 [DEBUG] [Thread-125854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] client lang: <none>
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] server lang: <none>
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] kex follows: False
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] Compression: none
2025-12-03T23:46:49.360 [DEBUG] [Thread-125854] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:46:49.379 [DEBUG] [Thread-125854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:46:49.379 [DEBUG] [Thread-125854] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:46:49.380 [DEBUG] [Thread-125854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:46:49.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:46:49.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:46:49.382 [DEBUG] [Thread-125854] [transport.py] [_log()] userauth is OK
2025-12-03T23:46:49.382 [DEBUG] [Thread-125854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:46:49.382 [DEBUG] [Thread-125854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:46:49.382 [DEBUG] [Thread-125854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:46:49.383 [DEBUG] [Thread-125854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:46:49.405 [INFO] [Thread-125854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:46:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:46:50.058 [DEBUG] [Thread-125854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:46:50.059 [DEBUG] [Thread-125854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:46:50.059 [DEBUG] [Thread-125854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:46:50.100 [DEBUG] [Thread-125854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:46:50.100 [DEBUG] [Thread-125854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:46:50.103 [DEBUG] [Thread-125854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:46:50.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:46:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:46:50.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:46:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:46:50.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:46:50.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:46:50.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:46:50.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.906992 -999.00  +15.00  22.73     42   +2.20 1 1 1 1 1     0    0 12.74 -22.37 ZNESW 25.3 22.7 142.4 26.2 15.5 -25.6 15.3 -25.0 15.1 -23.5 15.4 -24.1
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.906992
2025-12-03T23:46:50.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:46:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:46:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:46:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:46:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:46:50.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:46:45', tmtdew=14.53, humidity=37.25, cloud=0.0, wind=23.43, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:46:45', seeing=0.92, atlas_timestamp='2025-12-03T21:46:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:46:50.130 [DEBUG] [Thread-125854] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:46:50.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:46:50.244 [DEBUG] [Thread-125857] [transport.py] [_log()] starting thread (client mode): 0xa51bb970
2025-12-03T23:46:50.244 [DEBUG] [Thread-125857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:46:50.258 [DEBUG] [Thread-125857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:46:50.259 [INFO] [Thread-125857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:46:50.266 [DEBUG] [Thread-125857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:46:50.266 [DEBUG] [Thread-125857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:46:50.266 [DEBUG] [Thread-125857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:46:50.266 [DEBUG] [Thread-125857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] client lang: <none>
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] server lang: <none>
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] kex follows: False
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] Compression: none
2025-12-03T23:46:50.267 [DEBUG] [Thread-125857] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:46:50.326 [DEBUG] [Thread-125857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:46:50.326 [DEBUG] [Thread-125857] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:46:50.327 [DEBUG] [Thread-125857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:46:50.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:46:50.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:46:50.382 [DEBUG] [Thread-125857] [transport.py] [_log()] userauth is OK
2025-12-03T23:46:50.382 [DEBUG] [Thread-125857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:46:50.382 [DEBUG] [Thread-125857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:46:50.382 [DEBUG] [Thread-125857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:46:50.383 [DEBUG] [Thread-125857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:46:50.402 [INFO] [Thread-125857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:46:50.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:46:50.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:46:51.239 [DEBUG] [Thread-125857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:46:51.239 [DEBUG] [Thread-125857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:46:51.288 [DEBUG] [Thread-125857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:46:51.288 [DEBUG] [Thread-125857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:46:51.297 [DEBUG] [Thread-125857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:46:51.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:46:51.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:46:51.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:46:51.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:46:51.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:46:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:46:51.331 [DEBUG] [Thread-125857] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:46:52.748 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:01.936 [DEBUG] [Thread-125859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:13.259 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:16.992 [DEBUG] [Thread-125860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:19.618 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:19.618 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:21.322 [DEBUG] [Thread-125861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:47:21.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:47:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:47:22.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 47, 17), 14.48, 37.4, 0.0, 23.31, 14.87, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:47:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:47:17
2025-12-03T23:47:22.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:47:22.308 [DEBUG] [Thread-125862] [transport.py] [_log()] starting thread (client mode): 0xa51ba920
2025-12-03T23:47:22.309 [DEBUG] [Thread-125862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:47:22.329 [DEBUG] [Thread-125862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:47:22.329 [INFO] [Thread-125862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] client lang: <none>
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] server lang: <none>
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] kex follows: False
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:47:22.332 [DEBUG] [Thread-125862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:47:22.333 [DEBUG] [Thread-125862] [transport.py] [_log()] Compression: none
2025-12-03T23:47:22.333 [DEBUG] [Thread-125862] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:47:22.351 [DEBUG] [Thread-125862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:47:22.351 [DEBUG] [Thread-125862] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:47:22.352 [DEBUG] [Thread-125862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:47:22.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:47:22.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:47:22.354 [DEBUG] [Thread-125862] [transport.py] [_log()] userauth is OK
2025-12-03T23:47:22.354 [DEBUG] [Thread-125862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:47:22.354 [DEBUG] [Thread-125862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:47:22.354 [DEBUG] [Thread-125862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:47:22.354 [DEBUG] [Thread-125862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:47:22.376 [INFO] [Thread-125862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:47:22.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:47:23.024 [DEBUG] [Thread-125862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:47:23.024 [DEBUG] [Thread-125862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:47:23.024 [DEBUG] [Thread-125862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:47:23.065 [DEBUG] [Thread-125862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:47:23.065 [DEBUG] [Thread-125862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:47:23.068 [DEBUG] [Thread-125862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:47:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:47:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:47:23.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:47:23.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:47:23.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:47:23.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:47:23.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:47:23.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:47:23.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:47:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.907340 -999.00  +15.00  21.90     42   +2.20 1 1 1 1 1     0    0 12.82 -23.91 ZNESW 20.8 21.9 142.6 28.8 15.4 -25.5 15.3 -25.1 15.1 -23.5 15.4 -24.3
2025-12-03T23:47:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:47:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:47:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.907340
2025-12-03T23:47:23.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:47:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:47:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:47:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:47:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:47:23.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:47:17', tmtdew=14.48, humidity=37.4, cloud=0.0, wind=23.31, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:47:17', seeing=0.85, atlas_timestamp='2025-12-03T21:46:34.176', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:47:23.093 [DEBUG] [Thread-125862] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:47:23.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:47:23.196 [DEBUG] [Thread-125865] [transport.py] [_log()] starting thread (client mode): 0xa27a2560
2025-12-03T23:47:23.196 [DEBUG] [Thread-125865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:47:23.211 [DEBUG] [Thread-125865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:47:23.211 [INFO] [Thread-125865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:23.219 [DEBUG] [Thread-125865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] client lang: <none>
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] server lang: <none>
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] kex follows: False
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:47:23.220 [DEBUG] [Thread-125865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:47:23.221 [DEBUG] [Thread-125865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:47:23.221 [DEBUG] [Thread-125865] [transport.py] [_log()] Compression: none
2025-12-03T23:47:23.221 [DEBUG] [Thread-125865] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:47:23.277 [DEBUG] [Thread-125865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:47:23.278 [DEBUG] [Thread-125865] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:47:23.278 [DEBUG] [Thread-125865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:47:23.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:47:23.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:47:23.334 [DEBUG] [Thread-125865] [transport.py] [_log()] userauth is OK
2025-12-03T23:47:23.334 [DEBUG] [Thread-125865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:47:23.334 [DEBUG] [Thread-125865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:47:23.334 [DEBUG] [Thread-125865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:47:23.334 [DEBUG] [Thread-125865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:47:23.354 [INFO] [Thread-125865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:47:23.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:47:23.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:47:24.219 [DEBUG] [Thread-125865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:47:24.219 [DEBUG] [Thread-125865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:47:24.267 [DEBUG] [Thread-125865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:47:24.267 [DEBUG] [Thread-125865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:47:24.276 [DEBUG] [Thread-125865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:47:24.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:47:24.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:47:24.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:47:24.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:47:24.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:47:24.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:47:24.310 [DEBUG] [Thread-125865] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:47:32.031 [DEBUG] [Thread-125867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:33.717 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:47.089 [DEBUG] [Thread-125868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:54.172 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:47:54.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:47:54.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:47:54.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:47:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 47, 49), 14.36, 37.56, 0.0, 24.51, 14.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:47:55.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:47:49
2025-12-03T23:47:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:47:55.326 [DEBUG] [Thread-125869] [transport.py] [_log()] starting thread (client mode): 0x9fd23af0
2025-12-03T23:47:55.326 [DEBUG] [Thread-125869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:47:55.345 [DEBUG] [Thread-125869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:47:55.345 [INFO] [Thread-125869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] client lang: <none>
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] server lang: <none>
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] kex follows: False
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] Compression: none
2025-12-03T23:47:55.349 [DEBUG] [Thread-125869] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:47:55.365 [DEBUG] [Thread-125869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:47:55.365 [DEBUG] [Thread-125869] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:47:55.365 [DEBUG] [Thread-125869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:47:55.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:47:55.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:47:55.366 [DEBUG] [Thread-125869] [transport.py] [_log()] userauth is OK
2025-12-03T23:47:55.366 [DEBUG] [Thread-125869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:47:55.366 [DEBUG] [Thread-125869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:47:55.366 [DEBUG] [Thread-125869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:47:55.366 [DEBUG] [Thread-125869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:47:55.376 [INFO] [Thread-125869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:47:55.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:47:56.008 [DEBUG] [Thread-125869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:47:56.008 [DEBUG] [Thread-125869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:47:56.008 [DEBUG] [Thread-125869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:47:56.049 [DEBUG] [Thread-125869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:47:56.049 [DEBUG] [Thread-125869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:47:56.052 [DEBUG] [Thread-125869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:47:56.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:47:56.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:47:56.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:47:56.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:47:56.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:47:56.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:47:56.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:47:56.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:47:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:47:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.907687 -999.00  +15.00  15.13     42   +2.30 1 1 1 1 1     0    0 12.47 -23.41 ZNESW 14.5 15.1 151.8 27.6 15.4 -25.5 15.3 -25.0 15.1 -23.3 15.4 -24.3
2025-12-03T23:47:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:47:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.907687
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:47:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:47:49', tmtdew=14.36, humidity=37.56, cloud=0.0, wind=24.51, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:47:51', seeing=0.81, atlas_timestamp='2025-12-03T21:47:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, 0.02925000000000111, -0.07724999999999937, 0.0030000000000001137, 0.027999999999998693, 0.015249999999999986, -0.08900000000000041, -0.021749999999999048, -0.0884999999999998, 0.0019999999999988916, 0.0442499999999999, -0.02999999999999936, 0.036999999999999034, 0.025750000000000384, -0.12150000000000105, -0.16500000000000092, -0.003750000000000142, 0.018500000000001293, 0.007999999999999119, -0.03575000000000017, 0.02499999999999858, -0.01675000000000182, -0.06374999999999886, -0.06424999999999947, 0.009999999999999787, 0.016500000000000625, -0.036249999999999005, 0.02900000000000169, 0.12299999999999933, 0.15100000000000158, -0.1399999999999988, -0.2134999999999998, 0.025249999999999773], zp_timestamp='2025-12-03T21:44:00')
2025-12-03T23:47:56.070 [DEBUG] [Thread-125869] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:47:56.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:47:56.163 [DEBUG] [Thread-125872] [transport.py] [_log()] starting thread (client mode): 0xa2746110
2025-12-03T23:47:56.163 [DEBUG] [Thread-125872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:47:56.178 [DEBUG] [Thread-125872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:47:56.178 [INFO] [Thread-125872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:47:56.185 [DEBUG] [Thread-125872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] client lang: <none>
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] server lang: <none>
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] kex follows: False
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] Compression: none
2025-12-03T23:47:56.186 [DEBUG] [Thread-125872] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:47:56.240 [DEBUG] [Thread-125872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:47:56.241 [DEBUG] [Thread-125872] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:47:56.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:47:56.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:47:56.241 [DEBUG] [Thread-125872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:47:56.298 [DEBUG] [Thread-125872] [transport.py] [_log()] userauth is OK
2025-12-03T23:47:56.298 [DEBUG] [Thread-125872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:47:56.298 [DEBUG] [Thread-125872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:47:56.298 [DEBUG] [Thread-125872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:47:56.299 [DEBUG] [Thread-125872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:47:56.314 [INFO] [Thread-125872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:47:56.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:47:56.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:47:57.140 [DEBUG] [Thread-125872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:47:57.140 [DEBUG] [Thread-125872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:47:57.188 [DEBUG] [Thread-125872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:47:57.188 [DEBUG] [Thread-125872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:47:57.196 [DEBUG] [Thread-125872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:47:57.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:47:57.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:47:57.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:47:57.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:47:57.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:47:57.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:47:57.229 [DEBUG] [Thread-125872] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:48:02.126 [DEBUG] [Thread-125874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:14.817 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:17.188 [DEBUG] [Thread-125875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:19.816 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:19.817 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:21.380 [DEBUG] [Thread-125876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:48:27.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:48:27.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:48:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 48, 23), 14.35, 37.6, 0.0, 23.5, 14.77, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:48:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:48:23
2025-12-03T23:48:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:48:28.185 [DEBUG] [Thread-125877] [transport.py] [_log()] starting thread (client mode): 0xa27a31f0
2025-12-03T23:48:28.185 [DEBUG] [Thread-125877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:48:28.204 [DEBUG] [Thread-125877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:48:28.205 [INFO] [Thread-125877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:48:28.207 [DEBUG] [Thread-125877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:48:28.208 [DEBUG] [Thread-125877] [transport.py] [_log()] client lang: <none>
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] server lang: <none>
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] kex follows: False
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] Compression: none
2025-12-03T23:48:28.209 [DEBUG] [Thread-125877] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:48:28.228 [DEBUG] [Thread-125877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:48:28.229 [DEBUG] [Thread-125877] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:48:28.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:48:28.229 [DEBUG] [Thread-125877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:48:28.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:48:28.231 [DEBUG] [Thread-125877] [transport.py] [_log()] userauth is OK
2025-12-03T23:48:28.232 [DEBUG] [Thread-125877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:48:28.232 [DEBUG] [Thread-125877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:48:28.232 [DEBUG] [Thread-125877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:48:28.232 [DEBUG] [Thread-125877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:48:28.267 [INFO] [Thread-125877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:48:28.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:48:28.895 [DEBUG] [Thread-125877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:48:28.895 [DEBUG] [Thread-125877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:48:28.896 [DEBUG] [Thread-125877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:48:28.937 [DEBUG] [Thread-125877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:48:28.937 [DEBUG] [Thread-125877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:48:28.940 [DEBUG] [Thread-125877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:48:28.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:48:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:48:28.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:48:28.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:48:28.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:48:28.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:48:28.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:48:28.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:48:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:48:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.908381 -999.00  +14.90  14.75     42   +2.20 1 1 1 1 1     0    0 12.46 -28.42 ZNESW 18.4 14.8 147.6 26.2 15.4 -25.6 15.3 -24.9 15.0 -23.4 15.3 -24.5
2025-12-03T23:48:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:48:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:48:28.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.908381
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:48:28.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:48:23', tmtdew=14.35, humidity=37.6, cloud=0.0, wind=23.5, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:48:23', seeing=0.87, atlas_timestamp='2025-12-03T21:48:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009250000000001535, -0.014749999999999375, -0.04324999999999868, 0.013500000000000512, 0.059499999999999886, 0.01025000000000098, -0.15500000000000114, -0.021749999999999048, -0.034000000000000696, 0.008500000000001506, -0.009249999999999758, -0.006000000000000227, 0.05999999999999872, 0.013249999999999318, -0.08500000000000085, -0.14250000000000185, -0.007749999999999702, 0.005999999999998451, 0.0035000000000007248, -0.03675000000000139, 0.00999999999999801, 0.000249999999997641, -0.04875000000000007, -0.05775000000000041, -0.028499999999999304, -0.0015000000000000568, -0.0652500000000007, -0.015499999999999403, 0.11100000000000065, 0.0860000000000003, -0.15449999999999875, -0.11499999999999844, 0.02674999999999983], zp_timestamp='2025-12-03T21:46:00')
2025-12-03T23:48:28.967 [DEBUG] [Thread-125877] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:48:29.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:48:29.070 [DEBUG] [Thread-125880] [transport.py] [_log()] starting thread (client mode): 0x9fd23070
2025-12-03T23:48:29.070 [DEBUG] [Thread-125880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:48:29.085 [DEBUG] [Thread-125880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:48:29.085 [INFO] [Thread-125880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:48:29.092 [DEBUG] [Thread-125880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:48:29.092 [DEBUG] [Thread-125880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:48:29.092 [DEBUG] [Thread-125880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:48:29.092 [DEBUG] [Thread-125880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:48:29.092 [DEBUG] [Thread-125880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] client lang: <none>
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] server lang: <none>
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] kex follows: False
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] Compression: none
2025-12-03T23:48:29.093 [DEBUG] [Thread-125880] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:48:29.150 [DEBUG] [Thread-125880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:48:29.150 [DEBUG] [Thread-125880] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:48:29.150 [DEBUG] [Thread-125880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:48:29.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:48:29.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:48:29.206 [DEBUG] [Thread-125880] [transport.py] [_log()] userauth is OK
2025-12-03T23:48:29.206 [DEBUG] [Thread-125880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:48:29.206 [DEBUG] [Thread-125880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:48:29.207 [DEBUG] [Thread-125880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:48:29.207 [DEBUG] [Thread-125880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:48:29.227 [INFO] [Thread-125880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:48:29.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:48:29.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:48:30.148 [DEBUG] [Thread-125880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:48:30.149 [DEBUG] [Thread-125880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:48:30.197 [DEBUG] [Thread-125880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:48:30.197 [DEBUG] [Thread-125880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:48:30.206 [DEBUG] [Thread-125880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:48:30.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:48:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:48:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:48:30.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:48:30.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:48:30.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:48:30.240 [DEBUG] [Thread-125880] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:48:32.227 [DEBUG] [Thread-125882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:35.219 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:47.278 [DEBUG] [Thread-125883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:48:55.625 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:49:00.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:49:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:49:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 48, 55), 14.28, 37.65, 0.0, 24.37, 14.7, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:49:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:48:55
2025-12-03T23:49:01.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:49:01.227 [DEBUG] [Thread-125884] [transport.py] [_log()] starting thread (client mode): 0xa51bbcd0
2025-12-03T23:49:01.227 [DEBUG] [Thread-125884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:49:01.249 [DEBUG] [Thread-125884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:49:01.249 [INFO] [Thread-125884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] client lang: <none>
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] server lang: <none>
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] kex follows: False
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:49:01.252 [DEBUG] [Thread-125884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:49:01.253 [DEBUG] [Thread-125884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:49:01.253 [DEBUG] [Thread-125884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:49:01.253 [DEBUG] [Thread-125884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:49:01.253 [DEBUG] [Thread-125884] [transport.py] [_log()] Compression: none
2025-12-03T23:49:01.253 [DEBUG] [Thread-125884] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:49:01.270 [DEBUG] [Thread-125884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:49:01.271 [DEBUG] [Thread-125884] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:49:01.271 [DEBUG] [Thread-125884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:49:01.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:49:01.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:49:01.273 [DEBUG] [Thread-125884] [transport.py] [_log()] userauth is OK
2025-12-03T23:49:01.274 [DEBUG] [Thread-125884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:49:01.274 [DEBUG] [Thread-125884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:49:01.274 [DEBUG] [Thread-125884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:49:01.274 [DEBUG] [Thread-125884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:49:01.297 [INFO] [Thread-125884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:49:01.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:49:01.910 [DEBUG] [Thread-125884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:49:01.910 [DEBUG] [Thread-125884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:49:01.910 [DEBUG] [Thread-125884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:49:01.951 [DEBUG] [Thread-125884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:49:01.951 [DEBUG] [Thread-125884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:49:01.954 [DEBUG] [Thread-125884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:49:01.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:49:01.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:49:01.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:49:01.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:49:01.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:49:01.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:49:01.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:49:01.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.908728 -999.00  +14.90  19.86     42   +2.20 1 1 1 1 1     0    0 12.32 -28.84 ZNESW 17.6 19.9 141.8 24.7 15.3 -25.5 15.2 -24.9 15.0 -23.3 15.3 -24.4
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.908728
2025-12-03T23:49:01.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:49:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:49:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:49:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:49:01.981 [DEBUG] [Thread-125884] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:49:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:49:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:48:55', tmtdew=14.28, humidity=37.65, cloud=0.0, wind=24.37, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:48:55', seeing=0.87, atlas_timestamp='2025-12-03T21:48:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009250000000001535, -0.014749999999999375, -0.04324999999999868, 0.013500000000000512, 0.059499999999999886, 0.01025000000000098, -0.15500000000000114, -0.021749999999999048, -0.034000000000000696, 0.008500000000001506, -0.009249999999999758, -0.006000000000000227, 0.05999999999999872, 0.013249999999999318, -0.08500000000000085, -0.14250000000000185, -0.007749999999999702, 0.005999999999998451, 0.0035000000000007248, -0.03675000000000139, 0.00999999999999801, 0.000249999999997641, -0.04875000000000007, -0.05775000000000041, -0.028499999999999304, -0.0015000000000000568, -0.0652500000000007, -0.015499999999999403, 0.11100000000000065, 0.0860000000000003, -0.15449999999999875, -0.11499999999999844, 0.02674999999999983], zp_timestamp='2025-12-03T21:46:00')
2025-12-03T23:49:02.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:49:02.084 [DEBUG] [Thread-125887] [transport.py] [_log()] starting thread (client mode): 0x9fd23160
2025-12-03T23:49:02.084 [DEBUG] [Thread-125887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:49:02.099 [DEBUG] [Thread-125887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:49:02.099 [INFO] [Thread-125887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] client lang: <none>
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] server lang: <none>
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] kex follows: False
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] Compression: none
2025-12-03T23:49:02.107 [DEBUG] [Thread-125887] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:49:02.167 [DEBUG] [Thread-125887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:49:02.167 [DEBUG] [Thread-125887] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:49:02.168 [DEBUG] [Thread-125887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:49:02.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:49:02.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:49:02.226 [DEBUG] [Thread-125887] [transport.py] [_log()] userauth is OK
2025-12-03T23:49:02.226 [DEBUG] [Thread-125887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:49:02.226 [DEBUG] [Thread-125887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:49:02.226 [DEBUG] [Thread-125887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:49:02.227 [DEBUG] [Thread-125887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:49:02.245 [INFO] [Thread-125887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:49:02.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:49:02.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:49:02.320 [DEBUG] [Thread-125889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:03.096 [DEBUG] [Thread-125887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:49:03.096 [DEBUG] [Thread-125887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:49:03.144 [DEBUG] [Thread-125887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:49:03.144 [DEBUG] [Thread-125887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:49:03.153 [DEBUG] [Thread-125887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:49:03.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:49:03.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:49:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:49:03.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:49:03.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:49:03.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:49:03.187 [DEBUG] [Thread-125887] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:49:16.031 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:17.377 [DEBUG] [Thread-125890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:20.024 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:20.025 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:21.448 [DEBUG] [Thread-125891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:32.417 [DEBUG] [Thread-125892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:33.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:49:33.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:49:33.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:49:33.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 49, 27), 14.22, 37.79, 0.0, 23.8, 14.72, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:49:33.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:49:27
2025-12-03T23:49:33.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:49:34.135 [DEBUG] [Thread-125893] [transport.py] [_log()] starting thread (client mode): 0xa51b92d0
2025-12-03T23:49:34.135 [DEBUG] [Thread-125893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:49:34.156 [DEBUG] [Thread-125893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:49:34.156 [INFO] [Thread-125893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:49:34.159 [DEBUG] [Thread-125893] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:49:34.159 [DEBUG] [Thread-125893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:49:34.159 [DEBUG] [Thread-125893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:49:34.159 [DEBUG] [Thread-125893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:34.159 [DEBUG] [Thread-125893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] client lang: <none>
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] server lang: <none>
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] kex follows: False
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:49:34.160 [DEBUG] [Thread-125893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:49:34.161 [DEBUG] [Thread-125893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:49:34.161 [DEBUG] [Thread-125893] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:49:34.161 [DEBUG] [Thread-125893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:49:34.161 [DEBUG] [Thread-125893] [transport.py] [_log()] Compression: none
2025-12-03T23:49:34.161 [DEBUG] [Thread-125893] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:49:34.180 [DEBUG] [Thread-125893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:49:34.181 [DEBUG] [Thread-125893] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:49:34.181 [DEBUG] [Thread-125893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:49:34.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:49:34.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:49:34.183 [DEBUG] [Thread-125893] [transport.py] [_log()] userauth is OK
2025-12-03T23:49:34.183 [DEBUG] [Thread-125893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:49:34.183 [DEBUG] [Thread-125893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:49:34.184 [DEBUG] [Thread-125893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:49:34.184 [DEBUG] [Thread-125893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:49:34.207 [INFO] [Thread-125893] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:49:34.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:49:34.840 [DEBUG] [Thread-125893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:49:34.840 [DEBUG] [Thread-125893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:49:34.841 [DEBUG] [Thread-125893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:49:34.882 [DEBUG] [Thread-125893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:49:34.882 [DEBUG] [Thread-125893] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:49:34.884 [DEBUG] [Thread-125893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:49:34.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:49:34.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:49:34.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:49:34.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:49:34.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:49:34.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:49:34.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:49:34.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.909076 -999.00  +14.80  17.26     42   +2.20 1 1 1 1 1     0    0 12.28 -29.85 ZNESW 18.0 17.3 137.6 21.4 15.3 -25.6 15.2 -25.1 15.0 -23.4 15.3 -24.4
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.909076
2025-12-03T23:49:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:49:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:49:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:49:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:49:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:49:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:49:27', tmtdew=14.22, humidity=37.79, cloud=0.0, wind=23.8, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:49:27', seeing=0.83, atlas_timestamp='2025-12-03T21:49:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009250000000001535, -0.014749999999999375, -0.04324999999999868, 0.013500000000000512, 0.059499999999999886, 0.01025000000000098, -0.15500000000000114, -0.021749999999999048, -0.034000000000000696, 0.008500000000001506, -0.009249999999999758, -0.006000000000000227, 0.05999999999999872, 0.013249999999999318, -0.08500000000000085, -0.14250000000000185, -0.007749999999999702, 0.005999999999998451, 0.0035000000000007248, -0.03675000000000139, 0.00999999999999801, 0.000249999999997641, -0.04875000000000007, -0.05775000000000041, -0.028499999999999304, -0.0015000000000000568, -0.0652500000000007, -0.015499999999999403, 0.11100000000000065, 0.0860000000000003, -0.15449999999999875, -0.11499999999999844, 0.02674999999999983], zp_timestamp='2025-12-03T21:46:00')
2025-12-03T23:49:34.907 [DEBUG] [Thread-125893] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:49:34.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:49:35.009 [DEBUG] [Thread-125896] [transport.py] [_log()] starting thread (client mode): 0xa514d900
2025-12-03T23:49:35.009 [DEBUG] [Thread-125896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:49:35.023 [DEBUG] [Thread-125896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:49:35.023 [INFO] [Thread-125896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] client lang: <none>
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] server lang: <none>
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] kex follows: False
2025-12-03T23:49:35.031 [DEBUG] [Thread-125896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] Compression: none
2025-12-03T23:49:35.032 [DEBUG] [Thread-125896] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:49:35.095 [DEBUG] [Thread-125896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:49:35.095 [DEBUG] [Thread-125896] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:49:35.096 [DEBUG] [Thread-125896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:49:35.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:49:35.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:49:35.154 [DEBUG] [Thread-125896] [transport.py] [_log()] userauth is OK
2025-12-03T23:49:35.155 [DEBUG] [Thread-125896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:49:35.155 [DEBUG] [Thread-125896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:49:35.155 [DEBUG] [Thread-125896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:49:35.155 [DEBUG] [Thread-125896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:49:35.173 [INFO] [Thread-125896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:49:35.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:49:35.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:49:36.056 [DEBUG] [Thread-125896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:49:36.056 [DEBUG] [Thread-125896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:49:36.104 [DEBUG] [Thread-125896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:49:36.104 [DEBUG] [Thread-125896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:49:36.113 [DEBUG] [Thread-125896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:49:36.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:49:36.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:49:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:49:36.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:49:36.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:49:36.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:49:36.153 [DEBUG] [Thread-125896] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:49:36.415 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:47.455 [DEBUG] [Thread-125898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:49:56.961 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:02.511 [DEBUG] [Thread-125899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:06.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:50:06.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:50:06.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:50:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 49, 59), 14.15, 37.86, 0.0, 20.7, 14.73, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:50:06.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:49:59
2025-12-03T23:50:06.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:50:07.120 [DEBUG] [Thread-125900] [transport.py] [_log()] starting thread (client mode): 0xa2747940
2025-12-03T23:50:07.120 [DEBUG] [Thread-125900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:50:07.140 [DEBUG] [Thread-125900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:50:07.140 [INFO] [Thread-125900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:50:07.143 [DEBUG] [Thread-125900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:50:07.143 [DEBUG] [Thread-125900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:50:07.143 [DEBUG] [Thread-125900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:50:07.143 [DEBUG] [Thread-125900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] client lang: <none>
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] server lang: <none>
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] kex follows: False
2025-12-03T23:50:07.144 [DEBUG] [Thread-125900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] Compression: none
2025-12-03T23:50:07.145 [DEBUG] [Thread-125900] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:50:07.163 [DEBUG] [Thread-125900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:50:07.163 [DEBUG] [Thread-125900] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:50:07.164 [DEBUG] [Thread-125900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:50:07.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:50:07.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:50:07.166 [DEBUG] [Thread-125900] [transport.py] [_log()] userauth is OK
2025-12-03T23:50:07.166 [DEBUG] [Thread-125900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:50:07.166 [DEBUG] [Thread-125900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:50:07.166 [DEBUG] [Thread-125900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:50:07.166 [DEBUG] [Thread-125900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:50:07.185 [INFO] [Thread-125900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:50:07.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:50:07.757 [DEBUG] [Thread-125900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:50:07.757 [DEBUG] [Thread-125900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:50:07.758 [DEBUG] [Thread-125900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:50:07.799 [DEBUG] [Thread-125900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:50:07.799 [DEBUG] [Thread-125900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:50:07.801 [DEBUG] [Thread-125900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:50:07.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:50:07.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:50:07.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:50:07.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:50:07.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:50:07.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:50:07.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:50:07.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:50:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:50:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.909423 -999.00  +14.70  20.07     42   +2.20 1 1 1 1 1     0    0 12.15 -33.47 ZNESW 17.5 20.1 139.0 24.2 15.3 -25.6 15.2 -25.0 15.0 -23.5 15.2 -24.2
2025-12-03T23:50:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:50:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:50:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.909423
2025-12-03T23:50:07.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:50:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:50:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:50:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:50:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:50:07.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:49:59', tmtdew=14.15, humidity=37.86, cloud=0.0, wind=20.7, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:49:59', seeing=0.83, atlas_timestamp='2025-12-03T21:49:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009250000000001535, -0.014749999999999375, -0.04324999999999868, 0.013500000000000512, 0.059499999999999886, 0.01025000000000098, -0.15500000000000114, -0.021749999999999048, -0.034000000000000696, 0.008500000000001506, -0.009249999999999758, -0.006000000000000227, 0.05999999999999872, 0.013249999999999318, -0.08500000000000085, -0.14250000000000185, -0.007749999999999702, 0.005999999999998451, 0.0035000000000007248, -0.03675000000000139, 0.00999999999999801, 0.000249999999997641, -0.04875000000000007, -0.05775000000000041, -0.028499999999999304, -0.0015000000000000568, -0.0652500000000007, -0.015499999999999403, 0.11100000000000065, 0.0860000000000003, -0.15449999999999875, -0.11499999999999844, 0.02674999999999983], zp_timestamp='2025-12-03T21:46:00')
2025-12-03T23:50:07.826 [DEBUG] [Thread-125900] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:50:07.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:50:07.930 [DEBUG] [Thread-125903] [transport.py] [_log()] starting thread (client mode): 0xa2746ef0
2025-12-03T23:50:07.930 [DEBUG] [Thread-125903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:50:07.949 [DEBUG] [Thread-125903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:50:07.949 [INFO] [Thread-125903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:50:07.956 [DEBUG] [Thread-125903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:50:07.957 [DEBUG] [Thread-125903] [transport.py] [_log()] client lang: <none>
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] server lang: <none>
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] kex follows: False
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:50:07.958 [DEBUG] [Thread-125903] [transport.py] [_log()] Compression: none
2025-12-03T23:50:07.959 [DEBUG] [Thread-125903] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:50:08.019 [DEBUG] [Thread-125903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:50:08.019 [DEBUG] [Thread-125903] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:50:08.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:50:08.029 [DEBUG] [Thread-125903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:50:08.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:50:08.074 [DEBUG] [Thread-125903] [transport.py] [_log()] userauth is OK
2025-12-03T23:50:08.074 [DEBUG] [Thread-125903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:50:08.074 [DEBUG] [Thread-125903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:50:08.074 [DEBUG] [Thread-125903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:50:08.075 [DEBUG] [Thread-125903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:50:08.093 [INFO] [Thread-125903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:50:08.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:50:08.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:50:08.967 [DEBUG] [Thread-125903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:50:08.967 [DEBUG] [Thread-125903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:50:09.015 [DEBUG] [Thread-125903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:50:09.015 [DEBUG] [Thread-125903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:50:09.024 [DEBUG] [Thread-125903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:50:09.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:50:09.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:50:09.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:50:09.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:50:09.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:50:09.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:50:09.058 [DEBUG] [Thread-125903] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:50:17.548 [DEBUG] [Thread-125905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:17.568 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:20.222 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:20.223 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:21.502 [DEBUG] [Thread-125906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:32.606 [DEBUG] [Thread-125907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:38.259 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:39.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:50:39.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:50:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:50:39.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 50, 31), 14.17, 37.78, 0.0, 20.82, 14.67, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:50:39.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:50:31
2025-12-03T23:50:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:50:40.005 [DEBUG] [Thread-125908] [transport.py] [_log()] starting thread (client mode): 0xa51bada0
2025-12-03T23:50:40.005 [DEBUG] [Thread-125908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:50:40.029 [DEBUG] [Thread-125908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:50:40.029 [INFO] [Thread-125908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:50:40.032 [DEBUG] [Thread-125908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] client lang: <none>
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] server lang: <none>
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] kex follows: False
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:50:40.033 [DEBUG] [Thread-125908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:50:40.034 [DEBUG] [Thread-125908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:50:40.034 [DEBUG] [Thread-125908] [transport.py] [_log()] Compression: none
2025-12-03T23:50:40.034 [DEBUG] [Thread-125908] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:50:40.053 [DEBUG] [Thread-125908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:50:40.054 [DEBUG] [Thread-125908] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:50:40.054 [DEBUG] [Thread-125908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:50:40.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:50:40.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:50:40.056 [DEBUG] [Thread-125908] [transport.py] [_log()] userauth is OK
2025-12-03T23:50:40.056 [DEBUG] [Thread-125908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:50:40.056 [DEBUG] [Thread-125908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:50:40.056 [DEBUG] [Thread-125908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:50:40.056 [DEBUG] [Thread-125908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:50:40.092 [INFO] [Thread-125908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:50:40.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:50:40.732 [DEBUG] [Thread-125908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:50:40.732 [DEBUG] [Thread-125908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:50:40.732 [DEBUG] [Thread-125908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:50:40.773 [DEBUG] [Thread-125908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:50:40.773 [DEBUG] [Thread-125908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:50:40.776 [DEBUG] [Thread-125908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:50:40.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:50:40.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:50:40.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:50:40.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:50:40.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:50:40.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:50:40.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.909770 -999.00  +14.70  16.27     43   +2.20 1 1 1 1 1     0    0 12.23 -36.71 ZNESW 18.9 16.3 144.2 23.4 15.2 -25.5 15.2 -25.0 15.0 -23.3 15.3 -24.3
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:50:40.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.909770
2025-12-03T23:50:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:50:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:50:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:50:40.800 [DEBUG] [Thread-125908] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:50:40.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:50:40.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:50:40.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:50:31', tmtdew=14.17, humidity=37.78, cloud=0.0, wind=20.82, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:50:31', seeing=1.06, atlas_timestamp='2025-12-03T21:50:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009250000000001535, -0.014749999999999375, -0.04324999999999868, 0.013500000000000512, 0.059499999999999886, 0.01025000000000098, -0.15500000000000114, -0.021749999999999048, -0.034000000000000696, 0.008500000000001506, -0.009249999999999758, -0.006000000000000227, 0.05999999999999872, 0.013249999999999318, -0.08500000000000085, -0.14250000000000185, -0.007749999999999702, 0.005999999999998451, 0.0035000000000007248, -0.03675000000000139, 0.00999999999999801, 0.000249999999997641, -0.04875000000000007, -0.05775000000000041, -0.028499999999999304, -0.0015000000000000568, -0.0652500000000007, -0.015499999999999403, 0.11100000000000065, 0.0860000000000003, -0.15449999999999875, -0.11499999999999844, 0.02674999999999983], zp_timestamp='2025-12-03T21:46:00')
2025-12-03T23:50:40.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:50:40.901 [DEBUG] [Thread-125911] [transport.py] [_log()] starting thread (client mode): 0xa27459c0
2025-12-03T23:50:40.901 [DEBUG] [Thread-125911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:50:40.916 [DEBUG] [Thread-125911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:50:40.916 [INFO] [Thread-125911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] client lang: <none>
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] server lang: <none>
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] kex follows: False
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:50:40.924 [DEBUG] [Thread-125911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:50:40.925 [DEBUG] [Thread-125911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:50:40.925 [DEBUG] [Thread-125911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:50:40.925 [DEBUG] [Thread-125911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:50:40.925 [DEBUG] [Thread-125911] [transport.py] [_log()] Compression: none
2025-12-03T23:50:40.925 [DEBUG] [Thread-125911] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:50:40.984 [DEBUG] [Thread-125911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:50:40.984 [DEBUG] [Thread-125911] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:50:40.985 [DEBUG] [Thread-125911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:50:40.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:50:40.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:50:41.042 [DEBUG] [Thread-125911] [transport.py] [_log()] userauth is OK
2025-12-03T23:50:41.042 [DEBUG] [Thread-125911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:50:41.043 [DEBUG] [Thread-125911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:50:41.043 [DEBUG] [Thread-125911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:50:41.043 [DEBUG] [Thread-125911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:50:41.062 [INFO] [Thread-125911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:50:41.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:50:41.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:50:41.904 [DEBUG] [Thread-125911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:50:41.904 [DEBUG] [Thread-125911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:50:41.952 [DEBUG] [Thread-125911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:50:41.952 [DEBUG] [Thread-125911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:50:41.961 [DEBUG] [Thread-125911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:50:41.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:50:41.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:50:41.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:50:41.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:50:41.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:50:41.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:50:41.994 [DEBUG] [Thread-125911] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:50:47.638 [DEBUG] [Thread-125913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:50:58.637 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:02.704 [DEBUG] [Thread-125914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:12.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:51:12.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:51:12.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:51:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 51, 3), 14.12, 37.93, 0.0, 21.91, 14.65, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:51:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:51:03
2025-12-03T23:51:12.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:51:12.960 [DEBUG] [Thread-125915] [transport.py] [_log()] starting thread (client mode): 0xa27a0640
2025-12-03T23:51:12.960 [DEBUG] [Thread-125915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:51:12.980 [DEBUG] [Thread-125915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:51:12.980 [INFO] [Thread-125915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:12.984 [DEBUG] [Thread-125915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] client lang: <none>
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] server lang: <none>
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] kex follows: False
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] Compression: none
2025-12-03T23:51:12.985 [DEBUG] [Thread-125915] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:51:13.002 [DEBUG] [Thread-125915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:51:13.003 [DEBUG] [Thread-125915] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:51:13.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:51:13.004 [DEBUG] [Thread-125915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:51:13.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:51:13.005 [DEBUG] [Thread-125915] [transport.py] [_log()] userauth is OK
2025-12-03T23:51:13.005 [DEBUG] [Thread-125915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:51:13.005 [DEBUG] [Thread-125915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:51:13.005 [DEBUG] [Thread-125915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:51:13.005 [DEBUG] [Thread-125915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:51:13.037 [INFO] [Thread-125915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:51:13.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:51:13.697 [DEBUG] [Thread-125915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:51:13.697 [DEBUG] [Thread-125915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:51:13.698 [DEBUG] [Thread-125915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:51:13.739 [DEBUG] [Thread-125915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:51:13.739 [DEBUG] [Thread-125915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:51:13.742 [DEBUG] [Thread-125915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:51:13.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:51:13.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:51:13.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:51:13.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:51:13.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:51:13.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:51:13.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:51:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:51:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:51:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.910117 -999.00  +14.60  20.72     43   +2.30 1 1 1 1 1     0    0 11.85 -41.36 ZNESW 14.9 20.7 141.2 22.4 15.2 -25.4 15.2 -24.9 14.9 -23.4 15.2 -24.1
2025-12-03T23:51:13.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:51:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:51:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.910117
2025-12-03T23:51:13.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:51:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:51:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:51:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:51:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:51:13.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:51:03', tmtdew=14.12, humidity=37.93, cloud=0.0, wind=21.91, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:51:03', seeing=1.09, atlas_timestamp='2025-12-03T21:50:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:51:13.759 [DEBUG] [Thread-125915] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:51:13.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:51:13.861 [DEBUG] [Thread-125918] [transport.py] [_log()] starting thread (client mode): 0x9fd20b20
2025-12-03T23:51:13.861 [DEBUG] [Thread-125918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:51:13.876 [DEBUG] [Thread-125918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:51:13.876 [INFO] [Thread-125918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:51:13.883 [DEBUG] [Thread-125918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:51:13.883 [DEBUG] [Thread-125918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:51:13.883 [DEBUG] [Thread-125918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] client lang: <none>
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] server lang: <none>
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] kex follows: False
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:51:13.884 [DEBUG] [Thread-125918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:51:13.885 [DEBUG] [Thread-125918] [transport.py] [_log()] Compression: none
2025-12-03T23:51:13.885 [DEBUG] [Thread-125918] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:51:13.942 [DEBUG] [Thread-125918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:51:13.942 [DEBUG] [Thread-125918] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:51:13.943 [DEBUG] [Thread-125918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:51:13.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:51:13.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:51:13.998 [DEBUG] [Thread-125918] [transport.py] [_log()] userauth is OK
2025-12-03T23:51:13.998 [DEBUG] [Thread-125918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:51:13.998 [DEBUG] [Thread-125918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:51:13.999 [DEBUG] [Thread-125918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:51:13.999 [DEBUG] [Thread-125918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:51:14.018 [INFO] [Thread-125918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:51:14.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:51:14.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:51:14.817 [DEBUG] [Thread-125918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:51:14.817 [DEBUG] [Thread-125918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:51:14.865 [DEBUG] [Thread-125918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:51:14.865 [DEBUG] [Thread-125918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:51:14.874 [DEBUG] [Thread-125918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:51:14.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:51:14.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:51:14.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:51:14.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:51:14.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:51:14.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:51:14.909 [DEBUG] [Thread-125918] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:51:17.746 [DEBUG] [Thread-125920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:19.377 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:20.424 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:20.426 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:21.571 [DEBUG] [Thread-125921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:32.807 [DEBUG] [Thread-125922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:39.813 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:44.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:51:44.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:51:44.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:51:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 51, 35), 13.94, 38.51, 0.0, 23.87, 14.57, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:51:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:51:35
2025-12-03T23:51:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:51:45.909 [DEBUG] [Thread-125923] [transport.py] [_log()] starting thread (client mode): 0xa51b9960
2025-12-03T23:51:45.909 [DEBUG] [Thread-125923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:51:45.930 [DEBUG] [Thread-125923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:51:45.930 [INFO] [Thread-125923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:45.933 [DEBUG] [Thread-125923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] client lang: <none>
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] server lang: <none>
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] kex follows: False
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] Compression: none
2025-12-03T23:51:45.934 [DEBUG] [Thread-125923] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:51:45.949 [DEBUG] [Thread-125923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:51:45.950 [DEBUG] [Thread-125923] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:51:45.950 [DEBUG] [Thread-125923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:51:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:51:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:51:45.951 [DEBUG] [Thread-125923] [transport.py] [_log()] userauth is OK
2025-12-03T23:51:45.951 [DEBUG] [Thread-125923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:51:45.951 [DEBUG] [Thread-125923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:51:45.951 [DEBUG] [Thread-125923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:51:45.951 [DEBUG] [Thread-125923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:51:45.960 [INFO] [Thread-125923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:51:45.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:51:46.589 [DEBUG] [Thread-125923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:51:46.589 [DEBUG] [Thread-125923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:51:46.589 [DEBUG] [Thread-125923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:51:46.631 [DEBUG] [Thread-125923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:51:46.631 [DEBUG] [Thread-125923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:51:46.633 [DEBUG] [Thread-125923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:51:46.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:51:46.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:51:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:51:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:51:46.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:51:46.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:51:46.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.910812 -999.00  +14.70  15.17     43   +2.40 1 1 1 1 1     0    0 11.36 -53.20 ZNESW 14.1 15.2 148.4 23.4 15.2 -25.4 15.1 -24.9 14.9 -23.3 15.1 -24.0
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.910812
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:51:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:51:35', tmtdew=13.94, humidity=38.51, cloud=0.0, wind=23.87, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:51:35', seeing=1.01, atlas_timestamp='2025-12-03T21:51:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:51:46.651 [DEBUG] [Thread-125923] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:51:46.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:51:46.743 [DEBUG] [Thread-125926] [transport.py] [_log()] starting thread (client mode): 0xa51ba770
2025-12-03T23:51:46.743 [DEBUG] [Thread-125926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:51:46.757 [DEBUG] [Thread-125926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:51:46.757 [INFO] [Thread-125926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] client lang: <none>
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] server lang: <none>
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] kex follows: False
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] Compression: none
2025-12-03T23:51:46.765 [DEBUG] [Thread-125926] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:51:46.821 [DEBUG] [Thread-125926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:51:46.821 [DEBUG] [Thread-125926] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:51:46.821 [DEBUG] [Thread-125926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:51:46.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:51:46.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:51:46.878 [DEBUG] [Thread-125926] [transport.py] [_log()] userauth is OK
2025-12-03T23:51:46.878 [DEBUG] [Thread-125926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:51:46.878 [DEBUG] [Thread-125926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:51:46.878 [DEBUG] [Thread-125926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:51:46.878 [DEBUG] [Thread-125926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:51:46.896 [INFO] [Thread-125926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:51:46.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:51:46.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:51:47.772 [DEBUG] [Thread-125926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:51:47.772 [DEBUG] [Thread-125926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:51:47.821 [DEBUG] [Thread-125926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:51:47.821 [DEBUG] [Thread-125926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:51:47.829 [DEBUG] [Thread-125926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:51:47.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:51:47.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:51:47.839 [DEBUG] [Thread-125928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:51:47.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:51:47.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:51:47.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:51:47.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:51:47.860 [DEBUG] [Thread-125926] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:52:00.232 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:02.898 [DEBUG] [Thread-125929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:17.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:52:17.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:52:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:52:17.933 [DEBUG] [Thread-125930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 52, 7), 13.9, 38.61, 0.0, 23.87, 14.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:52:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:52:07
2025-12-03T23:52:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:52:18.827 [DEBUG] [Thread-125931] [transport.py] [_log()] starting thread (client mode): 0x9fd22b00
2025-12-03T23:52:18.827 [DEBUG] [Thread-125931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:52:18.848 [DEBUG] [Thread-125931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:52:18.848 [INFO] [Thread-125931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:18.850 [DEBUG] [Thread-125931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] client lang: <none>
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] server lang: <none>
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] kex follows: False
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] Compression: none
2025-12-03T23:52:18.851 [DEBUG] [Thread-125931] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:52:18.866 [DEBUG] [Thread-125931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:52:18.866 [DEBUG] [Thread-125931] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:52:18.867 [DEBUG] [Thread-125931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:52:18.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:52:18.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:52:18.868 [DEBUG] [Thread-125931] [transport.py] [_log()] userauth is OK
2025-12-03T23:52:18.869 [DEBUG] [Thread-125931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:52:18.869 [DEBUG] [Thread-125931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:52:18.869 [DEBUG] [Thread-125931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:52:18.869 [DEBUG] [Thread-125931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:52:18.885 [INFO] [Thread-125931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:52:18.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:52:19.525 [DEBUG] [Thread-125931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:52:19.525 [DEBUG] [Thread-125931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:52:19.526 [DEBUG] [Thread-125931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:52:19.566 [DEBUG] [Thread-125931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:52:19.567 [DEBUG] [Thread-125931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:52:19.569 [DEBUG] [Thread-125931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:52:19.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:52:19.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:52:19.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:52:19.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:52:19.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:52:19.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:52:19.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:52:19.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:52:19.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:52:19.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.911159 -999.00  +14.70  16.13     44   +2.60 1 1 1 1 1     0    0 11.17 -60.76 ZNESW 17.7 16.1 153.0 23.2 15.2 -25.4 15.1 -24.8 14.9 -23.3 15.2 -24.2
2025-12-03T23:52:19.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:52:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:52:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.911159
2025-12-03T23:52:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:52:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:52:19.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:52:19.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:52:19.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:52:19.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:52:07', tmtdew=13.9, humidity=38.61, cloud=0.0, wind=23.87, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:52:07', seeing=0.96, atlas_timestamp='2025-12-03T21:52:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:52:19.593 [DEBUG] [Thread-125931] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:52:19.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:52:19.695 [DEBUG] [Thread-125934] [transport.py] [_log()] starting thread (client mode): 0x9fd20670
2025-12-03T23:52:19.696 [DEBUG] [Thread-125934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:52:19.715 [DEBUG] [Thread-125934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:52:19.716 [INFO] [Thread-125934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:52:19.723 [DEBUG] [Thread-125934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:52:19.723 [DEBUG] [Thread-125934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:52:19.723 [DEBUG] [Thread-125934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:52:19.723 [DEBUG] [Thread-125934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:19.723 [DEBUG] [Thread-125934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] client lang: <none>
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] server lang: <none>
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] kex follows: False
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:52:19.724 [DEBUG] [Thread-125934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:52:19.725 [DEBUG] [Thread-125934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:52:19.725 [DEBUG] [Thread-125934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:52:19.725 [DEBUG] [Thread-125934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:52:19.725 [DEBUG] [Thread-125934] [transport.py] [_log()] Compression: none
2025-12-03T23:52:19.725 [DEBUG] [Thread-125934] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:52:19.785 [DEBUG] [Thread-125934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:52:19.785 [DEBUG] [Thread-125934] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:52:19.786 [DEBUG] [Thread-125934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:52:19.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:52:19.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:52:19.843 [DEBUG] [Thread-125934] [transport.py] [_log()] userauth is OK
2025-12-03T23:52:19.843 [DEBUG] [Thread-125934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:52:19.843 [DEBUG] [Thread-125934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:52:19.843 [DEBUG] [Thread-125934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:52:19.843 [DEBUG] [Thread-125934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:52:19.863 [INFO] [Thread-125934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:52:19.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:52:19.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:52:20.627 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:20.628 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:20.700 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:20.703 [DEBUG] [Thread-125934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:52:20.703 [DEBUG] [Thread-125934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:52:20.750 [DEBUG] [Thread-125934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:52:20.751 [DEBUG] [Thread-125934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:52:20.759 [DEBUG] [Thread-125934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:52:20.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:52:20.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:52:20.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:52:20.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:52:20.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:52:20.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:52:20.794 [DEBUG] [Thread-125934] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:52:21.624 [DEBUG] [Thread-125936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:32.964 [DEBUG] [Thread-125937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:41.538 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:48.030 [DEBUG] [Thread-125938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:52:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:52:50.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:52:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:52:51.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 52, 39), 13.7, 39.26, 0.0, 25.71, 14.63, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:52:51.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:52:39
2025-12-03T23:52:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:52:51.766 [DEBUG] [Thread-125939] [transport.py] [_log()] starting thread (client mode): 0xa277a410
2025-12-03T23:52:51.767 [DEBUG] [Thread-125939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:52:51.788 [DEBUG] [Thread-125939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:52:51.788 [INFO] [Thread-125939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:51.791 [DEBUG] [Thread-125939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] client lang: <none>
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] server lang: <none>
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] kex follows: False
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] Compression: none
2025-12-03T23:52:51.792 [DEBUG] [Thread-125939] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:52:51.810 [DEBUG] [Thread-125939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:52:51.810 [DEBUG] [Thread-125939] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:52:51.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:52:51.811 [DEBUG] [Thread-125939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:52:51.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:52:51.813 [DEBUG] [Thread-125939] [transport.py] [_log()] userauth is OK
2025-12-03T23:52:51.813 [DEBUG] [Thread-125939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:52:51.813 [DEBUG] [Thread-125939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:52:51.813 [DEBUG] [Thread-125939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:52:51.814 [DEBUG] [Thread-125939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:52:51.838 [INFO] [Thread-125939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:52:51.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:52:52.503 [DEBUG] [Thread-125939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:52:52.504 [DEBUG] [Thread-125939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:52:52.504 [DEBUG] [Thread-125939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:52:52.545 [DEBUG] [Thread-125939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:52:52.545 [DEBUG] [Thread-125939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:52:52.548 [DEBUG] [Thread-125939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:52:52.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:52:52.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:52:52.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:52:52.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:52:52.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:52:52.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:52:52.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:52:52.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:52:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:52:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.911506 -999.00  +14.60  17.73     43   +2.40 1 1 1 1 1     0    0 11.11 -64.45 ZNESW 16.4 17.7 143.0 20.9 15.2 -25.4 15.1 -24.8 14.8 -23.2 15.1 -24.1
2025-12-03T23:52:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:52:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:52:52.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.911506
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:52:52.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:52:39', tmtdew=13.7, humidity=39.26, cloud=0.0, wind=25.71, temperature=14.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:52:39', seeing=1.09, atlas_timestamp='2025-12-03T21:52:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:52:52.570 [DEBUG] [Thread-125939] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:52:52.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:52:52.673 [DEBUG] [Thread-125942] [transport.py] [_log()] starting thread (client mode): 0xa277bee0
2025-12-03T23:52:52.673 [DEBUG] [Thread-125942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:52:52.687 [DEBUG] [Thread-125942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:52:52.688 [INFO] [Thread-125942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:52:52.695 [DEBUG] [Thread-125942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] client lang: <none>
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] server lang: <none>
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] kex follows: False
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] Compression: none
2025-12-03T23:52:52.696 [DEBUG] [Thread-125942] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:52:52.754 [DEBUG] [Thread-125942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:52:52.754 [DEBUG] [Thread-125942] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:52:52.754 [DEBUG] [Thread-125942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:52:52.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:52:52.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:52:52.810 [DEBUG] [Thread-125942] [transport.py] [_log()] userauth is OK
2025-12-03T23:52:52.811 [DEBUG] [Thread-125942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:52:52.811 [DEBUG] [Thread-125942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:52:52.811 [DEBUG] [Thread-125942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:52:52.811 [DEBUG] [Thread-125942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:52:52.830 [INFO] [Thread-125942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:52:52.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:52:52.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:52:53.666 [DEBUG] [Thread-125942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:52:53.666 [DEBUG] [Thread-125942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:52:53.714 [DEBUG] [Thread-125942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:52:53.714 [DEBUG] [Thread-125942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:52:53.723 [DEBUG] [Thread-125942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:52:53.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:52:53.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:52:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:52:53.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:52:53.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:52:53.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:52:53.757 [DEBUG] [Thread-125942] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:53:02.009 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:03.064 [DEBUG] [Thread-125944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:18.113 [DEBUG] [Thread-125945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:20.833 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:20.834 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:21.682 [DEBUG] [Thread-125946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:22.724 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:53:23.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:53:23.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:53:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 53, 11), 13.66, 39.34, 0.0, 24.35, 14.59, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:53:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:53:11
2025-12-03T23:53:24.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:53:24.732 [DEBUG] [Thread-125947] [transport.py] [_log()] starting thread (client mode): 0xa51ba770
2025-12-03T23:53:24.733 [DEBUG] [Thread-125947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:53:24.753 [DEBUG] [Thread-125947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:53:24.753 [INFO] [Thread-125947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] client lang: <none>
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] server lang: <none>
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] kex follows: False
2025-12-03T23:53:24.756 [DEBUG] [Thread-125947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] Compression: none
2025-12-03T23:53:24.757 [DEBUG] [Thread-125947] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:53:24.774 [DEBUG] [Thread-125947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:53:24.774 [DEBUG] [Thread-125947] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:53:24.775 [DEBUG] [Thread-125947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:53:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:53:24.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:53:24.776 [DEBUG] [Thread-125947] [transport.py] [_log()] userauth is OK
2025-12-03T23:53:24.777 [DEBUG] [Thread-125947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:53:24.777 [DEBUG] [Thread-125947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:53:24.777 [DEBUG] [Thread-125947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:53:24.777 [DEBUG] [Thread-125947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:53:24.794 [INFO] [Thread-125947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:53:24.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:53:25.388 [DEBUG] [Thread-125947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:53:25.388 [DEBUG] [Thread-125947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:53:25.388 [DEBUG] [Thread-125947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:53:25.429 [DEBUG] [Thread-125947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:53:25.429 [DEBUG] [Thread-125947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:53:25.432 [DEBUG] [Thread-125947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:53:25.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:53:25.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:53:25.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:53:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:53:25.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:53:25.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:53:25.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.911855 -999.00  +14.60  18.55     44   +2.70 1 1 1 1 1     0    0 11.28 -62.05 ZNESW 23.6 18.6 155.9 30.8 15.1 -25.4 15.1 -24.8 14.8 -23.3 15.1 -24.0
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:53:25.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.911855
2025-12-03T23:53:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:53:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:53:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:53:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:53:25.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:53:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:53:11', tmtdew=13.66, humidity=39.34, cloud=0.0, wind=24.35, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:53:11', seeing=1.09, atlas_timestamp='2025-12-03T21:53:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:53:25.457 [DEBUG] [Thread-125947] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:53:25.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:53:25.558 [DEBUG] [Thread-125950] [transport.py] [_log()] starting thread (client mode): 0xa51cdff0
2025-12-03T23:53:25.559 [DEBUG] [Thread-125950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:53:25.574 [DEBUG] [Thread-125950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:53:25.574 [INFO] [Thread-125950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:53:25.582 [DEBUG] [Thread-125950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:53:25.582 [DEBUG] [Thread-125950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:53:25.582 [DEBUG] [Thread-125950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] client lang: <none>
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] server lang: <none>
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] kex follows: False
2025-12-03T23:53:25.583 [DEBUG] [Thread-125950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] Compression: none
2025-12-03T23:53:25.584 [DEBUG] [Thread-125950] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:53:25.642 [DEBUG] [Thread-125950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:53:25.643 [DEBUG] [Thread-125950] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:53:25.643 [DEBUG] [Thread-125950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:53:25.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:53:25.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:53:25.698 [DEBUG] [Thread-125950] [transport.py] [_log()] userauth is OK
2025-12-03T23:53:25.699 [DEBUG] [Thread-125950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:53:25.699 [DEBUG] [Thread-125950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:53:25.699 [DEBUG] [Thread-125950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:53:25.699 [DEBUG] [Thread-125950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:53:25.718 [INFO] [Thread-125950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:53:25.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:53:25.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:53:26.542 [DEBUG] [Thread-125950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:53:26.542 [DEBUG] [Thread-125950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:53:26.590 [DEBUG] [Thread-125950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:53:26.590 [DEBUG] [Thread-125950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:53:26.601 [DEBUG] [Thread-125950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:53:26.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:53:26.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:53:26.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:53:26.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:53:26.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:53:26.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:53:26.637 [DEBUG] [Thread-125950] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:53:33.149 [DEBUG] [Thread-125952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:43.127 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:48.205 [DEBUG] [Thread-125953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:53:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:53:56.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:53:56.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:53:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 53, 43), 13.55, 39.66, 0.0, 26.06, 14.55, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:53:57.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:53:43
2025-12-03T23:53:57.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:53:57.590 [DEBUG] [Thread-125954] [transport.py] [_log()] starting thread (client mode): 0xa51cf700
2025-12-03T23:53:57.590 [DEBUG] [Thread-125954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:53:57.610 [DEBUG] [Thread-125954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:53:57.610 [INFO] [Thread-125954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:53:57.614 [DEBUG] [Thread-125954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:53:57.614 [DEBUG] [Thread-125954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:53:57.614 [DEBUG] [Thread-125954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:53:57.614 [DEBUG] [Thread-125954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] client lang: <none>
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] server lang: <none>
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] kex follows: False
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:53:57.615 [DEBUG] [Thread-125954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:53:57.616 [DEBUG] [Thread-125954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:53:57.616 [DEBUG] [Thread-125954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:53:57.616 [DEBUG] [Thread-125954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:53:57.616 [DEBUG] [Thread-125954] [transport.py] [_log()] Compression: none
2025-12-03T23:53:57.616 [DEBUG] [Thread-125954] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:53:57.634 [DEBUG] [Thread-125954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:53:57.635 [DEBUG] [Thread-125954] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:53:57.635 [DEBUG] [Thread-125954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:53:57.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:53:57.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:53:57.637 [DEBUG] [Thread-125954] [transport.py] [_log()] userauth is OK
2025-12-03T23:53:57.637 [DEBUG] [Thread-125954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:53:57.638 [DEBUG] [Thread-125954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:53:57.638 [DEBUG] [Thread-125954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:53:57.638 [DEBUG] [Thread-125954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:53:57.661 [INFO] [Thread-125954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:53:57.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:53:58.317 [DEBUG] [Thread-125954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:53:58.317 [DEBUG] [Thread-125954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:53:58.318 [DEBUG] [Thread-125954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:53:58.359 [DEBUG] [Thread-125954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:53:58.359 [DEBUG] [Thread-125954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:53:58.362 [DEBUG] [Thread-125954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:53:58.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:53:58.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:53:58.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:53:58.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:53:58.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:53:58.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:53:58.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.911855 -999.00  +14.60  18.55     44   +2.70 1 1 1 1 1     0    0 11.28 -62.05 ZNESW 23.6 18.6 155.9 30.8 15.1 -25.4 15.1 -24.8 14.8 -23.3 15.1 -24.0
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:53:58.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.911855
2025-12-03T23:53:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:53:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:53:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:53:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:53:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:53:58.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:53:43', tmtdew=13.55, humidity=39.66, cloud=0.0, wind=26.06, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:53:43', seeing=0.88, atlas_timestamp='2025-12-03T21:53:04.272', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:50:00')
2025-12-03T23:53:58.386 [DEBUG] [Thread-125954] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:53:58.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:53:58.492 [DEBUG] [Thread-125957] [transport.py] [_log()] starting thread (client mode): 0xa2778250
2025-12-03T23:53:58.492 [DEBUG] [Thread-125957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:53:58.507 [DEBUG] [Thread-125957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:53:58.508 [INFO] [Thread-125957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:53:58.515 [DEBUG] [Thread-125957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:53:58.515 [DEBUG] [Thread-125957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:53:58.515 [DEBUG] [Thread-125957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:53:58.515 [DEBUG] [Thread-125957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] client lang: <none>
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] server lang: <none>
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] kex follows: False
2025-12-03T23:53:58.516 [DEBUG] [Thread-125957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:53:58.517 [DEBUG] [Thread-125957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:53:58.517 [DEBUG] [Thread-125957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:53:58.517 [DEBUG] [Thread-125957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:53:58.518 [DEBUG] [Thread-125957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:53:58.518 [DEBUG] [Thread-125957] [transport.py] [_log()] Compression: none
2025-12-03T23:53:58.518 [DEBUG] [Thread-125957] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:53:58.574 [DEBUG] [Thread-125957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:53:58.575 [DEBUG] [Thread-125957] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:53:58.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:53:58.576 [DEBUG] [Thread-125957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:53:58.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:53:58.630 [DEBUG] [Thread-125957] [transport.py] [_log()] userauth is OK
2025-12-03T23:53:58.631 [DEBUG] [Thread-125957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:53:58.631 [DEBUG] [Thread-125957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:53:58.631 [DEBUG] [Thread-125957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:53:58.631 [DEBUG] [Thread-125957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:53:58.651 [INFO] [Thread-125957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:53:58.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:53:58.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:53:59.488 [DEBUG] [Thread-125957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:53:59.488 [DEBUG] [Thread-125957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:53:59.536 [DEBUG] [Thread-125957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:53:59.536 [DEBUG] [Thread-125957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:53:59.544 [DEBUG] [Thread-125957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:53:59.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:53:59.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:53:59.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:53:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:53:59.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:53:59.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:53:59.579 [DEBUG] [Thread-125957] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:54:03.242 [DEBUG] [Thread-125959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:03.548 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:18.294 [DEBUG] [Thread-125960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:21.042 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:21.043 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:21.739 [DEBUG] [Thread-125961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:24.047 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:29.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:54:29.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:54:29.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:54:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 54, 15), 13.43, 39.99, 0.0, 23.26, 14.52, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:54:30.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:54:15
2025-12-03T23:54:30.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:54:30.533 [DEBUG] [Thread-125962] [transport.py] [_log()] starting thread (client mode): 0xa2778f40
2025-12-03T23:54:30.534 [DEBUG] [Thread-125962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:54:30.555 [DEBUG] [Thread-125962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:54:30.555 [INFO] [Thread-125962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:54:30.557 [DEBUG] [Thread-125962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:54:30.558 [DEBUG] [Thread-125962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] client lang: <none>
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] server lang: <none>
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] kex follows: False
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] Compression: none
2025-12-03T23:54:30.559 [DEBUG] [Thread-125962] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:54:30.573 [DEBUG] [Thread-125962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:54:30.573 [DEBUG] [Thread-125962] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:54:30.574 [DEBUG] [Thread-125962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:54:30.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:54:30.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:54:30.576 [DEBUG] [Thread-125962] [transport.py] [_log()] userauth is OK
2025-12-03T23:54:30.576 [DEBUG] [Thread-125962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:54:30.576 [DEBUG] [Thread-125962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:54:30.576 [DEBUG] [Thread-125962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:54:30.576 [DEBUG] [Thread-125962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:54:30.599 [INFO] [Thread-125962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:54:30.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:54:31.240 [DEBUG] [Thread-125962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:54:31.240 [DEBUG] [Thread-125962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:54:31.241 [DEBUG] [Thread-125962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:54:31.281 [DEBUG] [Thread-125962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:54:31.281 [DEBUG] [Thread-125962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:54:31.284 [DEBUG] [Thread-125962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:54:31.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:54:31.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:54:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:54:31.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:54:31.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:54:31.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:54:31.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:54:31.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.912201 -999.00  +14.60  20.17     44   +2.70 1 1 1 1 1     0    0 10.85 -65.78 ZNESW 17.2 20.2 140.0 24.1 15.1 -25.3 15.0 -24.9 14.8 -23.4 15.1 -24.1
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.912201
2025-12-03T23:54:31.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:54:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:54:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:54:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:54:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:54:31.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:54:15', tmtdew=13.43, humidity=39.99, cloud=0.0, wind=23.26, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:54:15', seeing=0.99, atlas_timestamp='2025-12-03T21:53:34.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:52:00')
2025-12-03T23:54:31.306 [DEBUG] [Thread-125962] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:54:31.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:54:31.410 [DEBUG] [Thread-125965] [transport.py] [_log()] starting thread (client mode): 0xa277a9e0
2025-12-03T23:54:31.410 [DEBUG] [Thread-125965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:54:31.424 [DEBUG] [Thread-125965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:54:31.425 [INFO] [Thread-125965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:54:31.432 [DEBUG] [Thread-125965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] client lang: <none>
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] server lang: <none>
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] kex follows: False
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] Compression: none
2025-12-03T23:54:31.433 [DEBUG] [Thread-125965] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:54:31.490 [DEBUG] [Thread-125965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:54:31.491 [DEBUG] [Thread-125965] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:54:31.491 [DEBUG] [Thread-125965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:54:31.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:54:31.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:54:31.547 [DEBUG] [Thread-125965] [transport.py] [_log()] userauth is OK
2025-12-03T23:54:31.547 [DEBUG] [Thread-125965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:54:31.547 [DEBUG] [Thread-125965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:54:31.547 [DEBUG] [Thread-125965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:54:31.547 [DEBUG] [Thread-125965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:54:31.569 [INFO] [Thread-125965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:54:31.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:54:31.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:54:32.388 [DEBUG] [Thread-125965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:54:32.388 [DEBUG] [Thread-125965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:54:32.436 [DEBUG] [Thread-125965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:54:32.436 [DEBUG] [Thread-125965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:54:32.445 [DEBUG] [Thread-125965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:54:32.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:54:32.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:54:32.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:54:32.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:54:32.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:54:32.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:54:32.479 [DEBUG] [Thread-125965] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:54:33.329 [DEBUG] [Thread-125967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:44.456 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:54:48.388 [DEBUG] [Thread-125968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:55:02.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:55:02.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:55:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 54, 47), 13.4, 39.94, 0.0, 24.46, 14.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:55:03.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:54:47
2025-12-03T23:55:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:55:03.422 [DEBUG] [Thread-125969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:03.494 [DEBUG] [Thread-125970] [transport.py] [_log()] starting thread (client mode): 0xa51cd480
2025-12-03T23:55:03.494 [DEBUG] [Thread-125970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:55:03.515 [DEBUG] [Thread-125970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:55:03.515 [INFO] [Thread-125970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] client lang: <none>
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] server lang: <none>
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] kex follows: False
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:55:03.518 [DEBUG] [Thread-125970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:55:03.519 [DEBUG] [Thread-125970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:55:03.519 [DEBUG] [Thread-125970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:55:03.519 [DEBUG] [Thread-125970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:55:03.519 [DEBUG] [Thread-125970] [transport.py] [_log()] Compression: none
2025-12-03T23:55:03.519 [DEBUG] [Thread-125970] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:55:03.526 [DEBUG] [Thread-125970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:55:03.526 [DEBUG] [Thread-125970] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:55:03.526 [DEBUG] [Thread-125970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:55:03.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:55:03.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:55:03.527 [DEBUG] [Thread-125970] [transport.py] [_log()] userauth is OK
2025-12-03T23:55:03.527 [DEBUG] [Thread-125970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:55:03.527 [DEBUG] [Thread-125970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:55:03.527 [DEBUG] [Thread-125970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:55:03.527 [DEBUG] [Thread-125970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:55:03.536 [INFO] [Thread-125970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:55:03.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:55:04.220 [DEBUG] [Thread-125970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:55:04.220 [DEBUG] [Thread-125970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:55:04.221 [DEBUG] [Thread-125970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:55:04.261 [DEBUG] [Thread-125970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:55:04.261 [DEBUG] [Thread-125970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:55:04.262 [DEBUG] [Thread-125970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:55:04.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:55:04.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:55:04.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:55:04.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:55:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:55:04.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:55:04.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:55:04.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.912548 -999.00  +14.60  16.75     44   +2.50 1 1 1 1 1     0    0 10.96 -68.07 ZNESW 17.8 16.8 146.0 24.4 15.1 -25.4 15.0 -24.7 14.8 -23.3 15.1 -24.1
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.912548
2025-12-03T23:55:04.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:55:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:55:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:55:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:55:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:55:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:54:47', tmtdew=13.4, humidity=39.94, cloud=0.0, wind=24.46, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:54:47', seeing=1.17, atlas_timestamp='2025-12-03T21:54:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:52:00')
2025-12-03T23:55:04.287 [DEBUG] [Thread-125970] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:55:04.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:55:04.392 [DEBUG] [Thread-125973] [transport.py] [_log()] starting thread (client mode): 0xa51ccee0
2025-12-03T23:55:04.392 [DEBUG] [Thread-125973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:55:04.409 [DEBUG] [Thread-125973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:55:04.409 [INFO] [Thread-125973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] client lang: <none>
2025-12-03T23:55:04.417 [DEBUG] [Thread-125973] [transport.py] [_log()] server lang: <none>
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] kex follows: False
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] Compression: none
2025-12-03T23:55:04.418 [DEBUG] [Thread-125973] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:55:04.475 [DEBUG] [Thread-125973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:55:04.475 [DEBUG] [Thread-125973] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:55:04.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:55:04.476 [DEBUG] [Thread-125973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:55:04.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:55:04.531 [DEBUG] [Thread-125973] [transport.py] [_log()] userauth is OK
2025-12-03T23:55:04.531 [DEBUG] [Thread-125973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:55:04.531 [DEBUG] [Thread-125973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:55:04.531 [DEBUG] [Thread-125973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:55:04.532 [DEBUG] [Thread-125973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:55:04.551 [INFO] [Thread-125973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:55:04.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:55:04.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:55:04.919 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:05.421 [DEBUG] [Thread-125973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:55:05.421 [DEBUG] [Thread-125973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:55:05.469 [DEBUG] [Thread-125973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:55:05.469 [DEBUG] [Thread-125973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:55:05.478 [DEBUG] [Thread-125973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:55:05.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:55:05.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:55:05.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:55:05.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:55:05.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:55:05.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:55:05.513 [DEBUG] [Thread-125973] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:55:18.450 [DEBUG] [Thread-125975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:21.249 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:21.249 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:21.792 [DEBUG] [Thread-125976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:25.332 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:33.505 [DEBUG] [Thread-125977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:35.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:55:35.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:55:35.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:55:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 55, 19), 13.38, 39.99, 0.0, 24.47, 14.49, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:55:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:55:19
2025-12-03T23:55:36.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:55:36.473 [DEBUG] [Thread-125978] [transport.py] [_log()] starting thread (client mode): 0xa51cee00
2025-12-03T23:55:36.473 [DEBUG] [Thread-125978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:55:36.493 [DEBUG] [Thread-125978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:55:36.493 [INFO] [Thread-125978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:55:36.496 [DEBUG] [Thread-125978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] client lang: <none>
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] server lang: <none>
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] kex follows: False
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] Compression: none
2025-12-03T23:55:36.497 [DEBUG] [Thread-125978] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:55:36.513 [DEBUG] [Thread-125978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:55:36.513 [DEBUG] [Thread-125978] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:55:36.514 [DEBUG] [Thread-125978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:55:36.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:55:36.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:55:36.515 [DEBUG] [Thread-125978] [transport.py] [_log()] userauth is OK
2025-12-03T23:55:36.516 [DEBUG] [Thread-125978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:55:36.516 [DEBUG] [Thread-125978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:55:36.516 [DEBUG] [Thread-125978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:55:36.516 [DEBUG] [Thread-125978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:55:36.540 [INFO] [Thread-125978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:55:36.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:55:37.186 [DEBUG] [Thread-125978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:55:37.186 [DEBUG] [Thread-125978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:55:37.186 [DEBUG] [Thread-125978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:55:37.226 [DEBUG] [Thread-125978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:55:37.226 [DEBUG] [Thread-125978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:55:37.229 [DEBUG] [Thread-125978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:55:37.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:55:37.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:55:37.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:55:37.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:55:37.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:55:37.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:55:37.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.912895 -999.00  +14.50  18.42     44   +2.70 1 1 1 1 1     0    0 10.64 -73.20 ZNESW 13.2 18.4 148.0 24.5 15.1 -25.4 15.0 -25.0 14.8 -23.2 15.1 -24.0
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.912895
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:55:37.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:55:19', tmtdew=13.38, humidity=39.99, cloud=0.0, wind=24.47, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:55:20', seeing=1.17, atlas_timestamp='2025-12-03T21:54:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:52:00')
2025-12-03T23:55:37.248 [DEBUG] [Thread-125978] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:55:37.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:55:37.340 [DEBUG] [Thread-125981] [transport.py] [_log()] starting thread (client mode): 0xa51cc3d0
2025-12-03T23:55:37.340 [DEBUG] [Thread-125981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:55:37.355 [DEBUG] [Thread-125981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:55:37.355 [INFO] [Thread-125981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] client lang: <none>
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] server lang: <none>
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] kex follows: False
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] Compression: none
2025-12-03T23:55:37.363 [DEBUG] [Thread-125981] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:55:37.417 [DEBUG] [Thread-125981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:55:37.417 [DEBUG] [Thread-125981] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:55:37.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:55:37.417 [DEBUG] [Thread-125981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:55:37.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:55:37.474 [DEBUG] [Thread-125981] [transport.py] [_log()] userauth is OK
2025-12-03T23:55:37.474 [DEBUG] [Thread-125981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:55:37.474 [DEBUG] [Thread-125981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:55:37.474 [DEBUG] [Thread-125981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:55:37.474 [DEBUG] [Thread-125981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:55:37.490 [INFO] [Thread-125981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:55:37.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:55:37.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:55:38.371 [DEBUG] [Thread-125981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:55:38.371 [DEBUG] [Thread-125981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:55:38.420 [DEBUG] [Thread-125981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:55:38.420 [DEBUG] [Thread-125981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:55:38.428 [DEBUG] [Thread-125981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:55:38.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:55:38.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:55:38.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:55:38.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:55:38.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:55:38.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:55:38.459 [DEBUG] [Thread-125981] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:55:45.734 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:55:48.540 [DEBUG] [Thread-125983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:03.610 [DEBUG] [Thread-125984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:06.418 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:08.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:56:08.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:56:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:56:09.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 55, 51), 13.3, 40.42, 0.0, 23.22, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:56:09.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:55:51
2025-12-03T23:56:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:56:09.444 [DEBUG] [Thread-125985] [transport.py] [_log()] starting thread (client mode): 0xa2779a20
2025-12-03T23:56:09.444 [DEBUG] [Thread-125985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:56:09.465 [DEBUG] [Thread-125985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:56:09.465 [INFO] [Thread-125985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:09.469 [DEBUG] [Thread-125985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] client lang: <none>
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] server lang: <none>
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] kex follows: False
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:56:09.470 [DEBUG] [Thread-125985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:56:09.471 [DEBUG] [Thread-125985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:56:09.471 [DEBUG] [Thread-125985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:56:09.471 [DEBUG] [Thread-125985] [transport.py] [_log()] Compression: none
2025-12-03T23:56:09.471 [DEBUG] [Thread-125985] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:56:09.490 [DEBUG] [Thread-125985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:56:09.491 [DEBUG] [Thread-125985] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:56:09.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:56:09.492 [DEBUG] [Thread-125985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:56:09.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:56:09.494 [DEBUG] [Thread-125985] [transport.py] [_log()] userauth is OK
2025-12-03T23:56:09.494 [DEBUG] [Thread-125985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:56:09.495 [DEBUG] [Thread-125985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:56:09.495 [DEBUG] [Thread-125985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:56:09.495 [DEBUG] [Thread-125985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:56:09.521 [INFO] [Thread-125985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:56:09.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:56:10.164 [DEBUG] [Thread-125985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:56:10.164 [DEBUG] [Thread-125985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:56:10.164 [DEBUG] [Thread-125985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:56:10.205 [DEBUG] [Thread-125985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:56:10.205 [DEBUG] [Thread-125985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:56:10.207 [DEBUG] [Thread-125985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:56:10.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:56:10.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:56:10.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:56:10.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:56:10.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:56:10.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:56:10.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.913589 -999.00  +14.50  16.08     45   +2.80 1 1 1 1 1     0    0 10.30 -86.23 ZNESW 14.7 16.1 153.4 24.6 15.0 -25.3 14.9 -24.9 14.7 -23.2 15.0 -24.1
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:56:10.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.913589
2025-12-03T23:56:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:56:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:56:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:56:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:56:10.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:56:10.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:55:51', tmtdew=13.3, humidity=40.42, cloud=0.0, wind=23.22, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:55:52', seeing=1.25, atlas_timestamp='2025-12-03T21:55:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:52:00')
2025-12-03T23:56:10.231 [DEBUG] [Thread-125985] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:56:10.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:56:10.332 [DEBUG] [Thread-125988] [transport.py] [_log()] starting thread (client mode): 0xa277af50
2025-12-03T23:56:10.333 [DEBUG] [Thread-125988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:56:10.347 [DEBUG] [Thread-125988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:56:10.348 [INFO] [Thread-125988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:56:10.355 [DEBUG] [Thread-125988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:56:10.355 [DEBUG] [Thread-125988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:56:10.355 [DEBUG] [Thread-125988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:56:10.355 [DEBUG] [Thread-125988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] client lang: <none>
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] server lang: <none>
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] kex follows: False
2025-12-03T23:56:10.356 [DEBUG] [Thread-125988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] Compression: none
2025-12-03T23:56:10.357 [DEBUG] [Thread-125988] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:56:10.419 [DEBUG] [Thread-125988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:56:10.419 [DEBUG] [Thread-125988] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:56:10.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:56:10.420 [DEBUG] [Thread-125988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:56:10.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:56:10.475 [DEBUG] [Thread-125988] [transport.py] [_log()] userauth is OK
2025-12-03T23:56:10.475 [DEBUG] [Thread-125988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:56:10.475 [DEBUG] [Thread-125988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:56:10.475 [DEBUG] [Thread-125988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:56:10.475 [DEBUG] [Thread-125988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:56:10.498 [INFO] [Thread-125988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:56:10.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:56:10.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:56:11.358 [DEBUG] [Thread-125988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:56:11.358 [DEBUG] [Thread-125988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:56:11.406 [DEBUG] [Thread-125988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:56:11.406 [DEBUG] [Thread-125988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:56:11.415 [DEBUG] [Thread-125988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:56:11.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:56:11.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:56:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:56:11.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:56:11.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:56:11.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:56:11.448 [DEBUG] [Thread-125988] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:56:18.644 [DEBUG] [Thread-125990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:21.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:21.448 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:21.861 [DEBUG] [Thread-125991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:27.124 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:33.693 [DEBUG] [Thread-125992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:56:41.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:56:41.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:56:42.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 56, 23), 13.25, 40.57, 0.0, 24.28, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:56:42.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:56:23
2025-12-03T23:56:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:56:42.436 [DEBUG] [Thread-125993] [transport.py] [_log()] starting thread (client mode): 0xa51ce530
2025-12-03T23:56:42.436 [DEBUG] [Thread-125993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:56:42.458 [DEBUG] [Thread-125993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:56:42.458 [INFO] [Thread-125993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:56:42.461 [DEBUG] [Thread-125993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] client lang: <none>
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] server lang: <none>
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] kex follows: False
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] Compression: none
2025-12-03T23:56:42.462 [DEBUG] [Thread-125993] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:56:42.480 [DEBUG] [Thread-125993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:56:42.481 [DEBUG] [Thread-125993] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:56:42.481 [DEBUG] [Thread-125993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:56:42.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:56:42.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:56:42.483 [DEBUG] [Thread-125993] [transport.py] [_log()] userauth is OK
2025-12-03T23:56:42.484 [DEBUG] [Thread-125993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:56:42.484 [DEBUG] [Thread-125993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:56:42.484 [DEBUG] [Thread-125993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:56:42.484 [DEBUG] [Thread-125993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:56:42.507 [INFO] [Thread-125993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:56:42.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:56:43.162 [DEBUG] [Thread-125993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:56:43.162 [DEBUG] [Thread-125993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:56:43.163 [DEBUG] [Thread-125993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:56:43.203 [DEBUG] [Thread-125993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:56:43.203 [DEBUG] [Thread-125993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:56:43.206 [DEBUG] [Thread-125993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:56:43.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:56:43.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:56:43.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:56:43.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:56:43.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:56:43.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:56:43.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:56:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.913937 -999.00  +14.50  16.99     45   +3.00 1 1 1 1 1     0    0 10.13 -91.87 ZNESW 18.6 17.0 154.4 21.8 15.0 -25.3 14.9 -24.7 14.7 -23.2 15.0 -24.0
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.913937
2025-12-03T23:56:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:56:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:56:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:56:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:56:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:56:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:56:23', tmtdew=13.25, humidity=40.57, cloud=0.0, wind=24.28, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:56:24', seeing=1.11, atlas_timestamp='2025-12-03T21:56:04.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.011250000000000426, -0.00975000000000037, 0.02149999999999963, -0.009499999999999176, 0.06375000000000064, -0.03950000000000031, -0.09274999999999878, -0.044500000000001094, 0.009000000000000341, 0.003750000000000142, -0.009000000000000341, 0.08950000000000102, -0.038750000000000284, -0.18299999999999983, -0.16400000000000148, 0.003750000000000142, -0.0015000000000000568, -0.010000000000001563, 0.03324999999999889, 0.03749999999999787, -0.06425000000000125, -0.19324999999999903, -0.05025000000000013, -0.02000000000000135, -0.007500000000000284, -0.04224999999999923, 0.059499999999999886, 0.08999999999999986, 0.14250000000000185, -0.2919999999999998, -0.021999999999998465, 0.021249999999998437], zp_timestamp='2025-12-03T21:52:00')
2025-12-03T23:56:43.232 [DEBUG] [Thread-125993] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:56:43.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:56:43.345 [DEBUG] [Thread-125996] [transport.py] [_log()] starting thread (client mode): 0xa51ce980
2025-12-03T23:56:43.345 [DEBUG] [Thread-125996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:56:43.361 [DEBUG] [Thread-125996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:56:43.361 [INFO] [Thread-125996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:56:43.368 [DEBUG] [Thread-125996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] client lang: <none>
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] server lang: <none>
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] kex follows: False
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:56:43.369 [DEBUG] [Thread-125996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:56:43.370 [DEBUG] [Thread-125996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:56:43.370 [DEBUG] [Thread-125996] [transport.py] [_log()] Compression: none
2025-12-03T23:56:43.370 [DEBUG] [Thread-125996] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:56:43.426 [DEBUG] [Thread-125996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:56:43.427 [DEBUG] [Thread-125996] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:56:43.427 [DEBUG] [Thread-125996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:56:43.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:56:43.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:56:43.483 [DEBUG] [Thread-125996] [transport.py] [_log()] userauth is OK
2025-12-03T23:56:43.483 [DEBUG] [Thread-125996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:56:43.484 [DEBUG] [Thread-125996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:56:43.484 [DEBUG] [Thread-125996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:56:43.484 [DEBUG] [Thread-125996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:56:43.503 [INFO] [Thread-125996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:56:43.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:56:43.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:56:44.472 [DEBUG] [Thread-125996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:56:44.472 [DEBUG] [Thread-125996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:56:44.520 [DEBUG] [Thread-125996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:56:44.520 [DEBUG] [Thread-125996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:56:44.529 [DEBUG] [Thread-125996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:56:44.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:56:44.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:56:44.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:56:44.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:56:44.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:56:44.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:56:44.569 [DEBUG] [Thread-125996] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:56:47.534 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:56:48.731 [DEBUG] [Thread-125998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:03.790 [DEBUG] [Thread-125999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:07.958 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:14.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:57:14.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:57:14.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:57:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 56, 55), 13.11, 40.69, 0.0, 25.64, 14.44, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:57:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:56:55
2025-12-03T23:57:15.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:57:15.551 [DEBUG] [Thread-126000] [transport.py] [_log()] starting thread (client mode): 0xa2778af0
2025-12-03T23:57:15.551 [DEBUG] [Thread-126000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:57:15.571 [DEBUG] [Thread-126000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:57:15.572 [INFO] [Thread-126000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:15.575 [DEBUG] [Thread-126000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] client lang: <none>
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] server lang: <none>
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] kex follows: False
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] Compression: none
2025-12-03T23:57:15.576 [DEBUG] [Thread-126000] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:57:15.594 [DEBUG] [Thread-126000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:57:15.594 [DEBUG] [Thread-126000] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:57:15.595 [DEBUG] [Thread-126000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:57:15.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:57:15.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:57:15.637 [DEBUG] [Thread-126000] [transport.py] [_log()] userauth is OK
2025-12-03T23:57:15.637 [DEBUG] [Thread-126000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:57:15.637 [DEBUG] [Thread-126000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:57:15.637 [DEBUG] [Thread-126000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:57:15.637 [DEBUG] [Thread-126000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:57:15.661 [INFO] [Thread-126000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:57:15.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:57:16.298 [DEBUG] [Thread-126000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:57:16.299 [DEBUG] [Thread-126000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:57:16.299 [DEBUG] [Thread-126000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:57:16.340 [DEBUG] [Thread-126000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:57:16.340 [DEBUG] [Thread-126000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:57:16.343 [DEBUG] [Thread-126000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:57:16.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:57:16.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:57:16.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:57:16.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:57:16.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:57:16.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:57:16.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:57:16.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:57:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:57:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.914284 -999.00  +14.50  15.03     45   +2.90 1 1 1 1 1     0    0 10.16 -86.11 ZNESW 15.3 15.0 155.0 29.3 15.0 -25.3 14.9 -24.9 14.7 -23.3 14.9 -24.0
2025-12-03T23:57:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:57:16.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:57:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.914284
2025-12-03T23:57:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:57:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:57:16.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:57:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:57:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:57:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:56:55', tmtdew=13.11, humidity=40.69, cloud=0.0, wind=25.64, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:56:56', seeing=1.01, atlas_timestamp='2025-12-03T21:56:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-03T23:57:16.366 [DEBUG] [Thread-126000] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:57:16.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:57:16.471 [DEBUG] [Thread-126003] [transport.py] [_log()] starting thread (client mode): 0xa2778160
2025-12-03T23:57:16.471 [DEBUG] [Thread-126003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:57:16.486 [DEBUG] [Thread-126003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:57:16.486 [INFO] [Thread-126003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:57:16.493 [DEBUG] [Thread-126003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:57:16.493 [DEBUG] [Thread-126003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] client lang: <none>
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] server lang: <none>
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] kex follows: False
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] Compression: none
2025-12-03T23:57:16.494 [DEBUG] [Thread-126003] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:57:16.554 [DEBUG] [Thread-126003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:57:16.554 [DEBUG] [Thread-126003] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:57:16.555 [DEBUG] [Thread-126003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:57:16.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:57:16.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:57:16.615 [DEBUG] [Thread-126003] [transport.py] [_log()] userauth is OK
2025-12-03T23:57:16.615 [DEBUG] [Thread-126003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:57:16.615 [DEBUG] [Thread-126003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:57:16.616 [DEBUG] [Thread-126003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:57:16.616 [DEBUG] [Thread-126003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:57:16.637 [INFO] [Thread-126003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:57:16.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:57:16.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:57:17.481 [DEBUG] [Thread-126003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:57:17.481 [DEBUG] [Thread-126003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:57:17.529 [DEBUG] [Thread-126003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:57:17.529 [DEBUG] [Thread-126003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:57:17.537 [DEBUG] [Thread-126003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:57:17.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:57:17.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:57:17.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:57:17.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:57:17.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:57:17.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:57:17.571 [DEBUG] [Thread-126003] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:57:18.828 [DEBUG] [Thread-126005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:21.647 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:21.649 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:21.921 [DEBUG] [Thread-126006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:28.369 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:33.881 [DEBUG] [Thread-126007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:47.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:57:47.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:57:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:57:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 57, 28), 13.09, 40.74, 0.0, 25.34, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:57:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:57:28
2025-12-03T23:57:48.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:57:48.538 [DEBUG] [Thread-126008] [transport.py] [_log()] starting thread (client mode): 0xa51ccaf0
2025-12-03T23:57:48.538 [DEBUG] [Thread-126008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:57:48.560 [DEBUG] [Thread-126008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:57:48.560 [INFO] [Thread-126008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] client lang: <none>
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] server lang: <none>
2025-12-03T23:57:48.563 [DEBUG] [Thread-126008] [transport.py] [_log()] kex follows: False
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] Compression: none
2025-12-03T23:57:48.564 [DEBUG] [Thread-126008] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:57:48.581 [DEBUG] [Thread-126008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:57:48.582 [DEBUG] [Thread-126008] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:57:48.582 [DEBUG] [Thread-126008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:57:48.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:57:48.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:57:48.584 [DEBUG] [Thread-126008] [transport.py] [_log()] userauth is OK
2025-12-03T23:57:48.584 [DEBUG] [Thread-126008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:57:48.584 [DEBUG] [Thread-126008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:57:48.584 [DEBUG] [Thread-126008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:57:48.584 [DEBUG] [Thread-126008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:57:48.609 [INFO] [Thread-126008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:57:48.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:57:48.917 [DEBUG] [Thread-126010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:48.974 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:57:49.248 [DEBUG] [Thread-126008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:57:49.248 [DEBUG] [Thread-126008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:57:49.249 [DEBUG] [Thread-126008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:57:49.290 [DEBUG] [Thread-126008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:57:49.290 [DEBUG] [Thread-126008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:57:49.293 [DEBUG] [Thread-126008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:57:49.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:57:49.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:57:49.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:57:49.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:57:49.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:57:49.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:57:49.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:57:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.914631 -999.00  +14.40  20.46     45   +2.90 1 1 1 1 1     0    0 10.19 -87.17 ZNESW 18.0 20.5 142.8 24.9 15.0 -25.3 14.9 -24.8 14.7 -23.2 14.9 -24.1
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.914631
2025-12-03T23:57:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:57:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:57:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:57:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:57:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:57:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:57:28', tmtdew=13.09, humidity=40.74, cloud=0.0, wind=25.34, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:57:28', seeing=1.01, atlas_timestamp='2025-12-03T21:57:04.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-03T23:57:49.317 [DEBUG] [Thread-126008] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:57:49.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:57:49.419 [DEBUG] [Thread-126012] [transport.py] [_log()] starting thread (client mode): 0xa2745570
2025-12-03T23:57:49.419 [DEBUG] [Thread-126012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:57:49.433 [DEBUG] [Thread-126012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:57:49.433 [INFO] [Thread-126012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:57:49.440 [DEBUG] [Thread-126012] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] client lang: <none>
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] server lang: <none>
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] kex follows: False
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:57:49.441 [DEBUG] [Thread-126012] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:57:49.442 [DEBUG] [Thread-126012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:57:49.442 [DEBUG] [Thread-126012] [transport.py] [_log()] Compression: none
2025-12-03T23:57:49.442 [DEBUG] [Thread-126012] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:57:49.500 [DEBUG] [Thread-126012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:57:49.501 [DEBUG] [Thread-126012] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:57:49.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:57:49.501 [DEBUG] [Thread-126012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:57:49.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:57:49.560 [DEBUG] [Thread-126012] [transport.py] [_log()] userauth is OK
2025-12-03T23:57:49.560 [DEBUG] [Thread-126012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:57:49.560 [DEBUG] [Thread-126012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:57:49.560 [DEBUG] [Thread-126012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:57:49.560 [DEBUG] [Thread-126012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:57:49.583 [INFO] [Thread-126012] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:57:49.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:57:49.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:57:50.517 [DEBUG] [Thread-126012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:57:50.517 [DEBUG] [Thread-126012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:57:50.565 [DEBUG] [Thread-126012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:57:50.565 [DEBUG] [Thread-126012] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:57:50.575 [DEBUG] [Thread-126012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:57:50.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:57:50.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:57:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:57:50.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:57:50.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:57:50.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:57:50.613 [DEBUG] [Thread-126012] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:58:03.954 [DEBUG] [Thread-126014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:09.464 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:19.009 [DEBUG] [Thread-126015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:20.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:58:20.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:58:20.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:58:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 57, 28), 13.09, 40.74, 0.0, 25.34, 14.4, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:58:21.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:57:28
2025-12-03T23:58:21.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:58:21.582 [DEBUG] [Thread-126016] [transport.py] [_log()] starting thread (client mode): 0xa2778b50
2025-12-03T23:58:21.582 [DEBUG] [Thread-126016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:58:21.602 [DEBUG] [Thread-126016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:58:21.602 [INFO] [Thread-126016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] client lang: <none>
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] server lang: <none>
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] kex follows: False
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] Compression: none
2025-12-03T23:58:21.606 [DEBUG] [Thread-126016] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:58:21.620 [DEBUG] [Thread-126016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:58:21.621 [DEBUG] [Thread-126016] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:58:21.621 [DEBUG] [Thread-126016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:58:21.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:58:21.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:58:21.622 [DEBUG] [Thread-126016] [transport.py] [_log()] userauth is OK
2025-12-03T23:58:21.622 [DEBUG] [Thread-126016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:58:21.622 [DEBUG] [Thread-126016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:58:21.622 [DEBUG] [Thread-126016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:58:21.622 [DEBUG] [Thread-126016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:58:21.639 [INFO] [Thread-126016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:58:21.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:58:21.849 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:21.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:21.994 [DEBUG] [Thread-126018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:22.257 [DEBUG] [Thread-126016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:58:22.257 [DEBUG] [Thread-126016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:58:22.258 [DEBUG] [Thread-126016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:58:22.298 [DEBUG] [Thread-126016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:58:22.298 [DEBUG] [Thread-126016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:58:22.301 [DEBUG] [Thread-126016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:58:22.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:58:22.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:58:22.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:58:22.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:58:22.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:58:22.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:58:22.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.914978 -999.00  +14.40  12.53     45   +2.90 1 1 1 1 1     0    0 9.92 -90.69 ZNESW 21.3 12.5 156.6 22.6 14.9 -25.3 14.9 -24.8 14.6 -23.2 14.9 -24.1
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.914978
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:58:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:57:28', tmtdew=13.09, humidity=40.74, cloud=0.0, wind=25.34, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:58:00', seeing=1.14, atlas_timestamp='2025-12-03T21:57:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-03T23:58:22.317 [DEBUG] [Thread-126016] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:58:22.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:58:22.408 [DEBUG] [Thread-126020] [transport.py] [_log()] starting thread (client mode): 0xa51cdff0
2025-12-03T23:58:22.408 [DEBUG] [Thread-126020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:58:22.423 [DEBUG] [Thread-126020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:58:22.423 [INFO] [Thread-126020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:58:22.430 [DEBUG] [Thread-126020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:58:22.430 [DEBUG] [Thread-126020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] client lang: <none>
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] server lang: <none>
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] kex follows: False
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] Compression: none
2025-12-03T23:58:22.431 [DEBUG] [Thread-126020] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:58:22.489 [DEBUG] [Thread-126020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:58:22.490 [DEBUG] [Thread-126020] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:58:22.490 [DEBUG] [Thread-126020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:58:22.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:58:22.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:58:22.548 [DEBUG] [Thread-126020] [transport.py] [_log()] userauth is OK
2025-12-03T23:58:22.548 [DEBUG] [Thread-126020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:58:22.548 [DEBUG] [Thread-126020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:58:22.548 [DEBUG] [Thread-126020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:58:22.548 [DEBUG] [Thread-126020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:58:22.571 [INFO] [Thread-126020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:58:22.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:58:22.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:58:23.558 [DEBUG] [Thread-126020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:58:23.558 [DEBUG] [Thread-126020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:58:23.606 [DEBUG] [Thread-126020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:58:23.606 [DEBUG] [Thread-126020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:58:23.615 [DEBUG] [Thread-126020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:58:23.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:58:23.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:58:23.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:58:23.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:58:23.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:58:23.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:58:23.649 [DEBUG] [Thread-126020] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:58:29.883 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:34.045 [DEBUG] [Thread-126022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:49.097 [DEBUG] [Thread-126023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:50.267 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:58:53.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:58:53.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:58:53.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:58:54.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 58, 32), 12.95, 41.52, 0.0, 23.94, 14.39, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:58:54.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:58:32
2025-12-03T23:58:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:58:54.649 [DEBUG] [Thread-126024] [transport.py] [_log()] starting thread (client mode): 0xa514d210
2025-12-03T23:58:54.649 [DEBUG] [Thread-126024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:58:54.670 [DEBUG] [Thread-126024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:58:54.670 [INFO] [Thread-126024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] client lang: <none>
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] server lang: <none>
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] kex follows: False
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:58:54.673 [DEBUG] [Thread-126024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:58:54.674 [DEBUG] [Thread-126024] [transport.py] [_log()] Compression: none
2025-12-03T23:58:54.674 [DEBUG] [Thread-126024] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:58:54.690 [DEBUG] [Thread-126024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:58:54.690 [DEBUG] [Thread-126024] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:58:54.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:58:54.690 [DEBUG] [Thread-126024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:58:54.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:58:54.691 [DEBUG] [Thread-126024] [transport.py] [_log()] userauth is OK
2025-12-03T23:58:54.691 [DEBUG] [Thread-126024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:58:54.691 [DEBUG] [Thread-126024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:58:54.691 [DEBUG] [Thread-126024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:58:54.691 [DEBUG] [Thread-126024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:58:54.704 [INFO] [Thread-126024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:58:54.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:58:55.359 [DEBUG] [Thread-126024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:58:55.359 [DEBUG] [Thread-126024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:58:55.359 [DEBUG] [Thread-126024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:58:55.399 [DEBUG] [Thread-126024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:58:55.400 [DEBUG] [Thread-126024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:58:55.402 [DEBUG] [Thread-126024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:58:55.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:58:55.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:58:55.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:58:55.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:58:55.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:58:55.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:58:55.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:58:55.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.915326 -999.00  +14.30  17.47     46   +3.10 1 1 1 1 1     0    0 9.75 -94.37 ZNESW 19.6 17.5 144.2 23.5 14.9 -25.3 14.8 -24.6 14.6 -23.2 14.9 -24.2
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.915326
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:58:55.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:58:32', tmtdew=12.95, humidity=41.52, cloud=0.0, wind=23.94, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:58:32', seeing=1.4, atlas_timestamp='2025-12-03T21:58:04.166', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-03T23:58:55.420 [DEBUG] [Thread-126024] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:58:55.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:58:55.511 [DEBUG] [Thread-126027] [transport.py] [_log()] starting thread (client mode): 0xa51cc850
2025-12-03T23:58:55.512 [DEBUG] [Thread-126027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:58:55.526 [DEBUG] [Thread-126027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:58:55.526 [INFO] [Thread-126027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] client lang: <none>
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] server lang: <none>
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] kex follows: False
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] Compression: none
2025-12-03T23:58:55.533 [DEBUG] [Thread-126027] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:58:55.591 [DEBUG] [Thread-126027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:58:55.592 [DEBUG] [Thread-126027] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:58:55.592 [DEBUG] [Thread-126027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:58:55.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:58:55.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:58:55.648 [DEBUG] [Thread-126027] [transport.py] [_log()] userauth is OK
2025-12-03T23:58:55.649 [DEBUG] [Thread-126027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:58:55.649 [DEBUG] [Thread-126027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:58:55.649 [DEBUG] [Thread-126027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:58:55.649 [DEBUG] [Thread-126027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:58:55.668 [INFO] [Thread-126027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:58:55.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:58:55.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:58:56.504 [DEBUG] [Thread-126027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:58:56.504 [DEBUG] [Thread-126027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:58:56.552 [DEBUG] [Thread-126027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:58:56.552 [DEBUG] [Thread-126027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:58:56.561 [DEBUG] [Thread-126027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:58:56.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:58:56.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:58:56.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:58:56.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:58:56.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:58:56.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:58:56.595 [DEBUG] [Thread-126027] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:59:04.135 [DEBUG] [Thread-126029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:10.659 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:19.194 [DEBUG] [Thread-126030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:22.052 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:22.053 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:22.057 [DEBUG] [Thread-126031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:26.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:59:26.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:59:26.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-03T23:59:27.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 59, 4), 12.82, 41.9, 0.0, 24.38, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-03T23:59:27.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:59:04
2025-12-03T23:59:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-03T23:59:27.583 [DEBUG] [Thread-126032] [transport.py] [_log()] starting thread (client mode): 0xa2778760
2025-12-03T23:59:27.583 [DEBUG] [Thread-126032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:59:27.603 [DEBUG] [Thread-126032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-03T23:59:27.603 [INFO] [Thread-126032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-03T23:59:27.606 [DEBUG] [Thread-126032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] client lang: <none>
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] server lang: <none>
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] kex follows: False
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] Compression: none
2025-12-03T23:59:27.607 [DEBUG] [Thread-126032] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:59:27.626 [DEBUG] [Thread-126032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:59:27.626 [DEBUG] [Thread-126032] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:59:27.627 [DEBUG] [Thread-126032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-03T23:59:27.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-03T23:59:27.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:59:27.669 [DEBUG] [Thread-126032] [transport.py] [_log()] userauth is OK
2025-12-03T23:59:27.669 [DEBUG] [Thread-126032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:59:27.669 [DEBUG] [Thread-126032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:59:27.669 [DEBUG] [Thread-126032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-03T23:59:27.669 [DEBUG] [Thread-126032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:59:27.700 [INFO] [Thread-126032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:59:27.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:59:28.333 [DEBUG] [Thread-126032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:59:28.333 [DEBUG] [Thread-126032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:59:28.333 [DEBUG] [Thread-126032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-03T23:59:28.374 [DEBUG] [Thread-126032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:59:28.374 [DEBUG] [Thread-126032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:59:28.376 [DEBUG] [Thread-126032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:59:28.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:59:28.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-03T23:59:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-03T23:59:28.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-03T23:59:28.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:59:28.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-03T23:59:28.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:59:28.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.916020 -999.00  +14.30  18.41     46   +3.10 1 1 1 1 1     0    0 9.70 -96.79 ZNESW 16.7 18.4 150.4 21.7 14.9 -25.2 14.8 -24.6 14.6 -23.1 14.9 -24.0
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.916020
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-03T23:59:28.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:59:04', tmtdew=12.82, humidity=41.9, cloud=0.0, wind=24.38, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:59:04', seeing=1.52, atlas_timestamp='2025-12-03T21:59:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-03T23:59:28.397 [DEBUG] [Thread-126032] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:59:28.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-03T23:59:28.489 [DEBUG] [Thread-126035] [transport.py] [_log()] starting thread (client mode): 0xa27783a0
2025-12-03T23:59:28.489 [DEBUG] [Thread-126035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-03T23:59:28.503 [DEBUG] [Thread-126035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-03T23:59:28.503 [INFO] [Thread-126035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] client lang: <none>
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] server lang: <none>
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] kex follows: False
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-03T23:59:28.511 [DEBUG] [Thread-126035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-03T23:59:28.512 [DEBUG] [Thread-126035] [transport.py] [_log()] Compression: none
2025-12-03T23:59:28.512 [DEBUG] [Thread-126035] [transport.py] [_log()] === End of kex handshake ===
2025-12-03T23:59:28.568 [DEBUG] [Thread-126035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-03T23:59:28.568 [DEBUG] [Thread-126035] [transport.py] [_log()] Switch to new keys ...
2025-12-03T23:59:28.569 [DEBUG] [Thread-126035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-03T23:59:28.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-03T23:59:28.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-03T23:59:28.627 [DEBUG] [Thread-126035] [transport.py] [_log()] userauth is OK
2025-12-03T23:59:28.627 [DEBUG] [Thread-126035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-03T23:59:28.627 [DEBUG] [Thread-126035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-03T23:59:28.627 [DEBUG] [Thread-126035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-03T23:59:28.627 [DEBUG] [Thread-126035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-03T23:59:28.641 [INFO] [Thread-126035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-03T23:59:28.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-03T23:59:28.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-03T23:59:29.691 [DEBUG] [Thread-126035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-03T23:59:29.691 [DEBUG] [Thread-126035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-03T23:59:29.739 [DEBUG] [Thread-126035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-03T23:59:29.739 [DEBUG] [Thread-126035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-03T23:59:29.749 [DEBUG] [Thread-126035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-03T23:59:29.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-03T23:59:29.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-03T23:59:29.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-03T23:59:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-03T23:59:29.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-03T23:59:29.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-03T23:59:29.781 [DEBUG] [Thread-126035] [transport.py] [_log()] EOF in transport thread
2025-12-03T23:59:31.127 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:34.228 [DEBUG] [Thread-126037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:49.295 [DEBUG] [Thread-126038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:51.837 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-03T23:59:59.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-03T23:59:59.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-03T23:59:59.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:00:00.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 3, 23, 59, 36), 12.59, 42.48, 0.0, 24.47, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:00:00.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-03 23:59:36
2025-12-04T00:00:00.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:00:00.778 [DEBUG] [Thread-126039] [transport.py] [_log()] starting thread (client mode): 0xa277b1c0
2025-12-04T00:00:00.778 [DEBUG] [Thread-126039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:00:00.797 [DEBUG] [Thread-126039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:00:00.797 [INFO] [Thread-126039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:00:00.800 [DEBUG] [Thread-126039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:00:00.800 [DEBUG] [Thread-126039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:00:00.800 [DEBUG] [Thread-126039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:00:00.800 [DEBUG] [Thread-126039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] client lang: <none>
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] server lang: <none>
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] kex follows: False
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] Compression: none
2025-12-04T00:00:00.801 [DEBUG] [Thread-126039] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:00:00.815 [DEBUG] [Thread-126039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:00:00.816 [DEBUG] [Thread-126039] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:00:00.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:00:00.816 [DEBUG] [Thread-126039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:00:00.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:00:00.817 [DEBUG] [Thread-126039] [transport.py] [_log()] userauth is OK
2025-12-04T00:00:00.817 [DEBUG] [Thread-126039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:00:00.817 [DEBUG] [Thread-126039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:00:00.817 [DEBUG] [Thread-126039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:00:00.817 [DEBUG] [Thread-126039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:00:00.836 [INFO] [Thread-126039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:00:00.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:00:01.438 [DEBUG] [Thread-126039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:00:01.438 [DEBUG] [Thread-126039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:00:01.438 [DEBUG] [Thread-126039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:00:01.478 [DEBUG] [Thread-126039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:00:01.478 [DEBUG] [Thread-126039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:00:01.480 [DEBUG] [Thread-126039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:00:01.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:00:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:00:01.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:00:01.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:00:01.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:00:01.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:00:01.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.916367 -999.00  +14.30  16.55     47   +3.20 1 1 1 1 1     0    0 9.72 -98.86 ZNESW 20.9 16.6 143.4 26.3 14.9 -25.1 14.8 -24.6 14.6 -23.1 14.9 -24.1
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.916367
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:00:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-03T23:59:36', tmtdew=12.59, humidity=42.48, cloud=0.0, wind=24.47, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-03T23:59:36', seeing=1.75, atlas_timestamp='2025-12-03T21:59:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:56:00')
2025-12-04T00:00:01.496 [DEBUG] [Thread-126039] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:00:01.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:00:01.597 [DEBUG] [Thread-126042] [transport.py] [_log()] starting thread (client mode): 0xa2744520
2025-12-04T00:00:01.597 [DEBUG] [Thread-126042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:00:01.615 [DEBUG] [Thread-126042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:00:01.615 [INFO] [Thread-126042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] client lang: <none>
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] server lang: <none>
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] kex follows: False
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:00:01.623 [DEBUG] [Thread-126042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:00:01.624 [DEBUG] [Thread-126042] [transport.py] [_log()] Compression: none
2025-12-04T00:00:01.624 [DEBUG] [Thread-126042] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:00:01.678 [DEBUG] [Thread-126042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:00:01.678 [DEBUG] [Thread-126042] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:00:01.679 [DEBUG] [Thread-126042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:00:01.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:00:01.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:00:01.736 [DEBUG] [Thread-126042] [transport.py] [_log()] userauth is OK
2025-12-04T00:00:01.736 [DEBUG] [Thread-126042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:00:01.736 [DEBUG] [Thread-126042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:00:01.736 [DEBUG] [Thread-126042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:00:01.736 [DEBUG] [Thread-126042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:00:01.750 [INFO] [Thread-126042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:00:01.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:00:01.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:00:02.582 [DEBUG] [Thread-126042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:00:02.583 [DEBUG] [Thread-126042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:00:02.631 [DEBUG] [Thread-126042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:00:02.631 [DEBUG] [Thread-126042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:00:02.640 [DEBUG] [Thread-126042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:00:02.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:00:02.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:00:02.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:00:02.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:00:02.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:00:02.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:00:02.671 [DEBUG] [Thread-126042] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:00:04.330 [DEBUG] [Thread-126044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:12.627 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:19.381 [DEBUG] [Thread-126045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:22.147 [DEBUG] [Thread-126046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:22.252 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:22.253 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:00:32.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:00:32.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:00:33.318 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 0, 8), 12.58, 42.5, 0.0, 23.47, 14.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:00:33.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:00:08
2025-12-04T00:00:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:00:33.652 [DEBUG] [Thread-126047] [transport.py] [_log()] starting thread (client mode): 0xa277a350
2025-12-04T00:00:33.652 [DEBUG] [Thread-126047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:00:33.672 [DEBUG] [Thread-126047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:00:33.672 [INFO] [Thread-126047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:00:33.676 [DEBUG] [Thread-126047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] client lang: <none>
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] server lang: <none>
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] kex follows: False
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:00:33.677 [DEBUG] [Thread-126047] [transport.py] [_log()] Compression: none
2025-12-04T00:00:33.678 [DEBUG] [Thread-126047] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:00:33.696 [DEBUG] [Thread-126047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:00:33.696 [DEBUG] [Thread-126047] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:00:33.697 [DEBUG] [Thread-126047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:00:33.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:00:33.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:00:33.699 [DEBUG] [Thread-126047] [transport.py] [_log()] userauth is OK
2025-12-04T00:00:33.699 [DEBUG] [Thread-126047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:00:33.699 [DEBUG] [Thread-126047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:00:33.699 [DEBUG] [Thread-126047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:00:33.699 [DEBUG] [Thread-126047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:00:33.735 [INFO] [Thread-126047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:00:33.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:00:34.379 [DEBUG] [Thread-126047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:00:34.379 [DEBUG] [Thread-126047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:00:34.379 [DEBUG] [Thread-126047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:00:34.418 [DEBUG] [Thread-126049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:34.420 [DEBUG] [Thread-126047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:00:34.420 [DEBUG] [Thread-126047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:00:34.423 [DEBUG] [Thread-126047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:00:34.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:00:34.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:00:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:00:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:00:34.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:00:34.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:00:34.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.916714 -999.00  +14.30  19.76     47   +3.10 1 1 1 1 1     0    0 9.28 -105.69 ZNESW 17.6 19.8 140.4 23.9 14.8 -25.1 14.8 -24.6 14.6 -23.0 14.8 -24.0
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:00:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.916714
2025-12-04T00:00:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:00:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:00:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:00:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:00:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:00:34.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:00:08', tmtdew=12.58, humidity=42.5, cloud=0.0, wind=23.47, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:00:08', seeing=1.74, atlas_timestamp='2025-12-03T22:00:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:59:00')
2025-12-04T00:00:34.449 [DEBUG] [Thread-126047] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:00:34.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:00:34.551 [DEBUG] [Thread-126051] [transport.py] [_log()] starting thread (client mode): 0xa51b9c60
2025-12-04T00:00:34.551 [DEBUG] [Thread-126051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:00:34.565 [DEBUG] [Thread-126051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:00:34.565 [INFO] [Thread-126051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:00:34.573 [DEBUG] [Thread-126051] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:00:34.573 [DEBUG] [Thread-126051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] client lang: <none>
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] server lang: <none>
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] kex follows: False
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:00:34.574 [DEBUG] [Thread-126051] [transport.py] [_log()] Compression: none
2025-12-04T00:00:34.575 [DEBUG] [Thread-126051] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:00:34.632 [DEBUG] [Thread-126051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:00:34.633 [DEBUG] [Thread-126051] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:00:34.633 [DEBUG] [Thread-126051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:00:34.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:00:34.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:00:34.690 [DEBUG] [Thread-126051] [transport.py] [_log()] userauth is OK
2025-12-04T00:00:34.691 [DEBUG] [Thread-126051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:00:34.691 [DEBUG] [Thread-126051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:00:34.691 [DEBUG] [Thread-126051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:00:34.691 [DEBUG] [Thread-126051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:00:34.711 [INFO] [Thread-126051] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:00:34.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:00:34.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:00:35.832 [DEBUG] [Thread-126051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:00:35.833 [DEBUG] [Thread-126051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:00:35.881 [DEBUG] [Thread-126051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:00:35.881 [DEBUG] [Thread-126051] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:00:35.890 [DEBUG] [Thread-126051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:00:35.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:00:35.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:00:35.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:00:35.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:00:35.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:00:35.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:00:35.925 [DEBUG] [Thread-126051] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:00:49.451 [DEBUG] [Thread-126053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:00:53.700 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:04.502 [DEBUG] [Thread-126054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:05.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:01:05.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:01:05.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:01:06.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 0, 40), 12.48, 42.98, 0.0, 22.85, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:01:06.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:00:40
2025-12-04T00:01:06.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:01:06.907 [DEBUG] [Thread-126055] [transport.py] [_log()] starting thread (client mode): 0xa2745630
2025-12-04T00:01:06.907 [DEBUG] [Thread-126055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:01:06.924 [DEBUG] [Thread-126055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:01:06.924 [INFO] [Thread-126055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:01:06.927 [DEBUG] [Thread-126055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:01:06.928 [DEBUG] [Thread-126055] [transport.py] [_log()] client lang: <none>
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] server lang: <none>
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] kex follows: False
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:01:06.929 [DEBUG] [Thread-126055] [transport.py] [_log()] Compression: none
2025-12-04T00:01:06.930 [DEBUG] [Thread-126055] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:01:06.949 [DEBUG] [Thread-126055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:01:06.949 [DEBUG] [Thread-126055] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:01:06.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:01:06.951 [DEBUG] [Thread-126055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:01:06.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:01:06.952 [DEBUG] [Thread-126055] [transport.py] [_log()] userauth is OK
2025-12-04T00:01:06.953 [DEBUG] [Thread-126055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:01:06.953 [DEBUG] [Thread-126055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:01:06.953 [DEBUG] [Thread-126055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:01:06.953 [DEBUG] [Thread-126055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:01:06.978 [INFO] [Thread-126055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:01:06.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:01:07.654 [DEBUG] [Thread-126055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:01:07.654 [DEBUG] [Thread-126055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:01:07.654 [DEBUG] [Thread-126055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:01:07.695 [DEBUG] [Thread-126055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:01:07.695 [DEBUG] [Thread-126055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:01:07.697 [DEBUG] [Thread-126055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:01:07.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:01:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:01:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:01:07.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:01:07.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:01:07.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:01:07.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.917062 -999.00  +14.20  18.69     47   +3.30 1 1 1 1 1     0    0 9.00 -107.75 ZNESW 17.4 18.7 149.2 23.3 14.8 -25.1 14.8 -24.5 14.6 -23.1 14.8 -23.9
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:01:07.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.917062
2025-12-04T00:01:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:01:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:01:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:01:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:01:07.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:01:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:00:40', tmtdew=12.48, humidity=42.98, cloud=0.0, wind=22.85, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:00:40', seeing=1.74, atlas_timestamp='2025-12-03T22:00:34.157', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:59:00')
2025-12-04T00:01:07.720 [DEBUG] [Thread-126055] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:01:07.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:01:07.825 [DEBUG] [Thread-126058] [transport.py] [_log()] starting thread (client mode): 0xa51bada0
2025-12-04T00:01:07.825 [DEBUG] [Thread-126058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:01:07.840 [DEBUG] [Thread-126058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:01:07.840 [INFO] [Thread-126058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:01:07.847 [DEBUG] [Thread-126058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:01:07.848 [DEBUG] [Thread-126058] [transport.py] [_log()] client lang: <none>
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] server lang: <none>
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] kex follows: False
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:01:07.849 [DEBUG] [Thread-126058] [transport.py] [_log()] Compression: none
2025-12-04T00:01:07.850 [DEBUG] [Thread-126058] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:01:07.907 [DEBUG] [Thread-126058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:01:07.908 [DEBUG] [Thread-126058] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:01:07.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:01:07.909 [DEBUG] [Thread-126058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:01:07.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:01:07.965 [DEBUG] [Thread-126058] [transport.py] [_log()] userauth is OK
2025-12-04T00:01:07.965 [DEBUG] [Thread-126058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:01:07.965 [DEBUG] [Thread-126058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:01:07.966 [DEBUG] [Thread-126058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:01:07.966 [DEBUG] [Thread-126058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:01:07.985 [INFO] [Thread-126058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:01:07.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:01:07.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:01:09.065 [DEBUG] [Thread-126058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:01:09.065 [DEBUG] [Thread-126058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:01:09.112 [DEBUG] [Thread-126058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:01:09.112 [DEBUG] [Thread-126058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:01:09.125 [DEBUG] [Thread-126058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:01:09.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:01:09.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:01:09.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:01:09.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:01:09.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:01:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:01:09.159 [DEBUG] [Thread-126058] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:01:14.095 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:19.537 [DEBUG] [Thread-126060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:22.218 [DEBUG] [Thread-126061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:22.454 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:22.455 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:34.603 [DEBUG] [Thread-126062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:34.759 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:01:39.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:01:39.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:01:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 1, 12), 12.43, 43.15, 0.0, 23.78, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:01:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:01:12
2025-12-04T00:01:39.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:01:40.149 [DEBUG] [Thread-126063] [transport.py] [_log()] starting thread (client mode): 0xa51cc940
2025-12-04T00:01:40.149 [DEBUG] [Thread-126063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:01:40.169 [DEBUG] [Thread-126063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:01:40.169 [INFO] [Thread-126063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:01:40.172 [DEBUG] [Thread-126063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:01:40.173 [DEBUG] [Thread-126063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] client lang: <none>
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] server lang: <none>
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] kex follows: False
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:01:40.174 [DEBUG] [Thread-126063] [transport.py] [_log()] Compression: none
2025-12-04T00:01:40.175 [DEBUG] [Thread-126063] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:01:40.192 [DEBUG] [Thread-126063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:01:40.193 [DEBUG] [Thread-126063] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:01:40.193 [DEBUG] [Thread-126063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:01:40.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:01:40.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:01:40.195 [DEBUG] [Thread-126063] [transport.py] [_log()] userauth is OK
2025-12-04T00:01:40.195 [DEBUG] [Thread-126063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:01:40.196 [DEBUG] [Thread-126063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:01:40.196 [DEBUG] [Thread-126063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:01:40.196 [DEBUG] [Thread-126063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:01:40.227 [INFO] [Thread-126063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:01:40.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:01:40.897 [DEBUG] [Thread-126063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:01:40.898 [DEBUG] [Thread-126063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:01:40.898 [DEBUG] [Thread-126063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:01:40.939 [DEBUG] [Thread-126063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:01:40.939 [DEBUG] [Thread-126063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:01:40.942 [DEBUG] [Thread-126063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:01:40.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:01:40.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:01:40.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:01:40.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:01:40.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:01:40.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:01:40.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:01:40.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.917409 -999.00  +14.20  18.41     48   +3.40 1 1 1 1 1     0    0 9.11 -112.94 ZNESW 19.6 18.4 145.4 27.8 14.8 -25.1 14.7 -24.6 14.6 -23.0 14.8 -23.8
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.917409
2025-12-04T00:01:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:01:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:01:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:01:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:01:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:01:40.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:01:12', tmtdew=12.43, humidity=43.15, cloud=0.0, wind=23.78, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:01:12', seeing=1.93, atlas_timestamp='2025-12-03T22:01:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:59:00')
2025-12-04T00:01:40.967 [DEBUG] [Thread-126063] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:01:41.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:01:41.069 [DEBUG] [Thread-126066] [transport.py] [_log()] starting thread (client mode): 0xa51cf2e0
2025-12-04T00:01:41.070 [DEBUG] [Thread-126066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:01:41.085 [DEBUG] [Thread-126066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:01:41.085 [INFO] [Thread-126066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:01:41.092 [DEBUG] [Thread-126066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:01:41.092 [DEBUG] [Thread-126066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:01:41.092 [DEBUG] [Thread-126066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] client lang: <none>
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] server lang: <none>
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] kex follows: False
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] Compression: none
2025-12-04T00:01:41.093 [DEBUG] [Thread-126066] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:01:41.153 [DEBUG] [Thread-126066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:01:41.153 [DEBUG] [Thread-126066] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:01:41.154 [DEBUG] [Thread-126066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:01:41.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:01:41.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:01:41.211 [DEBUG] [Thread-126066] [transport.py] [_log()] userauth is OK
2025-12-04T00:01:41.211 [DEBUG] [Thread-126066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:01:41.211 [DEBUG] [Thread-126066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:01:41.211 [DEBUG] [Thread-126066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:01:41.211 [DEBUG] [Thread-126066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:01:41.231 [INFO] [Thread-126066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:01:41.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:01:41.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:01:42.393 [DEBUG] [Thread-126066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:01:42.393 [DEBUG] [Thread-126066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:01:42.441 [DEBUG] [Thread-126066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:01:42.441 [DEBUG] [Thread-126066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:01:42.460 [DEBUG] [Thread-126066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:01:42.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:01:42.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:01:42.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:01:42.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:01:42.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:01:42.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:01:42.524 [DEBUG] [Thread-126066] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:01:49.639 [DEBUG] [Thread-126068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:01:55.185 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:04.695 [DEBUG] [Thread-126069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:02:12.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:02:12.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:02:13.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 1, 44), 12.2, 43.51, 0.0, 23.36, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:02:13.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:01:44
2025-12-04T00:02:13.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:02:13.506 [DEBUG] [Thread-126070] [transport.py] [_log()] starting thread (client mode): 0x9fd21060
2025-12-04T00:02:13.506 [DEBUG] [Thread-126070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:02:13.527 [DEBUG] [Thread-126070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:02:13.528 [INFO] [Thread-126070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] client lang: <none>
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] server lang: <none>
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] kex follows: False
2025-12-04T00:02:13.531 [DEBUG] [Thread-126070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] Compression: none
2025-12-04T00:02:13.532 [DEBUG] [Thread-126070] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:02:13.549 [DEBUG] [Thread-126070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:02:13.549 [DEBUG] [Thread-126070] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:02:13.549 [DEBUG] [Thread-126070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:02:13.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:02:13.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:02:13.551 [DEBUG] [Thread-126070] [transport.py] [_log()] userauth is OK
2025-12-04T00:02:13.551 [DEBUG] [Thread-126070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:02:13.551 [DEBUG] [Thread-126070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:02:13.551 [DEBUG] [Thread-126070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:02:13.551 [DEBUG] [Thread-126070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:02:13.568 [INFO] [Thread-126070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:02:13.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:02:14.218 [DEBUG] [Thread-126070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:02:14.219 [DEBUG] [Thread-126070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:02:14.219 [DEBUG] [Thread-126070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:02:14.260 [DEBUG] [Thread-126070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:02:14.260 [DEBUG] [Thread-126070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:02:14.263 [DEBUG] [Thread-126070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:02:14.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:02:14.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:02:14.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:02:14.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:02:14.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:02:14.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:02:14.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:02:14.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:02:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:02:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.917756 -999.00  +14.20  18.92     48   +3.50 1 1 1 1 1     0    0 8.73 -121.29 ZNESW 20.9 18.9 142.4 24.1 14.8 -25.0 14.7 -24.5 14.5 -23.0 14.8 -23.8
2025-12-04T00:02:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:02:14.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:02:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.917756
2025-12-04T00:02:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:02:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:02:14.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:02:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:02:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:02:14.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:01:44', tmtdew=12.2, humidity=43.51, cloud=0.0, wind=23.36, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:01:44', seeing=1.74, atlas_timestamp='2025-12-03T22:01:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:59:00')
2025-12-04T00:02:14.288 [DEBUG] [Thread-126070] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:02:14.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:02:14.392 [DEBUG] [Thread-126073] [transport.py] [_log()] starting thread (client mode): 0x9fd21780
2025-12-04T00:02:14.392 [DEBUG] [Thread-126073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:02:14.407 [DEBUG] [Thread-126073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:02:14.407 [INFO] [Thread-126073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:02:14.414 [DEBUG] [Thread-126073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:02:14.414 [DEBUG] [Thread-126073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:02:14.414 [DEBUG] [Thread-126073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:02:14.414 [DEBUG] [Thread-126073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:14.414 [DEBUG] [Thread-126073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] client lang: <none>
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] server lang: <none>
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] kex follows: False
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] Compression: none
2025-12-04T00:02:14.415 [DEBUG] [Thread-126073] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:02:14.473 [DEBUG] [Thread-126073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:02:14.473 [DEBUG] [Thread-126073] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:02:14.474 [DEBUG] [Thread-126073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:02:14.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:02:14.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:02:14.529 [DEBUG] [Thread-126073] [transport.py] [_log()] userauth is OK
2025-12-04T00:02:14.529 [DEBUG] [Thread-126073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:02:14.529 [DEBUG] [Thread-126073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:02:14.529 [DEBUG] [Thread-126073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:02:14.530 [DEBUG] [Thread-126073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:02:14.548 [INFO] [Thread-126073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:02:14.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:02:14.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:02:15.370 [DEBUG] [Thread-126073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:02:15.371 [DEBUG] [Thread-126073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:02:15.418 [DEBUG] [Thread-126073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:02:15.419 [DEBUG] [Thread-126073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:02:15.428 [DEBUG] [Thread-126073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:02:15.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:02:15.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:02:15.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:02:15.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:02:15.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:02:15.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:02:15.462 [DEBUG] [Thread-126073] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:02:15.618 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:19.728 [DEBUG] [Thread-126075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:22.292 [DEBUG] [Thread-126076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:22.662 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:22.663 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:34.789 [DEBUG] [Thread-126077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:36.106 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:02:45.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:02:45.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:02:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 2, 16), 12.18, 43.61, 0.0, 22.97, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:02:46.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:02:16
2025-12-04T00:02:46.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:02:46.488 [DEBUG] [Thread-126078] [transport.py] [_log()] starting thread (client mode): 0x9fd23520
2025-12-04T00:02:46.488 [DEBUG] [Thread-126078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:02:46.506 [DEBUG] [Thread-126078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:02:46.506 [INFO] [Thread-126078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] client lang: <none>
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] server lang: <none>
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] kex follows: False
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:02:46.507 [DEBUG] [Thread-126078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:02:46.508 [DEBUG] [Thread-126078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:02:46.508 [DEBUG] [Thread-126078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:02:46.508 [DEBUG] [Thread-126078] [transport.py] [_log()] Compression: none
2025-12-04T00:02:46.508 [DEBUG] [Thread-126078] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:02:46.518 [DEBUG] [Thread-126078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:02:46.518 [DEBUG] [Thread-126078] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:02:46.518 [DEBUG] [Thread-126078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:02:46.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:02:46.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:02:46.519 [DEBUG] [Thread-126078] [transport.py] [_log()] userauth is OK
2025-12-04T00:02:46.519 [DEBUG] [Thread-126078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:02:46.519 [DEBUG] [Thread-126078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:02:46.519 [DEBUG] [Thread-126078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:02:46.519 [DEBUG] [Thread-126078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:02:46.530 [INFO] [Thread-126078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:02:46.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:02:47.145 [DEBUG] [Thread-126078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:02:47.145 [DEBUG] [Thread-126078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:02:47.145 [DEBUG] [Thread-126078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:02:47.186 [DEBUG] [Thread-126078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:02:47.186 [DEBUG] [Thread-126078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:02:47.188 [DEBUG] [Thread-126078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:02:47.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:02:47.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:02:47.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:02:47.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:02:47.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:02:47.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:02:47.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.918450 -999.00  +14.20  17.43     49   +3.70 1 1 1 1 1     0    0 8.34 -134.72 ZNESW 21.3 17.4 145.8 26.2 14.8 -25.0 14.8 -24.6 14.5 -22.9 14.8 -23.8
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.918450
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:02:47.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:02:16', tmtdew=12.18, humidity=43.61, cloud=0.0, wind=22.97, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:02:17', seeing=1.66, atlas_timestamp='2025-12-03T22:02:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06225000000000058, 0.008250000000000313, -0.055749999999999744, -0.027499999999999858, 0.01249999999999929, -0.012749999999998707, -0.06850000000000023, -0.10975000000000001, -0.020500000000000185, 0.006999999999999673, 0.032249999999999446, -0.038000000000000256, 0.05000000000000071, -0.008750000000000924, -0.18200000000000038, -0.12400000000000055, 0.0007500000000000284, -0.03449999999999953, -0.030000000000001137, 0.004249999999998977, 0.011999999999998678, -0.028250000000001663, -0.15174999999999983, -0.1042500000000004, -0.051000000000000156, -0.022999999999999687, -0.08624999999999972, -0.05649999999999977, 0.07000000000000028, 0.10400000000000098, -0.2629999999999981, -0.08000000000000007, -0.01675000000000182], zp_timestamp='2025-12-03T21:59:00')
2025-12-04T00:02:47.204 [DEBUG] [Thread-126078] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:02:47.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:02:47.296 [DEBUG] [Thread-126081] [transport.py] [_log()] starting thread (client mode): 0xa51cd030
2025-12-04T00:02:47.296 [DEBUG] [Thread-126081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:02:47.310 [DEBUG] [Thread-126081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:02:47.310 [INFO] [Thread-126081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] client lang: <none>
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] server lang: <none>
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] kex follows: False
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] Compression: none
2025-12-04T00:02:47.318 [DEBUG] [Thread-126081] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:02:47.374 [DEBUG] [Thread-126081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:02:47.374 [DEBUG] [Thread-126081] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:02:47.375 [DEBUG] [Thread-126081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:02:47.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:02:47.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:02:47.432 [DEBUG] [Thread-126081] [transport.py] [_log()] userauth is OK
2025-12-04T00:02:47.433 [DEBUG] [Thread-126081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:02:47.433 [DEBUG] [Thread-126081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:02:47.433 [DEBUG] [Thread-126081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:02:47.433 [DEBUG] [Thread-126081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:02:47.446 [INFO] [Thread-126081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:02:47.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:02:47.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:02:48.297 [DEBUG] [Thread-126081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:02:48.297 [DEBUG] [Thread-126081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:02:48.345 [DEBUG] [Thread-126081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:02:48.345 [DEBUG] [Thread-126081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:02:48.354 [DEBUG] [Thread-126081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:02:48.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:02:48.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:02:48.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:02:48.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:02:48.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:02:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:02:48.388 [DEBUG] [Thread-126081] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:02:49.820 [DEBUG] [Thread-126083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:02:57.190 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:04.871 [DEBUG] [Thread-126084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:17.599 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:18.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:03:18.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:03:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:03:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 2, 48), 12.18, 43.61, 0.0, 22.43, 14.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:03:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:02:48
2025-12-04T00:03:19.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:03:19.376 [DEBUG] [Thread-126085] [transport.py] [_log()] starting thread (client mode): 0xa2746c20
2025-12-04T00:03:19.376 [DEBUG] [Thread-126085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:03:19.390 [DEBUG] [Thread-126085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:03:19.390 [INFO] [Thread-126085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] client lang: <none>
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] server lang: <none>
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] kex follows: False
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] Compression: none
2025-12-04T00:03:19.393 [DEBUG] [Thread-126085] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:03:19.409 [DEBUG] [Thread-126085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:03:19.409 [DEBUG] [Thread-126085] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:03:19.410 [DEBUG] [Thread-126085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:03:19.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:03:19.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:03:19.412 [DEBUG] [Thread-126085] [transport.py] [_log()] userauth is OK
2025-12-04T00:03:19.412 [DEBUG] [Thread-126085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:03:19.412 [DEBUG] [Thread-126085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:03:19.412 [DEBUG] [Thread-126085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:03:19.412 [DEBUG] [Thread-126085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:03:19.425 [INFO] [Thread-126085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:03:19.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:03:19.906 [DEBUG] [Thread-126087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:20.005 [DEBUG] [Thread-126085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:03:20.006 [DEBUG] [Thread-126085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:03:20.006 [DEBUG] [Thread-126085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:03:20.047 [DEBUG] [Thread-126085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:03:20.047 [DEBUG] [Thread-126085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:03:20.050 [DEBUG] [Thread-126085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:03:20.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:03:20.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:03:20.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:03:20.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:03:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:03:20.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:03:20.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:03:20.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:03:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:03:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.918798 -999.00  +14.30  20.49     49   +3.70 1 1 1 1 1     0    0 8.28 -135.39 ZNESW 21.8 20.5 146.8 24.1 14.8 -24.9 14.7 -24.5 14.5 -22.8 14.7 -23.7
2025-12-04T00:03:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:03:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:03:20.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.918798
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:03:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:02:48', tmtdew=12.18, humidity=43.61, cloud=0.0, wind=22.43, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:02:49', seeing=1.66, atlas_timestamp='2025-12-03T22:03:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:03:20.068 [DEBUG] [Thread-126085] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:03:20.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:03:20.174 [DEBUG] [Thread-126089] [transport.py] [_log()] starting thread (client mode): 0x9fd20340
2025-12-04T00:03:20.174 [DEBUG] [Thread-126089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:03:20.191 [DEBUG] [Thread-126089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:03:20.191 [INFO] [Thread-126089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] client lang: <none>
2025-12-04T00:03:20.199 [DEBUG] [Thread-126089] [transport.py] [_log()] server lang: <none>
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] kex follows: False
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] Compression: none
2025-12-04T00:03:20.200 [DEBUG] [Thread-126089] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:03:20.258 [DEBUG] [Thread-126089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:03:20.259 [DEBUG] [Thread-126089] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:03:20.259 [DEBUG] [Thread-126089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:03:20.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:03:20.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:03:20.315 [DEBUG] [Thread-126089] [transport.py] [_log()] userauth is OK
2025-12-04T00:03:20.315 [DEBUG] [Thread-126089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:03:20.315 [DEBUG] [Thread-126089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:03:20.315 [DEBUG] [Thread-126089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:03:20.315 [DEBUG] [Thread-126089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:03:20.334 [INFO] [Thread-126089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:03:20.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:03:20.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:03:21.177 [DEBUG] [Thread-126089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:03:21.177 [DEBUG] [Thread-126089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:03:21.229 [DEBUG] [Thread-126089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:03:21.229 [DEBUG] [Thread-126089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:03:21.239 [DEBUG] [Thread-126089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:03:21.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:03:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:03:21.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:03:21.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:03:21.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:03:21.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:03:21.271 [DEBUG] [Thread-126089] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:03:22.347 [DEBUG] [Thread-126091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:22.862 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:22.863 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:34.940 [DEBUG] [Thread-126092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:38.018 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:50.007 [DEBUG] [Thread-126093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:03:51.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:03:51.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:03:51.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:03:51.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 3, 20), 12.17, 43.63, 0.0, 22.64, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:03:51.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:03:20
2025-12-04T00:03:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:03:52.241 [DEBUG] [Thread-126094] [transport.py] [_log()] starting thread (client mode): 0xa27a0d00
2025-12-04T00:03:52.241 [DEBUG] [Thread-126094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:03:52.260 [DEBUG] [Thread-126094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:03:52.260 [INFO] [Thread-126094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:03:52.263 [DEBUG] [Thread-126094] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:03:52.263 [DEBUG] [Thread-126094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] client lang: <none>
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] server lang: <none>
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] kex follows: False
2025-12-04T00:03:52.264 [DEBUG] [Thread-126094] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] Compression: none
2025-12-04T00:03:52.265 [DEBUG] [Thread-126094] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:03:52.283 [DEBUG] [Thread-126094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:03:52.283 [DEBUG] [Thread-126094] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:03:52.284 [DEBUG] [Thread-126094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:03:52.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:03:52.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:03:52.285 [DEBUG] [Thread-126094] [transport.py] [_log()] userauth is OK
2025-12-04T00:03:52.286 [DEBUG] [Thread-126094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:03:52.286 [DEBUG] [Thread-126094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:03:52.286 [DEBUG] [Thread-126094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:03:52.286 [DEBUG] [Thread-126094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:03:52.310 [INFO] [Thread-126094] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:03:52.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:03:52.916 [DEBUG] [Thread-126094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:03:52.917 [DEBUG] [Thread-126094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:03:52.917 [DEBUG] [Thread-126094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:03:52.958 [DEBUG] [Thread-126094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:03:52.958 [DEBUG] [Thread-126094] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:03:52.961 [DEBUG] [Thread-126094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:03:52.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:03:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:03:52.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:03:52.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:03:52.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:03:52.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:03:52.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:03:52.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:03:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:03:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.918798 -999.00  +14.30  20.49     49   +3.70 1 1 1 1 1     0    0 8.28 -135.39 ZNESW 21.8 20.5 146.8 24.1 14.8 -24.9 14.7 -24.5 14.5 -22.8 14.7 -23.7
2025-12-04T00:03:52.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:03:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:03:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.918798
2025-12-04T00:03:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:03:52.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:03:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:03:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:03:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:03:52.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:03:20', tmtdew=12.17, humidity=43.63, cloud=0.0, wind=22.64, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:03:21', seeing=1.48, atlas_timestamp='2025-12-03T22:03:04.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:03:52.986 [DEBUG] [Thread-126094] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:03:53.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:03:53.091 [DEBUG] [Thread-126097] [transport.py] [_log()] starting thread (client mode): 0xa27a17b0
2025-12-04T00:03:53.092 [DEBUG] [Thread-126097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:03:53.106 [DEBUG] [Thread-126097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:03:53.106 [INFO] [Thread-126097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:03:53.114 [DEBUG] [Thread-126097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] client lang: <none>
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] server lang: <none>
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] kex follows: False
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] Compression: none
2025-12-04T00:03:53.115 [DEBUG] [Thread-126097] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:03:53.173 [DEBUG] [Thread-126097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:03:53.174 [DEBUG] [Thread-126097] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:03:53.174 [DEBUG] [Thread-126097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:03:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:03:53.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:03:53.229 [DEBUG] [Thread-126097] [transport.py] [_log()] userauth is OK
2025-12-04T00:03:53.229 [DEBUG] [Thread-126097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:03:53.229 [DEBUG] [Thread-126097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:03:53.229 [DEBUG] [Thread-126097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:03:53.229 [DEBUG] [Thread-126097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:03:53.253 [INFO] [Thread-126097] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:03:53.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:03:53.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:03:54.086 [DEBUG] [Thread-126097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:03:54.086 [DEBUG] [Thread-126097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:03:54.134 [DEBUG] [Thread-126097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:03:54.134 [DEBUG] [Thread-126097] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:03:54.142 [DEBUG] [Thread-126097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:03:54.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:03:54.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:03:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:03:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:03:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:03:54.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:03:54.174 [DEBUG] [Thread-126097] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:03:58.414 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:05.040 [DEBUG] [Thread-126099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:18.880 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:20.099 [DEBUG] [Thread-126100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:22.415 [DEBUG] [Thread-126101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:23.063 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:23.064 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:24.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:04:24.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:04:24.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:04:24.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 3, 53), 12.06, 44.33, 0.0, 23.13, 14.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:04:24.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:03:53
2025-12-04T00:04:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:04:25.155 [DEBUG] [Thread-126102] [transport.py] [_log()] starting thread (client mode): 0xa7bd3f70
2025-12-04T00:04:25.155 [DEBUG] [Thread-126102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:04:25.174 [DEBUG] [Thread-126102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:04:25.174 [INFO] [Thread-126102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:04:25.177 [DEBUG] [Thread-126102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] client lang: <none>
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] server lang: <none>
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] kex follows: False
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:04:25.178 [DEBUG] [Thread-126102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:04:25.179 [DEBUG] [Thread-126102] [transport.py] [_log()] Compression: none
2025-12-04T00:04:25.179 [DEBUG] [Thread-126102] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:04:25.198 [DEBUG] [Thread-126102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:04:25.198 [DEBUG] [Thread-126102] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:04:25.199 [DEBUG] [Thread-126102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:04:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:04:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:04:25.200 [DEBUG] [Thread-126102] [transport.py] [_log()] userauth is OK
2025-12-04T00:04:25.201 [DEBUG] [Thread-126102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:04:25.201 [DEBUG] [Thread-126102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:04:25.201 [DEBUG] [Thread-126102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:04:25.201 [DEBUG] [Thread-126102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:04:25.218 [INFO] [Thread-126102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:04:25.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:04:25.854 [DEBUG] [Thread-126102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:04:25.854 [DEBUG] [Thread-126102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:04:25.854 [DEBUG] [Thread-126102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:04:25.894 [DEBUG] [Thread-126102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:04:25.894 [DEBUG] [Thread-126102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:04:25.897 [DEBUG] [Thread-126102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:04:25.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:04:25.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:04:25.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:04:25.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:04:25.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:04:25.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:04:25.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.919145 -999.00  +14.30  19.91     49   +3.70 1 1 1 1 1     0    0 7.86 -146.60 ZNESW 17.2 19.9 144.6 26.0 14.8 -25.0 14.7 -24.5 14.5 -22.9 14.7 -23.7
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.919145
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:04:25.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:03:53', tmtdew=12.06, humidity=44.33, cloud=0.0, wind=23.13, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:03:53', seeing=1.44, atlas_timestamp='2025-12-03T22:03:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:04:25.914 [DEBUG] [Thread-126102] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:04:25.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:04:26.008 [DEBUG] [Thread-126105] [transport.py] [_log()] starting thread (client mode): 0xa7bd33d0
2025-12-04T00:04:26.008 [DEBUG] [Thread-126105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:04:26.022 [DEBUG] [Thread-126105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:04:26.022 [INFO] [Thread-126105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:04:26.029 [DEBUG] [Thread-126105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] client lang: <none>
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] server lang: <none>
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] kex follows: False
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] Compression: none
2025-12-04T00:04:26.030 [DEBUG] [Thread-126105] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:04:26.087 [DEBUG] [Thread-126105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:04:26.087 [DEBUG] [Thread-126105] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:04:26.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:04:26.087 [DEBUG] [Thread-126105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:04:26.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:04:26.144 [DEBUG] [Thread-126105] [transport.py] [_log()] userauth is OK
2025-12-04T00:04:26.144 [DEBUG] [Thread-126105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:04:26.144 [DEBUG] [Thread-126105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:04:26.144 [DEBUG] [Thread-126105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:04:26.144 [DEBUG] [Thread-126105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:04:26.158 [INFO] [Thread-126105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:04:26.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:04:26.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:04:26.982 [DEBUG] [Thread-126105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:04:26.983 [DEBUG] [Thread-126105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:04:27.032 [DEBUG] [Thread-126105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:04:27.032 [DEBUG] [Thread-126105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:04:27.040 [DEBUG] [Thread-126105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:04:27.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:04:27.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:04:27.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:04:27.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:04:27.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:04:27.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:04:27.078 [DEBUG] [Thread-126105] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:04:35.136 [DEBUG] [Thread-126107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:39.305 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:50.193 [DEBUG] [Thread-126108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:04:57.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:04:57.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:04:57.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:04:57.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 4, 25), 12.06, 44.31, 0.0, 23.31, 14.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:04:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:04:25
2025-12-04T00:04:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:04:58.123 [DEBUG] [Thread-126109] [transport.py] [_log()] starting thread (client mode): 0xa2778fa0
2025-12-04T00:04:58.123 [DEBUG] [Thread-126109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:04:58.144 [DEBUG] [Thread-126109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:04:58.144 [INFO] [Thread-126109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:04:58.147 [DEBUG] [Thread-126109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:04:58.147 [DEBUG] [Thread-126109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:04:58.147 [DEBUG] [Thread-126109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:04:58.147 [DEBUG] [Thread-126109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:58.147 [DEBUG] [Thread-126109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] client lang: <none>
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] server lang: <none>
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] kex follows: False
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] Compression: none
2025-12-04T00:04:58.148 [DEBUG] [Thread-126109] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:04:58.166 [DEBUG] [Thread-126109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:04:58.166 [DEBUG] [Thread-126109] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:04:58.167 [DEBUG] [Thread-126109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:04:58.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:04:58.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:04:58.167 [DEBUG] [Thread-126109] [transport.py] [_log()] userauth is OK
2025-12-04T00:04:58.167 [DEBUG] [Thread-126109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:04:58.168 [DEBUG] [Thread-126109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:04:58.168 [DEBUG] [Thread-126109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:04:58.168 [DEBUG] [Thread-126109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:04:58.183 [INFO] [Thread-126109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:04:58.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:04:58.774 [DEBUG] [Thread-126109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:04:58.774 [DEBUG] [Thread-126109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:04:58.774 [DEBUG] [Thread-126109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:04:58.816 [DEBUG] [Thread-126109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:04:58.816 [DEBUG] [Thread-126109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:04:58.818 [DEBUG] [Thread-126109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:04:58.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:04:58.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:04:58.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:04:58.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:04:58.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:04:58.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:04:58.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:04:58.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.919492 -999.00  +14.30  16.40     49   +3.70 1 1 1 1 1     0    0 7.68 -147.71 ZNESW 17.4 16.4 136.0 22.1 14.8 -24.9 14.7 -24.5 14.4 -22.9 14.8 -23.7
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.919492
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:04:58.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:04:25', tmtdew=12.06, humidity=44.31, cloud=0.0, wind=23.31, temperature=14.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:04:25', seeing=1.66, atlas_timestamp='2025-12-03T22:04:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:04:58.836 [DEBUG] [Thread-126109] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:04:58.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:04:58.928 [DEBUG] [Thread-126112] [transport.py] [_log()] starting thread (client mode): 0xa27a1b10
2025-12-04T00:04:58.928 [DEBUG] [Thread-126112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:04:58.943 [DEBUG] [Thread-126112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:04:58.944 [INFO] [Thread-126112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] client lang: <none>
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] server lang: <none>
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] kex follows: False
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:04:58.951 [DEBUG] [Thread-126112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:04:58.952 [DEBUG] [Thread-126112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:04:58.952 [DEBUG] [Thread-126112] [transport.py] [_log()] Compression: none
2025-12-04T00:04:58.952 [DEBUG] [Thread-126112] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:04:59.009 [DEBUG] [Thread-126112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:04:59.009 [DEBUG] [Thread-126112] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:04:59.009 [DEBUG] [Thread-126112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:04:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:04:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:04:59.067 [DEBUG] [Thread-126112] [transport.py] [_log()] userauth is OK
2025-12-04T00:04:59.067 [DEBUG] [Thread-126112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:04:59.067 [DEBUG] [Thread-126112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:04:59.067 [DEBUG] [Thread-126112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:04:59.067 [DEBUG] [Thread-126112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:04:59.080 [INFO] [Thread-126112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:04:59.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:04:59.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:04:59.903 [DEBUG] [Thread-126112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:04:59.903 [DEBUG] [Thread-126112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:04:59.952 [DEBUG] [Thread-126112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:04:59.952 [DEBUG] [Thread-126112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:04:59.961 [DEBUG] [Thread-126112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:04:59.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:04:59.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:04:59.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:04:59.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:04:59.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:04:59.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:04:59.996 [DEBUG] [Thread-126112] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:05:00.026 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:05.229 [DEBUG] [Thread-126114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:20.279 [DEBUG] [Thread-126115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:20.420 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:22.471 [DEBUG] [Thread-126116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:23.266 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:23.267 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:30.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:05:30.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:05:30.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:05:30.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 4, 57), 11.97, 44.43, 0.0, 22.83, 14.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:05:30.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:04:57
2025-12-04T00:05:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:05:31.032 [DEBUG] [Thread-126117] [transport.py] [_log()] starting thread (client mode): 0xa7bd1810
2025-12-04T00:05:31.032 [DEBUG] [Thread-126117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:05:31.051 [DEBUG] [Thread-126117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:05:31.052 [INFO] [Thread-126117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:05:31.054 [DEBUG] [Thread-126117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] client lang: <none>
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] server lang: <none>
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] kex follows: False
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] Compression: none
2025-12-04T00:05:31.055 [DEBUG] [Thread-126117] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:05:31.069 [DEBUG] [Thread-126117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:05:31.069 [DEBUG] [Thread-126117] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:05:31.069 [DEBUG] [Thread-126117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:05:31.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:05:31.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:05:31.070 [DEBUG] [Thread-126117] [transport.py] [_log()] userauth is OK
2025-12-04T00:05:31.070 [DEBUG] [Thread-126117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:05:31.070 [DEBUG] [Thread-126117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:05:31.070 [DEBUG] [Thread-126117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:05:31.070 [DEBUG] [Thread-126117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:05:31.085 [INFO] [Thread-126117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:05:31.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:05:31.692 [DEBUG] [Thread-126117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:05:31.692 [DEBUG] [Thread-126117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:05:31.693 [DEBUG] [Thread-126117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:05:31.734 [DEBUG] [Thread-126117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:05:31.734 [DEBUG] [Thread-126117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:05:31.737 [DEBUG] [Thread-126117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:05:31.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:05:31.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:05:31.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:05:31.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:05:31.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:05:31.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:05:31.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.919839 -999.00  +14.20  14.75     49   +3.80 1 1 1 1 1     0    0 6.97 -161.57 ZNESW 22.0 14.8 141.6 24.0 14.8 -24.9 14.7 -24.5 14.5 -22.9 14.8 -23.7
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:05:31.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.919839
2025-12-04T00:05:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:05:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:05:31.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:05:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:05:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:05:31.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:04:57', tmtdew=11.97, humidity=44.43, cloud=0.0, wind=22.83, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:05:29', seeing=1.5, atlas_timestamp='2025-12-03T22:04:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:05:31.761 [DEBUG] [Thread-126117] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:05:31.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:05:31.864 [DEBUG] [Thread-126120] [transport.py] [_log()] starting thread (client mode): 0xa51cc280
2025-12-04T00:05:31.864 [DEBUG] [Thread-126120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:05:31.879 [DEBUG] [Thread-126120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:05:31.879 [INFO] [Thread-126120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:05:31.887 [DEBUG] [Thread-126120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] client lang: <none>
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] server lang: <none>
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] kex follows: False
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:05:31.888 [DEBUG] [Thread-126120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:05:31.889 [DEBUG] [Thread-126120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:05:31.889 [DEBUG] [Thread-126120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:05:31.889 [DEBUG] [Thread-126120] [transport.py] [_log()] Compression: none
2025-12-04T00:05:31.889 [DEBUG] [Thread-126120] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:05:31.946 [DEBUG] [Thread-126120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:05:31.947 [DEBUG] [Thread-126120] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:05:31.947 [DEBUG] [Thread-126120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:05:31.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:05:31.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:05:32.005 [DEBUG] [Thread-126120] [transport.py] [_log()] userauth is OK
2025-12-04T00:05:32.005 [DEBUG] [Thread-126120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:05:32.005 [DEBUG] [Thread-126120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:05:32.005 [DEBUG] [Thread-126120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:05:32.005 [DEBUG] [Thread-126120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:05:32.026 [INFO] [Thread-126120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:05:32.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:05:32.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:05:32.833 [DEBUG] [Thread-126120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:05:32.834 [DEBUG] [Thread-126120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:05:32.882 [DEBUG] [Thread-126120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:05:32.882 [DEBUG] [Thread-126120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:05:32.891 [DEBUG] [Thread-126120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:05:32.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:05:32.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:05:32.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:05:32.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:05:32.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:05:32.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:05:32.925 [DEBUG] [Thread-126120] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:05:35.311 [DEBUG] [Thread-126122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:40.811 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:05:50.368 [DEBUG] [Thread-126123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:01.233 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:06:02.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:06:02.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:06:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 5, 29), 11.93, 44.54, 0.0, 23.59, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:06:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:05:29
2025-12-04T00:06:03.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:06:03.927 [DEBUG] [Thread-126124] [transport.py] [_log()] starting thread (client mode): 0xa51cc8e0
2025-12-04T00:06:03.927 [DEBUG] [Thread-126124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:06:03.946 [DEBUG] [Thread-126124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:06:03.946 [INFO] [Thread-126124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:06:03.947 [DEBUG] [Thread-126124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:06:03.947 [DEBUG] [Thread-126124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:06:03.947 [DEBUG] [Thread-126124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] client lang: <none>
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] server lang: <none>
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] kex follows: False
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:06:03.948 [DEBUG] [Thread-126124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:06:03.949 [DEBUG] [Thread-126124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:06:03.949 [DEBUG] [Thread-126124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:06:03.949 [DEBUG] [Thread-126124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:06:03.949 [DEBUG] [Thread-126124] [transport.py] [_log()] Compression: none
2025-12-04T00:06:03.949 [DEBUG] [Thread-126124] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:06:03.966 [DEBUG] [Thread-126124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:06:03.967 [DEBUG] [Thread-126124] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:06:03.967 [DEBUG] [Thread-126124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:06:03.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:06:03.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:06:03.969 [DEBUG] [Thread-126124] [transport.py] [_log()] userauth is OK
2025-12-04T00:06:03.969 [DEBUG] [Thread-126124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:06:03.969 [DEBUG] [Thread-126124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:06:03.969 [DEBUG] [Thread-126124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:06:03.969 [DEBUG] [Thread-126124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:06:03.992 [INFO] [Thread-126124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:06:03.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:06:04.627 [DEBUG] [Thread-126124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:06:04.627 [DEBUG] [Thread-126124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:06:04.628 [DEBUG] [Thread-126124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:06:04.669 [DEBUG] [Thread-126124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:06:04.669 [DEBUG] [Thread-126124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:06:04.672 [DEBUG] [Thread-126124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:06:04.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:06:04.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:06:04.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:06:04.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:06:04.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:06:04.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:06:04.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:06:04.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:06:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:06:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.920534 -999.00  +14.20  18.35     49   +3.80 1 1 1 1 1     0    0 7.01 -161.40 ZNESW 19.7 18.4 144.8 22.9 14.7 -24.9 14.7 -24.5 14.4 -22.9 14.7 -23.7
2025-12-04T00:06:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:06:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:06:04.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.920534
2025-12-04T00:06:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:06:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:06:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:06:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:06:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:06:04.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:05:29', tmtdew=11.93, humidity=44.54, cloud=0.0, wind=23.59, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:06:01', seeing=1.64, atlas_timestamp='2025-12-03T22:05:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05325000000000024, 0.005250000000000199, -0.013749999999999929, -0.022000000000002018, -0.009999999999999787, -0.038750000000000284, -0.018500000000001293, -0.13925000000000054, -0.053500000000001435, -0.013999999999999346, 0.016750000000000043, -0.053000000000000824, 0.0600000000000005, 0.04124999999999979, -0.2729999999999997, -0.10500000000000043, -0.007749999999999702, -0.0365000000000002, -0.025000000000000355, -0.021750000000000824, -0.0070000000000014495, -0.054250000000001464, -0.3517499999999991, -0.12424999999999997, -0.0015000000000000568, 0.022499999999999076, -0.0912500000000005, 0.002000000000000668, 0.12700000000000067, -0.0009999999999994458, -0.35449999999999804, -0.14499999999999957, 0.008250000000000313], zp_timestamp='2025-12-03T22:02:00')
2025-12-04T00:06:04.694 [DEBUG] [Thread-126124] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:06:04.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:06:04.799 [DEBUG] [Thread-126127] [transport.py] [_log()] starting thread (client mode): 0xa7bd2470
2025-12-04T00:06:04.799 [DEBUG] [Thread-126127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:06:04.815 [DEBUG] [Thread-126127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:06:04.815 [INFO] [Thread-126127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:06:04.822 [DEBUG] [Thread-126127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:06:04.822 [DEBUG] [Thread-126127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] client lang: <none>
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] server lang: <none>
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] kex follows: False
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] Compression: none
2025-12-04T00:06:04.823 [DEBUG] [Thread-126127] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:06:04.880 [DEBUG] [Thread-126127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:06:04.880 [DEBUG] [Thread-126127] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:06:04.881 [DEBUG] [Thread-126127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:06:04.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:06:04.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:06:04.937 [DEBUG] [Thread-126127] [transport.py] [_log()] userauth is OK
2025-12-04T00:06:04.937 [DEBUG] [Thread-126127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:06:04.937 [DEBUG] [Thread-126127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:06:04.937 [DEBUG] [Thread-126127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:06:04.937 [DEBUG] [Thread-126127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:06:04.955 [INFO] [Thread-126127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:06:04.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:06:04.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:06:05.402 [DEBUG] [Thread-126129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:05.787 [DEBUG] [Thread-126127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:06:05.787 [DEBUG] [Thread-126127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:06:05.835 [DEBUG] [Thread-126127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:06:05.835 [DEBUG] [Thread-126127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:06:05.844 [DEBUG] [Thread-126127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:06:05.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:06:05.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:06:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:06:05.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:06:05.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:06:05.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:06:05.879 [DEBUG] [Thread-126127] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:06:20.462 [DEBUG] [Thread-126130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:21.669 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:22.561 [DEBUG] [Thread-126131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:23.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:23.465 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:35.491 [DEBUG] [Thread-126132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:06:35.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:06:35.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:06:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 6, 33), 11.85, 44.66, 0.0, 22.0, 14.27, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:06:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:06:33
2025-12-04T00:06:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:06:36.919 [DEBUG] [Thread-126133] [transport.py] [_log()] starting thread (client mode): 0xa7bd3ee0
2025-12-04T00:06:36.919 [DEBUG] [Thread-126133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:06:36.939 [DEBUG] [Thread-126133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:06:36.939 [INFO] [Thread-126133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:06:36.942 [DEBUG] [Thread-126133] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:06:36.942 [DEBUG] [Thread-126133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:06:36.942 [DEBUG] [Thread-126133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:06:36.942 [DEBUG] [Thread-126133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:36.942 [DEBUG] [Thread-126133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] client lang: <none>
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] server lang: <none>
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] kex follows: False
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] Compression: none
2025-12-04T00:06:36.943 [DEBUG] [Thread-126133] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:06:36.961 [DEBUG] [Thread-126133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:06:36.961 [DEBUG] [Thread-126133] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:06:36.961 [DEBUG] [Thread-126133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:06:36.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:06:36.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:06:36.962 [DEBUG] [Thread-126133] [transport.py] [_log()] userauth is OK
2025-12-04T00:06:36.962 [DEBUG] [Thread-126133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:06:36.962 [DEBUG] [Thread-126133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:06:36.962 [DEBUG] [Thread-126133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:06:36.962 [DEBUG] [Thread-126133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:06:36.975 [INFO] [Thread-126133] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:06:36.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:06:37.613 [DEBUG] [Thread-126133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:06:37.613 [DEBUG] [Thread-126133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:06:37.613 [DEBUG] [Thread-126133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:06:37.654 [DEBUG] [Thread-126133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:06:37.654 [DEBUG] [Thread-126133] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:06:37.656 [DEBUG] [Thread-126133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:06:37.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:06:37.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:06:37.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:06:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:06:37.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:06:37.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:06:37.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:06:37.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:06:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:06:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.920880 -999.00  +14.20  19.60     49   +3.80 1 1 1 1 1     0    0 6.91 -163.70 ZNESW 17.3 19.6 140.2 22.0 14.7 -25.1 14.7 -24.4 14.4 -23.0 14.7 -23.6
2025-12-04T00:06:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.920880
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:06:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:06:33', tmtdew=11.85, humidity=44.66, cloud=0.0, wind=22.0, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:06:33', seeing=1.29, atlas_timestamp='2025-12-03T22:06:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:05:00')
2025-12-04T00:06:37.674 [DEBUG] [Thread-126133] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:06:37.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:06:37.766 [DEBUG] [Thread-126136] [transport.py] [_log()] starting thread (client mode): 0x9fd22a70
2025-12-04T00:06:37.766 [DEBUG] [Thread-126136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:06:37.782 [DEBUG] [Thread-126136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:06:37.782 [INFO] [Thread-126136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:06:37.789 [DEBUG] [Thread-126136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] client lang: <none>
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] server lang: <none>
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] kex follows: False
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] Compression: none
2025-12-04T00:06:37.790 [DEBUG] [Thread-126136] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:06:37.850 [DEBUG] [Thread-126136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:06:37.851 [DEBUG] [Thread-126136] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:06:37.851 [DEBUG] [Thread-126136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:06:37.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:06:37.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:06:37.908 [DEBUG] [Thread-126136] [transport.py] [_log()] userauth is OK
2025-12-04T00:06:37.908 [DEBUG] [Thread-126136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:06:37.908 [DEBUG] [Thread-126136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:06:37.908 [DEBUG] [Thread-126136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:06:37.908 [DEBUG] [Thread-126136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:06:37.923 [INFO] [Thread-126136] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:06:37.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:06:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:06:38.742 [DEBUG] [Thread-126136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:06:38.742 [DEBUG] [Thread-126136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:06:38.789 [DEBUG] [Thread-126136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:06:38.789 [DEBUG] [Thread-126136] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:06:38.800 [DEBUG] [Thread-126136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:06:38.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:06:38.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:06:38.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:06:38.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:06:38.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:06:38.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:06:38.831 [DEBUG] [Thread-126136] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:06:42.367 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:06:50.523 [DEBUG] [Thread-126138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:02.786 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:05.588 [DEBUG] [Thread-126139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:08.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:07:08.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:07:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:07:09.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 7, 5), 11.81, 44.78, 0.0, 23.56, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:07:09.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:07:05
2025-12-04T00:07:09.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:07:09.801 [DEBUG] [Thread-126140] [transport.py] [_log()] starting thread (client mode): 0x9fd20430
2025-12-04T00:07:09.801 [DEBUG] [Thread-126140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:07:09.821 [DEBUG] [Thread-126140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:07:09.821 [INFO] [Thread-126140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] client lang: <none>
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] server lang: <none>
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] kex follows: False
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:07:09.824 [DEBUG] [Thread-126140] [transport.py] [_log()] Compression: none
2025-12-04T00:07:09.825 [DEBUG] [Thread-126140] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:07:09.841 [DEBUG] [Thread-126140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:07:09.842 [DEBUG] [Thread-126140] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:07:09.842 [DEBUG] [Thread-126140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:07:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:07:09.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:07:09.844 [DEBUG] [Thread-126140] [transport.py] [_log()] userauth is OK
2025-12-04T00:07:09.844 [DEBUG] [Thread-126140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:07:09.844 [DEBUG] [Thread-126140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:07:09.844 [DEBUG] [Thread-126140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:07:09.844 [DEBUG] [Thread-126140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:07:09.867 [INFO] [Thread-126140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:07:09.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:07:10.480 [DEBUG] [Thread-126140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:07:10.480 [DEBUG] [Thread-126140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:07:10.480 [DEBUG] [Thread-126140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:07:10.521 [DEBUG] [Thread-126140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:07:10.521 [DEBUG] [Thread-126140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:07:10.523 [DEBUG] [Thread-126140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:07:10.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:07:10.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:07:10.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:07:10.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:07:10.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:07:10.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:07:10.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:07:10.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:07:10.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:07:10.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.921228 -999.00  +14.20  15.80     49   +3.80 1 1 1 1 1     0    0 6.87 -165.73 ZNESW 18.7 15.8 141.8 26.2 14.7 -24.9 14.6 -24.4 14.4 -22.8 14.7 -23.7
2025-12-04T00:07:10.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:07:10.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:07:10.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.921228
2025-12-04T00:07:10.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:07:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:07:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:07:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:07:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:07:10.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:07:05', tmtdew=11.81, humidity=44.78, cloud=0.0, wind=23.56, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:07:05', seeing=1.59, atlas_timestamp='2025-12-03T22:06:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:05:00')
2025-12-04T00:07:10.542 [DEBUG] [Thread-126140] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:07:10.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:07:10.650 [DEBUG] [Thread-126143] [transport.py] [_log()] starting thread (client mode): 0x9fd22530
2025-12-04T00:07:10.650 [DEBUG] [Thread-126143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:07:10.665 [DEBUG] [Thread-126143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:07:10.665 [INFO] [Thread-126143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] client lang: <none>
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] server lang: <none>
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] kex follows: False
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:07:10.673 [DEBUG] [Thread-126143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:07:10.674 [DEBUG] [Thread-126143] [transport.py] [_log()] Compression: none
2025-12-04T00:07:10.674 [DEBUG] [Thread-126143] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:07:10.732 [DEBUG] [Thread-126143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:07:10.733 [DEBUG] [Thread-126143] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:07:10.733 [DEBUG] [Thread-126143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:07:10.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:07:10.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:07:10.791 [DEBUG] [Thread-126143] [transport.py] [_log()] userauth is OK
2025-12-04T00:07:10.791 [DEBUG] [Thread-126143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:07:10.791 [DEBUG] [Thread-126143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:07:10.791 [DEBUG] [Thread-126143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:07:10.791 [DEBUG] [Thread-126143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:07:10.810 [INFO] [Thread-126143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:07:10.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:07:10.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:07:11.657 [DEBUG] [Thread-126143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:07:11.657 [DEBUG] [Thread-126143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:07:11.709 [DEBUG] [Thread-126143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:07:11.709 [DEBUG] [Thread-126143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:07:11.718 [DEBUG] [Thread-126143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:07:11.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:07:11.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:07:11.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:07:11.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:07:11.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:07:11.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:07:11.752 [DEBUG] [Thread-126143] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:07:20.623 [DEBUG] [Thread-126145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:22.631 [DEBUG] [Thread-126146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:23.191 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:23.672 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:23.673 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:35.681 [DEBUG] [Thread-126147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:07:41.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:07:41.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:07:41.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:07:42.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 7, 37), 11.8, 44.79, 0.0, 23.36, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:07:42.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:07:37
2025-12-04T00:07:42.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:07:42.724 [DEBUG] [Thread-126148] [transport.py] [_log()] starting thread (client mode): 0xa27a28c0
2025-12-04T00:07:42.724 [DEBUG] [Thread-126148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:07:42.744 [DEBUG] [Thread-126148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:07:42.744 [INFO] [Thread-126148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:07:42.747 [DEBUG] [Thread-126148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] client lang: <none>
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] server lang: <none>
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] kex follows: False
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] Compression: none
2025-12-04T00:07:42.748 [DEBUG] [Thread-126148] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:07:42.764 [DEBUG] [Thread-126148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:07:42.764 [DEBUG] [Thread-126148] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:07:42.765 [DEBUG] [Thread-126148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:07:42.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:07:42.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:07:42.766 [DEBUG] [Thread-126148] [transport.py] [_log()] userauth is OK
2025-12-04T00:07:42.766 [DEBUG] [Thread-126148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:07:42.767 [DEBUG] [Thread-126148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:07:42.767 [DEBUG] [Thread-126148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:07:42.767 [DEBUG] [Thread-126148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:07:42.790 [INFO] [Thread-126148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:07:42.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:07:43.384 [DEBUG] [Thread-126148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:07:43.385 [DEBUG] [Thread-126148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:07:43.385 [DEBUG] [Thread-126148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:07:43.426 [DEBUG] [Thread-126148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:07:43.426 [DEBUG] [Thread-126148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:07:43.429 [DEBUG] [Thread-126148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:07:43.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:07:43.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:07:43.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:07:43.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:07:43.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:07:43.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:07:43.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:07:43.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:07:43.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:07:43.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.921575 -999.00  +14.20  18.61     49   +3.90 1 1 1 1 1     0    0 6.88 -163.13 ZNESW 17.9 18.6 139.8 24.0 14.8 -24.9 14.6 -24.3 14.4 -22.8 14.7 -23.7
2025-12-04T00:07:43.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:07:43.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:07:43.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.921575
2025-12-04T00:07:43.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:07:43.451 [DEBUG] [Thread-126148] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:07:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:07:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:07:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:07:43.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:07:43.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:07:37', tmtdew=11.8, humidity=44.79, cloud=0.0, wind=23.36, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:07:37', seeing=2.24, atlas_timestamp='2025-12-03T22:07:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:05:00')
2025-12-04T00:07:43.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:07:43.554 [DEBUG] [Thread-126151] [transport.py] [_log()] starting thread (client mode): 0xa5161f60
2025-12-04T00:07:43.554 [DEBUG] [Thread-126151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:07:43.571 [DEBUG] [Thread-126151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:07:43.572 [INFO] [Thread-126151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:07:43.579 [DEBUG] [Thread-126151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:07:43.579 [DEBUG] [Thread-126151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:07:43.579 [DEBUG] [Thread-126151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:07:43.579 [DEBUG] [Thread-126151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:43.579 [DEBUG] [Thread-126151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] client lang: <none>
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] server lang: <none>
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] kex follows: False
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:07:43.580 [DEBUG] [Thread-126151] [transport.py] [_log()] Compression: none
2025-12-04T00:07:43.581 [DEBUG] [Thread-126151] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:07:43.638 [DEBUG] [Thread-126151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:07:43.638 [DEBUG] [Thread-126151] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:07:43.639 [DEBUG] [Thread-126151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:07:43.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:07:43.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:07:43.694 [DEBUG] [Thread-126151] [transport.py] [_log()] userauth is OK
2025-12-04T00:07:43.694 [DEBUG] [Thread-126151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:07:43.694 [DEBUG] [Thread-126151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:07:43.694 [DEBUG] [Thread-126151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:07:43.694 [DEBUG] [Thread-126151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:07:43.714 [INFO] [Thread-126151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:07:43.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:07:43.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:07:44.539 [DEBUG] [Thread-126151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:07:44.539 [DEBUG] [Thread-126151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:07:44.587 [DEBUG] [Thread-126151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:07:44.587 [DEBUG] [Thread-126151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:07:44.596 [DEBUG] [Thread-126151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:07:44.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:07:44.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:07:44.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:07:44.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:07:44.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:07:44.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:07:44.630 [DEBUG] [Thread-126151] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:07:50.717 [DEBUG] [Thread-126153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:05.772 [DEBUG] [Thread-126154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:14.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:08:14.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:08:14.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:08:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 8, 9), 11.8, 44.79, 0.0, 22.76, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:08:15.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:08:09
2025-12-04T00:08:15.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:08:15.595 [DEBUG] [Thread-126155] [transport.py] [_log()] starting thread (client mode): 0x9fd23b80
2025-12-04T00:08:15.595 [DEBUG] [Thread-126155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:08:15.615 [DEBUG] [Thread-126155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:08:15.616 [INFO] [Thread-126155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] client lang: <none>
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] server lang: <none>
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] kex follows: False
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:08:15.619 [DEBUG] [Thread-126155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:08:15.620 [DEBUG] [Thread-126155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:08:15.620 [DEBUG] [Thread-126155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:08:15.620 [DEBUG] [Thread-126155] [transport.py] [_log()] Compression: none
2025-12-04T00:08:15.620 [DEBUG] [Thread-126155] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:08:15.639 [DEBUG] [Thread-126155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:08:15.640 [DEBUG] [Thread-126155] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:08:15.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:08:15.641 [DEBUG] [Thread-126155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:08:15.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:08:15.684 [DEBUG] [Thread-126155] [transport.py] [_log()] userauth is OK
2025-12-04T00:08:15.685 [DEBUG] [Thread-126155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:08:15.685 [DEBUG] [Thread-126155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:08:15.685 [DEBUG] [Thread-126155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:08:15.685 [DEBUG] [Thread-126155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:08:15.717 [INFO] [Thread-126155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:08:15.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:08:16.364 [DEBUG] [Thread-126155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:08:16.364 [DEBUG] [Thread-126155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:08:16.364 [DEBUG] [Thread-126155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:08:16.405 [DEBUG] [Thread-126155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:08:16.405 [DEBUG] [Thread-126155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:08:16.408 [DEBUG] [Thread-126155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:08:16.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:08:16.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:08:16.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:08:16.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:08:16.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:08:16.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:08:16.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:08:16.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:08:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:08:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.921923 -999.00  +14.20  17.48     49   +3.90 1 1 1 1 1     0    0 6.88 -164.55 ZNESW 15.3 17.5 140.2 20.1 14.7 -24.8 14.6 -24.3 14.4 -22.9 14.7 -23.8
2025-12-04T00:08:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:08:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:08:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.921923
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:08:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:08:09', tmtdew=11.8, humidity=44.79, cloud=0.0, wind=22.76, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:08:09', seeing=2.57, atlas_timestamp='2025-12-03T22:07:34.147', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:05:00')
2025-12-04T00:08:16.434 [DEBUG] [Thread-126155] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:08:16.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:08:16.536 [DEBUG] [Thread-126158] [transport.py] [_log()] starting thread (client mode): 0x9fd22a70
2025-12-04T00:08:16.536 [DEBUG] [Thread-126158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:08:16.551 [DEBUG] [Thread-126158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:08:16.551 [INFO] [Thread-126158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:08:16.558 [DEBUG] [Thread-126158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:08:16.558 [DEBUG] [Thread-126158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:08:16.558 [DEBUG] [Thread-126158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:08:16.558 [DEBUG] [Thread-126158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] client lang: <none>
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] server lang: <none>
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] kex follows: False
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:08:16.559 [DEBUG] [Thread-126158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:08:16.560 [DEBUG] [Thread-126158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:08:16.560 [DEBUG] [Thread-126158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:08:16.560 [DEBUG] [Thread-126158] [transport.py] [_log()] Compression: none
2025-12-04T00:08:16.560 [DEBUG] [Thread-126158] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:08:16.618 [DEBUG] [Thread-126158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:08:16.619 [DEBUG] [Thread-126158] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:08:16.619 [DEBUG] [Thread-126158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:08:16.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:08:16.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:08:16.677 [DEBUG] [Thread-126158] [transport.py] [_log()] userauth is OK
2025-12-04T00:08:16.677 [DEBUG] [Thread-126158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:08:16.677 [DEBUG] [Thread-126158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:08:16.678 [DEBUG] [Thread-126158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:08:16.678 [DEBUG] [Thread-126158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:08:16.696 [INFO] [Thread-126158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:08:16.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:08:16.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:08:17.561 [DEBUG] [Thread-126158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:08:17.561 [DEBUG] [Thread-126158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:08:17.609 [DEBUG] [Thread-126158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:08:17.609 [DEBUG] [Thread-126158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:08:17.619 [DEBUG] [Thread-126158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:08:17.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:08:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:08:17.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:08:17.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:08:17.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:08:17.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:08:17.664 [DEBUG] [Thread-126158] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:08:20.808 [DEBUG] [Thread-126160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:22.704 [DEBUG] [Thread-126161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:23.878 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:23.879 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:35.861 [DEBUG] [Thread-126162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:08:47.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:08:47.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:08:47.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:08:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 8, 41), 11.78, 44.86, 0.0, 23.63, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:08:48.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:08:41
2025-12-04T00:08:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:08:48.648 [DEBUG] [Thread-126163] [transport.py] [_log()] starting thread (client mode): 0xa27a2380
2025-12-04T00:08:48.648 [DEBUG] [Thread-126163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:08:48.669 [DEBUG] [Thread-126163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:08:48.669 [INFO] [Thread-126163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] client lang: <none>
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] server lang: <none>
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] kex follows: False
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:08:48.673 [DEBUG] [Thread-126163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:08:48.674 [DEBUG] [Thread-126163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:08:48.674 [DEBUG] [Thread-126163] [transport.py] [_log()] Compression: none
2025-12-04T00:08:48.674 [DEBUG] [Thread-126163] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:08:48.691 [DEBUG] [Thread-126163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:08:48.692 [DEBUG] [Thread-126163] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:08:48.692 [DEBUG] [Thread-126163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:08:48.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:08:48.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:08:48.694 [DEBUG] [Thread-126163] [transport.py] [_log()] userauth is OK
2025-12-04T00:08:48.694 [DEBUG] [Thread-126163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:08:48.694 [DEBUG] [Thread-126163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:08:48.694 [DEBUG] [Thread-126163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:08:48.695 [DEBUG] [Thread-126163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:08:48.729 [INFO] [Thread-126163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:08:48.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:08:49.408 [DEBUG] [Thread-126163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:08:49.408 [DEBUG] [Thread-126163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:08:49.408 [DEBUG] [Thread-126163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:08:49.449 [DEBUG] [Thread-126163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:08:49.449 [DEBUG] [Thread-126163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:08:49.452 [DEBUG] [Thread-126163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:08:49.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:08:49.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:08:49.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:08:49.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:08:49.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:08:49.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:08:49.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.922270 -999.00  +14.20  14.82     49   +3.90 1 1 1 1 1     0    0 6.57 -167.97 ZNESW 13.6 14.8 140.8 23.4 14.7 -25.1 14.6 -24.4 14.4 -22.8 14.7 -23.6
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:08:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.922270
2025-12-04T00:08:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:08:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:08:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:08:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:08:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:08:49.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:08:41', tmtdew=11.78, humidity=44.86, cloud=0.0, wind=23.63, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:08:41', seeing=2.57, atlas_timestamp='2025-12-03T22:08:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:05:00')
2025-12-04T00:08:49.478 [DEBUG] [Thread-126163] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:08:49.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:08:49.581 [DEBUG] [Thread-126166] [transport.py] [_log()] starting thread (client mode): 0xa51b8400
2025-12-04T00:08:49.581 [DEBUG] [Thread-126166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:08:49.596 [DEBUG] [Thread-126166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:08:49.596 [INFO] [Thread-126166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:08:49.603 [DEBUG] [Thread-126166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:08:49.603 [DEBUG] [Thread-126166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:08:49.603 [DEBUG] [Thread-126166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] client lang: <none>
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] server lang: <none>
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] kex follows: False
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] Compression: none
2025-12-04T00:08:49.604 [DEBUG] [Thread-126166] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:08:49.659 [DEBUG] [Thread-126166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:08:49.660 [DEBUG] [Thread-126166] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:08:49.660 [DEBUG] [Thread-126166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:08:49.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:08:49.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:08:49.716 [DEBUG] [Thread-126166] [transport.py] [_log()] userauth is OK
2025-12-04T00:08:49.716 [DEBUG] [Thread-126166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:08:49.716 [DEBUG] [Thread-126166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:08:49.717 [DEBUG] [Thread-126166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:08:49.717 [DEBUG] [Thread-126166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:08:49.736 [INFO] [Thread-126166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:08:49.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:08:49.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:08:50.606 [DEBUG] [Thread-126166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:08:50.606 [DEBUG] [Thread-126166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:08:50.654 [DEBUG] [Thread-126166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:08:50.654 [DEBUG] [Thread-126166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:08:50.663 [DEBUG] [Thread-126166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:08:50.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:08:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:08:50.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:08:50.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:08:50.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:08:50.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:08:50.697 [DEBUG] [Thread-126166] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:08:50.899 [DEBUG] [Thread-126168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:05.966 [DEBUG] [Thread-126169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:09:20.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:09:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:09:21.000 [DEBUG] [Thread-126170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 9, 13), 11.76, 44.94, 0.0, 23.08, 14.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:09:21.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:09:13
2025-12-04T00:09:21.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:09:21.646 [DEBUG] [Thread-126171] [transport.py] [_log()] starting thread (client mode): 0xa51baaa0
2025-12-04T00:09:21.646 [DEBUG] [Thread-126171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:09:21.666 [DEBUG] [Thread-126171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:09:21.666 [INFO] [Thread-126171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] client lang: <none>
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] server lang: <none>
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] kex follows: False
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] Compression: none
2025-12-04T00:09:21.669 [DEBUG] [Thread-126171] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:09:21.687 [DEBUG] [Thread-126171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:09:21.688 [DEBUG] [Thread-126171] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:09:21.688 [DEBUG] [Thread-126171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:09:21.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:09:21.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:09:21.690 [DEBUG] [Thread-126171] [transport.py] [_log()] userauth is OK
2025-12-04T00:09:21.690 [DEBUG] [Thread-126171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:09:21.690 [DEBUG] [Thread-126171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:09:21.690 [DEBUG] [Thread-126171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:09:21.691 [DEBUG] [Thread-126171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:09:21.712 [INFO] [Thread-126171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:09:21.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:09:22.372 [DEBUG] [Thread-126171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:09:22.372 [DEBUG] [Thread-126171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:09:22.372 [DEBUG] [Thread-126171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:09:22.414 [DEBUG] [Thread-126171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:09:22.414 [DEBUG] [Thread-126171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:09:22.417 [DEBUG] [Thread-126171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:09:22.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:09:22.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:09:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:09:22.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:09:22.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:09:22.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:09:22.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.922964 -999.00  +14.20  18.68     50   +3.90 1 1 1 1 1     0    0 6.58 -171.81 ZNESW 16.3 18.7 140.4 22.6 14.7 -24.9 14.6 -24.4 14.3 -22.8 14.6 -23.7
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:09:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.922964
2025-12-04T00:09:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:09:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:09:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:09:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:09:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:09:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:09:13', tmtdew=11.76, humidity=44.94, cloud=0.0, wind=23.08, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:09:13', seeing=2.03, atlas_timestamp='2025-12-03T22:09:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:09:22.452 [DEBUG] [Thread-126171] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:09:22.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:09:22.557 [DEBUG] [Thread-126174] [transport.py] [_log()] starting thread (client mode): 0x9fd23550
2025-12-04T00:09:22.557 [DEBUG] [Thread-126174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:09:22.574 [DEBUG] [Thread-126174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:09:22.574 [INFO] [Thread-126174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] client lang: <none>
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] server lang: <none>
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] kex follows: False
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:09:22.583 [DEBUG] [Thread-126174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:09:22.584 [DEBUG] [Thread-126174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:09:22.584 [DEBUG] [Thread-126174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:09:22.584 [DEBUG] [Thread-126174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:09:22.584 [DEBUG] [Thread-126174] [transport.py] [_log()] Compression: none
2025-12-04T00:09:22.584 [DEBUG] [Thread-126174] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:09:22.647 [DEBUG] [Thread-126174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:09:22.648 [DEBUG] [Thread-126174] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:09:22.648 [DEBUG] [Thread-126174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:09:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:09:22.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:09:22.707 [DEBUG] [Thread-126174] [transport.py] [_log()] userauth is OK
2025-12-04T00:09:22.707 [DEBUG] [Thread-126174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:09:22.707 [DEBUG] [Thread-126174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:09:22.707 [DEBUG] [Thread-126174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:09:22.707 [DEBUG] [Thread-126174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:09:22.730 [INFO] [Thread-126174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:09:22.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:09:22.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:09:22.773 [DEBUG] [Thread-126176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:23.580 [DEBUG] [Thread-126174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:09:23.580 [DEBUG] [Thread-126174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:09:23.628 [DEBUG] [Thread-126174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:09:23.628 [DEBUG] [Thread-126174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:09:23.637 [DEBUG] [Thread-126174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:09:23.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:09:23.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:09:23.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:09:23.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:09:23.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:09:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:09:23.672 [DEBUG] [Thread-126174] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:09:24.079 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:24.080 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:36.034 [DEBUG] [Thread-126177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:51.088 [DEBUG] [Thread-126178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:09:53.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:09:53.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:09:53.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:09:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 9, 45), 11.69, 45.49, 0.0, 25.46, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:09:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:09:45
2025-12-04T00:09:54.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:09:54.632 [DEBUG] [Thread-126179] [transport.py] [_log()] starting thread (client mode): 0xa51624a0
2025-12-04T00:09:54.632 [DEBUG] [Thread-126179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:09:54.652 [DEBUG] [Thread-126179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:09:54.653 [INFO] [Thread-126179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:09:54.656 [DEBUG] [Thread-126179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:09:54.656 [DEBUG] [Thread-126179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:09:54.656 [DEBUG] [Thread-126179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:09:54.656 [DEBUG] [Thread-126179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] client lang: <none>
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] server lang: <none>
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] kex follows: False
2025-12-04T00:09:54.657 [DEBUG] [Thread-126179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] Compression: none
2025-12-04T00:09:54.658 [DEBUG] [Thread-126179] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:09:54.676 [DEBUG] [Thread-126179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:09:54.677 [DEBUG] [Thread-126179] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:09:54.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:09:54.677 [DEBUG] [Thread-126179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:09:54.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:09:54.679 [DEBUG] [Thread-126179] [transport.py] [_log()] userauth is OK
2025-12-04T00:09:54.679 [DEBUG] [Thread-126179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:09:54.680 [DEBUG] [Thread-126179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:09:54.680 [DEBUG] [Thread-126179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:09:54.680 [DEBUG] [Thread-126179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:09:54.702 [INFO] [Thread-126179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:09:54.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:09:55.330 [DEBUG] [Thread-126179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:09:55.330 [DEBUG] [Thread-126179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:09:55.331 [DEBUG] [Thread-126179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:09:55.371 [DEBUG] [Thread-126179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:09:55.371 [DEBUG] [Thread-126179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:09:55.374 [DEBUG] [Thread-126179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:09:55.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:09:55.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:09:55.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:09:55.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:09:55.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:09:55.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:09:55.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.923311 -999.00  +14.20  15.90     50   +3.90 1 1 1 1 1     0    0 6.75 -157.08 ZNESW 17.4 15.9 143.0 23.0 14.6 -24.8 14.6 -24.5 14.3 -22.8 14.7 -23.7
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:09:55.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.923311
2025-12-04T00:09:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:09:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:09:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:09:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:09:55.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:09:55.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:09:45', tmtdew=11.69, humidity=45.49, cloud=0.0, wind=25.46, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:09:45', seeing=2.03, atlas_timestamp='2025-12-03T22:09:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:09:55.398 [DEBUG] [Thread-126179] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:09:55.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:09:55.501 [DEBUG] [Thread-126182] [transport.py] [_log()] starting thread (client mode): 0xa2745300
2025-12-04T00:09:55.501 [DEBUG] [Thread-126182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:09:55.518 [DEBUG] [Thread-126182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:09:55.518 [INFO] [Thread-126182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:09:55.527 [DEBUG] [Thread-126182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:09:55.528 [DEBUG] [Thread-126182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] client lang: <none>
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] server lang: <none>
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] kex follows: False
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] Compression: none
2025-12-04T00:09:55.529 [DEBUG] [Thread-126182] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:09:55.589 [DEBUG] [Thread-126182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:09:55.589 [DEBUG] [Thread-126182] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:09:55.590 [DEBUG] [Thread-126182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:09:55.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:09:55.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:09:55.647 [DEBUG] [Thread-126182] [transport.py] [_log()] userauth is OK
2025-12-04T00:09:55.647 [DEBUG] [Thread-126182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:09:55.647 [DEBUG] [Thread-126182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:09:55.647 [DEBUG] [Thread-126182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:09:55.647 [DEBUG] [Thread-126182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:09:55.666 [INFO] [Thread-126182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:09:55.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:09:55.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:09:56.481 [DEBUG] [Thread-126182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:09:56.481 [DEBUG] [Thread-126182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:09:56.531 [DEBUG] [Thread-126182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:09:56.531 [DEBUG] [Thread-126182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:09:56.543 [DEBUG] [Thread-126182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:09:56.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:09:56.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:09:56.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:09:56.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:09:56.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:09:56.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:09:56.578 [DEBUG] [Thread-126182] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:10:06.121 [DEBUG] [Thread-126184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:21.185 [DEBUG] [Thread-126185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:22.839 [DEBUG] [Thread-126186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:24.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:24.279 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:26.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:10:26.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:10:26.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:10:27.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 10, 17), 11.67, 45.54, 0.0, 24.95, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:10:27.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:10:17
2025-12-04T00:10:27.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:10:27.611 [DEBUG] [Thread-126187] [transport.py] [_log()] starting thread (client mode): 0xa27a0e20
2025-12-04T00:10:27.611 [DEBUG] [Thread-126187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:10:27.630 [DEBUG] [Thread-126187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:10:27.631 [INFO] [Thread-126187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] client lang: <none>
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] server lang: <none>
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] kex follows: False
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] Compression: none
2025-12-04T00:10:27.634 [DEBUG] [Thread-126187] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:10:27.642 [DEBUG] [Thread-126187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:10:27.642 [DEBUG] [Thread-126187] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:10:27.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:10:27.642 [DEBUG] [Thread-126187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:10:27.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:10:27.644 [DEBUG] [Thread-126187] [transport.py] [_log()] userauth is OK
2025-12-04T00:10:27.644 [DEBUG] [Thread-126187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:10:27.644 [DEBUG] [Thread-126187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:10:27.644 [DEBUG] [Thread-126187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:10:27.644 [DEBUG] [Thread-126187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:10:27.654 [INFO] [Thread-126187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:10:27.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:10:28.213 [DEBUG] [Thread-126187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:10:28.214 [DEBUG] [Thread-126187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:10:28.214 [DEBUG] [Thread-126187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:10:28.255 [DEBUG] [Thread-126187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:10:28.255 [DEBUG] [Thread-126187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:10:28.257 [DEBUG] [Thread-126187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:10:28.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:10:28.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:10:28.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:10:28.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:10:28.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:10:28.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:10:28.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.923658 -999.00  +14.20  22.11     50   +3.90 1 1 1 1 1     0    0 6.40 -169.77 ZNESW 17.9 22.1 141.4 25.5 14.6 -24.9 14.6 -24.3 14.3 -22.8 14.6 -23.5
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.923658
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:10:28.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:10:28.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:10:17', tmtdew=11.67, humidity=45.54, cloud=0.0, wind=24.95, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:10:17', seeing=1.5, atlas_timestamp='2025-12-03T22:10:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:10:28.274 [DEBUG] [Thread-126187] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:10:28.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:10:28.367 [DEBUG] [Thread-126190] [transport.py] [_log()] starting thread (client mode): 0xa27a1fc0
2025-12-04T00:10:28.367 [DEBUG] [Thread-126190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:10:28.382 [DEBUG] [Thread-126190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:10:28.382 [INFO] [Thread-126190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:10:28.390 [DEBUG] [Thread-126190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] client lang: <none>
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] server lang: <none>
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] kex follows: False
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] Compression: none
2025-12-04T00:10:28.391 [DEBUG] [Thread-126190] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:10:28.459 [DEBUG] [Thread-126190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:10:28.459 [DEBUG] [Thread-126190] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:10:28.459 [DEBUG] [Thread-126190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:10:28.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:10:28.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:10:28.520 [DEBUG] [Thread-126190] [transport.py] [_log()] userauth is OK
2025-12-04T00:10:28.520 [DEBUG] [Thread-126190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:10:28.520 [DEBUG] [Thread-126190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:10:28.520 [DEBUG] [Thread-126190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:10:28.520 [DEBUG] [Thread-126190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:10:28.534 [INFO] [Thread-126190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:10:28.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:10:28.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:10:29.405 [DEBUG] [Thread-126190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:10:29.405 [DEBUG] [Thread-126190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:10:29.453 [DEBUG] [Thread-126190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:10:29.453 [DEBUG] [Thread-126190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:10:29.461 [DEBUG] [Thread-126190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:10:29.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:10:29.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:10:29.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:10:29.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:10:29.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:10:29.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:10:29.495 [DEBUG] [Thread-126190] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:10:36.221 [DEBUG] [Thread-126192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:51.287 [DEBUG] [Thread-126193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:10:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:10:59.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:10:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:11:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 10, 49), 11.67, 45.06, 0.0, 23.84, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:11:00.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:10:49
2025-12-04T00:11:00.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:11:00.477 [DEBUG] [Thread-126194] [transport.py] [_log()] starting thread (client mode): 0xa2744340
2025-12-04T00:11:00.477 [DEBUG] [Thread-126194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:11:00.496 [DEBUG] [Thread-126194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:11:00.496 [INFO] [Thread-126194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:11:00.499 [DEBUG] [Thread-126194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] client lang: <none>
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] server lang: <none>
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] kex follows: False
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:11:00.500 [DEBUG] [Thread-126194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:11:00.501 [DEBUG] [Thread-126194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:11:00.501 [DEBUG] [Thread-126194] [transport.py] [_log()] Compression: none
2025-12-04T00:11:00.501 [DEBUG] [Thread-126194] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:11:00.520 [DEBUG] [Thread-126194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:11:00.521 [DEBUG] [Thread-126194] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:11:00.521 [DEBUG] [Thread-126194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:11:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:11:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:11:00.523 [DEBUG] [Thread-126194] [transport.py] [_log()] userauth is OK
2025-12-04T00:11:00.523 [DEBUG] [Thread-126194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:11:00.523 [DEBUG] [Thread-126194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:11:00.523 [DEBUG] [Thread-126194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:11:00.523 [DEBUG] [Thread-126194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:11:00.541 [INFO] [Thread-126194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:11:00.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:11:01.180 [DEBUG] [Thread-126194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:11:01.181 [DEBUG] [Thread-126194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:11:01.181 [DEBUG] [Thread-126194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:11:01.222 [DEBUG] [Thread-126194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:11:01.222 [DEBUG] [Thread-126194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:11:01.225 [DEBUG] [Thread-126194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:11:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:11:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:11:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:11:01.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:11:01.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:11:01.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:11:01.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:11:01.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.924006 -999.00  +14.20  19.25     50   +4.00 1 1 1 1 1     0    0 6.37 -172.31 ZNESW 19.2 19.2 142.6 24.4 14.6 -24.9 14.5 -24.3 14.3 -22.7 14.6 -23.6
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.924006
2025-12-04T00:11:01.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:11:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:11:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:11:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:11:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:11:01.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:10:49', tmtdew=11.67, humidity=45.06, cloud=0.0, wind=23.84, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:10:49', seeing=1.58, atlas_timestamp='2025-12-03T22:10:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:11:01.249 [DEBUG] [Thread-126194] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:11:01.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:11:01.361 [DEBUG] [Thread-126197] [transport.py] [_log()] starting thread (client mode): 0xa514d900
2025-12-04T00:11:01.361 [DEBUG] [Thread-126197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:11:01.375 [DEBUG] [Thread-126197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:11:01.376 [INFO] [Thread-126197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:11:01.383 [DEBUG] [Thread-126197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:11:01.383 [DEBUG] [Thread-126197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:11:01.383 [DEBUG] [Thread-126197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] client lang: <none>
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] server lang: <none>
2025-12-04T00:11:01.384 [DEBUG] [Thread-126197] [transport.py] [_log()] kex follows: False
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] Compression: none
2025-12-04T00:11:01.385 [DEBUG] [Thread-126197] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:11:01.440 [DEBUG] [Thread-126197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:11:01.441 [DEBUG] [Thread-126197] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:11:01.441 [DEBUG] [Thread-126197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:11:01.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:11:01.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:11:01.497 [DEBUG] [Thread-126197] [transport.py] [_log()] userauth is OK
2025-12-04T00:11:01.497 [DEBUG] [Thread-126197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:11:01.497 [DEBUG] [Thread-126197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:11:01.497 [DEBUG] [Thread-126197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:11:01.497 [DEBUG] [Thread-126197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:11:01.516 [INFO] [Thread-126197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:11:01.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:11:01.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:11:02.420 [DEBUG] [Thread-126197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:11:02.421 [DEBUG] [Thread-126197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:11:02.468 [DEBUG] [Thread-126197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:11:02.469 [DEBUG] [Thread-126197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:11:02.477 [DEBUG] [Thread-126197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:11:02.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:11:02.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:11:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:11:02.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:11:02.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:11:02.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:11:02.509 [DEBUG] [Thread-126197] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:11:06.318 [DEBUG] [Thread-126199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:21.371 [DEBUG] [Thread-126200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:22.893 [DEBUG] [Thread-126201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:24.479 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:24.480 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:11:32.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:11:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:11:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 11, 21), 11.68, 45.02, 0.0, 22.41, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:11:33.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:11:21
2025-12-04T00:11:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:11:33.471 [DEBUG] [Thread-126202] [transport.py] [_log()] starting thread (client mode): 0xa7bd19c0
2025-12-04T00:11:33.471 [DEBUG] [Thread-126202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:11:33.490 [DEBUG] [Thread-126202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:11:33.490 [INFO] [Thread-126202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:11:33.493 [DEBUG] [Thread-126202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:11:33.493 [DEBUG] [Thread-126202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:11:33.493 [DEBUG] [Thread-126202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:11:33.493 [DEBUG] [Thread-126202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:33.493 [DEBUG] [Thread-126202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] client lang: <none>
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] server lang: <none>
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] kex follows: False
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:11:33.494 [DEBUG] [Thread-126202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:11:33.495 [DEBUG] [Thread-126202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:11:33.495 [DEBUG] [Thread-126202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:11:33.495 [DEBUG] [Thread-126202] [transport.py] [_log()] Compression: none
2025-12-04T00:11:33.495 [DEBUG] [Thread-126202] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:11:33.512 [DEBUG] [Thread-126202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:11:33.512 [DEBUG] [Thread-126202] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:11:33.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:11:33.513 [DEBUG] [Thread-126202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:11:33.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:11:33.515 [DEBUG] [Thread-126202] [transport.py] [_log()] userauth is OK
2025-12-04T00:11:33.515 [DEBUG] [Thread-126202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:11:33.515 [DEBUG] [Thread-126202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:11:33.515 [DEBUG] [Thread-126202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:11:33.515 [DEBUG] [Thread-126202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:11:33.537 [INFO] [Thread-126202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:11:33.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:11:34.128 [DEBUG] [Thread-126202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:11:34.128 [DEBUG] [Thread-126202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:11:34.129 [DEBUG] [Thread-126202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:11:34.170 [DEBUG] [Thread-126202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:11:34.170 [DEBUG] [Thread-126202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:11:34.172 [DEBUG] [Thread-126202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:11:34.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:11:34.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:11:34.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:11:34.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:11:34.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:11:34.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:11:34.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:11:34.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.924353 -999.00  +14.20  15.85     50   +4.00 1 1 1 1 1     0    0 6.44 -174.78 ZNESW 18.1 15.8 140.6 25.3 14.6 -24.7 14.5 -24.2 14.3 -22.6 14.7 -23.5
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.924353
2025-12-04T00:11:34.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:11:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:11:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:11:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:11:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:11:34.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:11:21', tmtdew=11.68, humidity=45.02, cloud=0.0, wind=22.41, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:11:21', seeing=1.41, atlas_timestamp='2025-12-03T22:11:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:11:34.188 [DEBUG] [Thread-126202] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:11:34.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:11:34.291 [DEBUG] [Thread-126205] [transport.py] [_log()] starting thread (client mode): 0xa51bb5b0
2025-12-04T00:11:34.291 [DEBUG] [Thread-126205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:11:34.307 [DEBUG] [Thread-126205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:11:34.307 [INFO] [Thread-126205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:11:34.315 [DEBUG] [Thread-126205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] client lang: <none>
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] server lang: <none>
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] kex follows: False
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:11:34.316 [DEBUG] [Thread-126205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:11:34.317 [DEBUG] [Thread-126205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:11:34.317 [DEBUG] [Thread-126205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:11:34.317 [DEBUG] [Thread-126205] [transport.py] [_log()] Compression: none
2025-12-04T00:11:34.317 [DEBUG] [Thread-126205] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:11:34.375 [DEBUG] [Thread-126205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:11:34.375 [DEBUG] [Thread-126205] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:11:34.376 [DEBUG] [Thread-126205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:11:34.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:11:34.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:11:34.436 [DEBUG] [Thread-126205] [transport.py] [_log()] userauth is OK
2025-12-04T00:11:34.436 [DEBUG] [Thread-126205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:11:34.437 [DEBUG] [Thread-126205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:11:34.437 [DEBUG] [Thread-126205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:11:34.437 [DEBUG] [Thread-126205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:11:34.456 [INFO] [Thread-126205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:11:34.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:11:34.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:11:35.276 [DEBUG] [Thread-126205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:11:35.276 [DEBUG] [Thread-126205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:11:35.324 [DEBUG] [Thread-126205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:11:35.324 [DEBUG] [Thread-126205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:11:35.333 [DEBUG] [Thread-126205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:11:35.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:11:35.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:11:35.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:11:35.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:11:35.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:11:35.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:11:35.368 [DEBUG] [Thread-126205] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:11:36.408 [DEBUG] [Thread-126207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:11:51.464 [DEBUG] [Thread-126208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:05.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:12:05.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:12:05.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:12:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 11, 53), 11.63, 45.52, 0.0, 22.57, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:12:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:11:53
2025-12-04T00:12:06.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:12:06.349 [DEBUG] [Thread-126209] [transport.py] [_log()] starting thread (client mode): 0xa2745900
2025-12-04T00:12:06.349 [DEBUG] [Thread-126209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:12:06.370 [DEBUG] [Thread-126209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:12:06.370 [INFO] [Thread-126209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:06.373 [DEBUG] [Thread-126209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] client lang: <none>
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] server lang: <none>
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] kex follows: False
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] Compression: none
2025-12-04T00:12:06.374 [DEBUG] [Thread-126209] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:12:06.391 [DEBUG] [Thread-126209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:12:06.392 [DEBUG] [Thread-126209] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:12:06.392 [DEBUG] [Thread-126209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:12:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:12:06.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:12:06.394 [DEBUG] [Thread-126209] [transport.py] [_log()] userauth is OK
2025-12-04T00:12:06.394 [DEBUG] [Thread-126209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:12:06.394 [DEBUG] [Thread-126209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:12:06.395 [DEBUG] [Thread-126209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:12:06.395 [DEBUG] [Thread-126209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:12:06.418 [INFO] [Thread-126209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:12:06.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:12:06.501 [DEBUG] [Thread-126211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:07.010 [DEBUG] [Thread-126209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:12:07.011 [DEBUG] [Thread-126209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:12:07.011 [DEBUG] [Thread-126209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:12:07.052 [DEBUG] [Thread-126209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:12:07.052 [DEBUG] [Thread-126209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:12:07.054 [DEBUG] [Thread-126209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:12:07.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:12:07.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:12:07.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:12:07.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:12:07.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:12:07.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:12:07.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:12:07.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.924700 -999.00  +14.20  15.06     50   +4.00 1 1 1 1 1     0    0 5.91 -182.14 ZNESW 20.0 15.1 144.0 25.5 14.6 -24.7 14.6 -24.3 14.4 -22.7 14.6 -23.5
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.924700
2025-12-04T00:12:07.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:12:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:12:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:12:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:12:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:12:07.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:11:53', tmtdew=11.63, humidity=45.52, cloud=0.0, wind=22.57, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:11:54', seeing=1.2, atlas_timestamp='2025-12-03T22:11:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, 0.011250000000000426, 0.0002500000000011937, -0.044500000000001094, -0.006999999999999673, 0.054750000000002075, -0.025000000000000355, -0.07174999999999976, -0.013500000000000512, 0.0030000000000001137, 0.006249999999999645, 0.031000000000000583, 0.04800000000000004, 0.047250000000000014, -0.049000000000001265, -0.038000000000000256, 0.04574999999999996, 0.0039999999999995595, -0.004000000000001336, -0.05424999999999969, 0.06899999999999906, -0.07725000000000115, -0.17574999999999896, -0.1307500000000008, 0.0129999999999999, -0.016500000000000625, -0.06874999999999964, 0.050499999999999545, 0.07500000000000107, 0.07900000000000063, -0.37299999999999933, -0.07750000000000057, 0.04224999999999923], zp_timestamp='2025-12-03T22:08:00')
2025-12-04T00:12:07.072 [DEBUG] [Thread-126209] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:12:07.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:12:07.175 [DEBUG] [Thread-126213] [transport.py] [_log()] starting thread (client mode): 0xa27a3ee0
2025-12-04T00:12:07.176 [DEBUG] [Thread-126213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:12:07.193 [DEBUG] [Thread-126213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:12:07.193 [INFO] [Thread-126213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:12:07.200 [DEBUG] [Thread-126213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] client lang: <none>
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] server lang: <none>
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] kex follows: False
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:12:07.201 [DEBUG] [Thread-126213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:12:07.202 [DEBUG] [Thread-126213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:12:07.202 [DEBUG] [Thread-126213] [transport.py] [_log()] Compression: none
2025-12-04T00:12:07.202 [DEBUG] [Thread-126213] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:12:07.263 [DEBUG] [Thread-126213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:12:07.263 [DEBUG] [Thread-126213] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:12:07.264 [DEBUG] [Thread-126213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:12:07.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:12:07.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:12:07.319 [DEBUG] [Thread-126213] [transport.py] [_log()] userauth is OK
2025-12-04T00:12:07.320 [DEBUG] [Thread-126213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:12:07.320 [DEBUG] [Thread-126213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:12:07.320 [DEBUG] [Thread-126213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:12:07.320 [DEBUG] [Thread-126213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:12:07.338 [INFO] [Thread-126213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:12:07.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:12:07.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:12:08.242 [DEBUG] [Thread-126213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:12:08.242 [DEBUG] [Thread-126213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:12:08.290 [DEBUG] [Thread-126213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:12:08.290 [DEBUG] [Thread-126213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:12:08.299 [DEBUG] [Thread-126213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:12:08.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:12:08.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:12:08.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:12:08.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:12:08.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:12:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:12:08.334 [DEBUG] [Thread-126213] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:12:21.537 [DEBUG] [Thread-126215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:21.719 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:22.948 [DEBUG] [Thread-126216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:24.676 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:24.677 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:24.878 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:29.934 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:35.423 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:36.584 [DEBUG] [Thread-126217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:12:38.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:12:38.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:12:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 12, 25), 11.63, 45.54, 0.0, 22.44, 14.19, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:12:39.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:12:25
2025-12-04T00:12:39.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:12:39.349 [DEBUG] [Thread-126218] [transport.py] [_log()] starting thread (client mode): 0x9fd23550
2025-12-04T00:12:39.349 [DEBUG] [Thread-126218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:12:39.364 [DEBUG] [Thread-126218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:12:39.364 [INFO] [Thread-126218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:12:39.367 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] client lang: <none>
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] server lang: <none>
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] kex follows: False
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] Compression: none
2025-12-04T00:12:39.368 [DEBUG] [Thread-126218] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:12:39.384 [DEBUG] [Thread-126218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:12:39.384 [DEBUG] [Thread-126218] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:12:39.385 [DEBUG] [Thread-126218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:12:39.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:12:39.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:12:39.386 [DEBUG] [Thread-126218] [transport.py] [_log()] userauth is OK
2025-12-04T00:12:39.387 [DEBUG] [Thread-126218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:12:39.387 [DEBUG] [Thread-126218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:12:39.387 [DEBUG] [Thread-126218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:12:39.387 [DEBUG] [Thread-126218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:12:39.402 [INFO] [Thread-126218] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:12:39.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:12:40.140 [DEBUG] [Thread-126218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:12:40.141 [DEBUG] [Thread-126218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:12:40.141 [DEBUG] [Thread-126218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:12:40.182 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:12:40.182 [DEBUG] [Thread-126218] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:12:40.185 [DEBUG] [Thread-126218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:12:40.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:12:40.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:12:40.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:12:40.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:12:40.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:12:40.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:12:40.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:12:40.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:12:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:12:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.925395 -999.00  +14.20  21.81     50   +4.00 1 1 1 1 1     0    0 5.68 -188.09 ZNESW 18.7 21.8 142.2 27.7 14.6 -24.9 14.6 -24.3 14.3 -22.7 14.6 -23.5
2025-12-04T00:12:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:12:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:12:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.925395
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:12:40.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:12:25', tmtdew=11.63, humidity=45.54, cloud=0.0, wind=22.44, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:12:26', seeing=1.4, atlas_timestamp='2025-12-03T22:12:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:10:00')
2025-12-04T00:12:40.208 [DEBUG] [Thread-126218] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:12:40.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:12:40.309 [DEBUG] [Thread-126220] [transport.py] [_log()] starting thread (client mode): 0xa27a0b80
2025-12-04T00:12:40.309 [DEBUG] [Thread-126220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:12:40.324 [DEBUG] [Thread-126220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:12:40.324 [INFO] [Thread-126220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:12:40.332 [DEBUG] [Thread-126220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] client lang: <none>
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] server lang: <none>
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] kex follows: False
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] Compression: none
2025-12-04T00:12:40.333 [DEBUG] [Thread-126220] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:12:40.390 [DEBUG] [Thread-126220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:12:40.390 [DEBUG] [Thread-126220] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:12:40.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:12:40.391 [DEBUG] [Thread-126220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:12:40.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:12:40.447 [DEBUG] [Thread-126220] [transport.py] [_log()] userauth is OK
2025-12-04T00:12:40.447 [DEBUG] [Thread-126220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:12:40.447 [DEBUG] [Thread-126220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:12:40.447 [DEBUG] [Thread-126220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:12:40.447 [DEBUG] [Thread-126220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:12:40.464 [INFO] [Thread-126220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:12:40.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:12:40.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:12:41.302 [DEBUG] [Thread-126220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:12:41.303 [DEBUG] [Thread-126220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:12:41.351 [DEBUG] [Thread-126220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:12:41.351 [DEBUG] [Thread-126220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:12:41.360 [DEBUG] [Thread-126220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:12:41.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:12:41.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:12:41.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:12:41.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:12:41.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:12:41.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:12:41.395 [DEBUG] [Thread-126220] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:12:44.703 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:49.162 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:12:51.622 [DEBUG] [Thread-126222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:06.680 [DEBUG] [Thread-126223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:08.478 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:13:11.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:13:11.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:13:12.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 12, 58), 11.62, 45.56, 0.0, 22.83, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:13:12.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:12:58
2025-12-04T00:13:12.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:13:12.375 [DEBUG] [Thread-126224] [transport.py] [_log()] starting thread (client mode): 0xa277ab30
2025-12-04T00:13:12.375 [DEBUG] [Thread-126224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:13:12.394 [DEBUG] [Thread-126224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:13:12.395 [INFO] [Thread-126224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] client lang: <none>
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] server lang: <none>
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] kex follows: False
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:13:12.398 [DEBUG] [Thread-126224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:13:12.399 [DEBUG] [Thread-126224] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:13:12.399 [DEBUG] [Thread-126224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:13:12.399 [DEBUG] [Thread-126224] [transport.py] [_log()] Compression: none
2025-12-04T00:13:12.399 [DEBUG] [Thread-126224] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:13:12.417 [DEBUG] [Thread-126224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:13:12.417 [DEBUG] [Thread-126224] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:13:12.417 [DEBUG] [Thread-126224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:13:12.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:13:12.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:13:12.419 [DEBUG] [Thread-126224] [transport.py] [_log()] userauth is OK
2025-12-04T00:13:12.419 [DEBUG] [Thread-126224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:13:12.420 [DEBUG] [Thread-126224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:13:12.420 [DEBUG] [Thread-126224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:13:12.420 [DEBUG] [Thread-126224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:13:12.442 [INFO] [Thread-126224] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:13:12.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:13:12.965 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:13.085 [DEBUG] [Thread-126224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:13:13.085 [DEBUG] [Thread-126224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:13:13.085 [DEBUG] [Thread-126224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:13:13.126 [DEBUG] [Thread-126224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:13:13.126 [DEBUG] [Thread-126224] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:13:13.129 [DEBUG] [Thread-126224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:13:13.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:13:13.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:13:13.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:13:13.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:13:13.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:13:13.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:13:13.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:13:13.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:13:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:13:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.925395 -999.00  +14.20  21.81     50   +4.00 1 1 1 1 1     0    0 5.68 -188.09 ZNESW 18.7 21.8 142.2 27.7 14.6 -24.9 14.6 -24.3 14.3 -22.7 14.6 -23.5
2025-12-04T00:13:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:13:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:13:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.925395
2025-12-04T00:13:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:13:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:13:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:13:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:13:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:13:13.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:12:58', tmtdew=11.62, humidity=45.56, cloud=0.0, wind=22.83, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:12:58', seeing=1.4, atlas_timestamp='2025-12-03T22:12:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:10:00')
2025-12-04T00:13:13.151 [DEBUG] [Thread-126224] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:13:13.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:13:13.260 [DEBUG] [Thread-126227] [transport.py] [_log()] starting thread (client mode): 0xa2747490
2025-12-04T00:13:13.260 [DEBUG] [Thread-126227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:13:13.275 [DEBUG] [Thread-126227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:13:13.275 [INFO] [Thread-126227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:13:13.282 [DEBUG] [Thread-126227] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] client lang: <none>
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] server lang: <none>
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] kex follows: False
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:13:13.283 [DEBUG] [Thread-126227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:13:13.284 [DEBUG] [Thread-126227] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:13:13.284 [DEBUG] [Thread-126227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:13:13.284 [DEBUG] [Thread-126227] [transport.py] [_log()] Compression: none
2025-12-04T00:13:13.284 [DEBUG] [Thread-126227] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:13:13.342 [DEBUG] [Thread-126227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:13:13.342 [DEBUG] [Thread-126227] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:13:13.342 [DEBUG] [Thread-126227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:13:13.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:13:13.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:13:13.398 [DEBUG] [Thread-126227] [transport.py] [_log()] userauth is OK
2025-12-04T00:13:13.399 [DEBUG] [Thread-126227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:13:13.399 [DEBUG] [Thread-126227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:13:13.399 [DEBUG] [Thread-126227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:13:13.399 [DEBUG] [Thread-126227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:13:13.418 [INFO] [Thread-126227] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:13:13.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:13:13.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:13:14.292 [DEBUG] [Thread-126227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:13:14.293 [DEBUG] [Thread-126227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:13:14.341 [DEBUG] [Thread-126227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:13:14.341 [DEBUG] [Thread-126227] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:13:14.350 [DEBUG] [Thread-126227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:13:14.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:13:14.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:13:14.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:13:14.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:13:14.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:13:14.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:13:14.384 [DEBUG] [Thread-126227] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:13:19.610 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:21.714 [DEBUG] [Thread-126229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:23.029 [DEBUG] [Thread-126230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:24.226 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:24.873 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:24.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:36.784 [DEBUG] [Thread-126231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:13:44.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:13:44.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:13:44.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:13:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 13, 30), 11.59, 45.64, 0.0, 22.64, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:13:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:13:30
2025-12-04T00:13:45.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:13:45.374 [DEBUG] [Thread-126232] [transport.py] [_log()] starting thread (client mode): 0xa514d900
2025-12-04T00:13:45.374 [DEBUG] [Thread-126232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:13:45.394 [DEBUG] [Thread-126232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:13:45.394 [INFO] [Thread-126232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] client lang: <none>
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] server lang: <none>
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] kex follows: False
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] Compression: none
2025-12-04T00:13:45.398 [DEBUG] [Thread-126232] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:13:45.413 [DEBUG] [Thread-126232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:13:45.413 [DEBUG] [Thread-126232] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:13:45.413 [DEBUG] [Thread-126232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:13:45.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:13:45.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:13:45.414 [DEBUG] [Thread-126232] [transport.py] [_log()] userauth is OK
2025-12-04T00:13:45.414 [DEBUG] [Thread-126232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:13:45.414 [DEBUG] [Thread-126232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:13:45.414 [DEBUG] [Thread-126232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:13:45.414 [DEBUG] [Thread-126232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:13:45.444 [INFO] [Thread-126232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:13:45.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:13:46.276 [DEBUG] [Thread-126232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:13:46.276 [DEBUG] [Thread-126232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:13:46.277 [DEBUG] [Thread-126232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:13:46.317 [DEBUG] [Thread-126232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:13:46.317 [DEBUG] [Thread-126232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:13:46.320 [DEBUG] [Thread-126232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:13:46.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:13:46.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:13:46.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:13:46.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:13:46.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:13:46.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:13:46.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:13:46.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:13:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:13:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.925742 -999.00  +14.20  16.87     50   +4.00 1 1 1 1 1     0    0 5.51 -189.25 ZNESW 18.4 16.9 138.8 22.9 14.6 -24.8 14.5 -24.3 14.3 -22.7 14.6 -23.6
2025-12-04T00:13:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:13:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:13:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.925742
2025-12-04T00:13:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:13:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:13:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:13:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:13:46.348 [DEBUG] [Thread-126232] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:13:46.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:13:46.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:13:30', tmtdew=11.59, humidity=45.64, cloud=0.0, wind=22.64, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:13:30', seeing=1.4, atlas_timestamp='2025-12-03T22:13:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:10:00')
2025-12-04T00:13:46.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:13:46.457 [DEBUG] [Thread-126235] [transport.py] [_log()] starting thread (client mode): 0xa27a0f40
2025-12-04T00:13:46.458 [DEBUG] [Thread-126235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:13:46.472 [DEBUG] [Thread-126235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:13:46.473 [INFO] [Thread-126235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:13:46.480 [DEBUG] [Thread-126235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:13:46.480 [DEBUG] [Thread-126235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:13:46.480 [DEBUG] [Thread-126235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:13:46.480 [DEBUG] [Thread-126235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] client lang: <none>
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] server lang: <none>
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] kex follows: False
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:13:46.481 [DEBUG] [Thread-126235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:13:46.482 [DEBUG] [Thread-126235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:13:46.482 [DEBUG] [Thread-126235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:13:46.482 [DEBUG] [Thread-126235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:13:46.482 [DEBUG] [Thread-126235] [transport.py] [_log()] Compression: none
2025-12-04T00:13:46.482 [DEBUG] [Thread-126235] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:13:46.538 [DEBUG] [Thread-126235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:13:46.539 [DEBUG] [Thread-126235] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:13:46.539 [DEBUG] [Thread-126235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:13:46.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:13:46.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:13:46.594 [DEBUG] [Thread-126235] [transport.py] [_log()] userauth is OK
2025-12-04T00:13:46.594 [DEBUG] [Thread-126235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:13:46.594 [DEBUG] [Thread-126235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:13:46.594 [DEBUG] [Thread-126235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:13:46.594 [DEBUG] [Thread-126235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:13:46.613 [INFO] [Thread-126235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:13:46.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:13:46.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:13:47.475 [DEBUG] [Thread-126235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:13:47.475 [DEBUG] [Thread-126235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:13:47.523 [DEBUG] [Thread-126235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:13:47.523 [DEBUG] [Thread-126235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:13:47.532 [DEBUG] [Thread-126235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:13:47.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:13:47.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:13:47.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:13:47.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:13:47.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:13:47.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:13:47.566 [DEBUG] [Thread-126235] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:13:51.818 [DEBUG] [Thread-126237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:06.878 [DEBUG] [Thread-126238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:14:17.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:14:17.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:14:18.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 14, 2), 11.56, 45.74, 0.0, 22.96, 14.14, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:14:18.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:14:02
2025-12-04T00:14:18.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:14:18.567 [DEBUG] [Thread-126239] [transport.py] [_log()] starting thread (client mode): 0xa27a0df0
2025-12-04T00:14:18.568 [DEBUG] [Thread-126239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:14:18.587 [DEBUG] [Thread-126239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:14:18.588 [INFO] [Thread-126239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] client lang: <none>
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] server lang: <none>
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] kex follows: False
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] Compression: none
2025-12-04T00:14:18.591 [DEBUG] [Thread-126239] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:14:18.606 [DEBUG] [Thread-126239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:14:18.606 [DEBUG] [Thread-126239] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:14:18.606 [DEBUG] [Thread-126239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:14:18.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:14:18.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:14:18.607 [DEBUG] [Thread-126239] [transport.py] [_log()] userauth is OK
2025-12-04T00:14:18.607 [DEBUG] [Thread-126239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:14:18.607 [DEBUG] [Thread-126239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:14:18.607 [DEBUG] [Thread-126239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:14:18.607 [DEBUG] [Thread-126239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:14:18.622 [INFO] [Thread-126239] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:14:18.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:14:19.237 [DEBUG] [Thread-126239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:14:19.237 [DEBUG] [Thread-126239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:14:19.237 [DEBUG] [Thread-126239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:14:19.278 [DEBUG] [Thread-126239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:14:19.278 [DEBUG] [Thread-126239] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:14:19.280 [DEBUG] [Thread-126239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:14:19.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:14:19.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:14:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:14:19.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:14:19.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:14:19.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:14:19.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:14:19.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.926089 -999.00  +14.20  17.73     50   +4.00 1 1 1 1 1     0    0 5.28 -192.94 ZNESW 17.3 17.7 138.0 21.4 14.6 -24.8 14.5 -24.2 14.3 -22.7 14.6 -23.8
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.926089
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:14:19.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:14:02', tmtdew=11.56, humidity=45.74, cloud=0.0, wind=22.96, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:14:02', seeing=1.39, atlas_timestamp='2025-12-03T22:13:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:10:00')
2025-12-04T00:14:19.300 [DEBUG] [Thread-126239] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:14:19.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:14:19.393 [DEBUG] [Thread-126242] [transport.py] [_log()] starting thread (client mode): 0xa51ccc70
2025-12-04T00:14:19.393 [DEBUG] [Thread-126242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:14:19.407 [DEBUG] [Thread-126242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:14:19.407 [INFO] [Thread-126242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] client lang: <none>
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] server lang: <none>
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] kex follows: False
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] Compression: none
2025-12-04T00:14:19.415 [DEBUG] [Thread-126242] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:14:19.476 [DEBUG] [Thread-126242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:14:19.476 [DEBUG] [Thread-126242] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:14:19.476 [DEBUG] [Thread-126242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:14:19.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:14:19.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:14:19.537 [DEBUG] [Thread-126242] [transport.py] [_log()] userauth is OK
2025-12-04T00:14:19.537 [DEBUG] [Thread-126242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:14:19.537 [DEBUG] [Thread-126242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:14:19.537 [DEBUG] [Thread-126242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:14:19.537 [DEBUG] [Thread-126242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:14:19.551 [INFO] [Thread-126242] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:14:19.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:14:19.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:14:20.371 [DEBUG] [Thread-126242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:14:20.371 [DEBUG] [Thread-126242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:14:20.418 [DEBUG] [Thread-126242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:14:20.418 [DEBUG] [Thread-126242] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:14:20.426 [DEBUG] [Thread-126242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:14:20.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:14:20.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:14:20.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:14:20.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:14:20.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:14:20.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:14:20.458 [DEBUG] [Thread-126242] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:14:21.914 [DEBUG] [Thread-126244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:23.082 [DEBUG] [Thread-126245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:24.232 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:25.073 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:25.074 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:27.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:36.960 [DEBUG] [Thread-126246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:50.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:14:50.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:14:50.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:14:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 14, 34), 11.57, 45.65, 0.0, 23.39, 14.37, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:14:51.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:14:34
2025-12-04T00:14:51.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:14:51.429 [DEBUG] [Thread-126247] [transport.py] [_log()] starting thread (client mode): 0xa2745660
2025-12-04T00:14:51.429 [DEBUG] [Thread-126247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:14:51.449 [DEBUG] [Thread-126247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:14:51.449 [INFO] [Thread-126247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] client lang: <none>
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] server lang: <none>
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] kex follows: False
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:14:51.452 [DEBUG] [Thread-126247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:14:51.453 [DEBUG] [Thread-126247] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:14:51.453 [DEBUG] [Thread-126247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:14:51.453 [DEBUG] [Thread-126247] [transport.py] [_log()] Compression: none
2025-12-04T00:14:51.453 [DEBUG] [Thread-126247] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:14:51.469 [DEBUG] [Thread-126247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:14:51.469 [DEBUG] [Thread-126247] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:14:51.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:14:51.470 [DEBUG] [Thread-126247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:14:51.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:14:51.472 [DEBUG] [Thread-126247] [transport.py] [_log()] userauth is OK
2025-12-04T00:14:51.472 [DEBUG] [Thread-126247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:14:51.472 [DEBUG] [Thread-126247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:14:51.472 [DEBUG] [Thread-126247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:14:51.473 [DEBUG] [Thread-126247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:14:51.496 [INFO] [Thread-126247] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:14:51.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:14:51.996 [DEBUG] [Thread-126249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:14:52.129 [DEBUG] [Thread-126247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:14:52.130 [DEBUG] [Thread-126247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:14:52.130 [DEBUG] [Thread-126247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:14:52.171 [DEBUG] [Thread-126247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:14:52.171 [DEBUG] [Thread-126247] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:14:52.174 [DEBUG] [Thread-126247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:14:52.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:14:52.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:14:52.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:14:52.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:14:52.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:14:52.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:14:52.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.926436 -999.00  +14.20  18.78     50   +4.00 1 1 1 1 1     0    0 4.72 -213.84 ZNESW 18.9 18.8 145.4 24.3 14.6 -24.7 14.5 -24.1 14.3 -22.8 14.6 -23.5
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:14:52.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.926436
2025-12-04T00:14:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:14:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:14:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:14:52.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:14:52.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:14:52.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:14:34', tmtdew=11.57, humidity=45.65, cloud=0.0, wind=23.39, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:14:34', seeing=1.67, atlas_timestamp='2025-12-03T22:14:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:10:00')
2025-12-04T00:14:52.198 [DEBUG] [Thread-126247] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:14:52.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:14:52.307 [DEBUG] [Thread-126251] [transport.py] [_log()] starting thread (client mode): 0xa27440d0
2025-12-04T00:14:52.307 [DEBUG] [Thread-126251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:14:52.321 [DEBUG] [Thread-126251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:14:52.322 [INFO] [Thread-126251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:14:52.329 [DEBUG] [Thread-126251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:14:52.329 [DEBUG] [Thread-126251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:14:52.329 [DEBUG] [Thread-126251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:14:52.329 [DEBUG] [Thread-126251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:52.329 [DEBUG] [Thread-126251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] client lang: <none>
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] server lang: <none>
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] kex follows: False
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:14:52.330 [DEBUG] [Thread-126251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:14:52.331 [DEBUG] [Thread-126251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:14:52.331 [DEBUG] [Thread-126251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:14:52.331 [DEBUG] [Thread-126251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:14:52.331 [DEBUG] [Thread-126251] [transport.py] [_log()] Compression: none
2025-12-04T00:14:52.331 [DEBUG] [Thread-126251] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:14:52.388 [DEBUG] [Thread-126251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:14:52.389 [DEBUG] [Thread-126251] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:14:52.389 [DEBUG] [Thread-126251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:14:52.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:14:52.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:14:52.444 [DEBUG] [Thread-126251] [transport.py] [_log()] userauth is OK
2025-12-04T00:14:52.444 [DEBUG] [Thread-126251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:14:52.445 [DEBUG] [Thread-126251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:14:52.445 [DEBUG] [Thread-126251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:14:52.445 [DEBUG] [Thread-126251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:14:52.464 [INFO] [Thread-126251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:14:52.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:14:52.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:14:53.275 [DEBUG] [Thread-126251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:14:53.275 [DEBUG] [Thread-126251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:14:53.323 [DEBUG] [Thread-126251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:14:53.323 [DEBUG] [Thread-126251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:14:53.331 [DEBUG] [Thread-126251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:14:53.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:14:53.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:14:53.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:14:53.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:14:53.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:14:53.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:14:53.366 [DEBUG] [Thread-126251] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:15:01.863 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:07.032 [DEBUG] [Thread-126253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:07.551 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:10.626 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:17.145 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:22.087 [DEBUG] [Thread-126254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:23.141 [DEBUG] [Thread-126255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:23.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:15:23.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:15:23.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:15:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 15, 6), 11.54, 45.82, 0.0, 23.2, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:15:24.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:15:06
2025-12-04T00:15:24.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:15:24.346 [DEBUG] [Thread-126256] [transport.py] [_log()] starting thread (client mode): 0xa514ebf0
2025-12-04T00:15:24.346 [DEBUG] [Thread-126256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:15:24.371 [DEBUG] [Thread-126256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:15:24.372 [INFO] [Thread-126256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:24.376 [DEBUG] [Thread-126256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] client lang: <none>
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] server lang: <none>
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] kex follows: False
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:15:24.377 [DEBUG] [Thread-126256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:15:24.378 [DEBUG] [Thread-126256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:15:24.378 [DEBUG] [Thread-126256] [transport.py] [_log()] Compression: none
2025-12-04T00:15:24.378 [DEBUG] [Thread-126256] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:15:24.396 [DEBUG] [Thread-126256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:15:24.397 [DEBUG] [Thread-126256] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:15:24.397 [DEBUG] [Thread-126256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:15:24.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:15:24.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:15:24.399 [DEBUG] [Thread-126256] [transport.py] [_log()] userauth is OK
2025-12-04T00:15:24.399 [DEBUG] [Thread-126256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:15:24.399 [DEBUG] [Thread-126256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:15:24.400 [DEBUG] [Thread-126256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:15:24.400 [DEBUG] [Thread-126256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:15:24.434 [INFO] [Thread-126256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:15:24.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:15:25.099 [DEBUG] [Thread-126256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:15:25.100 [DEBUG] [Thread-126256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:15:25.100 [DEBUG] [Thread-126256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:15:25.141 [DEBUG] [Thread-126256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:15:25.141 [DEBUG] [Thread-126256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:15:25.144 [DEBUG] [Thread-126256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:15:25.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:15:25.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:15:25.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:15:25.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:15:25.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:15:25.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:15:25.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:15:25.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.926784 -999.00  +14.20  19.81     50   +4.00 1 1 1 1 1     0    0 5.25 -192.81 ZNESW 17.3 19.8 143.0 22.9 14.6 -24.9 14.5 -24.3 14.3 -22.8 14.5 -23.8
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.926784
2025-12-04T00:15:25.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:15:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:15:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:15:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:15:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:15:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:15:06', tmtdew=11.54, humidity=45.82, cloud=0.0, wind=23.2, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:15:06', seeing=1.52, atlas_timestamp='2025-12-03T22:14:34.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:14:00')
2025-12-04T00:15:25.168 [DEBUG] [Thread-126256] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:15:25.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:15:25.271 [DEBUG] [Thread-126259] [transport.py] [_log()] starting thread (client mode): 0xa277bf70
2025-12-04T00:15:25.271 [DEBUG] [Thread-126259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:15:25.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:25.273 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:25.286 [DEBUG] [Thread-126259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:15:25.286 [INFO] [Thread-126259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:15:25.294 [DEBUG] [Thread-126259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:15:25.294 [DEBUG] [Thread-126259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:15:25.294 [DEBUG] [Thread-126259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:15:25.294 [DEBUG] [Thread-126259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:25.294 [DEBUG] [Thread-126259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] client lang: <none>
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] server lang: <none>
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] kex follows: False
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] Compression: none
2025-12-04T00:15:25.295 [DEBUG] [Thread-126259] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:15:25.352 [DEBUG] [Thread-126259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:15:25.352 [DEBUG] [Thread-126259] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:15:25.353 [DEBUG] [Thread-126259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:15:25.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:15:25.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:15:25.408 [DEBUG] [Thread-126259] [transport.py] [_log()] userauth is OK
2025-12-04T00:15:25.408 [DEBUG] [Thread-126259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:15:25.408 [DEBUG] [Thread-126259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:15:25.408 [DEBUG] [Thread-126259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:15:25.408 [DEBUG] [Thread-126259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:15:25.431 [INFO] [Thread-126259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:15:25.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:15:25.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:15:26.277 [DEBUG] [Thread-126259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:15:26.278 [DEBUG] [Thread-126259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:15:26.326 [DEBUG] [Thread-126259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:15:26.326 [DEBUG] [Thread-126259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:15:26.335 [DEBUG] [Thread-126259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:15:26.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:15:26.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:15:26.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:15:26.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:15:26.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:15:26.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:15:26.372 [DEBUG] [Thread-126259] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:15:37.122 [DEBUG] [Thread-126261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:52.182 [DEBUG] [Thread-126262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:52.862 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:55.984 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:15:56.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:15:56.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:15:56.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:15:57.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 15, 38), 11.5, 45.77, 0.0, 23.63, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:15:57.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:15:38
2025-12-04T00:15:57.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:15:57.345 [DEBUG] [Thread-126263] [transport.py] [_log()] starting thread (client mode): 0xa51cf340
2025-12-04T00:15:57.345 [DEBUG] [Thread-126263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:15:57.366 [DEBUG] [Thread-126263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:15:57.366 [INFO] [Thread-126263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] client lang: <none>
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] server lang: <none>
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] kex follows: False
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:15:57.369 [DEBUG] [Thread-126263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:15:57.370 [DEBUG] [Thread-126263] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:15:57.370 [DEBUG] [Thread-126263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:15:57.370 [DEBUG] [Thread-126263] [transport.py] [_log()] Compression: none
2025-12-04T00:15:57.370 [DEBUG] [Thread-126263] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:15:57.388 [DEBUG] [Thread-126263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:15:57.389 [DEBUG] [Thread-126263] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:15:57.389 [DEBUG] [Thread-126263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:15:57.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:15:57.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:15:57.391 [DEBUG] [Thread-126263] [transport.py] [_log()] userauth is OK
2025-12-04T00:15:57.392 [DEBUG] [Thread-126263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:15:57.392 [DEBUG] [Thread-126263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:15:57.392 [DEBUG] [Thread-126263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:15:57.392 [DEBUG] [Thread-126263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:15:57.415 [INFO] [Thread-126263] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:15:57.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:15:58.078 [DEBUG] [Thread-126263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:15:58.078 [DEBUG] [Thread-126263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:15:58.078 [DEBUG] [Thread-126263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:15:58.119 [DEBUG] [Thread-126263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:15:58.119 [DEBUG] [Thread-126263] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:15:58.122 [DEBUG] [Thread-126263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:15:58.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:15:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:15:58.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:15:58.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:15:58.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:15:58.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:15:58.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.927130 -999.00  +14.10  17.54     50   +4.00 1 1 1 1 1     0    0 5.47 -177.60 ZNESW 15.7 17.5 144.8 21.8 14.6 -25.0 14.5 -24.5 14.3 -22.9 14.6 -23.7
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:15:58.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.927130
2025-12-04T00:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:15:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:15:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:15:38', tmtdew=11.5, humidity=45.77, cloud=0.0, wind=23.63, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:15:39', seeing=1.52, atlas_timestamp='2025-12-03T22:15:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:14:00')
2025-12-04T00:15:58.146 [DEBUG] [Thread-126263] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:15:58.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:15:58.249 [DEBUG] [Thread-126266] [transport.py] [_log()] starting thread (client mode): 0xa51cc4c0
2025-12-04T00:15:58.249 [DEBUG] [Thread-126266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:15:58.264 [DEBUG] [Thread-126266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:15:58.264 [INFO] [Thread-126266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:15:58.272 [DEBUG] [Thread-126266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] client lang: <none>
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] server lang: <none>
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] kex follows: False
2025-12-04T00:15:58.273 [DEBUG] [Thread-126266] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:15:58.274 [DEBUG] [Thread-126266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:15:58.274 [DEBUG] [Thread-126266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:15:58.274 [DEBUG] [Thread-126266] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:15:58.274 [DEBUG] [Thread-126266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:15:58.275 [DEBUG] [Thread-126266] [transport.py] [_log()] Compression: none
2025-12-04T00:15:58.275 [DEBUG] [Thread-126266] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:15:58.333 [DEBUG] [Thread-126266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:15:58.334 [DEBUG] [Thread-126266] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:15:58.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:15:58.334 [DEBUG] [Thread-126266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:15:58.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:15:58.392 [DEBUG] [Thread-126266] [transport.py] [_log()] userauth is OK
2025-12-04T00:15:58.392 [DEBUG] [Thread-126266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:15:58.392 [DEBUG] [Thread-126266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:15:58.392 [DEBUG] [Thread-126266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:15:58.392 [DEBUG] [Thread-126266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:15:58.411 [INFO] [Thread-126266] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:15:58.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:15:58.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:15:59.239 [DEBUG] [Thread-126266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:15:59.239 [DEBUG] [Thread-126266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:15:59.287 [DEBUG] [Thread-126266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:15:59.287 [DEBUG] [Thread-126266] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:15:59.296 [DEBUG] [Thread-126266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:15:59.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:15:59.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:15:59.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:15:59.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:15:59.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:15:59.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:15:59.331 [DEBUG] [Thread-126266] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:16:01.077 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:06.566 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:07.221 [DEBUG] [Thread-126268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:22.276 [DEBUG] [Thread-126269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:23.211 [DEBUG] [Thread-126270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:25.480 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:25.481 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:25.850 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:16:29.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:16:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:16:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 16, 11), 11.5, 45.76, 0.0, 24.58, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:16:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:16:11
2025-12-04T00:16:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:16:30.313 [DEBUG] [Thread-126271] [transport.py] [_log()] starting thread (client mode): 0xa51ce8c0
2025-12-04T00:16:30.313 [DEBUG] [Thread-126271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:16:30.334 [DEBUG] [Thread-126271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:16:30.334 [INFO] [Thread-126271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:16:30.335 [DEBUG] [Thread-126271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] client lang: <none>
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] server lang: <none>
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] kex follows: False
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] Compression: none
2025-12-04T00:16:30.336 [DEBUG] [Thread-126271] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:16:30.346 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:30.353 [DEBUG] [Thread-126271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:16:30.354 [DEBUG] [Thread-126271] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:16:30.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:16:30.355 [DEBUG] [Thread-126271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:16:30.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:16:30.357 [DEBUG] [Thread-126271] [transport.py] [_log()] userauth is OK
2025-12-04T00:16:30.357 [DEBUG] [Thread-126271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:16:30.357 [DEBUG] [Thread-126271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:16:30.357 [DEBUG] [Thread-126271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:16:30.357 [DEBUG] [Thread-126271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:16:30.381 [INFO] [Thread-126271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:16:30.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:16:31.018 [DEBUG] [Thread-126271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:16:31.019 [DEBUG] [Thread-126271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:16:31.019 [DEBUG] [Thread-126271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:16:31.060 [DEBUG] [Thread-126271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:16:31.060 [DEBUG] [Thread-126271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:16:31.063 [DEBUG] [Thread-126271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:16:31.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:16:31.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:16:31.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:16:31.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:16:31.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:16:31.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:16:31.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:16:31.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:16:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:16:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.927478 -999.00  +14.10  18.28     50   +4.00 1 1 1 1 1     0    0 5.91 -174.28 ZNESW 14.3 18.3 142.6 24.1 14.6 -24.9 14.6 -24.3 14.2 -22.8 14.6 -23.4
2025-12-04T00:16:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:16:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:16:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.927478
2025-12-04T00:16:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:16:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:16:31.088 [DEBUG] [Thread-126271] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:16:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:16:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:16:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:16:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:16:11', tmtdew=11.5, humidity=45.76, cloud=0.0, wind=24.58, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:16:11', seeing=1.83, atlas_timestamp='2025-12-03T22:15:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:14:00')
2025-12-04T00:16:31.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:16:31.192 [DEBUG] [Thread-126274] [transport.py] [_log()] starting thread (client mode): 0xa277a620
2025-12-04T00:16:31.193 [DEBUG] [Thread-126274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:16:31.207 [DEBUG] [Thread-126274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:16:31.207 [INFO] [Thread-126274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:16:31.214 [DEBUG] [Thread-126274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:16:31.214 [DEBUG] [Thread-126274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] client lang: <none>
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] server lang: <none>
2025-12-04T00:16:31.215 [DEBUG] [Thread-126274] [transport.py] [_log()] kex follows: False
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] Compression: none
2025-12-04T00:16:31.216 [DEBUG] [Thread-126274] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:16:31.275 [DEBUG] [Thread-126274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:16:31.275 [DEBUG] [Thread-126274] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:16:31.276 [DEBUG] [Thread-126274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:16:31.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:16:31.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:16:31.331 [DEBUG] [Thread-126274] [transport.py] [_log()] userauth is OK
2025-12-04T00:16:31.331 [DEBUG] [Thread-126274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:16:31.331 [DEBUG] [Thread-126274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:16:31.331 [DEBUG] [Thread-126274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:16:31.331 [DEBUG] [Thread-126274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:16:31.353 [INFO] [Thread-126274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:16:31.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:16:31.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:16:32.184 [DEBUG] [Thread-126274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:16:32.184 [DEBUG] [Thread-126274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:16:32.232 [DEBUG] [Thread-126274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:16:32.232 [DEBUG] [Thread-126274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:16:32.241 [DEBUG] [Thread-126274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:16:32.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:16:32.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:16:32.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:16:32.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:16:32.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:16:32.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:16:32.276 [DEBUG] [Thread-126274] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:16:37.313 [DEBUG] [Thread-126276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:49.627 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:52.368 [DEBUG] [Thread-126277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:16:54.110 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:00.727 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:02.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:17:02.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:17:02.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:17:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 16, 43), 11.53, 45.82, 0.0, 23.64, 14.14, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:17:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:16:43
2025-12-04T00:17:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:17:03.248 [DEBUG] [Thread-126278] [transport.py] [_log()] starting thread (client mode): 0xa277ad10
2025-12-04T00:17:03.249 [DEBUG] [Thread-126278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:17:03.269 [DEBUG] [Thread-126278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:17:03.269 [INFO] [Thread-126278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:17:03.272 [DEBUG] [Thread-126278] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:03.273 [DEBUG] [Thread-126278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] client lang: <none>
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] server lang: <none>
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] kex follows: False
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:17:03.274 [DEBUG] [Thread-126278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:17:03.275 [DEBUG] [Thread-126278] [transport.py] [_log()] Compression: none
2025-12-04T00:17:03.275 [DEBUG] [Thread-126278] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:17:03.293 [DEBUG] [Thread-126278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:17:03.294 [DEBUG] [Thread-126278] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:17:03.294 [DEBUG] [Thread-126278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:17:03.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:17:03.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:17:03.296 [DEBUG] [Thread-126278] [transport.py] [_log()] userauth is OK
2025-12-04T00:17:03.296 [DEBUG] [Thread-126278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:17:03.296 [DEBUG] [Thread-126278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:17:03.296 [DEBUG] [Thread-126278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:17:03.297 [DEBUG] [Thread-126278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:17:03.320 [INFO] [Thread-126278] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:17:03.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:17:03.955 [DEBUG] [Thread-126278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:17:03.955 [DEBUG] [Thread-126278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:17:03.956 [DEBUG] [Thread-126278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:17:03.997 [DEBUG] [Thread-126278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:17:03.997 [DEBUG] [Thread-126278] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:17:04.000 [DEBUG] [Thread-126278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:17:04.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:17:04.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:17:04.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:17:04.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:17:04.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:17:04.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:17:04.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.928172 -999.00  +14.10  16.25     50   +4.00 1 1 1 1 1     0    0 5.80 -169.84 ZNESW 16.6 16.2 149.2 21.1 14.6 -24.8 14.4 -24.3 14.3 -22.9 14.5 -23.8
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:17:04.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.928172
2025-12-04T00:17:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:17:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:17:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:17:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:17:04.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:17:04.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:16:43', tmtdew=11.53, humidity=45.82, cloud=0.0, wind=23.64, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:16:43', seeing=1.5, atlas_timestamp='2025-12-03T22:16:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:14:00')
2025-12-04T00:17:04.025 [DEBUG] [Thread-126278] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:17:04.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:17:04.129 [DEBUG] [Thread-126281] [transport.py] [_log()] starting thread (client mode): 0xa51cfd30
2025-12-04T00:17:04.129 [DEBUG] [Thread-126281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:17:04.145 [DEBUG] [Thread-126281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:17:04.145 [INFO] [Thread-126281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:04.156 [DEBUG] [Thread-126281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] client lang: <none>
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] server lang: <none>
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] kex follows: False
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] Compression: none
2025-12-04T00:17:04.157 [DEBUG] [Thread-126281] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:17:04.217 [DEBUG] [Thread-126281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:17:04.218 [DEBUG] [Thread-126281] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:17:04.218 [DEBUG] [Thread-126281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:17:04.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:17:04.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:17:04.275 [DEBUG] [Thread-126281] [transport.py] [_log()] userauth is OK
2025-12-04T00:17:04.275 [DEBUG] [Thread-126281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:17:04.275 [DEBUG] [Thread-126281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:17:04.275 [DEBUG] [Thread-126281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:17:04.275 [DEBUG] [Thread-126281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:17:04.295 [INFO] [Thread-126281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:17:04.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:17:04.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:17:05.155 [DEBUG] [Thread-126281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:17:05.155 [DEBUG] [Thread-126281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:17:05.204 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:05.204 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:17:05.205 [DEBUG] [Thread-126281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:17:05.214 [DEBUG] [Thread-126281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:17:05.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:17:05.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:17:05.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:17:05.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:17:05.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:17:05.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:17:05.257 [DEBUG] [Thread-126281] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:17:07.405 [DEBUG] [Thread-126283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:22.467 [DEBUG] [Thread-126284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:23.276 [DEBUG] [Thread-126285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:25.680 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:25.681 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:35.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:17:35.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:17:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:17:35.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 17, 15), 11.55, 45.77, 0.0, 23.57, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:17:35.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:17:15
2025-12-04T00:17:36.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:17:36.234 [DEBUG] [Thread-126286] [transport.py] [_log()] starting thread (client mode): 0xa51cd060
2025-12-04T00:17:36.234 [DEBUG] [Thread-126286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:17:36.254 [DEBUG] [Thread-126286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:17:36.254 [INFO] [Thread-126286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] client lang: <none>
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] server lang: <none>
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] kex follows: False
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] Compression: none
2025-12-04T00:17:36.258 [DEBUG] [Thread-126286] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:17:36.276 [DEBUG] [Thread-126286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:17:36.276 [DEBUG] [Thread-126286] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:17:36.276 [DEBUG] [Thread-126286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:17:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:17:36.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:17:36.277 [DEBUG] [Thread-126286] [transport.py] [_log()] userauth is OK
2025-12-04T00:17:36.277 [DEBUG] [Thread-126286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:17:36.277 [DEBUG] [Thread-126286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:17:36.277 [DEBUG] [Thread-126286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:17:36.277 [DEBUG] [Thread-126286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:17:36.304 [INFO] [Thread-126286] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:17:36.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:17:36.944 [DEBUG] [Thread-126286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:17:36.944 [DEBUG] [Thread-126286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:17:36.944 [DEBUG] [Thread-126286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:17:36.986 [DEBUG] [Thread-126286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:17:36.986 [DEBUG] [Thread-126286] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:17:36.988 [DEBUG] [Thread-126286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:17:37.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:17:37.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:17:37.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:17:37.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:17:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:17:37.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:17:37.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.928520 -999.00  +14.10  20.04     50   +4.00 1 1 1 1 1     0    0 5.73 -163.32 ZNESW 19.4 20.0 146.0 23.0 14.5 -24.7 14.4 -24.2 14.2 -22.7 14.5 -23.8
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:17:37.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.928520
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:17:37.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:17:15', tmtdew=11.55, humidity=45.77, cloud=0.0, wind=23.57, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:17:15', seeing=1.5, atlas_timestamp='2025-12-03T22:17:04.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.10125000000000028, -0.006249999999999645, -0.09324999999999939, -0.009500000000000952, -0.01950000000000074, 0.006250000000001421, -0.026500000000000412, -0.12174999999999869, -0.021500000000001407, -0.022999999999999687, 0.012249999999999872, 0.0039999999999995595, 0.059499999999999886, 0.019750000000000156, -0.23150000000000048, -0.13500000000000156, 0.04124999999999979, -0.01649999999999885, -0.010000000000001563, -0.02925000000000111, 0.07299999999999862, -0.024250000000002103, -0.2867499999999996, -0.03625000000000078, 0.006999999999999673, -0.025000000000000355, -0.07424999999999926, 0.05150000000000077, 0.09250000000000114, -0.02499999999999858, -0.24599999999999866, -0.05099999999999838, -0.0832499999999996], zp_timestamp='2025-12-03T22:14:00')
2025-12-04T00:17:37.006 [DEBUG] [Thread-126286] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:17:37.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:17:37.102 [DEBUG] [Thread-126289] [transport.py] [_log()] starting thread (client mode): 0xa2778580
2025-12-04T00:17:37.102 [DEBUG] [Thread-126289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:17:37.116 [DEBUG] [Thread-126289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:17:37.116 [INFO] [Thread-126289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] client lang: <none>
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] server lang: <none>
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] kex follows: False
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] Compression: none
2025-12-04T00:17:37.124 [DEBUG] [Thread-126289] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:17:37.180 [DEBUG] [Thread-126289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:17:37.180 [DEBUG] [Thread-126289] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:17:37.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:17:37.180 [DEBUG] [Thread-126289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:17:37.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:17:37.237 [DEBUG] [Thread-126289] [transport.py] [_log()] userauth is OK
2025-12-04T00:17:37.237 [DEBUG] [Thread-126289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:17:37.237 [DEBUG] [Thread-126289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:17:37.237 [DEBUG] [Thread-126289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:17:37.237 [DEBUG] [Thread-126289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:17:37.251 [INFO] [Thread-126289] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:17:37.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:17:37.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:17:37.501 [DEBUG] [Thread-126291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:17:38.087 [DEBUG] [Thread-126289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:17:38.087 [DEBUG] [Thread-126289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:17:38.136 [DEBUG] [Thread-126289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:17:38.136 [DEBUG] [Thread-126289] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:17:38.144 [DEBUG] [Thread-126289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:17:38.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:17:38.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:17:38.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:17:38.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:17:38.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:17:38.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:17:38.177 [DEBUG] [Thread-126289] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:17:52.550 [DEBUG] [Thread-126292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:04.059 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:07.133 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:07.589 [DEBUG] [Thread-126293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:08.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:18:08.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:18:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:18:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 17, 47), 11.46, 45.76, 0.0, 23.7, 14.17, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:18:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:17:47
2025-12-04T00:18:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:18:09.167 [DEBUG] [Thread-126294] [transport.py] [_log()] starting thread (client mode): 0xa514d3f0
2025-12-04T00:18:09.167 [DEBUG] [Thread-126294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:18:09.187 [DEBUG] [Thread-126294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:18:09.187 [INFO] [Thread-126294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] client lang: <none>
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] server lang: <none>
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] kex follows: False
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:18:09.190 [DEBUG] [Thread-126294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:18:09.191 [DEBUG] [Thread-126294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:18:09.191 [DEBUG] [Thread-126294] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:18:09.191 [DEBUG] [Thread-126294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:18:09.191 [DEBUG] [Thread-126294] [transport.py] [_log()] Compression: none
2025-12-04T00:18:09.191 [DEBUG] [Thread-126294] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:18:09.208 [DEBUG] [Thread-126294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:18:09.209 [DEBUG] [Thread-126294] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:18:09.209 [DEBUG] [Thread-126294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:18:09.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:18:09.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:18:09.211 [DEBUG] [Thread-126294] [transport.py] [_log()] userauth is OK
2025-12-04T00:18:09.211 [DEBUG] [Thread-126294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:18:09.211 [DEBUG] [Thread-126294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:18:09.211 [DEBUG] [Thread-126294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:18:09.211 [DEBUG] [Thread-126294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:18:09.229 [INFO] [Thread-126294] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:18:09.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:18:09.873 [DEBUG] [Thread-126294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:18:09.873 [DEBUG] [Thread-126294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:18:09.874 [DEBUG] [Thread-126294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:18:09.914 [DEBUG] [Thread-126294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:18:09.914 [DEBUG] [Thread-126294] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:18:09.917 [DEBUG] [Thread-126294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:18:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:18:09.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:18:09.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:18:09.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:18:09.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:18:09.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:18:09.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:18:09.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.928867 -999.00  +14.10  17.57     50   +4.00 1 1 1 1 1     0    0 6.17 -159.02 ZNESW 20.4 17.6 139.6 22.7 14.6 -25.0 14.5 -24.4 14.2 -22.8 14.5 -23.8
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.928867
2025-12-04T00:18:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:18:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:18:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:18:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:18:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:18:09.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:17:47', tmtdew=11.46, humidity=45.76, cloud=0.0, wind=23.7, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:17:47', seeing=1.7, atlas_timestamp='2025-12-03T22:17:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:18:09.939 [DEBUG] [Thread-126294] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:18:10.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:18:10.038 [DEBUG] [Thread-126297] [transport.py] [_log()] starting thread (client mode): 0xa2746800
2025-12-04T00:18:10.038 [DEBUG] [Thread-126297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:18:10.052 [DEBUG] [Thread-126297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:18:10.052 [INFO] [Thread-126297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:18:10.060 [DEBUG] [Thread-126297] [transport.py] [_log()] client lang: <none>
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] server lang: <none>
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] kex follows: False
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] Compression: none
2025-12-04T00:18:10.061 [DEBUG] [Thread-126297] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:18:10.117 [DEBUG] [Thread-126297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:18:10.118 [DEBUG] [Thread-126297] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:18:10.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:18:10.119 [DEBUG] [Thread-126297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:18:10.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:18:10.173 [DEBUG] [Thread-126297] [transport.py] [_log()] userauth is OK
2025-12-04T00:18:10.174 [DEBUG] [Thread-126297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:18:10.174 [DEBUG] [Thread-126297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:18:10.174 [DEBUG] [Thread-126297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:18:10.174 [DEBUG] [Thread-126297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:18:10.193 [INFO] [Thread-126297] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:18:10.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:18:10.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:18:11.038 [DEBUG] [Thread-126297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:18:11.038 [DEBUG] [Thread-126297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:18:11.086 [DEBUG] [Thread-126297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:18:11.086 [DEBUG] [Thread-126297] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:18:11.095 [DEBUG] [Thread-126297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:18:11.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:18:11.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:18:11.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:18:11.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:18:11.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:18:11.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:18:11.127 [DEBUG] [Thread-126297] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:18:22.616 [DEBUG] [Thread-126299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:23.346 [DEBUG] [Thread-126300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:25.879 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:25.880 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:37.669 [DEBUG] [Thread-126301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:41.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:18:41.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:18:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:18:41.668 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 18, 19), 11.47, 45.71, 0.0, 25.57, 14.14, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:18:41.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:18:19
2025-12-04T00:18:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:18:42.110 [DEBUG] [Thread-126302] [transport.py] [_log()] starting thread (client mode): 0xa2745540
2025-12-04T00:18:42.110 [DEBUG] [Thread-126302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:18:42.130 [DEBUG] [Thread-126302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:18:42.130 [INFO] [Thread-126302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:18:42.133 [DEBUG] [Thread-126302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:18:42.134 [DEBUG] [Thread-126302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] client lang: <none>
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] server lang: <none>
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] kex follows: False
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:18:42.135 [DEBUG] [Thread-126302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:18:42.136 [DEBUG] [Thread-126302] [transport.py] [_log()] Compression: none
2025-12-04T00:18:42.136 [DEBUG] [Thread-126302] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:18:42.155 [DEBUG] [Thread-126302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:18:42.155 [DEBUG] [Thread-126302] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:18:42.156 [DEBUG] [Thread-126302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:18:42.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:18:42.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:18:42.158 [DEBUG] [Thread-126302] [transport.py] [_log()] userauth is OK
2025-12-04T00:18:42.158 [DEBUG] [Thread-126302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:18:42.158 [DEBUG] [Thread-126302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:18:42.158 [DEBUG] [Thread-126302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:18:42.158 [DEBUG] [Thread-126302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:18:42.182 [INFO] [Thread-126302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:18:42.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:18:42.826 [DEBUG] [Thread-126302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:18:42.826 [DEBUG] [Thread-126302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:18:42.827 [DEBUG] [Thread-126302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:18:42.868 [DEBUG] [Thread-126302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:18:42.868 [DEBUG] [Thread-126302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:18:42.870 [DEBUG] [Thread-126302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:18:42.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:18:42.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:18:42.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:18:42.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:18:42.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:18:42.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:18:42.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.929214 -999.00  +14.00  19.02     50   +4.00 1 1 1 1 1     0    0 6.60 -137.92 ZNESW 17.9 19.0 140.0 21.5 14.5 -24.9 14.4 -24.3 14.3 -22.9 14.5 -23.7
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:18:42.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.929214
2025-12-04T00:18:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:18:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:18:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:18:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:18:42.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:18:42.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:18:19', tmtdew=11.47, humidity=45.71, cloud=0.0, wind=25.57, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:18:19', seeing=1.54, atlas_timestamp='2025-12-03T22:18:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:18:42.892 [DEBUG] [Thread-126302] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:18:42.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:18:42.997 [DEBUG] [Thread-126305] [transport.py] [_log()] starting thread (client mode): 0xa51cd660
2025-12-04T00:18:42.997 [DEBUG] [Thread-126305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:18:43.013 [DEBUG] [Thread-126305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:18:43.013 [INFO] [Thread-126305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:43.021 [DEBUG] [Thread-126305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] client lang: <none>
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] server lang: <none>
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] kex follows: False
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:18:43.022 [DEBUG] [Thread-126305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:18:43.023 [DEBUG] [Thread-126305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:18:43.023 [DEBUG] [Thread-126305] [transport.py] [_log()] Compression: none
2025-12-04T00:18:43.024 [DEBUG] [Thread-126305] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:18:43.081 [DEBUG] [Thread-126305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:18:43.081 [DEBUG] [Thread-126305] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:18:43.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:18:43.082 [DEBUG] [Thread-126305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:18:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:18:43.141 [DEBUG] [Thread-126305] [transport.py] [_log()] userauth is OK
2025-12-04T00:18:43.141 [DEBUG] [Thread-126305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:18:43.141 [DEBUG] [Thread-126305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:18:43.141 [DEBUG] [Thread-126305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:18:43.141 [DEBUG] [Thread-126305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:18:43.160 [INFO] [Thread-126305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:18:43.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:18:43.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:18:44.036 [DEBUG] [Thread-126305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:18:44.036 [DEBUG] [Thread-126305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:18:44.084 [DEBUG] [Thread-126305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:18:44.084 [DEBUG] [Thread-126305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:18:44.093 [DEBUG] [Thread-126305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:18:44.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:18:44.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:18:44.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:18:44.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:18:44.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:18:44.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:18:44.127 [DEBUG] [Thread-126305] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:18:47.342 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:50.416 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:52.700 [DEBUG] [Thread-126307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:18:56.896 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:07.750 [DEBUG] [Thread-126308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:14.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:19:14.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:19:14.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:19:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 18, 51), 11.54, 45.66, 0.0, 23.57, 14.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:19:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:18:51
2025-12-04T00:19:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:19:15.084 [DEBUG] [Thread-126309] [transport.py] [_log()] starting thread (client mode): 0xa2744d00
2025-12-04T00:19:15.084 [DEBUG] [Thread-126309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:19:15.105 [DEBUG] [Thread-126309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:19:15.105 [INFO] [Thread-126309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:15.107 [DEBUG] [Thread-126309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] client lang: <none>
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] server lang: <none>
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] kex follows: False
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] Compression: none
2025-12-04T00:19:15.108 [DEBUG] [Thread-126309] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:19:15.122 [DEBUG] [Thread-126309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:19:15.123 [DEBUG] [Thread-126309] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:19:15.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:19:15.123 [DEBUG] [Thread-126309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:19:15.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:19:15.125 [DEBUG] [Thread-126309] [transport.py] [_log()] userauth is OK
2025-12-04T00:19:15.125 [DEBUG] [Thread-126309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:19:15.126 [DEBUG] [Thread-126309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:19:15.126 [DEBUG] [Thread-126309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:19:15.126 [DEBUG] [Thread-126309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:19:15.143 [INFO] [Thread-126309] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:19:15.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:19:15.806 [DEBUG] [Thread-126309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:19:15.806 [DEBUG] [Thread-126309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:19:15.806 [DEBUG] [Thread-126309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:19:15.847 [DEBUG] [Thread-126309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:19:15.847 [DEBUG] [Thread-126309] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:19:15.850 [DEBUG] [Thread-126309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:19:15.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:19:15.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:19:15.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:19:15.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:19:15.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:19:15.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:19:15.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:19:15.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.929561 -999.00  +14.00  18.29     50   +4.00 1 1 1 1 1     0    0 6.09 -145.88 ZNESW 16.0 18.3 142.6 22.8 14.5 -24.9 14.3 -24.2 14.2 -22.8 14.5 -23.7
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.929561
2025-12-04T00:19:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:19:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:19:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:19:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:19:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:19:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:18:51', tmtdew=11.54, humidity=45.66, cloud=0.0, wind=23.57, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:18:51', seeing=1.52, atlas_timestamp='2025-12-03T22:18:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:19:15.873 [DEBUG] [Thread-126309] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:19:15.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:19:15.980 [DEBUG] [Thread-126312] [transport.py] [_log()] starting thread (client mode): 0xa51cee30
2025-12-04T00:19:15.980 [DEBUG] [Thread-126312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:19:15.994 [DEBUG] [Thread-126312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:19:15.994 [INFO] [Thread-126312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:16.002 [DEBUG] [Thread-126312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] client lang: <none>
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] server lang: <none>
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] kex follows: False
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] Compression: none
2025-12-04T00:19:16.003 [DEBUG] [Thread-126312] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:19:16.062 [DEBUG] [Thread-126312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:19:16.062 [DEBUG] [Thread-126312] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:19:16.062 [DEBUG] [Thread-126312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:19:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:19:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:19:16.128 [DEBUG] [Thread-126312] [transport.py] [_log()] userauth is OK
2025-12-04T00:19:16.128 [DEBUG] [Thread-126312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:19:16.128 [DEBUG] [Thread-126312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:19:16.128 [DEBUG] [Thread-126312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:19:16.128 [DEBUG] [Thread-126312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:19:16.151 [INFO] [Thread-126312] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:19:16.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:19:16.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:19:16.988 [DEBUG] [Thread-126312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:19:16.988 [DEBUG] [Thread-126312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:19:17.036 [DEBUG] [Thread-126312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:19:17.036 [DEBUG] [Thread-126312] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:19:17.044 [DEBUG] [Thread-126312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:19:17.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:19:17.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:19:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:19:17.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:19:17.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:19:17.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:19:17.082 [DEBUG] [Thread-126312] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:19:22.790 [DEBUG] [Thread-126314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:23.405 [DEBUG] [Thread-126315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:26.079 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:26.081 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:37.842 [DEBUG] [Thread-126316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:19:47.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:19:47.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:19:47.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:19:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 19, 23), 11.53, 45.69, 0.0, 23.2, 14.2, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:19:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:19:23
2025-12-04T00:19:47.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:19:48.041 [DEBUG] [Thread-126317] [transport.py] [_log()] starting thread (client mode): 0xa2744dc0
2025-12-04T00:19:48.041 [DEBUG] [Thread-126317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:19:48.061 [DEBUG] [Thread-126317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:19:48.062 [INFO] [Thread-126317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] client lang: <none>
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] server lang: <none>
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] kex follows: False
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:19:48.065 [DEBUG] [Thread-126317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:19:48.066 [DEBUG] [Thread-126317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:19:48.066 [DEBUG] [Thread-126317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:19:48.066 [DEBUG] [Thread-126317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:19:48.066 [DEBUG] [Thread-126317] [transport.py] [_log()] Compression: none
2025-12-04T00:19:48.066 [DEBUG] [Thread-126317] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:19:48.083 [DEBUG] [Thread-126317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:19:48.084 [DEBUG] [Thread-126317] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:19:48.093 [DEBUG] [Thread-126317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:19:48.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:19:48.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:19:48.095 [DEBUG] [Thread-126317] [transport.py] [_log()] userauth is OK
2025-12-04T00:19:48.095 [DEBUG] [Thread-126317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:19:48.095 [DEBUG] [Thread-126317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:19:48.096 [DEBUG] [Thread-126317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:19:48.096 [DEBUG] [Thread-126317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:19:48.116 [INFO] [Thread-126317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:19:48.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:19:48.764 [DEBUG] [Thread-126317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:19:48.764 [DEBUG] [Thread-126317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:19:48.764 [DEBUG] [Thread-126317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:19:48.805 [DEBUG] [Thread-126317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:19:48.805 [DEBUG] [Thread-126317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:19:48.808 [DEBUG] [Thread-126317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:19:48.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:19:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:19:48.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:19:48.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:19:48.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:19:48.832 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:19:48.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.929909 -999.00  +14.00  20.12     50   +4.00 1 1 1 1 1     0    0 6.86 -139.29 ZNESW 19.2 20.1 138.8 26.7 14.5 -24.9 14.4 -24.3 14.2 -22.9 14.4 -23.6
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:19:48.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.929909
2025-12-04T00:19:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:19:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:19:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:19:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:19:48.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:19:48.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:19:23', tmtdew=11.53, humidity=45.69, cloud=0.0, wind=23.2, temperature=14.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:19:23', seeing=1.75, atlas_timestamp='2025-12-03T22:19:04.138', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:19:48.835 [DEBUG] [Thread-126317] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:19:48.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:19:48.936 [DEBUG] [Thread-126320] [transport.py] [_log()] starting thread (client mode): 0xa27a36d0
2025-12-04T00:19:48.937 [DEBUG] [Thread-126320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:19:48.951 [DEBUG] [Thread-126320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:19:48.951 [INFO] [Thread-126320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:19:48.958 [DEBUG] [Thread-126320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] client lang: <none>
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] server lang: <none>
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] kex follows: False
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:19:48.959 [DEBUG] [Thread-126320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:19:48.960 [DEBUG] [Thread-126320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:19:48.960 [DEBUG] [Thread-126320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:19:48.960 [DEBUG] [Thread-126320] [transport.py] [_log()] Compression: none
2025-12-04T00:19:48.960 [DEBUG] [Thread-126320] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:19:49.016 [DEBUG] [Thread-126320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:19:49.016 [DEBUG] [Thread-126320] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:19:49.016 [DEBUG] [Thread-126320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:19:49.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:19:49.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:19:49.072 [DEBUG] [Thread-126320] [transport.py] [_log()] userauth is OK
2025-12-04T00:19:49.072 [DEBUG] [Thread-126320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:19:49.072 [DEBUG] [Thread-126320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:19:49.073 [DEBUG] [Thread-126320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:19:49.073 [DEBUG] [Thread-126320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:19:49.093 [INFO] [Thread-126320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:19:49.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:19:49.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:19:49.920 [DEBUG] [Thread-126320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:19:49.920 [DEBUG] [Thread-126320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:19:49.969 [DEBUG] [Thread-126320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:19:49.969 [DEBUG] [Thread-126320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:19:49.977 [DEBUG] [Thread-126320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:19:49.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:19:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:19:49.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:19:50.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:19:50.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:19:50.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:19:50.011 [DEBUG] [Thread-126320] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:19:52.882 [DEBUG] [Thread-126322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:07.950 [DEBUG] [Thread-126323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:20.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:20:20.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:20:20.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:20:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 19, 55), 11.5, 45.62, 0.0, 24.05, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:20:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:19:55
2025-12-04T00:20:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:20:20.971 [DEBUG] [Thread-126324] [transport.py] [_log()] starting thread (client mode): 0xa277b790
2025-12-04T00:20:20.971 [DEBUG] [Thread-126324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:20:20.993 [DEBUG] [Thread-126324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:20:20.993 [INFO] [Thread-126324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:20.996 [DEBUG] [Thread-126324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] client lang: <none>
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] server lang: <none>
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] kex follows: False
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] Compression: none
2025-12-04T00:20:20.997 [DEBUG] [Thread-126324] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:20:21.015 [DEBUG] [Thread-126324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:20:21.015 [DEBUG] [Thread-126324] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:20:21.016 [DEBUG] [Thread-126324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:20:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:20:21.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:20:21.017 [DEBUG] [Thread-126324] [transport.py] [_log()] userauth is OK
2025-12-04T00:20:21.018 [DEBUG] [Thread-126324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:20:21.018 [DEBUG] [Thread-126324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:20:21.018 [DEBUG] [Thread-126324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:20:21.018 [DEBUG] [Thread-126324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:20:21.042 [INFO] [Thread-126324] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:20:21.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:20:21.669 [DEBUG] [Thread-126324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:20:21.670 [DEBUG] [Thread-126324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:20:21.670 [DEBUG] [Thread-126324] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:20:21.711 [DEBUG] [Thread-126324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:20:21.711 [DEBUG] [Thread-126324] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:20:21.714 [DEBUG] [Thread-126324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:20:21.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:20:21.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:20:21.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:20:21.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:20:21.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:20:21.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:20:21.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.930603 -999.00  +14.00  19.99     51   +4.10 1 1 1 1 1     0    0 6.91 -123.13 ZNESW 24.0 20.0 145.8 25.4 14.5 -24.7 14.4 -24.2 14.2 -22.8 14.5 -23.5
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.930603
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:20:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:19:55', tmtdew=11.5, humidity=45.62, cloud=0.0, wind=24.05, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:19:55', seeing=1.23, atlas_timestamp='2025-12-03T22:20:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:20:21.734 [DEBUG] [Thread-126324] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:20:21.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:20:21.824 [DEBUG] [Thread-126327] [transport.py] [_log()] starting thread (client mode): 0xa2779c30
2025-12-04T00:20:21.824 [DEBUG] [Thread-126327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:20:21.840 [DEBUG] [Thread-126327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:20:21.840 [INFO] [Thread-126327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] client lang: <none>
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] server lang: <none>
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] kex follows: False
2025-12-04T00:20:21.850 [DEBUG] [Thread-126327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] Compression: none
2025-12-04T00:20:21.851 [DEBUG] [Thread-126327] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:20:21.907 [DEBUG] [Thread-126327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:20:21.907 [DEBUG] [Thread-126327] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:20:21.908 [DEBUG] [Thread-126327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:20:21.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:20:21.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:20:21.963 [DEBUG] [Thread-126327] [transport.py] [_log()] userauth is OK
2025-12-04T00:20:21.964 [DEBUG] [Thread-126327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:20:21.964 [DEBUG] [Thread-126327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:20:21.964 [DEBUG] [Thread-126327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:20:21.964 [DEBUG] [Thread-126327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:20:21.982 [INFO] [Thread-126327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:20:21.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:20:21.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:20:22.837 [DEBUG] [Thread-126327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:20:22.837 [DEBUG] [Thread-126327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:20:22.885 [DEBUG] [Thread-126327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:20:22.885 [DEBUG] [Thread-126327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:20:22.894 [DEBUG] [Thread-126327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:20:22.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:20:22.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:20:22.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:20:22.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:20:22.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:20:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:20:22.928 [DEBUG] [Thread-126327] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:20:22.985 [DEBUG] [Thread-126329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:23.462 [DEBUG] [Thread-126330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:26.279 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:26.280 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:38.052 [DEBUG] [Thread-126331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:52.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:20:52.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:20:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:20:53.087 [DEBUG] [Thread-126332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:20:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 20, 27), 11.46, 45.74, 0.0, 23.33, 14.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:20:53.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:20:27
2025-12-04T00:20:53.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:20:53.898 [DEBUG] [Thread-126333] [transport.py] [_log()] starting thread (client mode): 0xa514f8e0
2025-12-04T00:20:53.898 [DEBUG] [Thread-126333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:20:53.918 [DEBUG] [Thread-126333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:20:53.918 [INFO] [Thread-126333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:20:53.921 [DEBUG] [Thread-126333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] client lang: <none>
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] server lang: <none>
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] kex follows: False
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] Compression: none
2025-12-04T00:20:53.922 [DEBUG] [Thread-126333] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:20:53.939 [DEBUG] [Thread-126333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:20:53.939 [DEBUG] [Thread-126333] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:20:53.940 [DEBUG] [Thread-126333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:20:53.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:20:53.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:20:53.941 [DEBUG] [Thread-126333] [transport.py] [_log()] userauth is OK
2025-12-04T00:20:53.942 [DEBUG] [Thread-126333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:20:53.942 [DEBUG] [Thread-126333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:20:53.942 [DEBUG] [Thread-126333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:20:53.942 [DEBUG] [Thread-126333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:20:53.966 [INFO] [Thread-126333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:20:53.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:20:54.596 [DEBUG] [Thread-126333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:20:54.597 [DEBUG] [Thread-126333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:20:54.597 [DEBUG] [Thread-126333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:20:54.638 [DEBUG] [Thread-126333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:20:54.638 [DEBUG] [Thread-126333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:20:54.641 [DEBUG] [Thread-126333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:20:54.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:20:54.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:20:54.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:20:54.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:20:54.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:20:54.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:20:54.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:20:54.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:20:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:20:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.930950 -999.00  +14.00  21.38     50   +4.00 1 1 1 1 1     0    0 7.28 -113.99 ZNESW 17.8 21.4 142.6 25.5 14.5 -24.7 14.4 -24.2 14.2 -22.8 14.5 -23.6
2025-12-04T00:20:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:20:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:20:54.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.930950
2025-12-04T00:20:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:20:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:20:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:20:54.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:20:54.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:20:54.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:20:27', tmtdew=11.46, humidity=45.74, cloud=0.0, wind=23.33, temperature=14.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:20:27', seeing=1.23, atlas_timestamp='2025-12-03T22:20:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.047750000000000625, 0.07624999999999993, 0.0182500000000001, 0.006999999999999673, 0.0705000000000009, 0.07925000000000004, -0.13100000000000023, -0.020749999999999602, 0.009499999999999176, 0.057500000000000995, 0.07874999999999943, 0.005499999999999616, 0.09299999999999997, 0.05424999999999969, -0.014500000000001734, -0.0710000000000015, 0.045249999999999346, 0.059499999999999886, 0.08199999999999896, 0.029249999999999332, 0.13449999999999918, 0.044249999999998124, -0.025749999999998607, 0.00975000000000037, 0.0389999999999997, 0.014499999999999957, -0.010249999999999204, 0.09950000000000081, 0.1330000000000009, 0.0940000000000012, -0.1454999999999984, 0.028999999999999915, 0.09324999999999939], zp_timestamp='2025-12-03T22:16:00')
2025-12-04T00:20:54.667 [DEBUG] [Thread-126333] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:20:54.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:20:54.767 [DEBUG] [Thread-126336] [transport.py] [_log()] starting thread (client mode): 0xa51ba920
2025-12-04T00:20:54.767 [DEBUG] [Thread-126336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:20:54.781 [DEBUG] [Thread-126336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:20:54.782 [INFO] [Thread-126336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:20:54.789 [DEBUG] [Thread-126336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] client lang: <none>
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] server lang: <none>
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] kex follows: False
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:20:54.790 [DEBUG] [Thread-126336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:20:54.791 [DEBUG] [Thread-126336] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:20:54.791 [DEBUG] [Thread-126336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:20:54.791 [DEBUG] [Thread-126336] [transport.py] [_log()] Compression: none
2025-12-04T00:20:54.791 [DEBUG] [Thread-126336] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:20:54.847 [DEBUG] [Thread-126336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:20:54.848 [DEBUG] [Thread-126336] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:20:54.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:20:54.849 [DEBUG] [Thread-126336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:20:54.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:20:54.903 [DEBUG] [Thread-126336] [transport.py] [_log()] userauth is OK
2025-12-04T00:20:54.904 [DEBUG] [Thread-126336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:20:54.904 [DEBUG] [Thread-126336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:20:54.904 [DEBUG] [Thread-126336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:20:54.904 [DEBUG] [Thread-126336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:20:54.924 [INFO] [Thread-126336] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:20:54.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:20:54.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:20:55.765 [DEBUG] [Thread-126336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:20:55.765 [DEBUG] [Thread-126336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:20:55.813 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:20:55.813 [DEBUG] [Thread-126336] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:20:55.822 [DEBUG] [Thread-126336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:20:55.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:20:55.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:20:55.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:20:55.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:20:55.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:20:55.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:20:55.857 [DEBUG] [Thread-126336] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:21:08.121 [DEBUG] [Thread-126338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:12.262 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:15.421 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:20.573 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:23.178 [DEBUG] [Thread-126339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:23.521 [DEBUG] [Thread-126340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:25.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:21:25.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:21:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:21:26.039 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:26.477 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:26.478 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 20, 59), 11.41, 46.24, 0.0, 25.07, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:21:26.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:20:59
2025-12-04T00:21:26.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:21:26.881 [DEBUG] [Thread-126341] [transport.py] [_log()] starting thread (client mode): 0xa51ba620
2025-12-04T00:21:26.881 [DEBUG] [Thread-126341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:21:26.901 [DEBUG] [Thread-126341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:21:26.901 [INFO] [Thread-126341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:21:26.902 [DEBUG] [Thread-126341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] client lang: <none>
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] server lang: <none>
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] kex follows: False
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] Compression: none
2025-12-04T00:21:26.903 [DEBUG] [Thread-126341] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:21:26.914 [DEBUG] [Thread-126341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:21:26.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:21:26.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] userauth is OK
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:21:26.915 [DEBUG] [Thread-126341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:21:26.930 [INFO] [Thread-126341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:21:26.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:21:27.533 [DEBUG] [Thread-126341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:21:27.533 [DEBUG] [Thread-126341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:21:27.533 [DEBUG] [Thread-126341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:21:27.574 [DEBUG] [Thread-126341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:21:27.574 [DEBUG] [Thread-126341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:21:27.575 [DEBUG] [Thread-126341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:21:27.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:21:27.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:21:27.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:21:27.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:21:27.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:21:27.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:21:27.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.931297 -999.00  +14.00  20.94     50   +4.00 1 1 1 1 1     0    0 7.55 -101.96 ZNESW 19.7 20.9 144.0 24.9 14.5 -24.8 14.4 -24.4 14.2 -22.8 14.4 -23.6
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.931297
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:21:27.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:20:59', tmtdew=11.41, humidity=46.24, cloud=0.0, wind=25.07, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:20:59', seeing=1.44, atlas_timestamp='2025-12-03T22:21:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:19:00')
2025-12-04T00:21:27.594 [DEBUG] [Thread-126341] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:21:27.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:21:27.687 [DEBUG] [Thread-126344] [transport.py] [_log()] starting thread (client mode): 0xa51cefb0
2025-12-04T00:21:27.687 [DEBUG] [Thread-126344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:21:27.702 [DEBUG] [Thread-126344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:21:27.702 [INFO] [Thread-126344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:21:27.710 [DEBUG] [Thread-126344] [transport.py] [_log()] client lang: <none>
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] server lang: <none>
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] kex follows: False
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] Compression: none
2025-12-04T00:21:27.711 [DEBUG] [Thread-126344] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:21:27.764 [DEBUG] [Thread-126344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:21:27.764 [DEBUG] [Thread-126344] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:21:27.765 [DEBUG] [Thread-126344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:21:27.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:21:27.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:21:27.822 [DEBUG] [Thread-126344] [transport.py] [_log()] userauth is OK
2025-12-04T00:21:27.822 [DEBUG] [Thread-126344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:21:27.822 [DEBUG] [Thread-126344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:21:27.822 [DEBUG] [Thread-126344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:21:27.822 [DEBUG] [Thread-126344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:21:27.836 [INFO] [Thread-126344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:21:27.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:21:27.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:21:28.689 [DEBUG] [Thread-126344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:21:28.689 [DEBUG] [Thread-126344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:21:28.737 [DEBUG] [Thread-126344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:21:28.737 [DEBUG] [Thread-126344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:21:28.746 [DEBUG] [Thread-126344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:21:28.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:21:28.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:21:28.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:21:28.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:21:28.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:21:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:21:28.777 [DEBUG] [Thread-126344] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:21:38.214 [DEBUG] [Thread-126346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:45.328 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:49.820 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:53.267 [DEBUG] [Thread-126347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:58.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:21:58.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:21:58.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:21:59.078 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:21:59.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 21, 31), 11.42, 46.21, 0.0, 25.0, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:21:59.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:21:31
2025-12-04T00:21:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:21:59.761 [DEBUG] [Thread-126348] [transport.py] [_log()] starting thread (client mode): 0xa27783a0
2025-12-04T00:21:59.761 [DEBUG] [Thread-126348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:21:59.776 [DEBUG] [Thread-126348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:21:59.776 [INFO] [Thread-126348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] client lang: <none>
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] server lang: <none>
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] kex follows: False
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:21:59.777 [DEBUG] [Thread-126348] [transport.py] [_log()] Compression: none
2025-12-04T00:21:59.778 [DEBUG] [Thread-126348] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:21:59.786 [DEBUG] [Thread-126348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:21:59.786 [DEBUG] [Thread-126348] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:21:59.787 [DEBUG] [Thread-126348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:21:59.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:21:59.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:21:59.788 [DEBUG] [Thread-126348] [transport.py] [_log()] userauth is OK
2025-12-04T00:21:59.788 [DEBUG] [Thread-126348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:21:59.789 [DEBUG] [Thread-126348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:21:59.789 [DEBUG] [Thread-126348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:21:59.789 [DEBUG] [Thread-126348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:21:59.806 [INFO] [Thread-126348] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:21:59.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:22:00.392 [DEBUG] [Thread-126348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:22:00.393 [DEBUG] [Thread-126348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:22:00.393 [DEBUG] [Thread-126348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:22:00.434 [DEBUG] [Thread-126348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:22:00.434 [DEBUG] [Thread-126348] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:22:00.436 [DEBUG] [Thread-126348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:22:00.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:22:00.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:22:00.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:22:00.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:22:00.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:22:00.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:22:00.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:22:00.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:22:00.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:22:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.931645 -999.00  +14.00  17.43     50   +4.00 1 1 1 1 1     0    0 7.68 -97.88 ZNESW 20.3 17.4 139.4 24.4 14.5 -24.9 14.4 -24.3 14.2 -22.7 14.4 -23.7
2025-12-04T00:22:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:22:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:22:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.931645
2025-12-04T00:22:00.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:22:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:22:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:22:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:22:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:22:00.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:21:31', tmtdew=11.42, humidity=46.21, cloud=0.0, wind=25.0, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:21:31', seeing=1.29, atlas_timestamp='2025-12-03T22:21:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:19:00')
2025-12-04T00:22:00.460 [DEBUG] [Thread-126348] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:22:00.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:22:00.565 [DEBUG] [Thread-126351] [transport.py] [_log()] starting thread (client mode): 0xa2779b10
2025-12-04T00:22:00.566 [DEBUG] [Thread-126351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:22:00.580 [DEBUG] [Thread-126351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:22:00.580 [INFO] [Thread-126351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:22:00.587 [DEBUG] [Thread-126351] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:22:00.587 [DEBUG] [Thread-126351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] client lang: <none>
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] server lang: <none>
2025-12-04T00:22:00.588 [DEBUG] [Thread-126351] [transport.py] [_log()] kex follows: False
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] Compression: none
2025-12-04T00:22:00.589 [DEBUG] [Thread-126351] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:22:00.645 [DEBUG] [Thread-126351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:22:00.645 [DEBUG] [Thread-126351] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:22:00.645 [DEBUG] [Thread-126351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:22:00.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:22:00.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:22:00.702 [DEBUG] [Thread-126351] [transport.py] [_log()] userauth is OK
2025-12-04T00:22:00.702 [DEBUG] [Thread-126351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:22:00.702 [DEBUG] [Thread-126351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:22:00.703 [DEBUG] [Thread-126351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:22:00.703 [DEBUG] [Thread-126351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:22:00.725 [INFO] [Thread-126351] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:22:00.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:22:00.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:22:01.565 [DEBUG] [Thread-126351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:22:01.565 [DEBUG] [Thread-126351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:22:01.612 [DEBUG] [Thread-126351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:22:01.613 [DEBUG] [Thread-126351] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:22:01.626 [DEBUG] [Thread-126351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:22:01.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:22:01.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:22:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:22:01.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:22:01.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:22:01.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:22:01.659 [DEBUG] [Thread-126351] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:22:03.546 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:08.298 [DEBUG] [Thread-126353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:09.593 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:14.073 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:23.345 [DEBUG] [Thread-126354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:23.580 [DEBUG] [Thread-126355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:26.677 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:26.678 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:31.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:22:31.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:22:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:22:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 22, 3), 11.41, 46.24, 0.0, 24.03, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:22:32.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:22:03
2025-12-04T00:22:32.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:22:32.621 [DEBUG] [Thread-126356] [transport.py] [_log()] starting thread (client mode): 0xa51b8be0
2025-12-04T00:22:32.621 [DEBUG] [Thread-126356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:22:32.641 [DEBUG] [Thread-126356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:22:32.641 [INFO] [Thread-126356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:32.643 [DEBUG] [Thread-126356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] client lang: <none>
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] server lang: <none>
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] kex follows: False
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] Compression: none
2025-12-04T00:22:32.644 [DEBUG] [Thread-126356] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:22:32.655 [DEBUG] [Thread-126356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:22:32.656 [DEBUG] [Thread-126356] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:22:32.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:22:32.657 [DEBUG] [Thread-126356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:22:32.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:22:32.659 [DEBUG] [Thread-126356] [transport.py] [_log()] userauth is OK
2025-12-04T00:22:32.659 [DEBUG] [Thread-126356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:22:32.659 [DEBUG] [Thread-126356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:22:32.659 [DEBUG] [Thread-126356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:22:32.659 [DEBUG] [Thread-126356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:22:32.674 [INFO] [Thread-126356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:22:32.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:22:33.265 [DEBUG] [Thread-126356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:22:33.265 [DEBUG] [Thread-126356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:22:33.265 [DEBUG] [Thread-126356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:22:33.306 [DEBUG] [Thread-126356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:22:33.306 [DEBUG] [Thread-126356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:22:33.309 [DEBUG] [Thread-126356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:22:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:22:33.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:22:33.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:22:33.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:22:33.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:22:33.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:22:33.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:22:33.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:22:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:22:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.931645 -999.00  +14.00  17.43     50   +4.00 1 1 1 1 1     0    0 7.68 -97.88 ZNESW 20.3 17.4 139.4 24.4 14.5 -24.9 14.4 -24.3 14.2 -22.7 14.4 -23.7
2025-12-04T00:22:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:22:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:22:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.931645
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:22:33.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:22:03', tmtdew=11.41, humidity=46.24, cloud=0.0, wind=24.03, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:22:03', seeing=1.25, atlas_timestamp='2025-12-03T22:21:34.128', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:19:00')
2025-12-04T00:22:33.336 [DEBUG] [Thread-126356] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:22:33.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:22:33.436 [DEBUG] [Thread-126359] [transport.py] [_log()] starting thread (client mode): 0x9fd23550
2025-12-04T00:22:33.436 [DEBUG] [Thread-126359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:22:33.450 [DEBUG] [Thread-126359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:22:33.451 [INFO] [Thread-126359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:33.458 [DEBUG] [Thread-126359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] client lang: <none>
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] server lang: <none>
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] kex follows: False
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] Compression: none
2025-12-04T00:22:33.459 [DEBUG] [Thread-126359] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:22:33.517 [DEBUG] [Thread-126359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:22:33.517 [DEBUG] [Thread-126359] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:22:33.518 [DEBUG] [Thread-126359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:22:33.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:22:33.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:22:33.574 [DEBUG] [Thread-126359] [transport.py] [_log()] userauth is OK
2025-12-04T00:22:33.574 [DEBUG] [Thread-126359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:22:33.574 [DEBUG] [Thread-126359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:22:33.574 [DEBUG] [Thread-126359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:22:33.575 [DEBUG] [Thread-126359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:22:33.597 [INFO] [Thread-126359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:22:33.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:22:33.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:22:34.383 [DEBUG] [Thread-126359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:22:34.383 [DEBUG] [Thread-126359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:22:34.432 [DEBUG] [Thread-126359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:22:34.432 [DEBUG] [Thread-126359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:22:34.441 [DEBUG] [Thread-126359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:22:34.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:22:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:22:34.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:22:34.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:22:34.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:22:34.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:22:34.475 [DEBUG] [Thread-126359] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:22:38.382 [DEBUG] [Thread-126361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:22:53.441 [DEBUG] [Thread-126362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:04.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:23:04.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:23:04.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:23:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 22, 35), 11.48, 45.82, 0.0, 25.94, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:23:05.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:22:35
2025-12-04T00:23:05.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:23:05.436 [DEBUG] [Thread-126363] [transport.py] [_log()] starting thread (client mode): 0xa277b6d0
2025-12-04T00:23:05.436 [DEBUG] [Thread-126363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:23:05.456 [DEBUG] [Thread-126363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:23:05.456 [INFO] [Thread-126363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] client lang: <none>
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] server lang: <none>
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] kex follows: False
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:23:05.459 [DEBUG] [Thread-126363] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:23:05.460 [DEBUG] [Thread-126363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:23:05.460 [DEBUG] [Thread-126363] [transport.py] [_log()] Compression: none
2025-12-04T00:23:05.460 [DEBUG] [Thread-126363] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:23:05.475 [DEBUG] [Thread-126363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:23:05.476 [DEBUG] [Thread-126363] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:23:05.476 [DEBUG] [Thread-126363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:23:05.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:23:05.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:23:05.478 [DEBUG] [Thread-126363] [transport.py] [_log()] userauth is OK
2025-12-04T00:23:05.478 [DEBUG] [Thread-126363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:23:05.479 [DEBUG] [Thread-126363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:23:05.479 [DEBUG] [Thread-126363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:23:05.479 [DEBUG] [Thread-126363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:23:05.501 [INFO] [Thread-126363] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:23:05.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:23:06.311 [DEBUG] [Thread-126363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:23:06.312 [DEBUG] [Thread-126363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:23:06.312 [DEBUG] [Thread-126363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:23:06.353 [DEBUG] [Thread-126363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:23:06.353 [DEBUG] [Thread-126363] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:23:06.356 [DEBUG] [Thread-126363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:23:06.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:23:06.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:23:06.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:23:06.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:23:06.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:23:06.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:23:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:23:06.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:23:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:23:06.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.931992 -999.00  +14.10  16.11     50   +4.10 1 1 1 1 1     0    0 7.73 -96.29 ZNESW 22.6 16.1 131.4 24.1 14.5 -24.7 14.3 -24.1 14.1 -22.7 14.4 -23.5
2025-12-04T00:23:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:23:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:23:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.931992
2025-12-04T00:23:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:23:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:23:06.378 [DEBUG] [Thread-126363] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:23:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:23:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:23:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:23:06.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:22:35', tmtdew=11.48, humidity=45.82, cloud=0.0, wind=25.94, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:22:35', seeing=1.4, atlas_timestamp='2025-12-03T22:22:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:19:00')
2025-12-04T00:23:06.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:23:06.481 [DEBUG] [Thread-126366] [transport.py] [_log()] starting thread (client mode): 0xa7bd3070
2025-12-04T00:23:06.481 [DEBUG] [Thread-126366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:23:06.495 [DEBUG] [Thread-126366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:23:06.496 [INFO] [Thread-126366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:06.503 [DEBUG] [Thread-126366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] client lang: <none>
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] server lang: <none>
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] kex follows: False
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] Compression: none
2025-12-04T00:23:06.504 [DEBUG] [Thread-126366] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:23:06.561 [DEBUG] [Thread-126366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:23:06.562 [DEBUG] [Thread-126366] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:23:06.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:23:06.562 [DEBUG] [Thread-126366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:23:06.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:23:06.617 [DEBUG] [Thread-126366] [transport.py] [_log()] userauth is OK
2025-12-04T00:23:06.617 [DEBUG] [Thread-126366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:23:06.617 [DEBUG] [Thread-126366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:23:06.618 [DEBUG] [Thread-126366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:23:06.618 [DEBUG] [Thread-126366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:23:06.637 [INFO] [Thread-126366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:23:06.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:23:06.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:23:07.488 [DEBUG] [Thread-126366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:23:07.488 [DEBUG] [Thread-126366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:23:07.536 [DEBUG] [Thread-126366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:23:07.536 [DEBUG] [Thread-126366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:23:07.545 [DEBUG] [Thread-126366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:23:07.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:23:07.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:23:07.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:23:07.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:23:07.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:23:07.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:23:07.579 [DEBUG] [Thread-126366] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:23:08.476 [DEBUG] [Thread-126368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:22.301 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:23.523 [DEBUG] [Thread-126369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:23.632 [DEBUG] [Thread-126370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:26.373 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:26.877 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:26.878 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:37.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:23:37.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:23:37.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:23:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 23, 7), 11.46, 45.91, 0.0, 25.58, 14.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:23:38.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:23:07
2025-12-04T00:23:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:23:38.554 [DEBUG] [Thread-126371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:38.564 [DEBUG] [Thread-126372] [transport.py] [_log()] starting thread (client mode): 0xa27448e0
2025-12-04T00:23:38.564 [DEBUG] [Thread-126372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:23:38.583 [DEBUG] [Thread-126372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:23:38.584 [INFO] [Thread-126372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:23:38.586 [DEBUG] [Thread-126372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] client lang: <none>
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] server lang: <none>
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] kex follows: False
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] Compression: none
2025-12-04T00:23:38.587 [DEBUG] [Thread-126372] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:23:38.609 [DEBUG] [Thread-126372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:23:38.609 [DEBUG] [Thread-126372] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:23:38.610 [DEBUG] [Thread-126372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:23:38.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:23:38.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:23:38.611 [DEBUG] [Thread-126372] [transport.py] [_log()] userauth is OK
2025-12-04T00:23:38.612 [DEBUG] [Thread-126372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:23:38.612 [DEBUG] [Thread-126372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:23:38.612 [DEBUG] [Thread-126372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:23:38.612 [DEBUG] [Thread-126372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:23:38.629 [INFO] [Thread-126372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:23:38.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:23:39.265 [DEBUG] [Thread-126372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:23:39.265 [DEBUG] [Thread-126372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:23:39.266 [DEBUG] [Thread-126372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:23:39.306 [DEBUG] [Thread-126372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:23:39.306 [DEBUG] [Thread-126372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:23:39.309 [DEBUG] [Thread-126372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:23:39.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:23:39.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:23:39.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:23:39.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:23:39.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:23:39.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:23:39.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:23:39.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:23:39.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:23:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.932339 -999.00  +14.10  19.65     50   +4.10 1 1 1 1 1     0    0 7.84 -94.52 ZNESW 18.4 19.6 144.2 30.5 14.5 -24.7 14.3 -24.3 14.2 -22.7 14.4 -23.5
2025-12-04T00:23:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:23:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:23:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.932339
2025-12-04T00:23:39.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:23:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:23:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:23:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:23:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:23:39.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:23:07', tmtdew=11.46, humidity=45.91, cloud=0.0, wind=25.58, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:23:07', seeing=1.4, atlas_timestamp='2025-12-03T22:22:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:19:00')
2025-12-04T00:23:39.332 [DEBUG] [Thread-126372] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:23:39.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:23:39.435 [DEBUG] [Thread-126375] [transport.py] [_log()] starting thread (client mode): 0xa2779b10
2025-12-04T00:23:39.436 [DEBUG] [Thread-126375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:23:39.450 [DEBUG] [Thread-126375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:23:39.450 [INFO] [Thread-126375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] client lang: <none>
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] server lang: <none>
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] kex follows: False
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:23:39.458 [DEBUG] [Thread-126375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:23:39.459 [DEBUG] [Thread-126375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:23:39.459 [DEBUG] [Thread-126375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:23:39.459 [DEBUG] [Thread-126375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:23:39.459 [DEBUG] [Thread-126375] [transport.py] [_log()] Compression: none
2025-12-04T00:23:39.459 [DEBUG] [Thread-126375] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:23:39.521 [DEBUG] [Thread-126375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:23:39.521 [DEBUG] [Thread-126375] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:23:39.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:23:39.522 [DEBUG] [Thread-126375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:23:39.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:23:39.577 [DEBUG] [Thread-126375] [transport.py] [_log()] userauth is OK
2025-12-04T00:23:39.577 [DEBUG] [Thread-126375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:23:39.577 [DEBUG] [Thread-126375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:23:39.577 [DEBUG] [Thread-126375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:23:39.577 [DEBUG] [Thread-126375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:23:39.596 [INFO] [Thread-126375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:23:39.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:23:39.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:23:40.426 [DEBUG] [Thread-126375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:23:40.426 [DEBUG] [Thread-126375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:23:40.474 [DEBUG] [Thread-126375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:23:40.475 [DEBUG] [Thread-126375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:23:40.483 [DEBUG] [Thread-126375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:23:40.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:23:40.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:23:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:23:40.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:23:40.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:23:40.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:23:40.514 [DEBUG] [Thread-126375] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:23:47.808 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:23:53.585 [DEBUG] [Thread-126377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:08.231 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:08.638 [DEBUG] [Thread-126378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:24:10.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:24:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:24:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 23, 39), 11.39, 46.32, 0.0, 22.29, 14.07, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:24:11.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:23:39
2025-12-04T00:24:11.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:24:11.495 [DEBUG] [Thread-126379] [transport.py] [_log()] starting thread (client mode): 0x9fd22ec0
2025-12-04T00:24:11.495 [DEBUG] [Thread-126379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:24:11.516 [DEBUG] [Thread-126379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:24:11.516 [INFO] [Thread-126379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] client lang: <none>
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] server lang: <none>
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] kex follows: False
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:24:11.519 [DEBUG] [Thread-126379] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:24:11.520 [DEBUG] [Thread-126379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:24:11.520 [DEBUG] [Thread-126379] [transport.py] [_log()] Compression: none
2025-12-04T00:24:11.520 [DEBUG] [Thread-126379] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:24:11.537 [DEBUG] [Thread-126379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:24:11.538 [DEBUG] [Thread-126379] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:24:11.538 [DEBUG] [Thread-126379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:24:11.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:24:11.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:24:11.540 [DEBUG] [Thread-126379] [transport.py] [_log()] userauth is OK
2025-12-04T00:24:11.540 [DEBUG] [Thread-126379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:24:11.541 [DEBUG] [Thread-126379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:24:11.541 [DEBUG] [Thread-126379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:24:11.541 [DEBUG] [Thread-126379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:24:11.558 [INFO] [Thread-126379] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:24:11.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:24:12.332 [DEBUG] [Thread-126379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:24:12.332 [DEBUG] [Thread-126379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:24:12.332 [DEBUG] [Thread-126379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:24:12.374 [DEBUG] [Thread-126379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:24:12.374 [DEBUG] [Thread-126379] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:24:12.375 [DEBUG] [Thread-126379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:24:12.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:24:12.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:24:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:24:12.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:24:12.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:24:12.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:24:12.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.933033 -999.00  +14.10  18.26     50   +4.10 1 1 1 1 1     0    0 7.99 -84.21 ZNESW 18.3 18.3 143.6 24.9 14.5 -24.8 14.4 -24.3 14.2 -22.9 14.5 -23.6
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.933033
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:24:12.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:23:39', tmtdew=11.39, humidity=46.32, cloud=0.0, wind=22.29, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:23:39', seeing=1.89, atlas_timestamp='2025-12-03T22:23:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:23:00')
2025-12-04T00:24:12.393 [DEBUG] [Thread-126379] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:24:12.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:24:23.673 [DEBUG] [Thread-126382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:23.699 [DEBUG] [Thread-126383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:27.080 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:27.081 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:28.654 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:38.722 [DEBUG] [Thread-126384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:49.165 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:24:53.756 [DEBUG] [Thread-126385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:08.794 [DEBUG] [Thread-126386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:09.601 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:23.756 [DEBUG] [Thread-126387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:23.831 [DEBUG] [Thread-126388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:27.282 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:27.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:30.095 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:38.868 [DEBUG] [Thread-126389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:50.563 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:25:53.903 [DEBUG] [Thread-126390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:08.936 [DEBUG] [Thread-126391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:10.989 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:23.823 [DEBUG] [Thread-126392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:23.971 [DEBUG] [Thread-126393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:24.022 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-04T00:26:27.480 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:27.481 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:31.390 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:39.007 [DEBUG] [Thread-126394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:51.808 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:54.042 [DEBUG] [Thread-126395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:26:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:26:54.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:26:54.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:26:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 26, 52), 11.38, 46.32, 0.0, 24.97, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:26:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:26:52
2025-12-04T00:26:54.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:26:55.012 [DEBUG] [Thread-126396] [transport.py] [_log()] starting thread (client mode): 0xa2778fd0
2025-12-04T00:26:55.012 [DEBUG] [Thread-126396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:26:55.032 [DEBUG] [Thread-126396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:26:55.032 [INFO] [Thread-126396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:26:55.035 [DEBUG] [Thread-126396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] client lang: <none>
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] server lang: <none>
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] kex follows: False
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] Compression: none
2025-12-04T00:26:55.036 [DEBUG] [Thread-126396] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:26:55.054 [DEBUG] [Thread-126396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:26:55.054 [DEBUG] [Thread-126396] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:26:55.054 [DEBUG] [Thread-126396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:26:55.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:26:55.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:26:55.057 [DEBUG] [Thread-126396] [transport.py] [_log()] userauth is OK
2025-12-04T00:26:55.057 [DEBUG] [Thread-126396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:26:55.057 [DEBUG] [Thread-126396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:26:55.057 [DEBUG] [Thread-126396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:26:55.057 [DEBUG] [Thread-126396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:26:55.081 [INFO] [Thread-126396] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:26:55.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:26:55.739 [DEBUG] [Thread-126396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:26:55.739 [DEBUG] [Thread-126396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:26:55.739 [DEBUG] [Thread-126396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:26:55.780 [DEBUG] [Thread-126396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:26:55.780 [DEBUG] [Thread-126396] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:26:55.783 [DEBUG] [Thread-126396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:26:55.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:26:55.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:26:55.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:26:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:26:55.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:26:55.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:26:55.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:26:55.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:26:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:26:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.934769 -999.00  +14.10  18.50     50   +4.10 1 1 1 1 1     0    0 8.42 -63.05 ZNESW 18.2 18.5 150.4 25.7 14.4 -24.8 14.3 -24.2 14.2 -22.6 14.4 -23.5
2025-12-04T00:26:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:26:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:26:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.934769
2025-12-04T00:26:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:26:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:26:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:26:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:26:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:26:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:26:52', tmtdew=11.38, humidity=46.32, cloud=0.0, wind=24.97, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:26:52', seeing=1.45, atlas_timestamp='2025-12-03T22:26:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, 0.02725000000000044, 0.016250000000001208, -0.0015000000000000568, -0.028499999999999304, 0.09224999999999994, -0.028999999999999915, -0.10624999999999929, 0.03399999999999892, 0.025500000000000966, 0.05524999999999913, 0.03649999999999842, 0.13149999999999906, 0.04525000000000112, -0.23100000000000165, -0.09500000000000064, 0.029749999999999943, -0.010500000000000398, 0.05699999999999861, -0.00575000000000081, 0.09499999999999886, 0.013749999999998153, -0.025749999999998607, -0.029249999999999332, 0.03199999999999825, 0.04399999999999871, -0.03824999999999967, 0.07150000000000034, 0.06600000000000072, 0.06800000000000139, -0.4009999999999998, 0.019000000000000128, 0.0417500000000004], zp_timestamp='2025-12-03T22:23:00')
2025-12-04T00:26:55.808 [DEBUG] [Thread-126396] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:26:55.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:26:55.913 [DEBUG] [Thread-126399] [transport.py] [_log()] starting thread (client mode): 0x9fd217e0
2025-12-04T00:26:55.913 [DEBUG] [Thread-126399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:26:55.934 [DEBUG] [Thread-126399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:26:55.934 [INFO] [Thread-126399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:26:55.947 [DEBUG] [Thread-126399] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:26:55.948 [DEBUG] [Thread-126399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] client lang: <none>
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] server lang: <none>
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] kex follows: False
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] Compression: none
2025-12-04T00:26:55.949 [DEBUG] [Thread-126399] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:26:56.006 [DEBUG] [Thread-126399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:26:56.006 [DEBUG] [Thread-126399] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:26:56.007 [DEBUG] [Thread-126399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:26:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:26:56.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:26:56.062 [DEBUG] [Thread-126399] [transport.py] [_log()] userauth is OK
2025-12-04T00:26:56.063 [DEBUG] [Thread-126399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:26:56.063 [DEBUG] [Thread-126399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:26:56.063 [DEBUG] [Thread-126399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:26:56.063 [DEBUG] [Thread-126399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:26:56.082 [INFO] [Thread-126399] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:26:56.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:26:56.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:26:56.922 [DEBUG] [Thread-126399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:26:56.922 [DEBUG] [Thread-126399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:26:56.970 [DEBUG] [Thread-126399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:26:56.970 [DEBUG] [Thread-126399] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:26:56.979 [DEBUG] [Thread-126399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:26:56.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:26:56.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:26:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:26:57.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:26:57.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:26:57.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:26:57.013 [DEBUG] [Thread-126399] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:27:09.081 [DEBUG] [Thread-126401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:12.222 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:23.892 [DEBUG] [Thread-126402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:24.137 [DEBUG] [Thread-126403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:27:27.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:27:27.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:27:27.684 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:27.685 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 27, 24), 11.42, 46.21, 0.0, 23.59, 14.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:27:24
2025-12-04T00:27:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:27:28.011 [DEBUG] [Thread-126404] [transport.py] [_log()] starting thread (client mode): 0x9fd227a0
2025-12-04T00:27:28.011 [DEBUG] [Thread-126404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:27:28.032 [DEBUG] [Thread-126404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:27:28.033 [INFO] [Thread-126404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:27:28.035 [DEBUG] [Thread-126404] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:27:28.036 [DEBUG] [Thread-126404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] client lang: <none>
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] server lang: <none>
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] kex follows: False
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:27:28.037 [DEBUG] [Thread-126404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:27:28.038 [DEBUG] [Thread-126404] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:27:28.038 [DEBUG] [Thread-126404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:27:28.038 [DEBUG] [Thread-126404] [transport.py] [_log()] Compression: none
2025-12-04T00:27:28.038 [DEBUG] [Thread-126404] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:27:28.054 [DEBUG] [Thread-126404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:27:28.055 [DEBUG] [Thread-126404] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:27:28.055 [DEBUG] [Thread-126404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:27:28.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:27:28.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:27:28.058 [DEBUG] [Thread-126404] [transport.py] [_log()] userauth is OK
2025-12-04T00:27:28.058 [DEBUG] [Thread-126404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:27:28.058 [DEBUG] [Thread-126404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:27:28.058 [DEBUG] [Thread-126404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:27:28.058 [DEBUG] [Thread-126404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:27:28.091 [INFO] [Thread-126404] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:27:28.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:27:28.756 [DEBUG] [Thread-126404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:27:28.757 [DEBUG] [Thread-126404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:27:28.757 [DEBUG] [Thread-126404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:27:28.798 [DEBUG] [Thread-126404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:27:28.798 [DEBUG] [Thread-126404] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:27:28.801 [DEBUG] [Thread-126404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:27:28.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:27:28.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:27:28.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:27:28.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:27:28.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:27:28.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:27:28.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.935464 -999.00  +14.00  21.07     51   +4.10 1 1 1 1 1     0    0 8.54 -59.87 ZNESW 18.7 21.1 143.6 24.1 14.4 -24.9 14.3 -24.3 14.1 -22.8 14.4 -23.6
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.935464
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:27:24', tmtdew=11.42, humidity=46.21, cloud=0.0, wind=23.59, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:27:24', seeing=1.31, atlas_timestamp='2025-12-03T22:27:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, -0.022749999999998494, 0.024250000000000327, 0.01750000000000007, 0.041999999999999815, 0.08025000000000126, -0.06799999999999962, -0.10174999999999912, 0.02549999999999919, 0.028999999999999915, 0.040749999999999176, -0.0009999999999994458, 0.09949999999999903, 0.1042500000000004, -0.034000000000000696, -0.11050000000000182, 0.008250000000000313, 0.0065000000000008384, 0.024499999999997968, -0.028750000000002274, 0.12199999999999811, -0.0012500000000006395, -0.029749999999999943, -0.008750000000000924, 0.03549999999999898, 0.031000000000000583, -0.017250000000000654, 0.06349999999999945, 0.10800000000000054, -0.021999999999998465, -0.2469999999999981, -0.0034999999999989484, 0.01574999999999882], zp_timestamp='2025-12-03T22:26:00')
2025-12-04T00:27:28.828 [DEBUG] [Thread-126404] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:27:28.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:27:28.931 [DEBUG] [Thread-126407] [transport.py] [_log()] starting thread (client mode): 0xa7bd0bb0
2025-12-04T00:27:28.931 [DEBUG] [Thread-126407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:27:28.947 [DEBUG] [Thread-126407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:27:28.947 [INFO] [Thread-126407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:27:28.954 [DEBUG] [Thread-126407] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] client lang: <none>
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] server lang: <none>
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] kex follows: False
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:27:28.955 [DEBUG] [Thread-126407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:27:28.956 [DEBUG] [Thread-126407] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:27:28.956 [DEBUG] [Thread-126407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:27:28.956 [DEBUG] [Thread-126407] [transport.py] [_log()] Compression: none
2025-12-04T00:27:28.956 [DEBUG] [Thread-126407] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:27:29.013 [DEBUG] [Thread-126407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:27:29.014 [DEBUG] [Thread-126407] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:27:29.014 [DEBUG] [Thread-126407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:27:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:27:29.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:27:29.072 [DEBUG] [Thread-126407] [transport.py] [_log()] userauth is OK
2025-12-04T00:27:29.072 [DEBUG] [Thread-126407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:27:29.072 [DEBUG] [Thread-126407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:27:29.072 [DEBUG] [Thread-126407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:27:29.072 [DEBUG] [Thread-126407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:27:29.090 [INFO] [Thread-126407] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:27:29.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:27:29.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:27:29.955 [DEBUG] [Thread-126407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:27:29.956 [DEBUG] [Thread-126407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:27:30.005 [DEBUG] [Thread-126407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:27:30.005 [DEBUG] [Thread-126407] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:27:30.014 [DEBUG] [Thread-126407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:27:30.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:27:30.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:27:30.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:27:30.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:27:30.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:27:30.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:27:30.048 [DEBUG] [Thread-126407] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:27:32.683 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:39.173 [DEBUG] [Thread-126409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:53.102 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:27:54.234 [DEBUG] [Thread-126410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:00.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:28:00.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:28:00.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:28:00.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 27, 56), 11.36, 46.26, 0.0, 24.07, 14.07, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:28:00.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:27:56
2025-12-04T00:28:00.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:28:01.029 [DEBUG] [Thread-126411] [transport.py] [_log()] starting thread (client mode): 0xa2779450
2025-12-04T00:28:01.029 [DEBUG] [Thread-126411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:28:01.049 [DEBUG] [Thread-126411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:28:01.049 [INFO] [Thread-126411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:28:01.052 [DEBUG] [Thread-126411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] client lang: <none>
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] server lang: <none>
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] kex follows: False
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:28:01.053 [DEBUG] [Thread-126411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:28:01.054 [DEBUG] [Thread-126411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:28:01.054 [DEBUG] [Thread-126411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:28:01.054 [DEBUG] [Thread-126411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:28:01.054 [DEBUG] [Thread-126411] [transport.py] [_log()] Compression: none
2025-12-04T00:28:01.054 [DEBUG] [Thread-126411] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:28:01.071 [DEBUG] [Thread-126411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:28:01.071 [DEBUG] [Thread-126411] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:28:01.072 [DEBUG] [Thread-126411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:28:01.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:28:01.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:28:01.073 [DEBUG] [Thread-126411] [transport.py] [_log()] userauth is OK
2025-12-04T00:28:01.073 [DEBUG] [Thread-126411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:28:01.074 [DEBUG] [Thread-126411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:28:01.074 [DEBUG] [Thread-126411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:28:01.074 [DEBUG] [Thread-126411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:28:01.091 [INFO] [Thread-126411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:28:01.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:28:01.729 [DEBUG] [Thread-126411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:28:01.730 [DEBUG] [Thread-126411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:28:01.730 [DEBUG] [Thread-126411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:28:01.771 [DEBUG] [Thread-126411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:28:01.771 [DEBUG] [Thread-126411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:28:01.774 [DEBUG] [Thread-126411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:28:01.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:28:01.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:28:01.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:28:01.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:28:01.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:28:01.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:28:01.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:28:01.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:28:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:28:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.935811 -999.00  +14.00  16.14     51   +4.00 1 1 1 1 1     0    0 8.23 -59.81 ZNESW 19.2 16.1 140.6 22.5 14.4 -24.9 14.3 -24.3 14.1 -22.7 14.4 -23.6
2025-12-04T00:28:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:28:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:28:01.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.935811
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:28:01.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:27:56', tmtdew=11.36, humidity=46.26, cloud=0.0, wind=24.07, temperature=14.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:27:56', seeing=1.31, atlas_timestamp='2025-12-03T22:27:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, -0.022749999999998494, 0.024250000000000327, 0.01750000000000007, 0.041999999999999815, 0.08025000000000126, -0.06799999999999962, -0.10174999999999912, 0.02549999999999919, 0.028999999999999915, 0.040749999999999176, -0.0009999999999994458, 0.09949999999999903, 0.1042500000000004, -0.034000000000000696, -0.11050000000000182, 0.008250000000000313, 0.0065000000000008384, 0.024499999999997968, -0.028750000000002274, 0.12199999999999811, -0.0012500000000006395, -0.029749999999999943, -0.008750000000000924, 0.03549999999999898, 0.031000000000000583, -0.017250000000000654, 0.06349999999999945, 0.10800000000000054, -0.021999999999998465, -0.2469999999999981, -0.0034999999999989484, 0.01574999999999882], zp_timestamp='2025-12-03T22:26:00')
2025-12-04T00:28:01.800 [DEBUG] [Thread-126411] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:28:01.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:28:01.905 [DEBUG] [Thread-126414] [transport.py] [_log()] starting thread (client mode): 0xa7bd1cf0
2025-12-04T00:28:01.905 [DEBUG] [Thread-126414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:28:01.920 [DEBUG] [Thread-126414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:28:01.920 [INFO] [Thread-126414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:28:01.927 [DEBUG] [Thread-126414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] client lang: <none>
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] server lang: <none>
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] kex follows: False
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:28:01.928 [DEBUG] [Thread-126414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:28:01.929 [DEBUG] [Thread-126414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:28:01.929 [DEBUG] [Thread-126414] [transport.py] [_log()] Compression: none
2025-12-04T00:28:01.929 [DEBUG] [Thread-126414] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:28:01.992 [DEBUG] [Thread-126414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:28:01.993 [DEBUG] [Thread-126414] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:28:01.993 [DEBUG] [Thread-126414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:28:01.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:28:01.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:28:02.050 [DEBUG] [Thread-126414] [transport.py] [_log()] userauth is OK
2025-12-04T00:28:02.050 [DEBUG] [Thread-126414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:28:02.050 [DEBUG] [Thread-126414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:28:02.050 [DEBUG] [Thread-126414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:28:02.050 [DEBUG] [Thread-126414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:28:02.069 [INFO] [Thread-126414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:28:02.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:28:02.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:28:02.917 [DEBUG] [Thread-126414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:28:02.917 [DEBUG] [Thread-126414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:28:02.965 [DEBUG] [Thread-126414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:28:02.965 [DEBUG] [Thread-126414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:28:02.974 [DEBUG] [Thread-126414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:28:02.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:28:02.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:28:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:28:03.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:28:03.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:28:03.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:28:03.012 [DEBUG] [Thread-126414] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:28:09.266 [DEBUG] [Thread-126416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:13.516 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:23.969 [DEBUG] [Thread-126417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:24.328 [DEBUG] [Thread-126418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:27.882 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:27.884 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:33.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:28:33.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:28:33.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:28:33.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 28, 28), 11.39, 46.16, 0.0, 24.19, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:28:33.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:28:28
2025-12-04T00:28:33.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:28:33.939 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:34.031 [DEBUG] [Thread-126419] [transport.py] [_log()] starting thread (client mode): 0xa519aaa0
2025-12-04T00:28:34.031 [DEBUG] [Thread-126419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:28:34.051 [DEBUG] [Thread-126419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:28:34.051 [INFO] [Thread-126419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] client lang: <none>
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] server lang: <none>
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] kex follows: False
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] Compression: none
2025-12-04T00:28:34.054 [DEBUG] [Thread-126419] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:28:34.069 [DEBUG] [Thread-126419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:28:34.069 [DEBUG] [Thread-126419] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:28:34.069 [DEBUG] [Thread-126419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:28:34.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:28:34.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:28:34.070 [DEBUG] [Thread-126419] [transport.py] [_log()] userauth is OK
2025-12-04T00:28:34.070 [DEBUG] [Thread-126419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:28:34.070 [DEBUG] [Thread-126419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:28:34.070 [DEBUG] [Thread-126419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:28:34.070 [DEBUG] [Thread-126419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:28:34.079 [INFO] [Thread-126419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:28:34.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:28:34.725 [DEBUG] [Thread-126419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:28:34.725 [DEBUG] [Thread-126419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:28:34.725 [DEBUG] [Thread-126419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:28:34.766 [DEBUG] [Thread-126419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:28:34.766 [DEBUG] [Thread-126419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:28:34.768 [DEBUG] [Thread-126419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:28:34.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:28:34.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:28:34.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:28:34.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:28:34.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:28:34.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:28:34.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.936158 -999.00  +14.00  17.53     51   +4.10 1 1 1 1 1     0    0 8.76 -55.70 ZNESW 18.0 17.5 142.0 23.3 14.4 -24.7 14.4 -24.2 14.1 -22.7 14.4 -23.4
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.936158
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:28:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:28:28', tmtdew=11.39, humidity=46.16, cloud=0.0, wind=24.19, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:28:28', seeing=1.26, atlas_timestamp='2025-12-03T22:28:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, -0.022749999999998494, 0.024250000000000327, 0.01750000000000007, 0.041999999999999815, 0.08025000000000126, -0.06799999999999962, -0.10174999999999912, 0.02549999999999919, 0.028999999999999915, 0.040749999999999176, -0.0009999999999994458, 0.09949999999999903, 0.1042500000000004, -0.034000000000000696, -0.11050000000000182, 0.008250000000000313, 0.0065000000000008384, 0.024499999999997968, -0.028750000000002274, 0.12199999999999811, -0.0012500000000006395, -0.029749999999999943, -0.008750000000000924, 0.03549999999999898, 0.031000000000000583, -0.017250000000000654, 0.06349999999999945, 0.10800000000000054, -0.021999999999998465, -0.2469999999999981, -0.0034999999999989484, 0.01574999999999882], zp_timestamp='2025-12-03T22:26:00')
2025-12-04T00:28:34.787 [DEBUG] [Thread-126419] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:28:34.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:28:34.882 [DEBUG] [Thread-126422] [transport.py] [_log()] starting thread (client mode): 0xa27a2c80
2025-12-04T00:28:34.882 [DEBUG] [Thread-126422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:28:34.896 [DEBUG] [Thread-126422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:28:34.896 [INFO] [Thread-126422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] client lang: <none>
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] server lang: <none>
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] kex follows: False
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] Compression: none
2025-12-04T00:28:34.904 [DEBUG] [Thread-126422] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:28:34.960 [DEBUG] [Thread-126422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:28:34.960 [DEBUG] [Thread-126422] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:28:34.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:28:34.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:28:34.961 [DEBUG] [Thread-126422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:28:35.017 [DEBUG] [Thread-126422] [transport.py] [_log()] userauth is OK
2025-12-04T00:28:35.017 [DEBUG] [Thread-126422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:28:35.017 [DEBUG] [Thread-126422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:28:35.017 [DEBUG] [Thread-126422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:28:35.017 [DEBUG] [Thread-126422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:28:35.031 [INFO] [Thread-126422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:28:35.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:28:35.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:28:35.854 [DEBUG] [Thread-126422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:28:35.854 [DEBUG] [Thread-126422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:28:35.903 [DEBUG] [Thread-126422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:28:35.903 [DEBUG] [Thread-126422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:28:35.912 [DEBUG] [Thread-126422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:28:35.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:28:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:28:35.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:28:35.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:28:35.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:28:35.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:28:35.950 [DEBUG] [Thread-126422] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:28:39.368 [DEBUG] [Thread-126424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:54.359 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:28:54.431 [DEBUG] [Thread-126425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:05.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:29:05.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:29:05.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:29:06.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 28, 28), 11.39, 46.16, 0.0, 24.19, 14.05, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:29:06.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:28:28
2025-12-04T00:29:06.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:29:06.921 [DEBUG] [Thread-126426] [transport.py] [_log()] starting thread (client mode): 0x9fd20610
2025-12-04T00:29:06.922 [DEBUG] [Thread-126426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:29:06.941 [DEBUG] [Thread-126426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:29:06.942 [INFO] [Thread-126426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:29:06.943 [DEBUG] [Thread-126426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] client lang: <none>
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] server lang: <none>
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] kex follows: False
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] Compression: none
2025-12-04T00:29:06.944 [DEBUG] [Thread-126426] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:29:06.956 [DEBUG] [Thread-126426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:29:06.956 [DEBUG] [Thread-126426] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:29:06.957 [DEBUG] [Thread-126426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:29:06.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:29:06.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:29:06.959 [DEBUG] [Thread-126426] [transport.py] [_log()] userauth is OK
2025-12-04T00:29:06.959 [DEBUG] [Thread-126426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:29:06.959 [DEBUG] [Thread-126426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:29:06.959 [DEBUG] [Thread-126426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:29:06.959 [DEBUG] [Thread-126426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:29:06.977 [INFO] [Thread-126426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:29:06.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:29:07.598 [DEBUG] [Thread-126426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:29:07.598 [DEBUG] [Thread-126426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:29:07.599 [DEBUG] [Thread-126426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:29:07.640 [DEBUG] [Thread-126426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:29:07.640 [DEBUG] [Thread-126426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:29:07.643 [DEBUG] [Thread-126426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:29:07.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:29:07.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:29:07.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:29:07.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:29:07.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:29:07.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:29:07.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:29:07.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.936506 -999.00  +14.00  14.63     51   +4.00 1 1 1 1 1     0    0 8.77 -50.66 ZNESW 15.9 14.6 140.6 22.1 14.4 -24.8 14.3 -24.3 14.1 -22.8 14.4 -23.6
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.936506
2025-12-04T00:29:07.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:29:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:29:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:29:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:29:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:29:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:28:28', tmtdew=11.39, humidity=46.16, cloud=0.0, wind=24.19, temperature=14.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:29:00', seeing=1.65, atlas_timestamp='2025-12-03T22:28:34.118', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, -0.022749999999998494, 0.024250000000000327, 0.01750000000000007, 0.041999999999999815, 0.08025000000000126, -0.06799999999999962, -0.10174999999999912, 0.02549999999999919, 0.028999999999999915, 0.040749999999999176, -0.0009999999999994458, 0.09949999999999903, 0.1042500000000004, -0.034000000000000696, -0.11050000000000182, 0.008250000000000313, 0.0065000000000008384, 0.024499999999997968, -0.028750000000002274, 0.12199999999999811, -0.0012500000000006395, -0.029749999999999943, -0.008750000000000924, 0.03549999999999898, 0.031000000000000583, -0.017250000000000654, 0.06349999999999945, 0.10800000000000054, -0.021999999999998465, -0.2469999999999981, -0.0034999999999989484, 0.01574999999999882], zp_timestamp='2025-12-03T22:26:00')
2025-12-04T00:29:07.666 [DEBUG] [Thread-126426] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:29:07.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:29:07.775 [DEBUG] [Thread-126429] [transport.py] [_log()] starting thread (client mode): 0xa7bd1d20
2025-12-04T00:29:07.775 [DEBUG] [Thread-126429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:29:07.790 [DEBUG] [Thread-126429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:29:07.790 [INFO] [Thread-126429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:29:07.797 [DEBUG] [Thread-126429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] client lang: <none>
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] server lang: <none>
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] kex follows: False
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:29:07.798 [DEBUG] [Thread-126429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:29:07.799 [DEBUG] [Thread-126429] [transport.py] [_log()] Compression: none
2025-12-04T00:29:07.799 [DEBUG] [Thread-126429] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:29:07.857 [DEBUG] [Thread-126429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:29:07.858 [DEBUG] [Thread-126429] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:29:07.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:29:07.858 [DEBUG] [Thread-126429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:29:07.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:29:07.913 [DEBUG] [Thread-126429] [transport.py] [_log()] userauth is OK
2025-12-04T00:29:07.913 [DEBUG] [Thread-126429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:29:07.913 [DEBUG] [Thread-126429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:29:07.913 [DEBUG] [Thread-126429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:29:07.914 [DEBUG] [Thread-126429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:29:07.933 [INFO] [Thread-126429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:29:07.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:29:07.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:29:08.774 [DEBUG] [Thread-126429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:29:08.774 [DEBUG] [Thread-126429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:29:08.822 [DEBUG] [Thread-126429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:29:08.822 [DEBUG] [Thread-126429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:29:08.830 [DEBUG] [Thread-126429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:29:08.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:29:08.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:29:08.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:29:08.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:29:08.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:29:08.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:29:08.862 [DEBUG] [Thread-126429] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:29:09.470 [DEBUG] [Thread-126431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:14.837 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:24.035 [DEBUG] [Thread-126432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:24.516 [DEBUG] [Thread-126433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:28.081 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:28.083 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:35.273 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:29:38.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:29:38.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:29:39.548 [DEBUG] [Thread-126434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 29, 32), 11.35, 46.27, 0.0, 23.1, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:29:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:29:32
2025-12-04T00:29:39.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:29:39.835 [DEBUG] [Thread-126435] [transport.py] [_log()] starting thread (client mode): 0xa519bb80
2025-12-04T00:29:39.835 [DEBUG] [Thread-126435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:29:39.857 [DEBUG] [Thread-126435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:29:39.857 [INFO] [Thread-126435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:29:39.860 [DEBUG] [Thread-126435] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:29:39.860 [DEBUG] [Thread-126435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:29:39.860 [DEBUG] [Thread-126435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:29:39.860 [DEBUG] [Thread-126435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:39.860 [DEBUG] [Thread-126435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] client lang: <none>
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] server lang: <none>
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] kex follows: False
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:29:39.861 [DEBUG] [Thread-126435] [transport.py] [_log()] Compression: none
2025-12-04T00:29:39.862 [DEBUG] [Thread-126435] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:29:39.879 [DEBUG] [Thread-126435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:29:39.880 [DEBUG] [Thread-126435] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:29:39.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:29:39.881 [DEBUG] [Thread-126435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:29:39.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:29:39.882 [DEBUG] [Thread-126435] [transport.py] [_log()] userauth is OK
2025-12-04T00:29:39.883 [DEBUG] [Thread-126435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:29:39.883 [DEBUG] [Thread-126435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:29:39.883 [DEBUG] [Thread-126435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:29:39.883 [DEBUG] [Thread-126435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:29:39.906 [INFO] [Thread-126435] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:29:39.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:29:40.524 [DEBUG] [Thread-126435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:29:40.525 [DEBUG] [Thread-126435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:29:40.525 [DEBUG] [Thread-126435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:29:40.565 [DEBUG] [Thread-126435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:29:40.566 [DEBUG] [Thread-126435] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:29:40.568 [DEBUG] [Thread-126435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:29:40.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:29:40.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:29:40.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:29:40.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:29:40.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:29:40.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:29:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:29:40.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:29:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:29:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.936853 -999.00  +14.00  17.96     51   +4.00 1 1 1 1 1     0    0 8.87 -43.61 ZNESW 15.9 18.0 143.6 23.6 14.4 -24.8 14.3 -24.4 14.1 -22.8 14.4 -23.6
2025-12-04T00:29:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:29:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:29:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.936853
2025-12-04T00:29:40.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:29:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:29:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:29:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:29:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:29:40.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:29:32', tmtdew=11.35, humidity=46.27, cloud=0.0, wind=23.1, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:29:32', seeing=1.19, atlas_timestamp='2025-12-03T22:29:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, -0.022749999999998494, 0.024250000000000327, 0.01750000000000007, 0.041999999999999815, 0.08025000000000126, -0.06799999999999962, -0.10174999999999912, 0.02549999999999919, 0.028999999999999915, 0.040749999999999176, -0.0009999999999994458, 0.09949999999999903, 0.1042500000000004, -0.034000000000000696, -0.11050000000000182, 0.008250000000000313, 0.0065000000000008384, 0.024499999999997968, -0.028750000000002274, 0.12199999999999811, -0.0012500000000006395, -0.029749999999999943, -0.008750000000000924, 0.03549999999999898, 0.031000000000000583, -0.017250000000000654, 0.06349999999999945, 0.10800000000000054, -0.021999999999998465, -0.2469999999999981, -0.0034999999999989484, 0.01574999999999882], zp_timestamp='2025-12-03T22:26:00')
2025-12-04T00:29:40.591 [DEBUG] [Thread-126435] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:29:40.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:29:40.692 [DEBUG] [Thread-126438] [transport.py] [_log()] starting thread (client mode): 0xa277b3a0
2025-12-04T00:29:40.692 [DEBUG] [Thread-126438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:29:40.715 [DEBUG] [Thread-126438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:29:40.715 [INFO] [Thread-126438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:29:40.726 [DEBUG] [Thread-126438] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:29:40.727 [DEBUG] [Thread-126438] [transport.py] [_log()] client lang: <none>
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] server lang: <none>
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] kex follows: False
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] Compression: none
2025-12-04T00:29:40.728 [DEBUG] [Thread-126438] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:29:40.780 [DEBUG] [Thread-126438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:29:40.781 [DEBUG] [Thread-126438] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:29:40.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:29:40.782 [DEBUG] [Thread-126438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:29:40.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:29:40.841 [DEBUG] [Thread-126438] [transport.py] [_log()] userauth is OK
2025-12-04T00:29:40.841 [DEBUG] [Thread-126438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:29:40.841 [DEBUG] [Thread-126438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:29:40.841 [DEBUG] [Thread-126438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:29:40.841 [DEBUG] [Thread-126438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:29:40.860 [INFO] [Thread-126438] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:29:40.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:29:40.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:29:41.684 [DEBUG] [Thread-126438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:29:41.684 [DEBUG] [Thread-126438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:29:41.732 [DEBUG] [Thread-126438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:29:41.732 [DEBUG] [Thread-126438] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:29:41.741 [DEBUG] [Thread-126438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:29:41.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:29:41.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:29:41.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:29:41.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:29:41.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:29:41.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:29:41.775 [DEBUG] [Thread-126438] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:29:54.585 [DEBUG] [Thread-126440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:29:55.724 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:09.644 [DEBUG] [Thread-126441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:11.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:30:11.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:30:11.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:30:12.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 30, 4), 11.34, 46.29, 0.0, 22.94, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:30:12.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:30:04
2025-12-04T00:30:12.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:30:12.750 [DEBUG] [Thread-126442] [transport.py] [_log()] starting thread (client mode): 0xa519af50
2025-12-04T00:30:12.750 [DEBUG] [Thread-126442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:30:12.770 [DEBUG] [Thread-126442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:30:12.770 [INFO] [Thread-126442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:30:12.773 [DEBUG] [Thread-126442] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:30:12.773 [DEBUG] [Thread-126442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] client lang: <none>
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] server lang: <none>
2025-12-04T00:30:12.774 [DEBUG] [Thread-126442] [transport.py] [_log()] kex follows: False
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] Compression: none
2025-12-04T00:30:12.775 [DEBUG] [Thread-126442] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:30:12.796 [DEBUG] [Thread-126442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:30:12.796 [DEBUG] [Thread-126442] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:30:12.797 [DEBUG] [Thread-126442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:30:12.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:30:12.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:30:12.799 [DEBUG] [Thread-126442] [transport.py] [_log()] userauth is OK
2025-12-04T00:30:12.799 [DEBUG] [Thread-126442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:30:12.799 [DEBUG] [Thread-126442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:30:12.799 [DEBUG] [Thread-126442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:30:12.799 [DEBUG] [Thread-126442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:30:12.823 [INFO] [Thread-126442] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:30:12.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:30:13.433 [DEBUG] [Thread-126442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:30:13.433 [DEBUG] [Thread-126442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:30:13.434 [DEBUG] [Thread-126442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:30:13.474 [DEBUG] [Thread-126442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:30:13.474 [DEBUG] [Thread-126442] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:30:13.476 [DEBUG] [Thread-126442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:30:13.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:30:13.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:30:13.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:30:13.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:30:13.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:30:13.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:30:13.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.937200 -999.00  +14.00  15.52     51   +4.10 1 1 1 1 1     0    0 9.04 -38.99 ZNESW 12.3 15.5 145.2 21.8 14.4 -24.7 14.2 -24.3 14.1 -22.8 14.4 -23.6
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:30:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.937200
2025-12-04T00:30:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:30:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:30:13.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:30:13.494 [DEBUG] [Thread-126442] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:30:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:30:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:30:13.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:30:04', tmtdew=11.34, humidity=46.29, cloud=0.0, wind=22.94, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:30:04', seeing=1.19, atlas_timestamp='2025-12-03T22:29:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:30:13.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:30:13.596 [DEBUG] [Thread-126445] [transport.py] [_log()] starting thread (client mode): 0xa519b400
2025-12-04T00:30:13.597 [DEBUG] [Thread-126445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:30:13.615 [DEBUG] [Thread-126445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:30:13.615 [INFO] [Thread-126445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] client lang: <none>
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] server lang: <none>
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] kex follows: False
2025-12-04T00:30:13.623 [DEBUG] [Thread-126445] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] Compression: none
2025-12-04T00:30:13.624 [DEBUG] [Thread-126445] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:30:13.679 [DEBUG] [Thread-126445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:30:13.680 [DEBUG] [Thread-126445] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:30:13.680 [DEBUG] [Thread-126445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:30:13.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:30:13.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:30:13.736 [DEBUG] [Thread-126445] [transport.py] [_log()] userauth is OK
2025-12-04T00:30:13.737 [DEBUG] [Thread-126445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:30:13.737 [DEBUG] [Thread-126445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:30:13.737 [DEBUG] [Thread-126445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:30:13.737 [DEBUG] [Thread-126445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:30:13.755 [INFO] [Thread-126445] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:30:13.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:30:13.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:30:14.603 [DEBUG] [Thread-126445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:30:14.603 [DEBUG] [Thread-126445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:30:14.653 [DEBUG] [Thread-126445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:30:14.654 [DEBUG] [Thread-126445] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:30:14.662 [DEBUG] [Thread-126445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:30:14.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:30:14.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:30:14.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:30:14.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:30:14.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:30:14.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:30:14.697 [DEBUG] [Thread-126445] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:30:16.195 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:24.105 [DEBUG] [Thread-126447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:24.682 [DEBUG] [Thread-126448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:28.282 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:28.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:36.600 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:39.757 [DEBUG] [Thread-126449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:44.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:30:44.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:30:44.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:30:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 30, 36), 11.34, 46.29, 0.0, 22.53, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:30:45.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:30:36
2025-12-04T00:30:45.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:30:45.668 [DEBUG] [Thread-126450] [transport.py] [_log()] starting thread (client mode): 0xa5160fd0
2025-12-04T00:30:45.668 [DEBUG] [Thread-126450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:30:45.687 [DEBUG] [Thread-126450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:30:45.687 [INFO] [Thread-126450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] client lang: <none>
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] server lang: <none>
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] kex follows: False
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] Compression: none
2025-12-04T00:30:45.689 [DEBUG] [Thread-126450] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:30:45.698 [DEBUG] [Thread-126450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:30:45.699 [DEBUG] [Thread-126450] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:30:45.699 [DEBUG] [Thread-126450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:30:45.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:30:45.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:30:45.701 [DEBUG] [Thread-126450] [transport.py] [_log()] userauth is OK
2025-12-04T00:30:45.701 [DEBUG] [Thread-126450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:30:45.701 [DEBUG] [Thread-126450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:30:45.702 [DEBUG] [Thread-126450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:30:45.702 [DEBUG] [Thread-126450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:30:45.720 [INFO] [Thread-126450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:30:45.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:30:46.367 [DEBUG] [Thread-126450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:30:46.367 [DEBUG] [Thread-126450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:30:46.368 [DEBUG] [Thread-126450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:30:46.408 [DEBUG] [Thread-126450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:30:46.408 [DEBUG] [Thread-126450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:30:46.410 [DEBUG] [Thread-126450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:30:46.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:30:46.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:30:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:30:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:30:46.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:30:46.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:30:46.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:30:46.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.937894 -999.00  +13.90  18.95     51   +4.00 1 1 1 1 1     0    0 9.04 -31.29 ZNESW 16.8 18.9 147.8 21.2 14.4 -24.8 14.3 -24.3 14.1 -22.7 14.4 -23.6
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.937894
2025-12-04T00:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:30:36', tmtdew=11.34, humidity=46.29, cloud=0.0, wind=22.53, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:30:36', seeing=1.12, atlas_timestamp='2025-12-03T22:30:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:30:46.434 [DEBUG] [Thread-126450] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:30:46.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:30:46.536 [DEBUG] [Thread-126453] [transport.py] [_log()] starting thread (client mode): 0xa7bd3190
2025-12-04T00:30:46.536 [DEBUG] [Thread-126453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:30:46.555 [DEBUG] [Thread-126453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:30:46.555 [INFO] [Thread-126453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:30:46.562 [DEBUG] [Thread-126453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:30:46.562 [DEBUG] [Thread-126453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:30:46.562 [DEBUG] [Thread-126453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] client lang: <none>
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] server lang: <none>
2025-12-04T00:30:46.563 [DEBUG] [Thread-126453] [transport.py] [_log()] kex follows: False
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] Compression: none
2025-12-04T00:30:46.564 [DEBUG] [Thread-126453] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:30:46.619 [DEBUG] [Thread-126453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:30:46.620 [DEBUG] [Thread-126453] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:30:46.620 [DEBUG] [Thread-126453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:30:46.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:30:46.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:30:46.676 [DEBUG] [Thread-126453] [transport.py] [_log()] userauth is OK
2025-12-04T00:30:46.676 [DEBUG] [Thread-126453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:30:46.677 [DEBUG] [Thread-126453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:30:46.677 [DEBUG] [Thread-126453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:30:46.677 [DEBUG] [Thread-126453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:30:46.695 [INFO] [Thread-126453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:30:46.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:30:46.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:30:47.555 [DEBUG] [Thread-126453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:30:47.555 [DEBUG] [Thread-126453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:30:47.604 [DEBUG] [Thread-126453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:30:47.604 [DEBUG] [Thread-126453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:30:47.613 [DEBUG] [Thread-126453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:30:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:30:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:30:47.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:30:47.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:30:47.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:30:47.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:30:47.647 [DEBUG] [Thread-126453] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:30:54.793 [DEBUG] [Thread-126455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:30:57.022 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:09.848 [DEBUG] [Thread-126456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:17.440 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:17.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:31:17.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:31:17.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:31:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 31, 8), 11.34, 46.31, 0.0, 23.5, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:31:18.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:31:08
2025-12-04T00:31:18.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:31:18.611 [DEBUG] [Thread-126457] [transport.py] [_log()] starting thread (client mode): 0xa7bd1b40
2025-12-04T00:31:18.611 [DEBUG] [Thread-126457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:31:18.635 [DEBUG] [Thread-126457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:31:18.635 [INFO] [Thread-126457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:31:18.638 [DEBUG] [Thread-126457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:31:18.638 [DEBUG] [Thread-126457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:31:18.647 [DEBUG] [Thread-126457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:31:18.647 [DEBUG] [Thread-126457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:18.647 [DEBUG] [Thread-126457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] client lang: <none>
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] server lang: <none>
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] kex follows: False
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] Compression: none
2025-12-04T00:31:18.648 [DEBUG] [Thread-126457] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:31:18.660 [DEBUG] [Thread-126457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:31:18.661 [DEBUG] [Thread-126457] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:31:18.661 [DEBUG] [Thread-126457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:31:18.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:31:18.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:31:18.704 [DEBUG] [Thread-126457] [transport.py] [_log()] userauth is OK
2025-12-04T00:31:18.705 [DEBUG] [Thread-126457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:31:18.705 [DEBUG] [Thread-126457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:31:18.705 [DEBUG] [Thread-126457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:31:18.705 [DEBUG] [Thread-126457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:31:18.737 [INFO] [Thread-126457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:31:18.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:31:19.342 [DEBUG] [Thread-126457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:31:19.342 [DEBUG] [Thread-126457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:31:19.343 [DEBUG] [Thread-126457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:31:19.384 [DEBUG] [Thread-126457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:31:19.384 [DEBUG] [Thread-126457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:31:19.386 [DEBUG] [Thread-126457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:31:19.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:31:19.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:31:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:31:19.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:31:19.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:31:19.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:31:19.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.938242 -999.00  +14.00  18.06     51   +4.00 1 1 1 1 1     0    0 9.17 -28.71 ZNESW 19.4 18.1 140.6 25.3 14.3 -24.8 14.3 -24.3 14.1 -22.6 14.4 -23.5
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:31:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.938242
2025-12-04T00:31:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:31:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:31:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:31:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:31:19.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:31:19.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:31:08', tmtdew=11.34, humidity=46.31, cloud=0.0, wind=23.5, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:31:08', seeing=1.19, atlas_timestamp='2025-12-03T22:31:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:31:19.405 [DEBUG] [Thread-126457] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:31:19.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:31:19.513 [DEBUG] [Thread-126460] [transport.py] [_log()] starting thread (client mode): 0xa519bdf0
2025-12-04T00:31:19.513 [DEBUG] [Thread-126460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:31:19.528 [DEBUG] [Thread-126460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:31:19.528 [INFO] [Thread-126460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] client lang: <none>
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] server lang: <none>
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] kex follows: False
2025-12-04T00:31:19.536 [DEBUG] [Thread-126460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] Compression: none
2025-12-04T00:31:19.537 [DEBUG] [Thread-126460] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:31:19.595 [DEBUG] [Thread-126460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:31:19.595 [DEBUG] [Thread-126460] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:31:19.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:31:19.596 [DEBUG] [Thread-126460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:31:19.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:31:19.651 [DEBUG] [Thread-126460] [transport.py] [_log()] userauth is OK
2025-12-04T00:31:19.652 [DEBUG] [Thread-126460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:31:19.652 [DEBUG] [Thread-126460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:31:19.652 [DEBUG] [Thread-126460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:31:19.652 [DEBUG] [Thread-126460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:31:19.670 [INFO] [Thread-126460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:31:19.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:31:19.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:31:20.482 [DEBUG] [Thread-126460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:31:20.482 [DEBUG] [Thread-126460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:31:20.529 [DEBUG] [Thread-126460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:31:20.530 [DEBUG] [Thread-126460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:31:20.538 [DEBUG] [Thread-126460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:31:20.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:31:20.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:31:20.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:31:20.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:31:20.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:31:20.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:31:20.573 [DEBUG] [Thread-126460] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:31:24.182 [DEBUG] [Thread-126462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:24.883 [DEBUG] [Thread-126463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:28.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:28.484 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:37.853 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:39.944 [DEBUG] [Thread-126464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:31:50.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:31:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:31:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 31, 40), 11.28, 46.34, 0.0, 21.76, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:31:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:31:40
2025-12-04T00:31:51.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:31:51.564 [DEBUG] [Thread-126465] [transport.py] [_log()] starting thread (client mode): 0xa51bbcd0
2025-12-04T00:31:51.564 [DEBUG] [Thread-126465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:31:51.585 [DEBUG] [Thread-126465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:31:51.585 [INFO] [Thread-126465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:51.589 [DEBUG] [Thread-126465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] client lang: <none>
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] server lang: <none>
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] kex follows: False
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] Compression: none
2025-12-04T00:31:51.590 [DEBUG] [Thread-126465] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:31:51.607 [DEBUG] [Thread-126465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:31:51.608 [DEBUG] [Thread-126465] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:31:51.608 [DEBUG] [Thread-126465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:31:51.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:31:51.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:31:51.610 [DEBUG] [Thread-126465] [transport.py] [_log()] userauth is OK
2025-12-04T00:31:51.610 [DEBUG] [Thread-126465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:31:51.611 [DEBUG] [Thread-126465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:31:51.611 [DEBUG] [Thread-126465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:31:51.611 [DEBUG] [Thread-126465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:31:51.635 [INFO] [Thread-126465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:31:51.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:31:52.255 [DEBUG] [Thread-126465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:31:52.255 [DEBUG] [Thread-126465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:31:52.256 [DEBUG] [Thread-126465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:31:52.297 [DEBUG] [Thread-126465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:31:52.297 [DEBUG] [Thread-126465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:31:52.300 [DEBUG] [Thread-126465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:31:52.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:31:52.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:31:52.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:31:52.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:31:52.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:31:52.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:31:52.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.938242 -999.00  +14.00  18.06     51   +4.00 1 1 1 1 1     0    0 9.17 -28.71 ZNESW 19.4 18.1 140.6 25.3 14.3 -24.8 14.3 -24.3 14.1 -22.6 14.4 -23.5
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:31:52.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.938242
2025-12-04T00:31:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:31:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:31:52.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:31:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:31:52.323 [DEBUG] [Thread-126465] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:31:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:31:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:31:40', tmtdew=11.28, humidity=46.34, cloud=0.0, wind=21.76, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:31:40', seeing=1.19, atlas_timestamp='2025-12-03T22:31:04.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:31:52.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:31:52.425 [DEBUG] [Thread-126468] [transport.py] [_log()] starting thread (client mode): 0xa7bd1b40
2025-12-04T00:31:52.425 [DEBUG] [Thread-126468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:31:52.439 [DEBUG] [Thread-126468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:31:52.440 [INFO] [Thread-126468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:31:52.448 [DEBUG] [Thread-126468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:31:52.448 [DEBUG] [Thread-126468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] client lang: <none>
2025-12-04T00:31:52.449 [DEBUG] [Thread-126468] [transport.py] [_log()] server lang: <none>
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] kex follows: False
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] Compression: none
2025-12-04T00:31:52.450 [DEBUG] [Thread-126468] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:31:52.505 [DEBUG] [Thread-126468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:31:52.506 [DEBUG] [Thread-126468] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:31:52.506 [DEBUG] [Thread-126468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:31:52.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:31:52.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:31:52.560 [DEBUG] [Thread-126468] [transport.py] [_log()] userauth is OK
2025-12-04T00:31:52.561 [DEBUG] [Thread-126468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:31:52.561 [DEBUG] [Thread-126468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:31:52.561 [DEBUG] [Thread-126468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:31:52.561 [DEBUG] [Thread-126468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:31:52.582 [INFO] [Thread-126468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:31:52.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:31:52.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:31:53.461 [DEBUG] [Thread-126468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:31:53.461 [DEBUG] [Thread-126468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:31:53.509 [DEBUG] [Thread-126468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:31:53.509 [DEBUG] [Thread-126468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:31:53.518 [DEBUG] [Thread-126468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:31:53.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:31:53.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:31:53.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:31:53.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:31:53.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:31:53.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:31:53.553 [DEBUG] [Thread-126468] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:31:54.980 [DEBUG] [Thread-126470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:31:58.314 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:10.037 [DEBUG] [Thread-126471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:18.730 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:32:23.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:32:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:32:24.238 [DEBUG] [Thread-126472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 32, 12), 11.26, 46.41, 0.0, 23.1, 14.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:32:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:32:12
2025-12-04T00:32:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:32:24.557 [DEBUG] [Thread-126473] [transport.py] [_log()] starting thread (client mode): 0xa514d3f0
2025-12-04T00:32:24.557 [DEBUG] [Thread-126473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:32:24.577 [DEBUG] [Thread-126473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:32:24.577 [INFO] [Thread-126473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] client lang: <none>
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] server lang: <none>
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] kex follows: False
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] Compression: none
2025-12-04T00:32:24.580 [DEBUG] [Thread-126473] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:32:24.595 [DEBUG] [Thread-126473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:32:24.595 [DEBUG] [Thread-126473] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:32:24.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:32:24.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] userauth is OK
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:32:24.596 [DEBUG] [Thread-126473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:32:24.623 [INFO] [Thread-126473] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:32:24.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:32:25.071 [DEBUG] [Thread-126475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:25.406 [DEBUG] [Thread-126473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:32:25.406 [DEBUG] [Thread-126473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:32:25.406 [DEBUG] [Thread-126473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:32:25.448 [DEBUG] [Thread-126473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:32:25.448 [DEBUG] [Thread-126473] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:32:25.450 [DEBUG] [Thread-126473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:32:25.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:32:25.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:32:25.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:32:25.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:32:25.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:32:25.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:32:25.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:32:25.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.938589 -999.00  +14.00  18.14     51   +4.10 1 1 1 1 1     0    0 9.18 -29.10 ZNESW 17.7 18.1 138.4 23.1 14.4 -24.7 14.3 -24.3 14.1 -22.7 14.3 -23.5
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.938589
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:32:25.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:32:12', tmtdew=11.26, humidity=46.41, cloud=0.0, wind=23.1, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:32:12', seeing=1.24, atlas_timestamp='2025-12-03T22:31:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:32:25.469 [DEBUG] [Thread-126473] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:32:25.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:32:25.563 [DEBUG] [Thread-126477] [transport.py] [_log()] starting thread (client mode): 0xa51bbb20
2025-12-04T00:32:25.563 [DEBUG] [Thread-126477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:32:25.577 [DEBUG] [Thread-126477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:32:25.577 [INFO] [Thread-126477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] client lang: <none>
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] server lang: <none>
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] kex follows: False
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] Compression: none
2025-12-04T00:32:25.585 [DEBUG] [Thread-126477] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:32:25.640 [DEBUG] [Thread-126477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:32:25.640 [DEBUG] [Thread-126477] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:32:25.641 [DEBUG] [Thread-126477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:32:25.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:32:25.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:32:25.698 [DEBUG] [Thread-126477] [transport.py] [_log()] userauth is OK
2025-12-04T00:32:25.698 [DEBUG] [Thread-126477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:32:25.698 [DEBUG] [Thread-126477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:32:25.698 [DEBUG] [Thread-126477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:32:25.698 [DEBUG] [Thread-126477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:32:25.712 [INFO] [Thread-126477] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:32:25.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:32:25.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:32:26.571 [DEBUG] [Thread-126477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:32:26.571 [DEBUG] [Thread-126477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:32:26.619 [DEBUG] [Thread-126477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:32:26.620 [DEBUG] [Thread-126477] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:32:26.628 [DEBUG] [Thread-126477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:32:26.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:32:26.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:32:26.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:32:26.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:32:26.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:32:26.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:32:26.660 [DEBUG] [Thread-126477] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:32:28.682 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:28.683 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:39.112 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:40.103 [DEBUG] [Thread-126479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:55.162 [DEBUG] [Thread-126480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:32:56.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:32:56.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:32:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 32, 44), 11.29, 46.46, 0.0, 23.03, 13.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:32:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:32:44
2025-12-04T00:32:57.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:32:57.641 [DEBUG] [Thread-126481] [transport.py] [_log()] starting thread (client mode): 0x9fd21750
2025-12-04T00:32:57.641 [DEBUG] [Thread-126481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:32:57.663 [DEBUG] [Thread-126481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:32:57.663 [INFO] [Thread-126481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] client lang: <none>
2025-12-04T00:32:57.666 [DEBUG] [Thread-126481] [transport.py] [_log()] server lang: <none>
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] kex follows: False
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] Compression: none
2025-12-04T00:32:57.667 [DEBUG] [Thread-126481] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:32:57.687 [DEBUG] [Thread-126481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:32:57.688 [DEBUG] [Thread-126481] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:32:57.688 [DEBUG] [Thread-126481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:32:57.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:32:57.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:32:57.690 [DEBUG] [Thread-126481] [transport.py] [_log()] userauth is OK
2025-12-04T00:32:57.690 [DEBUG] [Thread-126481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:32:57.690 [DEBUG] [Thread-126481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:32:57.690 [DEBUG] [Thread-126481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:32:57.691 [DEBUG] [Thread-126481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:32:57.714 [INFO] [Thread-126481] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:32:57.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:32:58.359 [DEBUG] [Thread-126481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:32:58.359 [DEBUG] [Thread-126481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:32:58.359 [DEBUG] [Thread-126481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:32:58.400 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:32:58.400 [DEBUG] [Thread-126481] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:32:58.402 [DEBUG] [Thread-126481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:32:58.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:32:58.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:32:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:32:58.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:32:58.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:32:58.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:32:58.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.938936 -999.00  +14.00  14.70     51   +4.00 1 1 1 1 1     0    0 9.23 -28.28 ZNESW 18.3 14.7 148.2 21.8 14.4 -24.8 14.3 -24.2 14.1 -22.8 14.4 -23.5
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.938936
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:32:58.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:32:44', tmtdew=11.29, humidity=46.46, cloud=0.0, wind=23.03, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:32:44', seeing=1.24, atlas_timestamp='2025-12-03T22:32:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:28:00')
2025-12-04T00:32:58.422 [DEBUG] [Thread-126481] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:32:58.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:32:58.512 [DEBUG] [Thread-126484] [transport.py] [_log()] starting thread (client mode): 0xa519b580
2025-12-04T00:32:58.512 [DEBUG] [Thread-126484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:32:58.527 [DEBUG] [Thread-126484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:32:58.527 [INFO] [Thread-126484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] client lang: <none>
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] server lang: <none>
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] kex follows: False
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:32:58.539 [DEBUG] [Thread-126484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:32:58.540 [DEBUG] [Thread-126484] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:32:58.540 [DEBUG] [Thread-126484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:32:58.540 [DEBUG] [Thread-126484] [transport.py] [_log()] Compression: none
2025-12-04T00:32:58.540 [DEBUG] [Thread-126484] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:32:58.598 [DEBUG] [Thread-126484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:32:58.599 [DEBUG] [Thread-126484] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:32:58.599 [DEBUG] [Thread-126484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:32:58.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:32:58.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:32:58.655 [DEBUG] [Thread-126484] [transport.py] [_log()] userauth is OK
2025-12-04T00:32:58.655 [DEBUG] [Thread-126484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:32:58.664 [DEBUG] [Thread-126484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:32:58.664 [DEBUG] [Thread-126484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:32:58.664 [DEBUG] [Thread-126484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:32:58.683 [INFO] [Thread-126484] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:32:58.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:32:58.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:32:59.532 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:32:59.536 [DEBUG] [Thread-126484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:32:59.536 [DEBUG] [Thread-126484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:32:59.584 [DEBUG] [Thread-126484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:32:59.584 [DEBUG] [Thread-126484] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:32:59.593 [DEBUG] [Thread-126484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:32:59.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:32:59.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:32:59.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:32:59.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:32:59.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:32:59.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:32:59.625 [DEBUG] [Thread-126484] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:33:10.195 [DEBUG] [Thread-126486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:19.950 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:24.299 [DEBUG] [Thread-126487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:25.253 [DEBUG] [Thread-126488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:28.881 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:28.882 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:29.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:33:29.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:33:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:33:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 33, 16), 11.31, 46.37, 0.0, 23.24, 13.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:33:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:33:16
2025-12-04T00:33:30.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:33:30.596 [DEBUG] [Thread-126489] [transport.py] [_log()] starting thread (client mode): 0xa27a3280
2025-12-04T00:33:30.596 [DEBUG] [Thread-126489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:33:30.617 [DEBUG] [Thread-126489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:33:30.617 [INFO] [Thread-126489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:33:30.620 [DEBUG] [Thread-126489] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:33:30.620 [DEBUG] [Thread-126489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:33:30.620 [DEBUG] [Thread-126489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] client lang: <none>
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] server lang: <none>
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] kex follows: False
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] Compression: none
2025-12-04T00:33:30.621 [DEBUG] [Thread-126489] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:33:30.638 [DEBUG] [Thread-126489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:33:30.639 [DEBUG] [Thread-126489] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:33:30.639 [DEBUG] [Thread-126489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:33:30.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:33:30.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:33:30.643 [DEBUG] [Thread-126489] [transport.py] [_log()] userauth is OK
2025-12-04T00:33:30.643 [DEBUG] [Thread-126489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:33:30.643 [DEBUG] [Thread-126489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:33:30.643 [DEBUG] [Thread-126489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:33:30.643 [DEBUG] [Thread-126489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:33:30.661 [INFO] [Thread-126489] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:33:30.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:33:31.475 [DEBUG] [Thread-126489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:33:31.476 [DEBUG] [Thread-126489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:33:31.476 [DEBUG] [Thread-126489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:33:31.517 [DEBUG] [Thread-126489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:33:31.517 [DEBUG] [Thread-126489] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:33:31.520 [DEBUG] [Thread-126489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:33:31.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:33:31.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:33:31.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:33:31.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:33:31.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:33:31.544 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:33:31.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:33:31.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:33:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:33:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.939283 -999.00  +14.00  15.95     51   +4.00 1 1 1 1 1     0    0 9.20 -28.20 ZNESW 13.6 15.9 142.0 21.2 14.3 -24.8 14.2 -24.4 14.1 -22.9 14.3 -23.5
2025-12-04T00:33:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:33:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:33:31.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.939283
2025-12-04T00:33:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:33:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:33:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:33:31.546 [DEBUG] [Thread-126489] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:33:31.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:33:31.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:33:31.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:33:16', tmtdew=11.31, humidity=46.37, cloud=0.0, wind=23.24, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:33:16', seeing=1.09, atlas_timestamp='2025-12-03T22:32:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:32:00')
2025-12-04T00:33:31.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:33:31.649 [DEBUG] [Thread-126492] [transport.py] [_log()] starting thread (client mode): 0xa27a2cb0
2025-12-04T00:33:31.649 [DEBUG] [Thread-126492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:33:31.667 [DEBUG] [Thread-126492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:33:31.668 [INFO] [Thread-126492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:33:31.675 [DEBUG] [Thread-126492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] client lang: <none>
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] server lang: <none>
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] kex follows: False
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] Compression: none
2025-12-04T00:33:31.676 [DEBUG] [Thread-126492] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:33:31.735 [DEBUG] [Thread-126492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:33:31.736 [DEBUG] [Thread-126492] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:33:31.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:33:31.737 [DEBUG] [Thread-126492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:33:31.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:33:31.791 [DEBUG] [Thread-126492] [transport.py] [_log()] userauth is OK
2025-12-04T00:33:31.792 [DEBUG] [Thread-126492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:33:31.792 [DEBUG] [Thread-126492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:33:31.792 [DEBUG] [Thread-126492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:33:31.792 [DEBUG] [Thread-126492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:33:31.811 [INFO] [Thread-126492] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:33:31.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:33:31.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:33:32.649 [DEBUG] [Thread-126492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:33:32.649 [DEBUG] [Thread-126492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:33:32.696 [DEBUG] [Thread-126492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:33:32.697 [DEBUG] [Thread-126492] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:33:32.705 [DEBUG] [Thread-126492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:33:32.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:33:32.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:33:32.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:33:32.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:33:32.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:33:32.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:33:32.743 [DEBUG] [Thread-126492] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:33:40.286 [DEBUG] [Thread-126494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:40.416 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:33:55.332 [DEBUG] [Thread-126495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:00.827 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:02.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:34:02.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:34:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:34:03.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 33, 48), 11.26, 46.39, 0.0, 21.24, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:34:03.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:33:48
2025-12-04T00:34:03.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:34:03.742 [DEBUG] [Thread-126496] [transport.py] [_log()] starting thread (client mode): 0xa5198ac0
2025-12-04T00:34:03.742 [DEBUG] [Thread-126496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:34:03.763 [DEBUG] [Thread-126496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:34:03.763 [INFO] [Thread-126496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] client lang: <none>
2025-12-04T00:34:03.766 [DEBUG] [Thread-126496] [transport.py] [_log()] server lang: <none>
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] kex follows: False
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] Compression: none
2025-12-04T00:34:03.767 [DEBUG] [Thread-126496] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:34:03.783 [DEBUG] [Thread-126496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:34:03.783 [DEBUG] [Thread-126496] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:34:03.784 [DEBUG] [Thread-126496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:34:03.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:34:03.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:34:03.786 [DEBUG] [Thread-126496] [transport.py] [_log()] userauth is OK
2025-12-04T00:34:03.786 [DEBUG] [Thread-126496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:34:03.786 [DEBUG] [Thread-126496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:34:03.786 [DEBUG] [Thread-126496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:34:03.786 [DEBUG] [Thread-126496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:34:03.808 [INFO] [Thread-126496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:34:03.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:34:04.436 [DEBUG] [Thread-126496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:34:04.436 [DEBUG] [Thread-126496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:34:04.437 [DEBUG] [Thread-126496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:34:04.478 [DEBUG] [Thread-126496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:34:04.478 [DEBUG] [Thread-126496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:34:04.481 [DEBUG] [Thread-126496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:34:04.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:34:04.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:34:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:34:04.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:34:04.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:34:04.503 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:34:04.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:34:04.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.939630 -999.00  +13.90  16.17     51   +4.00 1 1 1 1 1     0    0 9.31 -28.88 ZNESW 18.1 16.2 146.6 22.1 14.4 -24.8 14.3 -24.3 14.1 -22.6 14.3 -23.6
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.939630
2025-12-04T00:34:04.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:34:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:34:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:34:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:34:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:34:04.505 [DEBUG] [Thread-126496] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:34:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:33:48', tmtdew=11.26, humidity=46.39, cloud=0.0, wind=21.24, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:33:48', seeing=1.06, atlas_timestamp='2025-12-03T22:33:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:32:00')
2025-12-04T00:34:04.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:34:04.619 [DEBUG] [Thread-126499] [transport.py] [_log()] starting thread (client mode): 0xa519b550
2025-12-04T00:34:04.619 [DEBUG] [Thread-126499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:34:04.635 [DEBUG] [Thread-126499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:34:04.636 [INFO] [Thread-126499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:34:04.643 [DEBUG] [Thread-126499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:34:04.643 [DEBUG] [Thread-126499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:34:04.643 [DEBUG] [Thread-126499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:34:04.643 [DEBUG] [Thread-126499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:04.643 [DEBUG] [Thread-126499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] client lang: <none>
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] server lang: <none>
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] kex follows: False
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:34:04.644 [DEBUG] [Thread-126499] [transport.py] [_log()] Compression: none
2025-12-04T00:34:04.645 [DEBUG] [Thread-126499] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:34:04.701 [DEBUG] [Thread-126499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:34:04.701 [DEBUG] [Thread-126499] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:34:04.702 [DEBUG] [Thread-126499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:34:04.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:34:04.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:34:04.756 [DEBUG] [Thread-126499] [transport.py] [_log()] userauth is OK
2025-12-04T00:34:04.756 [DEBUG] [Thread-126499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:34:04.756 [DEBUG] [Thread-126499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:34:04.756 [DEBUG] [Thread-126499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:34:04.757 [DEBUG] [Thread-126499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:34:04.776 [INFO] [Thread-126499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:34:04.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:34:04.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:34:05.611 [DEBUG] [Thread-126499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:34:05.611 [DEBUG] [Thread-126499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:34:05.659 [DEBUG] [Thread-126499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:34:05.659 [DEBUG] [Thread-126499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:34:05.668 [DEBUG] [Thread-126499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:34:05.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:34:05.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:34:05.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:34:05.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:34:05.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:34:05.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:34:05.702 [DEBUG] [Thread-126499] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:34:10.369 [DEBUG] [Thread-126501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:21.253 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:24.364 [DEBUG] [Thread-126502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:25.428 [DEBUG] [Thread-126503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:29.081 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:29.082 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:35.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:34:35.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:34:35.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:34:36.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 34, 20), 11.23, 46.47, 0.0, 22.96, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:34:36.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:34:20
2025-12-04T00:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:34:36.693 [DEBUG] [Thread-126504] [transport.py] [_log()] starting thread (client mode): 0xa5199090
2025-12-04T00:34:36.693 [DEBUG] [Thread-126504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:34:36.718 [DEBUG] [Thread-126504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:34:36.718 [INFO] [Thread-126504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] client lang: <none>
2025-12-04T00:34:36.722 [DEBUG] [Thread-126504] [transport.py] [_log()] server lang: <none>
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] kex follows: False
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] Compression: none
2025-12-04T00:34:36.723 [DEBUG] [Thread-126504] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:34:36.743 [DEBUG] [Thread-126504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:34:36.743 [DEBUG] [Thread-126504] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:34:36.744 [DEBUG] [Thread-126504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:34:36.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:34:36.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:34:36.745 [DEBUG] [Thread-126504] [transport.py] [_log()] userauth is OK
2025-12-04T00:34:36.746 [DEBUG] [Thread-126504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:34:36.746 [DEBUG] [Thread-126504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:34:36.746 [DEBUG] [Thread-126504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:34:36.746 [DEBUG] [Thread-126504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:34:36.781 [INFO] [Thread-126504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:34:36.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:34:37.427 [DEBUG] [Thread-126504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:34:37.427 [DEBUG] [Thread-126504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:34:37.428 [DEBUG] [Thread-126504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:34:37.469 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:34:37.469 [DEBUG] [Thread-126504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:34:37.472 [DEBUG] [Thread-126504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:34:37.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:34:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:34:37.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:34:37.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:34:37.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:34:37.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:34:37.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.940325 -999.00  +13.90  19.40     51   +4.00 1 1 1 1 1     0    0 9.44 -23.88 ZNESW 18.9 19.4 143.8 21.7 14.3 -24.8 14.2 -24.3 14.1 -22.7 14.3 -23.6
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:34:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.940325
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:34:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:34:20', tmtdew=11.23, humidity=46.47, cloud=0.0, wind=22.96, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:34:20', seeing=1.13, atlas_timestamp='2025-12-03T22:34:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:32:00')
2025-12-04T00:34:37.496 [DEBUG] [Thread-126504] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:34:37.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:34:37.609 [DEBUG] [Thread-126507] [transport.py] [_log()] starting thread (client mode): 0xa7bd2020
2025-12-04T00:34:37.609 [DEBUG] [Thread-126507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:34:37.626 [DEBUG] [Thread-126507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:34:37.626 [INFO] [Thread-126507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:34:37.634 [DEBUG] [Thread-126507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] client lang: <none>
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] server lang: <none>
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] kex follows: False
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:34:37.635 [DEBUG] [Thread-126507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:34:37.636 [DEBUG] [Thread-126507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:34:37.636 [DEBUG] [Thread-126507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:34:37.636 [DEBUG] [Thread-126507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:34:37.636 [DEBUG] [Thread-126507] [transport.py] [_log()] Compression: none
2025-12-04T00:34:37.636 [DEBUG] [Thread-126507] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:34:37.697 [DEBUG] [Thread-126507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:34:37.697 [DEBUG] [Thread-126507] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:34:37.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:34:37.698 [DEBUG] [Thread-126507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:34:37.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:34:37.756 [DEBUG] [Thread-126507] [transport.py] [_log()] userauth is OK
2025-12-04T00:34:37.756 [DEBUG] [Thread-126507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:34:37.756 [DEBUG] [Thread-126507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:34:37.756 [DEBUG] [Thread-126507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:34:37.757 [DEBUG] [Thread-126507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:34:37.776 [INFO] [Thread-126507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:34:37.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:34:37.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:34:38.572 [DEBUG] [Thread-126507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:34:38.572 [DEBUG] [Thread-126507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:34:38.620 [DEBUG] [Thread-126507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:34:38.620 [DEBUG] [Thread-126507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:34:38.629 [DEBUG] [Thread-126507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:34:38.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:34:38.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:34:38.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:34:38.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:34:38.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:34:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:34:38.665 [DEBUG] [Thread-126507] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:34:40.458 [DEBUG] [Thread-126509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:41.666 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:34:55.500 [DEBUG] [Thread-126510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:02.083 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:08.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:35:08.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:35:08.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:35:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 34, 52), 11.26, 46.54, 0.0, 21.9, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:35:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:34:52
2025-12-04T00:35:09.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:35:09.622 [DEBUG] [Thread-126511] [transport.py] [_log()] starting thread (client mode): 0xa519ba00
2025-12-04T00:35:09.622 [DEBUG] [Thread-126511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:35:09.642 [DEBUG] [Thread-126511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:35:09.642 [INFO] [Thread-126511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] client lang: <none>
2025-12-04T00:35:09.645 [DEBUG] [Thread-126511] [transport.py] [_log()] server lang: <none>
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] kex follows: False
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] Compression: none
2025-12-04T00:35:09.646 [DEBUG] [Thread-126511] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:35:09.663 [DEBUG] [Thread-126511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:35:09.664 [DEBUG] [Thread-126511] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:35:09.664 [DEBUG] [Thread-126511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:35:09.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:35:09.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:35:09.666 [DEBUG] [Thread-126511] [transport.py] [_log()] userauth is OK
2025-12-04T00:35:09.666 [DEBUG] [Thread-126511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:35:09.666 [DEBUG] [Thread-126511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:35:09.666 [DEBUG] [Thread-126511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:35:09.666 [DEBUG] [Thread-126511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:35:09.684 [INFO] [Thread-126511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:35:09.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:35:10.385 [DEBUG] [Thread-126511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:35:10.386 [DEBUG] [Thread-126511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:35:10.386 [DEBUG] [Thread-126511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:35:10.427 [DEBUG] [Thread-126511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:35:10.427 [DEBUG] [Thread-126511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:35:10.429 [DEBUG] [Thread-126511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:35:10.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:35:10.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:35:10.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:35:10.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:35:10.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:35:10.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:35:10.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:35:10.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:35:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:35:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.940672 -999.00  +13.90  20.28     51   +4.00 1 1 1 1 1     0    0 9.33 -21.06 ZNESW 15.5 20.3 146.6 22.0 14.3 -24.8 14.2 -24.3 14.1 -22.5 14.3 -23.6
2025-12-04T00:35:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:35:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:35:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.940672
2025-12-04T00:35:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:35:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:35:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:35:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:35:10.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:35:10.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:34:52', tmtdew=11.26, humidity=46.54, cloud=0.0, wind=21.9, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:34:52', seeing=1.17, atlas_timestamp='2025-12-03T22:34:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:32:00')
2025-12-04T00:35:10.454 [DEBUG] [Thread-126511] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:35:10.529 [DEBUG] [Thread-126514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:10.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:35:10.552 [DEBUG] [Thread-126515] [transport.py] [_log()] starting thread (client mode): 0xa277b2e0
2025-12-04T00:35:10.552 [DEBUG] [Thread-126515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:35:10.567 [DEBUG] [Thread-126515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:35:10.567 [INFO] [Thread-126515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:35:10.574 [DEBUG] [Thread-126515] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:10.575 [DEBUG] [Thread-126515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] client lang: <none>
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] server lang: <none>
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] kex follows: False
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] Compression: none
2025-12-04T00:35:10.576 [DEBUG] [Thread-126515] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:35:10.633 [DEBUG] [Thread-126515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:35:10.633 [DEBUG] [Thread-126515] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:35:10.634 [DEBUG] [Thread-126515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:35:10.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:35:10.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:35:10.690 [DEBUG] [Thread-126515] [transport.py] [_log()] userauth is OK
2025-12-04T00:35:10.690 [DEBUG] [Thread-126515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:35:10.690 [DEBUG] [Thread-126515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:35:10.690 [DEBUG] [Thread-126515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:35:10.690 [DEBUG] [Thread-126515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:35:10.709 [INFO] [Thread-126515] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:35:10.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:35:10.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:35:11.559 [DEBUG] [Thread-126515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:35:11.559 [DEBUG] [Thread-126515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:35:11.607 [DEBUG] [Thread-126515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:35:11.607 [DEBUG] [Thread-126515] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:35:11.616 [DEBUG] [Thread-126515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:35:11.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:35:11.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:35:11.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:35:11.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:35:11.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:35:11.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:35:11.650 [DEBUG] [Thread-126515] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:35:22.465 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:24.450 [DEBUG] [Thread-126517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:25.561 [DEBUG] [Thread-126518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:29.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:29.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:40.585 [DEBUG] [Thread-126519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:41.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:35:41.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:35:41.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:35:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 35, 24), 11.29, 46.46, 0.0, 22.53, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:35:42.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:35:24
2025-12-04T00:35:42.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:35:42.623 [DEBUG] [Thread-126520] [transport.py] [_log()] starting thread (client mode): 0xa514d960
2025-12-04T00:35:42.623 [DEBUG] [Thread-126520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:35:42.644 [DEBUG] [Thread-126520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:35:42.644 [INFO] [Thread-126520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] client lang: <none>
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] server lang: <none>
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] kex follows: False
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] Compression: none
2025-12-04T00:35:42.647 [DEBUG] [Thread-126520] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:35:42.664 [DEBUG] [Thread-126520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:35:42.665 [DEBUG] [Thread-126520] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:35:42.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:35:42.666 [DEBUG] [Thread-126520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:35:42.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:35:42.668 [DEBUG] [Thread-126520] [transport.py] [_log()] userauth is OK
2025-12-04T00:35:42.668 [DEBUG] [Thread-126520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:35:42.668 [DEBUG] [Thread-126520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:35:42.668 [DEBUG] [Thread-126520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:35:42.669 [DEBUG] [Thread-126520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:35:42.700 [INFO] [Thread-126520] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:35:42.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:35:42.895 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:35:43.332 [DEBUG] [Thread-126520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:35:43.332 [DEBUG] [Thread-126520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:35:43.333 [DEBUG] [Thread-126520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:35:43.373 [DEBUG] [Thread-126520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:35:43.373 [DEBUG] [Thread-126520] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:35:43.376 [DEBUG] [Thread-126520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:35:43.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:35:43.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:35:43.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:35:43.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:35:43.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:35:43.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:35:43.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:35:43.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.941019 -999.00  +13.90  20.12     51   +4.00 1 1 1 1 1     0    0 9.68 -21.05 ZNESW 14.4 20.1 142.8 21.4 14.3 -24.8 14.2 -24.2 14.0 -22.6 14.3 -23.5
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.941019
2025-12-04T00:35:43.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:35:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:35:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:35:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:35:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:35:43.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:35:24', tmtdew=11.29, humidity=46.46, cloud=0.0, wind=22.53, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:35:24', seeing=1.04, atlas_timestamp='2025-12-03T22:35:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.023749999999999716, -0.010749999999999815, -0.053500000000001435, -0.01750000000000007, 0.017250000000000654, -0.06600000000000072, 0.03325000000000067, 0.023499999999998522, 0.02800000000000047, 0.03774999999999906, -0.0009999999999994458, 0.03049999999999997, 0.0072499999999990905, -0.15549999999999997, -0.10200000000000031, 0.0012500000000006395, -0.0045000000000001705, 0.013999999999999346, -0.04475000000000051, 0.11599999999999966, 0.016749999999998266, -0.06374999999999886, -0.06974999999999909, 0.030999999999998806, -0.0035000000000007248, -0.0547500000000003, 0.02200000000000024, 0.04499999999999993, 0.014000000000001123, -0.11899999999999977, -0.06049999999999933, 0.007749999999997925], zp_timestamp='2025-12-03T22:32:00')
2025-12-04T00:35:43.400 [DEBUG] [Thread-126520] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:35:43.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:35:43.497 [DEBUG] [Thread-126523] [transport.py] [_log()] starting thread (client mode): 0xa27a0dc0
2025-12-04T00:35:43.497 [DEBUG] [Thread-126523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:35:43.513 [DEBUG] [Thread-126523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:35:43.513 [INFO] [Thread-126523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:35:43.520 [DEBUG] [Thread-126523] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] client lang: <none>
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] server lang: <none>
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] kex follows: False
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] Compression: none
2025-12-04T00:35:43.521 [DEBUG] [Thread-126523] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:35:43.578 [DEBUG] [Thread-126523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:35:43.578 [DEBUG] [Thread-126523] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:35:43.579 [DEBUG] [Thread-126523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:35:43.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:35:43.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:35:43.634 [DEBUG] [Thread-126523] [transport.py] [_log()] userauth is OK
2025-12-04T00:35:43.634 [DEBUG] [Thread-126523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:35:43.635 [DEBUG] [Thread-126523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:35:43.635 [DEBUG] [Thread-126523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:35:43.635 [DEBUG] [Thread-126523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:35:43.653 [INFO] [Thread-126523] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:35:43.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:35:43.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:35:44.457 [DEBUG] [Thread-126523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:35:44.457 [DEBUG] [Thread-126523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:35:44.507 [DEBUG] [Thread-126523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:35:44.508 [DEBUG] [Thread-126523] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:35:44.517 [DEBUG] [Thread-126523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:35:44.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:35:44.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:35:44.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:35:44.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:35:44.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:35:44.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:35:44.556 [DEBUG] [Thread-126523] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:35:55.613 [DEBUG] [Thread-126525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:03.311 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:10.666 [DEBUG] [Thread-126526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:36:14.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:36:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:36:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 35, 56), 11.28, 46.49, 0.0, 22.41, 14.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:36:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:35:56
2025-12-04T00:36:15.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:36:15.563 [DEBUG] [Thread-126527] [transport.py] [_log()] starting thread (client mode): 0xa51cd9c0
2025-12-04T00:36:15.563 [DEBUG] [Thread-126527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:36:15.585 [DEBUG] [Thread-126527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:36:15.585 [INFO] [Thread-126527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] client lang: <none>
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] server lang: <none>
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] kex follows: False
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] Compression: none
2025-12-04T00:36:15.589 [DEBUG] [Thread-126527] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:36:15.606 [DEBUG] [Thread-126527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:36:15.606 [DEBUG] [Thread-126527] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:36:15.606 [DEBUG] [Thread-126527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:36:15.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:36:15.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:36:15.607 [DEBUG] [Thread-126527] [transport.py] [_log()] userauth is OK
2025-12-04T00:36:15.607 [DEBUG] [Thread-126527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:36:15.607 [DEBUG] [Thread-126527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:36:15.607 [DEBUG] [Thread-126527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:36:15.607 [DEBUG] [Thread-126527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:36:15.616 [INFO] [Thread-126527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:36:15.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:36:16.270 [DEBUG] [Thread-126527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:36:16.270 [DEBUG] [Thread-126527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:36:16.270 [DEBUG] [Thread-126527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:36:16.312 [DEBUG] [Thread-126527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:36:16.312 [DEBUG] [Thread-126527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:36:16.315 [DEBUG] [Thread-126527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:36:16.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:36:16.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:36:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:36:16.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:36:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:36:16.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:36:16.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:36:16.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:36:16.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.941367 -999.00  +13.90  18.05     51   +4.10 1 1 1 1 1     0    0 9.49 -23.10 ZNESW 19.3 18.1 147.0 26.4 14.3 -24.8 14.2 -24.2 14.0 -22.5 14.3 -23.4
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.941367
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:36:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:35:56', tmtdew=11.28, humidity=46.49, cloud=0.0, wind=22.41, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:35:56', seeing=1.04, atlas_timestamp='2025-12-03T22:35:34.109', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:36:16.334 [DEBUG] [Thread-126527] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:36:16.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:36:16.421 [DEBUG] [Thread-126530] [transport.py] [_log()] starting thread (client mode): 0xa51cf790
2025-12-04T00:36:16.421 [DEBUG] [Thread-126530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:36:16.435 [DEBUG] [Thread-126530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:36:16.435 [INFO] [Thread-126530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:36:16.442 [DEBUG] [Thread-126530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] client lang: <none>
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] server lang: <none>
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] kex follows: False
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] Compression: none
2025-12-04T00:36:16.443 [DEBUG] [Thread-126530] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:36:16.497 [DEBUG] [Thread-126530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:36:16.497 [DEBUG] [Thread-126530] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:36:16.497 [DEBUG] [Thread-126530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:36:16.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:36:16.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:36:16.559 [DEBUG] [Thread-126530] [transport.py] [_log()] userauth is OK
2025-12-04T00:36:16.559 [DEBUG] [Thread-126530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:36:16.559 [DEBUG] [Thread-126530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:36:16.559 [DEBUG] [Thread-126530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:36:16.559 [DEBUG] [Thread-126530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:36:16.572 [INFO] [Thread-126530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:36:16.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:36:16.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:36:17.414 [DEBUG] [Thread-126530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:36:17.415 [DEBUG] [Thread-126530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:36:17.462 [DEBUG] [Thread-126530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:36:17.462 [DEBUG] [Thread-126530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:36:17.471 [DEBUG] [Thread-126530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:36:17.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:36:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:36:17.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:36:17.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:36:17.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:36:17.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:36:17.502 [DEBUG] [Thread-126530] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:36:23.742 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:24.509 [DEBUG] [Thread-126532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:25.692 [DEBUG] [Thread-126533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:29.490 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:29.491 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:40.740 [DEBUG] [Thread-126534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:44.187 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:36:47.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:36:47.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:36:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:36:48.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 36, 28), 11.3, 46.42, 0.0, 22.39, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:36:48.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:36:28
2025-12-04T00:36:48.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:36:48.494 [DEBUG] [Thread-126535] [transport.py] [_log()] starting thread (client mode): 0xa27a15a0
2025-12-04T00:36:48.494 [DEBUG] [Thread-126535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:36:48.515 [DEBUG] [Thread-126535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:36:48.515 [INFO] [Thread-126535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:36:48.518 [DEBUG] [Thread-126535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:36:48.518 [DEBUG] [Thread-126535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:36:48.518 [DEBUG] [Thread-126535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:36:48.518 [DEBUG] [Thread-126535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] client lang: <none>
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] server lang: <none>
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] kex follows: False
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] Compression: none
2025-12-04T00:36:48.519 [DEBUG] [Thread-126535] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:36:48.535 [DEBUG] [Thread-126535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:36:48.535 [DEBUG] [Thread-126535] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:36:48.536 [DEBUG] [Thread-126535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:36:48.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:36:48.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:36:48.538 [DEBUG] [Thread-126535] [transport.py] [_log()] userauth is OK
2025-12-04T00:36:48.538 [DEBUG] [Thread-126535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:36:48.538 [DEBUG] [Thread-126535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:36:48.538 [DEBUG] [Thread-126535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:36:48.538 [DEBUG] [Thread-126535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:36:48.554 [INFO] [Thread-126535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:36:48.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:36:49.177 [DEBUG] [Thread-126535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:36:49.183 [DEBUG] [Thread-126535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:36:49.183 [DEBUG] [Thread-126535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:36:49.219 [DEBUG] [Thread-126535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:36:49.219 [DEBUG] [Thread-126535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:36:49.221 [DEBUG] [Thread-126535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:36:49.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:36:49.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:36:49.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:36:49.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:36:49.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:36:49.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:36:49.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:36:49.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:36:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:36:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.941714 -999.00  +13.90  17.68     51   +4.00 1 1 1 1 1     0    0 9.71 -20.89 ZNESW 16.3 17.7 145.8 20.0 14.3 -24.7 14.2 -24.3 14.1 -22.7 14.3 -23.5
2025-12-04T00:36:49.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:36:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:36:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.941714
2025-12-04T00:36:49.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:36:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:36:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:36:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:36:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:36:49.245 [DEBUG] [Thread-126535] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:36:49.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:36:28', tmtdew=11.3, humidity=46.42, cloud=0.0, wind=22.39, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:36:28', seeing=1.16, atlas_timestamp='2025-12-03T22:36:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:36:49.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:36:49.341 [DEBUG] [Thread-126538] [transport.py] [_log()] starting thread (client mode): 0xa5199060
2025-12-04T00:36:49.341 [DEBUG] [Thread-126538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:36:49.355 [DEBUG] [Thread-126538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:36:49.355 [INFO] [Thread-126538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] client lang: <none>
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] server lang: <none>
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] kex follows: False
2025-12-04T00:36:49.363 [DEBUG] [Thread-126538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] Compression: none
2025-12-04T00:36:49.364 [DEBUG] [Thread-126538] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:36:49.419 [DEBUG] [Thread-126538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:36:49.419 [DEBUG] [Thread-126538] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:36:49.419 [DEBUG] [Thread-126538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:36:49.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:36:49.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:36:49.475 [DEBUG] [Thread-126538] [transport.py] [_log()] userauth is OK
2025-12-04T00:36:49.475 [DEBUG] [Thread-126538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:36:49.475 [DEBUG] [Thread-126538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:36:49.475 [DEBUG] [Thread-126538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:36:49.475 [DEBUG] [Thread-126538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:36:49.498 [INFO] [Thread-126538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:36:49.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:36:49.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:36:50.329 [DEBUG] [Thread-126538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:36:50.330 [DEBUG] [Thread-126538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:36:50.378 [DEBUG] [Thread-126538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:36:50.378 [DEBUG] [Thread-126538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:36:50.387 [DEBUG] [Thread-126538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:36:50.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:36:50.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:36:50.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:36:50.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:36:50.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:36:50.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:36:50.419 [DEBUG] [Thread-126538] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:36:55.770 [DEBUG] [Thread-126540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:04.604 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:10.809 [DEBUG] [Thread-126541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:20.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:37:20.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:37:20.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:37:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 37), 11.26, 46.54, 0.0, 23.61, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:37:21.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:37:00
2025-12-04T00:37:21.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:37:21.391 [DEBUG] [Thread-126542] [transport.py] [_log()] starting thread (client mode): 0x9fd20c70
2025-12-04T00:37:21.391 [DEBUG] [Thread-126542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:37:21.411 [DEBUG] [Thread-126542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:37:21.411 [INFO] [Thread-126542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] client lang: <none>
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] server lang: <none>
2025-12-04T00:37:21.415 [DEBUG] [Thread-126542] [transport.py] [_log()] kex follows: False
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] Compression: none
2025-12-04T00:37:21.416 [DEBUG] [Thread-126542] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:37:21.434 [DEBUG] [Thread-126542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:37:21.435 [DEBUG] [Thread-126542] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:37:21.435 [DEBUG] [Thread-126542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:37:21.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:37:21.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:37:21.476 [DEBUG] [Thread-126542] [transport.py] [_log()] userauth is OK
2025-12-04T00:37:21.476 [DEBUG] [Thread-126542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:37:21.476 [DEBUG] [Thread-126542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:37:21.476 [DEBUG] [Thread-126542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:37:21.476 [DEBUG] [Thread-126542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:37:21.494 [INFO] [Thread-126542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:37:21.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:37:22.138 [DEBUG] [Thread-126542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:37:22.138 [DEBUG] [Thread-126542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:37:22.139 [DEBUG] [Thread-126542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:37:22.179 [DEBUG] [Thread-126542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:37:22.179 [DEBUG] [Thread-126542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:37:22.181 [DEBUG] [Thread-126542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:37:22.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:37:22.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:37:22.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:37:22.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:37:22.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:37:22.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:37:22.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.942061 -999.00  +13.90  19.48     51   +4.00 1 1 1 1 1     0    0 9.51 -21.07 ZNESW 16.3 19.5 143.2 25.6 14.3 -24.7 14.2 -24.4 14.0 -22.6 14.3 -23.4
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.942061
2025-12-04T00:37:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:37:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:37:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:37:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:37:22.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:37:22.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:37:00', tmtdew=11.26, humidity=46.54, cloud=0.0, wind=23.61, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:37:01', seeing=1.16, atlas_timestamp='2025-12-03T22:36:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:37:22.206 [DEBUG] [Thread-126542] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:37:22.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:37:22.303 [DEBUG] [Thread-126545] [transport.py] [_log()] starting thread (client mode): 0xa7bd1540
2025-12-04T00:37:22.303 [DEBUG] [Thread-126545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:37:22.317 [DEBUG] [Thread-126545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:37:22.317 [INFO] [Thread-126545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] client lang: <none>
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] server lang: <none>
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] kex follows: False
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] Compression: none
2025-12-04T00:37:22.325 [DEBUG] [Thread-126545] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:37:22.382 [DEBUG] [Thread-126545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:37:22.383 [DEBUG] [Thread-126545] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:37:22.383 [DEBUG] [Thread-126545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:37:22.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:37:22.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:37:22.440 [DEBUG] [Thread-126545] [transport.py] [_log()] userauth is OK
2025-12-04T00:37:22.440 [DEBUG] [Thread-126545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:37:22.440 [DEBUG] [Thread-126545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:37:22.440 [DEBUG] [Thread-126545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:37:22.440 [DEBUG] [Thread-126545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:37:22.458 [INFO] [Thread-126545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:37:22.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:37:22.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:37:23.319 [DEBUG] [Thread-126545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:37:23.319 [DEBUG] [Thread-126545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:37:23.367 [DEBUG] [Thread-126545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:37:23.367 [DEBUG] [Thread-126545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:37:23.376 [DEBUG] [Thread-126545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:37:23.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:37:23.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:37:23.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:37:23.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:37:23.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:37:23.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:37:23.410 [DEBUG] [Thread-126545] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:37:24.568 [DEBUG] [Thread-126547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:25.071 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:25.840 [DEBUG] [Thread-126548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:29.693 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:29.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:40.883 [DEBUG] [Thread-126549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:45.525 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:37:53.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:37:53.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:37:54.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 37, 32), 11.26, 46.56, 0.0, 25.46, 14.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:37:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:37:32
2025-12-04T00:37:54.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:37:54.378 [DEBUG] [Thread-126550] [transport.py] [_log()] starting thread (client mode): 0xa51ceda0
2025-12-04T00:37:54.378 [DEBUG] [Thread-126550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:37:54.398 [DEBUG] [Thread-126550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:37:54.398 [INFO] [Thread-126550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] client lang: <none>
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] server lang: <none>
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] kex follows: False
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:37:54.402 [DEBUG] [Thread-126550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:37:54.403 [DEBUG] [Thread-126550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:37:54.403 [DEBUG] [Thread-126550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:37:54.403 [DEBUG] [Thread-126550] [transport.py] [_log()] Compression: none
2025-12-04T00:37:54.403 [DEBUG] [Thread-126550] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:37:54.419 [DEBUG] [Thread-126550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:37:54.419 [DEBUG] [Thread-126550] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:37:54.420 [DEBUG] [Thread-126550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:37:54.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:37:54.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:37:54.422 [DEBUG] [Thread-126550] [transport.py] [_log()] userauth is OK
2025-12-04T00:37:54.422 [DEBUG] [Thread-126550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:37:54.422 [DEBUG] [Thread-126550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:37:54.422 [DEBUG] [Thread-126550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:37:54.422 [DEBUG] [Thread-126550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:37:54.446 [INFO] [Thread-126550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:37:54.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:37:55.081 [DEBUG] [Thread-126550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:37:55.081 [DEBUG] [Thread-126550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:37:55.081 [DEBUG] [Thread-126550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:37:55.122 [DEBUG] [Thread-126550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:37:55.122 [DEBUG] [Thread-126550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:37:55.124 [DEBUG] [Thread-126550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:37:55.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:37:55.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:37:55.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:37:55.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:37:55.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:37:55.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:37:55.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.942755 -999.00  +14.00  13.80     51   +4.00 1 1 1 1 1     0    0 9.49 -21.65 ZNESW 21.2 13.8 152.2 28.3 14.3 -24.7 14.2 -24.2 14.0 -22.5 14.3 -23.5
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.942755
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:37:55.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:37:32', tmtdew=11.26, humidity=46.56, cloud=0.0, wind=25.46, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:37:33', seeing=1.33, atlas_timestamp='2025-12-03T22:37:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:37:55.145 [DEBUG] [Thread-126550] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:37:55.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:37:55.229 [DEBUG] [Thread-126553] [transport.py] [_log()] starting thread (client mode): 0x9fd22e00
2025-12-04T00:37:55.229 [DEBUG] [Thread-126553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:37:55.244 [DEBUG] [Thread-126553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:37:55.244 [INFO] [Thread-126553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:37:55.251 [DEBUG] [Thread-126553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] client lang: <none>
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] server lang: <none>
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] kex follows: False
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] Compression: none
2025-12-04T00:37:55.252 [DEBUG] [Thread-126553] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:37:55.308 [DEBUG] [Thread-126553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:37:55.308 [DEBUG] [Thread-126553] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:37:55.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:37:55.309 [DEBUG] [Thread-126553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:37:55.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:37:55.365 [DEBUG] [Thread-126553] [transport.py] [_log()] userauth is OK
2025-12-04T00:37:55.365 [DEBUG] [Thread-126553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:37:55.365 [DEBUG] [Thread-126553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:37:55.365 [DEBUG] [Thread-126553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:37:55.365 [DEBUG] [Thread-126553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:37:55.383 [INFO] [Thread-126553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:37:55.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:37:55.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:37:55.912 [DEBUG] [Thread-126555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:37:56.201 [DEBUG] [Thread-126553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:37:56.201 [DEBUG] [Thread-126553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:37:56.249 [DEBUG] [Thread-126553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:37:56.249 [DEBUG] [Thread-126553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:37:56.258 [DEBUG] [Thread-126553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:37:56.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:37:56.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:37:56.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:37:56.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:37:56.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:37:56.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:37:56.292 [DEBUG] [Thread-126553] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:38:05.927 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:10.956 [DEBUG] [Thread-126556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:24.629 [DEBUG] [Thread-126557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:25.982 [DEBUG] [Thread-126558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:26.312 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:26.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:38:26.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:38:26.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:38:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 38, 5), 11.27, 46.52, 0.0, 22.11, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:38:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:38:05
2025-12-04T00:38:27.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:38:27.252 [DEBUG] [Thread-126559] [transport.py] [_log()] starting thread (client mode): 0xa27a0160
2025-12-04T00:38:27.252 [DEBUG] [Thread-126559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:38:27.272 [DEBUG] [Thread-126559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:38:27.272 [INFO] [Thread-126559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] client lang: <none>
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] server lang: <none>
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] kex follows: False
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:38:27.276 [DEBUG] [Thread-126559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:38:27.277 [DEBUG] [Thread-126559] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:38:27.277 [DEBUG] [Thread-126559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:38:27.277 [DEBUG] [Thread-126559] [transport.py] [_log()] Compression: none
2025-12-04T00:38:27.277 [DEBUG] [Thread-126559] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:38:27.296 [DEBUG] [Thread-126559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:38:27.296 [DEBUG] [Thread-126559] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:38:27.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:38:27.297 [DEBUG] [Thread-126559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:38:27.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:38:27.299 [DEBUG] [Thread-126559] [transport.py] [_log()] userauth is OK
2025-12-04T00:38:27.299 [DEBUG] [Thread-126559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:38:27.299 [DEBUG] [Thread-126559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:38:27.300 [DEBUG] [Thread-126559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:38:27.300 [DEBUG] [Thread-126559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:38:27.337 [INFO] [Thread-126559] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:38:27.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:38:27.943 [DEBUG] [Thread-126559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:38:27.943 [DEBUG] [Thread-126559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:38:27.944 [DEBUG] [Thread-126559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:38:27.985 [DEBUG] [Thread-126559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:38:27.985 [DEBUG] [Thread-126559] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:38:27.988 [DEBUG] [Thread-126559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:38:27.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:38:28.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:38:28.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:38:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:38:28.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:38:28.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:38:28.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:38:28.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:38:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:38:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.943103 -999.00  +14.00  17.62     51   +4.10 1 1 1 1 1     0    0 9.35 -21.05 ZNESW 22.0 17.6 150.8 28.3 14.3 -24.6 14.2 -24.1 14.0 -22.5 14.3 -23.3
2025-12-04T00:38:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:38:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:38:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.943103
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:38:28.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:38:05', tmtdew=11.27, humidity=46.52, cloud=0.0, wind=22.11, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:38:05', seeing=1.4, atlas_timestamp='2025-12-03T22:38:04.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:38:28.012 [DEBUG] [Thread-126559] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:38:28.108 [DEBUG] [Thread-126562] [transport.py] [_log()] starting thread (client mode): 0xa7bd3e50
2025-12-04T00:38:28.108 [DEBUG] [Thread-126562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:38:28.123 [DEBUG] [Thread-126562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:38:28.123 [INFO] [Thread-126562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:38:28.132 [DEBUG] [Thread-126562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] client lang: <none>
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] server lang: <none>
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] kex follows: False
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] Compression: none
2025-12-04T00:38:28.133 [DEBUG] [Thread-126562] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:38:28.188 [DEBUG] [Thread-126562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:38:28.189 [DEBUG] [Thread-126562] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:38:28.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:38:28.189 [DEBUG] [Thread-126562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:38:28.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:38:28.245 [DEBUG] [Thread-126562] [transport.py] [_log()] userauth is OK
2025-12-04T00:38:28.245 [DEBUG] [Thread-126562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:38:28.245 [DEBUG] [Thread-126562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:38:28.245 [DEBUG] [Thread-126562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:38:28.245 [DEBUG] [Thread-126562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:38:28.264 [INFO] [Thread-126562] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:38:28.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:38:28.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:38:29.117 [DEBUG] [Thread-126562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:38:29.117 [DEBUG] [Thread-126562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:38:29.165 [DEBUG] [Thread-126562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:38:29.165 [DEBUG] [Thread-126562] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:38:29.174 [DEBUG] [Thread-126562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:38:29.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:38:29.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:38:29.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:38:29.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:38:29.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:38:29.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:38:29.212 [DEBUG] [Thread-126562] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:38:29.892 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:29.894 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:41.013 [DEBUG] [Thread-126564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:46.699 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:56.053 [DEBUG] [Thread-126565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:38:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:38:59.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:38:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 38, 37), 11.37, 46.01, 0.0, 24.42, 14.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:38:59.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:38:37
2025-12-04T00:39:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:39:00.212 [DEBUG] [Thread-126566] [transport.py] [_log()] starting thread (client mode): 0xa7bd31c0
2025-12-04T00:39:00.212 [DEBUG] [Thread-126566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:39:00.231 [DEBUG] [Thread-126566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:39:00.232 [INFO] [Thread-126566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:39:00.235 [DEBUG] [Thread-126566] [transport.py] [_log()] client lang: <none>
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] server lang: <none>
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] kex follows: False
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] Compression: none
2025-12-04T00:39:00.236 [DEBUG] [Thread-126566] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:39:00.258 [DEBUG] [Thread-126566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:39:00.259 [DEBUG] [Thread-126566] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:39:00.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:39:00.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:39:00.260 [DEBUG] [Thread-126566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:39:00.261 [DEBUG] [Thread-126566] [transport.py] [_log()] userauth is OK
2025-12-04T00:39:00.261 [DEBUG] [Thread-126566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:39:00.261 [DEBUG] [Thread-126566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:39:00.261 [DEBUG] [Thread-126566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:39:00.261 [DEBUG] [Thread-126566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:39:00.285 [INFO] [Thread-126566] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:39:00.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:39:00.944 [DEBUG] [Thread-126566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:39:00.944 [DEBUG] [Thread-126566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:39:00.944 [DEBUG] [Thread-126566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:39:00.985 [DEBUG] [Thread-126566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:39:00.985 [DEBUG] [Thread-126566] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:39:00.987 [DEBUG] [Thread-126566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:39:00.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:39:00.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:39:01.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:39:01.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:39:01.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:39:01.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:39:01.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:39:01.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:39:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:39:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.943450 -999.00  +14.00  21.50     51   +4.10 1 1 1 1 1     0    0 9.26 -20.02 ZNESW 19.8 21.5 146.0 25.1 14.3 -24.7 14.2 -24.2 14.0 -22.6 14.3 -23.5
2025-12-04T00:39:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:39:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:39:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.943450
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:39:01.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:38:37', tmtdew=11.37, humidity=46.01, cloud=0.0, wind=24.42, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:38:37', seeing=1.11, atlas_timestamp='2025-12-03T22:38:34.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:35:00')
2025-12-04T00:39:01.013 [DEBUG] [Thread-126566] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:39:01.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:39:01.101 [DEBUG] [Thread-126569] [transport.py] [_log()] starting thread (client mode): 0xa27a15a0
2025-12-04T00:39:01.101 [DEBUG] [Thread-126569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:39:01.115 [DEBUG] [Thread-126569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:39:01.115 [INFO] [Thread-126569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] client lang: <none>
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] server lang: <none>
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] kex follows: False
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:39:01.123 [DEBUG] [Thread-126569] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:39:01.124 [DEBUG] [Thread-126569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:39:01.124 [DEBUG] [Thread-126569] [transport.py] [_log()] Compression: none
2025-12-04T00:39:01.124 [DEBUG] [Thread-126569] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:39:01.180 [DEBUG] [Thread-126569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:39:01.181 [DEBUG] [Thread-126569] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:39:01.181 [DEBUG] [Thread-126569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:39:01.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:39:01.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:39:01.237 [DEBUG] [Thread-126569] [transport.py] [_log()] userauth is OK
2025-12-04T00:39:01.237 [DEBUG] [Thread-126569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:39:01.237 [DEBUG] [Thread-126569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:39:01.237 [DEBUG] [Thread-126569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:39:01.237 [DEBUG] [Thread-126569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:39:01.252 [INFO] [Thread-126569] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:39:01.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:39:01.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:39:02.118 [DEBUG] [Thread-126569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:39:02.118 [DEBUG] [Thread-126569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:39:02.167 [DEBUG] [Thread-126569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:39:02.168 [DEBUG] [Thread-126569] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:39:02.179 [DEBUG] [Thread-126569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:39:02.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:39:02.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:39:02.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:39:02.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:39:02.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:39:02.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:39:02.214 [DEBUG] [Thread-126569] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:39:07.109 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:11.081 [DEBUG] [Thread-126571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:24.695 [DEBUG] [Thread-126572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:26.114 [DEBUG] [Thread-126573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:27.490 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:30.096 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:30.097 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:32.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:39:32.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:39:32.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:39:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 39, 9), 11.35, 46.07, 0.0, 24.33, 14.04, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:39:32.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:39:09
2025-12-04T00:39:33.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:39:33.205 [DEBUG] [Thread-126574] [transport.py] [_log()] starting thread (client mode): 0xa2784820
2025-12-04T00:39:33.205 [DEBUG] [Thread-126574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:39:33.225 [DEBUG] [Thread-126574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:39:33.225 [INFO] [Thread-126574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] client lang: <none>
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] server lang: <none>
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] kex follows: False
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] Compression: none
2025-12-04T00:39:33.228 [DEBUG] [Thread-126574] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:39:33.243 [DEBUG] [Thread-126574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:39:33.244 [DEBUG] [Thread-126574] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:39:33.244 [DEBUG] [Thread-126574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:39:33.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:39:33.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:39:33.246 [DEBUG] [Thread-126574] [transport.py] [_log()] userauth is OK
2025-12-04T00:39:33.246 [DEBUG] [Thread-126574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:39:33.246 [DEBUG] [Thread-126574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:39:33.247 [DEBUG] [Thread-126574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:39:33.247 [DEBUG] [Thread-126574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:39:33.267 [INFO] [Thread-126574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:39:33.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:39:33.899 [DEBUG] [Thread-126574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:39:33.899 [DEBUG] [Thread-126574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:39:33.900 [DEBUG] [Thread-126574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:39:33.941 [DEBUG] [Thread-126574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:39:33.941 [DEBUG] [Thread-126574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:39:33.944 [DEBUG] [Thread-126574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:39:33.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:39:33.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:39:33.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:39:33.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:39:33.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:39:33.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:39:33.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:39:33.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:39:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:39:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.943797 -999.00  +14.00  18.12     51   +4.10 1 1 1 1 1     0    0 9.51 -17.65 ZNESW 17.9 18.1 148.7 25.2 14.3 -24.6 14.2 -24.2 14.0 -22.6 14.3 -23.6
2025-12-04T00:39:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:39:33.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:39:33.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.943797
2025-12-04T00:39:33.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:39:33.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:39:33.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:39:33.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:39:33.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:39:33.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:39:09', tmtdew=11.35, humidity=46.07, cloud=0.0, wind=24.33, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:39:09', seeing=1.74, atlas_timestamp='2025-12-03T22:39:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:38:00')
2025-12-04T00:39:33.971 [DEBUG] [Thread-126574] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:39:34.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:39:34.068 [DEBUG] [Thread-126577] [transport.py] [_log()] starting thread (client mode): 0xa51cd210
2025-12-04T00:39:34.069 [DEBUG] [Thread-126577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:39:34.083 [DEBUG] [Thread-126577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:39:34.083 [INFO] [Thread-126577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:39:34.091 [DEBUG] [Thread-126577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:39:34.091 [DEBUG] [Thread-126577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:39:34.091 [DEBUG] [Thread-126577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] client lang: <none>
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] server lang: <none>
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] kex follows: False
2025-12-04T00:39:34.092 [DEBUG] [Thread-126577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:39:34.093 [DEBUG] [Thread-126577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:39:34.093 [DEBUG] [Thread-126577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:39:34.093 [DEBUG] [Thread-126577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:39:34.093 [DEBUG] [Thread-126577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:39:34.094 [DEBUG] [Thread-126577] [transport.py] [_log()] Compression: none
2025-12-04T00:39:34.094 [DEBUG] [Thread-126577] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:39:34.150 [DEBUG] [Thread-126577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:39:34.150 [DEBUG] [Thread-126577] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:39:34.151 [DEBUG] [Thread-126577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:39:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:39:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:39:34.206 [DEBUG] [Thread-126577] [transport.py] [_log()] userauth is OK
2025-12-04T00:39:34.206 [DEBUG] [Thread-126577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:39:34.206 [DEBUG] [Thread-126577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:39:34.206 [DEBUG] [Thread-126577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:39:34.206 [DEBUG] [Thread-126577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:39:34.220 [INFO] [Thread-126577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:39:34.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:39:34.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:39:35.053 [DEBUG] [Thread-126577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:39:35.053 [DEBUG] [Thread-126577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:39:35.102 [DEBUG] [Thread-126577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:39:35.102 [DEBUG] [Thread-126577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:39:35.111 [DEBUG] [Thread-126577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:39:35.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:39:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:39:35.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:39:35.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:39:35.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:39:35.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:39:35.145 [DEBUG] [Thread-126577] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:39:41.141 [DEBUG] [Thread-126579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:47.873 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:39:56.178 [DEBUG] [Thread-126580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:40:05.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:40:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:40:05.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 39, 41), 11.27, 46.66, 0.0, 26.89, 14.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:40:05.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:39:41
2025-12-04T00:40:06.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:40:06.180 [DEBUG] [Thread-126581] [transport.py] [_log()] starting thread (client mode): 0xa2744ac0
2025-12-04T00:40:06.180 [DEBUG] [Thread-126581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:40:06.201 [DEBUG] [Thread-126581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:40:06.201 [INFO] [Thread-126581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] client lang: <none>
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] server lang: <none>
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] kex follows: False
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] Compression: none
2025-12-04T00:40:06.204 [DEBUG] [Thread-126581] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:40:06.220 [DEBUG] [Thread-126581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:40:06.221 [DEBUG] [Thread-126581] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:40:06.221 [DEBUG] [Thread-126581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:40:06.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:40:06.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:40:06.222 [DEBUG] [Thread-126581] [transport.py] [_log()] userauth is OK
2025-12-04T00:40:06.222 [DEBUG] [Thread-126581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:40:06.222 [DEBUG] [Thread-126581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:40:06.222 [DEBUG] [Thread-126581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:40:06.222 [DEBUG] [Thread-126581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:40:06.238 [INFO] [Thread-126581] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:40:06.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:40:07.075 [DEBUG] [Thread-126581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:40:07.075 [DEBUG] [Thread-126581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:40:07.075 [DEBUG] [Thread-126581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:40:07.115 [DEBUG] [Thread-126581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:40:07.115 [DEBUG] [Thread-126581] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:40:07.117 [DEBUG] [Thread-126581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:40:07.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:40:07.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:40:07.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:40:07.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:40:07.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:40:07.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:40:07.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.944144 -999.00  +14.00  20.92     51   +4.10 1 1 1 1 1     0    0 9.81 -15.68 ZNESW 19.2 20.9 142.4 24.8 14.3 -24.7 14.2 -24.2 14.0 -22.6 14.3 -23.3
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.944144
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:40:07.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:39:41', tmtdew=11.27, humidity=46.66, cloud=0.0, wind=26.89, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:39:41', seeing=1.74, atlas_timestamp='2025-12-03T22:39:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:38:00')
2025-12-04T00:40:07.156 [DEBUG] [Thread-126581] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:40:07.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:40:07.240 [DEBUG] [Thread-126584] [transport.py] [_log()] starting thread (client mode): 0x9fd22ec0
2025-12-04T00:40:07.240 [DEBUG] [Thread-126584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:40:07.255 [DEBUG] [Thread-126584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:40:07.255 [INFO] [Thread-126584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] client lang: <none>
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] server lang: <none>
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] kex follows: False
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] Compression: none
2025-12-04T00:40:07.262 [DEBUG] [Thread-126584] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:40:07.320 [DEBUG] [Thread-126584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:40:07.320 [DEBUG] [Thread-126584] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:40:07.320 [DEBUG] [Thread-126584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:40:07.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:40:07.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:40:07.381 [DEBUG] [Thread-126584] [transport.py] [_log()] userauth is OK
2025-12-04T00:40:07.382 [DEBUG] [Thread-126584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:40:07.382 [DEBUG] [Thread-126584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:40:07.382 [DEBUG] [Thread-126584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:40:07.382 [DEBUG] [Thread-126584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:40:07.401 [INFO] [Thread-126584] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:40:07.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:40:07.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:40:08.254 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:08.256 [DEBUG] [Thread-126584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:40:08.256 [DEBUG] [Thread-126584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:40:08.305 [DEBUG] [Thread-126584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:40:08.305 [DEBUG] [Thread-126584] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:40:08.313 [DEBUG] [Thread-126584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:40:08.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:40:08.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:40:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:40:08.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:40:08.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:40:08.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:40:08.344 [DEBUG] [Thread-126584] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:40:11.213 [DEBUG] [Thread-126586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:24.756 [DEBUG] [Thread-126587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:26.256 [DEBUG] [Thread-126588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:28.693 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:30.295 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:30.296 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:38.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:40:38.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:40:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:40:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 40, 13), 11.26, 46.69, 0.0, 27.23, 13.99, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:40:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:40:13
2025-12-04T00:40:39.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:40:39.321 [DEBUG] [Thread-126589] [transport.py] [_log()] starting thread (client mode): 0xa27845b0
2025-12-04T00:40:39.321 [DEBUG] [Thread-126589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:40:39.337 [DEBUG] [Thread-126589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:40:39.337 [INFO] [Thread-126589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] client lang: <none>
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] server lang: <none>
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] kex follows: False
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] Compression: none
2025-12-04T00:40:39.340 [DEBUG] [Thread-126589] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:40:39.357 [DEBUG] [Thread-126589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:40:39.357 [DEBUG] [Thread-126589] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:40:39.357 [DEBUG] [Thread-126589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:40:39.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:40:39.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:40:39.359 [DEBUG] [Thread-126589] [transport.py] [_log()] userauth is OK
2025-12-04T00:40:39.359 [DEBUG] [Thread-126589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:40:39.360 [DEBUG] [Thread-126589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:40:39.360 [DEBUG] [Thread-126589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:40:39.360 [DEBUG] [Thread-126589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:40:39.384 [INFO] [Thread-126589] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:40:39.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:40:39.983 [DEBUG] [Thread-126589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:40:39.983 [DEBUG] [Thread-126589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:40:39.992 [DEBUG] [Thread-126589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:40:40.024 [DEBUG] [Thread-126589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:40:40.024 [DEBUG] [Thread-126589] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:40:40.026 [DEBUG] [Thread-126589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:40:40.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:40:40.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:40:40.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:40:40.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:40:40.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:40:40.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.944491 -999.00  +14.00  21.58     51   +4.00 1 1 1 1 1     0    0 9.44 -14.46 ZNESW 17.1 21.6 142.4 26.5 14.3 -24.8 14.2 -24.2 14.0 -22.6 14.3 -23.3
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.944491
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:40:40.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:40:13', tmtdew=11.26, humidity=46.69, cloud=0.0, wind=27.23, temperature=13.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:40:13', seeing=1.68, atlas_timestamp='2025-12-03T22:40:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:38:00')
2025-12-04T00:40:40.042 [DEBUG] [Thread-126589] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:40:40.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:40:40.134 [DEBUG] [Thread-126592] [transport.py] [_log()] starting thread (client mode): 0xa51cfa00
2025-12-04T00:40:40.134 [DEBUG] [Thread-126592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:40:40.148 [DEBUG] [Thread-126592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:40:40.148 [INFO] [Thread-126592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] client lang: <none>
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] server lang: <none>
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] kex follows: False
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:40:40.156 [DEBUG] [Thread-126592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:40:40.157 [DEBUG] [Thread-126592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:40:40.157 [DEBUG] [Thread-126592] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:40:40.157 [DEBUG] [Thread-126592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:40:40.157 [DEBUG] [Thread-126592] [transport.py] [_log()] Compression: none
2025-12-04T00:40:40.157 [DEBUG] [Thread-126592] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:40:40.214 [DEBUG] [Thread-126592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:40:40.214 [DEBUG] [Thread-126592] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:40:40.214 [DEBUG] [Thread-126592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:40:40.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:40:40.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:40:40.270 [DEBUG] [Thread-126592] [transport.py] [_log()] userauth is OK
2025-12-04T00:40:40.270 [DEBUG] [Thread-126592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:40:40.270 [DEBUG] [Thread-126592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:40:40.271 [DEBUG] [Thread-126592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:40:40.271 [DEBUG] [Thread-126592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:40:40.290 [INFO] [Thread-126592] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:40:40.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:40:40.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:40:41.126 [DEBUG] [Thread-126592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:40:41.126 [DEBUG] [Thread-126592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:40:41.175 [DEBUG] [Thread-126592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:40:41.175 [DEBUG] [Thread-126592] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:40:41.184 [DEBUG] [Thread-126592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:40:41.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:40:41.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:40:41.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:40:41.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:40:41.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:40:41.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:40:41.219 [DEBUG] [Thread-126592] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:40:41.285 [DEBUG] [Thread-126594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:49.093 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:40:56.337 [DEBUG] [Thread-126595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:09.476 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:11.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:41:11.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:41:11.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:41:11.363 [DEBUG] [Thread-126596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 40, 45), 11.3, 46.74, 0.0, 22.53, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:41:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:40:45
2025-12-04T00:41:12.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:41:12.178 [DEBUG] [Thread-126597] [transport.py] [_log()] starting thread (client mode): 0xa27a35e0
2025-12-04T00:41:12.178 [DEBUG] [Thread-126597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:41:12.196 [DEBUG] [Thread-126597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:41:12.196 [INFO] [Thread-126597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] client lang: <none>
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] server lang: <none>
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] kex follows: False
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:41:12.199 [DEBUG] [Thread-126597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:41:12.200 [DEBUG] [Thread-126597] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:41:12.200 [DEBUG] [Thread-126597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:41:12.200 [DEBUG] [Thread-126597] [transport.py] [_log()] Compression: none
2025-12-04T00:41:12.200 [DEBUG] [Thread-126597] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:41:12.212 [DEBUG] [Thread-126597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:41:12.213 [DEBUG] [Thread-126597] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:41:12.213 [DEBUG] [Thread-126597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:41:12.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:41:12.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:41:12.215 [DEBUG] [Thread-126597] [transport.py] [_log()] userauth is OK
2025-12-04T00:41:12.215 [DEBUG] [Thread-126597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:41:12.215 [DEBUG] [Thread-126597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:41:12.215 [DEBUG] [Thread-126597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:41:12.215 [DEBUG] [Thread-126597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:41:12.233 [INFO] [Thread-126597] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:41:12.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:41:12.839 [DEBUG] [Thread-126597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:41:12.839 [DEBUG] [Thread-126597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:41:12.840 [DEBUG] [Thread-126597] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:41:12.881 [DEBUG] [Thread-126597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:41:12.881 [DEBUG] [Thread-126597] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:41:12.884 [DEBUG] [Thread-126597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:41:12.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:41:12.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:41:12.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:41:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:41:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:41:12.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:41:12.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:41:12.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:41:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:41:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.945186 -999.00  +13.90  19.76     51   +4.10 1 1 1 1 1     0    0 9.62 -12.61 ZNESW 22.0 19.8 142.8 22.2 14.3 -24.8 14.2 -24.4 13.9 -22.8 14.2 -23.5
2025-12-04T00:41:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:41:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:41:12.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.945186
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:41:12.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:40:45', tmtdew=11.3, humidity=46.74, cloud=0.0, wind=22.53, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:40:45', seeing=1.62, atlas_timestamp='2025-12-03T22:41:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:38:00')
2025-12-04T00:41:12.905 [DEBUG] [Thread-126597] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:41:12.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:41:12.999 [DEBUG] [Thread-126600] [transport.py] [_log()] starting thread (client mode): 0xa2785720
2025-12-04T00:41:12.999 [DEBUG] [Thread-126600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:41:13.013 [DEBUG] [Thread-126600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:41:13.014 [INFO] [Thread-126600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:41:13.021 [DEBUG] [Thread-126600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] client lang: <none>
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] server lang: <none>
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] kex follows: False
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] Compression: none
2025-12-04T00:41:13.022 [DEBUG] [Thread-126600] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:41:13.082 [DEBUG] [Thread-126600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:41:13.083 [DEBUG] [Thread-126600] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:41:13.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:41:13.083 [DEBUG] [Thread-126600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:41:13.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:41:13.138 [DEBUG] [Thread-126600] [transport.py] [_log()] userauth is OK
2025-12-04T00:41:13.138 [DEBUG] [Thread-126600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:41:13.139 [DEBUG] [Thread-126600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:41:13.139 [DEBUG] [Thread-126600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:41:13.139 [DEBUG] [Thread-126600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:41:13.158 [INFO] [Thread-126600] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:41:13.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:41:13.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:41:13.972 [DEBUG] [Thread-126600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:41:13.972 [DEBUG] [Thread-126600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:41:14.020 [DEBUG] [Thread-126600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:41:14.020 [DEBUG] [Thread-126600] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:41:14.029 [DEBUG] [Thread-126600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:41:14.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:41:14.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:41:14.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:41:14.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:41:14.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:41:14.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:41:14.063 [DEBUG] [Thread-126600] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:41:24.809 [DEBUG] [Thread-126602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:26.390 [DEBUG] [Thread-126603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:29.854 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:30.491 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:30.492 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:41.425 [DEBUG] [Thread-126604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:44.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:41:44.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:41:44.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:41:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 41, 17), 11.3, 46.72, 0.0, 24.42, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:41:44.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:41:17
2025-12-04T00:41:44.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:41:45.024 [DEBUG] [Thread-126605] [transport.py] [_log()] starting thread (client mode): 0xa27a2320
2025-12-04T00:41:45.024 [DEBUG] [Thread-126605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:41:45.039 [DEBUG] [Thread-126605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:41:45.039 [INFO] [Thread-126605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] client lang: <none>
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] server lang: <none>
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] kex follows: False
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] Compression: none
2025-12-04T00:41:45.042 [DEBUG] [Thread-126605] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:41:45.058 [DEBUG] [Thread-126605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:41:45.058 [DEBUG] [Thread-126605] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:41:45.059 [DEBUG] [Thread-126605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:41:45.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:41:45.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:41:45.060 [DEBUG] [Thread-126605] [transport.py] [_log()] userauth is OK
2025-12-04T00:41:45.061 [DEBUG] [Thread-126605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:41:45.061 [DEBUG] [Thread-126605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:41:45.061 [DEBUG] [Thread-126605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:41:45.061 [DEBUG] [Thread-126605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:41:45.079 [INFO] [Thread-126605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:41:45.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:41:45.845 [DEBUG] [Thread-126605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:41:45.845 [DEBUG] [Thread-126605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:41:45.846 [DEBUG] [Thread-126605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:41:45.886 [DEBUG] [Thread-126605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:41:45.886 [DEBUG] [Thread-126605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:41:45.889 [DEBUG] [Thread-126605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:41:45.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:41:45.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:41:45.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:41:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:41:45.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:41:45.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:41:45.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:41:45.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.945186 -999.00  +13.90  19.76     51   +4.10 1 1 1 1 1     0    0 9.62 -12.61 ZNESW 22.0 19.8 142.8 22.2 14.3 -24.8 14.2 -24.4 13.9 -22.8 14.2 -23.5
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.945186
2025-12-04T00:41:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:41:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:41:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:41:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:41:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:41:45.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:41:17', tmtdew=11.3, humidity=46.72, cloud=0.0, wind=24.42, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:41:17', seeing=1.41, atlas_timestamp='2025-12-03T22:41:04.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05825000000000102, -0.040749999999999176, -0.011749999999999261, -0.04200000000000159, -0.033500000000000085, -0.022749999999998494, -0.1349999999999998, -0.04875000000000007, 0.01649999999999885, -0.019999999999999574, 0.003249999999999531, -0.07499999999999929, 0.016000000000000014, -0.015249999999999986, -0.25200000000000067, -0.08549999999999969, 0.017250000000000654, -0.028499999999999304, -0.013500000000000512, -0.07525000000000048, 0.06400000000000006, -0.031250000000001776, -0.042749999999999844, -0.07925000000000004, 0.014999999999998792, -0.04550000000000054, -0.05975000000000108, -0.009499999999999176, 0.0990000000000002, 0.0070000000000014495, -0.4939999999999998, -0.014999999999998792, -0.047250000000000014], zp_timestamp='2025-12-03T22:38:00')
2025-12-04T00:41:45.907 [DEBUG] [Thread-126605] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:41:45.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:41:46.008 [DEBUG] [Thread-126608] [transport.py] [_log()] starting thread (client mode): 0xa27a1930
2025-12-04T00:41:46.008 [DEBUG] [Thread-126608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:41:46.028 [DEBUG] [Thread-126608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:41:46.028 [INFO] [Thread-126608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:41:46.035 [DEBUG] [Thread-126608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] client lang: <none>
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] server lang: <none>
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] kex follows: False
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] Compression: none
2025-12-04T00:41:46.036 [DEBUG] [Thread-126608] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:41:46.094 [DEBUG] [Thread-126608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:41:46.094 [DEBUG] [Thread-126608] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:41:46.095 [DEBUG] [Thread-126608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:41:46.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:41:46.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:41:46.155 [DEBUG] [Thread-126608] [transport.py] [_log()] userauth is OK
2025-12-04T00:41:46.155 [DEBUG] [Thread-126608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:41:46.155 [DEBUG] [Thread-126608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:41:46.155 [DEBUG] [Thread-126608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:41:46.155 [DEBUG] [Thread-126608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:41:46.174 [INFO] [Thread-126608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:41:46.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:41:46.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:41:47.038 [DEBUG] [Thread-126608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:41:47.038 [DEBUG] [Thread-126608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:41:47.086 [DEBUG] [Thread-126608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:41:47.086 [DEBUG] [Thread-126608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:41:47.103 [DEBUG] [Thread-126608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:41:47.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:41:47.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:41:47.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:41:47.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:41:47.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:41:47.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:41:47.146 [DEBUG] [Thread-126608] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:41:50.308 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:41:56.453 [DEBUG] [Thread-126610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:10.690 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:11.500 [DEBUG] [Thread-126611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:42:17.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:42:17.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:42:17.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 41, 49), 11.2, 46.72, 0.0, 25.94, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:42:17.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:41:49
2025-12-04T00:42:17.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:42:18.104 [DEBUG] [Thread-126612] [transport.py] [_log()] starting thread (client mode): 0xa51cf4f0
2025-12-04T00:42:18.105 [DEBUG] [Thread-126612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:42:18.124 [DEBUG] [Thread-126612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:42:18.125 [INFO] [Thread-126612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:42:18.128 [DEBUG] [Thread-126612] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:42:18.128 [DEBUG] [Thread-126612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:42:18.128 [DEBUG] [Thread-126612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:42:18.128 [DEBUG] [Thread-126612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:18.128 [DEBUG] [Thread-126612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] client lang: <none>
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] server lang: <none>
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] kex follows: False
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:42:18.129 [DEBUG] [Thread-126612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:42:18.130 [DEBUG] [Thread-126612] [transport.py] [_log()] Compression: none
2025-12-04T00:42:18.130 [DEBUG] [Thread-126612] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:42:18.150 [DEBUG] [Thread-126612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:42:18.150 [DEBUG] [Thread-126612] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:42:18.151 [DEBUG] [Thread-126612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:42:18.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:42:18.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:42:18.153 [DEBUG] [Thread-126612] [transport.py] [_log()] userauth is OK
2025-12-04T00:42:18.153 [DEBUG] [Thread-126612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:42:18.153 [DEBUG] [Thread-126612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:42:18.153 [DEBUG] [Thread-126612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:42:18.153 [DEBUG] [Thread-126612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:42:18.188 [INFO] [Thread-126612] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:42:18.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:42:18.831 [DEBUG] [Thread-126612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:42:18.831 [DEBUG] [Thread-126612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:42:18.832 [DEBUG] [Thread-126612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:42:18.872 [DEBUG] [Thread-126612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:42:18.872 [DEBUG] [Thread-126612] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:42:18.875 [DEBUG] [Thread-126612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:42:18.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:42:18.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:42:18.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:42:18.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:42:18.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:42:18.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:42:18.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:42:18.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:42:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:42:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.945533 -999.00  +13.90  18.66     51   +4.10 1 1 1 1 1     0    0 9.42 -13.08 ZNESW 20.4 18.7 147.2 25.3 14.3 -24.8 14.2 -24.3 13.9 -22.6 14.3 -23.6
2025-12-04T00:42:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:42:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:42:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.945533
2025-12-04T00:42:18.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:42:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:42:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:42:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:42:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:42:18.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:41:49', tmtdew=11.2, humidity=46.72, cloud=0.0, wind=25.94, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:41:49', seeing=1.33, atlas_timestamp='2025-12-03T22:41:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:42:18.901 [DEBUG] [Thread-126612] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:42:18.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:42:18.998 [DEBUG] [Thread-126615] [transport.py] [_log()] starting thread (client mode): 0xa2787310
2025-12-04T00:42:18.998 [DEBUG] [Thread-126615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:42:19.013 [DEBUG] [Thread-126615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:42:19.013 [INFO] [Thread-126615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:19.021 [DEBUG] [Thread-126615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] client lang: <none>
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] server lang: <none>
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] kex follows: False
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:42:19.022 [DEBUG] [Thread-126615] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:42:19.023 [DEBUG] [Thread-126615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:42:19.023 [DEBUG] [Thread-126615] [transport.py] [_log()] Compression: none
2025-12-04T00:42:19.023 [DEBUG] [Thread-126615] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:42:19.079 [DEBUG] [Thread-126615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:42:19.080 [DEBUG] [Thread-126615] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:42:19.081 [DEBUG] [Thread-126615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:42:19.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:42:19.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:42:19.135 [DEBUG] [Thread-126615] [transport.py] [_log()] userauth is OK
2025-12-04T00:42:19.135 [DEBUG] [Thread-126615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:42:19.135 [DEBUG] [Thread-126615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:42:19.136 [DEBUG] [Thread-126615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:42:19.136 [DEBUG] [Thread-126615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:42:19.157 [INFO] [Thread-126615] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:42:19.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:42:19.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:42:19.962 [DEBUG] [Thread-126615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:42:19.962 [DEBUG] [Thread-126615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:42:20.010 [DEBUG] [Thread-126615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:42:20.010 [DEBUG] [Thread-126615] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:42:20.019 [DEBUG] [Thread-126615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:42:20.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:42:20.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:42:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:42:20.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:42:20.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:42:20.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:42:20.054 [DEBUG] [Thread-126615] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:42:24.870 [DEBUG] [Thread-126617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:26.526 [DEBUG] [Thread-126618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:30.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:30.695 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:31.124 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:41.569 [DEBUG] [Thread-126619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:42:50.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:42:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:42:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 42, 21), 11.19, 46.77, 0.0, 26.22, 13.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:42:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:42:21
2025-12-04T00:42:50.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:42:51.029 [DEBUG] [Thread-126620] [transport.py] [_log()] starting thread (client mode): 0xa51ce020
2025-12-04T00:42:51.029 [DEBUG] [Thread-126620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:42:51.049 [DEBUG] [Thread-126620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:42:51.050 [INFO] [Thread-126620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:42:51.053 [DEBUG] [Thread-126620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] client lang: <none>
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] server lang: <none>
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] kex follows: False
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] Compression: none
2025-12-04T00:42:51.054 [DEBUG] [Thread-126620] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:42:51.072 [DEBUG] [Thread-126620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:42:51.073 [DEBUG] [Thread-126620] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:42:51.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:42:51.075 [DEBUG] [Thread-126620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:42:51.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:42:51.077 [DEBUG] [Thread-126620] [transport.py] [_log()] userauth is OK
2025-12-04T00:42:51.077 [DEBUG] [Thread-126620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:42:51.077 [DEBUG] [Thread-126620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:42:51.077 [DEBUG] [Thread-126620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:42:51.078 [DEBUG] [Thread-126620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:42:51.101 [INFO] [Thread-126620] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:42:51.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:42:51.547 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:42:51.741 [DEBUG] [Thread-126620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:42:51.741 [DEBUG] [Thread-126620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:42:51.742 [DEBUG] [Thread-126620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:42:51.782 [DEBUG] [Thread-126620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:42:51.782 [DEBUG] [Thread-126620] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:42:51.785 [DEBUG] [Thread-126620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:42:51.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:42:51.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:42:51.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:42:51.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:42:51.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:42:51.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:42:51.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:42:51.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.945880 -999.00  +13.90  17.87     51   +4.10 1 1 1 1 1     0    0 9.59 -12.85 ZNESW 18.3 17.9 146.8 26.0 14.3 -24.8 14.2 -24.2 14.0 -22.7 14.2 -23.4
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.945880
2025-12-04T00:42:51.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:42:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:42:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:42:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:42:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:42:51.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:42:21', tmtdew=11.19, humidity=46.77, cloud=0.0, wind=26.22, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:42:21', seeing=1.41, atlas_timestamp='2025-12-03T22:42:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:42:51.808 [DEBUG] [Thread-126620] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:42:51.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:42:51.905 [DEBUG] [Thread-126623] [transport.py] [_log()] starting thread (client mode): 0xa27a30d0
2025-12-04T00:42:51.906 [DEBUG] [Thread-126623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:42:51.920 [DEBUG] [Thread-126623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:42:51.920 [INFO] [Thread-126623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:42:51.928 [DEBUG] [Thread-126623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] client lang: <none>
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] server lang: <none>
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] kex follows: False
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:42:51.929 [DEBUG] [Thread-126623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:42:51.930 [DEBUG] [Thread-126623] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:42:51.930 [DEBUG] [Thread-126623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:42:51.930 [DEBUG] [Thread-126623] [transport.py] [_log()] Compression: none
2025-12-04T00:42:51.930 [DEBUG] [Thread-126623] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:42:51.988 [DEBUG] [Thread-126623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:42:51.988 [DEBUG] [Thread-126623] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:42:51.989 [DEBUG] [Thread-126623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:42:51.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:42:51.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:42:52.043 [DEBUG] [Thread-126623] [transport.py] [_log()] userauth is OK
2025-12-04T00:42:52.043 [DEBUG] [Thread-126623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:42:52.043 [DEBUG] [Thread-126623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:42:52.043 [DEBUG] [Thread-126623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:42:52.043 [DEBUG] [Thread-126623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:42:52.062 [INFO] [Thread-126623] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:42:52.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:42:52.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:42:52.904 [DEBUG] [Thread-126623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:42:52.905 [DEBUG] [Thread-126623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:42:52.953 [DEBUG] [Thread-126623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:42:52.953 [DEBUG] [Thread-126623] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:42:52.962 [DEBUG] [Thread-126623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:42:52.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:42:52.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:42:52.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:42:52.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:42:52.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:42:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:42:52.997 [DEBUG] [Thread-126623] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:42:56.593 [DEBUG] [Thread-126625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:11.640 [DEBUG] [Thread-126626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:11.996 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:23.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:43:23.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:43:23.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:43:23.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 42, 53), 11.19, 46.79, 0.0, 26.77, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:43:23.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:42:53
2025-12-04T00:43:23.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:43:23.968 [DEBUG] [Thread-126627] [transport.py] [_log()] starting thread (client mode): 0xa27a0820
2025-12-04T00:43:23.968 [DEBUG] [Thread-126627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:43:23.988 [DEBUG] [Thread-126627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:43:23.988 [INFO] [Thread-126627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:43:23.991 [DEBUG] [Thread-126627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] client lang: <none>
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] server lang: <none>
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] kex follows: False
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] Compression: none
2025-12-04T00:43:23.992 [DEBUG] [Thread-126627] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:43:24.011 [DEBUG] [Thread-126627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:43:24.012 [DEBUG] [Thread-126627] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:43:24.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:43:24.013 [DEBUG] [Thread-126627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:43:24.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:43:24.015 [DEBUG] [Thread-126627] [transport.py] [_log()] userauth is OK
2025-12-04T00:43:24.015 [DEBUG] [Thread-126627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:43:24.016 [DEBUG] [Thread-126627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:43:24.016 [DEBUG] [Thread-126627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:43:24.016 [DEBUG] [Thread-126627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:43:24.039 [INFO] [Thread-126627] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:43:24.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:43:24.699 [DEBUG] [Thread-126627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:43:24.700 [DEBUG] [Thread-126627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:43:24.700 [DEBUG] [Thread-126627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:43:24.741 [DEBUG] [Thread-126627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:43:24.741 [DEBUG] [Thread-126627] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:43:24.744 [DEBUG] [Thread-126627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:43:24.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:43:24.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:43:24.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:43:24.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:43:24.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:43:24.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:43:24.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:43:24.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:43:24.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:43:24.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.946228 -999.00  +13.90  16.11     51   +4.10 1 1 1 1 1     0    0 9.54 -12.88 ZNESW 20.2 16.1 147.0 25.3 14.3 -24.8 14.2 -24.4 14.0 -22.7 14.2 -23.5
2025-12-04T00:43:24.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:43:24.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:43:24.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.946228
2025-12-04T00:43:24.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:43:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:43:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:43:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:43:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:43:24.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:42:53', tmtdew=11.19, humidity=46.79, cloud=0.0, wind=26.77, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:42:53', seeing=1.56, atlas_timestamp='2025-12-03T22:42:34.099', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:43:24.768 [DEBUG] [Thread-126627] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:43:24.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:43:24.870 [DEBUG] [Thread-126630] [transport.py] [_log()] starting thread (client mode): 0xa27a3fd0
2025-12-04T00:43:24.871 [DEBUG] [Thread-126630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:43:24.888 [DEBUG] [Thread-126630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:43:24.888 [INFO] [Thread-126630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] client lang: <none>
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] server lang: <none>
2025-12-04T00:43:24.895 [DEBUG] [Thread-126630] [transport.py] [_log()] kex follows: False
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] Compression: none
2025-12-04T00:43:24.896 [DEBUG] [Thread-126630] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:43:24.928 [DEBUG] [Thread-126632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:24.955 [DEBUG] [Thread-126630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:43:24.955 [DEBUG] [Thread-126630] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:43:24.956 [DEBUG] [Thread-126630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:43:24.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:43:24.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:43:25.011 [DEBUG] [Thread-126630] [transport.py] [_log()] userauth is OK
2025-12-04T00:43:25.011 [DEBUG] [Thread-126630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:43:25.011 [DEBUG] [Thread-126630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:43:25.012 [DEBUG] [Thread-126630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:43:25.012 [DEBUG] [Thread-126630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:43:25.030 [INFO] [Thread-126630] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:43:25.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:43:25.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:43:25.894 [DEBUG] [Thread-126630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:43:25.894 [DEBUG] [Thread-126630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:43:25.942 [DEBUG] [Thread-126630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:43:25.942 [DEBUG] [Thread-126630] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:43:25.951 [DEBUG] [Thread-126630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:43:25.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:43:25.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:43:25.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:43:25.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:43:25.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:43:25.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:43:25.982 [DEBUG] [Thread-126630] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:43:26.668 [DEBUG] [Thread-126633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:30.898 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:30.899 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:32.484 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:41.706 [DEBUG] [Thread-126634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:52.922 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:43:56.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:43:56.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:43:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 43, 25), 11.21, 46.71, 0.0, 26.4, 13.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:43:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:43:25
2025-12-04T00:43:56.739 [DEBUG] [Thread-126635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:43:56.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:43:56.997 [DEBUG] [Thread-126636] [transport.py] [_log()] starting thread (client mode): 0xa51cc880
2025-12-04T00:43:56.997 [DEBUG] [Thread-126636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:43:57.018 [DEBUG] [Thread-126636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:43:57.018 [INFO] [Thread-126636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] client lang: <none>
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] server lang: <none>
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] kex follows: False
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] Compression: none
2025-12-04T00:43:57.021 [DEBUG] [Thread-126636] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:43:57.037 [DEBUG] [Thread-126636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:43:57.037 [DEBUG] [Thread-126636] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:43:57.037 [DEBUG] [Thread-126636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:43:57.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:43:57.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:43:57.038 [DEBUG] [Thread-126636] [transport.py] [_log()] userauth is OK
2025-12-04T00:43:57.038 [DEBUG] [Thread-126636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:43:57.038 [DEBUG] [Thread-126636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:43:57.038 [DEBUG] [Thread-126636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:43:57.038 [DEBUG] [Thread-126636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:43:57.056 [INFO] [Thread-126636] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:43:57.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:43:57.704 [DEBUG] [Thread-126636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:43:57.704 [DEBUG] [Thread-126636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:43:57.704 [DEBUG] [Thread-126636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:43:57.745 [DEBUG] [Thread-126636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:43:57.745 [DEBUG] [Thread-126636] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:43:57.748 [DEBUG] [Thread-126636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:43:57.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:43:57.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:43:57.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:43:57.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:43:57.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:43:57.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:43:57.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.946575 -999.00  +13.80  13.16     51   +4.00 1 1 1 1 1     0    0 9.43 -12.38 ZNESW 19.4 13.2 142.2 23.2 14.3 -24.8 14.1 -24.3 13.9 -22.8 14.3 -23.5
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.946575
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:43:57.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:43:25', tmtdew=11.21, humidity=46.71, cloud=0.0, wind=26.4, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:43:25', seeing=1.56, atlas_timestamp='2025-12-03T22:43:04.080', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:43:57.765 [DEBUG] [Thread-126636] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:43:57.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:43:57.851 [DEBUG] [Thread-126639] [transport.py] [_log()] starting thread (client mode): 0xa27864d0
2025-12-04T00:43:57.851 [DEBUG] [Thread-126639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:43:57.866 [DEBUG] [Thread-126639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:43:57.866 [INFO] [Thread-126639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:43:57.873 [DEBUG] [Thread-126639] [transport.py] [_log()] client lang: <none>
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] server lang: <none>
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] kex follows: False
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] Compression: none
2025-12-04T00:43:57.874 [DEBUG] [Thread-126639] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:43:57.930 [DEBUG] [Thread-126639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:43:57.930 [DEBUG] [Thread-126639] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:43:57.930 [DEBUG] [Thread-126639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:43:57.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:43:57.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:43:57.987 [DEBUG] [Thread-126639] [transport.py] [_log()] userauth is OK
2025-12-04T00:43:57.987 [DEBUG] [Thread-126639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:43:57.987 [DEBUG] [Thread-126639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:43:57.987 [DEBUG] [Thread-126639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:43:57.987 [DEBUG] [Thread-126639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:43:58.000 [INFO] [Thread-126639] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:43:58.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:43:58.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:43:58.817 [DEBUG] [Thread-126639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:43:58.817 [DEBUG] [Thread-126639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:43:58.864 [DEBUG] [Thread-126639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:43:58.864 [DEBUG] [Thread-126639] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:43:58.873 [DEBUG] [Thread-126639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:43:58.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:43:58.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:43:58.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:43:58.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:43:58.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:43:58.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:43:58.904 [DEBUG] [Thread-126639] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:44:11.769 [DEBUG] [Thread-126641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:13.356 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:24.993 [DEBUG] [Thread-126642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:26.810 [DEBUG] [Thread-126643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:28.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:44:28.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:44:28.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:44:29.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 43, 57), 11.16, 46.71, 0.0, 27.37, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:44:29.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:43:57
2025-12-04T00:44:29.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:44:29.862 [DEBUG] [Thread-126644] [transport.py] [_log()] starting thread (client mode): 0xa27a3610
2025-12-04T00:44:29.862 [DEBUG] [Thread-126644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:44:29.882 [DEBUG] [Thread-126644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:44:29.882 [INFO] [Thread-126644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:44:29.885 [DEBUG] [Thread-126644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] client lang: <none>
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] server lang: <none>
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] kex follows: False
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] Compression: none
2025-12-04T00:44:29.886 [DEBUG] [Thread-126644] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:44:29.902 [DEBUG] [Thread-126644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:44:29.902 [DEBUG] [Thread-126644] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:44:29.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:44:29.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] userauth is OK
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:44:29.903 [DEBUG] [Thread-126644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:44:29.920 [INFO] [Thread-126644] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:44:29.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:44:30.551 [DEBUG] [Thread-126644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:44:30.552 [DEBUG] [Thread-126644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:44:30.552 [DEBUG] [Thread-126644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:44:30.593 [DEBUG] [Thread-126644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:44:30.593 [DEBUG] [Thread-126644] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:44:30.595 [DEBUG] [Thread-126644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:44:30.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:44:30.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:44:30.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:44:30.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:44:30.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:44:30.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:44:30.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.946922 -999.00  +13.80  16.43     51   +4.10 1 1 1 1 1     0    0 9.72 -14.52 ZNESW 16.4 16.4 144.2 28.7 14.2 -24.7 14.2 -24.2 13.9 -22.8 14.2 -23.5
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.946922
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:44:30.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:43:57', tmtdew=11.16, humidity=46.71, cloud=0.0, wind=27.37, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:43:57', seeing=1.51, atlas_timestamp='2025-12-03T22:43:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:44:30.616 [DEBUG] [Thread-126644] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:44:30.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:44:30.705 [DEBUG] [Thread-126647] [transport.py] [_log()] starting thread (client mode): 0xa7bd3130
2025-12-04T00:44:30.705 [DEBUG] [Thread-126647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:44:30.720 [DEBUG] [Thread-126647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:44:30.720 [INFO] [Thread-126647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:44:30.727 [DEBUG] [Thread-126647] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:44:30.727 [DEBUG] [Thread-126647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] client lang: <none>
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] server lang: <none>
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] kex follows: False
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] Compression: none
2025-12-04T00:44:30.728 [DEBUG] [Thread-126647] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:44:30.786 [DEBUG] [Thread-126647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:44:30.786 [DEBUG] [Thread-126647] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:44:30.787 [DEBUG] [Thread-126647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:44:30.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:44:30.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:44:30.843 [DEBUG] [Thread-126647] [transport.py] [_log()] userauth is OK
2025-12-04T00:44:30.843 [DEBUG] [Thread-126647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:44:30.843 [DEBUG] [Thread-126647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:44:30.843 [DEBUG] [Thread-126647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:44:30.843 [DEBUG] [Thread-126647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:44:30.857 [INFO] [Thread-126647] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:44:30.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:44:30.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:44:31.096 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:31.097 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:31.744 [DEBUG] [Thread-126647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:44:31.744 [DEBUG] [Thread-126647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:44:31.792 [DEBUG] [Thread-126647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:44:31.792 [DEBUG] [Thread-126647] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:44:31.801 [DEBUG] [Thread-126647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:44:31.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:44:31.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:44:31.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:44:31.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:44:31.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:44:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:44:31.835 [DEBUG] [Thread-126647] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:44:33.771 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:41.838 [DEBUG] [Thread-126649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:54.159 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:44:56.883 [DEBUG] [Thread-126650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:01.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:45:01.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:45:01.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:45:02.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 44, 29), 11.15, 46.74, 0.0, 26.8, 13.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:45:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:44:29
2025-12-04T00:45:02.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:45:02.861 [DEBUG] [Thread-126651] [transport.py] [_log()] starting thread (client mode): 0xa7bd1ae0
2025-12-04T00:45:02.861 [DEBUG] [Thread-126651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:45:02.882 [DEBUG] [Thread-126651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:45:02.882 [INFO] [Thread-126651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] client lang: <none>
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] server lang: <none>
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] kex follows: False
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] Compression: none
2025-12-04T00:45:02.885 [DEBUG] [Thread-126651] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:45:02.892 [DEBUG] [Thread-126651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:45:02.892 [DEBUG] [Thread-126651] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:45:02.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:45:02.893 [DEBUG] [Thread-126651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:45:02.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:45:02.894 [DEBUG] [Thread-126651] [transport.py] [_log()] userauth is OK
2025-12-04T00:45:02.894 [DEBUG] [Thread-126651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:45:02.894 [DEBUG] [Thread-126651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:45:02.894 [DEBUG] [Thread-126651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:45:02.894 [DEBUG] [Thread-126651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:45:02.920 [INFO] [Thread-126651] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:45:02.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:45:03.685 [DEBUG] [Thread-126651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:45:03.686 [DEBUG] [Thread-126651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:45:03.686 [DEBUG] [Thread-126651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:45:03.727 [DEBUG] [Thread-126651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:45:03.727 [DEBUG] [Thread-126651] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:45:03.730 [DEBUG] [Thread-126651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:45:03.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:45:03.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:45:03.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:45:03.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:45:03.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:45:03.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:45:03.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.947616 -999.00  +13.80  18.88     51   +4.10 1 1 1 1 1     0    0 9.66 -13.21 ZNESW 19.3 18.9 142.4 23.0 14.3 -24.7 14.1 -24.3 13.9 -22.7 14.3 -23.6
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:45:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.947616
2025-12-04T00:45:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:45:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:45:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:45:03.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:45:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:45:03.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:44:29', tmtdew=11.15, humidity=46.74, cloud=0.0, wind=26.8, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:45:01', seeing=1.45, atlas_timestamp='2025-12-03T22:44:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04124999999999979, -0.0337499999999995, -0.020749999999999602, -0.010500000000000398, -0.005499999999999616, 0.03125, -0.031000000000000583, -0.02874999999999872, 0.017999999999998906, -0.06400000000000006, -0.0017500000000012506, -0.028499999999999304, 0.01699999999999946, -0.024750000000000938, -0.16100000000000136, -0.12850000000000072, -0.006249999999999645, -0.005000000000000782, -0.0030000000000001137, -0.05625000000000213, 0.047999999999998266, -0.06375000000000064, -0.11374999999999957, -0.03775000000000084, 0.03399999999999892, -0.02549999999999919, -0.09074999999999989, 0.013500000000000512, 0.10050000000000026, -0.0389999999999997, -0.11299999999999955, -0.03049999999999997, 0.007749999999999702], zp_timestamp='2025-12-03T22:41:00')
2025-12-04T00:45:03.767 [DEBUG] [Thread-126651] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:45:03.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:45:03.857 [DEBUG] [Thread-126654] [transport.py] [_log()] starting thread (client mode): 0xa2787460
2025-12-04T00:45:03.857 [DEBUG] [Thread-126654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:45:03.871 [DEBUG] [Thread-126654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:45:03.871 [INFO] [Thread-126654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] client lang: <none>
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] server lang: <none>
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] kex follows: False
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:45:03.879 [DEBUG] [Thread-126654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:45:03.880 [DEBUG] [Thread-126654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:45:03.880 [DEBUG] [Thread-126654] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:45:03.880 [DEBUG] [Thread-126654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:45:03.880 [DEBUG] [Thread-126654] [transport.py] [_log()] Compression: none
2025-12-04T00:45:03.880 [DEBUG] [Thread-126654] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:45:03.935 [DEBUG] [Thread-126654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:45:03.936 [DEBUG] [Thread-126654] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:45:03.936 [DEBUG] [Thread-126654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:45:03.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:45:03.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:45:03.995 [DEBUG] [Thread-126654] [transport.py] [_log()] userauth is OK
2025-12-04T00:45:03.996 [DEBUG] [Thread-126654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:45:03.996 [DEBUG] [Thread-126654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:45:03.996 [DEBUG] [Thread-126654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:45:03.996 [DEBUG] [Thread-126654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:45:04.015 [INFO] [Thread-126654] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:45:04.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:45:04.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:45:04.902 [DEBUG] [Thread-126654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:45:04.902 [DEBUG] [Thread-126654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:45:04.949 [DEBUG] [Thread-126654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:45:04.950 [DEBUG] [Thread-126654] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:45:04.958 [DEBUG] [Thread-126654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:45:04.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:45:04.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:45:04.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:45:04.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:45:04.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:45:04.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:45:04.991 [DEBUG] [Thread-126654] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:45:11.914 [DEBUG] [Thread-126656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:14.540 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:25.051 [DEBUG] [Thread-126657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:26.955 [DEBUG] [Thread-126658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:31.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:31.294 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:34.918 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:35.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:45:35.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:45:35.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:45:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 45, 1), 11.16, 46.69, 0.0, 23.71, 13.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:45:35.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:45:01
2025-12-04T00:45:35.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:45:35.988 [DEBUG] [Thread-126659] [transport.py] [_log()] starting thread (client mode): 0xa27a3250
2025-12-04T00:45:35.988 [DEBUG] [Thread-126659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:45:36.008 [DEBUG] [Thread-126659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:45:36.008 [INFO] [Thread-126659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] client lang: <none>
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] server lang: <none>
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] kex follows: False
2025-12-04T00:45:36.012 [DEBUG] [Thread-126659] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] Compression: none
2025-12-04T00:45:36.013 [DEBUG] [Thread-126659] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:45:36.032 [DEBUG] [Thread-126659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:45:36.032 [DEBUG] [Thread-126659] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:45:36.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:45:36.033 [DEBUG] [Thread-126659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:45:36.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:45:36.035 [DEBUG] [Thread-126659] [transport.py] [_log()] userauth is OK
2025-12-04T00:45:36.036 [DEBUG] [Thread-126659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:45:36.036 [DEBUG] [Thread-126659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:45:36.036 [DEBUG] [Thread-126659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:45:36.036 [DEBUG] [Thread-126659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:45:36.070 [INFO] [Thread-126659] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:45:36.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:45:36.735 [DEBUG] [Thread-126659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:45:36.735 [DEBUG] [Thread-126659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:45:36.735 [DEBUG] [Thread-126659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:45:36.776 [DEBUG] [Thread-126659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:45:36.776 [DEBUG] [Thread-126659] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:45:36.779 [DEBUG] [Thread-126659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:45:36.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:45:36.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:45:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:45:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:45:36.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:45:36.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:45:36.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:45:36.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.947964 -999.00  +13.80  20.84     51   +4.10 1 1 1 1 1     0    0 9.61 -12.92 ZNESW 16.5 20.8 147.2 25.1 14.3 -24.8 14.1 -24.2 13.9 -22.6 14.2 -23.5
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.947964
2025-12-04T00:45:36.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:45:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:45:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:45:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:45:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:45:36.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:45:01', tmtdew=11.16, humidity=46.69, cloud=0.0, wind=23.71, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:45:33', seeing=1.68, atlas_timestamp='2025-12-03T22:45:04.090', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:44:00')
2025-12-04T00:45:36.806 [DEBUG] [Thread-126659] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:45:36.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:45:36.904 [DEBUG] [Thread-126662] [transport.py] [_log()] starting thread (client mode): 0xa2786350
2025-12-04T00:45:36.904 [DEBUG] [Thread-126662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:45:36.920 [DEBUG] [Thread-126662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:45:36.920 [INFO] [Thread-126662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:45:36.927 [DEBUG] [Thread-126662] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:45:36.927 [DEBUG] [Thread-126662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] client lang: <none>
2025-12-04T00:45:36.928 [DEBUG] [Thread-126662] [transport.py] [_log()] server lang: <none>
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] kex follows: False
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] Compression: none
2025-12-04T00:45:36.929 [DEBUG] [Thread-126662] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:45:36.988 [DEBUG] [Thread-126662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:45:36.988 [DEBUG] [Thread-126662] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:45:36.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:45:36.990 [DEBUG] [Thread-126662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:45:36.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:45:37.044 [DEBUG] [Thread-126662] [transport.py] [_log()] userauth is OK
2025-12-04T00:45:37.044 [DEBUG] [Thread-126662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:45:37.044 [DEBUG] [Thread-126662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:45:37.044 [DEBUG] [Thread-126662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:45:37.044 [DEBUG] [Thread-126662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:45:37.063 [INFO] [Thread-126662] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:45:37.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:45:37.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:45:37.914 [DEBUG] [Thread-126662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:45:37.914 [DEBUG] [Thread-126662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:45:37.962 [DEBUG] [Thread-126662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:45:37.962 [DEBUG] [Thread-126662] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:45:37.970 [DEBUG] [Thread-126662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:45:37.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:45:37.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:45:37.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:45:37.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:45:37.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:45:37.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:45:38.006 [DEBUG] [Thread-126662] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:45:41.989 [DEBUG] [Thread-126664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:55.299 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:45:57.042 [DEBUG] [Thread-126665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:08.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:46:08.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:46:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:46:08.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 46, 5), 11.13, 46.81, 0.0, 25.25, 13.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:46:08.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:46:05
2025-12-04T00:46:08.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:46:08.973 [DEBUG] [Thread-126666] [transport.py] [_log()] starting thread (client mode): 0xa27a1960
2025-12-04T00:46:08.974 [DEBUG] [Thread-126666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:46:08.993 [DEBUG] [Thread-126666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:46:08.993 [INFO] [Thread-126666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] client lang: <none>
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] server lang: <none>
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] kex follows: False
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] Compression: none
2025-12-04T00:46:08.995 [DEBUG] [Thread-126666] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:46:09.009 [DEBUG] [Thread-126666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:46:09.009 [DEBUG] [Thread-126666] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:46:09.009 [DEBUG] [Thread-126666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:46:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:46:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:46:09.011 [DEBUG] [Thread-126666] [transport.py] [_log()] userauth is OK
2025-12-04T00:46:09.011 [DEBUG] [Thread-126666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:46:09.012 [DEBUG] [Thread-126666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:46:09.012 [DEBUG] [Thread-126666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:46:09.012 [DEBUG] [Thread-126666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:46:09.026 [INFO] [Thread-126666] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:46:09.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:46:09.688 [DEBUG] [Thread-126666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:46:09.688 [DEBUG] [Thread-126666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:46:09.689 [DEBUG] [Thread-126666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:46:09.729 [DEBUG] [Thread-126666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:46:09.729 [DEBUG] [Thread-126666] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:46:09.732 [DEBUG] [Thread-126666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:46:09.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:46:09.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:46:09.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:46:09.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:46:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:46:09.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:46:09.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.948311 -999.00  +13.80  17.94     52   +4.10 1 1 1 1 1     0    0 9.48 -12.37 ZNESW 15.0 17.9 157.8 23.9 14.2 -24.8 14.1 -24.2 13.9 -22.7 14.2 -23.5
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:46:09.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.948311
2025-12-04T00:46:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:46:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:46:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:46:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:46:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:46:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:46:05', tmtdew=11.13, humidity=46.81, cloud=0.0, wind=25.25, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:46:05', seeing=1.86, atlas_timestamp='2025-12-03T22:45:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:44:00')
2025-12-04T00:46:09.758 [DEBUG] [Thread-126666] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:46:09.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:46:09.858 [DEBUG] [Thread-126669] [transport.py] [_log()] starting thread (client mode): 0x9fd21ab0
2025-12-04T00:46:09.858 [DEBUG] [Thread-126669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:46:09.873 [DEBUG] [Thread-126669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:46:09.874 [INFO] [Thread-126669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:46:09.881 [DEBUG] [Thread-126669] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:46:09.881 [DEBUG] [Thread-126669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:46:09.881 [DEBUG] [Thread-126669] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:46:09.881 [DEBUG] [Thread-126669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] client lang: <none>
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] server lang: <none>
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] kex follows: False
2025-12-04T00:46:09.882 [DEBUG] [Thread-126669] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] Compression: none
2025-12-04T00:46:09.883 [DEBUG] [Thread-126669] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:46:09.940 [DEBUG] [Thread-126669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:46:09.940 [DEBUG] [Thread-126669] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:46:09.941 [DEBUG] [Thread-126669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:46:09.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:46:09.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:46:09.996 [DEBUG] [Thread-126669] [transport.py] [_log()] userauth is OK
2025-12-04T00:46:09.996 [DEBUG] [Thread-126669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:46:09.996 [DEBUG] [Thread-126669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:46:09.996 [DEBUG] [Thread-126669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:46:09.996 [DEBUG] [Thread-126669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:46:10.016 [INFO] [Thread-126669] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:46:10.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:46:10.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:46:10.871 [DEBUG] [Thread-126669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:46:10.871 [DEBUG] [Thread-126669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:46:10.919 [DEBUG] [Thread-126669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:46:10.919 [DEBUG] [Thread-126669] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:46:10.927 [DEBUG] [Thread-126669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:46:10.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:46:10.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:46:10.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:46:10.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:46:10.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:46:10.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:46:10.962 [DEBUG] [Thread-126669] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:46:12.065 [DEBUG] [Thread-126671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:15.729 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:25.116 [DEBUG] [Thread-126672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:27.115 [DEBUG] [Thread-126673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:31.492 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:31.493 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:36.145 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:46:40.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:46:40.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 46, 37), 11.13, 46.81, 0.0, 26.52, 13.92, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:46:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:46:37
2025-12-04T00:46:41.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:46:41.916 [DEBUG] [Thread-126674] [transport.py] [_log()] starting thread (client mode): 0xa27a35e0
2025-12-04T00:46:41.916 [DEBUG] [Thread-126674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:46:41.937 [DEBUG] [Thread-126674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:46:41.937 [INFO] [Thread-126674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:46:41.940 [DEBUG] [Thread-126674] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:46:41.940 [DEBUG] [Thread-126674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] client lang: <none>
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] server lang: <none>
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] kex follows: False
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] Compression: none
2025-12-04T00:46:41.941 [DEBUG] [Thread-126674] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:46:41.958 [DEBUG] [Thread-126674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:46:41.958 [DEBUG] [Thread-126674] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:46:41.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:46:41.959 [DEBUG] [Thread-126674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:46:41.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:46:41.961 [DEBUG] [Thread-126674] [transport.py] [_log()] userauth is OK
2025-12-04T00:46:41.961 [DEBUG] [Thread-126674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:46:41.962 [DEBUG] [Thread-126674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:46:41.962 [DEBUG] [Thread-126674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:46:41.962 [DEBUG] [Thread-126674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:46:41.986 [INFO] [Thread-126674] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:46:41.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:46:42.141 [DEBUG] [Thread-126676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:42.653 [DEBUG] [Thread-126674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:46:42.653 [DEBUG] [Thread-126674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:46:42.654 [DEBUG] [Thread-126674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:46:42.696 [DEBUG] [Thread-126674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:46:42.696 [DEBUG] [Thread-126674] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:46:42.698 [DEBUG] [Thread-126674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:46:42.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:46:42.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:46:42.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:46:42.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:46:42.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:46:42.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:46:42.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:46:42.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:46:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:46:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.948658 -999.00  +13.80  18.99     52   +4.10 1 1 1 1 1     0    0 9.40 -14.26 ZNESW 19.0 19.0 157.4 23.0 14.2 -24.7 14.1 -24.2 13.9 -22.6 14.2 -23.5
2025-12-04T00:46:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:46:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:46:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.948658
2025-12-04T00:46:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:46:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:46:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:46:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:46:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:46:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:46:37', tmtdew=11.13, humidity=46.81, cloud=0.0, wind=26.52, temperature=13.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:46:37', seeing=1.6, atlas_timestamp='2025-12-03T22:46:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:44:00')
2025-12-04T00:46:42.721 [DEBUG] [Thread-126674] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:46:42.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:46:42.818 [DEBUG] [Thread-126678] [transport.py] [_log()] starting thread (client mode): 0xa7bd2800
2025-12-04T00:46:42.818 [DEBUG] [Thread-126678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:46:42.832 [DEBUG] [Thread-126678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:46:42.832 [INFO] [Thread-126678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:46:42.839 [DEBUG] [Thread-126678] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] client lang: <none>
2025-12-04T00:46:42.840 [DEBUG] [Thread-126678] [transport.py] [_log()] server lang: <none>
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] kex follows: False
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] Compression: none
2025-12-04T00:46:42.841 [DEBUG] [Thread-126678] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:46:42.899 [DEBUG] [Thread-126678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:46:42.900 [DEBUG] [Thread-126678] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:46:42.900 [DEBUG] [Thread-126678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:46:42.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:46:42.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:46:42.956 [DEBUG] [Thread-126678] [transport.py] [_log()] userauth is OK
2025-12-04T00:46:42.956 [DEBUG] [Thread-126678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:46:42.956 [DEBUG] [Thread-126678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:46:42.956 [DEBUG] [Thread-126678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:46:42.956 [DEBUG] [Thread-126678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:46:42.975 [INFO] [Thread-126678] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:46:42.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:46:42.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:46:43.825 [DEBUG] [Thread-126678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:46:43.825 [DEBUG] [Thread-126678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:46:43.873 [DEBUG] [Thread-126678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:46:43.873 [DEBUG] [Thread-126678] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:46:43.882 [DEBUG] [Thread-126678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:46:43.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:46:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:46:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:46:43.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:46:43.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:46:43.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:46:43.916 [DEBUG] [Thread-126678] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:46:56.568 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:46:57.172 [DEBUG] [Thread-126680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:12.217 [DEBUG] [Thread-126681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:47:13.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:47:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:47:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 47, 9), 11.09, 46.94, 0.0, 28.27, 13.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:47:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:47:09
2025-12-04T00:47:14.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:47:14.899 [DEBUG] [Thread-126682] [transport.py] [_log()] starting thread (client mode): 0xa51cf430
2025-12-04T00:47:14.899 [DEBUG] [Thread-126682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:47:14.921 [DEBUG] [Thread-126682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:47:14.921 [INFO] [Thread-126682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:47:14.924 [DEBUG] [Thread-126682] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:47:14.924 [DEBUG] [Thread-126682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:47:14.924 [DEBUG] [Thread-126682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] client lang: <none>
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] server lang: <none>
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] kex follows: False
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] Compression: none
2025-12-04T00:47:14.925 [DEBUG] [Thread-126682] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:47:14.941 [DEBUG] [Thread-126682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:47:14.941 [DEBUG] [Thread-126682] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:47:14.941 [DEBUG] [Thread-126682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:47:14.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:47:14.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:47:14.942 [DEBUG] [Thread-126682] [transport.py] [_log()] userauth is OK
2025-12-04T00:47:14.942 [DEBUG] [Thread-126682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:47:14.942 [DEBUG] [Thread-126682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:47:14.942 [DEBUG] [Thread-126682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:47:14.942 [DEBUG] [Thread-126682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:47:14.951 [INFO] [Thread-126682] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:47:14.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:47:15.605 [DEBUG] [Thread-126682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:47:15.605 [DEBUG] [Thread-126682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:47:15.605 [DEBUG] [Thread-126682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:47:15.646 [DEBUG] [Thread-126682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:47:15.646 [DEBUG] [Thread-126682] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:47:15.649 [DEBUG] [Thread-126682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:47:15.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:47:15.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:47:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:47:15.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:47:15.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:47:15.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:47:15.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:47:15.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.949005 -999.00  +13.80  17.55     52   +4.10 1 1 1 1 1     0    0 9.47 -13.64 ZNESW 17.6 17.6 148.0 24.7 14.2 -24.8 14.2 -24.3 13.9 -22.6 14.2 -23.5
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.949005
2025-12-04T00:47:15.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:47:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:47:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:47:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:47:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:47:15.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:47:09', tmtdew=11.09, humidity=46.94, cloud=0.0, wind=28.27, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:47:09', seeing=1.6, atlas_timestamp='2025-12-03T22:46:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:44:00')
2025-12-04T00:47:15.675 [DEBUG] [Thread-126682] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:47:15.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:47:15.771 [DEBUG] [Thread-126685] [transport.py] [_log()] starting thread (client mode): 0xa7bd3190
2025-12-04T00:47:15.772 [DEBUG] [Thread-126685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:47:15.789 [DEBUG] [Thread-126685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:47:15.790 [INFO] [Thread-126685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:47:15.797 [DEBUG] [Thread-126685] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:47:15.797 [DEBUG] [Thread-126685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] client lang: <none>
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] server lang: <none>
2025-12-04T00:47:15.798 [DEBUG] [Thread-126685] [transport.py] [_log()] kex follows: False
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] Compression: none
2025-12-04T00:47:15.799 [DEBUG] [Thread-126685] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:47:15.857 [DEBUG] [Thread-126685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:47:15.857 [DEBUG] [Thread-126685] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:47:15.857 [DEBUG] [Thread-126685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:47:15.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:47:15.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:47:15.916 [DEBUG] [Thread-126685] [transport.py] [_log()] userauth is OK
2025-12-04T00:47:15.916 [DEBUG] [Thread-126685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:47:15.916 [DEBUG] [Thread-126685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:47:15.916 [DEBUG] [Thread-126685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:47:15.916 [DEBUG] [Thread-126685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:47:15.935 [INFO] [Thread-126685] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:47:15.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:47:15.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:47:16.818 [DEBUG] [Thread-126685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:47:16.818 [DEBUG] [Thread-126685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:47:16.866 [DEBUG] [Thread-126685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:47:16.866 [DEBUG] [Thread-126685] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:47:16.875 [DEBUG] [Thread-126685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:47:16.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:47:16.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:47:16.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:47:16.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:47:16.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:47:16.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:47:16.909 [DEBUG] [Thread-126685] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:47:16.991 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:25.173 [DEBUG] [Thread-126687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:27.241 [DEBUG] [Thread-126688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:31.794 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:31.795 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:37.397 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:42.293 [DEBUG] [Thread-126689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:47:46.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:47:46.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:47:47.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 47, 41), 11.04, 47.09, 0.0, 26.1, 13.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:47:47.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:47:41
2025-12-04T00:47:47.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:47:47.842 [DEBUG] [Thread-126690] [transport.py] [_log()] starting thread (client mode): 0xa2778070
2025-12-04T00:47:47.842 [DEBUG] [Thread-126690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:47:47.862 [DEBUG] [Thread-126690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:47:47.862 [INFO] [Thread-126690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] client lang: <none>
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] server lang: <none>
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] kex follows: False
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:47:47.865 [DEBUG] [Thread-126690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:47:47.866 [DEBUG] [Thread-126690] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:47:47.866 [DEBUG] [Thread-126690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:47:47.866 [DEBUG] [Thread-126690] [transport.py] [_log()] Compression: none
2025-12-04T00:47:47.866 [DEBUG] [Thread-126690] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:47:47.880 [DEBUG] [Thread-126690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:47:47.880 [DEBUG] [Thread-126690] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:47:47.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:47:47.881 [DEBUG] [Thread-126690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:47:47.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:47:47.882 [DEBUG] [Thread-126690] [transport.py] [_log()] userauth is OK
2025-12-04T00:47:47.882 [DEBUG] [Thread-126690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:47:47.882 [DEBUG] [Thread-126690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:47:47.882 [DEBUG] [Thread-126690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:47:47.882 [DEBUG] [Thread-126690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:47:47.901 [INFO] [Thread-126690] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:47:47.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:47:48.539 [DEBUG] [Thread-126690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:47:48.539 [DEBUG] [Thread-126690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:47:48.539 [DEBUG] [Thread-126690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:47:48.580 [DEBUG] [Thread-126690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:47:48.580 [DEBUG] [Thread-126690] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:47:48.582 [DEBUG] [Thread-126690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:47:48.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:47:48.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:47:48.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:47:48.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:47:48.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:47:48.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:47:48.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.949352 -999.00  +13.80  13.72     52   +4.10 1 1 1 1 1     0    0 9.44 -14.12 ZNESW 12.5 13.7 158.7 22.6 14.2 -24.8 14.1 -24.3 13.9 -22.8 14.2 -23.7
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.949352
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:47:48.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:47:41', tmtdew=11.04, humidity=47.09, cloud=0.0, wind=26.1, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:47:41', seeing=1.32, atlas_timestamp='2025-12-03T22:47:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:44:00')
2025-12-04T00:47:48.594 [DEBUG] [Thread-126690] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:47:48.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:47:48.680 [DEBUG] [Thread-126693] [transport.py] [_log()] starting thread (client mode): 0x9fd21ab0
2025-12-04T00:47:48.680 [DEBUG] [Thread-126693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:47:48.698 [DEBUG] [Thread-126693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:47:48.698 [INFO] [Thread-126693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] client lang: <none>
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] server lang: <none>
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] kex follows: False
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:47:48.706 [DEBUG] [Thread-126693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:47:48.707 [DEBUG] [Thread-126693] [transport.py] [_log()] Compression: none
2025-12-04T00:47:48.707 [DEBUG] [Thread-126693] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:47:48.767 [DEBUG] [Thread-126693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:47:48.767 [DEBUG] [Thread-126693] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:47:48.767 [DEBUG] [Thread-126693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:47:48.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:47:48.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:47:48.829 [DEBUG] [Thread-126693] [transport.py] [_log()] userauth is OK
2025-12-04T00:47:48.829 [DEBUG] [Thread-126693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:47:48.829 [DEBUG] [Thread-126693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:47:48.829 [DEBUG] [Thread-126693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:47:48.829 [DEBUG] [Thread-126693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:47:48.844 [INFO] [Thread-126693] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:47:48.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:47:48.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:47:49.675 [DEBUG] [Thread-126693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:47:49.675 [DEBUG] [Thread-126693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:47:49.723 [DEBUG] [Thread-126693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:47:49.723 [DEBUG] [Thread-126693] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:47:49.732 [DEBUG] [Thread-126693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:47:49.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:47:49.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:47:49.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:47:49.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:47:49.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:47:49.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:47:49.764 [DEBUG] [Thread-126693] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:47:57.318 [DEBUG] [Thread-126695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:47:57.815 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:12.370 [DEBUG] [Thread-126696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:18.283 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:19.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:48:19.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:48:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:48:20.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 48, 13), 11.06, 47.04, 0.0, 26.47, 13.89, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:48:20.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:48:13
2025-12-04T00:48:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:48:20.725 [DEBUG] [Thread-126697] [transport.py] [_log()] starting thread (client mode): 0x9fd22a70
2025-12-04T00:48:20.725 [DEBUG] [Thread-126697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:48:20.746 [DEBUG] [Thread-126697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:48:20.746 [INFO] [Thread-126697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:48:20.749 [DEBUG] [Thread-126697] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:48:20.749 [DEBUG] [Thread-126697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] client lang: <none>
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] server lang: <none>
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] kex follows: False
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] Compression: none
2025-12-04T00:48:20.750 [DEBUG] [Thread-126697] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:48:20.766 [DEBUG] [Thread-126697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:48:20.767 [DEBUG] [Thread-126697] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:48:20.767 [DEBUG] [Thread-126697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:48:20.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:48:20.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:48:20.769 [DEBUG] [Thread-126697] [transport.py] [_log()] userauth is OK
2025-12-04T00:48:20.769 [DEBUG] [Thread-126697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:48:20.770 [DEBUG] [Thread-126697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:48:20.770 [DEBUG] [Thread-126697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:48:20.770 [DEBUG] [Thread-126697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:48:20.793 [INFO] [Thread-126697] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:48:20.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:48:21.435 [DEBUG] [Thread-126697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:48:21.435 [DEBUG] [Thread-126697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:48:21.436 [DEBUG] [Thread-126697] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:48:21.476 [DEBUG] [Thread-126697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:48:21.476 [DEBUG] [Thread-126697] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:48:21.478 [DEBUG] [Thread-126697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:48:21.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:48:21.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:48:21.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:48:21.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:48:21.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:48:21.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:48:21.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.950047 -999.00  +13.80  17.09     52   +4.10 1 1 1 1 1     0    0 9.37 -14.03 ZNESW 17.7 17.1 147.8 23.4 14.2 -24.9 14.1 -24.2 13.9 -22.7 14.2 -23.6
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.950047
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:48:21.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:48:13', tmtdew=11.06, humidity=47.04, cloud=0.0, wind=26.47, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:48:13', seeing=1.26, atlas_timestamp='2025-12-03T22:48:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:48:21.500 [DEBUG] [Thread-126697] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:48:21.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:48:21.585 [DEBUG] [Thread-126700] [transport.py] [_log()] starting thread (client mode): 0xa7bd2d10
2025-12-04T00:48:21.585 [DEBUG] [Thread-126700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:48:21.599 [DEBUG] [Thread-126700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:48:21.599 [INFO] [Thread-126700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] client lang: <none>
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] server lang: <none>
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] kex follows: False
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] Compression: none
2025-12-04T00:48:21.607 [DEBUG] [Thread-126700] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:48:21.664 [DEBUG] [Thread-126700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:48:21.664 [DEBUG] [Thread-126700] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:48:21.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:48:21.665 [DEBUG] [Thread-126700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:48:21.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:48:21.720 [DEBUG] [Thread-126700] [transport.py] [_log()] userauth is OK
2025-12-04T00:48:21.720 [DEBUG] [Thread-126700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:48:21.720 [DEBUG] [Thread-126700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:48:21.720 [DEBUG] [Thread-126700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:48:21.720 [DEBUG] [Thread-126700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:48:21.742 [INFO] [Thread-126700] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:48:21.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:48:21.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:48:22.558 [DEBUG] [Thread-126700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:48:22.558 [DEBUG] [Thread-126700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:48:22.606 [DEBUG] [Thread-126700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:48:22.606 [DEBUG] [Thread-126700] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:48:22.615 [DEBUG] [Thread-126700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:48:22.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:48:22.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:48:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:48:22.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:48:22.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:48:22.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:48:22.648 [DEBUG] [Thread-126700] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:48:25.231 [DEBUG] [Thread-126702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:27.397 [DEBUG] [Thread-126703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:31.998 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:32.000 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:38.744 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:42.425 [DEBUG] [Thread-126704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:52.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:48:52.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:48:52.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:48:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 48, 45), 10.99, 47.42, 0.0, 29.5, 13.87, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:48:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:48:45
2025-12-04T00:48:53.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:48:53.615 [DEBUG] [Thread-126705] [transport.py] [_log()] starting thread (client mode): 0xa2785ff0
2025-12-04T00:48:53.615 [DEBUG] [Thread-126705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:48:53.636 [DEBUG] [Thread-126705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:48:53.636 [INFO] [Thread-126705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:48:53.639 [DEBUG] [Thread-126705] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:48:53.639 [DEBUG] [Thread-126705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] client lang: <none>
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] server lang: <none>
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] kex follows: False
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] Compression: none
2025-12-04T00:48:53.640 [DEBUG] [Thread-126705] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:48:53.656 [DEBUG] [Thread-126705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:48:53.656 [DEBUG] [Thread-126705] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:48:53.657 [DEBUG] [Thread-126705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:48:53.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:48:53.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:48:53.659 [DEBUG] [Thread-126705] [transport.py] [_log()] userauth is OK
2025-12-04T00:48:53.659 [DEBUG] [Thread-126705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:48:53.659 [DEBUG] [Thread-126705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:48:53.659 [DEBUG] [Thread-126705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:48:53.659 [DEBUG] [Thread-126705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:48:53.677 [INFO] [Thread-126705] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:48:53.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:48:54.332 [DEBUG] [Thread-126705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:48:54.332 [DEBUG] [Thread-126705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:48:54.333 [DEBUG] [Thread-126705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:48:54.374 [DEBUG] [Thread-126705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:48:54.374 [DEBUG] [Thread-126705] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:48:54.377 [DEBUG] [Thread-126705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:48:54.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:48:54.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:48:54.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:48:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:48:54.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:48:54.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:48:54.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:48:54.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:48:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:48:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.950394 -999.00  +13.80  18.12     52   +4.20 1 1 1 1 1     0    0 9.64 -14.78 ZNESW 15.6 18.1 148.4 25.2 14.2 -24.8 14.1 -24.3 13.9 -22.6 14.2 -23.5
2025-12-04T00:48:54.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:48:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:48:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.950394
2025-12-04T00:48:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:48:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:48:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:48:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:48:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:48:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:48:45', tmtdew=10.99, humidity=47.42, cloud=0.0, wind=29.5, temperature=13.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:48:46', seeing=1.14, atlas_timestamp='2025-12-03T22:48:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:48:54.400 [DEBUG] [Thread-126705] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:48:54.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:48:54.498 [DEBUG] [Thread-126708] [transport.py] [_log()] starting thread (client mode): 0xa2787be0
2025-12-04T00:48:54.498 [DEBUG] [Thread-126708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:48:54.512 [DEBUG] [Thread-126708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:48:54.512 [INFO] [Thread-126708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] client lang: <none>
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] server lang: <none>
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] kex follows: False
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:48:54.520 [DEBUG] [Thread-126708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:48:54.521 [DEBUG] [Thread-126708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:48:54.521 [DEBUG] [Thread-126708] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:48:54.521 [DEBUG] [Thread-126708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:48:54.521 [DEBUG] [Thread-126708] [transport.py] [_log()] Compression: none
2025-12-04T00:48:54.521 [DEBUG] [Thread-126708] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:48:54.580 [DEBUG] [Thread-126708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:48:54.580 [DEBUG] [Thread-126708] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:48:54.581 [DEBUG] [Thread-126708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:48:54.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:48:54.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:48:54.636 [DEBUG] [Thread-126708] [transport.py] [_log()] userauth is OK
2025-12-04T00:48:54.636 [DEBUG] [Thread-126708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:48:54.636 [DEBUG] [Thread-126708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:48:54.636 [DEBUG] [Thread-126708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:48:54.636 [DEBUG] [Thread-126708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:48:54.654 [INFO] [Thread-126708] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:48:54.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:48:54.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:48:55.503 [DEBUG] [Thread-126708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:48:55.503 [DEBUG] [Thread-126708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:48:55.551 [DEBUG] [Thread-126708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:48:55.551 [DEBUG] [Thread-126708] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:48:55.560 [DEBUG] [Thread-126708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:48:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:48:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:48:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:48:55.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:48:55.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:48:55.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:48:55.594 [DEBUG] [Thread-126708] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:48:57.454 [DEBUG] [Thread-126710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:48:59.142 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:12.498 [DEBUG] [Thread-126711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:19.529 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:25.306 [DEBUG] [Thread-126712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:25.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:49:25.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:49:25.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:49:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 49, 17), 10.96, 47.52, 0.0, 26.94, 13.89, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:49:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:49:17
2025-12-04T00:49:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:49:26.547 [DEBUG] [Thread-126713] [transport.py] [_log()] starting thread (client mode): 0xa2745030
2025-12-04T00:49:26.547 [DEBUG] [Thread-126713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:49:26.568 [DEBUG] [Thread-126713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:49:26.568 [INFO] [Thread-126713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:49:26.571 [DEBUG] [Thread-126713] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] client lang: <none>
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] server lang: <none>
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] kex follows: False
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:49:26.572 [DEBUG] [Thread-126713] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:49:26.573 [DEBUG] [Thread-126713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:49:26.573 [DEBUG] [Thread-126713] [transport.py] [_log()] Compression: none
2025-12-04T00:49:26.573 [DEBUG] [Thread-126713] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:49:26.589 [DEBUG] [Thread-126713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:49:26.590 [DEBUG] [Thread-126713] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:49:26.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:49:26.591 [DEBUG] [Thread-126713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:49:26.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:49:26.593 [DEBUG] [Thread-126713] [transport.py] [_log()] userauth is OK
2025-12-04T00:49:26.593 [DEBUG] [Thread-126713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:49:26.593 [DEBUG] [Thread-126713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:49:26.593 [DEBUG] [Thread-126713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:49:26.593 [DEBUG] [Thread-126713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:49:26.617 [INFO] [Thread-126713] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:49:26.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:49:27.270 [DEBUG] [Thread-126713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:49:27.270 [DEBUG] [Thread-126713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:49:27.271 [DEBUG] [Thread-126713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:49:27.312 [DEBUG] [Thread-126713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:49:27.312 [DEBUG] [Thread-126713] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:49:27.314 [DEBUG] [Thread-126713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:49:27.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:49:27.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:49:27.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:49:27.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:49:27.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:49:27.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:49:27.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:49:27.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:49:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:49:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.950741 -999.00  +13.80  17.88     52   +4.20 1 1 1 1 1     0    0 9.68 -15.79 ZNESW 17.2 17.9 156.6 24.4 14.2 -24.7 14.1 -24.4 13.9 -22.7 14.2 -23.4
2025-12-04T00:49:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.950741
2025-12-04T00:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:49:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:49:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:49:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:49:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:49:17', tmtdew=10.96, humidity=47.52, cloud=0.0, wind=26.94, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:49:18', seeing=1.28, atlas_timestamp='2025-12-03T22:49:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:49:27.341 [DEBUG] [Thread-126713] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:49:27.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:49:27.434 [DEBUG] [Thread-126716] [transport.py] [_log()] starting thread (client mode): 0xa7bd35b0
2025-12-04T00:49:27.434 [DEBUG] [Thread-126716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:49:27.453 [DEBUG] [Thread-126716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:49:27.453 [INFO] [Thread-126716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:27.461 [DEBUG] [Thread-126716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] client lang: <none>
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] server lang: <none>
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] kex follows: False
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:49:27.462 [DEBUG] [Thread-126716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:49:27.463 [DEBUG] [Thread-126716] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:49:27.463 [DEBUG] [Thread-126716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:49:27.463 [DEBUG] [Thread-126716] [transport.py] [_log()] Compression: none
2025-12-04T00:49:27.463 [DEBUG] [Thread-126716] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:49:27.520 [DEBUG] [Thread-126716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:49:27.521 [DEBUG] [Thread-126716] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:49:27.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:49:27.522 [DEBUG] [Thread-126716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:49:27.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:49:27.526 [DEBUG] [Thread-126718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:27.577 [DEBUG] [Thread-126716] [transport.py] [_log()] userauth is OK
2025-12-04T00:49:27.578 [DEBUG] [Thread-126716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:49:27.578 [DEBUG] [Thread-126716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:49:27.578 [DEBUG] [Thread-126716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:49:27.578 [DEBUG] [Thread-126716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:49:27.602 [INFO] [Thread-126716] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:49:27.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:49:27.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:49:28.448 [DEBUG] [Thread-126716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:49:28.448 [DEBUG] [Thread-126716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:49:28.496 [DEBUG] [Thread-126716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:49:28.496 [DEBUG] [Thread-126716] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:49:28.505 [DEBUG] [Thread-126716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:49:28.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:49:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:49:28.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:49:28.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:49:28.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:49:28.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:49:28.544 [DEBUG] [Thread-126716] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:49:32.237 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:32.238 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:39.909 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:42.571 [DEBUG] [Thread-126719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:57.604 [DEBUG] [Thread-126720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:49:58.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:49:58.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:49:58.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:49:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 49, 50), 10.93, 47.6, 0.0, 26.26, 13.86, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:49:59.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:49:50
2025-12-04T00:49:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:49:59.497 [DEBUG] [Thread-126721] [transport.py] [_log()] starting thread (client mode): 0xa514d3f0
2025-12-04T00:49:59.497 [DEBUG] [Thread-126721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:49:59.517 [DEBUG] [Thread-126721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:49:59.517 [INFO] [Thread-126721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] client lang: <none>
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] server lang: <none>
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] kex follows: False
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] Compression: none
2025-12-04T00:49:59.518 [DEBUG] [Thread-126721] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:49:59.529 [DEBUG] [Thread-126721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:49:59.530 [DEBUG] [Thread-126721] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:49:59.530 [DEBUG] [Thread-126721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:49:59.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:49:59.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:49:59.532 [DEBUG] [Thread-126721] [transport.py] [_log()] userauth is OK
2025-12-04T00:49:59.532 [DEBUG] [Thread-126721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:49:59.532 [DEBUG] [Thread-126721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:49:59.532 [DEBUG] [Thread-126721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:49:59.532 [DEBUG] [Thread-126721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:49:59.550 [INFO] [Thread-126721] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:49:59.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:50:00.146 [DEBUG] [Thread-126721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:50:00.147 [DEBUG] [Thread-126721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:50:00.147 [DEBUG] [Thread-126721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:50:00.188 [DEBUG] [Thread-126721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:50:00.188 [DEBUG] [Thread-126721] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:50:00.191 [DEBUG] [Thread-126721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:50:00.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:50:00.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:50:00.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:50:00.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:50:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:50:00.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:50:00.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:50:00.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:50:00.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:50:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.951088 -999.00  +13.80  18.73     52   +4.20 1 1 1 1 1     0    0 9.43 -16.17 ZNESW 17.4 18.7 147.2 25.0 14.2 -24.7 14.1 -24.3 13.9 -22.6 14.2 -23.6
2025-12-04T00:50:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:50:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:50:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.951088
2025-12-04T00:50:00.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:50:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:50:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:50:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:50:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:50:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:49:50', tmtdew=10.93, humidity=47.6, cloud=0.0, wind=26.26, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:49:50', seeing=1.46, atlas_timestamp='2025-12-03T22:49:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:50:00.218 [DEBUG] [Thread-126721] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:50:00.290 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:00.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:50:00.307 [DEBUG] [Thread-126724] [transport.py] [_log()] starting thread (client mode): 0xa7bd1d80
2025-12-04T00:50:00.308 [DEBUG] [Thread-126724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:50:00.323 [DEBUG] [Thread-126724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:50:00.323 [INFO] [Thread-126724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:50:00.330 [DEBUG] [Thread-126724] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] client lang: <none>
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] server lang: <none>
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] kex follows: False
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:50:00.331 [DEBUG] [Thread-126724] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:50:00.332 [DEBUG] [Thread-126724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:50:00.332 [DEBUG] [Thread-126724] [transport.py] [_log()] Compression: none
2025-12-04T00:50:00.332 [DEBUG] [Thread-126724] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:50:00.387 [DEBUG] [Thread-126724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:50:00.388 [DEBUG] [Thread-126724] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:50:00.388 [DEBUG] [Thread-126724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:50:00.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:50:00.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:50:00.444 [DEBUG] [Thread-126724] [transport.py] [_log()] userauth is OK
2025-12-04T00:50:00.444 [DEBUG] [Thread-126724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:50:00.444 [DEBUG] [Thread-126724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:50:00.444 [DEBUG] [Thread-126724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:50:00.445 [DEBUG] [Thread-126724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:50:00.463 [INFO] [Thread-126724] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:50:00.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:50:00.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:50:01.327 [DEBUG] [Thread-126724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:50:01.328 [DEBUG] [Thread-126724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:50:01.376 [DEBUG] [Thread-126724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:50:01.376 [DEBUG] [Thread-126724] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:50:01.385 [DEBUG] [Thread-126724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:50:01.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:50:01.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:50:01.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:50:01.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:50:01.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:50:01.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:50:01.419 [DEBUG] [Thread-126724] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:50:12.632 [DEBUG] [Thread-126726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:20.671 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:25.358 [DEBUG] [Thread-126727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:27.672 [DEBUG] [Thread-126728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:50:31.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:50:31.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:50:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 50, 22), 10.91, 47.69, 0.0, 25.6, 13.82, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:50:32.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:50:22
2025-12-04T00:50:32.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:50:32.381 [DEBUG] [Thread-126729] [transport.py] [_log()] starting thread (client mode): 0xa2785390
2025-12-04T00:50:32.381 [DEBUG] [Thread-126729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:50:32.401 [DEBUG] [Thread-126729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:50:32.401 [INFO] [Thread-126729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] client lang: <none>
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] server lang: <none>
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] kex follows: False
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] Compression: none
2025-12-04T00:50:32.403 [DEBUG] [Thread-126729] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:50:32.415 [DEBUG] [Thread-126729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:50:32.415 [DEBUG] [Thread-126729] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:50:32.416 [DEBUG] [Thread-126729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:50:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:50:32.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:50:32.418 [DEBUG] [Thread-126729] [transport.py] [_log()] userauth is OK
2025-12-04T00:50:32.418 [DEBUG] [Thread-126729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:50:32.418 [DEBUG] [Thread-126729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:50:32.418 [DEBUG] [Thread-126729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:50:32.418 [DEBUG] [Thread-126729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:50:32.435 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:32.436 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:32.442 [INFO] [Thread-126729] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:50:32.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:50:33.007 [DEBUG] [Thread-126729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:50:33.007 [DEBUG] [Thread-126729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:50:33.007 [DEBUG] [Thread-126729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:50:33.048 [DEBUG] [Thread-126729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:50:33.048 [DEBUG] [Thread-126729] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:50:33.054 [DEBUG] [Thread-126729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:50:33.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:50:33.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:50:33.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:50:33.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:50:33.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:50:33.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:50:33.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:50:33.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:50:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:50:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.951435 -999.00  +13.80  21.43     52   +4.20 1 1 1 1 1     0    0 9.19 -18.48 ZNESW 16.5 21.4 145.6 30.9 14.2 -24.7 14.1 -24.2 13.9 -22.5 14.2 -23.5
2025-12-04T00:50:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:50:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:50:33.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.951435
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:50:33.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:50:22', tmtdew=10.91, humidity=47.69, cloud=0.0, wind=25.6, temperature=13.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:50:22', seeing=1.35, atlas_timestamp='2025-12-03T22:50:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:50:33.091 [DEBUG] [Thread-126729] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:50:33.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:50:33.191 [DEBUG] [Thread-126732] [transport.py] [_log()] starting thread (client mode): 0xa2786590
2025-12-04T00:50:33.192 [DEBUG] [Thread-126732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:50:33.210 [DEBUG] [Thread-126732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:50:33.211 [INFO] [Thread-126732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:33.218 [DEBUG] [Thread-126732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] client lang: <none>
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] server lang: <none>
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] kex follows: False
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:50:33.219 [DEBUG] [Thread-126732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:50:33.220 [DEBUG] [Thread-126732] [transport.py] [_log()] Compression: none
2025-12-04T00:50:33.220 [DEBUG] [Thread-126732] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:50:33.275 [DEBUG] [Thread-126732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:50:33.276 [DEBUG] [Thread-126732] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:50:33.276 [DEBUG] [Thread-126732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:50:33.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:50:33.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:50:33.332 [DEBUG] [Thread-126732] [transport.py] [_log()] userauth is OK
2025-12-04T00:50:33.332 [DEBUG] [Thread-126732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:50:33.332 [DEBUG] [Thread-126732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:50:33.332 [DEBUG] [Thread-126732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:50:33.332 [DEBUG] [Thread-126732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:50:33.351 [INFO] [Thread-126732] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:50:33.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:50:33.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:50:34.178 [DEBUG] [Thread-126732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:50:34.178 [DEBUG] [Thread-126732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:50:34.226 [DEBUG] [Thread-126732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:50:34.226 [DEBUG] [Thread-126732] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:50:34.235 [DEBUG] [Thread-126732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:50:34.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:50:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:50:34.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:50:34.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:50:34.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:50:34.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:50:34.275 [DEBUG] [Thread-126732] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:50:41.102 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:42.703 [DEBUG] [Thread-126734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:50:57.746 [DEBUG] [Thread-126735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:01.541 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:51:04.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:51:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:51:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 50, 54), 10.94, 47.74, 0.0, 26.11, 13.76, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:51:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:50:54
2025-12-04T00:51:05.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:51:05.250 [DEBUG] [Thread-126736] [transport.py] [_log()] starting thread (client mode): 0xa519b550
2025-12-04T00:51:05.250 [DEBUG] [Thread-126736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:51:05.273 [DEBUG] [Thread-126736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:51:05.273 [INFO] [Thread-126736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] client lang: <none>
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] server lang: <none>
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] kex follows: False
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] Compression: none
2025-12-04T00:51:05.275 [DEBUG] [Thread-126736] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:51:05.282 [DEBUG] [Thread-126736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:51:05.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:51:05.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] userauth is OK
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:51:05.283 [DEBUG] [Thread-126736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:51:05.293 [INFO] [Thread-126736] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:51:05.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:51:05.905 [DEBUG] [Thread-126736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:51:05.905 [DEBUG] [Thread-126736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:51:05.905 [DEBUG] [Thread-126736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:51:05.947 [DEBUG] [Thread-126736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:51:05.947 [DEBUG] [Thread-126736] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:51:05.949 [DEBUG] [Thread-126736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:51:05.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:51:05.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:51:05.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:51:05.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:51:05.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:51:05.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:51:05.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.951783 -999.00  +13.80  25.10     52   +4.20 1 1 1 1 1     0    0 9.33 -18.77 ZNESW 16.2 25.1 149.4 28.9 14.2 -24.8 14.1 -24.2 13.8 -22.6 14.2 -23.5
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.951783
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:51:05.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:50:54', tmtdew=10.94, humidity=47.74, cloud=0.0, wind=26.11, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:50:54', seeing=1.35, atlas_timestamp='2025-12-03T22:50:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.04224999999999923, -0.008749999999999147, -0.008500000000001506, 0.01950000000000074, -0.036749999999999616, -0.031000000000000583, -0.010249999999999204, 0.013999999999999346, -0.022500000000000853, 0.009249999999999758, -0.014999999999998792, 0.03300000000000125, 0.060249999999999915, -0.16050000000000075, -0.14000000000000057, -0.021750000000000824, -0.037499999999999645, 0.009999999999999787, -0.06675000000000075, 0.024499999999999744, -0.05975000000000108, -0.14525000000000077, -0.040749999999999176, 0.032999999999999474, -0.04550000000000054, -0.15024999999999977, 0.0365000000000002, 0.09250000000000114, -0.10549999999999926, -0.6029999999999998, -0.036999999999999034, 0.020749999999999602], zp_timestamp='2025-12-03T22:46:00')
2025-12-04T00:51:05.958 [DEBUG] [Thread-126736] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:51:06.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:51:06.043 [DEBUG] [Thread-126739] [transport.py] [_log()] starting thread (client mode): 0xa5198700
2025-12-04T00:51:06.044 [DEBUG] [Thread-126739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:51:06.058 [DEBUG] [Thread-126739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:51:06.058 [INFO] [Thread-126739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:06.065 [DEBUG] [Thread-126739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] client lang: <none>
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] server lang: <none>
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] kex follows: False
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] Compression: none
2025-12-04T00:51:06.066 [DEBUG] [Thread-126739] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:51:06.124 [DEBUG] [Thread-126739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:51:06.124 [DEBUG] [Thread-126739] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:51:06.124 [DEBUG] [Thread-126739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:51:06.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:51:06.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:51:06.181 [DEBUG] [Thread-126739] [transport.py] [_log()] userauth is OK
2025-12-04T00:51:06.181 [DEBUG] [Thread-126739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:51:06.181 [DEBUG] [Thread-126739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:51:06.181 [DEBUG] [Thread-126739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:51:06.181 [DEBUG] [Thread-126739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:51:06.195 [INFO] [Thread-126739] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:51:06.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:51:06.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:51:07.041 [DEBUG] [Thread-126739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:51:07.041 [DEBUG] [Thread-126739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:51:07.089 [DEBUG] [Thread-126739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:51:07.089 [DEBUG] [Thread-126739] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:51:07.098 [DEBUG] [Thread-126739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:51:07.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:51:07.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:51:07.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:51:07.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:51:07.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:51:07.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:51:07.134 [DEBUG] [Thread-126739] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:51:12.776 [DEBUG] [Thread-126741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:21.980 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:25.419 [DEBUG] [Thread-126742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:27.824 [DEBUG] [Thread-126743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:32.637 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:32.638 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:37.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:51:37.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:51:37.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:51:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 51, 26), 7.26, 65.27, 0.0, 25.25, 9.08, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:51:37.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:51:26
2025-12-04T00:51:37.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:51:38.101 [DEBUG] [Thread-126744] [transport.py] [_log()] starting thread (client mode): 0xa519b430
2025-12-04T00:51:38.101 [DEBUG] [Thread-126744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:51:38.121 [DEBUG] [Thread-126744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:51:38.121 [INFO] [Thread-126744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] client lang: <none>
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] server lang: <none>
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] kex follows: False
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] Compression: none
2025-12-04T00:51:38.125 [DEBUG] [Thread-126744] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:51:38.142 [DEBUG] [Thread-126744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:51:38.143 [DEBUG] [Thread-126744] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:51:38.143 [DEBUG] [Thread-126744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:51:38.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:51:38.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:51:38.145 [DEBUG] [Thread-126744] [transport.py] [_log()] userauth is OK
2025-12-04T00:51:38.145 [DEBUG] [Thread-126744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:51:38.145 [DEBUG] [Thread-126744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:51:38.146 [DEBUG] [Thread-126744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:51:38.146 [DEBUG] [Thread-126744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:51:38.160 [INFO] [Thread-126744] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:51:38.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:51:38.795 [DEBUG] [Thread-126744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:51:38.795 [DEBUG] [Thread-126744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:51:38.795 [DEBUG] [Thread-126744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:51:38.836 [DEBUG] [Thread-126744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:51:38.836 [DEBUG] [Thread-126744] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:51:38.839 [DEBUG] [Thread-126744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:51:38.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:51:38.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:51:38.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:51:38.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:51:38.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:51:38.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:51:38.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:51:38.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.951783 -999.00  +13.80  25.10     52   +4.20 1 1 1 1 1     0    0 9.33 -18.77 ZNESW 16.2 25.1 149.4 28.9 14.2 -24.8 14.1 -24.2 13.8 -22.6 14.2 -23.5
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.951783
2025-12-04T00:51:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:51:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:51:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:51:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:51:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:51:38.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:51:26', tmtdew=7.26, humidity=65.27, cloud=0.0, wind=25.25, temperature=9.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:51:26', seeing=1.23, atlas_timestamp='2025-12-03T22:50:34.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:50:00')
2025-12-04T00:51:38.863 [DEBUG] [Thread-126744] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:51:38.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:51:38.969 [DEBUG] [Thread-126747] [transport.py] [_log()] starting thread (client mode): 0xa7bd3100
2025-12-04T00:51:38.969 [DEBUG] [Thread-126747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:51:38.984 [DEBUG] [Thread-126747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:51:38.984 [INFO] [Thread-126747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] client lang: <none>
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] server lang: <none>
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] kex follows: False
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] Compression: none
2025-12-04T00:51:38.991 [DEBUG] [Thread-126747] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:51:39.047 [DEBUG] [Thread-126747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:51:39.047 [DEBUG] [Thread-126747] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:51:39.047 [DEBUG] [Thread-126747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:51:39.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:51:39.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:51:39.104 [DEBUG] [Thread-126747] [transport.py] [_log()] userauth is OK
2025-12-04T00:51:39.104 [DEBUG] [Thread-126747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:51:39.104 [DEBUG] [Thread-126747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:51:39.104 [DEBUG] [Thread-126747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:51:39.104 [DEBUG] [Thread-126747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:51:39.117 [INFO] [Thread-126747] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:51:39.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:51:39.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:51:40.004 [DEBUG] [Thread-126747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:51:40.004 [DEBUG] [Thread-126747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:51:40.052 [DEBUG] [Thread-126747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:51:40.052 [DEBUG] [Thread-126747] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:51:40.060 [DEBUG] [Thread-126747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:51:40.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:51:40.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:51:40.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:51:40.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:51:40.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:51:40.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:51:40.092 [DEBUG] [Thread-126747] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:51:42.384 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:42.847 [DEBUG] [Thread-126749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:51:57.890 [DEBUG] [Thread-126750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:02.804 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:10.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:52:10.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:52:10.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:52:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 51, 58), 7.2, 65.27, 0.0, 25.41, 9.05, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:52:10.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:51:58
2025-12-04T00:52:10.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:52:11.047 [DEBUG] [Thread-126751] [transport.py] [_log()] starting thread (client mode): 0xa519a170
2025-12-04T00:52:11.047 [DEBUG] [Thread-126751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:52:11.069 [DEBUG] [Thread-126751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:52:11.069 [INFO] [Thread-126751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] client lang: <none>
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] server lang: <none>
2025-12-04T00:52:11.072 [DEBUG] [Thread-126751] [transport.py] [_log()] kex follows: False
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] Compression: none
2025-12-04T00:52:11.073 [DEBUG] [Thread-126751] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:52:11.089 [DEBUG] [Thread-126751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:52:11.089 [DEBUG] [Thread-126751] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:52:11.090 [DEBUG] [Thread-126751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:52:11.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:52:11.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:52:11.092 [DEBUG] [Thread-126751] [transport.py] [_log()] userauth is OK
2025-12-04T00:52:11.092 [DEBUG] [Thread-126751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:52:11.092 [DEBUG] [Thread-126751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:52:11.092 [DEBUG] [Thread-126751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:52:11.092 [DEBUG] [Thread-126751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:52:11.116 [INFO] [Thread-126751] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:52:11.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:52:11.850 [DEBUG] [Thread-126751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:52:11.850 [DEBUG] [Thread-126751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:52:11.850 [DEBUG] [Thread-126751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:52:11.891 [DEBUG] [Thread-126751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:52:11.891 [DEBUG] [Thread-126751] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:52:11.894 [DEBUG] [Thread-126751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:52:11.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:52:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:52:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:52:11.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:52:11.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:52:11.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:52:11.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:52:11.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:52:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:52:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.952477 -999.00  +13.80  22.70     52   +4.20 1 1 1 1 1     0    0 9.30 -21.32 ZNESW 19.1 22.7 144.2 27.7 14.2 -24.7 14.1 -24.3 13.8 -22.7 14.2 -23.6
2025-12-04T00:52:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:52:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:52:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.952477
2025-12-04T00:52:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:52:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:52:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:52:11.920 [DEBUG] [Thread-126751] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:52:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:52:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:52:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:51:58', tmtdew=7.2, humidity=65.27, cloud=0.0, wind=25.41, temperature=9.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:51:58', seeing=1.23, atlas_timestamp='2025-12-03T22:51:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:50:00')
2025-12-04T00:52:12.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:52:12.016 [DEBUG] [Thread-126754] [transport.py] [_log()] starting thread (client mode): 0xa519bc40
2025-12-04T00:52:12.016 [DEBUG] [Thread-126754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:52:12.031 [DEBUG] [Thread-126754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:52:12.031 [INFO] [Thread-126754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:52:12.038 [DEBUG] [Thread-126754] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:52:12.038 [DEBUG] [Thread-126754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:52:12.038 [DEBUG] [Thread-126754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:52:12.038 [DEBUG] [Thread-126754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] client lang: <none>
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] server lang: <none>
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] kex follows: False
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] Compression: none
2025-12-04T00:52:12.039 [DEBUG] [Thread-126754] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:52:12.099 [DEBUG] [Thread-126754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:52:12.100 [DEBUG] [Thread-126754] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:52:12.100 [DEBUG] [Thread-126754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:52:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:52:12.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:52:12.156 [DEBUG] [Thread-126754] [transport.py] [_log()] userauth is OK
2025-12-04T00:52:12.156 [DEBUG] [Thread-126754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:52:12.156 [DEBUG] [Thread-126754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:52:12.156 [DEBUG] [Thread-126754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:52:12.156 [DEBUG] [Thread-126754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:52:12.175 [INFO] [Thread-126754] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:52:12.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:52:12.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:52:12.921 [DEBUG] [Thread-126756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:12.997 [DEBUG] [Thread-126754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:52:12.997 [DEBUG] [Thread-126754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:52:13.045 [DEBUG] [Thread-126754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:52:13.045 [DEBUG] [Thread-126754] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:52:13.054 [DEBUG] [Thread-126754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:52:13.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:52:13.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:52:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:52:13.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:52:13.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:52:13.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:52:13.088 [DEBUG] [Thread-126754] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:52:23.268 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:25.490 [DEBUG] [Thread-126757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:27.964 [DEBUG] [Thread-126758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:32.836 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:32.837 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:42.993 [DEBUG] [Thread-126759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:43.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:52:43.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:52:43.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:52:43.729 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:52:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 52, 30), 7.21, 65.22, 0.0, 24.24, 9.08, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:52:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:52:30
2025-12-04T00:52:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:52:44.061 [DEBUG] [Thread-126760] [transport.py] [_log()] starting thread (client mode): 0xa2785090
2025-12-04T00:52:44.063 [DEBUG] [Thread-126760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:52:44.082 [DEBUG] [Thread-126760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:52:44.082 [INFO] [Thread-126760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:52:44.085 [DEBUG] [Thread-126760] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] client lang: <none>
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] server lang: <none>
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] kex follows: False
2025-12-04T00:52:44.086 [DEBUG] [Thread-126760] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] Compression: none
2025-12-04T00:52:44.087 [DEBUG] [Thread-126760] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:52:44.096 [DEBUG] [Thread-126760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:52:44.097 [DEBUG] [Thread-126760] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:52:44.097 [DEBUG] [Thread-126760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:52:44.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:52:44.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:52:44.099 [DEBUG] [Thread-126760] [transport.py] [_log()] userauth is OK
2025-12-04T00:52:44.099 [DEBUG] [Thread-126760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:52:44.099 [DEBUG] [Thread-126760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:52:44.100 [DEBUG] [Thread-126760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:52:44.100 [DEBUG] [Thread-126760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:52:44.135 [INFO] [Thread-126760] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:52:44.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:52:44.796 [DEBUG] [Thread-126760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:52:44.796 [DEBUG] [Thread-126760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:52:44.796 [DEBUG] [Thread-126760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:52:44.837 [DEBUG] [Thread-126760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:52:44.837 [DEBUG] [Thread-126760] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:52:44.840 [DEBUG] [Thread-126760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:52:44.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:52:44.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:52:44.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:52:44.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:52:44.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:52:44.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:52:44.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.952824 -999.00  +13.80  15.54     52   +4.20 1 1 1 1 1     0    0 9.19 -21.29 ZNESW 20.6 15.5 146.0 25.9 14.2 -24.7 14.1 -24.3 13.8 -22.7 14.2 -23.5
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:52:44.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.952824
2025-12-04T00:52:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:52:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:52:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:52:44.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:52:44.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:52:44.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:52:30', tmtdew=7.21, humidity=65.22, cloud=0.0, wind=24.24, temperature=9.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:52:30', seeing=1.23, atlas_timestamp='2025-12-03T22:52:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:50:00')
2025-12-04T00:52:44.865 [DEBUG] [Thread-126760] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:52:44.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:52:44.961 [DEBUG] [Thread-126763] [transport.py] [_log()] starting thread (client mode): 0xa277ac50
2025-12-04T00:52:44.961 [DEBUG] [Thread-126763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:52:44.976 [DEBUG] [Thread-126763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:52:44.976 [INFO] [Thread-126763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:52:44.984 [DEBUG] [Thread-126763] [transport.py] [_log()] client lang: <none>
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] server lang: <none>
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] kex follows: False
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] Compression: none
2025-12-04T00:52:44.985 [DEBUG] [Thread-126763] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:52:45.043 [DEBUG] [Thread-126763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:52:45.043 [DEBUG] [Thread-126763] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:52:45.044 [DEBUG] [Thread-126763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:52:45.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:52:45.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:52:45.104 [DEBUG] [Thread-126763] [transport.py] [_log()] userauth is OK
2025-12-04T00:52:45.105 [DEBUG] [Thread-126763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:52:45.105 [DEBUG] [Thread-126763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:52:45.105 [DEBUG] [Thread-126763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:52:45.105 [DEBUG] [Thread-126763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:52:45.123 [INFO] [Thread-126763] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:52:45.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:52:45.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:52:45.961 [DEBUG] [Thread-126763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:52:45.961 [DEBUG] [Thread-126763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:52:46.009 [DEBUG] [Thread-126763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:52:46.009 [DEBUG] [Thread-126763] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:52:46.019 [DEBUG] [Thread-126763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:52:46.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:52:46.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:52:46.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:52:46.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:52:46.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:52:46.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:52:46.058 [DEBUG] [Thread-126763] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:52:58.023 [DEBUG] [Thread-126765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:04.134 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:13.054 [DEBUG] [Thread-126766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:16.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:53:16.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:53:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:53:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 53, 2), 7.21, 65.22, 0.0, 24.03, 9.03, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:53:16.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:53:02
2025-12-04T00:53:16.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:53:17.033 [DEBUG] [Thread-126767] [transport.py] [_log()] starting thread (client mode): 0xa27091b0
2025-12-04T00:53:17.033 [DEBUG] [Thread-126767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:53:17.055 [DEBUG] [Thread-126767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:53:17.055 [INFO] [Thread-126767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:53:17.058 [DEBUG] [Thread-126767] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:53:17.058 [DEBUG] [Thread-126767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:53:17.058 [DEBUG] [Thread-126767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:53:17.058 [DEBUG] [Thread-126767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:17.058 [DEBUG] [Thread-126767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] client lang: <none>
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] server lang: <none>
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] kex follows: False
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:53:17.059 [DEBUG] [Thread-126767] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:53:17.060 [DEBUG] [Thread-126767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:53:17.060 [DEBUG] [Thread-126767] [transport.py] [_log()] Compression: none
2025-12-04T00:53:17.060 [DEBUG] [Thread-126767] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:53:17.078 [DEBUG] [Thread-126767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:53:17.079 [DEBUG] [Thread-126767] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:53:17.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:53:17.080 [DEBUG] [Thread-126767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:53:17.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:53:17.082 [DEBUG] [Thread-126767] [transport.py] [_log()] userauth is OK
2025-12-04T00:53:17.082 [DEBUG] [Thread-126767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:53:17.082 [DEBUG] [Thread-126767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:53:17.082 [DEBUG] [Thread-126767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:53:17.082 [DEBUG] [Thread-126767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:53:17.106 [INFO] [Thread-126767] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:53:17.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:53:17.727 [DEBUG] [Thread-126767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:53:17.728 [DEBUG] [Thread-126767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:53:17.728 [DEBUG] [Thread-126767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:53:17.769 [DEBUG] [Thread-126767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:53:17.769 [DEBUG] [Thread-126767] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:53:17.772 [DEBUG] [Thread-126767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:53:17.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:53:17.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:53:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:53:17.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:53:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:53:17.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:53:17.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:53:17.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:53:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:53:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.953172 -999.00  +13.80  17.65     52   +4.20 1 1 1 1 1     0    0 9.34 -22.02 ZNESW 19.9 17.6 149.6 27.4 14.2 -24.7 14.1 -24.4 13.8 -22.5 14.2 -23.6
2025-12-04T00:53:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:53:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:53:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.953172
2025-12-04T00:53:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:53:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:53:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:53:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:53:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:53:17.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:53:02', tmtdew=7.21, humidity=65.22, cloud=0.0, wind=24.03, temperature=9.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:53:02', seeing=1.5, atlas_timestamp='2025-12-03T22:52:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:50:00')
2025-12-04T00:53:17.797 [DEBUG] [Thread-126767] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:53:17.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:53:17.902 [DEBUG] [Thread-126770] [transport.py] [_log()] starting thread (client mode): 0xa270b400
2025-12-04T00:53:17.902 [DEBUG] [Thread-126770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:53:17.917 [DEBUG] [Thread-126770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:53:17.918 [INFO] [Thread-126770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:53:17.925 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:53:17.925 [DEBUG] [Thread-126770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] client lang: <none>
2025-12-04T00:53:17.926 [DEBUG] [Thread-126770] [transport.py] [_log()] server lang: <none>
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] kex follows: False
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] Compression: none
2025-12-04T00:53:17.927 [DEBUG] [Thread-126770] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:53:17.984 [DEBUG] [Thread-126770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:53:17.985 [DEBUG] [Thread-126770] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:53:17.986 [DEBUG] [Thread-126770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:53:17.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:53:17.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:53:18.040 [DEBUG] [Thread-126770] [transport.py] [_log()] userauth is OK
2025-12-04T00:53:18.040 [DEBUG] [Thread-126770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:53:18.040 [DEBUG] [Thread-126770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:53:18.041 [DEBUG] [Thread-126770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:53:18.041 [DEBUG] [Thread-126770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:53:18.063 [INFO] [Thread-126770] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:53:18.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:53:18.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:53:18.861 [DEBUG] [Thread-126770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:53:18.861 [DEBUG] [Thread-126770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:53:18.909 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:53:18.909 [DEBUG] [Thread-126770] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:53:18.918 [DEBUG] [Thread-126770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:53:18.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:53:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:53:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:53:18.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:53:18.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:53:18.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:53:18.953 [DEBUG] [Thread-126770] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:53:24.527 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:25.560 [DEBUG] [Thread-126772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:28.089 [DEBUG] [Thread-126773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:33.035 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:33.036 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:43.133 [DEBUG] [Thread-126774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:44.940 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:53:48.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:53:48.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:53:48.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:53:49.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 53, 34), 7.16, 65.25, 0.0, 26.26, 8.95, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:53:49.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:53:34
2025-12-04T00:53:49.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:53:49.926 [DEBUG] [Thread-126775] [transport.py] [_log()] starting thread (client mode): 0xa2779e70
2025-12-04T00:53:49.926 [DEBUG] [Thread-126775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:53:49.946 [DEBUG] [Thread-126775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:53:49.946 [INFO] [Thread-126775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:53:49.949 [DEBUG] [Thread-126775] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] client lang: <none>
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] server lang: <none>
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] kex follows: False
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:53:49.950 [DEBUG] [Thread-126775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:53:49.951 [DEBUG] [Thread-126775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:53:49.951 [DEBUG] [Thread-126775] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:53:49.951 [DEBUG] [Thread-126775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:53:49.951 [DEBUG] [Thread-126775] [transport.py] [_log()] Compression: none
2025-12-04T00:53:49.951 [DEBUG] [Thread-126775] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:53:49.966 [DEBUG] [Thread-126775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:53:49.967 [DEBUG] [Thread-126775] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:53:49.967 [DEBUG] [Thread-126775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:53:49.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:53:49.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:53:49.969 [DEBUG] [Thread-126775] [transport.py] [_log()] userauth is OK
2025-12-04T00:53:49.969 [DEBUG] [Thread-126775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:53:49.969 [DEBUG] [Thread-126775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:53:49.969 [DEBUG] [Thread-126775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:53:49.970 [DEBUG] [Thread-126775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:53:49.993 [INFO] [Thread-126775] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:53:49.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:53:50.635 [DEBUG] [Thread-126775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:53:50.635 [DEBUG] [Thread-126775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:53:50.636 [DEBUG] [Thread-126775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:53:50.676 [DEBUG] [Thread-126775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:53:50.677 [DEBUG] [Thread-126775] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:53:50.679 [DEBUG] [Thread-126775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:53:50.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:53:50.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:53:50.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:53:50.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:53:50.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:53:50.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:53:50.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:53:50.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:53:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:53:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.953519 -999.00  +13.80  25.37     52   +4.30 1 1 1 1 1     0    0 9.03 -22.51 ZNESW 23.6 25.4 146.6 28.9 14.2 -24.7 14.0 -24.2 13.8 -22.8 14.2 -23.6
2025-12-04T00:53:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:53:50.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:53:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.953519
2025-12-04T00:53:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:53:50.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:53:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:53:50.704 [DEBUG] [Thread-126775] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:53:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:53:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:53:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:53:34', tmtdew=7.16, humidity=65.25, cloud=0.0, wind=26.26, temperature=8.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:53:34', seeing=1.6, atlas_timestamp='2025-12-03T22:53:04.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:50:00')
2025-12-04T00:53:50.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:53:50.798 [DEBUG] [Thread-126778] [transport.py] [_log()] starting thread (client mode): 0xa277be20
2025-12-04T00:53:50.798 [DEBUG] [Thread-126778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:53:50.812 [DEBUG] [Thread-126778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:53:50.812 [INFO] [Thread-126778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:53:50.819 [DEBUG] [Thread-126778] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:53:50.820 [DEBUG] [Thread-126778] [transport.py] [_log()] client lang: <none>
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] server lang: <none>
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] kex follows: False
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] Compression: none
2025-12-04T00:53:50.821 [DEBUG] [Thread-126778] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:53:50.879 [DEBUG] [Thread-126778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:53:50.879 [DEBUG] [Thread-126778] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:53:50.880 [DEBUG] [Thread-126778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:53:50.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:53:50.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:53:50.936 [DEBUG] [Thread-126778] [transport.py] [_log()] userauth is OK
2025-12-04T00:53:50.936 [DEBUG] [Thread-126778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:53:50.936 [DEBUG] [Thread-126778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:53:50.936 [DEBUG] [Thread-126778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:53:50.936 [DEBUG] [Thread-126778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:53:50.955 [INFO] [Thread-126778] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:53:50.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:53:50.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:53:51.793 [DEBUG] [Thread-126778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:53:51.793 [DEBUG] [Thread-126778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:53:51.842 [DEBUG] [Thread-126778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:53:51.842 [DEBUG] [Thread-126778] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:53:51.851 [DEBUG] [Thread-126778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:53:51.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:53:51.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:53:51.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:53:51.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:53:51.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:53:51.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:53:51.885 [DEBUG] [Thread-126778] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:53:58.162 [DEBUG] [Thread-126780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:05.318 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:13.206 [DEBUG] [Thread-126781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:21.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:54:21.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:54:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:54:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 54, 6), 7.14, 65.35, 0.0, 26.77, 9.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:54:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:54:06
2025-12-04T00:54:22.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:54:22.867 [DEBUG] [Thread-126782] [transport.py] [_log()] starting thread (client mode): 0xa2708640
2025-12-04T00:54:22.867 [DEBUG] [Thread-126782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:54:22.888 [DEBUG] [Thread-126782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:54:22.888 [INFO] [Thread-126782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] client lang: <none>
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] server lang: <none>
2025-12-04T00:54:22.891 [DEBUG] [Thread-126782] [transport.py] [_log()] kex follows: False
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] Compression: none
2025-12-04T00:54:22.892 [DEBUG] [Thread-126782] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:54:22.908 [DEBUG] [Thread-126782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:54:22.908 [DEBUG] [Thread-126782] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:54:22.909 [DEBUG] [Thread-126782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:54:22.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:54:22.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:54:22.911 [DEBUG] [Thread-126782] [transport.py] [_log()] userauth is OK
2025-12-04T00:54:22.911 [DEBUG] [Thread-126782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:54:22.911 [DEBUG] [Thread-126782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:54:22.911 [DEBUG] [Thread-126782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:54:22.912 [DEBUG] [Thread-126782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:54:22.943 [INFO] [Thread-126782] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:54:22.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:54:23.593 [DEBUG] [Thread-126782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:54:23.594 [DEBUG] [Thread-126782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:54:23.594 [DEBUG] [Thread-126782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:54:23.635 [DEBUG] [Thread-126782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:54:23.635 [DEBUG] [Thread-126782] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:54:23.638 [DEBUG] [Thread-126782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:54:23.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:54:23.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:54:23.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:54:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:54:23.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:54:23.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:54:23.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.953866 -999.00  +13.80  15.14     52   +4.30 1 1 1 1 1     0    0 9.05 -22.98 ZNESW 14.5 15.1 150.4 25.9 14.2 -24.7 14.0 -24.1 13.9 -22.7 14.2 -23.6
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:54:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.953866
2025-12-04T00:54:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:54:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:54:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:54:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:54:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:54:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:54:06', tmtdew=7.14, humidity=65.35, cloud=0.0, wind=26.77, temperature=9.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:54:06', seeing=1.73, atlas_timestamp='2025-12-03T22:53:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:54:23.663 [DEBUG] [Thread-126782] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:54:23.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:54:23.760 [DEBUG] [Thread-126785] [transport.py] [_log()] starting thread (client mode): 0xa277be20
2025-12-04T00:54:23.760 [DEBUG] [Thread-126785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:54:23.774 [DEBUG] [Thread-126785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:54:23.774 [INFO] [Thread-126785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:54:23.781 [DEBUG] [Thread-126785] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:23.782 [DEBUG] [Thread-126785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] client lang: <none>
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] server lang: <none>
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] kex follows: False
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:54:23.783 [DEBUG] [Thread-126785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:54:23.784 [DEBUG] [Thread-126785] [transport.py] [_log()] Compression: none
2025-12-04T00:54:23.784 [DEBUG] [Thread-126785] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:54:23.840 [DEBUG] [Thread-126785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:54:23.840 [DEBUG] [Thread-126785] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:54:23.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:54:23.841 [DEBUG] [Thread-126785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:54:23.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:54:23.895 [DEBUG] [Thread-126785] [transport.py] [_log()] userauth is OK
2025-12-04T00:54:23.896 [DEBUG] [Thread-126785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:54:23.896 [DEBUG] [Thread-126785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:54:23.896 [DEBUG] [Thread-126785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:54:23.896 [DEBUG] [Thread-126785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:54:23.918 [INFO] [Thread-126785] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:54:23.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:54:23.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:54:24.725 [DEBUG] [Thread-126785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:54:24.725 [DEBUG] [Thread-126785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:54:24.773 [DEBUG] [Thread-126785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:54:24.774 [DEBUG] [Thread-126785] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:54:24.782 [DEBUG] [Thread-126785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:54:24.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:54:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:54:24.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:54:24.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:54:24.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:54:24.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:54:24.816 [DEBUG] [Thread-126785] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:54:25.625 [DEBUG] [Thread-126787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:25.698 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:28.229 [DEBUG] [Thread-126788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:33.238 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:33.239 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:43.282 [DEBUG] [Thread-126789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:46.079 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:54:54.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:54:54.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:54:54.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:54:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 54, 38), 7.18, 65.31, 0.0, 25.74, 9.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:54:55.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:54:38
2025-12-04T00:54:55.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:54:55.764 [DEBUG] [Thread-126790] [transport.py] [_log()] starting thread (client mode): 0xa7bd0ee0
2025-12-04T00:54:55.764 [DEBUG] [Thread-126790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:54:55.784 [DEBUG] [Thread-126790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:54:55.784 [INFO] [Thread-126790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:54:55.787 [DEBUG] [Thread-126790] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:54:55.787 [DEBUG] [Thread-126790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:54:55.787 [DEBUG] [Thread-126790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:54:55.787 [DEBUG] [Thread-126790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:55.787 [DEBUG] [Thread-126790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] client lang: <none>
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] server lang: <none>
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] kex follows: False
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] Compression: none
2025-12-04T00:54:55.788 [DEBUG] [Thread-126790] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:54:55.802 [DEBUG] [Thread-126790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:54:55.802 [DEBUG] [Thread-126790] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:54:55.802 [DEBUG] [Thread-126790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:54:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:54:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:54:55.803 [DEBUG] [Thread-126790] [transport.py] [_log()] userauth is OK
2025-12-04T00:54:55.803 [DEBUG] [Thread-126790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:54:55.803 [DEBUG] [Thread-126790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:54:55.803 [DEBUG] [Thread-126790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:54:55.803 [DEBUG] [Thread-126790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:54:55.818 [INFO] [Thread-126790] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:54:55.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:54:56.436 [DEBUG] [Thread-126790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:54:56.436 [DEBUG] [Thread-126790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:54:56.436 [DEBUG] [Thread-126790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:54:56.477 [DEBUG] [Thread-126790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:54:56.477 [DEBUG] [Thread-126790] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:54:56.479 [DEBUG] [Thread-126790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:54:56.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:54:56.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:54:56.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:54:56.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:54:56.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:54:56.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:54:56.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.954213 -999.00  +13.80  17.63     52   +4.20 1 1 1 1 1     0    0 9.05 -22.26 ZNESW 17.6 17.6 145.0 29.3 14.1 -24.9 14.1 -24.2 13.8 -22.8 14.1 -23.7
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:54:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.954213
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:54:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:54:38', tmtdew=7.18, humidity=65.31, cloud=0.0, wind=25.74, temperature=9.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:54:38', seeing=1.73, atlas_timestamp='2025-12-03T22:54:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:54:56.498 [DEBUG] [Thread-126790] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:54:56.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:54:56.583 [DEBUG] [Thread-126793] [transport.py] [_log()] starting thread (client mode): 0xa270afe0
2025-12-04T00:54:56.583 [DEBUG] [Thread-126793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:54:56.598 [DEBUG] [Thread-126793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:54:56.598 [INFO] [Thread-126793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:54:56.605 [DEBUG] [Thread-126793] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] client lang: <none>
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] server lang: <none>
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] kex follows: False
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] Compression: none
2025-12-04T00:54:56.606 [DEBUG] [Thread-126793] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:54:56.662 [DEBUG] [Thread-126793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:54:56.662 [DEBUG] [Thread-126793] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:54:56.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:54:56.662 [DEBUG] [Thread-126793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:54:56.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:54:56.719 [DEBUG] [Thread-126793] [transport.py] [_log()] userauth is OK
2025-12-04T00:54:56.719 [DEBUG] [Thread-126793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:54:56.719 [DEBUG] [Thread-126793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:54:56.719 [DEBUG] [Thread-126793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:54:56.719 [DEBUG] [Thread-126793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:54:56.733 [INFO] [Thread-126793] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:54:56.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:54:56.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:54:57.531 [DEBUG] [Thread-126793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:54:57.532 [DEBUG] [Thread-126793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:54:57.580 [DEBUG] [Thread-126793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:54:57.580 [DEBUG] [Thread-126793] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:54:57.588 [DEBUG] [Thread-126793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:54:57.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:54:57.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:54:57.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:54:57.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:54:57.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:54:57.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:54:57.625 [DEBUG] [Thread-126793] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:54:58.311 [DEBUG] [Thread-126795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:06.462 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:13.357 [DEBUG] [Thread-126796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:25.712 [DEBUG] [Thread-126797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:27.012 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:27.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:55:27.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:55:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:55:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 55, 10), 7.19, 65.3, 0.0, 25.76, 9.07, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:55:28.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:55:10
2025-12-04T00:55:28.384 [DEBUG] [Thread-126798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:28.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:55:28.597 [DEBUG] [Thread-126799] [transport.py] [_log()] starting thread (client mode): 0xa7bd2740
2025-12-04T00:55:28.598 [DEBUG] [Thread-126799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:55:28.619 [DEBUG] [Thread-126799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:55:28.619 [INFO] [Thread-126799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] client lang: <none>
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] server lang: <none>
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] kex follows: False
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:55:28.622 [DEBUG] [Thread-126799] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:55:28.623 [DEBUG] [Thread-126799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:55:28.623 [DEBUG] [Thread-126799] [transport.py] [_log()] Compression: none
2025-12-04T00:55:28.623 [DEBUG] [Thread-126799] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:55:28.639 [DEBUG] [Thread-126799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:55:28.640 [DEBUG] [Thread-126799] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:55:28.640 [DEBUG] [Thread-126799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:55:28.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:55:28.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:55:28.642 [DEBUG] [Thread-126799] [transport.py] [_log()] userauth is OK
2025-12-04T00:55:28.642 [DEBUG] [Thread-126799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:55:28.642 [DEBUG] [Thread-126799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:55:28.642 [DEBUG] [Thread-126799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:55:28.642 [DEBUG] [Thread-126799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:55:28.678 [INFO] [Thread-126799] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:55:28.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:55:29.307 [DEBUG] [Thread-126799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:55:29.307 [DEBUG] [Thread-126799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:55:29.307 [DEBUG] [Thread-126799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:55:29.348 [DEBUG] [Thread-126799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:55:29.348 [DEBUG] [Thread-126799] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:55:29.351 [DEBUG] [Thread-126799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:55:29.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:55:29.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:55:29.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:55:29.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:55:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:55:29.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:55:29.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:55:29.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:55:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:55:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.954561 -999.00  +13.70  13.42     52   +4.20 1 1 1 1 1     0    0 8.99 -26.31 ZNESW 17.7 13.4 156.0 18.6 14.1 -24.8 14.0 -24.2 13.8 -22.8 14.2 -23.7
2025-12-04T00:55:29.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:55:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:55:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.954561
2025-12-04T00:55:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:55:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:55:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:55:29.375 [DEBUG] [Thread-126799] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:55:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:55:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:55:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:55:10', tmtdew=7.19, humidity=65.3, cloud=0.0, wind=25.76, temperature=9.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:55:10', seeing=1.63, atlas_timestamp='2025-12-03T22:54:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:55:29.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:55:29.474 [DEBUG] [Thread-126802] [transport.py] [_log()] starting thread (client mode): 0xa7bd28c0
2025-12-04T00:55:29.474 [DEBUG] [Thread-126802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:55:29.489 [DEBUG] [Thread-126802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:55:29.489 [INFO] [Thread-126802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:55:29.498 [DEBUG] [Thread-126802] [transport.py] [_log()] client lang: <none>
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] server lang: <none>
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] kex follows: False
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] Compression: none
2025-12-04T00:55:29.499 [DEBUG] [Thread-126802] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:55:29.555 [DEBUG] [Thread-126802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:55:29.556 [DEBUG] [Thread-126802] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:55:29.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:55:29.556 [DEBUG] [Thread-126802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:55:29.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:55:29.611 [DEBUG] [Thread-126802] [transport.py] [_log()] userauth is OK
2025-12-04T00:55:29.611 [DEBUG] [Thread-126802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:55:29.611 [DEBUG] [Thread-126802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:55:29.612 [DEBUG] [Thread-126802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:55:29.612 [DEBUG] [Thread-126802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:55:29.630 [INFO] [Thread-126802] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:55:29.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:55:29.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:55:30.469 [DEBUG] [Thread-126802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:55:30.469 [DEBUG] [Thread-126802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:55:30.516 [DEBUG] [Thread-126802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:55:30.517 [DEBUG] [Thread-126802] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:55:30.525 [DEBUG] [Thread-126802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:55:30.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:55:30.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:55:30.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:55:30.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:55:30.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:55:30.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:55:30.556 [DEBUG] [Thread-126802] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:55:33.445 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:33.446 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:43.408 [DEBUG] [Thread-126804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:47.457 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:55:58.441 [DEBUG] [Thread-126805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:56:00.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:56:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:56:01.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 55, 42), 7.15, 65.3, 0.0, 29.2, 9.03, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:56:01.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:55:42
2025-12-04T00:56:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:56:01.539 [DEBUG] [Thread-126806] [transport.py] [_log()] starting thread (client mode): 0xa270a590
2025-12-04T00:56:01.539 [DEBUG] [Thread-126806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:56:01.561 [DEBUG] [Thread-126806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:56:01.561 [INFO] [Thread-126806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:56:01.564 [DEBUG] [Thread-126806] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:56:01.564 [DEBUG] [Thread-126806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:56:01.564 [DEBUG] [Thread-126806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:56:01.564 [DEBUG] [Thread-126806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:01.564 [DEBUG] [Thread-126806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] client lang: <none>
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] server lang: <none>
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] kex follows: False
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:56:01.565 [DEBUG] [Thread-126806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:56:01.566 [DEBUG] [Thread-126806] [transport.py] [_log()] Compression: none
2025-12-04T00:56:01.566 [DEBUG] [Thread-126806] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:56:01.584 [DEBUG] [Thread-126806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:56:01.584 [DEBUG] [Thread-126806] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:56:01.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:56:01.585 [DEBUG] [Thread-126806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:56:01.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:56:01.587 [DEBUG] [Thread-126806] [transport.py] [_log()] userauth is OK
2025-12-04T00:56:01.587 [DEBUG] [Thread-126806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:56:01.588 [DEBUG] [Thread-126806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:56:01.588 [DEBUG] [Thread-126806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:56:01.588 [DEBUG] [Thread-126806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:56:01.624 [INFO] [Thread-126806] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:56:01.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:56:02.244 [DEBUG] [Thread-126806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:56:02.245 [DEBUG] [Thread-126806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:56:02.245 [DEBUG] [Thread-126806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:56:02.285 [DEBUG] [Thread-126806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:56:02.285 [DEBUG] [Thread-126806] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:56:02.288 [DEBUG] [Thread-126806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:56:02.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:56:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:56:02.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:56:02.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:56:02.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:56:02.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:56:02.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:56:02.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.955255 -999.00  +13.80  23.49     52   +4.30 1 1 1 1 1     0    0 9.16 -26.37 ZNESW 23.7 23.5 141.4 27.6 14.1 -24.8 14.1 -24.3 13.8 -22.8 14.2 -23.4
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.955255
2025-12-04T00:56:02.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:56:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:56:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:56:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:56:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:56:02.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:55:42', tmtdew=7.15, humidity=65.3, cloud=0.0, wind=29.2, temperature=9.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:55:42', seeing=1.38, atlas_timestamp='2025-12-03T22:55:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:56:02.310 [DEBUG] [Thread-126806] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:56:02.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:56:02.406 [DEBUG] [Thread-126809] [transport.py] [_log()] starting thread (client mode): 0xa27097b0
2025-12-04T00:56:02.406 [DEBUG] [Thread-126809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:56:02.420 [DEBUG] [Thread-126809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:56:02.420 [INFO] [Thread-126809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:56:02.427 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] client lang: <none>
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] server lang: <none>
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] kex follows: False
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] Compression: none
2025-12-04T00:56:02.428 [DEBUG] [Thread-126809] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:56:02.486 [DEBUG] [Thread-126809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:56:02.487 [DEBUG] [Thread-126809] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:56:02.487 [DEBUG] [Thread-126809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:56:02.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:56:02.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:56:02.543 [DEBUG] [Thread-126809] [transport.py] [_log()] userauth is OK
2025-12-04T00:56:02.543 [DEBUG] [Thread-126809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:56:02.543 [DEBUG] [Thread-126809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:56:02.543 [DEBUG] [Thread-126809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:56:02.543 [DEBUG] [Thread-126809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:56:02.561 [INFO] [Thread-126809] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:56:02.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:56:02.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:56:03.369 [DEBUG] [Thread-126809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:56:03.369 [DEBUG] [Thread-126809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:56:03.417 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:56:03.418 [DEBUG] [Thread-126809] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:56:03.426 [DEBUG] [Thread-126809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:56:03.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:56:03.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:56:03.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:56:03.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:56:03.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:56:03.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:56:03.464 [DEBUG] [Thread-126809] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:56:07.873 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:13.468 [DEBUG] [Thread-126811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:25.772 [DEBUG] [Thread-126812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:28.302 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:28.505 [DEBUG] [Thread-126813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:33.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:56:33.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:56:33.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:56:33.646 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:33.646 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 56, 14), 7.14, 65.32, 0.0, 29.24, 9.04, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:56:34.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:56:14
2025-12-04T00:56:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:56:34.436 [DEBUG] [Thread-126814] [transport.py] [_log()] starting thread (client mode): 0x9fd23b20
2025-12-04T00:56:34.436 [DEBUG] [Thread-126814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:56:34.456 [DEBUG] [Thread-126814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:56:34.456 [INFO] [Thread-126814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] client lang: <none>
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] server lang: <none>
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] kex follows: False
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:56:34.459 [DEBUG] [Thread-126814] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:56:34.460 [DEBUG] [Thread-126814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:56:34.460 [DEBUG] [Thread-126814] [transport.py] [_log()] Compression: none
2025-12-04T00:56:34.460 [DEBUG] [Thread-126814] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:56:34.476 [DEBUG] [Thread-126814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:56:34.477 [DEBUG] [Thread-126814] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:56:34.477 [DEBUG] [Thread-126814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:56:34.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:56:34.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:56:34.479 [DEBUG] [Thread-126814] [transport.py] [_log()] userauth is OK
2025-12-04T00:56:34.480 [DEBUG] [Thread-126814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:56:34.480 [DEBUG] [Thread-126814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:56:34.480 [DEBUG] [Thread-126814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:56:34.480 [DEBUG] [Thread-126814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:56:34.504 [INFO] [Thread-126814] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:56:34.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:56:35.135 [DEBUG] [Thread-126814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:56:35.135 [DEBUG] [Thread-126814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:56:35.136 [DEBUG] [Thread-126814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:56:35.176 [DEBUG] [Thread-126814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:56:35.176 [DEBUG] [Thread-126814] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:56:35.179 [DEBUG] [Thread-126814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:56:35.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:56:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:56:35.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:56:35.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:56:35.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:56:35.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:56:35.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:56:35.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:56:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:56:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.955602 -999.00  +13.80  23.88     52   +4.30 1 1 1 1 1     0    0 9.16 -26.78 ZNESW 18.2 23.9 137.8 27.1 14.2 -24.7 14.0 -24.3 13.8 -22.6 14.2 -23.6
2025-12-04T00:56:35.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:56:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:56:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.955602
2025-12-04T00:56:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:56:35.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:56:35.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:56:35.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:56:35.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:56:35.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:56:14', tmtdew=7.14, humidity=65.32, cloud=0.0, wind=29.24, temperature=9.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:56:14', seeing=1.25, atlas_timestamp='2025-12-03T22:56:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:56:35.202 [DEBUG] [Thread-126814] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:56:35.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:56:35.304 [DEBUG] [Thread-126817] [transport.py] [_log()] starting thread (client mode): 0xa519aad0
2025-12-04T00:56:35.304 [DEBUG] [Thread-126817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:56:35.319 [DEBUG] [Thread-126817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:56:35.319 [INFO] [Thread-126817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:56:35.326 [DEBUG] [Thread-126817] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:56:35.326 [DEBUG] [Thread-126817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] client lang: <none>
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] server lang: <none>
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] kex follows: False
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] Compression: none
2025-12-04T00:56:35.327 [DEBUG] [Thread-126817] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:56:35.383 [DEBUG] [Thread-126817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:56:35.383 [DEBUG] [Thread-126817] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:56:35.384 [DEBUG] [Thread-126817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:56:35.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:56:35.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:56:35.446 [DEBUG] [Thread-126817] [transport.py] [_log()] userauth is OK
2025-12-04T00:56:35.446 [DEBUG] [Thread-126817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:56:35.446 [DEBUG] [Thread-126817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:56:35.446 [DEBUG] [Thread-126817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:56:35.446 [DEBUG] [Thread-126817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:56:35.467 [INFO] [Thread-126817] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:56:35.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:56:35.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:56:36.287 [DEBUG] [Thread-126817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:56:36.287 [DEBUG] [Thread-126817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:56:36.335 [DEBUG] [Thread-126817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:56:36.335 [DEBUG] [Thread-126817] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:56:36.344 [DEBUG] [Thread-126817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:56:36.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:56:36.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:56:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:56:36.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:56:36.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:56:36.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:56:36.378 [DEBUG] [Thread-126817] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:56:43.536 [DEBUG] [Thread-126819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:48.763 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:56:58.581 [DEBUG] [Thread-126820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:57:06.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:57:06.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:57:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 56, 46), 7.18, 65.32, 0.0, 24.49, 9.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:57:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:56:46
2025-12-04T00:57:07.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:57:07.334 [DEBUG] [Thread-126821] [transport.py] [_log()] starting thread (client mode): 0xa270b010
2025-12-04T00:57:07.334 [DEBUG] [Thread-126821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:57:07.354 [DEBUG] [Thread-126821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:57:07.354 [INFO] [Thread-126821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] client lang: <none>
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] server lang: <none>
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] kex follows: False
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:57:07.357 [DEBUG] [Thread-126821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:57:07.358 [DEBUG] [Thread-126821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:57:07.358 [DEBUG] [Thread-126821] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:57:07.358 [DEBUG] [Thread-126821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:57:07.358 [DEBUG] [Thread-126821] [transport.py] [_log()] Compression: none
2025-12-04T00:57:07.358 [DEBUG] [Thread-126821] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:57:07.375 [DEBUG] [Thread-126821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:57:07.376 [DEBUG] [Thread-126821] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:57:07.377 [DEBUG] [Thread-126821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:57:07.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:57:07.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:57:07.379 [DEBUG] [Thread-126821] [transport.py] [_log()] userauth is OK
2025-12-04T00:57:07.379 [DEBUG] [Thread-126821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:57:07.379 [DEBUG] [Thread-126821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:57:07.379 [DEBUG] [Thread-126821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:57:07.379 [DEBUG] [Thread-126821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:57:07.414 [INFO] [Thread-126821] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:57:07.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:57:08.061 [DEBUG] [Thread-126821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:57:08.061 [DEBUG] [Thread-126821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:57:08.062 [DEBUG] [Thread-126821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:57:08.102 [DEBUG] [Thread-126821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:57:08.102 [DEBUG] [Thread-126821] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:57:08.105 [DEBUG] [Thread-126821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:57:08.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:57:08.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:57:08.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:57:08.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:57:08.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:57:08.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:57:08.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:57:08.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.955949 -999.00  +13.80  17.52     52   +4.30 1 1 1 1 1     0    0 9.10 -27.88 ZNESW 17.0 17.5 147.4 28.4 14.1 -24.8 14.0 -24.3 13.8 -22.8 14.2 -23.6
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.955949
2025-12-04T00:57:08.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:57:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:57:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:57:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:57:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:57:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:56:46', tmtdew=7.18, humidity=65.32, cloud=0.0, wind=24.49, temperature=9.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:56:46', seeing=1.42, atlas_timestamp='2025-12-03T22:56:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, -0.020749999999999602, -0.014749999999999375, -0.016500000000000625, -0.08750000000000036, -0.004749999999999588, 0.011999999999998678, 0.008250000000000313, -0.0005000000000006111, -0.028999999999999915, 0.02874999999999872, 0.022999999999999687, 0.08799999999999919, 0.036249999999999005, -0.13000000000000078, -0.07250000000000156, 0.0007500000000000284, 0.016000000000000014, 0.010999999999999233, -0.043750000000001066, 0.007999999999999119, 0.0747499999999981, -0.03774999999999906, -0.036749999999999616, 0.010999999999999233, 0.041999999999999815, -0.12424999999999997, 0.027499999999999858, 0.10500000000000043, -0.02549999999999919, -0.541999999999998, 0.031000000000000583, 0.09375], zp_timestamp='2025-12-03T22:53:00')
2025-12-04T00:57:08.130 [DEBUG] [Thread-126821] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:57:08.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:57:08.237 [DEBUG] [Thread-126824] [transport.py] [_log()] starting thread (client mode): 0xa2746680
2025-12-04T00:57:08.237 [DEBUG] [Thread-126824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:57:08.252 [DEBUG] [Thread-126824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:57:08.252 [INFO] [Thread-126824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:57:08.265 [DEBUG] [Thread-126824] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:57:08.266 [DEBUG] [Thread-126824] [transport.py] [_log()] client lang: <none>
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] server lang: <none>
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] kex follows: False
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:57:08.267 [DEBUG] [Thread-126824] [transport.py] [_log()] Compression: none
2025-12-04T00:57:08.268 [DEBUG] [Thread-126824] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:57:08.323 [DEBUG] [Thread-126824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:57:08.324 [DEBUG] [Thread-126824] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:57:08.324 [DEBUG] [Thread-126824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:57:08.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:57:08.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:57:08.379 [DEBUG] [Thread-126824] [transport.py] [_log()] userauth is OK
2025-12-04T00:57:08.379 [DEBUG] [Thread-126824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:57:08.379 [DEBUG] [Thread-126824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:57:08.380 [DEBUG] [Thread-126824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:57:08.380 [DEBUG] [Thread-126824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:57:08.402 [INFO] [Thread-126824] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:57:08.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:57:08.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:57:09.213 [DEBUG] [Thread-126824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:57:09.213 [DEBUG] [Thread-126824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:57:09.248 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:09.261 [DEBUG] [Thread-126824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:57:09.261 [DEBUG] [Thread-126824] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:57:09.269 [DEBUG] [Thread-126824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:57:09.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:57:09.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:57:09.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:57:09.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:57:09.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:57:09.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:57:09.304 [DEBUG] [Thread-126824] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:57:13.610 [DEBUG] [Thread-126826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:25.832 [DEBUG] [Thread-126827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:28.650 [DEBUG] [Thread-126828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:29.826 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:33.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:33.844 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:39.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:57:39.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:57:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:57:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 57, 18), 7.18, 65.3, 0.0, 25.21, 9.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:57:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:57:18
2025-12-04T00:57:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:57:40.283 [DEBUG] [Thread-126829] [transport.py] [_log()] starting thread (client mode): 0x9fd23400
2025-12-04T00:57:40.283 [DEBUG] [Thread-126829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:57:40.302 [DEBUG] [Thread-126829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:57:40.303 [INFO] [Thread-126829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:40.306 [DEBUG] [Thread-126829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] client lang: <none>
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] server lang: <none>
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] kex follows: False
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] Compression: none
2025-12-04T00:57:40.307 [DEBUG] [Thread-126829] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:57:40.325 [DEBUG] [Thread-126829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:57:40.326 [DEBUG] [Thread-126829] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:57:40.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:57:40.327 [DEBUG] [Thread-126829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:57:40.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:57:40.369 [DEBUG] [Thread-126829] [transport.py] [_log()] userauth is OK
2025-12-04T00:57:40.369 [DEBUG] [Thread-126829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:57:40.369 [DEBUG] [Thread-126829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:57:40.369 [DEBUG] [Thread-126829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:57:40.369 [DEBUG] [Thread-126829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:57:40.400 [INFO] [Thread-126829] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:57:40.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:57:41.048 [DEBUG] [Thread-126829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:57:41.049 [DEBUG] [Thread-126829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:57:41.049 [DEBUG] [Thread-126829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:57:41.090 [DEBUG] [Thread-126829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:57:41.090 [DEBUG] [Thread-126829] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:57:41.093 [DEBUG] [Thread-126829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:57:41.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:57:41.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:57:41.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:57:41.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:57:41.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:57:41.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:57:41.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:57:41.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:57:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:57:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.956297 -999.00  +13.70  21.80     52   +4.20 1 1 1 1 1     0    0 8.97 -27.40 ZNESW 22.2 21.8 140.6 26.4 14.1 -24.9 14.0 -24.4 13.8 -22.8 14.2 -23.8
2025-12-04T00:57:41.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:57:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:57:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.956297
2025-12-04T00:57:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:57:41.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:57:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:57:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:57:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:57:41.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:57:18', tmtdew=7.18, humidity=65.3, cloud=0.0, wind=25.21, temperature=9.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:57:18', seeing=1.03, atlas_timestamp='2025-12-03T22:57:04.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.04124999999999801, 0.016250000000001208, -0.07250000000000156, -0.012000000000000455, 0.022250000000001435, -0.027000000000001023, -0.03874999999999851, -0.008500000000001506, -0.028999999999999915, -0.00575000000000081, -0.010999999999999233, 0.04400000000000048, -0.01875000000000071, -0.136000000000001, -0.14750000000000085, -0.010749999999999815, -0.0045000000000001705, -0.038000000000000256, -0.0782500000000006, 0.00999999999999801, -0.03325000000000067, -0.055749999999999744, -0.014750000000001151, -0.03300000000000125, -0.02549999999999919, -0.08725000000000094, -0.005499999999999616, 0.057000000000000384, -0.07449999999999868, -0.7149999999999999, -0.054999999999999716, 0.03074999999999939], zp_timestamp='2025-12-03T22:56:00')
2025-12-04T00:57:41.116 [DEBUG] [Thread-126829] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:57:41.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:57:41.215 [DEBUG] [Thread-126832] [transport.py] [_log()] starting thread (client mode): 0xa270ad70
2025-12-04T00:57:41.215 [DEBUG] [Thread-126832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:57:41.230 [DEBUG] [Thread-126832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:57:41.230 [INFO] [Thread-126832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:57:41.238 [DEBUG] [Thread-126832] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:57:41.238 [DEBUG] [Thread-126832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] client lang: <none>
2025-12-04T00:57:41.239 [DEBUG] [Thread-126832] [transport.py] [_log()] server lang: <none>
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] kex follows: False
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] Compression: none
2025-12-04T00:57:41.240 [DEBUG] [Thread-126832] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:57:41.295 [DEBUG] [Thread-126832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:57:41.296 [DEBUG] [Thread-126832] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:57:41.297 [DEBUG] [Thread-126832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:57:41.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:57:41.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:57:41.353 [DEBUG] [Thread-126832] [transport.py] [_log()] userauth is OK
2025-12-04T00:57:41.353 [DEBUG] [Thread-126832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:57:41.353 [DEBUG] [Thread-126832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:57:41.353 [DEBUG] [Thread-126832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:57:41.353 [DEBUG] [Thread-126832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:57:41.372 [INFO] [Thread-126832] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:57:41.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:57:41.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:57:42.190 [DEBUG] [Thread-126832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:57:42.190 [DEBUG] [Thread-126832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:57:42.238 [DEBUG] [Thread-126832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:57:42.239 [DEBUG] [Thread-126832] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:57:42.247 [DEBUG] [Thread-126832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:57:42.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:57:42.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:57:42.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:57:42.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:57:42.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:57:42.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:57:42.284 [DEBUG] [Thread-126832] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:57:43.674 [DEBUG] [Thread-126834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:50.295 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:57:58.727 [DEBUG] [Thread-126835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:10.678 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:12.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:58:12.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:58:12.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:58:12.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 57, 50), 7.1, 65.69, 0.0, 24.58, 8.97, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:58:12.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:57:50
2025-12-04T00:58:13.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:58:13.250 [DEBUG] [Thread-126836] [transport.py] [_log()] starting thread (client mode): 0xa2709e40
2025-12-04T00:58:13.250 [DEBUG] [Thread-126836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:58:13.270 [DEBUG] [Thread-126836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:58:13.270 [INFO] [Thread-126836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] client lang: <none>
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] server lang: <none>
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] kex follows: False
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] Compression: none
2025-12-04T00:58:13.271 [DEBUG] [Thread-126836] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:58:13.282 [DEBUG] [Thread-126836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:58:13.282 [DEBUG] [Thread-126836] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:58:13.283 [DEBUG] [Thread-126836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:58:13.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:58:13.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:58:13.284 [DEBUG] [Thread-126836] [transport.py] [_log()] userauth is OK
2025-12-04T00:58:13.285 [DEBUG] [Thread-126836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:58:13.285 [DEBUG] [Thread-126836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:58:13.285 [DEBUG] [Thread-126836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:58:13.285 [DEBUG] [Thread-126836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:58:13.302 [INFO] [Thread-126836] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:58:13.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:58:13.759 [DEBUG] [Thread-126838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:13.888 [DEBUG] [Thread-126836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:58:13.888 [DEBUG] [Thread-126836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:58:13.888 [DEBUG] [Thread-126836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:58:13.929 [DEBUG] [Thread-126836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:58:13.929 [DEBUG] [Thread-126836] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:58:13.932 [DEBUG] [Thread-126836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:58:13.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:58:13.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:58:13.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:58:13.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:58:13.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:58:13.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:58:13.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.956644 -999.00  +13.70  15.36     52   +4.20 1 1 1 1 1     0    0 9.13 -24.70 ZNESW 19.4 15.4 154.0 25.5 14.2 -24.8 14.0 -24.3 13.8 -22.8 14.1 -23.6
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:58:13.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.956644
2025-12-04T00:58:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:58:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:58:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:58:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:58:13.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:58:13.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:57:50', tmtdew=7.1, humidity=65.69, cloud=0.0, wind=24.58, temperature=8.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:57:50', seeing=1.03, atlas_timestamp='2025-12-03T22:57:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.04124999999999801, 0.016250000000001208, -0.07250000000000156, -0.012000000000000455, 0.022250000000001435, -0.027000000000001023, -0.03874999999999851, -0.008500000000001506, -0.028999999999999915, -0.00575000000000081, -0.010999999999999233, 0.04400000000000048, -0.01875000000000071, -0.136000000000001, -0.14750000000000085, -0.010749999999999815, -0.0045000000000001705, -0.038000000000000256, -0.0782500000000006, 0.00999999999999801, -0.03325000000000067, -0.055749999999999744, -0.014750000000001151, -0.03300000000000125, -0.02549999999999919, -0.08725000000000094, -0.005499999999999616, 0.057000000000000384, -0.07449999999999868, -0.7149999999999999, -0.054999999999999716, 0.03074999999999939], zp_timestamp='2025-12-03T22:56:00')
2025-12-04T00:58:13.957 [DEBUG] [Thread-126836] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:58:14.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:58:14.052 [DEBUG] [Thread-126840] [transport.py] [_log()] starting thread (client mode): 0xa51cd960
2025-12-04T00:58:14.052 [DEBUG] [Thread-126840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:58:14.068 [DEBUG] [Thread-126840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T00:58:14.069 [INFO] [Thread-126840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T00:58:14.076 [DEBUG] [Thread-126840] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:58:14.076 [DEBUG] [Thread-126840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] client lang: <none>
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] server lang: <none>
2025-12-04T00:58:14.077 [DEBUG] [Thread-126840] [transport.py] [_log()] kex follows: False
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] Compression: none
2025-12-04T00:58:14.078 [DEBUG] [Thread-126840] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:58:14.134 [DEBUG] [Thread-126840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:58:14.135 [DEBUG] [Thread-126840] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:58:14.135 [DEBUG] [Thread-126840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T00:58:14.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T00:58:14.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:58:14.191 [DEBUG] [Thread-126840] [transport.py] [_log()] userauth is OK
2025-12-04T00:58:14.191 [DEBUG] [Thread-126840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:58:14.191 [DEBUG] [Thread-126840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:58:14.191 [DEBUG] [Thread-126840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T00:58:14.191 [DEBUG] [Thread-126840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:58:14.210 [INFO] [Thread-126840] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:58:14.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T00:58:14.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:58:15.055 [DEBUG] [Thread-126840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:58:15.055 [DEBUG] [Thread-126840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:58:15.105 [DEBUG] [Thread-126840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:58:15.105 [DEBUG] [Thread-126840] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:58:15.114 [DEBUG] [Thread-126840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:58:15.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:58:15.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T00:58:15.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T00:58:15.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:58:15.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:58:15.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:58:15.149 [DEBUG] [Thread-126840] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:58:25.900 [DEBUG] [Thread-126842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:28.792 [DEBUG] [Thread-126843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:31.159 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:34.043 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:34.045 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:43.833 [DEBUG] [Thread-126844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:45.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T00:58:45.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T00:58:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T00:58:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 0, 58, 22), 7.1, 65.7, 0.0, 24.68, 8.95, 0, 0, 0, 2, 0, 0),)
2025-12-04T00:58:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 00:58:22
2025-12-04T00:58:46.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T00:58:46.160 [DEBUG] [Thread-126845] [transport.py] [_log()] starting thread (client mode): 0xa270a260
2025-12-04T00:58:46.160 [DEBUG] [Thread-126845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T00:58:46.182 [DEBUG] [Thread-126845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T00:58:46.182 [INFO] [Thread-126845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T00:58:46.185 [DEBUG] [Thread-126845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] client lang: <none>
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] server lang: <none>
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] kex follows: False
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] Compression: none
2025-12-04T00:58:46.186 [DEBUG] [Thread-126845] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T00:58:46.200 [DEBUG] [Thread-126845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T00:58:46.201 [DEBUG] [Thread-126845] [transport.py] [_log()] Switch to new keys ...
2025-12-04T00:58:46.201 [DEBUG] [Thread-126845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T00:58:46.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T00:58:46.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T00:58:46.202 [DEBUG] [Thread-126845] [transport.py] [_log()] userauth is OK
2025-12-04T00:58:46.202 [DEBUG] [Thread-126845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T00:58:46.202 [DEBUG] [Thread-126845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T00:58:46.202 [DEBUG] [Thread-126845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T00:58:46.202 [DEBUG] [Thread-126845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T00:58:46.219 [INFO] [Thread-126845] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T00:58:46.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T00:58:46.872 [DEBUG] [Thread-126845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T00:58:46.872 [DEBUG] [Thread-126845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T00:58:46.873 [DEBUG] [Thread-126845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T00:58:46.914 [DEBUG] [Thread-126845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T00:58:46.914 [DEBUG] [Thread-126845] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T00:58:46.916 [DEBUG] [Thread-126845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T00:58:46.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T00:58:46.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T00:58:46.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T00:58:46.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T00:58:46.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T00:58:46.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T00:58:46.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.956991 -999.00  +13.70  17.81     52   +4.20 1 1 1 1 1     0    0 9.02 -27.49 ZNESW 24.8 17.8 146.8 24.3 14.1 -24.9 14.0 -24.3 13.8 -22.8 14.1 -23.7
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.956991
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T00:58:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T00:58:22', tmtdew=7.1, humidity=65.7, cloud=0.0, wind=24.68, temperature=8.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T00:58:22', seeing=1.0, atlas_timestamp='2025-12-03T22:58:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.04124999999999801, 0.016250000000001208, -0.07250000000000156, -0.012000000000000455, 0.022250000000001435, -0.027000000000001023, -0.03874999999999851, -0.008500000000001506, -0.028999999999999915, -0.00575000000000081, -0.010999999999999233, 0.04400000000000048, -0.01875000000000071, -0.136000000000001, -0.14750000000000085, -0.010749999999999815, -0.0045000000000001705, -0.038000000000000256, -0.0782500000000006, 0.00999999999999801, -0.03325000000000067, -0.055749999999999744, -0.014750000000001151, -0.03300000000000125, -0.02549999999999919, -0.08725000000000094, -0.005499999999999616, 0.057000000000000384, -0.07449999999999868, -0.7149999999999999, -0.054999999999999716, 0.03074999999999939], zp_timestamp='2025-12-03T22:56:00')
2025-12-04T00:58:46.935 [DEBUG] [Thread-126845] [transport.py] [_log()] EOF in transport thread
2025-12-04T00:58:47.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T00:58:51.598 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:58:58.857 [DEBUG] [Thread-126848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:11.973 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:13.903 [DEBUG] [Thread-126849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:25.963 [DEBUG] [Thread-126850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:28.936 [DEBUG] [Thread-126851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:32.356 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:34.244 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:34.245 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:43.964 [DEBUG] [Thread-126852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:52.739 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T00:59:58.991 [DEBUG] [Thread-126853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:13.168 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:14.017 [DEBUG] [Thread-126854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:26.022 [DEBUG] [Thread-126855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:29.046 [DEBUG] [Thread-126856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:33.573 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:34.448 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:34.449 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:44.074 [DEBUG] [Thread-126857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:53.958 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:00:59.100 [DEBUG] [Thread-126858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:00.694 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-04T01:01:14.131 [DEBUG] [Thread-126859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:14.390 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:26.084 [DEBUG] [Thread-126860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:29.162 [DEBUG] [Thread-126861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:30.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:01:30.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:01:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:01:31.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 1, 2), 7.05, 65.77, 0.0, 23.85, 8.94, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:01:31.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:01:02
2025-12-04T01:01:31.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:01:31.677 [DEBUG] [Thread-126862] [transport.py] [_log()] starting thread (client mode): 0xa519bbe0
2025-12-04T01:01:31.677 [DEBUG] [Thread-126862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:01:31.690 [DEBUG] [Thread-126862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:01:31.690 [INFO] [Thread-126862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] client lang: <none>
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] server lang: <none>
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] kex follows: False
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] Compression: none
2025-12-04T01:01:31.694 [DEBUG] [Thread-126862] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:01:31.713 [DEBUG] [Thread-126862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:01:31.714 [DEBUG] [Thread-126862] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:01:31.714 [DEBUG] [Thread-126862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:01:31.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:01:31.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:01:31.716 [DEBUG] [Thread-126862] [transport.py] [_log()] userauth is OK
2025-12-04T01:01:31.716 [DEBUG] [Thread-126862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:01:31.716 [DEBUG] [Thread-126862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:01:31.716 [DEBUG] [Thread-126862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:01:31.716 [DEBUG] [Thread-126862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:01:31.730 [INFO] [Thread-126862] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:01:31.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:01:32.524 [DEBUG] [Thread-126862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:01:32.524 [DEBUG] [Thread-126862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:01:32.524 [DEBUG] [Thread-126862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:01:32.565 [DEBUG] [Thread-126862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:01:32.565 [DEBUG] [Thread-126862] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:01:32.568 [DEBUG] [Thread-126862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:01:32.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:01:32.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:01:32.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:01:32.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:01:32.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:01:32.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:01:32.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:01:32.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:01:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:01:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.958727 -999.00  +13.60  19.18     53   +4.30 1 1 1 1 1     0    0 8.85 -27.12 ZNESW 13.6 19.2 144.0 28.0 14.1 -25.0 14.0 -24.5 13.8 -22.8 14.0 -23.6
2025-12-04T01:01:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:01:32.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:01:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.958727
2025-12-04T01:01:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:01:32.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:01:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:01:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:01:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:01:32.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:01:02', tmtdew=7.05, humidity=65.77, cloud=0.0, wind=23.85, temperature=8.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:01:02', seeing=0.89, atlas_timestamp='2025-12-03T23:00:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T22:59:00')
2025-12-04T01:01:32.592 [DEBUG] [Thread-126862] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:01:32.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:01:32.693 [DEBUG] [Thread-126865] [transport.py] [_log()] starting thread (client mode): 0xa519acb0
2025-12-04T01:01:32.693 [DEBUG] [Thread-126865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:01:32.707 [DEBUG] [Thread-126865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:01:32.707 [INFO] [Thread-126865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] client lang: <none>
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] server lang: <none>
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] kex follows: False
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:01:32.717 [DEBUG] [Thread-126865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:01:32.718 [DEBUG] [Thread-126865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:01:32.718 [DEBUG] [Thread-126865] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:01:32.718 [DEBUG] [Thread-126865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:01:32.718 [DEBUG] [Thread-126865] [transport.py] [_log()] Compression: none
2025-12-04T01:01:32.718 [DEBUG] [Thread-126865] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:01:32.779 [DEBUG] [Thread-126865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:01:32.779 [DEBUG] [Thread-126865] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:01:32.780 [DEBUG] [Thread-126865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:01:32.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:01:32.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:01:32.834 [DEBUG] [Thread-126865] [transport.py] [_log()] userauth is OK
2025-12-04T01:01:32.834 [DEBUG] [Thread-126865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:01:32.834 [DEBUG] [Thread-126865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:01:32.834 [DEBUG] [Thread-126865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:01:32.834 [DEBUG] [Thread-126865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:01:32.853 [INFO] [Thread-126865] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:01:32.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:01:32.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:01:33.627 [DEBUG] [Thread-126865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:01:33.627 [DEBUG] [Thread-126865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:01:33.675 [DEBUG] [Thread-126865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:01:33.676 [DEBUG] [Thread-126865] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:01:33.684 [DEBUG] [Thread-126865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:01:33.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:01:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:01:33.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:01:33.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:01:33.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:01:33.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:01:33.718 [DEBUG] [Thread-126865] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:01:34.649 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:34.650 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:34.842 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:44.195 [DEBUG] [Thread-126867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:55.253 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:01:59.244 [DEBUG] [Thread-126868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:02:03.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:02:03.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:02:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 1, 34), 7.05, 65.76, 0.0, 28.78, 8.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:02:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:01:34
2025-12-04T01:02:04.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:02:04.690 [DEBUG] [Thread-126869] [transport.py] [_log()] starting thread (client mode): 0xa270aa40
2025-12-04T01:02:04.690 [DEBUG] [Thread-126869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:02:04.710 [DEBUG] [Thread-126869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:02:04.710 [INFO] [Thread-126869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:02:04.713 [DEBUG] [Thread-126869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] client lang: <none>
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] server lang: <none>
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] kex follows: False
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] Compression: none
2025-12-04T01:02:04.714 [DEBUG] [Thread-126869] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:02:04.731 [DEBUG] [Thread-126869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:02:04.732 [DEBUG] [Thread-126869] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:02:04.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:02:04.733 [DEBUG] [Thread-126869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:02:04.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:02:04.735 [DEBUG] [Thread-126869] [transport.py] [_log()] userauth is OK
2025-12-04T01:02:04.736 [DEBUG] [Thread-126869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:02:04.736 [DEBUG] [Thread-126869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:02:04.736 [DEBUG] [Thread-126869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:02:04.736 [DEBUG] [Thread-126869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:02:04.759 [INFO] [Thread-126869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:02:04.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:02:05.355 [DEBUG] [Thread-126869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:02:05.355 [DEBUG] [Thread-126869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:02:05.355 [DEBUG] [Thread-126869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:02:05.396 [DEBUG] [Thread-126869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:02:05.396 [DEBUG] [Thread-126869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:02:05.399 [DEBUG] [Thread-126869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:02:05.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:02:05.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:02:05.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:02:05.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:02:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:02:05.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:02:05.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:02:05.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:02:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:02:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.959074 -999.00  +13.60  16.91     53   +4.30 1 1 1 1 1     0    0 8.97 -27.55 ZNESW 20.1 16.9 143.4 20.6 14.1 -24.9 13.9 -24.3 13.7 -22.8 14.0 -23.6
2025-12-04T01:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.959074
2025-12-04T01:02:05.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:02:05.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:01:34', tmtdew=7.05, humidity=65.76, cloud=0.0, wind=28.78, temperature=8.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:01:34', seeing=0.86, atlas_timestamp='2025-12-03T23:01:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T22:59:00')
2025-12-04T01:02:05.423 [DEBUG] [Thread-126869] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:02:05.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:02:05.521 [DEBUG] [Thread-126872] [transport.py] [_log()] starting thread (client mode): 0xa51ce320
2025-12-04T01:02:05.521 [DEBUG] [Thread-126872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:02:05.539 [DEBUG] [Thread-126872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:02:05.539 [INFO] [Thread-126872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:02:05.547 [DEBUG] [Thread-126872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] client lang: <none>
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] server lang: <none>
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] kex follows: False
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:02:05.548 [DEBUG] [Thread-126872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:02:05.549 [DEBUG] [Thread-126872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:02:05.549 [DEBUG] [Thread-126872] [transport.py] [_log()] Compression: none
2025-12-04T01:02:05.549 [DEBUG] [Thread-126872] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:02:05.610 [DEBUG] [Thread-126872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:02:05.610 [DEBUG] [Thread-126872] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:02:05.611 [DEBUG] [Thread-126872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:02:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:02:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:02:05.667 [DEBUG] [Thread-126872] [transport.py] [_log()] userauth is OK
2025-12-04T01:02:05.668 [DEBUG] [Thread-126872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:02:05.668 [DEBUG] [Thread-126872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:02:05.668 [DEBUG] [Thread-126872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:02:05.668 [DEBUG] [Thread-126872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:02:05.688 [INFO] [Thread-126872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:02:05.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:02:05.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:02:06.551 [DEBUG] [Thread-126872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:02:06.551 [DEBUG] [Thread-126872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:02:06.599 [DEBUG] [Thread-126872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:02:06.599 [DEBUG] [Thread-126872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:02:06.608 [DEBUG] [Thread-126872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:02:06.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:02:06.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:02:06.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:02:06.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:02:06.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:02:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:02:06.642 [DEBUG] [Thread-126872] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:02:14.269 [DEBUG] [Thread-126874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:15.654 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:26.144 [DEBUG] [Thread-126875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:29.308 [DEBUG] [Thread-126876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:34.850 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:34.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:36.052 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:36.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:02:36.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:02:36.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:02:37.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 2, 6), 7.06, 65.71, 0.0, 28.02, 8.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:02:37.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:02:06
2025-12-04T01:02:37.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:02:37.673 [DEBUG] [Thread-126877] [transport.py] [_log()] starting thread (client mode): 0xa5199270
2025-12-04T01:02:37.673 [DEBUG] [Thread-126877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:02:37.685 [DEBUG] [Thread-126877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:02:37.685 [INFO] [Thread-126877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:02:37.686 [DEBUG] [Thread-126877] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] client lang: <none>
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] server lang: <none>
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] kex follows: False
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] Compression: none
2025-12-04T01:02:37.687 [DEBUG] [Thread-126877] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:02:37.697 [DEBUG] [Thread-126877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:02:37.697 [DEBUG] [Thread-126877] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:02:37.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:02:37.698 [DEBUG] [Thread-126877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:02:37.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:02:37.698 [DEBUG] [Thread-126877] [transport.py] [_log()] userauth is OK
2025-12-04T01:02:37.698 [DEBUG] [Thread-126877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:02:37.698 [DEBUG] [Thread-126877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:02:37.699 [DEBUG] [Thread-126877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:02:37.699 [DEBUG] [Thread-126877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:02:37.712 [INFO] [Thread-126877] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:02:37.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:02:38.502 [DEBUG] [Thread-126877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:02:38.502 [DEBUG] [Thread-126877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:02:38.502 [DEBUG] [Thread-126877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:02:38.543 [DEBUG] [Thread-126877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:02:38.544 [DEBUG] [Thread-126877] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:02:38.546 [DEBUG] [Thread-126877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:02:38.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:02:38.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:02:38.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:02:38.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:02:38.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:02:38.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:02:38.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.959422 -999.00  +13.60  19.40     53   +4.30 1 1 1 1 1     0    0 8.63 -29.69 ZNESW 21.9 19.4 148.8 25.8 14.1 -24.9 13.9 -24.4 13.7 -22.8 14.0 -23.6
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.959422
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:02:38.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:02:06', tmtdew=7.06, humidity=65.71, cloud=0.0, wind=28.02, temperature=8.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:02:06', seeing=0.86, atlas_timestamp='2025-12-03T23:01:34.061', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T22:59:00')
2025-12-04T01:02:38.565 [DEBUG] [Thread-126877] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:02:38.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:02:38.652 [DEBUG] [Thread-126880] [transport.py] [_log()] starting thread (client mode): 0xa2786200
2025-12-04T01:02:38.652 [DEBUG] [Thread-126880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:02:38.667 [DEBUG] [Thread-126880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:02:38.667 [INFO] [Thread-126880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] client lang: <none>
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] server lang: <none>
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] kex follows: False
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] Compression: none
2025-12-04T01:02:38.675 [DEBUG] [Thread-126880] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:02:38.736 [DEBUG] [Thread-126880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:02:38.736 [DEBUG] [Thread-126880] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:02:38.736 [DEBUG] [Thread-126880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:02:38.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:02:38.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:02:38.795 [DEBUG] [Thread-126880] [transport.py] [_log()] userauth is OK
2025-12-04T01:02:38.795 [DEBUG] [Thread-126880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:02:38.795 [DEBUG] [Thread-126880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:02:38.795 [DEBUG] [Thread-126880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:02:38.795 [DEBUG] [Thread-126880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:02:38.812 [INFO] [Thread-126880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:02:38.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:02:38.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:02:39.718 [DEBUG] [Thread-126880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:02:39.718 [DEBUG] [Thread-126880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:02:39.767 [DEBUG] [Thread-126880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:02:39.767 [DEBUG] [Thread-126880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:02:39.776 [DEBUG] [Thread-126880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:02:39.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:02:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:02:39.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:02:39.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:02:39.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:02:39.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:02:39.814 [DEBUG] [Thread-126880] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:02:44.337 [DEBUG] [Thread-126882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:56.446 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:02:59.381 [DEBUG] [Thread-126883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:09.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:03:09.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:03:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 2, 38), 7.09, 65.72, 0.0, 23.47, 8.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:03:10.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:02:38
2025-12-04T01:03:10.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:03:10.801 [DEBUG] [Thread-126884] [transport.py] [_log()] starting thread (client mode): 0xa51ce1d0
2025-12-04T01:03:10.801 [DEBUG] [Thread-126884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:03:10.812 [DEBUG] [Thread-126884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:03:10.812 [INFO] [Thread-126884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] client lang: <none>
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] server lang: <none>
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] kex follows: False
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] Compression: none
2025-12-04T01:03:10.814 [DEBUG] [Thread-126884] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:03:10.823 [DEBUG] [Thread-126884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:03:10.823 [DEBUG] [Thread-126884] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:03:10.823 [DEBUG] [Thread-126884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:03:10.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:03:10.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:03:10.824 [DEBUG] [Thread-126884] [transport.py] [_log()] userauth is OK
2025-12-04T01:03:10.824 [DEBUG] [Thread-126884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:03:10.824 [DEBUG] [Thread-126884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:03:10.825 [DEBUG] [Thread-126884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:03:10.825 [DEBUG] [Thread-126884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:03:10.835 [INFO] [Thread-126884] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:03:10.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:03:11.468 [DEBUG] [Thread-126884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:03:11.468 [DEBUG] [Thread-126884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:03:11.468 [DEBUG] [Thread-126884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:03:11.510 [DEBUG] [Thread-126884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:03:11.510 [DEBUG] [Thread-126884] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:03:11.512 [DEBUG] [Thread-126884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:03:11.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:03:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:03:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:03:11.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:03:11.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:03:11.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:03:11.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.960116 -999.00  +13.70  17.42     53   +4.30 1 1 1 1 1     0    0 8.69 -33.01 ZNESW 19.1 17.4 143.0 24.3 14.1 -24.9 13.9 -24.4 13.7 -22.9 14.0 -23.7
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.960116
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:03:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:02:38', tmtdew=7.09, humidity=65.72, cloud=0.0, wind=23.47, temperature=8.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:02:39', seeing=1.27, atlas_timestamp='2025-12-03T23:02:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T22:59:00')
2025-12-04T01:03:11.529 [DEBUG] [Thread-126884] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:03:11.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:03:11.615 [DEBUG] [Thread-126887] [transport.py] [_log()] starting thread (client mode): 0xa51cca00
2025-12-04T01:03:11.615 [DEBUG] [Thread-126887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:03:11.631 [DEBUG] [Thread-126887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:03:11.631 [INFO] [Thread-126887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:03:11.638 [DEBUG] [Thread-126887] [transport.py] [_log()] client lang: <none>
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] server lang: <none>
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] kex follows: False
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] Compression: none
2025-12-04T01:03:11.639 [DEBUG] [Thread-126887] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:03:11.695 [DEBUG] [Thread-126887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:03:11.695 [DEBUG] [Thread-126887] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:03:11.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:03:11.696 [DEBUG] [Thread-126887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:03:11.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:03:11.753 [DEBUG] [Thread-126887] [transport.py] [_log()] userauth is OK
2025-12-04T01:03:11.753 [DEBUG] [Thread-126887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:03:11.753 [DEBUG] [Thread-126887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:03:11.753 [DEBUG] [Thread-126887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:03:11.753 [DEBUG] [Thread-126887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:03:11.768 [INFO] [Thread-126887] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:03:11.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:03:11.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:03:12.610 [DEBUG] [Thread-126887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:03:12.610 [DEBUG] [Thread-126887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:03:12.657 [DEBUG] [Thread-126887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:03:12.657 [DEBUG] [Thread-126887] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:03:12.665 [DEBUG] [Thread-126887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:03:12.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:03:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:03:12.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:03:12.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:03:12.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:03:12.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:03:12.701 [DEBUG] [Thread-126887] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:03:14.408 [DEBUG] [Thread-126889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:16.853 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:26.206 [DEBUG] [Thread-126890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:29.445 [DEBUG] [Thread-126891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:35.051 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:35.052 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:37.235 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:42.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:03:42.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:03:42.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:03:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 3, 11), 7.09, 65.73, 0.0, 24.49, 8.93, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:03:43.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:03:11
2025-12-04T01:03:43.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:03:43.709 [DEBUG] [Thread-126892] [transport.py] [_log()] starting thread (client mode): 0xa51ce320
2025-12-04T01:03:43.709 [DEBUG] [Thread-126892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:03:43.730 [DEBUG] [Thread-126892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:03:43.730 [INFO] [Thread-126892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:03:43.733 [DEBUG] [Thread-126892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:03:43.733 [DEBUG] [Thread-126892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] client lang: <none>
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] server lang: <none>
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] kex follows: False
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] Compression: none
2025-12-04T01:03:43.734 [DEBUG] [Thread-126892] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:03:43.750 [DEBUG] [Thread-126892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:03:43.750 [DEBUG] [Thread-126892] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:03:43.750 [DEBUG] [Thread-126892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:03:43.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:03:43.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:03:43.751 [DEBUG] [Thread-126892] [transport.py] [_log()] userauth is OK
2025-12-04T01:03:43.751 [DEBUG] [Thread-126892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:03:43.751 [DEBUG] [Thread-126892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:03:43.751 [DEBUG] [Thread-126892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:03:43.751 [DEBUG] [Thread-126892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:03:43.766 [INFO] [Thread-126892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:03:43.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:03:44.353 [DEBUG] [Thread-126892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:03:44.353 [DEBUG] [Thread-126892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:03:44.353 [DEBUG] [Thread-126892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:03:44.393 [DEBUG] [Thread-126892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:03:44.393 [DEBUG] [Thread-126892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:03:44.396 [DEBUG] [Thread-126892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:03:44.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:03:44.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:03:44.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:03:44.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:03:44.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:03:44.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:03:44.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:03:44.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:03:44.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:03:44.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.960463 -999.00  +13.60  14.82     53   +4.30 1 1 1 1 1     0    0 8.86 -30.08 ZNESW 14.4 14.8 152.4 24.6 14.0 -24.9 13.9 -24.5 13.7 -22.9 14.0 -23.6
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.960463
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:03:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:03:11', tmtdew=7.09, humidity=65.73, cloud=0.0, wind=24.49, temperature=8.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:03:11', seeing=1.05, atlas_timestamp='2025-12-03T23:03:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T23:02:00')
2025-12-04T01:03:44.413 [DEBUG] [Thread-126892] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:03:44.473 [DEBUG] [Thread-126895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:44.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:03:44.500 [DEBUG] [Thread-126896] [transport.py] [_log()] starting thread (client mode): 0xa51b8fa0
2025-12-04T01:03:44.500 [DEBUG] [Thread-126896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:03:44.515 [DEBUG] [Thread-126896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:03:44.515 [INFO] [Thread-126896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] client lang: <none>
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] server lang: <none>
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] kex follows: False
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] Compression: none
2025-12-04T01:03:44.523 [DEBUG] [Thread-126896] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:03:44.580 [DEBUG] [Thread-126896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:03:44.580 [DEBUG] [Thread-126896] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:03:44.580 [DEBUG] [Thread-126896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:03:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:03:44.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:03:44.637 [DEBUG] [Thread-126896] [transport.py] [_log()] userauth is OK
2025-12-04T01:03:44.637 [DEBUG] [Thread-126896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:03:44.637 [DEBUG] [Thread-126896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:03:44.637 [DEBUG] [Thread-126896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:03:44.637 [DEBUG] [Thread-126896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:03:44.651 [INFO] [Thread-126896] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:03:44.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:03:44.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:03:45.469 [DEBUG] [Thread-126896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:03:45.470 [DEBUG] [Thread-126896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:03:45.518 [DEBUG] [Thread-126896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:03:45.518 [DEBUG] [Thread-126896] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:03:45.527 [DEBUG] [Thread-126896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:03:45.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:03:45.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:03:45.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:03:45.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:03:45.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:03:45.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:03:45.561 [DEBUG] [Thread-126896] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:03:57.618 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:03:59.503 [DEBUG] [Thread-126898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:14.538 [DEBUG] [Thread-126899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:15.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:04:15.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:04:15.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:04:16.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 3, 43), 7.03, 65.82, 0.0, 20.93, 8.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:04:16.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:03:43
2025-12-04T01:04:16.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:04:16.597 [DEBUG] [Thread-126900] [transport.py] [_log()] starting thread (client mode): 0xa27085b0
2025-12-04T01:04:16.597 [DEBUG] [Thread-126900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:04:16.617 [DEBUG] [Thread-126900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:04:16.617 [INFO] [Thread-126900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] client lang: <none>
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] server lang: <none>
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] kex follows: False
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] Compression: none
2025-12-04T01:04:16.621 [DEBUG] [Thread-126900] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:04:16.637 [DEBUG] [Thread-126900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:04:16.637 [DEBUG] [Thread-126900] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:04:16.637 [DEBUG] [Thread-126900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:04:16.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:04:16.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:04:16.638 [DEBUG] [Thread-126900] [transport.py] [_log()] userauth is OK
2025-12-04T01:04:16.638 [DEBUG] [Thread-126900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:04:16.638 [DEBUG] [Thread-126900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:04:16.638 [DEBUG] [Thread-126900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:04:16.638 [DEBUG] [Thread-126900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:04:16.648 [INFO] [Thread-126900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:04:16.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:04:17.298 [DEBUG] [Thread-126900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:04:17.299 [DEBUG] [Thread-126900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:04:17.299 [DEBUG] [Thread-126900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:04:17.340 [DEBUG] [Thread-126900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:04:17.340 [DEBUG] [Thread-126900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:04:17.343 [DEBUG] [Thread-126900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:04:17.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:04:17.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:04:17.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:04:17.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:04:17.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:04:17.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:04:17.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:04:17.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:04:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:04:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.960811 -999.00  +13.60  19.93     53   +4.30 1 1 1 1 1     0    0 8.66 -29.81 ZNESW 21.5 19.9 144.1 30.1 14.1 -25.0 13.9 -24.4 13.7 -22.8 14.0 -23.6
2025-12-04T01:04:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:04:17.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:04:17.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.960811
2025-12-04T01:04:17.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:04:17.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:04:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:04:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:04:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:04:17.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:03:43', tmtdew=7.03, humidity=65.82, cloud=0.0, wind=20.93, temperature=8.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:04:15', seeing=1.01, atlas_timestamp='2025-12-03T23:03:34.070', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T23:02:00')
2025-12-04T01:04:17.367 [DEBUG] [Thread-126900] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:04:17.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:04:17.466 [DEBUG] [Thread-126903] [transport.py] [_log()] starting thread (client mode): 0xa51cc580
2025-12-04T01:04:17.467 [DEBUG] [Thread-126903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:04:17.482 [DEBUG] [Thread-126903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:04:17.482 [INFO] [Thread-126903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:17.490 [DEBUG] [Thread-126903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] client lang: <none>
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] server lang: <none>
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] kex follows: False
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:04:17.491 [DEBUG] [Thread-126903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:04:17.492 [DEBUG] [Thread-126903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:04:17.492 [DEBUG] [Thread-126903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:04:17.492 [DEBUG] [Thread-126903] [transport.py] [_log()] Compression: none
2025-12-04T01:04:17.492 [DEBUG] [Thread-126903] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:04:17.549 [DEBUG] [Thread-126903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:04:17.549 [DEBUG] [Thread-126903] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:04:17.550 [DEBUG] [Thread-126903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:04:17.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:04:17.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:04:17.606 [DEBUG] [Thread-126903] [transport.py] [_log()] userauth is OK
2025-12-04T01:04:17.607 [DEBUG] [Thread-126903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:04:17.607 [DEBUG] [Thread-126903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:04:17.607 [DEBUG] [Thread-126903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:04:17.607 [DEBUG] [Thread-126903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:04:17.626 [INFO] [Thread-126903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:04:17.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:04:17.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:04:18.046 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:18.429 [DEBUG] [Thread-126903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:04:18.429 [DEBUG] [Thread-126903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:04:18.478 [DEBUG] [Thread-126903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:04:18.478 [DEBUG] [Thread-126903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:04:18.487 [DEBUG] [Thread-126903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:04:18.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:04:18.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:04:18.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:04:18.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:04:18.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:04:18.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:04:18.522 [DEBUG] [Thread-126903] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:04:26.273 [DEBUG] [Thread-126905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:29.566 [DEBUG] [Thread-126906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:35.249 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:35.250 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:38.454 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:44.617 [DEBUG] [Thread-126907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:48.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:04:48.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:04:48.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:04:49.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 4, 15), 7.03, 65.81, 0.0, 23.43, 8.88, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:04:49.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:04:15
2025-12-04T01:04:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:04:49.525 [DEBUG] [Thread-126908] [transport.py] [_log()] starting thread (client mode): 0xa27867a0
2025-12-04T01:04:49.525 [DEBUG] [Thread-126908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:04:49.549 [DEBUG] [Thread-126908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:04:49.549 [INFO] [Thread-126908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:04:49.552 [DEBUG] [Thread-126908] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:04:49.552 [DEBUG] [Thread-126908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:04:49.552 [DEBUG] [Thread-126908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:04:49.552 [DEBUG] [Thread-126908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] client lang: <none>
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] server lang: <none>
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] kex follows: False
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] Compression: none
2025-12-04T01:04:49.553 [DEBUG] [Thread-126908] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:04:49.571 [DEBUG] [Thread-126908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:04:49.571 [DEBUG] [Thread-126908] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:04:49.572 [DEBUG] [Thread-126908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:04:49.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:04:49.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:04:49.574 [DEBUG] [Thread-126908] [transport.py] [_log()] userauth is OK
2025-12-04T01:04:49.574 [DEBUG] [Thread-126908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:04:49.574 [DEBUG] [Thread-126908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:04:49.574 [DEBUG] [Thread-126908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:04:49.574 [DEBUG] [Thread-126908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:04:49.598 [INFO] [Thread-126908] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:04:49.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:04:50.253 [DEBUG] [Thread-126908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:04:50.253 [DEBUG] [Thread-126908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:04:50.253 [DEBUG] [Thread-126908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:04:50.294 [DEBUG] [Thread-126908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:04:50.294 [DEBUG] [Thread-126908] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:04:50.297 [DEBUG] [Thread-126908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:04:50.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:04:50.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:04:50.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:04:50.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:04:50.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:04:50.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:04:50.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.961158 -999.00  +13.60  24.96     53   +4.30 1 1 1 1 1     0    0 8.71 -30.55 ZNESW 22.1 25.0 142.0 30.7 14.0 -24.9 13.9 -24.3 13.7 -22.9 14.0 -23.7
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:04:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.961158
2025-12-04T01:04:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:04:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:04:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:04:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:04:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:04:50.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:04:15', tmtdew=7.03, humidity=65.81, cloud=0.0, wind=23.43, temperature=8.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:04:47', seeing=1.13, atlas_timestamp='2025-12-03T23:04:04.051', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T23:02:00')
2025-12-04T01:04:50.322 [DEBUG] [Thread-126908] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:04:50.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:04:50.413 [DEBUG] [Thread-126911] [transport.py] [_log()] starting thread (client mode): 0xa270a710
2025-12-04T01:04:50.413 [DEBUG] [Thread-126911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:04:50.435 [DEBUG] [Thread-126911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:04:50.435 [INFO] [Thread-126911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] client lang: <none>
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] server lang: <none>
2025-12-04T01:04:50.443 [DEBUG] [Thread-126911] [transport.py] [_log()] kex follows: False
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] Compression: none
2025-12-04T01:04:50.444 [DEBUG] [Thread-126911] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:04:50.504 [DEBUG] [Thread-126911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:04:50.504 [DEBUG] [Thread-126911] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:04:50.505 [DEBUG] [Thread-126911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:04:50.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:04:50.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:04:50.561 [DEBUG] [Thread-126911] [transport.py] [_log()] userauth is OK
2025-12-04T01:04:50.561 [DEBUG] [Thread-126911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:04:50.561 [DEBUG] [Thread-126911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:04:50.561 [DEBUG] [Thread-126911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:04:50.561 [DEBUG] [Thread-126911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:04:50.579 [INFO] [Thread-126911] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:04:50.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:04:50.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:04:51.386 [DEBUG] [Thread-126911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:04:51.387 [DEBUG] [Thread-126911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:04:51.435 [DEBUG] [Thread-126911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:04:51.435 [DEBUG] [Thread-126911] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:04:51.446 [DEBUG] [Thread-126911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:04:51.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:04:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:04:51.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:04:51.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:04:51.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:04:51.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:04:51.480 [DEBUG] [Thread-126911] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:04:58.882 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:04:59.645 [DEBUG] [Thread-126913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:14.685 [DEBUG] [Thread-126914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:19.253 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:05:21.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:05:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:05:22.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 5, 19), 7.05, 65.78, 0.0, 24.65, 9.03, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:05:22.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:05:19
2025-12-04T01:05:22.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:05:22.484 [DEBUG] [Thread-126915] [transport.py] [_log()] starting thread (client mode): 0xa270a290
2025-12-04T01:05:22.484 [DEBUG] [Thread-126915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:05:22.503 [DEBUG] [Thread-126915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:05:22.503 [INFO] [Thread-126915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] client lang: <none>
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] server lang: <none>
2025-12-04T01:05:22.507 [DEBUG] [Thread-126915] [transport.py] [_log()] kex follows: False
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] Compression: none
2025-12-04T01:05:22.508 [DEBUG] [Thread-126915] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:05:22.526 [DEBUG] [Thread-126915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:05:22.527 [DEBUG] [Thread-126915] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:05:22.527 [DEBUG] [Thread-126915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:05:22.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:05:22.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:05:22.530 [DEBUG] [Thread-126915] [transport.py] [_log()] userauth is OK
2025-12-04T01:05:22.530 [DEBUG] [Thread-126915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:05:22.530 [DEBUG] [Thread-126915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:05:22.530 [DEBUG] [Thread-126915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:05:22.530 [DEBUG] [Thread-126915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:05:22.554 [INFO] [Thread-126915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:05:22.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:05:23.192 [DEBUG] [Thread-126915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:05:23.192 [DEBUG] [Thread-126915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:05:23.193 [DEBUG] [Thread-126915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:05:23.233 [DEBUG] [Thread-126915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:05:23.233 [DEBUG] [Thread-126915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:05:23.236 [DEBUG] [Thread-126915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:05:23.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:05:23.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:05:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:05:23.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:05:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:05:23.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:05:23.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.961505 -999.00  +13.60  26.05     53   +4.30 1 1 1 1 1     0    0 8.49 -32.01 ZNESW 20.5 26.1 143.4 29.1 14.0 -24.9 13.8 -24.3 13.6 -22.6 14.0 -23.7
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:05:23.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.961505
2025-12-04T01:05:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:05:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:05:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:05:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:05:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:05:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:05:19', tmtdew=7.05, humidity=65.78, cloud=0.0, wind=24.65, temperature=9.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:05:19', seeing=1.13, atlas_timestamp='2025-12-03T23:04:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T23:02:00')
2025-12-04T01:05:23.262 [DEBUG] [Thread-126915] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:05:23.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:05:23.355 [DEBUG] [Thread-126918] [transport.py] [_log()] starting thread (client mode): 0xa2709690
2025-12-04T01:05:23.355 [DEBUG] [Thread-126918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:05:23.370 [DEBUG] [Thread-126918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:05:23.371 [INFO] [Thread-126918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:05:23.378 [DEBUG] [Thread-126918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:05:23.379 [DEBUG] [Thread-126918] [transport.py] [_log()] client lang: <none>
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] server lang: <none>
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] kex follows: False
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] Compression: none
2025-12-04T01:05:23.380 [DEBUG] [Thread-126918] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:05:23.436 [DEBUG] [Thread-126918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:05:23.437 [DEBUG] [Thread-126918] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:05:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:05:23.438 [DEBUG] [Thread-126918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:05:23.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:05:23.493 [DEBUG] [Thread-126918] [transport.py] [_log()] userauth is OK
2025-12-04T01:05:23.493 [DEBUG] [Thread-126918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:05:23.493 [DEBUG] [Thread-126918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:05:23.493 [DEBUG] [Thread-126918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:05:23.493 [DEBUG] [Thread-126918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:05:23.512 [INFO] [Thread-126918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:05:23.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:05:23.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:05:24.324 [DEBUG] [Thread-126918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:05:24.324 [DEBUG] [Thread-126918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:05:24.374 [DEBUG] [Thread-126918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:05:24.374 [DEBUG] [Thread-126918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:05:24.384 [DEBUG] [Thread-126918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:05:24.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:05:24.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:05:24.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:05:24.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:05:24.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:05:24.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:05:24.420 [DEBUG] [Thread-126918] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:05:26.331 [DEBUG] [Thread-126920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:29.719 [DEBUG] [Thread-126921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:35.452 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:35.454 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:39.633 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:44.764 [DEBUG] [Thread-126922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:05:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:05:54.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:05:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:05:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 5, 51), 7.08, 65.77, 0.0, 25.02, 8.98, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:05:55.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:05:51
2025-12-04T01:05:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:05:55.402 [DEBUG] [Thread-126923] [transport.py] [_log()] starting thread (client mode): 0xa2745900
2025-12-04T01:05:55.402 [DEBUG] [Thread-126923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:05:55.422 [DEBUG] [Thread-126923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:05:55.422 [INFO] [Thread-126923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] client lang: <none>
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] server lang: <none>
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] kex follows: False
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:05:55.423 [DEBUG] [Thread-126923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:05:55.424 [DEBUG] [Thread-126923] [transport.py] [_log()] Compression: none
2025-12-04T01:05:55.424 [DEBUG] [Thread-126923] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:05:55.443 [DEBUG] [Thread-126923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:05:55.443 [DEBUG] [Thread-126923] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:05:55.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:05:55.444 [DEBUG] [Thread-126923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:05:55.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:05:55.446 [DEBUG] [Thread-126923] [transport.py] [_log()] userauth is OK
2025-12-04T01:05:55.446 [DEBUG] [Thread-126923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:05:55.446 [DEBUG] [Thread-126923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:05:55.447 [DEBUG] [Thread-126923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:05:55.447 [DEBUG] [Thread-126923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:05:55.482 [INFO] [Thread-126923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:05:55.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:05:56.133 [DEBUG] [Thread-126923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:05:56.133 [DEBUG] [Thread-126923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:05:56.133 [DEBUG] [Thread-126923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:05:56.174 [DEBUG] [Thread-126923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:05:56.174 [DEBUG] [Thread-126923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:05:56.177 [DEBUG] [Thread-126923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:05:56.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:05:56.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:05:56.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:05:56.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:05:56.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:05:56.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:05:56.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.961852 -999.00  +13.70  29.31     53   +4.30 1 1 1 1 1     0    0 8.58 -30.56 ZNESW 24.6 29.3 147.0 31.8 14.0 -24.8 13.9 -24.3 13.7 -22.6 14.0 -23.5
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:05:56.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.961852
2025-12-04T01:05:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:05:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:05:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:05:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:05:56.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:05:56.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:05:51', tmtdew=7.08, humidity=65.77, cloud=0.0, wind=25.02, temperature=8.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:05:51', seeing=1.02, atlas_timestamp='2025-12-03T23:05:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011250000000000426, -0.018749999999998934, 0.01425000000000054, -0.01950000000000074, -0.05699999999999861, -0.021249999999998437, -0.0005000000000006111, -0.07874999999999943, -0.011499999999999844, -0.031000000000000583, 0.003249999999999531, -0.032999999999999474, 0.0990000000000002, 0.0072499999999990905, -0.0840000000000014, -0.10200000000000031, 0.019249999999999545, -0.022499999999999076, -0.03149999999999942, -0.015250000000001762, -0.02500000000000213, 0.045249999999999346, -0.004249999999998977, -0.036749999999999616, -0.005000000000000782, 0.029500000000000526, -0.045249999999999346, 0.021500000000001407, 0.07600000000000051, -0.06649999999999778, -0.43799999999999883, -0.07449999999999868, 0.03275000000000006], zp_timestamp='2025-12-03T23:02:00')
2025-12-04T01:05:56.202 [DEBUG] [Thread-126923] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:05:56.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:05:56.298 [DEBUG] [Thread-126926] [transport.py] [_log()] starting thread (client mode): 0xa5199c90
2025-12-04T01:05:56.298 [DEBUG] [Thread-126926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:05:56.312 [DEBUG] [Thread-126926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:05:56.313 [INFO] [Thread-126926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] client lang: <none>
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] server lang: <none>
2025-12-04T01:05:56.320 [DEBUG] [Thread-126926] [transport.py] [_log()] kex follows: False
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] Compression: none
2025-12-04T01:05:56.321 [DEBUG] [Thread-126926] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:05:56.383 [DEBUG] [Thread-126926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:05:56.384 [DEBUG] [Thread-126926] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:05:56.384 [DEBUG] [Thread-126926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:05:56.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:05:56.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:05:56.442 [DEBUG] [Thread-126926] [transport.py] [_log()] userauth is OK
2025-12-04T01:05:56.442 [DEBUG] [Thread-126926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:05:56.443 [DEBUG] [Thread-126926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:05:56.443 [DEBUG] [Thread-126926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:05:56.443 [DEBUG] [Thread-126926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:05:56.461 [INFO] [Thread-126926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:05:56.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:05:56.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:05:57.344 [DEBUG] [Thread-126926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:05:57.344 [DEBUG] [Thread-126926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:05:57.392 [DEBUG] [Thread-126926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:05:57.392 [DEBUG] [Thread-126926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:05:57.401 [DEBUG] [Thread-126926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:05:57.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:05:57.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:05:57.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:05:57.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:05:57.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:05:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:05:57.436 [DEBUG] [Thread-126926] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:05:59.792 [DEBUG] [Thread-126928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:00.012 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:14.837 [DEBUG] [Thread-126929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:20.404 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:26.401 [DEBUG] [Thread-126930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:27.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:06:27.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:06:27.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:06:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 6, 23), 10.61, 48.67, 0.0, 25.02, 13.66, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:06:28.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:06:23
2025-12-04T01:06:28.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:06:28.466 [DEBUG] [Thread-126931] [transport.py] [_log()] starting thread (client mode): 0xa27a0820
2025-12-04T01:06:28.466 [DEBUG] [Thread-126931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:06:28.487 [DEBUG] [Thread-126931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:06:28.487 [INFO] [Thread-126931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] client lang: <none>
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] server lang: <none>
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] kex follows: False
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] Compression: none
2025-12-04T01:06:28.490 [DEBUG] [Thread-126931] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:06:28.506 [DEBUG] [Thread-126931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:06:28.506 [DEBUG] [Thread-126931] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:06:28.506 [DEBUG] [Thread-126931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:06:28.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:06:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:06:28.507 [DEBUG] [Thread-126931] [transport.py] [_log()] userauth is OK
2025-12-04T01:06:28.507 [DEBUG] [Thread-126931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:06:28.507 [DEBUG] [Thread-126931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:06:28.507 [DEBUG] [Thread-126931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:06:28.507 [DEBUG] [Thread-126931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:06:28.516 [INFO] [Thread-126931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:06:28.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:06:29.147 [DEBUG] [Thread-126931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:06:29.148 [DEBUG] [Thread-126931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:06:29.148 [DEBUG] [Thread-126931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:06:29.189 [DEBUG] [Thread-126931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:06:29.189 [DEBUG] [Thread-126931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:06:29.191 [DEBUG] [Thread-126931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:06:29.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:06:29.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:06:29.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:06:29.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:06:29.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:06:29.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:06:29.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.962546 -999.00  +13.60  22.23     53   +4.30 1 1 1 1 1     0    0 8.69 -31.82 ZNESW 23.4 22.2 142.4 28.5 14.0 -24.9 13.9 -24.5 13.7 -22.7 13.9 -23.6
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.962546
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:06:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:06:23', tmtdew=10.61, humidity=48.67, cloud=0.0, wind=25.02, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:06:23', seeing=1.12, atlas_timestamp='2025-12-03T23:06:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:06:29.208 [DEBUG] [Thread-126931] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:06:29.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:06:29.295 [DEBUG] [Thread-126934] [transport.py] [_log()] starting thread (client mode): 0xa7bd2200
2025-12-04T01:06:29.295 [DEBUG] [Thread-126934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:06:29.311 [DEBUG] [Thread-126934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:06:29.311 [INFO] [Thread-126934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:06:29.318 [DEBUG] [Thread-126934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] client lang: <none>
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] server lang: <none>
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] kex follows: False
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] Compression: none
2025-12-04T01:06:29.319 [DEBUG] [Thread-126934] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:06:29.376 [DEBUG] [Thread-126934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:06:29.376 [DEBUG] [Thread-126934] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:06:29.376 [DEBUG] [Thread-126934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:06:29.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:06:29.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:06:29.433 [DEBUG] [Thread-126934] [transport.py] [_log()] userauth is OK
2025-12-04T01:06:29.433 [DEBUG] [Thread-126934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:06:29.433 [DEBUG] [Thread-126934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:06:29.433 [DEBUG] [Thread-126934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:06:29.433 [DEBUG] [Thread-126934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:06:29.451 [INFO] [Thread-126934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:06:29.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:06:29.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:06:29.864 [DEBUG] [Thread-126936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:30.296 [DEBUG] [Thread-126934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:06:30.296 [DEBUG] [Thread-126934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:06:30.343 [DEBUG] [Thread-126934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:06:30.343 [DEBUG] [Thread-126934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:06:30.351 [DEBUG] [Thread-126934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:06:30.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:06:30.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:06:30.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:06:30.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:06:30.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:06:30.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:06:30.383 [DEBUG] [Thread-126934] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:06:35.653 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:35.654 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:40.825 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:44.907 [DEBUG] [Thread-126937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:06:59.935 [DEBUG] [Thread-126938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:00.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:07:00.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:07:00.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:07:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 6, 55), 10.6, 48.68, 0.0, 23.77, 13.57, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:07:01.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:06:55
2025-12-04T01:07:01.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:07:01.262 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:01.359 [DEBUG] [Thread-126939] [transport.py] [_log()] starting thread (client mode): 0xa27a0c70
2025-12-04T01:07:01.359 [DEBUG] [Thread-126939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:07:01.378 [DEBUG] [Thread-126939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:07:01.378 [INFO] [Thread-126939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:07:01.379 [DEBUG] [Thread-126939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] client lang: <none>
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] server lang: <none>
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] kex follows: False
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] Compression: none
2025-12-04T01:07:01.380 [DEBUG] [Thread-126939] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:07:01.388 [DEBUG] [Thread-126939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:07:01.389 [DEBUG] [Thread-126939] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:07:01.389 [DEBUG] [Thread-126939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:07:01.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:07:01.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:07:01.390 [DEBUG] [Thread-126939] [transport.py] [_log()] userauth is OK
2025-12-04T01:07:01.391 [DEBUG] [Thread-126939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:07:01.391 [DEBUG] [Thread-126939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:07:01.391 [DEBUG] [Thread-126939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:07:01.391 [DEBUG] [Thread-126939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:07:01.426 [INFO] [Thread-126939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:07:01.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:07:02.069 [DEBUG] [Thread-126939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:07:02.069 [DEBUG] [Thread-126939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:07:02.069 [DEBUG] [Thread-126939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:07:02.110 [DEBUG] [Thread-126939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:07:02.110 [DEBUG] [Thread-126939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:07:02.113 [DEBUG] [Thread-126939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:07:02.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:07:02.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:07:02.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:07:02.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:07:02.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:07:02.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:07:02.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:07:02.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:07:02.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:07:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.962894 -999.00  +13.60  21.51     53   +4.30 1 1 1 1 1     0    0 8.21 -36.09 ZNESW 14.7 21.5 140.0 25.7 14.0 -24.9 13.9 -24.4 13.7 -22.8 14.0 -23.7
2025-12-04T01:07:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:07:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:07:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.962894
2025-12-04T01:07:02.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:07:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:07:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:07:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:07:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:07:02.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:06:55', tmtdew=10.6, humidity=48.68, cloud=0.0, wind=23.77, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:06:55', seeing=1.22, atlas_timestamp='2025-12-03T23:06:34.042', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:07:02.134 [DEBUG] [Thread-126939] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:07:02.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:07:02.230 [DEBUG] [Thread-126942] [transport.py] [_log()] starting thread (client mode): 0xa27a2dd0
2025-12-04T01:07:02.230 [DEBUG] [Thread-126942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:07:02.249 [DEBUG] [Thread-126942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:07:02.249 [INFO] [Thread-126942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:07:02.256 [DEBUG] [Thread-126942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] client lang: <none>
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] server lang: <none>
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] kex follows: False
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] Compression: none
2025-12-04T01:07:02.257 [DEBUG] [Thread-126942] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:07:02.314 [DEBUG] [Thread-126942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:07:02.315 [DEBUG] [Thread-126942] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:07:02.315 [DEBUG] [Thread-126942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:07:02.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:07:02.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:07:02.375 [DEBUG] [Thread-126942] [transport.py] [_log()] userauth is OK
2025-12-04T01:07:02.375 [DEBUG] [Thread-126942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:07:02.376 [DEBUG] [Thread-126942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:07:02.376 [DEBUG] [Thread-126942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:07:02.376 [DEBUG] [Thread-126942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:07:02.395 [INFO] [Thread-126942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:07:02.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:07:02.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:07:03.200 [DEBUG] [Thread-126942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:07:03.200 [DEBUG] [Thread-126942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:07:03.247 [DEBUG] [Thread-126942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:07:03.248 [DEBUG] [Thread-126942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:07:03.256 [DEBUG] [Thread-126942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:07:03.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:07:03.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:07:03.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:07:03.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:07:03.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:07:03.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:07:03.290 [DEBUG] [Thread-126942] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:07:14.963 [DEBUG] [Thread-126944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:21.654 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:26.459 [DEBUG] [Thread-126945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:30.012 [DEBUG] [Thread-126946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:33.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:07:33.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:07:33.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:07:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 7, 27), 10.6, 48.67, 0.0, 24.56, 13.54, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:07:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:07:27
2025-12-04T01:07:34.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:07:34.260 [DEBUG] [Thread-126947] [transport.py] [_log()] starting thread (client mode): 0xa27a2d10
2025-12-04T01:07:34.260 [DEBUG] [Thread-126947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:07:34.280 [DEBUG] [Thread-126947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:07:34.280 [INFO] [Thread-126947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:07:34.281 [DEBUG] [Thread-126947] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] client lang: <none>
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] server lang: <none>
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] kex follows: False
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] Compression: none
2025-12-04T01:07:34.282 [DEBUG] [Thread-126947] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:07:34.290 [DEBUG] [Thread-126947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:07:34.291 [DEBUG] [Thread-126947] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:07:34.291 [DEBUG] [Thread-126947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:07:34.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:07:34.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:07:34.292 [DEBUG] [Thread-126947] [transport.py] [_log()] userauth is OK
2025-12-04T01:07:34.292 [DEBUG] [Thread-126947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:07:34.293 [DEBUG] [Thread-126947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:07:34.293 [DEBUG] [Thread-126947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:07:34.293 [DEBUG] [Thread-126947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:07:34.327 [INFO] [Thread-126947] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:07:34.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:07:34.988 [DEBUG] [Thread-126947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:07:34.988 [DEBUG] [Thread-126947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:07:34.988 [DEBUG] [Thread-126947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:07:35.029 [DEBUG] [Thread-126947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:07:35.029 [DEBUG] [Thread-126947] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:07:35.032 [DEBUG] [Thread-126947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:07:35.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:07:35.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:07:35.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:07:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:07:35.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:07:35.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:07:35.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:07:35.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:07:35.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:07:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.963241 -999.00  +13.60  22.89     53   +4.20 1 1 1 1 1     0    0 8.43 -36.37 ZNESW 18.4 22.9 140.0 24.4 14.0 -24.8 13.8 -24.3 13.7 -22.8 14.0 -23.6
2025-12-04T01:07:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:07:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:07:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.963241
2025-12-04T01:07:35.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:07:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:07:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:07:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:07:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:07:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:07:27', tmtdew=10.6, humidity=48.67, cloud=0.0, wind=24.56, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:07:27', seeing=1.32, atlas_timestamp='2025-12-03T23:07:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:07:35.055 [DEBUG] [Thread-126947] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:07:35.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:07:35.153 [DEBUG] [Thread-126950] [transport.py] [_log()] starting thread (client mode): 0xa51ce590
2025-12-04T01:07:35.153 [DEBUG] [Thread-126950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:07:35.167 [DEBUG] [Thread-126950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:07:35.168 [INFO] [Thread-126950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:07:35.175 [DEBUG] [Thread-126950] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:07:35.175 [DEBUG] [Thread-126950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:07:35.175 [DEBUG] [Thread-126950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:07:35.175 [DEBUG] [Thread-126950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:35.175 [DEBUG] [Thread-126950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] client lang: <none>
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] server lang: <none>
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] kex follows: False
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:07:35.176 [DEBUG] [Thread-126950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:07:35.177 [DEBUG] [Thread-126950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:07:35.177 [DEBUG] [Thread-126950] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:07:35.177 [DEBUG] [Thread-126950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:07:35.177 [DEBUG] [Thread-126950] [transport.py] [_log()] Compression: none
2025-12-04T01:07:35.177 [DEBUG] [Thread-126950] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:07:35.234 [DEBUG] [Thread-126950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:07:35.235 [DEBUG] [Thread-126950] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:07:35.235 [DEBUG] [Thread-126950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:07:35.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:07:35.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:07:35.293 [DEBUG] [Thread-126950] [transport.py] [_log()] userauth is OK
2025-12-04T01:07:35.294 [DEBUG] [Thread-126950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:07:35.294 [DEBUG] [Thread-126950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:07:35.294 [DEBUG] [Thread-126950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:07:35.294 [DEBUG] [Thread-126950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:07:35.317 [INFO] [Thread-126950] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:07:35.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:07:35.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:07:35.854 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:35.856 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:36.144 [DEBUG] [Thread-126950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:07:36.144 [DEBUG] [Thread-126950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:07:36.193 [DEBUG] [Thread-126950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:07:36.193 [DEBUG] [Thread-126950] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:07:36.203 [DEBUG] [Thread-126950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:07:36.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:07:36.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:07:36.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:07:36.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:07:36.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:07:36.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:07:36.246 [DEBUG] [Thread-126950] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:07:42.035 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:07:45.040 [DEBUG] [Thread-126952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:00.072 [DEBUG] [Thread-126953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:02.497 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:06.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:08:06.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:08:06.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:08:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 7, 59), 10.55, 48.7, 0.0, 26.06, 13.56, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:08:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:07:59
2025-12-04T01:08:07.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:08:07.233 [DEBUG] [Thread-126954] [transport.py] [_log()] starting thread (client mode): 0xa2785270
2025-12-04T01:08:07.233 [DEBUG] [Thread-126954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:08:07.254 [DEBUG] [Thread-126954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:08:07.254 [INFO] [Thread-126954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:08:07.257 [DEBUG] [Thread-126954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] client lang: <none>
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] server lang: <none>
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] kex follows: False
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:08:07.258 [DEBUG] [Thread-126954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:08:07.259 [DEBUG] [Thread-126954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:08:07.259 [DEBUG] [Thread-126954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:08:07.259 [DEBUG] [Thread-126954] [transport.py] [_log()] Compression: none
2025-12-04T01:08:07.259 [DEBUG] [Thread-126954] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:08:07.275 [DEBUG] [Thread-126954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:08:07.276 [DEBUG] [Thread-126954] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:08:07.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:08:07.277 [DEBUG] [Thread-126954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:08:07.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:08:07.279 [DEBUG] [Thread-126954] [transport.py] [_log()] userauth is OK
2025-12-04T01:08:07.279 [DEBUG] [Thread-126954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:08:07.279 [DEBUG] [Thread-126954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:08:07.279 [DEBUG] [Thread-126954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:08:07.279 [DEBUG] [Thread-126954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:08:07.301 [INFO] [Thread-126954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:08:07.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:08:07.971 [DEBUG] [Thread-126954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:08:07.971 [DEBUG] [Thread-126954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:08:07.971 [DEBUG] [Thread-126954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:08:08.012 [DEBUG] [Thread-126954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:08:08.012 [DEBUG] [Thread-126954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:08:08.015 [DEBUG] [Thread-126954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:08:08.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:08:08.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:08:08.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:08:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:08:08.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:08:08.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:08:08.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:08:08.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:08:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:08:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.963589 -999.00  +13.60  24.78     53   +4.20 1 1 1 1 1     0    0 8.49 -36.11 ZNESW 23.0 24.8 143.2 26.4 14.0 -24.9 13.8 -24.5 13.7 -22.7 13.9 -23.5
2025-12-04T01:08:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:08:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:08:08.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.963589
2025-12-04T01:08:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:08:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:08:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:08:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:08:08.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:08:08.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:07:59', tmtdew=10.55, humidity=48.7, cloud=0.0, wind=26.06, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:07:59', seeing=1.11, atlas_timestamp='2025-12-03T23:07:34.090', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:08:08.041 [DEBUG] [Thread-126954] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:08:08.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:08:08.137 [DEBUG] [Thread-126957] [transport.py] [_log()] starting thread (client mode): 0x9fd22ef0
2025-12-04T01:08:08.137 [DEBUG] [Thread-126957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:08:08.152 [DEBUG] [Thread-126957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:08:08.152 [INFO] [Thread-126957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:08.159 [DEBUG] [Thread-126957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] client lang: <none>
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] server lang: <none>
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] kex follows: False
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] Compression: none
2025-12-04T01:08:08.160 [DEBUG] [Thread-126957] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:08:08.215 [DEBUG] [Thread-126957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:08:08.216 [DEBUG] [Thread-126957] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:08:08.216 [DEBUG] [Thread-126957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:08:08.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:08:08.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:08:08.272 [DEBUG] [Thread-126957] [transport.py] [_log()] userauth is OK
2025-12-04T01:08:08.272 [DEBUG] [Thread-126957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:08:08.272 [DEBUG] [Thread-126957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:08:08.272 [DEBUG] [Thread-126957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:08:08.272 [DEBUG] [Thread-126957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:08:08.291 [INFO] [Thread-126957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:08:08.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:08:08.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:08:09.161 [DEBUG] [Thread-126957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:08:09.162 [DEBUG] [Thread-126957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:08:09.210 [DEBUG] [Thread-126957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:08:09.210 [DEBUG] [Thread-126957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:08:09.218 [DEBUG] [Thread-126957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:08:09.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:08:09.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:08:09.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:08:09.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:08:09.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:08:09.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:08:09.252 [DEBUG] [Thread-126957] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:08:15.102 [DEBUG] [Thread-126959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:22.866 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:26.518 [DEBUG] [Thread-126960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:30.146 [DEBUG] [Thread-126961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:36.052 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:36.053 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:08:39.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:08:39.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:08:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 8, 31), 10.53, 48.77, 0.0, 24.49, 13.57, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:08:39.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:08:31
2025-12-04T01:08:40.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:08:40.227 [DEBUG] [Thread-126962] [transport.py] [_log()] starting thread (client mode): 0xa2785ab0
2025-12-04T01:08:40.228 [DEBUG] [Thread-126962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:08:40.248 [DEBUG] [Thread-126962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:08:40.248 [INFO] [Thread-126962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:08:40.252 [DEBUG] [Thread-126962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] client lang: <none>
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] server lang: <none>
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] kex follows: False
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] Compression: none
2025-12-04T01:08:40.253 [DEBUG] [Thread-126962] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:08:40.273 [DEBUG] [Thread-126962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:08:40.274 [DEBUG] [Thread-126962] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:08:40.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:08:40.275 [DEBUG] [Thread-126962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:08:40.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:08:40.277 [DEBUG] [Thread-126962] [transport.py] [_log()] userauth is OK
2025-12-04T01:08:40.277 [DEBUG] [Thread-126962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:08:40.277 [DEBUG] [Thread-126962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:08:40.277 [DEBUG] [Thread-126962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:08:40.277 [DEBUG] [Thread-126962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:08:40.311 [INFO] [Thread-126962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:08:40.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:08:40.964 [DEBUG] [Thread-126962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:08:40.965 [DEBUG] [Thread-126962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:08:40.965 [DEBUG] [Thread-126962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:08:41.006 [DEBUG] [Thread-126962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:08:41.006 [DEBUG] [Thread-126962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:08:41.009 [DEBUG] [Thread-126962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:08:41.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:08:41.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:08:41.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:08:41.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:08:41.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:08:41.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:08:41.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:08:41.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:08:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:08:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.963935 -999.00  +13.50  19.34     53   +4.20 1 1 1 1 1     0    0 8.48 -35.47 ZNESW 22.6 19.3 139.0 26.4 14.0 -25.0 13.8 -24.4 13.7 -22.8 13.9 -23.8
2025-12-04T01:08:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:08:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:08:41.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.963935
2025-12-04T01:08:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:08:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:08:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:08:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:08:41.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:08:41.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:08:31', tmtdew=10.53, humidity=48.77, cloud=0.0, wind=24.49, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:08:31', seeing=1.11, atlas_timestamp='2025-12-03T23:08:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:08:41.037 [DEBUG] [Thread-126962] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:08:41.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:08:41.133 [DEBUG] [Thread-126965] [transport.py] [_log()] starting thread (client mode): 0xa2786620
2025-12-04T01:08:41.134 [DEBUG] [Thread-126965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:08:41.151 [DEBUG] [Thread-126965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:08:41.151 [INFO] [Thread-126965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:08:41.160 [DEBUG] [Thread-126965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:08:41.160 [DEBUG] [Thread-126965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] client lang: <none>
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] server lang: <none>
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] kex follows: False
2025-12-04T01:08:41.161 [DEBUG] [Thread-126965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] Compression: none
2025-12-04T01:08:41.162 [DEBUG] [Thread-126965] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:08:41.226 [DEBUG] [Thread-126965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:08:41.226 [DEBUG] [Thread-126965] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:08:41.227 [DEBUG] [Thread-126965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:08:41.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:08:41.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:08:41.281 [DEBUG] [Thread-126965] [transport.py] [_log()] userauth is OK
2025-12-04T01:08:41.282 [DEBUG] [Thread-126965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:08:41.282 [DEBUG] [Thread-126965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:08:41.282 [DEBUG] [Thread-126965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:08:41.282 [DEBUG] [Thread-126965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:08:41.300 [INFO] [Thread-126965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:08:41.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:08:41.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:08:42.187 [DEBUG] [Thread-126965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:08:42.187 [DEBUG] [Thread-126965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:08:42.235 [DEBUG] [Thread-126965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:08:42.235 [DEBUG] [Thread-126965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:08:42.243 [DEBUG] [Thread-126965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:08:42.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:08:42.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:08:42.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:08:42.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:08:42.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:08:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:08:42.277 [DEBUG] [Thread-126965] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:08:43.250 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:08:45.175 [DEBUG] [Thread-126967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:00.219 [DEBUG] [Thread-126968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:03.642 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:12.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:09:12.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:09:12.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:09:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 9, 3), 10.51, 48.82, 0.0, 25.27, 13.51, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:09:12.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:09:03
2025-12-04T01:09:13.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:09:13.222 [DEBUG] [Thread-126969] [transport.py] [_log()] starting thread (client mode): 0xa7bd0ee0
2025-12-04T01:09:13.222 [DEBUG] [Thread-126969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:09:13.242 [DEBUG] [Thread-126969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:09:13.242 [INFO] [Thread-126969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] client lang: <none>
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] server lang: <none>
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] kex follows: False
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:09:13.245 [DEBUG] [Thread-126969] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:09:13.246 [DEBUG] [Thread-126969] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:09:13.246 [DEBUG] [Thread-126969] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:09:13.246 [DEBUG] [Thread-126969] [transport.py] [_log()] Compression: none
2025-12-04T01:09:13.246 [DEBUG] [Thread-126969] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:09:13.262 [DEBUG] [Thread-126969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:09:13.262 [DEBUG] [Thread-126969] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:09:13.263 [DEBUG] [Thread-126969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:09:13.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:09:13.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:09:13.264 [DEBUG] [Thread-126969] [transport.py] [_log()] userauth is OK
2025-12-04T01:09:13.265 [DEBUG] [Thread-126969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:09:13.265 [DEBUG] [Thread-126969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:09:13.265 [DEBUG] [Thread-126969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:09:13.265 [DEBUG] [Thread-126969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:09:13.288 [INFO] [Thread-126969] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:09:13.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:09:13.938 [DEBUG] [Thread-126969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:09:13.938 [DEBUG] [Thread-126969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:09:13.938 [DEBUG] [Thread-126969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:09:13.979 [DEBUG] [Thread-126969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:09:13.979 [DEBUG] [Thread-126969] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:09:13.981 [DEBUG] [Thread-126969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:09:13.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:09:13.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:09:13.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:09:13.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:09:14.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:09:14.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:09:14.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.964282 -999.00  +13.50  17.14     53   +4.20 1 1 1 1 1     0    0 8.22 -37.26 ZNESW 17.6 17.1 143.9 25.3 13.9 -24.9 13.8 -24.4 13.6 -22.9 13.9 -23.7
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:09:14.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.964282
2025-12-04T01:09:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:09:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:09:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:09:14.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:09:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:09:14.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:09:03', tmtdew=10.51, humidity=48.82, cloud=0.0, wind=25.27, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:09:03', seeing=1.1, atlas_timestamp='2025-12-03T23:08:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:05:00')
2025-12-04T01:09:14.006 [DEBUG] [Thread-126969] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:09:14.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:09:14.104 [DEBUG] [Thread-126972] [transport.py] [_log()] starting thread (client mode): 0xa51ba5f0
2025-12-04T01:09:14.104 [DEBUG] [Thread-126972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:09:14.118 [DEBUG] [Thread-126972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:09:14.119 [INFO] [Thread-126972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:09:14.126 [DEBUG] [Thread-126972] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:09:14.126 [DEBUG] [Thread-126972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:09:14.126 [DEBUG] [Thread-126972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:09:14.126 [DEBUG] [Thread-126972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] client lang: <none>
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] server lang: <none>
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] kex follows: False
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] Compression: none
2025-12-04T01:09:14.127 [DEBUG] [Thread-126972] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:09:14.185 [DEBUG] [Thread-126972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:09:14.185 [DEBUG] [Thread-126972] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:09:14.186 [DEBUG] [Thread-126972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:09:14.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:09:14.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:09:14.247 [DEBUG] [Thread-126972] [transport.py] [_log()] userauth is OK
2025-12-04T01:09:14.247 [DEBUG] [Thread-126972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:09:14.248 [DEBUG] [Thread-126972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:09:14.248 [DEBUG] [Thread-126972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:09:14.248 [DEBUG] [Thread-126972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:09:14.270 [INFO] [Thread-126972] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:09:14.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:09:14.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:09:15.150 [DEBUG] [Thread-126972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:09:15.150 [DEBUG] [Thread-126972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:09:15.198 [DEBUG] [Thread-126972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:09:15.198 [DEBUG] [Thread-126972] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:09:15.207 [DEBUG] [Thread-126972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:09:15.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:09:15.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:09:15.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:09:15.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:09:15.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:09:15.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:09:15.241 [DEBUG] [Thread-126972] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:09:15.243 [DEBUG] [Thread-126974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:24.050 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:26.588 [DEBUG] [Thread-126975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:30.298 [DEBUG] [Thread-126976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:36.253 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:36.254 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:44.431 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:45.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:09:45.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:09:45.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:09:45.324 [DEBUG] [Thread-126977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:09:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 9, 35), 10.6, 48.87, 0.0, 27.67, 13.58, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:09:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:09:35
2025-12-04T01:09:46.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:09:46.215 [DEBUG] [Thread-126978] [transport.py] [_log()] starting thread (client mode): 0xa51b94e0
2025-12-04T01:09:46.215 [DEBUG] [Thread-126978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:09:46.235 [DEBUG] [Thread-126978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:09:46.235 [INFO] [Thread-126978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:09:46.238 [DEBUG] [Thread-126978] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:09:46.238 [DEBUG] [Thread-126978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:09:46.238 [DEBUG] [Thread-126978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:09:46.238 [DEBUG] [Thread-126978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:46.238 [DEBUG] [Thread-126978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] client lang: <none>
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] server lang: <none>
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] kex follows: False
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] Compression: none
2025-12-04T01:09:46.239 [DEBUG] [Thread-126978] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:09:46.256 [DEBUG] [Thread-126978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:09:46.256 [DEBUG] [Thread-126978] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:09:46.256 [DEBUG] [Thread-126978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:09:46.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:09:46.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:09:46.300 [DEBUG] [Thread-126978] [transport.py] [_log()] userauth is OK
2025-12-04T01:09:46.300 [DEBUG] [Thread-126978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:09:46.300 [DEBUG] [Thread-126978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:09:46.300 [DEBUG] [Thread-126978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:09:46.300 [DEBUG] [Thread-126978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:09:46.315 [INFO] [Thread-126978] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:09:46.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:09:46.897 [DEBUG] [Thread-126978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:09:46.897 [DEBUG] [Thread-126978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:09:46.898 [DEBUG] [Thread-126978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:09:46.939 [DEBUG] [Thread-126978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:09:46.939 [DEBUG] [Thread-126978] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:09:46.942 [DEBUG] [Thread-126978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:09:46.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:09:46.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:09:46.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:09:46.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:09:46.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:09:46.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:09:46.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.964977 -999.00  +13.50  25.97     53   +4.20 1 1 1 1 1     0    0 8.51 -33.88 ZNESW 23.9 26.0 143.6 27.4 14.0 -24.8 13.8 -24.3 13.6 -22.9 13.9 -23.6
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.964977
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:09:46.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:09:46.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:09:35', tmtdew=10.6, humidity=48.87, cloud=0.0, wind=27.67, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:09:35', seeing=1.21, atlas_timestamp='2025-12-03T23:09:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:08:00')
2025-12-04T01:09:46.952 [DEBUG] [Thread-126978] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:09:47.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:09:47.037 [DEBUG] [Thread-126981] [transport.py] [_log()] starting thread (client mode): 0xa277ad40
2025-12-04T01:09:47.037 [DEBUG] [Thread-126981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:09:47.051 [DEBUG] [Thread-126981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:09:47.051 [INFO] [Thread-126981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] client lang: <none>
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] server lang: <none>
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] kex follows: False
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] Compression: none
2025-12-04T01:09:47.059 [DEBUG] [Thread-126981] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:09:47.117 [DEBUG] [Thread-126981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:09:47.117 [DEBUG] [Thread-126981] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:09:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:09:47.117 [DEBUG] [Thread-126981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:09:47.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:09:47.173 [DEBUG] [Thread-126981] [transport.py] [_log()] userauth is OK
2025-12-04T01:09:47.173 [DEBUG] [Thread-126981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:09:47.173 [DEBUG] [Thread-126981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:09:47.173 [DEBUG] [Thread-126981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:09:47.173 [DEBUG] [Thread-126981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:09:47.190 [INFO] [Thread-126981] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:09:47.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:09:47.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:09:47.999 [DEBUG] [Thread-126981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:09:47.999 [DEBUG] [Thread-126981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:09:48.047 [DEBUG] [Thread-126981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:09:48.047 [DEBUG] [Thread-126981] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:09:48.056 [DEBUG] [Thread-126981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:09:48.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:09:48.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:09:48.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:09:48.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:09:48.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:09:48.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:09:48.090 [DEBUG] [Thread-126981] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:10:00.350 [DEBUG] [Thread-126983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:04.856 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:15.391 [DEBUG] [Thread-126984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:18.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:10:18.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:10:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:10:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 10, 7), 10.6, 48.85, 0.0, 28.2, 13.56, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:10:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:10:07
2025-12-04T01:10:18.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:10:19.087 [DEBUG] [Thread-126985] [transport.py] [_log()] starting thread (client mode): 0x9fd22080
2025-12-04T01:10:19.087 [DEBUG] [Thread-126985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:10:19.108 [DEBUG] [Thread-126985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:10:19.108 [INFO] [Thread-126985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] client lang: <none>
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] server lang: <none>
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] kex follows: False
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:10:19.111 [DEBUG] [Thread-126985] [transport.py] [_log()] Compression: none
2025-12-04T01:10:19.112 [DEBUG] [Thread-126985] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:10:19.127 [DEBUG] [Thread-126985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:10:19.128 [DEBUG] [Thread-126985] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:10:19.128 [DEBUG] [Thread-126985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:10:19.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:10:19.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:10:19.130 [DEBUG] [Thread-126985] [transport.py] [_log()] userauth is OK
2025-12-04T01:10:19.130 [DEBUG] [Thread-126985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:10:19.130 [DEBUG] [Thread-126985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:10:19.130 [DEBUG] [Thread-126985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:10:19.130 [DEBUG] [Thread-126985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:10:19.148 [INFO] [Thread-126985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:10:19.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:10:19.729 [DEBUG] [Thread-126985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:10:19.729 [DEBUG] [Thread-126985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:10:19.729 [DEBUG] [Thread-126985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:10:19.770 [DEBUG] [Thread-126985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:10:19.770 [DEBUG] [Thread-126985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:10:19.773 [DEBUG] [Thread-126985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:10:19.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:10:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:10:19.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:10:19.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:10:19.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:10:19.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:10:19.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:10:19.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.965324 -999.00  +13.50  19.88     53   +4.20 1 1 1 1 1     0    0 8.62 -31.42 ZNESW 17.9 19.9 148.2 25.2 13.9 -24.8 13.8 -24.4 13.6 -23.0 13.9 -23.7
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.965324
2025-12-04T01:10:19.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:10:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:10:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:10:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:10:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:10:19.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:10:07', tmtdew=10.6, humidity=48.85, cloud=0.0, wind=28.2, temperature=13.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:10:07', seeing=1.13, atlas_timestamp='2025-12-03T23:10:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:08:00')
2025-12-04T01:10:19.796 [DEBUG] [Thread-126985] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:10:19.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:10:19.890 [DEBUG] [Thread-126988] [transport.py] [_log()] starting thread (client mode): 0x9fd21c60
2025-12-04T01:10:19.890 [DEBUG] [Thread-126988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:10:19.905 [DEBUG] [Thread-126988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:10:19.905 [INFO] [Thread-126988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] client lang: <none>
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] server lang: <none>
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] kex follows: False
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:10:19.912 [DEBUG] [Thread-126988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:10:19.913 [DEBUG] [Thread-126988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:10:19.913 [DEBUG] [Thread-126988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:10:19.913 [DEBUG] [Thread-126988] [transport.py] [_log()] Compression: none
2025-12-04T01:10:19.913 [DEBUG] [Thread-126988] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:10:19.969 [DEBUG] [Thread-126988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:10:19.969 [DEBUG] [Thread-126988] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:10:19.969 [DEBUG] [Thread-126988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:10:19.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:10:19.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:10:20.027 [DEBUG] [Thread-126988] [transport.py] [_log()] userauth is OK
2025-12-04T01:10:20.027 [DEBUG] [Thread-126988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:10:20.027 [DEBUG] [Thread-126988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:10:20.027 [DEBUG] [Thread-126988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:10:20.027 [DEBUG] [Thread-126988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:10:20.046 [INFO] [Thread-126988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:10:20.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:10:20.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:10:20.863 [DEBUG] [Thread-126988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:10:20.863 [DEBUG] [Thread-126988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:10:20.910 [DEBUG] [Thread-126988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:10:20.910 [DEBUG] [Thread-126988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:10:20.919 [DEBUG] [Thread-126988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:10:20.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:10:20.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:10:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:10:20.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:10:20.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:10:20.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:10:20.950 [DEBUG] [Thread-126988] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:10:25.345 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:26.653 [DEBUG] [Thread-126990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:30.423 [DEBUG] [Thread-126991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:36.463 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:36.464 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:45.474 [DEBUG] [Thread-126992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:45.753 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:10:50.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:10:50.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:10:50.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:10:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 10, 39), 10.53, 48.9, 0.0, 27.44, 13.48, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:10:51.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:10:39
2025-12-04T01:10:51.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:10:51.918 [DEBUG] [Thread-126993] [transport.py] [_log()] starting thread (client mode): 0x9fd23b20
2025-12-04T01:10:51.918 [DEBUG] [Thread-126993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:10:51.937 [DEBUG] [Thread-126993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:10:51.937 [INFO] [Thread-126993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] client lang: <none>
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] server lang: <none>
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] kex follows: False
2025-12-04T01:10:51.941 [DEBUG] [Thread-126993] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] Compression: none
2025-12-04T01:10:51.942 [DEBUG] [Thread-126993] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:10:51.960 [DEBUG] [Thread-126993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:10:51.960 [DEBUG] [Thread-126993] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:10:51.961 [DEBUG] [Thread-126993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:10:51.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:10:51.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:10:51.963 [DEBUG] [Thread-126993] [transport.py] [_log()] userauth is OK
2025-12-04T01:10:51.963 [DEBUG] [Thread-126993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:10:51.963 [DEBUG] [Thread-126993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:10:51.964 [DEBUG] [Thread-126993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:10:51.964 [DEBUG] [Thread-126993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:10:51.986 [INFO] [Thread-126993] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:10:51.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:10:52.550 [DEBUG] [Thread-126993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:10:52.550 [DEBUG] [Thread-126993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:10:52.551 [DEBUG] [Thread-126993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:10:52.592 [DEBUG] [Thread-126993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:10:52.592 [DEBUG] [Thread-126993] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:10:52.594 [DEBUG] [Thread-126993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:10:52.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:10:52.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:10:52.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:10:52.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:10:52.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:10:52.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:10:52.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:10:52.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.965671 -999.00  +13.50  24.44     53   +4.20 1 1 1 1 1     0    0 8.72 -29.89 ZNESW 22.9 24.4 146.8 31.0 13.9 -24.9 13.8 -24.3 13.6 -22.9 13.9 -23.8
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.965671
2025-12-04T01:10:52.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:10:52.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:10:52.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:10:52.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:10:52.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:10:52.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:10:39', tmtdew=10.53, humidity=48.9, cloud=0.0, wind=27.44, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:10:39', seeing=1.17, atlas_timestamp='2025-12-03T23:10:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:08:00')
2025-12-04T01:10:52.615 [DEBUG] [Thread-126993] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:10:52.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:10:52.710 [DEBUG] [Thread-126996] [transport.py] [_log()] starting thread (client mode): 0x9fd216f0
2025-12-04T01:10:52.710 [DEBUG] [Thread-126996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:10:52.724 [DEBUG] [Thread-126996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:10:52.725 [INFO] [Thread-126996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:10:52.732 [DEBUG] [Thread-126996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] client lang: <none>
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] server lang: <none>
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] kex follows: False
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] Compression: none
2025-12-04T01:10:52.733 [DEBUG] [Thread-126996] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:10:52.799 [DEBUG] [Thread-126996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:10:52.799 [DEBUG] [Thread-126996] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:10:52.800 [DEBUG] [Thread-126996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:10:52.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:10:52.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:10:52.856 [DEBUG] [Thread-126996] [transport.py] [_log()] userauth is OK
2025-12-04T01:10:52.856 [DEBUG] [Thread-126996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:10:52.856 [DEBUG] [Thread-126996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:10:52.856 [DEBUG] [Thread-126996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:10:52.856 [DEBUG] [Thread-126996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:10:52.879 [INFO] [Thread-126996] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:10:52.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:10:52.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:10:53.671 [DEBUG] [Thread-126996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:10:53.671 [DEBUG] [Thread-126996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:10:53.720 [DEBUG] [Thread-126996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:10:53.720 [DEBUG] [Thread-126996] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:10:53.729 [DEBUG] [Thread-126996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:10:53.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:10:53.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:10:53.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:10:53.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:10:53.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:10:53.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:10:53.762 [DEBUG] [Thread-126996] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:11:00.503 [DEBUG] [Thread-126998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:06.182 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:15.538 [DEBUG] [Thread-126999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:23.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:11:23.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:11:23.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:11:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 11, 11), 10.53, 48.93, 0.0, 27.21, 13.53, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:11:24.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:11:11
2025-12-04T01:11:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:11:24.755 [DEBUG] [Thread-127000] [transport.py] [_log()] starting thread (client mode): 0xa27a3cd0
2025-12-04T01:11:24.755 [DEBUG] [Thread-127000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:11:24.777 [DEBUG] [Thread-127000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:11:24.777 [INFO] [Thread-127000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] client lang: <none>
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] server lang: <none>
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] kex follows: False
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] Compression: none
2025-12-04T01:11:24.781 [DEBUG] [Thread-127000] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:11:24.799 [DEBUG] [Thread-127000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:11:24.799 [DEBUG] [Thread-127000] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:11:24.800 [DEBUG] [Thread-127000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:11:24.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:11:24.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:11:24.802 [DEBUG] [Thread-127000] [transport.py] [_log()] userauth is OK
2025-12-04T01:11:24.802 [DEBUG] [Thread-127000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:11:24.802 [DEBUG] [Thread-127000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:11:24.802 [DEBUG] [Thread-127000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:11:24.802 [DEBUG] [Thread-127000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:11:24.825 [INFO] [Thread-127000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:11:24.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:11:25.484 [DEBUG] [Thread-127000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:11:25.484 [DEBUG] [Thread-127000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:11:25.484 [DEBUG] [Thread-127000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:11:25.525 [DEBUG] [Thread-127000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:11:25.525 [DEBUG] [Thread-127000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:11:25.529 [DEBUG] [Thread-127000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:11:25.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:11:25.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:11:25.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:11:25.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:11:25.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:11:25.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:11:25.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.965671 -999.00  +13.50  24.44     53   +4.20 1 1 1 1 1     0    0 8.72 -29.89 ZNESW 22.9 24.4 146.8 31.0 13.9 -24.9 13.8 -24.3 13.6 -22.9 13.9 -23.8
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:11:25.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.965671
2025-12-04T01:11:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:11:25.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:11:25.553 [DEBUG] [Thread-127000] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:11:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:11:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:11:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:11:25.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:11:11', tmtdew=10.53, humidity=48.93, cloud=0.0, wind=27.21, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:11:11', seeing=1.09, atlas_timestamp='2025-12-03T23:10:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:08:00')
2025-12-04T01:11:25.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:11:25.651 [DEBUG] [Thread-127003] [transport.py] [_log()] starting thread (client mode): 0xa519b700
2025-12-04T01:11:25.651 [DEBUG] [Thread-127003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:11:25.666 [DEBUG] [Thread-127003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:11:25.666 [INFO] [Thread-127003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:11:25.680 [DEBUG] [Thread-127003] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:11:25.680 [DEBUG] [Thread-127003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] client lang: <none>
2025-12-04T01:11:25.681 [DEBUG] [Thread-127003] [transport.py] [_log()] server lang: <none>
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] kex follows: False
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] Compression: none
2025-12-04T01:11:25.682 [DEBUG] [Thread-127003] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:11:25.743 [DEBUG] [Thread-127003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:11:25.744 [DEBUG] [Thread-127003] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:11:25.744 [DEBUG] [Thread-127003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:11:25.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:11:25.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:11:25.802 [DEBUG] [Thread-127003] [transport.py] [_log()] userauth is OK
2025-12-04T01:11:25.802 [DEBUG] [Thread-127003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:11:25.802 [DEBUG] [Thread-127003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:11:25.802 [DEBUG] [Thread-127003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:11:25.802 [DEBUG] [Thread-127003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:11:25.825 [INFO] [Thread-127003] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:11:25.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:11:25.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:11:26.562 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:26.660 [DEBUG] [Thread-127003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:11:26.661 [DEBUG] [Thread-127003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:11:26.709 [DEBUG] [Thread-127003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:11:26.709 [DEBUG] [Thread-127003] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:11:26.711 [DEBUG] [Thread-127005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:26.717 [DEBUG] [Thread-127003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:11:26.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:11:26.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:11:26.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:11:26.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:11:26.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:11:26.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:11:26.749 [DEBUG] [Thread-127003] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:11:30.569 [DEBUG] [Thread-127006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:36.677 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:36.678 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:45.608 [DEBUG] [Thread-127007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:46.943 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:11:56.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:11:56.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:11:56.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:11:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 11, 43), 10.57, 48.78, 0.0, 24.91, 13.53, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:11:57.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:11:43
2025-12-04T01:11:57.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:11:57.722 [DEBUG] [Thread-127008] [transport.py] [_log()] starting thread (client mode): 0x9fd210c0
2025-12-04T01:11:57.722 [DEBUG] [Thread-127008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:11:57.742 [DEBUG] [Thread-127008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:11:57.742 [INFO] [Thread-127008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:11:57.745 [DEBUG] [Thread-127008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:11:57.745 [DEBUG] [Thread-127008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:11:57.745 [DEBUG] [Thread-127008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:11:57.745 [DEBUG] [Thread-127008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:57.745 [DEBUG] [Thread-127008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] client lang: <none>
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] server lang: <none>
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] kex follows: False
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] Compression: none
2025-12-04T01:11:57.746 [DEBUG] [Thread-127008] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:11:57.764 [DEBUG] [Thread-127008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:11:57.765 [DEBUG] [Thread-127008] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:11:57.765 [DEBUG] [Thread-127008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:11:57.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:11:57.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:11:57.767 [DEBUG] [Thread-127008] [transport.py] [_log()] userauth is OK
2025-12-04T01:11:57.767 [DEBUG] [Thread-127008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:11:57.767 [DEBUG] [Thread-127008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:11:57.767 [DEBUG] [Thread-127008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:11:57.767 [DEBUG] [Thread-127008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:11:57.790 [INFO] [Thread-127008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:11:57.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:11:58.430 [DEBUG] [Thread-127008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:11:58.430 [DEBUG] [Thread-127008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:11:58.430 [DEBUG] [Thread-127008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:11:58.471 [DEBUG] [Thread-127008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:11:58.471 [DEBUG] [Thread-127008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:11:58.474 [DEBUG] [Thread-127008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:11:58.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:11:58.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:11:58.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:11:58.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:11:58.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:11:58.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:11:58.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:11:58.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.966018 -999.00  +13.50  22.15     53   +4.20 1 1 1 1 1     0    0 8.56 -28.99 ZNESW 19.4 22.1 147.4 27.2 13.9 -24.8 13.8 -24.4 13.6 -22.7 13.9 -23.6
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.966018
2025-12-04T01:11:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:11:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:11:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:11:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:11:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:11:58.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:11:43', tmtdew=10.57, humidity=48.78, cloud=0.0, wind=24.91, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:11:43', seeing=1.09, atlas_timestamp='2025-12-03T23:11:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.007750000000001478, 0.03325000000000067, 0.03950000000000031, 0.0005000000000006111, 0.024250000000000327, 0.07499999999999929, -0.02424999999999855, 0.01750000000000007, 0.006999999999999673, 0.03125, 0.019499999999998963, 0.09600000000000009, 0.029249999999999332, -0.21750000000000114, -0.040000000000000924, 0.019750000000000156, 0.06450000000000067, 0.004999999999999005, -0.02975000000000172, -1.7763568394002505e-15, 0.08924999999999983, 0.03375000000000128, 0.00575000000000081, 0.03349999999999831, 0.048500000000000654, -0.02224999999999966, 0.02800000000000047, 0.11899999999999977, -0.008999999999998565, -0.20899999999999963, 0.019000000000000128, 0.05674999999999919], zp_timestamp='2025-12-03T23:08:00')
2025-12-04T01:11:58.497 [DEBUG] [Thread-127008] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:11:58.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:11:58.593 [DEBUG] [Thread-127011] [transport.py] [_log()] starting thread (client mode): 0xa277b940
2025-12-04T01:11:58.594 [DEBUG] [Thread-127011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:11:58.608 [DEBUG] [Thread-127011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:11:58.608 [INFO] [Thread-127011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:11:58.616 [DEBUG] [Thread-127011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] client lang: <none>
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] server lang: <none>
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] kex follows: False
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] Compression: none
2025-12-04T01:11:58.617 [DEBUG] [Thread-127011] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:11:58.674 [DEBUG] [Thread-127011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:11:58.675 [DEBUG] [Thread-127011] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:11:58.675 [DEBUG] [Thread-127011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:11:58.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:11:58.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:11:58.737 [DEBUG] [Thread-127011] [transport.py] [_log()] userauth is OK
2025-12-04T01:11:58.737 [DEBUG] [Thread-127011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:11:58.737 [DEBUG] [Thread-127011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:11:58.737 [DEBUG] [Thread-127011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:11:58.737 [DEBUG] [Thread-127011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:11:58.755 [INFO] [Thread-127011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:11:58.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:11:58.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:11:59.563 [DEBUG] [Thread-127011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:11:59.563 [DEBUG] [Thread-127011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:11:59.611 [DEBUG] [Thread-127011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:11:59.611 [DEBUG] [Thread-127011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:11:59.620 [DEBUG] [Thread-127011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:11:59.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:11:59.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:11:59.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:11:59.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:11:59.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:11:59.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:11:59.655 [DEBUG] [Thread-127011] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:12:00.639 [DEBUG] [Thread-127013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:07.362 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:15.678 [DEBUG] [Thread-127014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:26.782 [DEBUG] [Thread-127015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:27.745 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:29.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:12:29.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:12:29.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:12:30.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 12, 15), 10.58, 48.73, 0.0, 24.81, 13.54, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:12:30.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:12:15
2025-12-04T01:12:30.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:12:30.598 [DEBUG] [Thread-127016] [transport.py] [_log()] starting thread (client mode): 0xa51ceb00
2025-12-04T01:12:30.598 [DEBUG] [Thread-127016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:12:30.619 [DEBUG] [Thread-127016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:12:30.619 [INFO] [Thread-127016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:12:30.622 [DEBUG] [Thread-127016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] client lang: <none>
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] server lang: <none>
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] kex follows: False
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] Compression: none
2025-12-04T01:12:30.623 [DEBUG] [Thread-127016] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:12:30.639 [DEBUG] [Thread-127016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:12:30.639 [DEBUG] [Thread-127016] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:12:30.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:12:30.640 [DEBUG] [Thread-127016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:12:30.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:12:30.642 [DEBUG] [Thread-127016] [transport.py] [_log()] userauth is OK
2025-12-04T01:12:30.642 [DEBUG] [Thread-127016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:12:30.642 [DEBUG] [Thread-127016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:12:30.642 [DEBUG] [Thread-127016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:12:30.642 [DEBUG] [Thread-127016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:12:30.668 [INFO] [Thread-127016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:12:30.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:12:30.704 [DEBUG] [Thread-127018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:31.292 [DEBUG] [Thread-127016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:12:31.292 [DEBUG] [Thread-127016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:12:31.292 [DEBUG] [Thread-127016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:12:31.333 [DEBUG] [Thread-127016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:12:31.333 [DEBUG] [Thread-127016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:12:31.336 [DEBUG] [Thread-127016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:12:31.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:12:31.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:12:31.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:12:31.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:12:31.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:12:31.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:12:31.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:12:31.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:12:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:12:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.966366 -999.00  +13.60  17.00     53   +4.30 1 1 1 1 1     0    0 8.51 -29.98 ZNESW 18.3 17.0 148.2 26.4 13.9 -25.0 13.8 -24.4 13.6 -22.7 13.8 -23.6
2025-12-04T01:12:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:12:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:12:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.966366
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:12:31.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:12:15', tmtdew=10.58, humidity=48.73, cloud=0.0, wind=24.81, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:12:15', seeing=1.22, atlas_timestamp='2025-12-03T23:11:34.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:12:31.360 [DEBUG] [Thread-127016] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:12:31.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:12:31.457 [DEBUG] [Thread-127020] [transport.py] [_log()] starting thread (client mode): 0xa27a27a0
2025-12-04T01:12:31.457 [DEBUG] [Thread-127020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:12:31.471 [DEBUG] [Thread-127020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:12:31.471 [INFO] [Thread-127020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:12:31.479 [DEBUG] [Thread-127020] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:12:31.479 [DEBUG] [Thread-127020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] client lang: <none>
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] server lang: <none>
2025-12-04T01:12:31.480 [DEBUG] [Thread-127020] [transport.py] [_log()] kex follows: False
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] Compression: none
2025-12-04T01:12:31.481 [DEBUG] [Thread-127020] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:12:31.536 [DEBUG] [Thread-127020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:12:31.536 [DEBUG] [Thread-127020] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:12:31.537 [DEBUG] [Thread-127020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:12:31.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:12:31.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:12:31.592 [DEBUG] [Thread-127020] [transport.py] [_log()] userauth is OK
2025-12-04T01:12:31.592 [DEBUG] [Thread-127020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:12:31.592 [DEBUG] [Thread-127020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:12:31.592 [DEBUG] [Thread-127020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:12:31.592 [DEBUG] [Thread-127020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:12:31.613 [INFO] [Thread-127020] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:12:31.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:12:31.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:12:32.423 [DEBUG] [Thread-127020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:12:32.424 [DEBUG] [Thread-127020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:12:32.472 [DEBUG] [Thread-127020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:12:32.472 [DEBUG] [Thread-127020] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:12:32.480 [DEBUG] [Thread-127020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:12:32.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:12:32.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:12:32.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:12:32.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:12:32.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:12:32.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:12:32.513 [DEBUG] [Thread-127020] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:12:36.875 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:36.876 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:45.733 [DEBUG] [Thread-127022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:12:48.124 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:00.798 [DEBUG] [Thread-127023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:02.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:13:02.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:13:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:13:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 12, 47), 10.55, 48.7, 0.0, 25.88, 13.54, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:13:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:12:47
2025-12-04T01:13:03.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:13:03.504 [DEBUG] [Thread-127024] [transport.py] [_log()] starting thread (client mode): 0xa51ce6e0
2025-12-04T01:13:03.504 [DEBUG] [Thread-127024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:13:03.524 [DEBUG] [Thread-127024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:13:03.524 [INFO] [Thread-127024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:13:03.527 [DEBUG] [Thread-127024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:13:03.527 [DEBUG] [Thread-127024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:13:03.527 [DEBUG] [Thread-127024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:13:03.527 [DEBUG] [Thread-127024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] client lang: <none>
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] server lang: <none>
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] kex follows: False
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] Compression: none
2025-12-04T01:13:03.528 [DEBUG] [Thread-127024] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:13:03.546 [DEBUG] [Thread-127024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:13:03.547 [DEBUG] [Thread-127024] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:13:03.547 [DEBUG] [Thread-127024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:13:03.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:13:03.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:13:03.549 [DEBUG] [Thread-127024] [transport.py] [_log()] userauth is OK
2025-12-04T01:13:03.549 [DEBUG] [Thread-127024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:13:03.549 [DEBUG] [Thread-127024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:13:03.549 [DEBUG] [Thread-127024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:13:03.550 [DEBUG] [Thread-127024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:13:03.573 [INFO] [Thread-127024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:13:03.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:13:04.230 [DEBUG] [Thread-127024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:13:04.230 [DEBUG] [Thread-127024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:13:04.230 [DEBUG] [Thread-127024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:13:04.271 [DEBUG] [Thread-127024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:13:04.271 [DEBUG] [Thread-127024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:13:04.274 [DEBUG] [Thread-127024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:13:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:13:04.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:13:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:13:04.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:13:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:13:04.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:13:04.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.966713 -999.00  +13.50  20.42     53   +4.20 1 1 1 1 1     0    0 8.63 -29.74 ZNESW 19.2 20.4 142.2 23.9 13.9 -25.0 13.8 -24.5 13.6 -23.0 13.9 -23.8
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:13:04.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.966713
2025-12-04T01:13:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:13:04.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:13:04.297 [DEBUG] [Thread-127024] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:13:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:13:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:13:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:13:04.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:12:47', tmtdew=10.55, humidity=48.7, cloud=0.0, wind=25.88, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:12:48', seeing=1.22, atlas_timestamp='2025-12-03T23:12:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:13:04.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:13:04.394 [DEBUG] [Thread-127027] [transport.py] [_log()] starting thread (client mode): 0xa27a3cd0
2025-12-04T01:13:04.394 [DEBUG] [Thread-127027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:13:04.408 [DEBUG] [Thread-127027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:13:04.408 [INFO] [Thread-127027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:13:04.416 [DEBUG] [Thread-127027] [transport.py] [_log()] client lang: <none>
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] server lang: <none>
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] kex follows: False
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] Compression: none
2025-12-04T01:13:04.417 [DEBUG] [Thread-127027] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:13:04.480 [DEBUG] [Thread-127027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:13:04.481 [DEBUG] [Thread-127027] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:13:04.481 [DEBUG] [Thread-127027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:13:04.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:13:04.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:13:04.537 [DEBUG] [Thread-127027] [transport.py] [_log()] userauth is OK
2025-12-04T01:13:04.537 [DEBUG] [Thread-127027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:13:04.537 [DEBUG] [Thread-127027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:13:04.537 [DEBUG] [Thread-127027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:13:04.537 [DEBUG] [Thread-127027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:13:04.556 [INFO] [Thread-127027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:13:04.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:13:04.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:13:05.411 [DEBUG] [Thread-127027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:13:05.411 [DEBUG] [Thread-127027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:13:05.459 [DEBUG] [Thread-127027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:13:05.459 [DEBUG] [Thread-127027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:13:05.468 [DEBUG] [Thread-127027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:13:05.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:13:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:13:05.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:13:05.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:13:05.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:13:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:13:05.502 [DEBUG] [Thread-127027] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:13:08.507 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:15.827 [DEBUG] [Thread-127029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:26.854 [DEBUG] [Thread-127030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:28.921 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:30.871 [DEBUG] [Thread-127031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:35.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:13:35.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:13:35.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:13:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 13, 20), 10.54, 48.7, 0.0, 25.87, 13.48, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:13:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:13:20
2025-12-04T01:13:36.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:13:36.501 [DEBUG] [Thread-127032] [transport.py] [_log()] starting thread (client mode): 0xa5198e50
2025-12-04T01:13:36.501 [DEBUG] [Thread-127032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:13:36.520 [DEBUG] [Thread-127032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:13:36.520 [INFO] [Thread-127032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:13:36.523 [DEBUG] [Thread-127032] [transport.py] [_log()] client lang: <none>
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] server lang: <none>
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] kex follows: False
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] Compression: none
2025-12-04T01:13:36.524 [DEBUG] [Thread-127032] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:13:36.537 [DEBUG] [Thread-127032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:13:36.538 [DEBUG] [Thread-127032] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:13:36.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:13:36.538 [DEBUG] [Thread-127032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:13:36.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:13:36.539 [DEBUG] [Thread-127032] [transport.py] [_log()] userauth is OK
2025-12-04T01:13:36.539 [DEBUG] [Thread-127032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:13:36.539 [DEBUG] [Thread-127032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:13:36.539 [DEBUG] [Thread-127032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:13:36.539 [DEBUG] [Thread-127032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:13:36.548 [INFO] [Thread-127032] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:13:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:13:37.085 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:37.085 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:37.181 [DEBUG] [Thread-127032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:13:37.181 [DEBUG] [Thread-127032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:13:37.181 [DEBUG] [Thread-127032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:13:37.223 [DEBUG] [Thread-127032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:13:37.223 [DEBUG] [Thread-127032] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:13:37.225 [DEBUG] [Thread-127032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:13:37.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:13:37.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:13:37.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:13:37.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:13:37.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:13:37.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:13:37.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.967407 -999.00  +13.40  21.48     53   +4.20 1 1 1 1 1     0    0 8.80 -29.61 ZNESW 16.9 21.5 140.6 26.9 13.9 -24.9 13.8 -24.5 13.6 -22.7 13.8 -23.7
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.967407
2025-12-04T01:13:37.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:13:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:13:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:13:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:13:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:13:37.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:13:20', tmtdew=10.54, humidity=48.7, cloud=0.0, wind=25.87, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:13:20', seeing=1.09, atlas_timestamp='2025-12-03T23:13:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:13:37.243 [DEBUG] [Thread-127032] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:13:37.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:13:37.329 [DEBUG] [Thread-127035] [transport.py] [_log()] starting thread (client mode): 0xa51b9ff0
2025-12-04T01:13:37.330 [DEBUG] [Thread-127035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:13:37.344 [DEBUG] [Thread-127035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:13:37.344 [INFO] [Thread-127035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] client lang: <none>
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] server lang: <none>
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] kex follows: False
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] Compression: none
2025-12-04T01:13:37.352 [DEBUG] [Thread-127035] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:13:37.409 [DEBUG] [Thread-127035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:13:37.409 [DEBUG] [Thread-127035] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:13:37.410 [DEBUG] [Thread-127035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:13:37.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:13:37.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:13:37.466 [DEBUG] [Thread-127035] [transport.py] [_log()] userauth is OK
2025-12-04T01:13:37.466 [DEBUG] [Thread-127035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:13:37.466 [DEBUG] [Thread-127035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:13:37.466 [DEBUG] [Thread-127035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:13:37.466 [DEBUG] [Thread-127035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:13:37.483 [INFO] [Thread-127035] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:13:37.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:13:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:13:38.360 [DEBUG] [Thread-127035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:13:38.360 [DEBUG] [Thread-127035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:13:38.407 [DEBUG] [Thread-127035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:13:38.407 [DEBUG] [Thread-127035] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:13:38.416 [DEBUG] [Thread-127035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:13:38.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:13:38.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:13:38.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:13:38.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:13:38.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:13:38.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:13:38.448 [DEBUG] [Thread-127035] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:13:45.900 [DEBUG] [Thread-127037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:13:49.338 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:00.945 [DEBUG] [Thread-127038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:08.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:14:08.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:14:08.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:14:09.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 13, 52), 10.52, 48.77, 0.0, 26.48, 13.41, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:14:09.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:13:52
2025-12-04T01:14:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:14:09.416 [DEBUG] [Thread-127039] [transport.py] [_log()] starting thread (client mode): 0xa2709390
2025-12-04T01:14:09.416 [DEBUG] [Thread-127039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:14:09.436 [DEBUG] [Thread-127039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:14:09.436 [INFO] [Thread-127039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] client lang: <none>
2025-12-04T01:14:09.440 [DEBUG] [Thread-127039] [transport.py] [_log()] server lang: <none>
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] kex follows: False
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] Compression: none
2025-12-04T01:14:09.441 [DEBUG] [Thread-127039] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:14:09.459 [DEBUG] [Thread-127039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:14:09.460 [DEBUG] [Thread-127039] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:14:09.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:14:09.461 [DEBUG] [Thread-127039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:14:09.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:14:09.463 [DEBUG] [Thread-127039] [transport.py] [_log()] userauth is OK
2025-12-04T01:14:09.463 [DEBUG] [Thread-127039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:14:09.463 [DEBUG] [Thread-127039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:14:09.463 [DEBUG] [Thread-127039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:14:09.463 [DEBUG] [Thread-127039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:14:09.501 [INFO] [Thread-127039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:14:09.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:14:09.730 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:10.124 [DEBUG] [Thread-127039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:14:10.124 [DEBUG] [Thread-127039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:14:10.124 [DEBUG] [Thread-127039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:14:10.165 [DEBUG] [Thread-127039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:14:10.165 [DEBUG] [Thread-127039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:14:10.168 [DEBUG] [Thread-127039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:14:10.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:14:10.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:14:10.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:14:10.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:14:10.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:14:10.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:14:10.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:14:10.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.967755 -999.00  +13.50  21.51     53   +4.20 1 1 1 1 1     0    0 8.57 -29.07 ZNESW 18.4 21.5 139.6 26.7 13.9 -24.8 13.8 -24.3 13.6 -22.8 13.9 -23.6
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.967755
2025-12-04T01:14:10.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:14:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:14:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:14:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:14:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:14:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:13:52', tmtdew=10.52, humidity=48.77, cloud=0.0, wind=26.48, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:13:52', seeing=1.06, atlas_timestamp='2025-12-03T23:13:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:14:10.193 [DEBUG] [Thread-127039] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:14:10.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:14:10.304 [DEBUG] [Thread-127042] [transport.py] [_log()] starting thread (client mode): 0xa2778580
2025-12-04T01:14:10.304 [DEBUG] [Thread-127042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:14:10.319 [DEBUG] [Thread-127042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:14:10.319 [INFO] [Thread-127042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:14:10.328 [DEBUG] [Thread-127042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:14:10.328 [DEBUG] [Thread-127042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] client lang: <none>
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] server lang: <none>
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] kex follows: False
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] Compression: none
2025-12-04T01:14:10.329 [DEBUG] [Thread-127042] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:14:10.388 [DEBUG] [Thread-127042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:14:10.388 [DEBUG] [Thread-127042] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:14:10.389 [DEBUG] [Thread-127042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:14:10.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:14:10.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:14:10.444 [DEBUG] [Thread-127042] [transport.py] [_log()] userauth is OK
2025-12-04T01:14:10.444 [DEBUG] [Thread-127042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:14:10.444 [DEBUG] [Thread-127042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:14:10.444 [DEBUG] [Thread-127042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:14:10.444 [DEBUG] [Thread-127042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:14:10.464 [INFO] [Thread-127042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:14:10.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:14:10.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:14:11.250 [DEBUG] [Thread-127042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:14:11.250 [DEBUG] [Thread-127042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:14:11.304 [DEBUG] [Thread-127042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:14:11.304 [DEBUG] [Thread-127042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:14:11.312 [DEBUG] [Thread-127042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:14:11.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:14:11.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:14:11.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:14:11.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:14:11.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:14:11.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:14:11.351 [DEBUG] [Thread-127042] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:14:15.972 [DEBUG] [Thread-127044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:26.922 [DEBUG] [Thread-127045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:30.109 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:31.012 [DEBUG] [Thread-127046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:37.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:37.284 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:41.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:14:41.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:14:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:14:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 14, 24), 10.53, 48.73, 0.0, 26.94, 13.43, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:14:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:14:24
2025-12-04T01:14:42.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:14:42.335 [DEBUG] [Thread-127047] [transport.py] [_log()] starting thread (client mode): 0xa27a1270
2025-12-04T01:14:42.335 [DEBUG] [Thread-127047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:14:42.356 [DEBUG] [Thread-127047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:14:42.356 [INFO] [Thread-127047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:14:42.359 [DEBUG] [Thread-127047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] client lang: <none>
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] server lang: <none>
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] kex follows: False
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:14:42.360 [DEBUG] [Thread-127047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:14:42.361 [DEBUG] [Thread-127047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:14:42.361 [DEBUG] [Thread-127047] [transport.py] [_log()] Compression: none
2025-12-04T01:14:42.361 [DEBUG] [Thread-127047] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:14:42.380 [DEBUG] [Thread-127047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:14:42.380 [DEBUG] [Thread-127047] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:14:42.381 [DEBUG] [Thread-127047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:14:42.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:14:42.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:14:42.382 [DEBUG] [Thread-127047] [transport.py] [_log()] userauth is OK
2025-12-04T01:14:42.383 [DEBUG] [Thread-127047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:14:42.383 [DEBUG] [Thread-127047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:14:42.383 [DEBUG] [Thread-127047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:14:42.383 [DEBUG] [Thread-127047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:14:42.406 [INFO] [Thread-127047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:14:42.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:14:43.021 [DEBUG] [Thread-127047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:14:43.022 [DEBUG] [Thread-127047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:14:43.022 [DEBUG] [Thread-127047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:14:43.063 [DEBUG] [Thread-127047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:14:43.063 [DEBUG] [Thread-127047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:14:43.066 [DEBUG] [Thread-127047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:14:43.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:14:43.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:14:43.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:14:43.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:14:43.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:14:43.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:14:43.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.968102 -999.00  +13.50  17.37     53   +4.20 1 1 1 1 1     0    0 8.57 -29.91 ZNESW 20.5 17.4 147.2 30.5 13.9 -24.9 13.8 -24.3 13.6 -22.8 13.8 -23.6
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:14:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.968102
2025-12-04T01:14:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:14:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:14:43.091 [DEBUG] [Thread-127047] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:14:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:14:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:14:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:14:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:14:24', tmtdew=10.53, humidity=48.73, cloud=0.0, wind=26.94, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:14:24', seeing=1.27, atlas_timestamp='2025-12-03T23:14:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:14:43.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:14:43.200 [DEBUG] [Thread-127050] [transport.py] [_log()] starting thread (client mode): 0x9fd20670
2025-12-04T01:14:43.200 [DEBUG] [Thread-127050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:14:43.215 [DEBUG] [Thread-127050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:14:43.215 [INFO] [Thread-127050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:14:43.222 [DEBUG] [Thread-127050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:14:43.222 [DEBUG] [Thread-127050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:14:43.222 [DEBUG] [Thread-127050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:14:43.222 [DEBUG] [Thread-127050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:43.222 [DEBUG] [Thread-127050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] client lang: <none>
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] server lang: <none>
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] kex follows: False
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] Compression: none
2025-12-04T01:14:43.223 [DEBUG] [Thread-127050] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:14:43.280 [DEBUG] [Thread-127050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:14:43.280 [DEBUG] [Thread-127050] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:14:43.281 [DEBUG] [Thread-127050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:14:43.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:14:43.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:14:43.336 [DEBUG] [Thread-127050] [transport.py] [_log()] userauth is OK
2025-12-04T01:14:43.337 [DEBUG] [Thread-127050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:14:43.337 [DEBUG] [Thread-127050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:14:43.337 [DEBUG] [Thread-127050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:14:43.337 [DEBUG] [Thread-127050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:14:43.355 [INFO] [Thread-127050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:14:43.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:14:43.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:14:44.172 [DEBUG] [Thread-127050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:14:44.172 [DEBUG] [Thread-127050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:14:44.221 [DEBUG] [Thread-127050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:14:44.221 [DEBUG] [Thread-127050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:14:44.230 [DEBUG] [Thread-127050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:14:44.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:14:44.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:14:44.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:14:44.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:14:44.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:14:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:14:44.265 [DEBUG] [Thread-127050] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:14:46.039 [DEBUG] [Thread-127052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:14:50.488 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:01.083 [DEBUG] [Thread-127053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:10.914 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:15:14.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:15:14.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:15:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 14, 56), 10.47, 48.77, 0.0, 23.41, 13.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:15:14.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:14:56
2025-12-04T01:15:15.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:15:15.213 [DEBUG] [Thread-127054] [transport.py] [_log()] starting thread (client mode): 0xa2709570
2025-12-04T01:15:15.213 [DEBUG] [Thread-127054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:15:15.233 [DEBUG] [Thread-127054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:15:15.233 [INFO] [Thread-127054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] client lang: <none>
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] server lang: <none>
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] kex follows: False
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:15:15.236 [DEBUG] [Thread-127054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:15:15.237 [DEBUG] [Thread-127054] [transport.py] [_log()] Compression: none
2025-12-04T01:15:15.237 [DEBUG] [Thread-127054] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:15:15.254 [DEBUG] [Thread-127054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:15:15.254 [DEBUG] [Thread-127054] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:15:15.254 [DEBUG] [Thread-127054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:15:15.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:15:15.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:15:15.256 [DEBUG] [Thread-127054] [transport.py] [_log()] userauth is OK
2025-12-04T01:15:15.256 [DEBUG] [Thread-127054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:15:15.257 [DEBUG] [Thread-127054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:15:15.257 [DEBUG] [Thread-127054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:15:15.257 [DEBUG] [Thread-127054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:15:15.288 [INFO] [Thread-127054] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:15:15.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:15:16.007 [DEBUG] [Thread-127054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:15:16.007 [DEBUG] [Thread-127054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:15:16.008 [DEBUG] [Thread-127054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:15:16.048 [DEBUG] [Thread-127054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:15:16.048 [DEBUG] [Thread-127054] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:15:16.051 [DEBUG] [Thread-127054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:15:16.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:15:16.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:15:16.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:15:16.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:15:16.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:15:16.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:15:16.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.968449 -999.00  +13.50  18.64     53   +4.20 1 1 1 1 1     0    0 8.41 -26.96 ZNESW 17.5 18.6 143.2 24.1 13.9 -25.0 13.7 -24.4 13.6 -22.8 13.8 -23.7
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:15:16.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.968449
2025-12-04T01:15:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:15:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:15:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:15:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:15:16.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:15:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:14:56', tmtdew=10.47, humidity=48.77, cloud=0.0, wind=23.41, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:14:56', seeing=1.24, atlas_timestamp='2025-12-03T23:14:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.055749999999999744, 0.0032500000000013074, -0.025000000000000355, -0.061500000000000554, -0.009249999999999758, 0.02200000000000024, 0.0012500000000006395, 0.011499999999999844, -0.004999999999999005, 0.02624999999999922, 0.009000000000000341, 0.07099999999999973, 0.07424999999999926, -0.2245000000000008, -0.0710000000000015, 0.03824999999999967, 0.02149999999999963, -0.017000000000001236, -0.0627500000000012, 0.02899999999999814, 0.019249999999999545, -0.09724999999999895, -0.012249999999999872, 0.03399999999999892, 0.0835000000000008, -0.019249999999999545, 0.027499999999999858, 0.07399999999999984, -0.06099999999999817, -0.20749999999999957, -0.07199999999999918, 0.029749999999999943], zp_timestamp='2025-12-03T23:11:00')
2025-12-04T01:15:16.075 [DEBUG] [Thread-127054] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:15:16.113 [DEBUG] [Thread-127057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:16.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:15:16.173 [DEBUG] [Thread-127058] [transport.py] [_log()] starting thread (client mode): 0xa27448e0
2025-12-04T01:15:16.173 [DEBUG] [Thread-127058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:15:16.194 [DEBUG] [Thread-127058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:15:16.194 [INFO] [Thread-127058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:16.204 [DEBUG] [Thread-127058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] client lang: <none>
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] server lang: <none>
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] kex follows: False
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:15:16.205 [DEBUG] [Thread-127058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:15:16.206 [DEBUG] [Thread-127058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:15:16.206 [DEBUG] [Thread-127058] [transport.py] [_log()] Compression: none
2025-12-04T01:15:16.206 [DEBUG] [Thread-127058] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:15:16.265 [DEBUG] [Thread-127058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:15:16.266 [DEBUG] [Thread-127058] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:15:16.267 [DEBUG] [Thread-127058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:15:16.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:15:16.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:15:16.321 [DEBUG] [Thread-127058] [transport.py] [_log()] userauth is OK
2025-12-04T01:15:16.322 [DEBUG] [Thread-127058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:15:16.322 [DEBUG] [Thread-127058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:15:16.322 [DEBUG] [Thread-127058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:15:16.322 [DEBUG] [Thread-127058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:15:16.342 [INFO] [Thread-127058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:15:16.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:15:16.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:15:17.162 [DEBUG] [Thread-127058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:15:17.162 [DEBUG] [Thread-127058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:15:17.210 [DEBUG] [Thread-127058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:15:17.210 [DEBUG] [Thread-127058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:15:17.219 [DEBUG] [Thread-127058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:15:17.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:15:17.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:15:17.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:15:17.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:15:17.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:15:17.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:15:17.253 [DEBUG] [Thread-127058] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:15:26.991 [DEBUG] [Thread-127060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:31.146 [DEBUG] [Thread-127061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:31.306 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:37.481 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:37.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:46.175 [DEBUG] [Thread-127062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:15:47.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:15:47.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:15:47.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:15:47.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 15, 28), 10.47, 48.77, 0.0, 23.71, 13.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:15:47.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:15:28
2025-12-04T01:15:48.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:15:48.223 [DEBUG] [Thread-127063] [transport.py] [_log()] starting thread (client mode): 0xa2785cc0
2025-12-04T01:15:48.224 [DEBUG] [Thread-127063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:15:48.243 [DEBUG] [Thread-127063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:15:48.243 [INFO] [Thread-127063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] client lang: <none>
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] server lang: <none>
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] kex follows: False
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:15:48.246 [DEBUG] [Thread-127063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:15:48.247 [DEBUG] [Thread-127063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:15:48.247 [DEBUG] [Thread-127063] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:15:48.247 [DEBUG] [Thread-127063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:15:48.247 [DEBUG] [Thread-127063] [transport.py] [_log()] Compression: none
2025-12-04T01:15:48.247 [DEBUG] [Thread-127063] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:15:48.266 [DEBUG] [Thread-127063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:15:48.266 [DEBUG] [Thread-127063] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:15:48.267 [DEBUG] [Thread-127063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:15:48.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:15:48.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:15:48.269 [DEBUG] [Thread-127063] [transport.py] [_log()] userauth is OK
2025-12-04T01:15:48.269 [DEBUG] [Thread-127063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:15:48.269 [DEBUG] [Thread-127063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:15:48.269 [DEBUG] [Thread-127063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:15:48.269 [DEBUG] [Thread-127063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:15:48.299 [INFO] [Thread-127063] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:15:48.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:15:48.951 [DEBUG] [Thread-127063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:15:48.951 [DEBUG] [Thread-127063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:15:48.952 [DEBUG] [Thread-127063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:15:48.992 [DEBUG] [Thread-127063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:15:48.992 [DEBUG] [Thread-127063] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:15:48.995 [DEBUG] [Thread-127063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:15:49.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:15:49.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:15:49.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:15:49.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:15:49.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:15:49.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:15:49.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.968796 -999.00  +13.50  19.68     53   +4.20 1 1 1 1 1     0    0 8.70 -26.72 ZNESW 19.8 19.7 153.9 25.2 13.9 -24.9 13.8 -24.3 13.6 -22.8 13.8 -23.7
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:15:49.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.968796
2025-12-04T01:15:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:15:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:15:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:15:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:15:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:15:49.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:15:28', tmtdew=10.47, humidity=48.77, cloud=0.0, wind=23.71, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:15:28', seeing=0.95, atlas_timestamp='2025-12-03T23:15:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:13:00')
2025-12-04T01:15:49.021 [DEBUG] [Thread-127063] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:15:49.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:15:49.113 [DEBUG] [Thread-127066] [transport.py] [_log()] starting thread (client mode): 0xa51d0130
2025-12-04T01:15:49.113 [DEBUG] [Thread-127066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:15:49.128 [DEBUG] [Thread-127066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:15:49.128 [INFO] [Thread-127066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] client lang: <none>
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] server lang: <none>
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] kex follows: False
2025-12-04T01:15:49.136 [DEBUG] [Thread-127066] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] Compression: none
2025-12-04T01:15:49.137 [DEBUG] [Thread-127066] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:15:49.198 [DEBUG] [Thread-127066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:15:49.198 [DEBUG] [Thread-127066] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:15:49.198 [DEBUG] [Thread-127066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:15:49.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:15:49.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:15:49.257 [DEBUG] [Thread-127066] [transport.py] [_log()] userauth is OK
2025-12-04T01:15:49.257 [DEBUG] [Thread-127066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:15:49.258 [DEBUG] [Thread-127066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:15:49.258 [DEBUG] [Thread-127066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:15:49.258 [DEBUG] [Thread-127066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:15:49.276 [INFO] [Thread-127066] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:15:49.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:15:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:15:50.136 [DEBUG] [Thread-127066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:15:50.136 [DEBUG] [Thread-127066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:15:50.184 [DEBUG] [Thread-127066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:15:50.184 [DEBUG] [Thread-127066] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:15:50.193 [DEBUG] [Thread-127066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:15:50.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:15:50.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:15:50.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:15:50.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:15:50.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:15:50.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:15:50.228 [DEBUG] [Thread-127066] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:15:51.708 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:01.201 [DEBUG] [Thread-127068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:12.089 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:16.236 [DEBUG] [Thread-127069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:20.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:16:20.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:16:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:16:20.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 15, 28), 10.47, 48.77, 0.0, 23.71, 13.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:16:20.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:15:28
2025-12-04T01:16:21.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:16:21.192 [DEBUG] [Thread-127070] [transport.py] [_log()] starting thread (client mode): 0xa2786950
2025-12-04T01:16:21.192 [DEBUG] [Thread-127070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:16:21.212 [DEBUG] [Thread-127070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:16:21.213 [INFO] [Thread-127070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:16:21.214 [DEBUG] [Thread-127070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:16:21.214 [DEBUG] [Thread-127070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:16:21.214 [DEBUG] [Thread-127070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:16:21.214 [DEBUG] [Thread-127070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] client lang: <none>
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] server lang: <none>
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] kex follows: False
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] Compression: none
2025-12-04T01:16:21.215 [DEBUG] [Thread-127070] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:16:21.224 [DEBUG] [Thread-127070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:16:21.224 [DEBUG] [Thread-127070] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:16:21.224 [DEBUG] [Thread-127070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:16:21.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:16:21.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:16:21.226 [DEBUG] [Thread-127070] [transport.py] [_log()] userauth is OK
2025-12-04T01:16:21.226 [DEBUG] [Thread-127070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:16:21.226 [DEBUG] [Thread-127070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:16:21.226 [DEBUG] [Thread-127070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:16:21.226 [DEBUG] [Thread-127070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:16:21.245 [INFO] [Thread-127070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:16:21.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:16:21.848 [DEBUG] [Thread-127070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:16:21.849 [DEBUG] [Thread-127070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:16:21.849 [DEBUG] [Thread-127070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:16:21.891 [DEBUG] [Thread-127070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:16:21.891 [DEBUG] [Thread-127070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:16:21.894 [DEBUG] [Thread-127070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:16:21.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:16:21.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:16:21.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:16:21.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:16:21.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:16:21.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:16:21.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.969143 -999.00  +13.50  24.41     53   +4.20 1 1 1 1 1     0    0 8.53 -25.56 ZNESW 24.2 24.4 139.6 28.6 13.8 -25.0 13.8 -24.3 13.6 -22.7 13.8 -23.7
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:16:21.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.969143
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:16:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:15:28', tmtdew=10.47, humidity=48.77, cloud=0.0, wind=23.71, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:16:00', seeing=1.19, atlas_timestamp='2025-12-03T23:15:33.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:13:00')
2025-12-04T01:16:21.916 [DEBUG] [Thread-127070] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:16:21.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:16:22.011 [DEBUG] [Thread-127073] [transport.py] [_log()] starting thread (client mode): 0xa270ada0
2025-12-04T01:16:22.011 [DEBUG] [Thread-127073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:16:22.026 [DEBUG] [Thread-127073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:16:22.026 [INFO] [Thread-127073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] client lang: <none>
2025-12-04T01:16:22.038 [DEBUG] [Thread-127073] [transport.py] [_log()] server lang: <none>
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] kex follows: False
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] Compression: none
2025-12-04T01:16:22.039 [DEBUG] [Thread-127073] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:16:22.091 [DEBUG] [Thread-127073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:16:22.091 [DEBUG] [Thread-127073] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:16:22.091 [DEBUG] [Thread-127073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:16:22.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:16:22.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:16:22.151 [DEBUG] [Thread-127073] [transport.py] [_log()] userauth is OK
2025-12-04T01:16:22.151 [DEBUG] [Thread-127073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:16:22.151 [DEBUG] [Thread-127073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:16:22.152 [DEBUG] [Thread-127073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:16:22.152 [DEBUG] [Thread-127073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:16:22.170 [INFO] [Thread-127073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:16:22.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:16:22.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:16:23.029 [DEBUG] [Thread-127073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:16:23.029 [DEBUG] [Thread-127073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:16:23.077 [DEBUG] [Thread-127073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:16:23.077 [DEBUG] [Thread-127073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:16:23.086 [DEBUG] [Thread-127073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:16:23.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:16:23.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:16:23.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:16:23.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:16:23.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:16:23.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:16:23.123 [DEBUG] [Thread-127073] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:16:27.048 [DEBUG] [Thread-127075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:31.268 [DEBUG] [Thread-127076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:32.470 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:37.691 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:37.692 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:46.312 [DEBUG] [Thread-127077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:52.959 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:16:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:16:53.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:16:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:16:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 16, 32), 10.4, 49.33, 0.0, 24.49, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:16:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:16:32
2025-12-04T01:16:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:16:54.103 [DEBUG] [Thread-127078] [transport.py] [_log()] starting thread (client mode): 0xa51d3250
2025-12-04T01:16:54.103 [DEBUG] [Thread-127078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:16:54.123 [DEBUG] [Thread-127078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:16:54.123 [INFO] [Thread-127078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] client lang: <none>
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] server lang: <none>
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] kex follows: False
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:16:54.127 [DEBUG] [Thread-127078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:16:54.128 [DEBUG] [Thread-127078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:16:54.128 [DEBUG] [Thread-127078] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:16:54.128 [DEBUG] [Thread-127078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:16:54.128 [DEBUG] [Thread-127078] [transport.py] [_log()] Compression: none
2025-12-04T01:16:54.128 [DEBUG] [Thread-127078] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:16:54.143 [DEBUG] [Thread-127078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:16:54.144 [DEBUG] [Thread-127078] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:16:54.144 [DEBUG] [Thread-127078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:16:54.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:16:54.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:16:54.146 [DEBUG] [Thread-127078] [transport.py] [_log()] userauth is OK
2025-12-04T01:16:54.146 [DEBUG] [Thread-127078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:16:54.146 [DEBUG] [Thread-127078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:16:54.146 [DEBUG] [Thread-127078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:16:54.146 [DEBUG] [Thread-127078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:16:54.172 [INFO] [Thread-127078] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:16:54.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:16:54.785 [DEBUG] [Thread-127078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:16:54.785 [DEBUG] [Thread-127078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:16:54.786 [DEBUG] [Thread-127078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:16:54.826 [DEBUG] [Thread-127078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:16:54.826 [DEBUG] [Thread-127078] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:16:54.829 [DEBUG] [Thread-127078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:16:54.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:16:54.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:16:54.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:16:54.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:16:54.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:16:54.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:16:54.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:16:54.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:16:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:16:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.969838 -999.00  +13.50  20.23     53   +4.20 1 1 1 1 1     0    0 8.35 -25.62 ZNESW 16.4 20.2 141.6 24.3 13.9 -25.0 13.7 -24.4 13.5 -22.9 13.8 -23.6
2025-12-04T01:16:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:16:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:16:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.969838
2025-12-04T01:16:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:16:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:16:32', tmtdew=10.4, humidity=49.33, cloud=0.0, wind=24.49, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:16:32', seeing=1.19, atlas_timestamp='2025-12-03T23:16:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:13:00')
2025-12-04T01:16:54.855 [DEBUG] [Thread-127078] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:16:54.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:16:54.954 [DEBUG] [Thread-127081] [transport.py] [_log()] starting thread (client mode): 0xa2787850
2025-12-04T01:16:54.954 [DEBUG] [Thread-127081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:16:54.968 [DEBUG] [Thread-127081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:16:54.968 [INFO] [Thread-127081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:16:54.982 [DEBUG] [Thread-127081] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:16:54.982 [DEBUG] [Thread-127081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:16:54.982 [DEBUG] [Thread-127081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:16:54.982 [DEBUG] [Thread-127081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:54.982 [DEBUG] [Thread-127081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] client lang: <none>
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] server lang: <none>
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] kex follows: False
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] Compression: none
2025-12-04T01:16:54.983 [DEBUG] [Thread-127081] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:16:55.031 [DEBUG] [Thread-127081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:16:55.032 [DEBUG] [Thread-127081] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:16:55.032 [DEBUG] [Thread-127081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:16:55.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:16:55.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:16:55.088 [DEBUG] [Thread-127081] [transport.py] [_log()] userauth is OK
2025-12-04T01:16:55.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:16:55.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:16:55.088 [DEBUG] [Thread-127081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:16:55.089 [DEBUG] [Thread-127081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:16:55.111 [INFO] [Thread-127081] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:16:55.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:16:55.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:16:55.949 [DEBUG] [Thread-127081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:16:55.950 [DEBUG] [Thread-127081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:16:55.998 [DEBUG] [Thread-127081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:16:55.998 [DEBUG] [Thread-127081] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:16:56.007 [DEBUG] [Thread-127081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:16:56.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:16:56.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:16:56.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:16:56.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:16:56.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:16:56.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:16:56.042 [DEBUG] [Thread-127081] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:17:01.342 [DEBUG] [Thread-127083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:13.350 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:16.389 [DEBUG] [Thread-127084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:26.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:17:26.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:17:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:17:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 17, 4), 10.38, 49.42, 0.0, 24.46, 13.34, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:17:26.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:17:04
2025-12-04T01:17:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:17:27.067 [DEBUG] [Thread-127085] [transport.py] [_log()] starting thread (client mode): 0xa27a3cd0
2025-12-04T01:17:27.067 [DEBUG] [Thread-127085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:17:27.087 [DEBUG] [Thread-127085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:17:27.087 [INFO] [Thread-127085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:17:27.090 [DEBUG] [Thread-127085] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:17:27.090 [DEBUG] [Thread-127085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:17:27.090 [DEBUG] [Thread-127085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:17:27.090 [DEBUG] [Thread-127085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:27.090 [DEBUG] [Thread-127085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] client lang: <none>
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] server lang: <none>
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] kex follows: False
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] Compression: none
2025-12-04T01:17:27.091 [DEBUG] [Thread-127085] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:17:27.100 [DEBUG] [Thread-127087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:27.106 [DEBUG] [Thread-127085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:17:27.106 [DEBUG] [Thread-127085] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:17:27.106 [DEBUG] [Thread-127085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:17:27.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:17:27.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:17:27.107 [DEBUG] [Thread-127085] [transport.py] [_log()] userauth is OK
2025-12-04T01:17:27.107 [DEBUG] [Thread-127085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:17:27.107 [DEBUG] [Thread-127085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:17:27.107 [DEBUG] [Thread-127085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:17:27.107 [DEBUG] [Thread-127085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:17:27.125 [INFO] [Thread-127085] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:17:27.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:17:27.765 [DEBUG] [Thread-127085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:17:27.765 [DEBUG] [Thread-127085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:17:27.765 [DEBUG] [Thread-127085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:17:27.807 [DEBUG] [Thread-127085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:17:27.807 [DEBUG] [Thread-127085] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:17:27.809 [DEBUG] [Thread-127085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:17:27.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:17:27.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:17:27.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:17:27.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:17:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:17:27.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:17:27.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.970185 -999.00  +13.40  16.81     53   +4.10 1 1 1 1 1     0    0 8.66 -23.57 ZNESW 15.1 16.8 152.4 22.9 13.8 -24.8 13.7 -24.4 13.6 -22.9 13.8 -23.8
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.970185
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:17:27.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:17:04', tmtdew=10.38, humidity=49.42, cloud=0.0, wind=24.46, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:17:04', seeing=1.49, atlas_timestamp='2025-12-03T23:17:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:13:00')
2025-12-04T01:17:27.828 [DEBUG] [Thread-127085] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:17:27.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:17:27.913 [DEBUG] [Thread-127089] [transport.py] [_log()] starting thread (client mode): 0xa51b9960
2025-12-04T01:17:27.913 [DEBUG] [Thread-127089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:17:27.930 [DEBUG] [Thread-127089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:17:27.930 [INFO] [Thread-127089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:17:27.937 [DEBUG] [Thread-127089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] client lang: <none>
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] server lang: <none>
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] kex follows: False
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] Compression: none
2025-12-04T01:17:27.938 [DEBUG] [Thread-127089] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:17:27.997 [DEBUG] [Thread-127089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:17:27.997 [DEBUG] [Thread-127089] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:17:27.997 [DEBUG] [Thread-127089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:17:27.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:17:27.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:17:28.053 [DEBUG] [Thread-127089] [transport.py] [_log()] userauth is OK
2025-12-04T01:17:28.053 [DEBUG] [Thread-127089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:17:28.053 [DEBUG] [Thread-127089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:17:28.053 [DEBUG] [Thread-127089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:17:28.053 [DEBUG] [Thread-127089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:17:28.072 [INFO] [Thread-127089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:17:28.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:17:28.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:17:28.889 [DEBUG] [Thread-127089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:17:28.889 [DEBUG] [Thread-127089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:17:28.937 [DEBUG] [Thread-127089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:17:28.937 [DEBUG] [Thread-127089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:17:28.945 [DEBUG] [Thread-127089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:17:28.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:17:28.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:17:28.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:17:28.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:17:28.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:17:28.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:17:28.977 [DEBUG] [Thread-127089] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:17:31.419 [DEBUG] [Thread-127091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:33.732 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:37.891 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:37.892 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:46.463 [DEBUG] [Thread-127092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:54.109 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:17:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:17:58.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:17:59.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:17:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 17, 36), 10.48, 48.9, 0.0, 24.46, 13.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:17:59.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:17:36
2025-12-04T01:17:59.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:17:59.971 [DEBUG] [Thread-127093] [transport.py] [_log()] starting thread (client mode): 0xa51d0340
2025-12-04T01:17:59.971 [DEBUG] [Thread-127093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:17:59.987 [DEBUG] [Thread-127093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:17:59.988 [INFO] [Thread-127093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:17:59.990 [DEBUG] [Thread-127093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] client lang: <none>
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] server lang: <none>
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] kex follows: False
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] Compression: none
2025-12-04T01:17:59.991 [DEBUG] [Thread-127093] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:18:00.008 [DEBUG] [Thread-127093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:18:00.009 [DEBUG] [Thread-127093] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:18:00.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:18:00.010 [DEBUG] [Thread-127093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:18:00.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:18:00.052 [DEBUG] [Thread-127093] [transport.py] [_log()] userauth is OK
2025-12-04T01:18:00.052 [DEBUG] [Thread-127093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:18:00.052 [DEBUG] [Thread-127093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:18:00.053 [DEBUG] [Thread-127093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:18:00.053 [DEBUG] [Thread-127093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:18:00.072 [INFO] [Thread-127093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:18:00.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:18:00.710 [DEBUG] [Thread-127093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:18:00.710 [DEBUG] [Thread-127093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:18:00.710 [DEBUG] [Thread-127093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:18:00.751 [DEBUG] [Thread-127093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:18:00.751 [DEBUG] [Thread-127093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:18:00.754 [DEBUG] [Thread-127093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:18:00.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:18:00.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:18:00.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:18:00.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:18:00.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:18:00.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:18:00.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:18:00.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:18:00.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:18:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.970532 -999.00  +13.40  19.55     53   +4.10 1 1 1 1 1     0    0 8.55 -22.89 ZNESW 23.2 19.6 154.4 24.9 13.8 -24.8 13.7 -24.4 13.5 -22.8 13.8 -23.6
2025-12-04T01:18:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:18:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:18:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.970532
2025-12-04T01:18:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:18:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:18:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:18:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:18:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:18:00.778 [DEBUG] [Thread-127093] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:18:00.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:17:36', tmtdew=10.48, humidity=48.9, cloud=0.0, wind=24.46, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:17:36', seeing=1.05, atlas_timestamp='2025-12-03T23:17:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:13:00')
2025-12-04T01:18:00.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:18:00.874 [DEBUG] [Thread-127096] [transport.py] [_log()] starting thread (client mode): 0x9fd20670
2025-12-04T01:18:00.874 [DEBUG] [Thread-127096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:18:00.893 [DEBUG] [Thread-127096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:18:00.893 [INFO] [Thread-127096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] client lang: <none>
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] server lang: <none>
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] kex follows: False
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:18:00.902 [DEBUG] [Thread-127096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:18:00.903 [DEBUG] [Thread-127096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:18:00.903 [DEBUG] [Thread-127096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:18:00.903 [DEBUG] [Thread-127096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:18:00.903 [DEBUG] [Thread-127096] [transport.py] [_log()] Compression: none
2025-12-04T01:18:00.903 [DEBUG] [Thread-127096] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:18:00.965 [DEBUG] [Thread-127096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:18:00.965 [DEBUG] [Thread-127096] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:18:00.966 [DEBUG] [Thread-127096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:18:00.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:18:00.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:18:01.022 [DEBUG] [Thread-127096] [transport.py] [_log()] userauth is OK
2025-12-04T01:18:01.022 [DEBUG] [Thread-127096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:18:01.022 [DEBUG] [Thread-127096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:18:01.022 [DEBUG] [Thread-127096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:18:01.022 [DEBUG] [Thread-127096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:18:01.044 [INFO] [Thread-127096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:18:01.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:18:01.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:18:01.490 [DEBUG] [Thread-127098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:01.873 [DEBUG] [Thread-127096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:18:01.873 [DEBUG] [Thread-127096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:18:01.921 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:18:01.921 [DEBUG] [Thread-127096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:18:01.930 [DEBUG] [Thread-127096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:18:01.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:18:01.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:18:01.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:18:01.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:18:01.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:18:01.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:18:01.967 [DEBUG] [Thread-127096] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:18:14.494 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:16.525 [DEBUG] [Thread-127099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:27.171 [DEBUG] [Thread-127100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:31.559 [DEBUG] [Thread-127101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:18:31.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:18:31.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:18:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 18, 8), 10.51, 48.82, 0.0, 22.25, 13.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:18:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:18:08
2025-12-04T01:18:32.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:18:32.956 [DEBUG] [Thread-127102] [transport.py] [_log()] starting thread (client mode): 0xa51d0370
2025-12-04T01:18:32.957 [DEBUG] [Thread-127102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:18:32.977 [DEBUG] [Thread-127102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:18:32.977 [INFO] [Thread-127102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] client lang: <none>
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] server lang: <none>
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] kex follows: False
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:18:32.980 [DEBUG] [Thread-127102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:18:32.981 [DEBUG] [Thread-127102] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:18:32.981 [DEBUG] [Thread-127102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:18:32.981 [DEBUG] [Thread-127102] [transport.py] [_log()] Compression: none
2025-12-04T01:18:32.981 [DEBUG] [Thread-127102] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:18:32.996 [DEBUG] [Thread-127102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:18:32.997 [DEBUG] [Thread-127102] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:18:32.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:18:32.998 [DEBUG] [Thread-127102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:18:32.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:18:32.999 [DEBUG] [Thread-127102] [transport.py] [_log()] userauth is OK
2025-12-04T01:18:32.999 [DEBUG] [Thread-127102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:18:32.999 [DEBUG] [Thread-127102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:18:33.000 [DEBUG] [Thread-127102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:18:33.000 [DEBUG] [Thread-127102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:18:33.023 [INFO] [Thread-127102] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:18:33.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:18:33.641 [DEBUG] [Thread-127102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:18:33.642 [DEBUG] [Thread-127102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:18:33.642 [DEBUG] [Thread-127102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:18:33.683 [DEBUG] [Thread-127102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:18:33.683 [DEBUG] [Thread-127102] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:18:33.686 [DEBUG] [Thread-127102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:18:33.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:18:33.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:18:33.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:18:33.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:18:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:18:33.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:18:33.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:18:33.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:18:33.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:18:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.970880 -999.00  +13.40  20.70     53   +4.10 1 1 1 1 1     0    0 8.87 -21.03 ZNESW 18.8 20.7 147.8 26.2 13.8 -24.9 13.7 -24.3 13.6 -22.8 13.8 -23.5
2025-12-04T01:18:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:18:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:18:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.970880
2025-12-04T01:18:33.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:18:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:18:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:18:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:18:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:18:33.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:18:08', tmtdew=10.51, humidity=48.82, cloud=0.0, wind=22.25, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:18:08', seeing=1.17, atlas_timestamp='2025-12-03T23:18:04.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:18:33.710 [DEBUG] [Thread-127102] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:18:33.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:18:33.808 [DEBUG] [Thread-127105] [transport.py] [_log()] starting thread (client mode): 0xa51d29b0
2025-12-04T01:18:33.808 [DEBUG] [Thread-127105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:18:33.823 [DEBUG] [Thread-127105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:18:33.823 [INFO] [Thread-127105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:18:33.831 [DEBUG] [Thread-127105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] client lang: <none>
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] server lang: <none>
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] kex follows: False
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:18:33.832 [DEBUG] [Thread-127105] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:18:33.833 [DEBUG] [Thread-127105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:18:33.833 [DEBUG] [Thread-127105] [transport.py] [_log()] Compression: none
2025-12-04T01:18:33.833 [DEBUG] [Thread-127105] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:18:33.889 [DEBUG] [Thread-127105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:18:33.889 [DEBUG] [Thread-127105] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:18:33.889 [DEBUG] [Thread-127105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:18:33.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:18:33.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:18:33.947 [DEBUG] [Thread-127105] [transport.py] [_log()] userauth is OK
2025-12-04T01:18:33.947 [DEBUG] [Thread-127105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:18:33.947 [DEBUG] [Thread-127105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:18:33.947 [DEBUG] [Thread-127105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:18:33.948 [DEBUG] [Thread-127105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:18:33.970 [INFO] [Thread-127105] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:18:33.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:18:33.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:18:34.797 [DEBUG] [Thread-127105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:18:34.798 [DEBUG] [Thread-127105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:18:34.846 [DEBUG] [Thread-127105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:18:34.846 [DEBUG] [Thread-127105] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:18:34.855 [DEBUG] [Thread-127105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:18:34.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:18:34.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:18:34.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:18:34.875 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:34.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:18:34.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:18:34.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:18:34.889 [DEBUG] [Thread-127105] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:18:38.091 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:38.092 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:46.584 [DEBUG] [Thread-127107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:18:55.293 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:01.617 [DEBUG] [Thread-127108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:04.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:19:04.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:19:04.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:19:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 18, 40), 10.45, 49.35, 0.0, 22.51, 13.41, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:19:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:18:40
2025-12-04T01:19:05.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:19:05.854 [DEBUG] [Thread-127109] [transport.py] [_log()] starting thread (client mode): 0xa51d1840
2025-12-04T01:19:05.854 [DEBUG] [Thread-127109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:19:05.874 [DEBUG] [Thread-127109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:19:05.874 [INFO] [Thread-127109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:19:05.877 [DEBUG] [Thread-127109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] client lang: <none>
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] server lang: <none>
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] kex follows: False
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] Compression: none
2025-12-04T01:19:05.878 [DEBUG] [Thread-127109] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:19:05.897 [DEBUG] [Thread-127109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:19:05.898 [DEBUG] [Thread-127109] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:19:05.899 [DEBUG] [Thread-127109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:19:05.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:19:05.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:19:05.901 [DEBUG] [Thread-127109] [transport.py] [_log()] userauth is OK
2025-12-04T01:19:05.901 [DEBUG] [Thread-127109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:19:05.901 [DEBUG] [Thread-127109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:19:05.901 [DEBUG] [Thread-127109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:19:05.901 [DEBUG] [Thread-127109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:19:05.919 [INFO] [Thread-127109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:19:05.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:19:06.498 [DEBUG] [Thread-127109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:19:06.498 [DEBUG] [Thread-127109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:19:06.499 [DEBUG] [Thread-127109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:19:06.539 [DEBUG] [Thread-127109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:19:06.539 [DEBUG] [Thread-127109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:19:06.542 [DEBUG] [Thread-127109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:19:06.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:19:06.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:19:06.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:19:06.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:19:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:19:06.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:19:06.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:19:06.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.971227 -999.00  +13.50  24.53     53   +4.10 1 1 1 1 1     0    0 8.94 -21.93 ZNESW 22.5 24.5 142.6 29.1 13.8 -24.9 13.7 -24.3 13.5 -22.6 13.8 -23.6
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.971227
2025-12-04T01:19:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:19:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:19:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:19:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:19:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:19:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:18:40', tmtdew=10.45, humidity=49.35, cloud=0.0, wind=22.51, temperature=13.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:18:40', seeing=1.06, atlas_timestamp='2025-12-03T23:18:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:19:06.565 [DEBUG] [Thread-127109] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:19:06.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:19:06.660 [DEBUG] [Thread-127112] [transport.py] [_log()] starting thread (client mode): 0xa51d0cd0
2025-12-04T01:19:06.660 [DEBUG] [Thread-127112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:19:06.674 [DEBUG] [Thread-127112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:19:06.674 [INFO] [Thread-127112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] client lang: <none>
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] server lang: <none>
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] kex follows: False
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:19:06.682 [DEBUG] [Thread-127112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:19:06.683 [DEBUG] [Thread-127112] [transport.py] [_log()] Compression: none
2025-12-04T01:19:06.683 [DEBUG] [Thread-127112] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:19:06.739 [DEBUG] [Thread-127112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:19:06.740 [DEBUG] [Thread-127112] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:19:06.740 [DEBUG] [Thread-127112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:19:06.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:19:06.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:19:06.795 [DEBUG] [Thread-127112] [transport.py] [_log()] userauth is OK
2025-12-04T01:19:06.795 [DEBUG] [Thread-127112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:19:06.795 [DEBUG] [Thread-127112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:19:06.795 [DEBUG] [Thread-127112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:19:06.795 [DEBUG] [Thread-127112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:19:06.815 [INFO] [Thread-127112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:19:06.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:19:06.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:19:07.617 [DEBUG] [Thread-127112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:19:07.618 [DEBUG] [Thread-127112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:19:07.666 [DEBUG] [Thread-127112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:19:07.666 [DEBUG] [Thread-127112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:19:07.674 [DEBUG] [Thread-127112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:19:07.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:19:07.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:19:07.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:19:07.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:19:07.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:19:07.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:19:07.708 [DEBUG] [Thread-127112] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:19:15.675 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:16.645 [DEBUG] [Thread-127114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:27.237 [DEBUG] [Thread-127115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:31.687 [DEBUG] [Thread-127116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:36.057 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:37.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:19:37.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:19:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:19:38.288 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:38.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:38.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 19, 12), 10.46, 49.3, 0.0, 21.35, 13.38, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:19:38.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:19:12
2025-12-04T01:19:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:19:38.700 [DEBUG] [Thread-127117] [transport.py] [_log()] starting thread (client mode): 0xa51bb1c0
2025-12-04T01:19:38.700 [DEBUG] [Thread-127117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:19:38.720 [DEBUG] [Thread-127117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:19:38.720 [INFO] [Thread-127117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:38.723 [DEBUG] [Thread-127117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] client lang: <none>
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] server lang: <none>
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] kex follows: False
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] Compression: none
2025-12-04T01:19:38.724 [DEBUG] [Thread-127117] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:19:38.734 [DEBUG] [Thread-127117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:19:38.735 [DEBUG] [Thread-127117] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:19:38.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:19:38.736 [DEBUG] [Thread-127117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:19:38.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:19:38.738 [DEBUG] [Thread-127117] [transport.py] [_log()] userauth is OK
2025-12-04T01:19:38.738 [DEBUG] [Thread-127117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:19:38.738 [DEBUG] [Thread-127117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:19:38.738 [DEBUG] [Thread-127117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:19:38.739 [DEBUG] [Thread-127117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:19:38.757 [INFO] [Thread-127117] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:19:38.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:19:39.370 [DEBUG] [Thread-127117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:19:39.370 [DEBUG] [Thread-127117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:19:39.370 [DEBUG] [Thread-127117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:19:39.411 [DEBUG] [Thread-127117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:19:39.411 [DEBUG] [Thread-127117] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:19:39.414 [DEBUG] [Thread-127117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:19:39.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:19:39.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:19:39.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:19:39.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:19:39.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:19:39.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:19:39.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:19:39.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:19:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:19:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.971574 -999.00  +13.50  19.20     53   +4.10 1 1 1 1 1     0    0 8.89 -19.48 ZNESW 14.8 19.2 148.0 23.5 13.8 -24.9 13.7 -24.5 13.5 -22.7 13.8 -23.7
2025-12-04T01:19:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:19:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:19:39.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.971574
2025-12-04T01:19:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:19:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:19:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:19:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:19:39.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:19:39.438 [DEBUG] [Thread-127117] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:19:39.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:19:12', tmtdew=10.46, humidity=49.3, cloud=0.0, wind=21.35, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:19:12', seeing=1.19, atlas_timestamp='2025-12-03T23:19:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:19:39.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:19:39.537 [DEBUG] [Thread-127120] [transport.py] [_log()] starting thread (client mode): 0xa27a3bb0
2025-12-04T01:19:39.537 [DEBUG] [Thread-127120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:19:39.552 [DEBUG] [Thread-127120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:19:39.552 [INFO] [Thread-127120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:19:39.559 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] client lang: <none>
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] server lang: <none>
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] kex follows: False
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:19:39.560 [DEBUG] [Thread-127120] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:19:39.561 [DEBUG] [Thread-127120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:19:39.561 [DEBUG] [Thread-127120] [transport.py] [_log()] Compression: none
2025-12-04T01:19:39.561 [DEBUG] [Thread-127120] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:19:39.619 [DEBUG] [Thread-127120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:19:39.619 [DEBUG] [Thread-127120] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:19:39.620 [DEBUG] [Thread-127120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:19:39.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:19:39.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:19:39.676 [DEBUG] [Thread-127120] [transport.py] [_log()] userauth is OK
2025-12-04T01:19:39.676 [DEBUG] [Thread-127120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:19:39.676 [DEBUG] [Thread-127120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:19:39.676 [DEBUG] [Thread-127120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:19:39.676 [DEBUG] [Thread-127120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:19:39.695 [INFO] [Thread-127120] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:19:39.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:19:39.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:19:40.527 [DEBUG] [Thread-127120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:19:40.527 [DEBUG] [Thread-127120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:19:40.580 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:19:40.580 [DEBUG] [Thread-127120] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:19:40.589 [DEBUG] [Thread-127120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:19:40.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:19:40.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:19:40.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:19:40.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:19:40.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:19:40.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:19:40.625 [DEBUG] [Thread-127120] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:19:46.717 [DEBUG] [Thread-127122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:19:56.451 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:01.762 [DEBUG] [Thread-127123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:10.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:20:10.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:20:10.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:20:11.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 19, 44), 10.46, 49.28, 0.0, 23.43, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:20:11.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:19:44
2025-12-04T01:20:11.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:20:11.590 [DEBUG] [Thread-127124] [transport.py] [_log()] starting thread (client mode): 0x9fd23cd0
2025-12-04T01:20:11.590 [DEBUG] [Thread-127124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:20:11.612 [DEBUG] [Thread-127124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:20:11.612 [INFO] [Thread-127124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] client lang: <none>
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] server lang: <none>
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] kex follows: False
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] Compression: none
2025-12-04T01:20:11.615 [DEBUG] [Thread-127124] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:20:11.631 [DEBUG] [Thread-127124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:20:11.631 [DEBUG] [Thread-127124] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:20:11.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:20:11.632 [DEBUG] [Thread-127124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:20:11.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:20:11.634 [DEBUG] [Thread-127124] [transport.py] [_log()] userauth is OK
2025-12-04T01:20:11.634 [DEBUG] [Thread-127124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:20:11.634 [DEBUG] [Thread-127124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:20:11.634 [DEBUG] [Thread-127124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:20:11.635 [DEBUG] [Thread-127124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:20:11.652 [INFO] [Thread-127124] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:20:11.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:20:12.266 [DEBUG] [Thread-127124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:20:12.266 [DEBUG] [Thread-127124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:20:12.266 [DEBUG] [Thread-127124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:20:12.307 [DEBUG] [Thread-127124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:20:12.307 [DEBUG] [Thread-127124] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:20:12.310 [DEBUG] [Thread-127124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:20:12.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:20:12.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:20:12.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:20:12.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:20:12.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:20:12.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:20:12.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.972268 -999.00  +13.30  19.21     53   +4.10 1 1 1 1 1     0    0 8.89 -18.98 ZNESW 16.2 19.2 144.4 26.5 13.8 -24.9 13.7 -24.4 13.5 -23.0 13.8 -23.7
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:20:12.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.972268
2025-12-04T01:20:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:20:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:20:12.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:20:12.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:20:12.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:20:12.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:19:44', tmtdew=10.46, humidity=49.28, cloud=0.0, wind=23.43, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:19:44', seeing=1.19, atlas_timestamp='2025-12-03T23:20:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:20:12.335 [DEBUG] [Thread-127124] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:20:12.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:20:12.433 [DEBUG] [Thread-127127] [transport.py] [_log()] starting thread (client mode): 0xa7bd3190
2025-12-04T01:20:12.433 [DEBUG] [Thread-127127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:20:12.448 [DEBUG] [Thread-127127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:20:12.448 [INFO] [Thread-127127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] client lang: <none>
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] server lang: <none>
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] kex follows: False
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:20:12.456 [DEBUG] [Thread-127127] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:20:12.457 [DEBUG] [Thread-127127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:20:12.457 [DEBUG] [Thread-127127] [transport.py] [_log()] Compression: none
2025-12-04T01:20:12.457 [DEBUG] [Thread-127127] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:20:12.511 [DEBUG] [Thread-127127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:20:12.512 [DEBUG] [Thread-127127] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:20:12.512 [DEBUG] [Thread-127127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:20:12.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:20:12.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:20:12.568 [DEBUG] [Thread-127127] [transport.py] [_log()] userauth is OK
2025-12-04T01:20:12.568 [DEBUG] [Thread-127127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:20:12.568 [DEBUG] [Thread-127127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:20:12.568 [DEBUG] [Thread-127127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:20:12.569 [DEBUG] [Thread-127127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:20:12.587 [INFO] [Thread-127127] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:20:12.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:20:12.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:20:13.412 [DEBUG] [Thread-127127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:20:13.412 [DEBUG] [Thread-127127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:20:13.461 [DEBUG] [Thread-127127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:20:13.461 [DEBUG] [Thread-127127] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:20:13.470 [DEBUG] [Thread-127127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:20:13.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:20:13.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:20:13.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:20:13.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:20:13.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:20:13.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:20:13.505 [DEBUG] [Thread-127127] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:20:16.786 [DEBUG] [Thread-127129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:16.935 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:27.300 [DEBUG] [Thread-127130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:31.820 [DEBUG] [Thread-127131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:37.317 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:38.487 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:38.488 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:43.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:20:43.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:20:43.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:20:44.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 20, 16), 10.47, 49.27, 0.0, 24.23, 13.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:20:44.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:20:16
2025-12-04T01:20:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:20:44.494 [DEBUG] [Thread-127132] [transport.py] [_log()] starting thread (client mode): 0xa27a35b0
2025-12-04T01:20:44.494 [DEBUG] [Thread-127132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:20:44.513 [DEBUG] [Thread-127132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:20:44.514 [INFO] [Thread-127132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:20:44.517 [DEBUG] [Thread-127132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] client lang: <none>
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] server lang: <none>
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] kex follows: False
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] Compression: none
2025-12-04T01:20:44.518 [DEBUG] [Thread-127132] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:20:44.536 [DEBUG] [Thread-127132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:20:44.537 [DEBUG] [Thread-127132] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:20:44.537 [DEBUG] [Thread-127132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:20:44.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:20:44.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:20:44.539 [DEBUG] [Thread-127132] [transport.py] [_log()] userauth is OK
2025-12-04T01:20:44.539 [DEBUG] [Thread-127132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:20:44.540 [DEBUG] [Thread-127132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:20:44.540 [DEBUG] [Thread-127132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:20:44.540 [DEBUG] [Thread-127132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:20:44.576 [INFO] [Thread-127132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:20:44.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:20:45.200 [DEBUG] [Thread-127132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:20:45.200 [DEBUG] [Thread-127132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:20:45.200 [DEBUG] [Thread-127132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:20:45.241 [DEBUG] [Thread-127132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:20:45.241 [DEBUG] [Thread-127132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:20:45.244 [DEBUG] [Thread-127132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:20:45.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:20:45.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:20:45.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:20:45.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:20:45.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:20:45.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:20:45.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:20:45.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.972268 -999.00  +13.30  19.21     53   +4.10 1 1 1 1 1     0    0 8.89 -18.98 ZNESW 16.2 19.2 144.4 26.5 13.8 -24.9 13.7 -24.4 13.5 -23.0 13.8 -23.7
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.972268
2025-12-04T01:20:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:20:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:20:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:20:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:20:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:20:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:20:16', tmtdew=10.47, humidity=49.27, cloud=0.0, wind=24.23, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:20:16', seeing=1.1, atlas_timestamp='2025-12-03T23:20:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:20:45.270 [DEBUG] [Thread-127132] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:20:45.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:20:45.369 [DEBUG] [Thread-127135] [transport.py] [_log()] starting thread (client mode): 0x9fd20670
2025-12-04T01:20:45.369 [DEBUG] [Thread-127135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:20:45.387 [DEBUG] [Thread-127135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:20:45.387 [INFO] [Thread-127135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:20:45.399 [DEBUG] [Thread-127135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] client lang: <none>
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] server lang: <none>
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] kex follows: False
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:20:45.400 [DEBUG] [Thread-127135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:20:45.401 [DEBUG] [Thread-127135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:20:45.401 [DEBUG] [Thread-127135] [transport.py] [_log()] Compression: none
2025-12-04T01:20:45.401 [DEBUG] [Thread-127135] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:20:45.452 [DEBUG] [Thread-127135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:20:45.452 [DEBUG] [Thread-127135] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:20:45.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:20:45.453 [DEBUG] [Thread-127135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:20:45.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:20:45.509 [DEBUG] [Thread-127135] [transport.py] [_log()] userauth is OK
2025-12-04T01:20:45.510 [DEBUG] [Thread-127135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:20:45.510 [DEBUG] [Thread-127135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:20:45.510 [DEBUG] [Thread-127135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:20:45.510 [DEBUG] [Thread-127135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:20:45.532 [INFO] [Thread-127135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:20:45.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:20:45.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:20:46.359 [DEBUG] [Thread-127135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:20:46.359 [DEBUG] [Thread-127135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:20:46.406 [DEBUG] [Thread-127135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:20:46.407 [DEBUG] [Thread-127135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:20:46.415 [DEBUG] [Thread-127135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:20:46.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:20:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:20:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:20:46.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:20:46.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:20:46.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:20:46.449 [DEBUG] [Thread-127135] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:20:46.848 [DEBUG] [Thread-127137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:20:57.782 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:01.901 [DEBUG] [Thread-127138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:16.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:21:16.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:21:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:21:16.931 [DEBUG] [Thread-127139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:17.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 20, 48), 10.47, 49.27, 0.0, 22.6, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:21:17.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:20:48
2025-12-04T01:21:17.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:21:17.472 [DEBUG] [Thread-127140] [transport.py] [_log()] starting thread (client mode): 0xa51b9f90
2025-12-04T01:21:17.472 [DEBUG] [Thread-127140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:21:17.493 [DEBUG] [Thread-127140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:21:17.493 [INFO] [Thread-127140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] client lang: <none>
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] server lang: <none>
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] kex follows: False
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] Compression: none
2025-12-04T01:21:17.496 [DEBUG] [Thread-127140] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:21:17.512 [DEBUG] [Thread-127140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:21:17.512 [DEBUG] [Thread-127140] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:21:17.512 [DEBUG] [Thread-127140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:21:17.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:21:17.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:21:17.513 [DEBUG] [Thread-127140] [transport.py] [_log()] userauth is OK
2025-12-04T01:21:17.513 [DEBUG] [Thread-127140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:21:17.513 [DEBUG] [Thread-127140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:21:17.514 [DEBUG] [Thread-127140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:21:17.514 [DEBUG] [Thread-127140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:21:17.525 [INFO] [Thread-127140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:21:17.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:21:18.163 [DEBUG] [Thread-127140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:21:18.163 [DEBUG] [Thread-127140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:21:18.163 [DEBUG] [Thread-127140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:21:18.204 [DEBUG] [Thread-127140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:21:18.204 [DEBUG] [Thread-127140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:21:18.207 [DEBUG] [Thread-127140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:21:18.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:21:18.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:21:18.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:21:18.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:21:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:21:18.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:21:18.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.972615 -999.00  +13.30  16.99     53   +4.10 1 1 1 1 1     0    0 8.69 -17.17 ZNESW 19.7 17.0 147.0 24.4 13.8 -24.9 13.7 -24.5 13.5 -22.9 13.8 -23.6
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.972615
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:21:18.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:21:18.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:20:48', tmtdew=10.47, humidity=49.27, cloud=0.0, wind=22.6, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:20:49', seeing=1.07, atlas_timestamp='2025-12-03T23:20:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.08024999999999949, -0.00274999999999892, -0.026500000000000412, -0.10899999999999999, -0.06974999999999909, -0.0860000000000003, -0.004749999999999588, 0.006000000000000227, -0.041999999999999815, 0.012249999999999872, -0.0519999999999996, 0.10099999999999909, 0.02474999999999916, -0.24100000000000144, -0.14300000000000068, -0.00975000000000037, -0.009500000000000952, -0.07200000000000095, -0.07925000000000182, -0.014000000000002899, 0.044249999999998124, -0.022749999999998494, -0.0072499999999990905, 0.03149999999999942, 0.03250000000000064, -0.03625000000000078, 0.046499999999999986, 0.06599999999999895, -0.05999999999999872, -0.3744999999999994, 0.0045000000000001705, 0.07574999999999932], zp_timestamp='2025-12-03T23:17:00')
2025-12-04T01:21:18.225 [DEBUG] [Thread-127140] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:21:18.232 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:18.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:21:18.311 [DEBUG] [Thread-127143] [transport.py] [_log()] starting thread (client mode): 0xa2708a30
2025-12-04T01:21:18.311 [DEBUG] [Thread-127143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:21:18.326 [DEBUG] [Thread-127143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:21:18.326 [INFO] [Thread-127143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] client lang: <none>
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] server lang: <none>
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] kex follows: False
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:21:18.335 [DEBUG] [Thread-127143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:21:18.336 [DEBUG] [Thread-127143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:21:18.336 [DEBUG] [Thread-127143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:21:18.336 [DEBUG] [Thread-127143] [transport.py] [_log()] Compression: none
2025-12-04T01:21:18.336 [DEBUG] [Thread-127143] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:21:18.392 [DEBUG] [Thread-127143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:21:18.392 [DEBUG] [Thread-127143] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:21:18.392 [DEBUG] [Thread-127143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:21:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:21:18.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:21:18.449 [DEBUG] [Thread-127143] [transport.py] [_log()] userauth is OK
2025-12-04T01:21:18.449 [DEBUG] [Thread-127143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:21:18.449 [DEBUG] [Thread-127143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:21:18.450 [DEBUG] [Thread-127143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:21:18.450 [DEBUG] [Thread-127143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:21:18.467 [INFO] [Thread-127143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:21:18.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:21:18.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:21:19.323 [DEBUG] [Thread-127143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:21:19.323 [DEBUG] [Thread-127143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:21:19.372 [DEBUG] [Thread-127143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:21:19.372 [DEBUG] [Thread-127143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:21:19.380 [DEBUG] [Thread-127143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:21:19.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:21:19.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:21:19.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:21:19.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:21:19.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:21:19.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:21:19.412 [DEBUG] [Thread-127143] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:21:27.376 [DEBUG] [Thread-127145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:31.959 [DEBUG] [Thread-127146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:38.685 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:38.686 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:47.001 [DEBUG] [Thread-127147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:21:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:21:49.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:21:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:21:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 21, 20), 10.47, 49.25, 0.0, 23.75, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:21:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:21:20
2025-12-04T01:21:50.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:21:50.372 [DEBUG] [Thread-127148] [transport.py] [_log()] starting thread (client mode): 0xa270ac50
2025-12-04T01:21:50.372 [DEBUG] [Thread-127148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:21:50.392 [DEBUG] [Thread-127148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:21:50.392 [INFO] [Thread-127148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] client lang: <none>
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] server lang: <none>
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] kex follows: False
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] Compression: none
2025-12-04T01:21:50.395 [DEBUG] [Thread-127148] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:21:50.414 [DEBUG] [Thread-127148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:21:50.414 [DEBUG] [Thread-127148] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:21:50.415 [DEBUG] [Thread-127148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:21:50.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:21:50.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:21:50.417 [DEBUG] [Thread-127148] [transport.py] [_log()] userauth is OK
2025-12-04T01:21:50.417 [DEBUG] [Thread-127148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:21:50.417 [DEBUG] [Thread-127148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:21:50.417 [DEBUG] [Thread-127148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:21:50.417 [DEBUG] [Thread-127148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:21:50.441 [INFO] [Thread-127148] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:21:50.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:21:51.092 [DEBUG] [Thread-127148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:21:51.092 [DEBUG] [Thread-127148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:21:51.092 [DEBUG] [Thread-127148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:21:51.133 [DEBUG] [Thread-127148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:21:51.133 [DEBUG] [Thread-127148] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:21:51.135 [DEBUG] [Thread-127148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:21:51.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:21:51.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:21:51.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:21:51.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:21:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:21:51.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:21:51.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:21:51.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.972963 -999.00  +13.30  18.10     53   +4.10 1 1 1 1 1     0    0 9.15 -16.04 ZNESW 21.8 18.1 142.8 26.2 13.8 -24.9 13.7 -24.4 13.4 -22.9 13.7 -23.7
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.972963
2025-12-04T01:21:51.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:21:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:21:51.157 [DEBUG] [Thread-127148] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:21:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:21:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:21:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:21:51.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:21:20', tmtdew=10.47, humidity=49.25, cloud=0.0, wind=23.75, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:21:21', seeing=1.03, atlas_timestamp='2025-12-03T23:21:04.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:19:00')
2025-12-04T01:21:51.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:21:51.253 [DEBUG] [Thread-127151] [transport.py] [_log()] starting thread (client mode): 0xa2745150
2025-12-04T01:21:51.253 [DEBUG] [Thread-127151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:21:51.268 [DEBUG] [Thread-127151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:21:51.268 [INFO] [Thread-127151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:51.276 [DEBUG] [Thread-127151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] client lang: <none>
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] server lang: <none>
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] kex follows: False
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] Compression: none
2025-12-04T01:21:51.277 [DEBUG] [Thread-127151] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:21:51.333 [DEBUG] [Thread-127151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:21:51.334 [DEBUG] [Thread-127151] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:21:51.334 [DEBUG] [Thread-127151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:21:51.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:21:51.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:21:51.390 [DEBUG] [Thread-127151] [transport.py] [_log()] userauth is OK
2025-12-04T01:21:51.390 [DEBUG] [Thread-127151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:21:51.390 [DEBUG] [Thread-127151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:21:51.390 [DEBUG] [Thread-127151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:21:51.390 [DEBUG] [Thread-127151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:21:51.409 [INFO] [Thread-127151] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:21:51.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:21:51.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:21:52.227 [DEBUG] [Thread-127151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:21:52.228 [DEBUG] [Thread-127151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:21:52.277 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:21:52.277 [DEBUG] [Thread-127151] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:21:52.285 [DEBUG] [Thread-127151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:21:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:21:52.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:21:52.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:21:52.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:21:52.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:21:52.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:21:52.319 [DEBUG] [Thread-127151] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:22:02.027 [DEBUG] [Thread-127153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:17.075 [DEBUG] [Thread-127154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:22:22.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:22:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:22:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 21, 52), 10.47, 49.23, 0.0, 25.64, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:22:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:21:52
2025-12-04T01:22:23.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:22:23.316 [DEBUG] [Thread-127155] [transport.py] [_log()] starting thread (client mode): 0xa51d34c0
2025-12-04T01:22:23.316 [DEBUG] [Thread-127155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:22:23.337 [DEBUG] [Thread-127155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:22:23.337 [INFO] [Thread-127155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] client lang: <none>
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] server lang: <none>
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] kex follows: False
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:22:23.341 [DEBUG] [Thread-127155] [transport.py] [_log()] Compression: none
2025-12-04T01:22:23.342 [DEBUG] [Thread-127155] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:22:23.357 [DEBUG] [Thread-127155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:22:23.358 [DEBUG] [Thread-127155] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:22:23.358 [DEBUG] [Thread-127155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:22:23.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:22:23.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:22:23.360 [DEBUG] [Thread-127155] [transport.py] [_log()] userauth is OK
2025-12-04T01:22:23.361 [DEBUG] [Thread-127155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:22:23.361 [DEBUG] [Thread-127155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:22:23.361 [DEBUG] [Thread-127155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:22:23.361 [DEBUG] [Thread-127155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:22:23.385 [INFO] [Thread-127155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:22:23.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:22:23.996 [DEBUG] [Thread-127155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:22:23.997 [DEBUG] [Thread-127155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:22:23.997 [DEBUG] [Thread-127155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:22:24.038 [DEBUG] [Thread-127155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:22:24.038 [DEBUG] [Thread-127155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:22:24.040 [DEBUG] [Thread-127155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:22:24.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:22:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:22:24.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:22:24.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:22:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:22:24.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:22:24.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:22:24.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:22:24.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:22:24.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.973310 -999.00  +13.30  17.09     53   +4.10 1 1 1 1 1     0    0 8.92 -15.45 ZNESW 17.0 17.1 143.0 26.1 13.8 -24.9 13.6 -24.5 13.4 -23.0 13.8 -23.7
2025-12-04T01:22:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:22:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:22:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.973310
2025-12-04T01:22:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:22:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:22:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:22:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:22:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:22:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:21:52', tmtdew=10.47, humidity=49.23, cloud=0.0, wind=25.64, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:21:53', seeing=1.02, atlas_timestamp='2025-12-03T23:21:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:19:00')
2025-12-04T01:22:24.066 [DEBUG] [Thread-127155] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:22:24.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:22:24.162 [DEBUG] [Thread-127158] [transport.py] [_log()] starting thread (client mode): 0xa51d3a60
2025-12-04T01:22:24.162 [DEBUG] [Thread-127158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:22:24.179 [DEBUG] [Thread-127158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:22:24.179 [INFO] [Thread-127158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:22:24.187 [DEBUG] [Thread-127158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] client lang: <none>
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] server lang: <none>
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] kex follows: False
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] Compression: none
2025-12-04T01:22:24.188 [DEBUG] [Thread-127158] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:22:24.246 [DEBUG] [Thread-127158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:22:24.246 [DEBUG] [Thread-127158] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:22:24.247 [DEBUG] [Thread-127158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:22:24.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:22:24.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:22:24.302 [DEBUG] [Thread-127158] [transport.py] [_log()] userauth is OK
2025-12-04T01:22:24.302 [DEBUG] [Thread-127158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:22:24.302 [DEBUG] [Thread-127158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:22:24.302 [DEBUG] [Thread-127158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:22:24.302 [DEBUG] [Thread-127158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:22:24.320 [INFO] [Thread-127158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:22:24.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:22:24.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:22:25.157 [DEBUG] [Thread-127158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:22:25.157 [DEBUG] [Thread-127158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:22:25.205 [DEBUG] [Thread-127158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:22:25.205 [DEBUG] [Thread-127158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:22:25.213 [DEBUG] [Thread-127158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:22:25.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:22:25.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:22:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:22:25.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:22:25.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:22:25.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:22:25.247 [DEBUG] [Thread-127158] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:22:27.450 [DEBUG] [Thread-127160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:32.103 [DEBUG] [Thread-127161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:38.886 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:38.887 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:47.150 [DEBUG] [Thread-127162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:22:55.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:22:55.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:22:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:22:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 22, 24), 10.46, 49.3, 0.0, 26.41, 13.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:22:55.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:22:24
2025-12-04T01:22:56.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:22:56.220 [DEBUG] [Thread-127163] [transport.py] [_log()] starting thread (client mode): 0xa2709bd0
2025-12-04T01:22:56.220 [DEBUG] [Thread-127163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:22:56.241 [DEBUG] [Thread-127163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:22:56.241 [INFO] [Thread-127163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] client lang: <none>
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] server lang: <none>
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] kex follows: False
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:22:56.244 [DEBUG] [Thread-127163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:22:56.245 [DEBUG] [Thread-127163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:22:56.245 [DEBUG] [Thread-127163] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:22:56.245 [DEBUG] [Thread-127163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:22:56.245 [DEBUG] [Thread-127163] [transport.py] [_log()] Compression: none
2025-12-04T01:22:56.245 [DEBUG] [Thread-127163] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:22:56.263 [DEBUG] [Thread-127163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:22:56.263 [DEBUG] [Thread-127163] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:22:56.264 [DEBUG] [Thread-127163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:22:56.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:22:56.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:22:56.265 [DEBUG] [Thread-127163] [transport.py] [_log()] userauth is OK
2025-12-04T01:22:56.266 [DEBUG] [Thread-127163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:22:56.266 [DEBUG] [Thread-127163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:22:56.266 [DEBUG] [Thread-127163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:22:56.266 [DEBUG] [Thread-127163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:22:56.301 [INFO] [Thread-127163] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:22:56.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:22:56.940 [DEBUG] [Thread-127163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:22:56.940 [DEBUG] [Thread-127163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:22:56.940 [DEBUG] [Thread-127163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:22:56.981 [DEBUG] [Thread-127163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:22:56.981 [DEBUG] [Thread-127163] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:22:56.984 [DEBUG] [Thread-127163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:22:56.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:22:56.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:22:56.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:22:57.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:22:57.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:22:57.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:22:57.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:22:57.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.973657 -999.00  +13.20  23.10     53   +4.10 1 1 1 1 1     0    0 8.64 -14.95 ZNESW 23.5 23.1 146.8 28.6 13.7 -24.7 13.6 -24.4 13.4 -22.8 13.7 -23.5
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.973657
2025-12-04T01:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:22:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:22:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:22:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:22:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:22:57.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:22:24', tmtdew=10.46, humidity=49.3, cloud=0.0, wind=26.41, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:22:25', seeing=1.18, atlas_timestamp='2025-12-03T23:22:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:19:00')
2025-12-04T01:22:57.010 [DEBUG] [Thread-127163] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:22:57.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:22:57.107 [DEBUG] [Thread-127166] [transport.py] [_log()] starting thread (client mode): 0xa2709ff0
2025-12-04T01:22:57.107 [DEBUG] [Thread-127166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:22:57.122 [DEBUG] [Thread-127166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:22:57.122 [INFO] [Thread-127166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:22:57.129 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:22:57.129 [DEBUG] [Thread-127166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:22:57.129 [DEBUG] [Thread-127166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] client lang: <none>
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] server lang: <none>
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] kex follows: False
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] Compression: none
2025-12-04T01:22:57.130 [DEBUG] [Thread-127166] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:22:57.186 [DEBUG] [Thread-127166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:22:57.186 [DEBUG] [Thread-127166] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:22:57.187 [DEBUG] [Thread-127166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:22:57.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:22:57.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:22:57.243 [DEBUG] [Thread-127166] [transport.py] [_log()] userauth is OK
2025-12-04T01:22:57.243 [DEBUG] [Thread-127166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:22:57.243 [DEBUG] [Thread-127166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:22:57.243 [DEBUG] [Thread-127166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:22:57.243 [DEBUG] [Thread-127166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:22:57.264 [INFO] [Thread-127166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:22:57.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:22:57.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:22:58.076 [DEBUG] [Thread-127166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:22:58.076 [DEBUG] [Thread-127166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:22:58.127 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:22:58.127 [DEBUG] [Thread-127166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:22:58.135 [DEBUG] [Thread-127166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:22:58.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:22:58.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:22:58.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:22:58.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:22:58.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:22:58.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:22:58.169 [DEBUG] [Thread-127166] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:23:02.184 [DEBUG] [Thread-127168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:17.226 [DEBUG] [Thread-127169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:27.508 [DEBUG] [Thread-127170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:23:28.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:23:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:23:28.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 22, 57), 10.52, 48.75, 0.0, 24.3, 13.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:23:28.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:22:57
2025-12-04T01:23:28.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:23:29.138 [DEBUG] [Thread-127171] [transport.py] [_log()] starting thread (client mode): 0xa51cc3d0
2025-12-04T01:23:29.138 [DEBUG] [Thread-127171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:23:29.160 [DEBUG] [Thread-127171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:23:29.160 [INFO] [Thread-127171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] client lang: <none>
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] server lang: <none>
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] kex follows: False
2025-12-04T01:23:29.163 [DEBUG] [Thread-127171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] Compression: none
2025-12-04T01:23:29.164 [DEBUG] [Thread-127171] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:23:29.181 [DEBUG] [Thread-127171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:23:29.181 [DEBUG] [Thread-127171] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:23:29.182 [DEBUG] [Thread-127171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:23:29.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:23:29.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:23:29.184 [DEBUG] [Thread-127171] [transport.py] [_log()] userauth is OK
2025-12-04T01:23:29.184 [DEBUG] [Thread-127171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:23:29.184 [DEBUG] [Thread-127171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:23:29.184 [DEBUG] [Thread-127171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:23:29.184 [DEBUG] [Thread-127171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:23:29.200 [INFO] [Thread-127171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:23:29.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:23:29.858 [DEBUG] [Thread-127171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:23:29.858 [DEBUG] [Thread-127171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:23:29.858 [DEBUG] [Thread-127171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:23:29.898 [DEBUG] [Thread-127171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:23:29.898 [DEBUG] [Thread-127171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:23:29.900 [DEBUG] [Thread-127171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:23:29.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:23:29.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:23:29.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:23:29.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:23:29.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:23:29.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:23:29.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.974005 -999.00  +13.30  21.62     53   +4.10 1 1 1 1 1     0    0 8.99 -14.17 ZNESW 19.6 21.6 141.2 31.1 13.8 -24.9 13.7 -24.4 13.4 -22.7 13.7 -23.6
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.974005
2025-12-04T01:23:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:23:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:23:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:23:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:23:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:23:29.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:22:57', tmtdew=10.52, humidity=48.75, cloud=0.0, wind=24.3, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:22:57', seeing=1.18, atlas_timestamp='2025-12-03T23:22:34.032', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:19:00')
2025-12-04T01:23:29.918 [DEBUG] [Thread-127171] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:23:29.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:23:30.008 [DEBUG] [Thread-127174] [transport.py] [_log()] starting thread (client mode): 0xa51cefb0
2025-12-04T01:23:30.008 [DEBUG] [Thread-127174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:23:30.025 [DEBUG] [Thread-127174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:23:30.025 [INFO] [Thread-127174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:23:30.032 [DEBUG] [Thread-127174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] client lang: <none>
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] server lang: <none>
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] kex follows: False
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] Compression: none
2025-12-04T01:23:30.033 [DEBUG] [Thread-127174] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:23:30.096 [DEBUG] [Thread-127174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:23:30.096 [DEBUG] [Thread-127174] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:23:30.097 [DEBUG] [Thread-127174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:23:30.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:23:30.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:23:30.155 [DEBUG] [Thread-127174] [transport.py] [_log()] userauth is OK
2025-12-04T01:23:30.155 [DEBUG] [Thread-127174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:23:30.155 [DEBUG] [Thread-127174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:23:30.155 [DEBUG] [Thread-127174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:23:30.155 [DEBUG] [Thread-127174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:23:30.169 [INFO] [Thread-127174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:23:30.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:23:30.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:23:31.011 [DEBUG] [Thread-127174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:23:31.011 [DEBUG] [Thread-127174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:23:31.058 [DEBUG] [Thread-127174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:23:31.058 [DEBUG] [Thread-127174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:23:31.067 [DEBUG] [Thread-127174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:23:31.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:23:31.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:23:31.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:23:31.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:23:31.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:23:31.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:23:31.099 [DEBUG] [Thread-127174] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:23:32.252 [DEBUG] [Thread-127176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:39.089 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:39.090 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:23:47.289 [DEBUG] [Thread-127177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:01.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:24:01.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:24:01.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:24:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 23, 29), 10.52, 48.75, 0.0, 23.19, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:24:01.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:23:29
2025-12-04T01:24:01.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:24:02.129 [DEBUG] [Thread-127178] [transport.py] [_log()] starting thread (client mode): 0xa51d1e40
2025-12-04T01:24:02.129 [DEBUG] [Thread-127178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:24:02.149 [DEBUG] [Thread-127178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:24:02.149 [INFO] [Thread-127178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] client lang: <none>
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] server lang: <none>
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] kex follows: False
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:24:02.153 [DEBUG] [Thread-127178] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:24:02.154 [DEBUG] [Thread-127178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:24:02.154 [DEBUG] [Thread-127178] [transport.py] [_log()] Compression: none
2025-12-04T01:24:02.154 [DEBUG] [Thread-127178] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:24:02.170 [DEBUG] [Thread-127178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:24:02.170 [DEBUG] [Thread-127178] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:24:02.170 [DEBUG] [Thread-127178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:24:02.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:24:02.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:24:02.171 [DEBUG] [Thread-127178] [transport.py] [_log()] userauth is OK
2025-12-04T01:24:02.171 [DEBUG] [Thread-127178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:24:02.171 [DEBUG] [Thread-127178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:24:02.171 [DEBUG] [Thread-127178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:24:02.171 [DEBUG] [Thread-127178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:24:02.186 [INFO] [Thread-127178] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:24:02.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:24:02.317 [DEBUG] [Thread-127180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:02.838 [DEBUG] [Thread-127178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:24:02.838 [DEBUG] [Thread-127178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:24:02.838 [DEBUG] [Thread-127178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:24:02.879 [DEBUG] [Thread-127178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:24:02.879 [DEBUG] [Thread-127178] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:24:02.880 [DEBUG] [Thread-127178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:24:02.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:24:02.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:24:02.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:24:02.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:24:02.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:24:02.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:24:02.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:24:02.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:24:02.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.974699 -999.00  +13.30  21.30     53   +4.10 1 1 1 1 1     0    0 9.15 -12.71 ZNESW 20.7 21.3 145.5 26.3 13.8 -24.9 13.6 -24.4 13.4 -22.7 13.7 -23.7
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.974699
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:24:02.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:23:29', tmtdew=10.52, humidity=48.75, cloud=0.0, wind=23.19, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:23:29', seeing=1.27, atlas_timestamp='2025-12-03T23:23:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:19:00')
2025-12-04T01:24:02.898 [DEBUG] [Thread-127178] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:24:02.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:24:02.984 [DEBUG] [Thread-127182] [transport.py] [_log()] starting thread (client mode): 0xa51cee00
2025-12-04T01:24:02.984 [DEBUG] [Thread-127182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:24:03.001 [DEBUG] [Thread-127182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:24:03.001 [INFO] [Thread-127182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] client lang: <none>
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] server lang: <none>
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] kex follows: False
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] Compression: none
2025-12-04T01:24:03.009 [DEBUG] [Thread-127182] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:24:03.066 [DEBUG] [Thread-127182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:24:03.066 [DEBUG] [Thread-127182] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:24:03.066 [DEBUG] [Thread-127182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:24:03.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:24:03.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:24:03.124 [DEBUG] [Thread-127182] [transport.py] [_log()] userauth is OK
2025-12-04T01:24:03.124 [DEBUG] [Thread-127182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:24:03.124 [DEBUG] [Thread-127182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:24:03.124 [DEBUG] [Thread-127182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:24:03.124 [DEBUG] [Thread-127182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:24:03.137 [INFO] [Thread-127182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:24:03.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:24:03.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:24:04.034 [DEBUG] [Thread-127182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:24:04.034 [DEBUG] [Thread-127182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:24:04.082 [DEBUG] [Thread-127182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:24:04.082 [DEBUG] [Thread-127182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:24:04.091 [DEBUG] [Thread-127182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:24:04.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:24:04.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:24:04.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:24:04.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:24:04.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:24:04.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:24:04.126 [DEBUG] [Thread-127182] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:24:17.348 [DEBUG] [Thread-127184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:27.569 [DEBUG] [Thread-127185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:32.389 [DEBUG] [Thread-127186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:34.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:24:34.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:24:34.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:24:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 24, 1), 10.47, 49.25, 0.0, 24.49, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:24:34.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:24:01
2025-12-04T01:24:35.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:24:35.204 [DEBUG] [Thread-127187] [transport.py] [_log()] starting thread (client mode): 0xa27868f0
2025-12-04T01:24:35.204 [DEBUG] [Thread-127187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:24:35.223 [DEBUG] [Thread-127187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:24:35.223 [INFO] [Thread-127187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] client lang: <none>
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] server lang: <none>
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] kex follows: False
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] Compression: none
2025-12-04T01:24:35.226 [DEBUG] [Thread-127187] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:24:35.242 [DEBUG] [Thread-127187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:24:35.242 [DEBUG] [Thread-127187] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:24:35.242 [DEBUG] [Thread-127187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:24:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:24:35.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:24:35.243 [DEBUG] [Thread-127187] [transport.py] [_log()] userauth is OK
2025-12-04T01:24:35.243 [DEBUG] [Thread-127187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:24:35.243 [DEBUG] [Thread-127187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:24:35.243 [DEBUG] [Thread-127187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:24:35.243 [DEBUG] [Thread-127187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:24:35.252 [INFO] [Thread-127187] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:24:35.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:24:35.885 [DEBUG] [Thread-127187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:24:35.885 [DEBUG] [Thread-127187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:24:35.885 [DEBUG] [Thread-127187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:24:35.927 [DEBUG] [Thread-127187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:24:35.927 [DEBUG] [Thread-127187] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:24:35.929 [DEBUG] [Thread-127187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:24:35.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:24:35.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:24:35.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:24:35.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:24:35.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:24:35.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:24:35.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.975046 -999.00  +13.30  21.08     53   +4.10 1 1 1 1 1     0    0 8.92 -11.67 ZNESW 18.8 21.1 142.2 24.1 13.7 -24.9 13.7 -24.4 13.4 -22.7 13.8 -23.8
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.975046
2025-12-04T01:24:35.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:24:35.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:24:01', tmtdew=10.47, humidity=49.25, cloud=0.0, wind=24.49, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:24:33', seeing=1.35, atlas_timestamp='2025-12-03T23:24:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:24:35.948 [DEBUG] [Thread-127187] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:24:36.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:24:36.036 [DEBUG] [Thread-127190] [transport.py] [_log()] starting thread (client mode): 0xa519b520
2025-12-04T01:24:36.036 [DEBUG] [Thread-127190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:24:36.051 [DEBUG] [Thread-127190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:24:36.051 [INFO] [Thread-127190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:24:36.059 [DEBUG] [Thread-127190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] client lang: <none>
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] server lang: <none>
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] kex follows: False
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] Compression: none
2025-12-04T01:24:36.060 [DEBUG] [Thread-127190] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:24:36.119 [DEBUG] [Thread-127190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:24:36.119 [DEBUG] [Thread-127190] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:24:36.119 [DEBUG] [Thread-127190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:24:36.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:24:36.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:24:36.176 [DEBUG] [Thread-127190] [transport.py] [_log()] userauth is OK
2025-12-04T01:24:36.176 [DEBUG] [Thread-127190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:24:36.176 [DEBUG] [Thread-127190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:24:36.176 [DEBUG] [Thread-127190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:24:36.176 [DEBUG] [Thread-127190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:24:36.194 [INFO] [Thread-127190] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:24:36.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:24:36.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:24:37.062 [DEBUG] [Thread-127190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:24:37.062 [DEBUG] [Thread-127190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:24:37.110 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:24:37.110 [DEBUG] [Thread-127190] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:24:37.123 [DEBUG] [Thread-127190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:24:37.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:24:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:24:37.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:24:37.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:24:37.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:24:37.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:24:37.159 [DEBUG] [Thread-127190] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:24:39.287 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:39.288 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:24:47.415 [DEBUG] [Thread-127192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:02.472 [DEBUG] [Thread-127193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:07.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:25:07.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:25:07.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:25:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 24, 33), 10.45, 49.33, 0.0, 25.28, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:25:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:24:33
2025-12-04T01:25:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:25:08.169 [DEBUG] [Thread-127194] [transport.py] [_log()] starting thread (client mode): 0xa27460e0
2025-12-04T01:25:08.169 [DEBUG] [Thread-127194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:25:08.190 [DEBUG] [Thread-127194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:25:08.190 [INFO] [Thread-127194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] client lang: <none>
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] server lang: <none>
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] kex follows: False
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] Compression: none
2025-12-04T01:25:08.193 [DEBUG] [Thread-127194] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:25:08.212 [DEBUG] [Thread-127194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:25:08.212 [DEBUG] [Thread-127194] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:25:08.213 [DEBUG] [Thread-127194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:25:08.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:25:08.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:25:08.215 [DEBUG] [Thread-127194] [transport.py] [_log()] userauth is OK
2025-12-04T01:25:08.215 [DEBUG] [Thread-127194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:25:08.215 [DEBUG] [Thread-127194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:25:08.215 [DEBUG] [Thread-127194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:25:08.215 [DEBUG] [Thread-127194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:25:08.233 [INFO] [Thread-127194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:25:08.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:25:08.882 [DEBUG] [Thread-127194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:25:08.882 [DEBUG] [Thread-127194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:25:08.882 [DEBUG] [Thread-127194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:25:08.923 [DEBUG] [Thread-127194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:25:08.923 [DEBUG] [Thread-127194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:25:08.925 [DEBUG] [Thread-127194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:25:08.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:25:08.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:25:08.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:25:08.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:25:08.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:25:08.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:25:08.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.975393 -999.00  +13.30  21.09     53   +4.10 1 1 1 1 1     0    0 8.95 -11.23 ZNESW 24.2 21.1 141.2 24.8 13.7 -25.0 13.7 -24.3 13.4 -22.8 13.7 -23.7
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.975393
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:25:08.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:24:33', tmtdew=10.45, humidity=49.33, cloud=0.0, wind=25.28, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:25:05', seeing=1.18, atlas_timestamp='2025-12-03T23:24:33.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:25:08.942 [DEBUG] [Thread-127194] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:25:09.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:25:09.028 [DEBUG] [Thread-127197] [transport.py] [_log()] starting thread (client mode): 0xa2746ef0
2025-12-04T01:25:09.028 [DEBUG] [Thread-127197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:25:09.043 [DEBUG] [Thread-127197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:25:09.043 [INFO] [Thread-127197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:09.050 [DEBUG] [Thread-127197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] client lang: <none>
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] server lang: <none>
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] kex follows: False
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] Compression: none
2025-12-04T01:25:09.051 [DEBUG] [Thread-127197] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:25:09.107 [DEBUG] [Thread-127197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:25:09.107 [DEBUG] [Thread-127197] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:25:09.108 [DEBUG] [Thread-127197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:25:09.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:25:09.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:25:09.164 [DEBUG] [Thread-127197] [transport.py] [_log()] userauth is OK
2025-12-04T01:25:09.164 [DEBUG] [Thread-127197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:25:09.164 [DEBUG] [Thread-127197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:25:09.164 [DEBUG] [Thread-127197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:25:09.164 [DEBUG] [Thread-127197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:25:09.181 [INFO] [Thread-127197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:25:09.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:25:09.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:25:10.018 [DEBUG] [Thread-127197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:25:10.018 [DEBUG] [Thread-127197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:25:10.067 [DEBUG] [Thread-127197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:25:10.067 [DEBUG] [Thread-127197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:25:10.077 [DEBUG] [Thread-127197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:25:10.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:25:10.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:25:10.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:25:10.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:25:10.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:25:10.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:25:10.118 [DEBUG] [Thread-127197] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:25:17.501 [DEBUG] [Thread-127199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:27.638 [DEBUG] [Thread-127200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:32.543 [DEBUG] [Thread-127201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:39.486 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:39.486 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:25:40.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:25:40.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:25:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:25:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 25, 37), 10.59, 48.87, 0.0, 26.68, 13.38, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:25:40.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:25:37
2025-12-04T01:25:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:25:41.096 [DEBUG] [Thread-127202] [transport.py] [_log()] starting thread (client mode): 0xa51d33d0
2025-12-04T01:25:41.096 [DEBUG] [Thread-127202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:25:41.118 [DEBUG] [Thread-127202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:25:41.118 [INFO] [Thread-127202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] client lang: <none>
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] server lang: <none>
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] kex follows: False
2025-12-04T01:25:41.122 [DEBUG] [Thread-127202] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] Compression: none
2025-12-04T01:25:41.123 [DEBUG] [Thread-127202] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:25:41.139 [DEBUG] [Thread-127202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:25:41.139 [DEBUG] [Thread-127202] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:25:41.140 [DEBUG] [Thread-127202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:25:41.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:25:41.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:25:41.142 [DEBUG] [Thread-127202] [transport.py] [_log()] userauth is OK
2025-12-04T01:25:41.142 [DEBUG] [Thread-127202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:25:41.142 [DEBUG] [Thread-127202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:25:41.142 [DEBUG] [Thread-127202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:25:41.142 [DEBUG] [Thread-127202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:25:41.171 [INFO] [Thread-127202] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:25:41.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:25:41.794 [DEBUG] [Thread-127202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:25:41.794 [DEBUG] [Thread-127202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:25:41.795 [DEBUG] [Thread-127202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:25:41.836 [DEBUG] [Thread-127202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:25:41.836 [DEBUG] [Thread-127202] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:25:41.839 [DEBUG] [Thread-127202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:25:41.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:25:41.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:25:41.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:25:41.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:25:41.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:25:41.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:25:41.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:25:41.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:25:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:25:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.975740 -999.00  +13.30  22.04     53   +4.00 1 1 1 1 1     0    0 8.98 -10.32 ZNESW 22.4 22.0 143.2 28.3 13.7 -24.9 13.6 -24.4 13.4 -22.7 13.7 -23.6
2025-12-04T01:25:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:25:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:25:41.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.975740
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:25:41.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:25:37', tmtdew=10.59, humidity=48.87, cloud=0.0, wind=26.68, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:25:37', seeing=1.38, atlas_timestamp='2025-12-03T23:25:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:25:41.866 [DEBUG] [Thread-127202] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:25:41.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:25:41.961 [DEBUG] [Thread-127205] [transport.py] [_log()] starting thread (client mode): 0xa51cc100
2025-12-04T01:25:41.961 [DEBUG] [Thread-127205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:25:41.976 [DEBUG] [Thread-127205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:25:41.976 [INFO] [Thread-127205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:25:41.983 [DEBUG] [Thread-127205] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:25:41.983 [DEBUG] [Thread-127205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:25:41.983 [DEBUG] [Thread-127205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] client lang: <none>
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] server lang: <none>
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] kex follows: False
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] Compression: none
2025-12-04T01:25:41.984 [DEBUG] [Thread-127205] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:25:42.040 [DEBUG] [Thread-127205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:25:42.040 [DEBUG] [Thread-127205] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:25:42.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:25:42.041 [DEBUG] [Thread-127205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:25:42.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:25:42.097 [DEBUG] [Thread-127205] [transport.py] [_log()] userauth is OK
2025-12-04T01:25:42.097 [DEBUG] [Thread-127205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:25:42.097 [DEBUG] [Thread-127205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:25:42.097 [DEBUG] [Thread-127205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:25:42.098 [DEBUG] [Thread-127205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:25:42.116 [INFO] [Thread-127205] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:25:42.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:25:42.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:25:42.993 [DEBUG] [Thread-127205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:25:42.993 [DEBUG] [Thread-127205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:25:43.041 [DEBUG] [Thread-127205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:25:43.041 [DEBUG] [Thread-127205] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:25:43.050 [DEBUG] [Thread-127205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:25:43.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:25:43.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:25:43.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:25:43.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:25:43.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:25:43.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:25:43.086 [DEBUG] [Thread-127205] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:25:47.571 [DEBUG] [Thread-127207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:02.605 [DEBUG] [Thread-127208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:04.831 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:07.990 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:13.012 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:26:13.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:26:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:26:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 26, 9), 10.6, 48.82, 0.0, 27.74, 13.36, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:26:13.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:26:09
2025-12-04T01:26:13.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:26:14.081 [DEBUG] [Thread-127209] [transport.py] [_log()] starting thread (client mode): 0xa2708b80
2025-12-04T01:26:14.081 [DEBUG] [Thread-127209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:26:14.101 [DEBUG] [Thread-127209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:26:14.102 [INFO] [Thread-127209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] client lang: <none>
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] server lang: <none>
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] kex follows: False
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] Compression: none
2025-12-04T01:26:14.105 [DEBUG] [Thread-127209] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:26:14.122 [DEBUG] [Thread-127209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:26:14.122 [DEBUG] [Thread-127209] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:26:14.123 [DEBUG] [Thread-127209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:26:14.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:26:14.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:26:14.124 [DEBUG] [Thread-127209] [transport.py] [_log()] userauth is OK
2025-12-04T01:26:14.124 [DEBUG] [Thread-127209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:26:14.125 [DEBUG] [Thread-127209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:26:14.125 [DEBUG] [Thread-127209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:26:14.125 [DEBUG] [Thread-127209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:26:14.142 [INFO] [Thread-127209] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:26:14.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:26:14.798 [DEBUG] [Thread-127209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:26:14.798 [DEBUG] [Thread-127209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:26:14.798 [DEBUG] [Thread-127209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:26:14.839 [DEBUG] [Thread-127209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:26:14.839 [DEBUG] [Thread-127209] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:26:14.842 [DEBUG] [Thread-127209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:26:14.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:26:14.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:26:14.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:26:14.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:26:14.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:26:14.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:26:14.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:26:14.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:26:14.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:26:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.976088 -999.00  +13.30  21.88     53   +4.00 1 1 1 1 1     0    0 8.89 -8.49 ZNESW 23.6 21.9 140.6 29.8 13.7 -24.9 13.6 -24.3 13.4 -22.8 13.7 -23.7
2025-12-04T01:26:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:26:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:26:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.976088
2025-12-04T01:26:14.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:26:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:26:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:26:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:26:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:26:14.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:26:09', tmtdew=10.6, humidity=48.82, cloud=0.0, wind=27.74, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:26:09', seeing=1.51, atlas_timestamp='2025-12-03T23:25:34.003', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:26:14.868 [DEBUG] [Thread-127209] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:26:14.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:26:14.965 [DEBUG] [Thread-127212] [transport.py] [_log()] starting thread (client mode): 0xa51d2fb0
2025-12-04T01:26:14.965 [DEBUG] [Thread-127212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:26:14.982 [DEBUG] [Thread-127212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:26:14.983 [INFO] [Thread-127212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:14.990 [DEBUG] [Thread-127212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] client lang: <none>
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] server lang: <none>
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] kex follows: False
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] Compression: none
2025-12-04T01:26:14.991 [DEBUG] [Thread-127212] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:26:15.063 [DEBUG] [Thread-127212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:26:15.063 [DEBUG] [Thread-127212] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:26:15.064 [DEBUG] [Thread-127212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:26:15.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:26:15.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:26:15.121 [DEBUG] [Thread-127212] [transport.py] [_log()] userauth is OK
2025-12-04T01:26:15.121 [DEBUG] [Thread-127212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:26:15.122 [DEBUG] [Thread-127212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:26:15.122 [DEBUG] [Thread-127212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:26:15.122 [DEBUG] [Thread-127212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:26:15.141 [INFO] [Thread-127212] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:26:15.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:26:15.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:26:15.927 [DEBUG] [Thread-127212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:26:15.928 [DEBUG] [Thread-127212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:26:15.976 [DEBUG] [Thread-127212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:26:15.976 [DEBUG] [Thread-127212] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:26:15.985 [DEBUG] [Thread-127212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:26:15.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:26:15.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:26:16.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:26:16.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:26:16.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:26:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:26:16.022 [DEBUG] [Thread-127212] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:26:17.634 [DEBUG] [Thread-127214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:18.388 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:27.694 [DEBUG] [Thread-127215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:27.768 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:32.126 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:32.683 [DEBUG] [Thread-127216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:39.683 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:39.684 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:46.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:26:46.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:26:46.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:26:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 26, 41), 10.53, 48.73, 0.0, 25.76, 13.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:26:46.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:26:41
2025-12-04T01:26:46.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:26:46.988 [DEBUG] [Thread-127217] [transport.py] [_log()] starting thread (client mode): 0xa2745150
2025-12-04T01:26:46.988 [DEBUG] [Thread-127217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:26:47.008 [DEBUG] [Thread-127217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:26:47.008 [INFO] [Thread-127217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] client lang: <none>
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] server lang: <none>
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] kex follows: False
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:26:47.011 [DEBUG] [Thread-127217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:26:47.012 [DEBUG] [Thread-127217] [transport.py] [_log()] Compression: none
2025-12-04T01:26:47.012 [DEBUG] [Thread-127217] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:26:47.029 [DEBUG] [Thread-127217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:26:47.029 [DEBUG] [Thread-127217] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:26:47.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:26:47.030 [DEBUG] [Thread-127217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:26:47.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:26:47.032 [DEBUG] [Thread-127217] [transport.py] [_log()] userauth is OK
2025-12-04T01:26:47.032 [DEBUG] [Thread-127217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:26:47.033 [DEBUG] [Thread-127217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:26:47.033 [DEBUG] [Thread-127217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:26:47.033 [DEBUG] [Thread-127217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:26:47.050 [INFO] [Thread-127217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:26:47.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:26:47.712 [DEBUG] [Thread-127219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:47.725 [DEBUG] [Thread-127217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:26:47.726 [DEBUG] [Thread-127217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:26:47.726 [DEBUG] [Thread-127217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:26:47.767 [DEBUG] [Thread-127217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:26:47.767 [DEBUG] [Thread-127217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:26:47.770 [DEBUG] [Thread-127217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:26:47.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:26:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:26:47.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:26:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:26:47.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:26:47.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:26:47.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:26:47.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.976435 -999.00  +13.30  19.50     53   +4.00 1 1 1 1 1     0    0 9.18 -7.81 ZNESW 19.3 19.5 140.2 26.6 13.7 -25.0 13.6 -24.4 13.4 -23.0 13.7 -23.8
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.976435
2025-12-04T01:26:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:26:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:26:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:26:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:26:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:26:47.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:26:41', tmtdew=10.53, humidity=48.73, cloud=0.0, wind=25.76, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:26:41', seeing=1.51, atlas_timestamp='2025-12-03T23:26:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:26:47.792 [DEBUG] [Thread-127217] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:26:47.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:26:47.891 [DEBUG] [Thread-127221] [transport.py] [_log()] starting thread (client mode): 0xa2745720
2025-12-04T01:26:47.891 [DEBUG] [Thread-127221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:26:47.905 [DEBUG] [Thread-127221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:26:47.905 [INFO] [Thread-127221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:26:47.913 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:26:47.914 [DEBUG] [Thread-127221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] client lang: <none>
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] server lang: <none>
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] kex follows: False
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] Compression: none
2025-12-04T01:26:47.915 [DEBUG] [Thread-127221] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:26:47.969 [DEBUG] [Thread-127221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:26:47.969 [DEBUG] [Thread-127221] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:26:47.970 [DEBUG] [Thread-127221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:26:47.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:26:47.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:26:48.026 [DEBUG] [Thread-127221] [transport.py] [_log()] userauth is OK
2025-12-04T01:26:48.026 [DEBUG] [Thread-127221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:26:48.026 [DEBUG] [Thread-127221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:26:48.026 [DEBUG] [Thread-127221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:26:48.026 [DEBUG] [Thread-127221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:26:48.044 [INFO] [Thread-127221] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:26:48.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:26:48.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:26:48.898 [DEBUG] [Thread-127221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:26:48.899 [DEBUG] [Thread-127221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:26:48.950 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:26:48.950 [DEBUG] [Thread-127221] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:26:48.960 [DEBUG] [Thread-127221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:26:48.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:26:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:26:48.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:26:48.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:26:48.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:26:48.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:26:48.994 [DEBUG] [Thread-127221] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:26:51.543 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:26:55.929 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:02.057 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:02.740 [DEBUG] [Thread-127223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:06.420 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:17.778 [DEBUG] [Thread-127224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:19.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:27:19.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:27:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 27, 13), 10.54, 48.68, 0.0, 24.68, 13.26, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:27:19.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:27:13
2025-12-04T01:27:19.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:27:19.973 [DEBUG] [Thread-127225] [transport.py] [_log()] starting thread (client mode): 0xa5162fe0
2025-12-04T01:27:19.973 [DEBUG] [Thread-127225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:27:19.983 [DEBUG] [Thread-127225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:27:19.983 [INFO] [Thread-127225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:27:19.986 [DEBUG] [Thread-127225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:27:19.986 [DEBUG] [Thread-127225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:27:19.986 [DEBUG] [Thread-127225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:27:19.986 [DEBUG] [Thread-127225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:19.986 [DEBUG] [Thread-127225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] client lang: <none>
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] server lang: <none>
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] kex follows: False
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] Compression: none
2025-12-04T01:27:19.987 [DEBUG] [Thread-127225] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:27:20.001 [DEBUG] [Thread-127225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:27:20.001 [DEBUG] [Thread-127225] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:27:20.001 [DEBUG] [Thread-127225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:27:20.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:27:20.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:27:20.003 [DEBUG] [Thread-127225] [transport.py] [_log()] userauth is OK
2025-12-04T01:27:20.003 [DEBUG] [Thread-127225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:27:20.003 [DEBUG] [Thread-127225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:27:20.003 [DEBUG] [Thread-127225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:27:20.003 [DEBUG] [Thread-127225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:27:20.018 [INFO] [Thread-127225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:27:20.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:27:20.611 [DEBUG] [Thread-127225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:27:20.611 [DEBUG] [Thread-127225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:27:20.612 [DEBUG] [Thread-127225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:27:20.652 [DEBUG] [Thread-127225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:27:20.652 [DEBUG] [Thread-127225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:27:20.655 [DEBUG] [Thread-127225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:27:20.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:27:20.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:27:20.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:27:20.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:27:20.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:27:20.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:27:20.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.977129 -999.00  +13.20  19.48     53   +4.00 1 1 1 1 1     0    0 9.18 -7.35 ZNESW 15.8 19.5 147.4 25.9 13.7 -25.0 13.6 -24.5 13.4 -22.9 13.6 -23.7
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:27:20.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.977129
2025-12-04T01:27:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:27:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:27:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:27:20.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:27:20.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:27:20.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:27:13', tmtdew=10.54, humidity=48.68, cloud=0.0, wind=24.68, temperature=13.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:27:13', seeing=1.31, atlas_timestamp='2025-12-03T23:27:03.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.015249999999999986, 0.00024999999999941735, -0.005500000000001393, -0.09450000000000003, 0.005250000000000199, -0.10449999999999982, 0.0022500000000000853, -0.013000000000001677, -0.036999999999999034, 0.03125, 0.00849999999999973, 0.10449999999999982, 0.01124999999999865, -0.18599999999999994, -0.11550000000000082, 0.02624999999999922, -0.0015000000000000568, -0.032999999999999474, -0.054750000000002075, 0.08099999999999952, 0.03674999999999784, -0.00975000000000037, -0.00024999999999941735, 0.00849999999999973, 0.05250000000000021, -0.06124999999999936, 0.023000000000001464, 0.1700000000000017, -0.11799999999999855, -0.25599999999999845, -0.006999999999999673, 0.06824999999999903], zp_timestamp='2025-12-03T23:23:00')
2025-12-04T01:27:20.679 [DEBUG] [Thread-127225] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:27:20.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:27:20.775 [DEBUG] [Thread-127228] [transport.py] [_log()] starting thread (client mode): 0xa270bd90
2025-12-04T01:27:20.775 [DEBUG] [Thread-127228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:27:20.790 [DEBUG] [Thread-127228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:27:20.790 [INFO] [Thread-127228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:20.798 [DEBUG] [Thread-127228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] client lang: <none>
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] server lang: <none>
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] kex follows: False
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] Compression: none
2025-12-04T01:27:20.799 [DEBUG] [Thread-127228] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:27:20.858 [DEBUG] [Thread-127228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:27:20.858 [DEBUG] [Thread-127228] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:27:20.859 [DEBUG] [Thread-127228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:27:20.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:27:20.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:27:20.914 [DEBUG] [Thread-127228] [transport.py] [_log()] userauth is OK
2025-12-04T01:27:20.914 [DEBUG] [Thread-127228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:27:20.914 [DEBUG] [Thread-127228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:27:20.914 [DEBUG] [Thread-127228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:27:20.914 [DEBUG] [Thread-127228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:27:20.938 [INFO] [Thread-127228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:27:20.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:27:20.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:27:21.762 [DEBUG] [Thread-127228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:27:21.762 [DEBUG] [Thread-127228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:27:21.811 [DEBUG] [Thread-127228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:27:21.811 [DEBUG] [Thread-127228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:27:21.819 [DEBUG] [Thread-127228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:27:21.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:27:21.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:27:21.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:27:21.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:27:21.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:27:21.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:27:21.852 [DEBUG] [Thread-127228] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:27:27.761 [DEBUG] [Thread-127230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:32.808 [DEBUG] [Thread-127231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:39.890 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:39.891 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:47.846 [DEBUG] [Thread-127232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:27:51.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:27:51.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:27:51.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:27:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 27, 45), 10.61, 48.63, 0.0, 28.41, 13.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:27:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:27:45
2025-12-04T01:27:52.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:27:52.821 [DEBUG] [Thread-127233] [transport.py] [_log()] starting thread (client mode): 0xa2787ac0
2025-12-04T01:27:52.821 [DEBUG] [Thread-127233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:27:52.841 [DEBUG] [Thread-127233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:27:52.841 [INFO] [Thread-127233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] client lang: <none>
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] server lang: <none>
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] kex follows: False
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:27:52.844 [DEBUG] [Thread-127233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:27:52.845 [DEBUG] [Thread-127233] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:27:52.845 [DEBUG] [Thread-127233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:27:52.845 [DEBUG] [Thread-127233] [transport.py] [_log()] Compression: none
2025-12-04T01:27:52.845 [DEBUG] [Thread-127233] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:27:52.863 [DEBUG] [Thread-127233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:27:52.864 [DEBUG] [Thread-127233] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:27:52.864 [DEBUG] [Thread-127233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:27:52.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:27:52.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:27:52.866 [DEBUG] [Thread-127233] [transport.py] [_log()] userauth is OK
2025-12-04T01:27:52.866 [DEBUG] [Thread-127233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:27:52.866 [DEBUG] [Thread-127233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:27:52.866 [DEBUG] [Thread-127233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:27:52.867 [DEBUG] [Thread-127233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:27:52.892 [INFO] [Thread-127233] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:27:52.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:27:53.502 [DEBUG] [Thread-127233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:27:53.502 [DEBUG] [Thread-127233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:27:53.502 [DEBUG] [Thread-127233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:27:53.543 [DEBUG] [Thread-127233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:27:53.543 [DEBUG] [Thread-127233] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:27:53.546 [DEBUG] [Thread-127233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:27:53.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:27:53.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:27:53.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:27:53.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:27:53.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:27:53.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:27:53.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:27:53.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:27:53.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:27:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.977477 -999.00  +13.20  20.25     53   +4.00 1 1 1 1 1     0    0 9.21 -7.19 ZNESW 21.3 20.2 140.8 24.5 13.7 -24.8 13.6 -24.4 13.3 -23.0 13.7 -23.7
2025-12-04T01:27:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:27:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:27:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.977477
2025-12-04T01:27:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:27:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:27:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:27:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:27:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:27:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:27:45', tmtdew=10.61, humidity=48.63, cloud=0.0, wind=28.41, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:27:45', seeing=1.27, atlas_timestamp='2025-12-03T23:27:34.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.013749999999999929, -0.027749999999999275, -0.029500000000000526, -0.028999999999999915, 0.004750000000001364, -0.009999999999999787, -0.0007500000000000284, -0.02850000000000108, -0.08099999999999952, 0.01425000000000054, -0.010999999999999233, 0.09399999999999942, -0.021749999999999048, -0.2220000000000013, -0.08650000000000091, 0.01774999999999949, 0.009499999999999176, -0.02200000000000024, -0.0017500000000012506, 0.06899999999999906, 0.02474999999999916, -0.022749999999998494, -0.03125, 0.006499999999999062, 0.059499999999999886, -0.05274999999999963, 0.07949999999999946, 0.06199999999999939, -0.04849999999999888, -0.13899999999999935, -0.05099999999999838, 0.09124999999999872], zp_timestamp='2025-12-03T23:26:00')
2025-12-04T01:27:53.572 [DEBUG] [Thread-127233] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:27:53.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:27:53.669 [DEBUG] [Thread-127236] [transport.py] [_log()] starting thread (client mode): 0xa51cd060
2025-12-04T01:27:53.669 [DEBUG] [Thread-127236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:27:53.683 [DEBUG] [Thread-127236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:27:53.683 [INFO] [Thread-127236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] client lang: <none>
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] server lang: <none>
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] kex follows: False
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] Compression: none
2025-12-04T01:27:53.690 [DEBUG] [Thread-127236] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:27:53.750 [DEBUG] [Thread-127236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:27:53.751 [DEBUG] [Thread-127236] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:27:53.752 [DEBUG] [Thread-127236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:27:53.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:27:53.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:27:53.806 [DEBUG] [Thread-127236] [transport.py] [_log()] userauth is OK
2025-12-04T01:27:53.807 [DEBUG] [Thread-127236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:27:53.807 [DEBUG] [Thread-127236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:27:53.807 [DEBUG] [Thread-127236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:27:53.807 [DEBUG] [Thread-127236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:27:53.826 [INFO] [Thread-127236] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:27:53.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:27:53.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:27:54.648 [DEBUG] [Thread-127236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:27:54.648 [DEBUG] [Thread-127236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:27:54.696 [DEBUG] [Thread-127236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:27:54.696 [DEBUG] [Thread-127236] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:27:54.704 [DEBUG] [Thread-127236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:27:54.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:27:54.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:27:54.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:27:54.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:27:54.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:27:54.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:27:54.744 [DEBUG] [Thread-127236] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:28:02.872 [DEBUG] [Thread-127238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:14.908 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:17.921 [DEBUG] [Thread-127239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:19.008 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:24.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:28:24.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:28:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:28:25.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 28, 17), 10.61, 48.62, 0.0, 28.74, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:28:25.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:28:17
2025-12-04T01:28:25.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:28:25.729 [DEBUG] [Thread-127240] [transport.py] [_log()] starting thread (client mode): 0xa51bb1c0
2025-12-04T01:28:25.729 [DEBUG] [Thread-127240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:28:25.749 [DEBUG] [Thread-127240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:28:25.749 [INFO] [Thread-127240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] client lang: <none>
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] server lang: <none>
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] kex follows: False
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] Compression: none
2025-12-04T01:28:25.752 [DEBUG] [Thread-127240] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:28:25.767 [DEBUG] [Thread-127240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:28:25.767 [DEBUG] [Thread-127240] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:28:25.767 [DEBUG] [Thread-127240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:28:25.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:28:25.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:28:25.768 [DEBUG] [Thread-127240] [transport.py] [_log()] userauth is OK
2025-12-04T01:28:25.768 [DEBUG] [Thread-127240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:28:25.768 [DEBUG] [Thread-127240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:28:25.768 [DEBUG] [Thread-127240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:28:25.768 [DEBUG] [Thread-127240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:28:25.777 [INFO] [Thread-127240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:28:25.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:28:26.362 [DEBUG] [Thread-127240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:28:26.362 [DEBUG] [Thread-127240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:28:26.362 [DEBUG] [Thread-127240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:28:26.403 [DEBUG] [Thread-127240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:28:26.403 [DEBUG] [Thread-127240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:28:26.405 [DEBUG] [Thread-127240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:28:26.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:28:26.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:28:26.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:28:26.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:28:26.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:28:26.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:28:26.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:28:26.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.977824 -999.00  +13.20  24.03     53   +4.00 1 1 1 1 1     0    0 8.86 -6.83 ZNESW 25.2 24.0 144.0 27.1 13.7 -24.8 13.5 -24.4 13.3 -22.7 13.6 -23.6
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.977824
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:28:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:28:17', tmtdew=10.61, humidity=48.62, cloud=0.0, wind=28.74, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:28:18', seeing=1.31, atlas_timestamp='2025-12-03T23:28:03.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.013749999999999929, -0.027749999999999275, -0.029500000000000526, -0.028999999999999915, 0.004750000000001364, -0.009999999999999787, -0.0007500000000000284, -0.02850000000000108, -0.08099999999999952, 0.01425000000000054, -0.010999999999999233, 0.09399999999999942, -0.021749999999999048, -0.2220000000000013, -0.08650000000000091, 0.01774999999999949, 0.009499999999999176, -0.02200000000000024, -0.0017500000000012506, 0.06899999999999906, 0.02474999999999916, -0.022749999999998494, -0.03125, 0.006499999999999062, 0.059499999999999886, -0.05274999999999963, 0.07949999999999946, 0.06199999999999939, -0.04849999999999888, -0.13899999999999935, -0.05099999999999838, 0.09124999999999872], zp_timestamp='2025-12-03T23:26:00')
2025-12-04T01:28:26.416 [DEBUG] [Thread-127240] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:28:26.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:28:26.503 [DEBUG] [Thread-127243] [transport.py] [_log()] starting thread (client mode): 0xa51bbc70
2025-12-04T01:28:26.503 [DEBUG] [Thread-127243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:28:26.518 [DEBUG] [Thread-127243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:28:26.518 [INFO] [Thread-127243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] client lang: <none>
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] server lang: <none>
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] kex follows: False
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] Compression: none
2025-12-04T01:28:26.526 [DEBUG] [Thread-127243] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:28:26.586 [DEBUG] [Thread-127243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:28:26.586 [DEBUG] [Thread-127243] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:28:26.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:28:26.586 [DEBUG] [Thread-127243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:28:26.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:28:26.642 [DEBUG] [Thread-127243] [transport.py] [_log()] userauth is OK
2025-12-04T01:28:26.643 [DEBUG] [Thread-127243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:28:26.643 [DEBUG] [Thread-127243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:28:26.643 [DEBUG] [Thread-127243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:28:26.643 [DEBUG] [Thread-127243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:28:26.657 [INFO] [Thread-127243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:28:26.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:28:26.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:28:27.462 [DEBUG] [Thread-127243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:28:27.462 [DEBUG] [Thread-127243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:28:27.510 [DEBUG] [Thread-127243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:28:27.510 [DEBUG] [Thread-127243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:28:27.519 [DEBUG] [Thread-127243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:28:27.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:28:27.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:28:27.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:28:27.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:28:27.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:28:27.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:28:27.551 [DEBUG] [Thread-127243] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:28:27.830 [DEBUG] [Thread-127245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:32.948 [DEBUG] [Thread-127246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:40.090 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:40.092 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:40.395 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:47.989 [DEBUG] [Thread-127247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:28:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:28:57.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:28:57.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:28:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 28, 49), 10.66, 48.13, 0.0, 23.1, 13.36, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:28:58.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:28:49
2025-12-04T01:28:58.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:28:58.525 [DEBUG] [Thread-127248] [transport.py] [_log()] starting thread (client mode): 0xa27845e0
2025-12-04T01:28:58.525 [DEBUG] [Thread-127248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:28:58.546 [DEBUG] [Thread-127248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:28:58.546 [INFO] [Thread-127248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:28:58.547 [DEBUG] [Thread-127248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] client lang: <none>
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] server lang: <none>
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] kex follows: False
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] Compression: none
2025-12-04T01:28:58.548 [DEBUG] [Thread-127248] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:28:58.560 [DEBUG] [Thread-127248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:28:58.560 [DEBUG] [Thread-127248] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:28:58.561 [DEBUG] [Thread-127248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:28:58.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:28:58.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:28:58.562 [DEBUG] [Thread-127248] [transport.py] [_log()] userauth is OK
2025-12-04T01:28:58.563 [DEBUG] [Thread-127248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:28:58.563 [DEBUG] [Thread-127248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:28:58.563 [DEBUG] [Thread-127248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:28:58.563 [DEBUG] [Thread-127248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:28:58.586 [INFO] [Thread-127248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:28:58.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:28:59.212 [DEBUG] [Thread-127248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:28:59.212 [DEBUG] [Thread-127248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:28:59.213 [DEBUG] [Thread-127248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:28:59.253 [DEBUG] [Thread-127248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:28:59.253 [DEBUG] [Thread-127248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:28:59.256 [DEBUG] [Thread-127248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:28:59.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:28:59.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:28:59.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:28:59.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:28:59.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:28:59.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:28:59.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:28:59.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:28:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:28:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.978171 -999.00  +13.20  22.19     53   +3.90 1 1 1 1 1     0    0 9.04 -5.94 ZNESW 20.6 22.2 141.2 28.8 13.7 -24.8 13.6 -24.3 13.3 -22.7 13.7 -23.7
2025-12-04T01:28:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:28:59.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:28:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.978171
2025-12-04T01:28:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:28:59.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:28:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:28:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:28:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:28:59.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:28:49', tmtdew=10.66, humidity=48.13, cloud=0.0, wind=23.1, temperature=13.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:28:50', seeing=1.38, atlas_timestamp='2025-12-03T23:28:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.013749999999999929, -0.027749999999999275, -0.029500000000000526, -0.028999999999999915, 0.004750000000001364, -0.009999999999999787, -0.0007500000000000284, -0.02850000000000108, -0.08099999999999952, 0.01425000000000054, -0.010999999999999233, 0.09399999999999942, -0.021749999999999048, -0.2220000000000013, -0.08650000000000091, 0.01774999999999949, 0.009499999999999176, -0.02200000000000024, -0.0017500000000012506, 0.06899999999999906, 0.02474999999999916, -0.022749999999998494, -0.03125, 0.006499999999999062, 0.059499999999999886, -0.05274999999999963, 0.07949999999999946, 0.06199999999999939, -0.04849999999999888, -0.13899999999999935, -0.05099999999999838, 0.09124999999999872], zp_timestamp='2025-12-03T23:26:00')
2025-12-04T01:28:59.283 [DEBUG] [Thread-127248] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:28:59.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:28:59.379 [DEBUG] [Thread-127251] [transport.py] [_log()] starting thread (client mode): 0xa51cc8b0
2025-12-04T01:28:59.379 [DEBUG] [Thread-127251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:28:59.394 [DEBUG] [Thread-127251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:28:59.394 [INFO] [Thread-127251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:28:59.402 [DEBUG] [Thread-127251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] client lang: <none>
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] server lang: <none>
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] kex follows: False
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] Compression: none
2025-12-04T01:28:59.403 [DEBUG] [Thread-127251] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:28:59.459 [DEBUG] [Thread-127251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:28:59.459 [DEBUG] [Thread-127251] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:28:59.460 [DEBUG] [Thread-127251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:28:59.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:28:59.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:28:59.515 [DEBUG] [Thread-127251] [transport.py] [_log()] userauth is OK
2025-12-04T01:28:59.515 [DEBUG] [Thread-127251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:28:59.515 [DEBUG] [Thread-127251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:28:59.515 [DEBUG] [Thread-127251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:28:59.515 [DEBUG] [Thread-127251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:28:59.528 [INFO] [Thread-127251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:28:59.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:28:59.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:29:00.404 [DEBUG] [Thread-127251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:29:00.405 [DEBUG] [Thread-127251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:29:00.453 [DEBUG] [Thread-127251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:29:00.453 [DEBUG] [Thread-127251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:29:00.461 [DEBUG] [Thread-127251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:29:00.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:29:00.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:29:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:29:00.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:29:00.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:29:00.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:29:00.493 [DEBUG] [Thread-127251] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:29:00.783 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:03.017 [DEBUG] [Thread-127253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:18.052 [DEBUG] [Thread-127254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:21.220 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:27.902 [DEBUG] [Thread-127255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:30.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:29:30.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:29:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:29:31.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 29, 22), 10.67, 48.09, 0.0, 22.92, 13.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:29:31.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:29:22
2025-12-04T01:29:31.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:29:31.459 [DEBUG] [Thread-127256] [transport.py] [_log()] starting thread (client mode): 0xa51b9300
2025-12-04T01:29:31.459 [DEBUG] [Thread-127256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:29:31.479 [DEBUG] [Thread-127256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:29:31.479 [INFO] [Thread-127256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:29:31.486 [DEBUG] [Thread-127256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:29:31.486 [DEBUG] [Thread-127256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] client lang: <none>
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] server lang: <none>
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] kex follows: False
2025-12-04T01:29:31.487 [DEBUG] [Thread-127256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] Compression: none
2025-12-04T01:29:31.488 [DEBUG] [Thread-127256] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:29:31.504 [DEBUG] [Thread-127256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:29:31.504 [DEBUG] [Thread-127256] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:29:31.504 [DEBUG] [Thread-127256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:29:31.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:29:31.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:29:31.548 [DEBUG] [Thread-127256] [transport.py] [_log()] userauth is OK
2025-12-04T01:29:31.549 [DEBUG] [Thread-127256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:29:31.549 [DEBUG] [Thread-127256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:29:31.549 [DEBUG] [Thread-127256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:29:31.549 [DEBUG] [Thread-127256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:29:31.581 [INFO] [Thread-127256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:29:31.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:29:32.177 [DEBUG] [Thread-127256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:29:32.177 [DEBUG] [Thread-127256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:29:32.177 [DEBUG] [Thread-127256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:29:32.218 [DEBUG] [Thread-127256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:29:32.218 [DEBUG] [Thread-127256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:29:32.221 [DEBUG] [Thread-127256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:29:32.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:29:32.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:29:32.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:29:32.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:29:32.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:29:32.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:29:32.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.978518 -999.00  +13.20  17.68     53   +3.90 1 1 1 1 1     0    0 9.18 -5.36 ZNESW 23.0 17.7 138.8 24.8 13.7 -24.9 13.6 -24.4 13.3 -22.8 13.6 -23.6
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:29:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.978518
2025-12-04T01:29:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:29:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:29:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:29:32.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:29:32.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:29:32.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:29:22', tmtdew=10.67, humidity=48.09, cloud=0.0, wind=22.92, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:29:22', seeing=1.49, atlas_timestamp='2025-12-03T23:29:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.017250000000000654, -0.013749999999999929, -0.027749999999999275, -0.029500000000000526, -0.028999999999999915, 0.004750000000001364, -0.009999999999999787, -0.0007500000000000284, -0.02850000000000108, -0.08099999999999952, 0.01425000000000054, -0.010999999999999233, 0.09399999999999942, -0.021749999999999048, -0.2220000000000013, -0.08650000000000091, 0.01774999999999949, 0.009499999999999176, -0.02200000000000024, -0.0017500000000012506, 0.06899999999999906, 0.02474999999999916, -0.022749999999998494, -0.03125, 0.006499999999999062, 0.059499999999999886, -0.05274999999999963, 0.07949999999999946, 0.06199999999999939, -0.04849999999999888, -0.13899999999999935, -0.05099999999999838, 0.09124999999999872], zp_timestamp='2025-12-03T23:26:00')
2025-12-04T01:29:32.246 [DEBUG] [Thread-127256] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:29:32.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:29:32.353 [DEBUG] [Thread-127259] [transport.py] [_log()] starting thread (client mode): 0xa2787220
2025-12-04T01:29:32.353 [DEBUG] [Thread-127259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:29:32.368 [DEBUG] [Thread-127259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:29:32.368 [INFO] [Thread-127259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:29:32.375 [DEBUG] [Thread-127259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:29:32.375 [DEBUG] [Thread-127259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] client lang: <none>
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] server lang: <none>
2025-12-04T01:29:32.376 [DEBUG] [Thread-127259] [transport.py] [_log()] kex follows: False
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] Compression: none
2025-12-04T01:29:32.377 [DEBUG] [Thread-127259] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:29:32.439 [DEBUG] [Thread-127259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:29:32.439 [DEBUG] [Thread-127259] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:29:32.440 [DEBUG] [Thread-127259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:29:32.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:29:32.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:29:32.496 [DEBUG] [Thread-127259] [transport.py] [_log()] userauth is OK
2025-12-04T01:29:32.496 [DEBUG] [Thread-127259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:29:32.496 [DEBUG] [Thread-127259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:29:32.496 [DEBUG] [Thread-127259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:29:32.496 [DEBUG] [Thread-127259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:29:32.514 [INFO] [Thread-127259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:29:32.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:29:32.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:29:33.082 [DEBUG] [Thread-127261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:33.404 [DEBUG] [Thread-127259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:29:33.404 [DEBUG] [Thread-127259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:29:33.452 [DEBUG] [Thread-127259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:29:33.452 [DEBUG] [Thread-127259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:29:33.461 [DEBUG] [Thread-127259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:29:33.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:29:33.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:29:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:29:33.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:29:33.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:29:33.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:29:33.495 [DEBUG] [Thread-127259] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:29:40.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:40.291 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:41.629 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:29:48.130 [DEBUG] [Thread-127262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:02.005 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:03.158 [DEBUG] [Thread-127263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:03.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:30:03.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:30:03.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:30:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 29, 54), 10.66, 48.6, 0.0, 22.94, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:30:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:29:54
2025-12-04T01:30:04.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:30:04.472 [DEBUG] [Thread-127264] [transport.py] [_log()] starting thread (client mode): 0xa519aad0
2025-12-04T01:30:04.472 [DEBUG] [Thread-127264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:30:04.491 [DEBUG] [Thread-127264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:30:04.491 [INFO] [Thread-127264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] client lang: <none>
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] server lang: <none>
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] kex follows: False
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:30:04.494 [DEBUG] [Thread-127264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:30:04.495 [DEBUG] [Thread-127264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:30:04.495 [DEBUG] [Thread-127264] [transport.py] [_log()] Compression: none
2025-12-04T01:30:04.495 [DEBUG] [Thread-127264] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:30:04.510 [DEBUG] [Thread-127264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:30:04.510 [DEBUG] [Thread-127264] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:30:04.511 [DEBUG] [Thread-127264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:30:04.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:30:04.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:30:04.513 [DEBUG] [Thread-127264] [transport.py] [_log()] userauth is OK
2025-12-04T01:30:04.513 [DEBUG] [Thread-127264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:30:04.513 [DEBUG] [Thread-127264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:30:04.513 [DEBUG] [Thread-127264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:30:04.513 [DEBUG] [Thread-127264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:30:04.536 [INFO] [Thread-127264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:30:04.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:30:05.277 [DEBUG] [Thread-127264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:30:05.277 [DEBUG] [Thread-127264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:30:05.278 [DEBUG] [Thread-127264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:30:05.318 [DEBUG] [Thread-127264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:30:05.318 [DEBUG] [Thread-127264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:30:05.320 [DEBUG] [Thread-127264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:30:05.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:30:05.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:30:05.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:30:05.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:30:05.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:30:05.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:30:05.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:30:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:30:05.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:30:05.359 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-12-04T01:30:05.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:29:54', tmtdew=10.66, humidity=48.6, cloud=0.0, wind=22.94, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:29:54', seeing=1.44, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.017250000000000654, -0.013749999999999929, -0.027749999999999275, -0.029500000000000526, -0.028999999999999915, 0.004750000000001364, -0.009999999999999787, -0.0007500000000000284, -0.02850000000000108, -0.08099999999999952, 0.01425000000000054, -0.010999999999999233, 0.09399999999999942, -0.021749999999999048, -0.2220000000000013, -0.08650000000000091, 0.01774999999999949, 0.009499999999999176, -0.02200000000000024, -0.0017500000000012506, 0.06899999999999906, 0.02474999999999916, -0.022749999999998494, -0.03125, 0.006499999999999062, 0.059499999999999886, -0.05274999999999963, 0.07949999999999946, 0.06199999999999939, -0.04849999999999888, -0.13899999999999935, -0.05099999999999838, 0.09124999999999872], zp_timestamp='2025-12-03T23:26:00')
2025-12-04T01:30:05.361 [DEBUG] [Thread-127264] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:30:05.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:30:18.188 [DEBUG] [Thread-127267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:22.436 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:27.978 [DEBUG] [Thread-127268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:33.245 [DEBUG] [Thread-127269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:40.503 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:40.504 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:42.885 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:30:48.275 [DEBUG] [Thread-127270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:03.274 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:03.308 [DEBUG] [Thread-127271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:18.342 [DEBUG] [Thread-127272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:23.764 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:28.048 [DEBUG] [Thread-127273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:33.372 [DEBUG] [Thread-127274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:40.707 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:40.708 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:44.219 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:31:48.398 [DEBUG] [Thread-127275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:03.424 [DEBUG] [Thread-127276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:04.607 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:18.444 [DEBUG] [Thread-127277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:20.758 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-04T01:32:25.103 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:28.108 [DEBUG] [Thread-127278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:33.470 [DEBUG] [Thread-127279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:40.906 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:40.907 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:45.519 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:48.497 [DEBUG] [Thread-127280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:32:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:32:50.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:32:50.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:32:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 32, 34), 10.61, 48.62, 0.0, 23.77, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:32:51.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:32:34
2025-12-04T01:32:51.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:32:51.730 [DEBUG] [Thread-127281] [transport.py] [_log()] starting thread (client mode): 0xa2785180
2025-12-04T01:32:51.731 [DEBUG] [Thread-127281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:32:51.751 [DEBUG] [Thread-127281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:32:51.752 [INFO] [Thread-127281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:32:51.755 [DEBUG] [Thread-127281] [transport.py] [_log()] client lang: <none>
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] server lang: <none>
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] kex follows: False
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] Compression: none
2025-12-04T01:32:51.756 [DEBUG] [Thread-127281] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:32:51.775 [DEBUG] [Thread-127281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:32:51.775 [DEBUG] [Thread-127281] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:32:51.775 [DEBUG] [Thread-127281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:32:51.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:32:51.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:32:51.776 [DEBUG] [Thread-127281] [transport.py] [_log()] userauth is OK
2025-12-04T01:32:51.776 [DEBUG] [Thread-127281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:32:51.776 [DEBUG] [Thread-127281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:32:51.776 [DEBUG] [Thread-127281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:32:51.776 [DEBUG] [Thread-127281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:32:51.786 [INFO] [Thread-127281] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:32:51.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:32:52.581 [DEBUG] [Thread-127281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:32:52.581 [DEBUG] [Thread-127281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:32:52.582 [DEBUG] [Thread-127281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:32:52.623 [DEBUG] [Thread-127281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:32:52.623 [DEBUG] [Thread-127281] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:32:52.626 [DEBUG] [Thread-127281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:32:52.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:32:52.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:32:52.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:32:52.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:32:52.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:32:52.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:32:52.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:32:52.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.980601 -999.00  +13.20  19.30     52   +3.80 1 1 1 1 1     0    0 9.13 -4.25 ZNESW 22.8 19.3 145.4 24.8 13.6 -24.8 13.5 -24.3 13.3 -22.7 13.6 -23.5
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.980601
2025-12-04T01:32:52.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:32:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:32:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:32:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:32:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:32:52.649 [DEBUG] [Thread-127281] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:32:52.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:32:34', tmtdew=10.61, humidity=48.62, cloud=0.0, wind=23.77, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:32:34', seeing=1.3, atlas_timestamp='2025-12-03T23:32:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:28:00')
2025-12-04T01:32:52.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:32:52.749 [DEBUG] [Thread-127284] [transport.py] [_log()] starting thread (client mode): 0xa27852a0
2025-12-04T01:32:52.749 [DEBUG] [Thread-127284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:32:52.764 [DEBUG] [Thread-127284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:32:52.764 [INFO] [Thread-127284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:32:52.772 [DEBUG] [Thread-127284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] client lang: <none>
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] server lang: <none>
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] kex follows: False
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] Compression: none
2025-12-04T01:32:52.773 [DEBUG] [Thread-127284] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:32:52.828 [DEBUG] [Thread-127284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:32:52.829 [DEBUG] [Thread-127284] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:32:52.829 [DEBUG] [Thread-127284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:32:52.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:32:52.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:32:52.889 [DEBUG] [Thread-127284] [transport.py] [_log()] userauth is OK
2025-12-04T01:32:52.889 [DEBUG] [Thread-127284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:32:52.889 [DEBUG] [Thread-127284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:32:52.889 [DEBUG] [Thread-127284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:32:52.889 [DEBUG] [Thread-127284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:32:52.909 [INFO] [Thread-127284] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:32:52.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:32:52.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:32:53.713 [DEBUG] [Thread-127284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:32:53.713 [DEBUG] [Thread-127284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:32:53.761 [DEBUG] [Thread-127284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:32:53.761 [DEBUG] [Thread-127284] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:32:53.770 [DEBUG] [Thread-127284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:32:53.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:32:53.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:32:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:32:53.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:32:53.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:32:53.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:32:53.801 [DEBUG] [Thread-127284] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:33:03.521 [DEBUG] [Thread-127286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:06.010 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:18.562 [DEBUG] [Thread-127287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:23.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:33:23.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:33:23.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:33:24.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 33, 6), 10.65, 48.47, 0.0, 23.36, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:33:24.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:33:06
2025-12-04T01:33:24.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:33:24.772 [DEBUG] [Thread-127288] [transport.py] [_log()] starting thread (client mode): 0xa277afb0
2025-12-04T01:33:24.772 [DEBUG] [Thread-127288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:33:24.792 [DEBUG] [Thread-127288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:33:24.792 [INFO] [Thread-127288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] client lang: <none>
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] server lang: <none>
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] kex follows: False
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:33:24.795 [DEBUG] [Thread-127288] [transport.py] [_log()] Compression: none
2025-12-04T01:33:24.796 [DEBUG] [Thread-127288] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:33:24.815 [DEBUG] [Thread-127288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:33:24.815 [DEBUG] [Thread-127288] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:33:24.815 [DEBUG] [Thread-127288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:33:24.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:33:24.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:33:24.817 [DEBUG] [Thread-127288] [transport.py] [_log()] userauth is OK
2025-12-04T01:33:24.817 [DEBUG] [Thread-127288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:33:24.817 [DEBUG] [Thread-127288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:33:24.818 [DEBUG] [Thread-127288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:33:24.818 [DEBUG] [Thread-127288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:33:24.835 [INFO] [Thread-127288] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:33:24.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:33:25.430 [DEBUG] [Thread-127288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:33:25.431 [DEBUG] [Thread-127288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:33:25.431 [DEBUG] [Thread-127288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:33:25.472 [DEBUG] [Thread-127288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:33:25.472 [DEBUG] [Thread-127288] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:33:25.474 [DEBUG] [Thread-127288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:33:25.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:33:25.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:33:25.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:33:25.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:33:25.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:33:25.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:33:25.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:33:25.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.980949 -999.00  +13.20  18.61     52   +3.80 1 1 1 1 1     0    0 9.15 -3.74 ZNESW 22.0 18.6 141.6 25.6 13.6 -24.8 13.5 -24.3 13.3 -22.8 13.6 -23.5
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.980949
2025-12-04T01:33:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:33:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:33:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:33:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:33:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:33:25.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:33:06', tmtdew=10.65, humidity=48.47, cloud=0.0, wind=23.36, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:33:06', seeing=1.43, atlas_timestamp='2025-12-03T23:32:33.994', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:28:00')
2025-12-04T01:33:25.496 [DEBUG] [Thread-127288] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:33:25.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:33:25.592 [DEBUG] [Thread-127291] [transport.py] [_log()] starting thread (client mode): 0xa27a2d10
2025-12-04T01:33:25.592 [DEBUG] [Thread-127291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:33:25.606 [DEBUG] [Thread-127291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:33:25.607 [INFO] [Thread-127291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] client lang: <none>
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] server lang: <none>
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] kex follows: False
2025-12-04T01:33:25.614 [DEBUG] [Thread-127291] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] Compression: none
2025-12-04T01:33:25.615 [DEBUG] [Thread-127291] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:33:25.676 [DEBUG] [Thread-127291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:33:25.676 [DEBUG] [Thread-127291] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:33:25.677 [DEBUG] [Thread-127291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:33:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:33:25.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:33:25.733 [DEBUG] [Thread-127291] [transport.py] [_log()] userauth is OK
2025-12-04T01:33:25.733 [DEBUG] [Thread-127291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:33:25.733 [DEBUG] [Thread-127291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:33:25.734 [DEBUG] [Thread-127291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:33:25.734 [DEBUG] [Thread-127291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:33:25.750 [INFO] [Thread-127291] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:33:25.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:33:25.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:33:26.393 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:26.603 [DEBUG] [Thread-127291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:33:26.603 [DEBUG] [Thread-127291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:33:26.652 [DEBUG] [Thread-127291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:33:26.652 [DEBUG] [Thread-127291] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:33:26.661 [DEBUG] [Thread-127291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:33:26.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:33:26.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:33:26.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:33:26.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:33:26.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:33:26.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:33:26.696 [DEBUG] [Thread-127291] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:33:28.169 [DEBUG] [Thread-127293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:33.590 [DEBUG] [Thread-127294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:41.105 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:41.107 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:46.813 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:48.622 [DEBUG] [Thread-127295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:33:56.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:33:56.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:33:56.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:33:57.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 33, 38), 10.7, 47.95, 0.0, 25.23, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:33:57.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:33:38
2025-12-04T01:33:57.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:33:57.640 [DEBUG] [Thread-127296] [transport.py] [_log()] starting thread (client mode): 0xa27867d0
2025-12-04T01:33:57.640 [DEBUG] [Thread-127296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:33:57.661 [DEBUG] [Thread-127296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:33:57.661 [INFO] [Thread-127296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:33:57.664 [DEBUG] [Thread-127296] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:33:57.664 [DEBUG] [Thread-127296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:33:57.664 [DEBUG] [Thread-127296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] client lang: <none>
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] server lang: <none>
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] kex follows: False
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:33:57.665 [DEBUG] [Thread-127296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:33:57.666 [DEBUG] [Thread-127296] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:33:57.666 [DEBUG] [Thread-127296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:33:57.666 [DEBUG] [Thread-127296] [transport.py] [_log()] Compression: none
2025-12-04T01:33:57.666 [DEBUG] [Thread-127296] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:33:57.680 [DEBUG] [Thread-127296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:33:57.681 [DEBUG] [Thread-127296] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:33:57.681 [DEBUG] [Thread-127296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:33:57.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:33:57.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:33:57.683 [DEBUG] [Thread-127296] [transport.py] [_log()] userauth is OK
2025-12-04T01:33:57.684 [DEBUG] [Thread-127296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:33:57.684 [DEBUG] [Thread-127296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:33:57.684 [DEBUG] [Thread-127296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:33:57.684 [DEBUG] [Thread-127296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:33:57.702 [INFO] [Thread-127296] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:33:57.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:33:58.457 [DEBUG] [Thread-127296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:33:58.457 [DEBUG] [Thread-127296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:33:58.458 [DEBUG] [Thread-127296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:33:58.498 [DEBUG] [Thread-127296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:33:58.498 [DEBUG] [Thread-127296] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:33:58.501 [DEBUG] [Thread-127296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:33:58.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:33:58.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:33:58.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:33:58.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:33:58.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:33:58.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:33:58.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:33:58.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.981296 -999.00  +13.20  17.91     52   +3.80 1 1 1 1 1     0    0 9.19 -2.99 ZNESW 23.8 17.9 144.0 27.4 13.6 -24.8 13.4 -24.4 13.3 -22.8 13.6 -23.6
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.981296
2025-12-04T01:33:58.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:33:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:33:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:33:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:33:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:33:58.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:33:38', tmtdew=10.7, humidity=47.95, cloud=0.0, wind=25.23, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:33:38', seeing=1.43, atlas_timestamp='2025-12-03T23:33:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:32:00')
2025-12-04T01:33:58.524 [DEBUG] [Thread-127296] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:33:58.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:33:58.619 [DEBUG] [Thread-127299] [transport.py] [_log()] starting thread (client mode): 0xa2787190
2025-12-04T01:33:58.620 [DEBUG] [Thread-127299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:33:58.635 [DEBUG] [Thread-127299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:33:58.635 [INFO] [Thread-127299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:33:58.642 [DEBUG] [Thread-127299] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] client lang: <none>
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] server lang: <none>
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] kex follows: False
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] Compression: none
2025-12-04T01:33:58.643 [DEBUG] [Thread-127299] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:33:58.701 [DEBUG] [Thread-127299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:33:58.701 [DEBUG] [Thread-127299] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:33:58.702 [DEBUG] [Thread-127299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:33:58.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:33:58.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:33:58.758 [DEBUG] [Thread-127299] [transport.py] [_log()] userauth is OK
2025-12-04T01:33:58.758 [DEBUG] [Thread-127299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:33:58.759 [DEBUG] [Thread-127299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:33:58.759 [DEBUG] [Thread-127299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:33:58.759 [DEBUG] [Thread-127299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:33:58.781 [INFO] [Thread-127299] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:33:58.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:33:58.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:33:59.596 [DEBUG] [Thread-127299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:33:59.596 [DEBUG] [Thread-127299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:33:59.644 [DEBUG] [Thread-127299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:33:59.644 [DEBUG] [Thread-127299] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:33:59.658 [DEBUG] [Thread-127299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:33:59.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:33:59.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:33:59.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:33:59.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:33:59.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:33:59.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:33:59.699 [DEBUG] [Thread-127299] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:34:03.656 [DEBUG] [Thread-127301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:07.274 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:18.711 [DEBUG] [Thread-127302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:27.778 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:28.236 [DEBUG] [Thread-127303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:29.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:34:29.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:34:29.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:34:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 34, 10), 10.71, 47.94, 0.0, 24.56, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:34:30.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:34:10
2025-12-04T01:34:30.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:34:30.675 [DEBUG] [Thread-127304] [transport.py] [_log()] starting thread (client mode): 0xa27865f0
2025-12-04T01:34:30.675 [DEBUG] [Thread-127304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:34:30.695 [DEBUG] [Thread-127304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:34:30.695 [INFO] [Thread-127304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:34:30.698 [DEBUG] [Thread-127304] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:34:30.698 [DEBUG] [Thread-127304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:34:30.698 [DEBUG] [Thread-127304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:34:30.698 [DEBUG] [Thread-127304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] client lang: <none>
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] server lang: <none>
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] kex follows: False
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:34:30.699 [DEBUG] [Thread-127304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:34:30.700 [DEBUG] [Thread-127304] [transport.py] [_log()] Compression: none
2025-12-04T01:34:30.700 [DEBUG] [Thread-127304] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:34:30.719 [DEBUG] [Thread-127304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:34:30.720 [DEBUG] [Thread-127304] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:34:30.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:34:30.720 [DEBUG] [Thread-127304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:34:30.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:34:30.722 [DEBUG] [Thread-127304] [transport.py] [_log()] userauth is OK
2025-12-04T01:34:30.723 [DEBUG] [Thread-127304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:34:30.723 [DEBUG] [Thread-127304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:34:30.723 [DEBUG] [Thread-127304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:34:30.723 [DEBUG] [Thread-127304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:34:30.741 [INFO] [Thread-127304] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:34:30.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:34:31.341 [DEBUG] [Thread-127304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:34:31.341 [DEBUG] [Thread-127304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:34:31.341 [DEBUG] [Thread-127304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:34:31.382 [DEBUG] [Thread-127304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:34:31.382 [DEBUG] [Thread-127304] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:34:31.385 [DEBUG] [Thread-127304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:34:31.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:34:31.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:34:31.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:34:31.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:34:31.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:34:31.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:34:31.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:34:31.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:34:31.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:34:31.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.981991 -999.00  +13.20  21.90     53   +3.90 1 1 1 1 1     0    0 9.12 -2.28 ZNESW 17.7 21.9 143.0 25.2 13.6 -24.9 13.5 -24.2 13.3 -22.7 13.6 -23.7
2025-12-04T01:34:31.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:34:31.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:34:31.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.981991
2025-12-04T01:34:31.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:34:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:34:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:34:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:34:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:34:31.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:34:10', tmtdew=10.71, humidity=47.94, cloud=0.0, wind=24.56, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:34:10', seeing=1.3, atlas_timestamp='2025-12-03T23:34:04.022', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:32:00')
2025-12-04T01:34:31.406 [DEBUG] [Thread-127304] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:34:31.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:34:31.502 [DEBUG] [Thread-127307] [transport.py] [_log()] starting thread (client mode): 0xa51cdd20
2025-12-04T01:34:31.502 [DEBUG] [Thread-127307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:34:31.518 [DEBUG] [Thread-127307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:34:31.518 [INFO] [Thread-127307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:34:31.525 [DEBUG] [Thread-127307] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:34:31.525 [DEBUG] [Thread-127307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] client lang: <none>
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] server lang: <none>
2025-12-04T01:34:31.526 [DEBUG] [Thread-127307] [transport.py] [_log()] kex follows: False
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] Compression: none
2025-12-04T01:34:31.527 [DEBUG] [Thread-127307] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:34:31.586 [DEBUG] [Thread-127307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:34:31.587 [DEBUG] [Thread-127307] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:34:31.587 [DEBUG] [Thread-127307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:34:31.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:34:31.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:34:31.642 [DEBUG] [Thread-127307] [transport.py] [_log()] userauth is OK
2025-12-04T01:34:31.642 [DEBUG] [Thread-127307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:34:31.642 [DEBUG] [Thread-127307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:34:31.642 [DEBUG] [Thread-127307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:34:31.642 [DEBUG] [Thread-127307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:34:31.662 [INFO] [Thread-127307] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:34:31.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:34:31.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:34:32.515 [DEBUG] [Thread-127307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:34:32.515 [DEBUG] [Thread-127307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:34:32.563 [DEBUG] [Thread-127307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:34:32.563 [DEBUG] [Thread-127307] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:34:32.572 [DEBUG] [Thread-127307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:34:32.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:34:32.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:34:32.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:34:32.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:34:32.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:34:32.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:34:32.607 [DEBUG] [Thread-127307] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:34:33.741 [DEBUG] [Thread-127309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:41.306 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:41.307 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:48.226 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:34:48.785 [DEBUG] [Thread-127310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:02.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:35:02.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:35:02.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:35:03.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 34, 42), 10.78, 47.87, 0.0, 25.9, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:35:03.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:34:42
2025-12-04T01:35:03.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:35:03.585 [DEBUG] [Thread-127311] [transport.py] [_log()] starting thread (client mode): 0xa51cdf00
2025-12-04T01:35:03.585 [DEBUG] [Thread-127311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:35:03.601 [DEBUG] [Thread-127311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:35:03.601 [INFO] [Thread-127311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:35:03.604 [DEBUG] [Thread-127311] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:35:03.604 [DEBUG] [Thread-127311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:35:03.604 [DEBUG] [Thread-127311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] client lang: <none>
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] server lang: <none>
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] kex follows: False
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] Compression: none
2025-12-04T01:35:03.605 [DEBUG] [Thread-127311] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:35:03.627 [DEBUG] [Thread-127311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:35:03.628 [DEBUG] [Thread-127311] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:35:03.628 [DEBUG] [Thread-127311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:35:03.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:35:03.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:35:03.630 [DEBUG] [Thread-127311] [transport.py] [_log()] userauth is OK
2025-12-04T01:35:03.630 [DEBUG] [Thread-127311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:35:03.630 [DEBUG] [Thread-127311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:35:03.630 [DEBUG] [Thread-127311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:35:03.630 [DEBUG] [Thread-127311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:35:03.655 [INFO] [Thread-127311] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:35:03.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:35:03.812 [DEBUG] [Thread-127313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:04.741 [DEBUG] [Thread-127311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:35:04.741 [DEBUG] [Thread-127311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:35:04.742 [DEBUG] [Thread-127311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:35:04.783 [DEBUG] [Thread-127311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:35:04.783 [DEBUG] [Thread-127311] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:35:04.786 [DEBUG] [Thread-127311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:35:04.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:35:04.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:35:04.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:35:04.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:35:04.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:35:04.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:35:04.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:35:04.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:35:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:35:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.982337 -999.00  +13.20  19.05     53   +3.80 1 1 1 1 1     0    0 9.22 -2.04 ZNESW 18.3 19.1 141.6 22.2 13.6 -24.9 13.5 -24.4 13.2 -22.7 13.6 -23.7
2025-12-04T01:35:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:35:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:35:04.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.982337
2025-12-04T01:35:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:35:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:35:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:35:04.812 [DEBUG] [Thread-127311] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:35:04.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:35:04.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:35:04.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:34:42', tmtdew=10.78, humidity=47.87, cloud=0.0, wind=25.9, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:34:42', seeing=1.22, atlas_timestamp='2025-12-03T23:34:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:32:00')
2025-12-04T01:35:04.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:35:04.908 [DEBUG] [Thread-127315] [transport.py] [_log()] starting thread (client mode): 0xa277ac50
2025-12-04T01:35:04.908 [DEBUG] [Thread-127315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:35:04.924 [DEBUG] [Thread-127315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:35:04.924 [INFO] [Thread-127315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:35:04.931 [DEBUG] [Thread-127315] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] client lang: <none>
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] server lang: <none>
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] kex follows: False
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] Compression: none
2025-12-04T01:35:04.932 [DEBUG] [Thread-127315] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:35:04.989 [DEBUG] [Thread-127315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:35:04.990 [DEBUG] [Thread-127315] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:35:04.990 [DEBUG] [Thread-127315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:35:04.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:35:04.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:35:05.046 [DEBUG] [Thread-127315] [transport.py] [_log()] userauth is OK
2025-12-04T01:35:05.046 [DEBUG] [Thread-127315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:35:05.046 [DEBUG] [Thread-127315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:35:05.046 [DEBUG] [Thread-127315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:35:05.046 [DEBUG] [Thread-127315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:35:05.069 [INFO] [Thread-127315] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:35:05.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:35:05.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:35:05.891 [DEBUG] [Thread-127315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:35:05.892 [DEBUG] [Thread-127315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:35:05.941 [DEBUG] [Thread-127315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:35:05.942 [DEBUG] [Thread-127315] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:35:05.951 [DEBUG] [Thread-127315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:35:05.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:35:05.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:35:05.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:35:05.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:35:05.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:35:05.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:35:05.999 [DEBUG] [Thread-127315] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:35:08.665 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:18.843 [DEBUG] [Thread-127317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:28.288 [DEBUG] [Thread-127318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:29.075 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:33.884 [DEBUG] [Thread-127319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:36.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:35:36.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:35:36.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:35:36.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 35, 14), 10.77, 47.89, 0.0, 24.53, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:35:36.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:35:14
2025-12-04T01:35:36.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:35:36.978 [DEBUG] [Thread-127320] [transport.py] [_log()] starting thread (client mode): 0xa277acb0
2025-12-04T01:35:36.978 [DEBUG] [Thread-127320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:35:36.998 [DEBUG] [Thread-127320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:35:36.998 [INFO] [Thread-127320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] client lang: <none>
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] server lang: <none>
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] kex follows: False
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] Compression: none
2025-12-04T01:35:37.002 [DEBUG] [Thread-127320] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:35:37.019 [DEBUG] [Thread-127320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:35:37.020 [DEBUG] [Thread-127320] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:35:37.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:35:37.021 [DEBUG] [Thread-127320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:35:37.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:35:37.023 [DEBUG] [Thread-127320] [transport.py] [_log()] userauth is OK
2025-12-04T01:35:37.023 [DEBUG] [Thread-127320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:35:37.023 [DEBUG] [Thread-127320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:35:37.023 [DEBUG] [Thread-127320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:35:37.023 [DEBUG] [Thread-127320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:35:37.047 [INFO] [Thread-127320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:35:37.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:35:37.645 [DEBUG] [Thread-127320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:35:37.645 [DEBUG] [Thread-127320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:35:37.645 [DEBUG] [Thread-127320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:35:37.686 [DEBUG] [Thread-127320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:35:37.686 [DEBUG] [Thread-127320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:35:37.689 [DEBUG] [Thread-127320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:35:37.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:35:37.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:35:37.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:35:37.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:35:37.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:35:37.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:35:37.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:35:37.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.982685 -999.00  +13.20  16.94     52   +3.70 1 1 1 1 1     0    0 9.53 -1.26 ZNESW 18.1 16.9 142.8 24.3 13.6 -24.9 13.5 -24.5 13.2 -22.7 13.5 -23.6
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.982685
2025-12-04T01:35:37.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:35:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:35:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:35:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:35:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:35:37.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:35:14', tmtdew=10.77, humidity=47.89, cloud=0.0, wind=24.53, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:35:14', seeing=1.19, atlas_timestamp='2025-12-03T23:35:03.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:32:00')
2025-12-04T01:35:37.713 [DEBUG] [Thread-127320] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:35:37.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:35:37.810 [DEBUG] [Thread-127323] [transport.py] [_log()] starting thread (client mode): 0xa5199c60
2025-12-04T01:35:37.810 [DEBUG] [Thread-127323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:35:37.827 [DEBUG] [Thread-127323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:35:37.827 [INFO] [Thread-127323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:35:37.834 [DEBUG] [Thread-127323] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:35:37.834 [DEBUG] [Thread-127323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:35:37.834 [DEBUG] [Thread-127323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] client lang: <none>
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] server lang: <none>
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] kex follows: False
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] Compression: none
2025-12-04T01:35:37.835 [DEBUG] [Thread-127323] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:35:37.898 [DEBUG] [Thread-127323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:35:37.898 [DEBUG] [Thread-127323] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:35:37.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:35:37.899 [DEBUG] [Thread-127323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:35:37.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:35:37.957 [DEBUG] [Thread-127323] [transport.py] [_log()] userauth is OK
2025-12-04T01:35:37.957 [DEBUG] [Thread-127323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:35:37.958 [DEBUG] [Thread-127323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:35:37.958 [DEBUG] [Thread-127323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:35:37.958 [DEBUG] [Thread-127323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:35:37.977 [INFO] [Thread-127323] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:35:37.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:35:37.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:35:38.813 [DEBUG] [Thread-127323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:35:38.813 [DEBUG] [Thread-127323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:35:38.863 [DEBUG] [Thread-127323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:35:38.863 [DEBUG] [Thread-127323] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:35:38.872 [DEBUG] [Thread-127323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:35:38.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:35:38.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:35:38.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:35:38.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:35:38.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:35:38.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:35:38.907 [DEBUG] [Thread-127323] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:35:41.503 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:41.505 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:48.913 [DEBUG] [Thread-127325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:35:49.475 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:03.959 [DEBUG] [Thread-127326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:36:08.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:36:08.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:36:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 35, 46), 10.88, 47.52, 0.0, 27.07, 13.29, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:36:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:35:46
2025-12-04T01:36:09.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:36:09.913 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:09.946 [DEBUG] [Thread-127327] [transport.py] [_log()] starting thread (client mode): 0xa51ba3b0
2025-12-04T01:36:09.947 [DEBUG] [Thread-127327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:36:09.964 [DEBUG] [Thread-127327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:36:09.964 [INFO] [Thread-127327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] client lang: <none>
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] server lang: <none>
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] kex follows: False
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] Compression: none
2025-12-04T01:36:09.967 [DEBUG] [Thread-127327] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:36:09.982 [DEBUG] [Thread-127327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:36:09.982 [DEBUG] [Thread-127327] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:36:09.982 [DEBUG] [Thread-127327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:36:09.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:36:09.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:36:09.983 [DEBUG] [Thread-127327] [transport.py] [_log()] userauth is OK
2025-12-04T01:36:09.983 [DEBUG] [Thread-127327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:36:09.983 [DEBUG] [Thread-127327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:36:09.983 [DEBUG] [Thread-127327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:36:09.983 [DEBUG] [Thread-127327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:36:09.992 [INFO] [Thread-127327] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:36:09.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:36:10.644 [DEBUG] [Thread-127327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:36:10.644 [DEBUG] [Thread-127327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:36:10.644 [DEBUG] [Thread-127327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:36:10.684 [DEBUG] [Thread-127327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:36:10.684 [DEBUG] [Thread-127327] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:36:10.687 [DEBUG] [Thread-127327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:36:10.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:36:10.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:36:10.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:36:10.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:36:10.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:36:10.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:36:10.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.983032 -999.00  +13.20  17.67     52   +3.70 1 1 1 1 1     0    0 9.40 0.79 ZNESW 17.8 17.7 148.7 28.8 13.6 -24.8 13.5 -24.4 13.2 -22.7 13.6 -23.6
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.983032
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:36:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:35:46', tmtdew=10.88, humidity=47.52, cloud=0.0, wind=27.07, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:35:46', seeing=1.59, atlas_timestamp='2025-12-03T23:35:33.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012249999999999872, -0.0547500000000003, 0.0022500000000018616, -0.02800000000000047, -0.03849999999999909, 0.005250000000000199, -0.051000000000000156, -0.009249999999997982, -0.044500000000001094, -0.05299999999999905, -0.03175000000000061, -0.008000000000000895, 0.03399999999999892, -0.037250000000002004, -0.14200000000000124, -0.08999999999999986, 0.03125, 0.0009999999999994458, -0.03700000000000081, -0.06575000000000131, 0.08599999999999852, 0.025749999999998607, -0.08125000000000071, -0.025249999999999773, 0.03250000000000064, 0.059499999999999886, -0.0572499999999998, 0.07699999999999996, 0.16750000000000043, -0.06700000000000017, -0.2419999999999991, -0.06700000000000017, 0.03974999999999973], zp_timestamp='2025-12-03T23:32:00')
2025-12-04T01:36:10.708 [DEBUG] [Thread-127327] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:36:10.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:36:10.797 [DEBUG] [Thread-127330] [transport.py] [_log()] starting thread (client mode): 0xa519bb20
2025-12-04T01:36:10.797 [DEBUG] [Thread-127330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:36:10.812 [DEBUG] [Thread-127330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:36:10.812 [INFO] [Thread-127330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:10.819 [DEBUG] [Thread-127330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] client lang: <none>
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] server lang: <none>
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] kex follows: False
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] Compression: none
2025-12-04T01:36:10.820 [DEBUG] [Thread-127330] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:36:10.877 [DEBUG] [Thread-127330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:36:10.877 [DEBUG] [Thread-127330] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:36:10.877 [DEBUG] [Thread-127330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:36:10.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:36:10.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:36:10.934 [DEBUG] [Thread-127330] [transport.py] [_log()] userauth is OK
2025-12-04T01:36:10.934 [DEBUG] [Thread-127330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:36:10.934 [DEBUG] [Thread-127330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:36:10.934 [DEBUG] [Thread-127330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:36:10.934 [DEBUG] [Thread-127330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:36:10.952 [INFO] [Thread-127330] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:36:10.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:36:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:36:11.833 [DEBUG] [Thread-127330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:36:11.833 [DEBUG] [Thread-127330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:36:11.881 [DEBUG] [Thread-127330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:36:11.881 [DEBUG] [Thread-127330] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:36:11.889 [DEBUG] [Thread-127330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:36:11.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:36:11.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:36:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:36:11.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:36:11.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:36:11.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:36:11.921 [DEBUG] [Thread-127330] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:36:18.984 [DEBUG] [Thread-127332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:28.346 [DEBUG] [Thread-127333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:30.311 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:34.023 [DEBUG] [Thread-127334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:41.704 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:41.705 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:36:41.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:36:41.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:36:42.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 36, 18), 10.88, 47.52, 0.0, 28.3, 13.31, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:36:42.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:36:18
2025-12-04T01:36:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:36:42.914 [DEBUG] [Thread-127335] [transport.py] [_log()] starting thread (client mode): 0xa51d3ee0
2025-12-04T01:36:42.914 [DEBUG] [Thread-127335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:36:42.936 [DEBUG] [Thread-127335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:36:42.936 [INFO] [Thread-127335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] client lang: <none>
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] server lang: <none>
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] kex follows: False
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:36:42.940 [DEBUG] [Thread-127335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:36:42.941 [DEBUG] [Thread-127335] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:36:42.941 [DEBUG] [Thread-127335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:36:42.941 [DEBUG] [Thread-127335] [transport.py] [_log()] Compression: none
2025-12-04T01:36:42.941 [DEBUG] [Thread-127335] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:36:42.959 [DEBUG] [Thread-127335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:36:42.960 [DEBUG] [Thread-127335] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:36:42.960 [DEBUG] [Thread-127335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:36:42.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:36:42.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:36:42.962 [DEBUG] [Thread-127335] [transport.py] [_log()] userauth is OK
2025-12-04T01:36:42.962 [DEBUG] [Thread-127335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:36:42.962 [DEBUG] [Thread-127335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:36:42.962 [DEBUG] [Thread-127335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:36:42.963 [DEBUG] [Thread-127335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:36:42.990 [INFO] [Thread-127335] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:36:42.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:36:43.660 [DEBUG] [Thread-127335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:36:43.660 [DEBUG] [Thread-127335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:36:43.661 [DEBUG] [Thread-127335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:36:43.701 [DEBUG] [Thread-127335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:36:43.701 [DEBUG] [Thread-127335] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:36:43.704 [DEBUG] [Thread-127335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:36:43.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:36:43.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:36:43.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:36:43.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:36:43.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:36:43.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:36:43.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.983379 -999.00  +13.20  16.83     52   +3.70 1 1 1 1 1     0    0 9.74 2.54 ZNESW 17.3 16.8 144.4 23.6 13.6 -25.0 13.4 -24.3 13.3 -22.6 13.6 -23.7
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:36:43.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.983379
2025-12-04T01:36:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:36:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:36:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:36:43.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:36:43.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:36:43.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:36:18', tmtdew=10.88, humidity=47.52, cloud=0.0, wind=28.3, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:36:18', seeing=1.59, atlas_timestamp='2025-12-03T23:36:03.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:36:43.730 [DEBUG] [Thread-127335] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:36:43.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:36:43.826 [DEBUG] [Thread-127338] [transport.py] [_log()] starting thread (client mode): 0xa51cefb0
2025-12-04T01:36:43.826 [DEBUG] [Thread-127338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:36:43.841 [DEBUG] [Thread-127338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:36:43.841 [INFO] [Thread-127338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:36:43.849 [DEBUG] [Thread-127338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] client lang: <none>
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] server lang: <none>
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] kex follows: False
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] Compression: none
2025-12-04T01:36:43.850 [DEBUG] [Thread-127338] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:36:43.906 [DEBUG] [Thread-127338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:36:43.906 [DEBUG] [Thread-127338] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:36:43.907 [DEBUG] [Thread-127338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:36:43.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:36:43.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:36:43.962 [DEBUG] [Thread-127338] [transport.py] [_log()] userauth is OK
2025-12-04T01:36:43.963 [DEBUG] [Thread-127338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:36:43.963 [DEBUG] [Thread-127338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:36:43.963 [DEBUG] [Thread-127338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:36:43.963 [DEBUG] [Thread-127338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:36:43.982 [INFO] [Thread-127338] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:36:43.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:36:43.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:36:44.801 [DEBUG] [Thread-127338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:36:44.801 [DEBUG] [Thread-127338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:36:44.849 [DEBUG] [Thread-127338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:36:44.849 [DEBUG] [Thread-127338] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:36:44.858 [DEBUG] [Thread-127338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:36:44.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:36:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:36:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:36:44.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:36:44.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:36:44.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:36:44.905 [DEBUG] [Thread-127338] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:36:49.050 [DEBUG] [Thread-127340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:36:50.694 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:04.095 [DEBUG] [Thread-127341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:11.074 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:14.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:37:14.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:37:14.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:37:15.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 36, 50), 10.86, 47.77, 0.0, 25.07, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:37:15.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:36:50
2025-12-04T01:37:15.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:37:15.899 [DEBUG] [Thread-127342] [transport.py] [_log()] starting thread (client mode): 0xa27a28f0
2025-12-04T01:37:15.899 [DEBUG] [Thread-127342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:37:15.919 [DEBUG] [Thread-127342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:37:15.919 [INFO] [Thread-127342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:37:15.922 [DEBUG] [Thread-127342] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:37:15.922 [DEBUG] [Thread-127342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] client lang: <none>
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] server lang: <none>
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] kex follows: False
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:37:15.923 [DEBUG] [Thread-127342] [transport.py] [_log()] Compression: none
2025-12-04T01:37:15.924 [DEBUG] [Thread-127342] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:37:15.940 [DEBUG] [Thread-127342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:37:15.940 [DEBUG] [Thread-127342] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:37:15.941 [DEBUG] [Thread-127342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:37:15.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:37:15.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:37:15.942 [DEBUG] [Thread-127342] [transport.py] [_log()] userauth is OK
2025-12-04T01:37:15.943 [DEBUG] [Thread-127342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:37:15.943 [DEBUG] [Thread-127342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:37:15.943 [DEBUG] [Thread-127342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:37:15.943 [DEBUG] [Thread-127342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:37:15.978 [INFO] [Thread-127342] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:37:15.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:37:16.608 [DEBUG] [Thread-127342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:37:16.608 [DEBUG] [Thread-127342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:37:16.608 [DEBUG] [Thread-127342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:37:16.649 [DEBUG] [Thread-127342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:37:16.649 [DEBUG] [Thread-127342] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:37:16.652 [DEBUG] [Thread-127342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:37:16.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:37:16.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:37:16.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:37:16.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:37:16.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:37:16.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:37:16.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:37:16.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:37:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:37:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.983726 -999.00  +13.20  15.90     52   +3.70 1 1 1 1 1     0    0 9.71 3.95 ZNESW 15.9 15.9 142.0 20.2 13.6 -24.9 13.4 -24.5 13.2 -22.7 13.5 -23.7
2025-12-04T01:37:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:37:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:37:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.983726
2025-12-04T01:37:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:37:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:37:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:37:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:37:16.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:37:16.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:36:50', tmtdew=10.86, humidity=47.77, cloud=0.0, wind=25.07, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:36:50', seeing=1.27, atlas_timestamp='2025-12-03T23:36:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:37:16.676 [DEBUG] [Thread-127342] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:37:16.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:37:16.771 [DEBUG] [Thread-127345] [transport.py] [_log()] starting thread (client mode): 0xa277a410
2025-12-04T01:37:16.771 [DEBUG] [Thread-127345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:37:16.786 [DEBUG] [Thread-127345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:37:16.786 [INFO] [Thread-127345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] client lang: <none>
2025-12-04T01:37:16.794 [DEBUG] [Thread-127345] [transport.py] [_log()] server lang: <none>
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] kex follows: False
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] Compression: none
2025-12-04T01:37:16.795 [DEBUG] [Thread-127345] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:37:16.854 [DEBUG] [Thread-127345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:37:16.855 [DEBUG] [Thread-127345] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:37:16.855 [DEBUG] [Thread-127345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:37:16.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:37:16.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:37:16.911 [DEBUG] [Thread-127345] [transport.py] [_log()] userauth is OK
2025-12-04T01:37:16.911 [DEBUG] [Thread-127345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:37:16.911 [DEBUG] [Thread-127345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:37:16.911 [DEBUG] [Thread-127345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:37:16.911 [DEBUG] [Thread-127345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:37:16.930 [INFO] [Thread-127345] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:37:16.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:37:16.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:37:17.782 [DEBUG] [Thread-127345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:37:17.782 [DEBUG] [Thread-127345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:37:17.830 [DEBUG] [Thread-127345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:37:17.830 [DEBUG] [Thread-127345] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:37:17.839 [DEBUG] [Thread-127345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:37:17.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:37:17.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:37:17.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:37:17.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:37:17.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:37:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:37:17.874 [DEBUG] [Thread-127345] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:37:19.123 [DEBUG] [Thread-127347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:28.400 [DEBUG] [Thread-127348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:31.498 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:34.165 [DEBUG] [Thread-127349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:41.907 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:41.908 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:47.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:37:47.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:37:47.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:37:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 37, 22), 10.89, 47.65, 0.0, 24.81, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:37:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:37:22
2025-12-04T01:37:48.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:37:48.840 [DEBUG] [Thread-127350] [transport.py] [_log()] starting thread (client mode): 0xa2787c70
2025-12-04T01:37:48.840 [DEBUG] [Thread-127350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:37:48.861 [DEBUG] [Thread-127350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:37:48.861 [INFO] [Thread-127350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] client lang: <none>
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] server lang: <none>
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] kex follows: False
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:37:48.864 [DEBUG] [Thread-127350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:37:48.865 [DEBUG] [Thread-127350] [transport.py] [_log()] Compression: none
2025-12-04T01:37:48.865 [DEBUG] [Thread-127350] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:37:48.880 [DEBUG] [Thread-127350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:37:48.881 [DEBUG] [Thread-127350] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:37:48.881 [DEBUG] [Thread-127350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:37:48.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:37:48.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:37:48.883 [DEBUG] [Thread-127350] [transport.py] [_log()] userauth is OK
2025-12-04T01:37:48.884 [DEBUG] [Thread-127350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:37:48.884 [DEBUG] [Thread-127350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:37:48.884 [DEBUG] [Thread-127350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:37:48.884 [DEBUG] [Thread-127350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:37:48.905 [INFO] [Thread-127350] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:37:48.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:37:49.198 [DEBUG] [Thread-127352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:37:49.544 [DEBUG] [Thread-127350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:37:49.544 [DEBUG] [Thread-127350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:37:49.544 [DEBUG] [Thread-127350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:37:49.585 [DEBUG] [Thread-127350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:37:49.585 [DEBUG] [Thread-127350] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:37:49.588 [DEBUG] [Thread-127350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:37:49.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:37:49.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:37:49.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:37:49.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:37:49.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:37:49.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:37:49.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:37:49.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:37:49.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:37:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.984421 -999.00  +13.20  20.94     52   +3.70 1 1 1 1 1     0    0 9.67 6.11 ZNESW 22.6 20.9 137.6 29.5 13.6 -24.9 13.4 -24.4 13.2 -22.6 13.6 -23.6
2025-12-04T01:37:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:37:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:37:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.984421
2025-12-04T01:37:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:37:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:37:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:37:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:37:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:37:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:37:22', tmtdew=10.89, humidity=47.65, cloud=0.0, wind=24.81, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:37:22', seeing=1.44, atlas_timestamp='2025-12-03T23:37:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:37:49.615 [DEBUG] [Thread-127350] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:37:49.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:37:49.715 [DEBUG] [Thread-127354] [transport.py] [_log()] starting thread (client mode): 0xa2785810
2025-12-04T01:37:49.715 [DEBUG] [Thread-127354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:37:49.731 [DEBUG] [Thread-127354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:37:49.731 [INFO] [Thread-127354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:49.740 [DEBUG] [Thread-127354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] client lang: <none>
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] server lang: <none>
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] kex follows: False
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:37:49.741 [DEBUG] [Thread-127354] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:37:49.742 [DEBUG] [Thread-127354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:37:49.742 [DEBUG] [Thread-127354] [transport.py] [_log()] Compression: none
2025-12-04T01:37:49.742 [DEBUG] [Thread-127354] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:37:49.799 [DEBUG] [Thread-127354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:37:49.799 [DEBUG] [Thread-127354] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:37:49.800 [DEBUG] [Thread-127354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:37:49.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:37:49.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:37:49.855 [DEBUG] [Thread-127354] [transport.py] [_log()] userauth is OK
2025-12-04T01:37:49.855 [DEBUG] [Thread-127354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:37:49.855 [DEBUG] [Thread-127354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:37:49.856 [DEBUG] [Thread-127354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:37:49.856 [DEBUG] [Thread-127354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:37:49.877 [INFO] [Thread-127354] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:37:49.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:37:49.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:37:50.710 [DEBUG] [Thread-127354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:37:50.710 [DEBUG] [Thread-127354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:37:50.757 [DEBUG] [Thread-127354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:37:50.758 [DEBUG] [Thread-127354] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:37:50.766 [DEBUG] [Thread-127354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:37:50.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:37:50.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:37:50.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:37:50.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:37:50.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:37:50.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:37:50.801 [DEBUG] [Thread-127354] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:37:51.953 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:04.226 [DEBUG] [Thread-127356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:12.332 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:19.260 [DEBUG] [Thread-127357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:20.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:38:20.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:38:20.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:38:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 37, 54), 10.88, 47.7, 0.0, 22.07, 13.24, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:38:21.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:37:54
2025-12-04T01:38:21.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:38:21.774 [DEBUG] [Thread-127358] [transport.py] [_log()] starting thread (client mode): 0xa27a0fd0
2025-12-04T01:38:21.774 [DEBUG] [Thread-127358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:38:21.795 [DEBUG] [Thread-127358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:38:21.795 [INFO] [Thread-127358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] client lang: <none>
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] server lang: <none>
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] kex follows: False
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:38:21.799 [DEBUG] [Thread-127358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:38:21.800 [DEBUG] [Thread-127358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:38:21.800 [DEBUG] [Thread-127358] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:38:21.800 [DEBUG] [Thread-127358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:38:21.800 [DEBUG] [Thread-127358] [transport.py] [_log()] Compression: none
2025-12-04T01:38:21.800 [DEBUG] [Thread-127358] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:38:21.816 [DEBUG] [Thread-127358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:38:21.817 [DEBUG] [Thread-127358] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:38:21.817 [DEBUG] [Thread-127358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:38:21.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:38:21.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:38:21.819 [DEBUG] [Thread-127358] [transport.py] [_log()] userauth is OK
2025-12-04T01:38:21.819 [DEBUG] [Thread-127358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:38:21.820 [DEBUG] [Thread-127358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:38:21.820 [DEBUG] [Thread-127358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:38:21.820 [DEBUG] [Thread-127358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:38:21.842 [INFO] [Thread-127358] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:38:21.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:38:22.507 [DEBUG] [Thread-127358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:38:22.507 [DEBUG] [Thread-127358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:38:22.507 [DEBUG] [Thread-127358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:38:22.548 [DEBUG] [Thread-127358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:38:22.548 [DEBUG] [Thread-127358] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:38:22.551 [DEBUG] [Thread-127358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:38:22.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:38:22.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:38:22.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:38:22.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:38:22.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:38:22.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:38:22.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:38:22.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.984768 -999.00  +13.20  14.41     52   +3.70 1 1 1 1 1     0    0 9.53 7.25 ZNESW 16.9 14.4 139.2 24.7 13.6 -24.9 13.4 -24.4 13.3 -22.7 13.6 -23.8
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.984768
2025-12-04T01:38:22.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:38:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:38:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:38:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:38:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:38:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:37:54', tmtdew=10.88, humidity=47.7, cloud=0.0, wind=22.07, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:37:56', seeing=1.44, atlas_timestamp='2025-12-03T23:38:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:38:22.575 [DEBUG] [Thread-127358] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:38:22.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:38:22.674 [DEBUG] [Thread-127361] [transport.py] [_log()] starting thread (client mode): 0xa277be50
2025-12-04T01:38:22.674 [DEBUG] [Thread-127361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:38:22.688 [DEBUG] [Thread-127361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:38:22.688 [INFO] [Thread-127361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:38:22.695 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:38:22.695 [DEBUG] [Thread-127361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:38:22.695 [DEBUG] [Thread-127361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:38:22.695 [DEBUG] [Thread-127361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] client lang: <none>
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] server lang: <none>
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] kex follows: False
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] Compression: none
2025-12-04T01:38:22.696 [DEBUG] [Thread-127361] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:38:22.763 [DEBUG] [Thread-127361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:38:22.763 [DEBUG] [Thread-127361] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:38:22.763 [DEBUG] [Thread-127361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:38:22.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:38:22.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:38:22.819 [DEBUG] [Thread-127361] [transport.py] [_log()] userauth is OK
2025-12-04T01:38:22.819 [DEBUG] [Thread-127361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:38:22.819 [DEBUG] [Thread-127361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:38:22.819 [DEBUG] [Thread-127361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:38:22.820 [DEBUG] [Thread-127361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:38:22.842 [INFO] [Thread-127361] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:38:22.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:38:22.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:38:23.650 [DEBUG] [Thread-127361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:38:23.650 [DEBUG] [Thread-127361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:38:23.700 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:38:23.701 [DEBUG] [Thread-127361] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:38:23.710 [DEBUG] [Thread-127361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:38:23.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:38:23.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:38:23.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:38:23.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:38:23.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:38:23.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:38:23.745 [DEBUG] [Thread-127361] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:38:28.466 [DEBUG] [Thread-127363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:32.713 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:34.289 [DEBUG] [Thread-127364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:42.116 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:42.117 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:49.329 [DEBUG] [Thread-127365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:53.091 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:38:53.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:38:53.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:38:53.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:38:54.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 38, 28), 10.89, 47.64, 0.0, 23.91, 13.19, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:38:54.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:38:28
2025-12-04T01:38:54.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:38:54.697 [DEBUG] [Thread-127366] [transport.py] [_log()] starting thread (client mode): 0xa51ce320
2025-12-04T01:38:54.697 [DEBUG] [Thread-127366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:38:54.717 [DEBUG] [Thread-127366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:38:54.718 [INFO] [Thread-127366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:54.720 [DEBUG] [Thread-127366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] client lang: <none>
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] server lang: <none>
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] kex follows: False
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] Compression: none
2025-12-04T01:38:54.721 [DEBUG] [Thread-127366] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:38:54.737 [DEBUG] [Thread-127366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:38:54.738 [DEBUG] [Thread-127366] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:38:54.738 [DEBUG] [Thread-127366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:38:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:38:54.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:38:54.740 [DEBUG] [Thread-127366] [transport.py] [_log()] userauth is OK
2025-12-04T01:38:54.740 [DEBUG] [Thread-127366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:38:54.741 [DEBUG] [Thread-127366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:38:54.741 [DEBUG] [Thread-127366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:38:54.741 [DEBUG] [Thread-127366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:38:54.766 [INFO] [Thread-127366] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:38:54.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:38:55.458 [DEBUG] [Thread-127366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:38:55.458 [DEBUG] [Thread-127366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:38:55.458 [DEBUG] [Thread-127366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:38:55.499 [DEBUG] [Thread-127366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:38:55.499 [DEBUG] [Thread-127366] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:38:55.502 [DEBUG] [Thread-127366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:38:55.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:38:55.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:38:55.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:38:55.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:38:55.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:38:55.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:38:55.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.985115 -999.00  +13.20  16.32     52   +3.70 1 1 1 1 1     0    0 9.38 9.32 ZNESW 18.8 16.3 145.0 20.8 13.6 -24.9 13.4 -24.3 13.2 -22.8 13.6 -23.8
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:38:55.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.985115
2025-12-04T01:38:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:38:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:38:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:38:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:38:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:38:55.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:38:28', tmtdew=10.89, humidity=47.64, cloud=0.0, wind=23.91, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:38:28', seeing=1.44, atlas_timestamp='2025-12-03T23:38:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:38:55.527 [DEBUG] [Thread-127366] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:38:55.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:38:55.623 [DEBUG] [Thread-127369] [transport.py] [_log()] starting thread (client mode): 0xa27a0820
2025-12-04T01:38:55.623 [DEBUG] [Thread-127369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:38:55.637 [DEBUG] [Thread-127369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:38:55.638 [INFO] [Thread-127369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:38:55.645 [DEBUG] [Thread-127369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] client lang: <none>
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] server lang: <none>
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] kex follows: False
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] Compression: none
2025-12-04T01:38:55.646 [DEBUG] [Thread-127369] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:38:55.703 [DEBUG] [Thread-127369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:38:55.703 [DEBUG] [Thread-127369] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:38:55.704 [DEBUG] [Thread-127369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:38:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:38:55.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:38:55.759 [DEBUG] [Thread-127369] [transport.py] [_log()] userauth is OK
2025-12-04T01:38:55.759 [DEBUG] [Thread-127369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:38:55.759 [DEBUG] [Thread-127369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:38:55.760 [DEBUG] [Thread-127369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:38:55.760 [DEBUG] [Thread-127369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:38:55.778 [INFO] [Thread-127369] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:38:55.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:38:55.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:38:56.586 [DEBUG] [Thread-127369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:38:56.586 [DEBUG] [Thread-127369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:38:56.635 [DEBUG] [Thread-127369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:38:56.635 [DEBUG] [Thread-127369] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:38:56.644 [DEBUG] [Thread-127369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:38:56.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:38:56.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:38:56.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:38:56.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:38:56.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:38:56.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:38:56.678 [DEBUG] [Thread-127369] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:39:04.356 [DEBUG] [Thread-127371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:13.506 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:19.396 [DEBUG] [Thread-127372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:26.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:39:26.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:39:26.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 38, 28), 10.89, 47.64, 0.0, 23.91, 13.19, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:39:27.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:38:28
2025-12-04T01:39:27.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:39:27.665 [DEBUG] [Thread-127373] [transport.py] [_log()] starting thread (client mode): 0xa5198e20
2025-12-04T01:39:27.665 [DEBUG] [Thread-127373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:39:27.679 [DEBUG] [Thread-127373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:39:27.679 [INFO] [Thread-127373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:39:27.682 [DEBUG] [Thread-127373] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:39:27.682 [DEBUG] [Thread-127373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:39:27.682 [DEBUG] [Thread-127373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] client lang: <none>
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] server lang: <none>
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] kex follows: False
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] Compression: none
2025-12-04T01:39:27.683 [DEBUG] [Thread-127373] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:39:27.700 [DEBUG] [Thread-127373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:39:27.700 [DEBUG] [Thread-127373] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:39:27.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:39:27.701 [DEBUG] [Thread-127373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:39:27.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:39:27.703 [DEBUG] [Thread-127373] [transport.py] [_log()] userauth is OK
2025-12-04T01:39:27.703 [DEBUG] [Thread-127373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:39:27.704 [DEBUG] [Thread-127373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:39:27.704 [DEBUG] [Thread-127373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:39:27.704 [DEBUG] [Thread-127373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:39:27.727 [INFO] [Thread-127373] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:39:27.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:39:28.329 [DEBUG] [Thread-127373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:39:28.329 [DEBUG] [Thread-127373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:39:28.330 [DEBUG] [Thread-127373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:39:28.370 [DEBUG] [Thread-127373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:39:28.370 [DEBUG] [Thread-127373] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:39:28.372 [DEBUG] [Thread-127373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:39:28.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:39:28.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:39:28.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:39:28.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:39:28.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:39:28.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:39:28.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.985462 -999.00  +13.20  15.69     52   +3.60 1 1 1 1 1     0    0 9.61 9.97 ZNESW 20.2 15.7 167.6 28.6 13.6 -25.0 13.4 -24.4 13.2 -22.8 13.6 -23.8
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.985462
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:39:28.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:38:28', tmtdew=10.89, humidity=47.64, cloud=0.0, wind=23.91, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:39:00', seeing=1.23, atlas_timestamp='2025-12-03T23:39:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:34:00')
2025-12-04T01:39:28.386 [DEBUG] [Thread-127373] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:39:28.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:39:28.476 [DEBUG] [Thread-127376] [transport.py] [_log()] starting thread (client mode): 0xa519a6b0
2025-12-04T01:39:28.476 [DEBUG] [Thread-127376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:39:28.490 [DEBUG] [Thread-127376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:39:28.490 [INFO] [Thread-127376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] client lang: <none>
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] server lang: <none>
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] kex follows: False
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] Compression: none
2025-12-04T01:39:28.498 [DEBUG] [Thread-127376] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:39:28.520 [DEBUG] [Thread-127378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:28.555 [DEBUG] [Thread-127376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:39:28.556 [DEBUG] [Thread-127376] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:39:28.556 [DEBUG] [Thread-127376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:39:28.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:39:28.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:39:28.612 [DEBUG] [Thread-127376] [transport.py] [_log()] userauth is OK
2025-12-04T01:39:28.612 [DEBUG] [Thread-127376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:39:28.612 [DEBUG] [Thread-127376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:39:28.613 [DEBUG] [Thread-127376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:39:28.613 [DEBUG] [Thread-127376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:39:28.634 [INFO] [Thread-127376] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:39:28.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:39:28.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:39:29.467 [DEBUG] [Thread-127376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:39:29.467 [DEBUG] [Thread-127376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:39:29.515 [DEBUG] [Thread-127376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:39:29.515 [DEBUG] [Thread-127376] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:39:29.524 [DEBUG] [Thread-127376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:39:29.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:39:29.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:39:29.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:39:29.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:39:29.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:39:29.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:39:29.558 [DEBUG] [Thread-127376] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:39:33.922 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:34.424 [DEBUG] [Thread-127379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:42.315 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:42.316 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:49.463 [DEBUG] [Thread-127380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:54.313 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:39:59.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:39:59.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:39:59.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:40:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 39, 32), 10.81, 47.77, 0.0, 25.14, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:40:00.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:39:32
2025-12-04T01:40:00.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:40:00.577 [DEBUG] [Thread-127381] [transport.py] [_log()] starting thread (client mode): 0xa519a5c0
2025-12-04T01:40:00.577 [DEBUG] [Thread-127381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:40:00.597 [DEBUG] [Thread-127381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:40:00.597 [INFO] [Thread-127381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] client lang: <none>
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] server lang: <none>
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] kex follows: False
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] Compression: none
2025-12-04T01:40:00.599 [DEBUG] [Thread-127381] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:40:00.609 [DEBUG] [Thread-127381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:40:00.609 [DEBUG] [Thread-127381] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:40:00.609 [DEBUG] [Thread-127381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:40:00.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:40:00.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:40:00.610 [DEBUG] [Thread-127381] [transport.py] [_log()] userauth is OK
2025-12-04T01:40:00.610 [DEBUG] [Thread-127381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:40:00.610 [DEBUG] [Thread-127381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:40:00.610 [DEBUG] [Thread-127381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:40:00.610 [DEBUG] [Thread-127381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:40:00.620 [INFO] [Thread-127381] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:40:00.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:40:01.546 [DEBUG] [Thread-127381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:40:01.546 [DEBUG] [Thread-127381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:40:01.546 [DEBUG] [Thread-127381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:40:01.586 [DEBUG] [Thread-127381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:40:01.586 [DEBUG] [Thread-127381] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:40:01.588 [DEBUG] [Thread-127381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:40:01.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:40:01.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:40:01.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:40:01.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:40:01.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:40:01.597 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:40:01.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.985810 -999.00  +13.20  24.11     52   +3.70 1 1 1 1 1     0    0 9.50 12.26 ZNESW 18.9 24.1 145.8 25.7 13.6 -24.9 13.4 -24.4 13.2 -23.0 13.5 -23.7
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.985810
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:40:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:40:01.597 [DEBUG] [Thread-127381] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:40:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:40:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:40:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:40:01.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:39:32', tmtdew=10.81, humidity=47.77, cloud=0.0, wind=25.14, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:39:32', seeing=1.12, atlas_timestamp='2025-12-03T23:39:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:37:00')
2025-12-04T01:40:01.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:40:01.685 [DEBUG] [Thread-127384] [transport.py] [_log()] starting thread (client mode): 0xa5199300
2025-12-04T01:40:01.685 [DEBUG] [Thread-127384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:40:01.699 [DEBUG] [Thread-127384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:40:01.699 [INFO] [Thread-127384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:40:01.706 [DEBUG] [Thread-127384] [transport.py] [_log()] client lang: <none>
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] server lang: <none>
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] kex follows: False
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] Compression: none
2025-12-04T01:40:01.707 [DEBUG] [Thread-127384] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:40:01.764 [DEBUG] [Thread-127384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:40:01.764 [DEBUG] [Thread-127384] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:40:01.764 [DEBUG] [Thread-127384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:40:01.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:40:01.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:40:01.821 [DEBUG] [Thread-127384] [transport.py] [_log()] userauth is OK
2025-12-04T01:40:01.821 [DEBUG] [Thread-127384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:40:01.821 [DEBUG] [Thread-127384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:40:01.821 [DEBUG] [Thread-127384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:40:01.821 [DEBUG] [Thread-127384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:40:01.836 [INFO] [Thread-127384] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:40:01.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:40:01.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:40:02.741 [DEBUG] [Thread-127384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:40:02.741 [DEBUG] [Thread-127384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:40:02.789 [DEBUG] [Thread-127384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:40:02.789 [DEBUG] [Thread-127384] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:40:02.798 [DEBUG] [Thread-127384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:40:02.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:40:02.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:40:02.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:40:02.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:40:02.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:40:02.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:40:02.829 [DEBUG] [Thread-127384] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:40:04.490 [DEBUG] [Thread-127386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:14.732 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:19.536 [DEBUG] [Thread-127387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:28.589 [DEBUG] [Thread-127388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:32.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:40:32.852 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:40:32.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:40:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 40, 4), 10.79, 47.82, 0.0, 24.91, 13.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:40:33.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:40:04
2025-12-04T01:40:33.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:40:33.819 [DEBUG] [Thread-127389] [transport.py] [_log()] starting thread (client mode): 0xa277bd60
2025-12-04T01:40:33.819 [DEBUG] [Thread-127389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:40:33.841 [DEBUG] [Thread-127389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:40:33.841 [INFO] [Thread-127389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:40:33.844 [DEBUG] [Thread-127389] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:40:33.844 [DEBUG] [Thread-127389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:40:33.844 [DEBUG] [Thread-127389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:40:33.844 [DEBUG] [Thread-127389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:33.844 [DEBUG] [Thread-127389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] client lang: <none>
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] server lang: <none>
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] kex follows: False
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:40:33.845 [DEBUG] [Thread-127389] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:40:33.846 [DEBUG] [Thread-127389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:40:33.846 [DEBUG] [Thread-127389] [transport.py] [_log()] Compression: none
2025-12-04T01:40:33.846 [DEBUG] [Thread-127389] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:40:33.866 [DEBUG] [Thread-127389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:40:33.866 [DEBUG] [Thread-127389] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:40:33.867 [DEBUG] [Thread-127389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:40:33.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:40:33.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:40:33.868 [DEBUG] [Thread-127389] [transport.py] [_log()] userauth is OK
2025-12-04T01:40:33.868 [DEBUG] [Thread-127389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:40:33.869 [DEBUG] [Thread-127389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:40:33.869 [DEBUG] [Thread-127389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:40:33.869 [DEBUG] [Thread-127389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:40:33.890 [INFO] [Thread-127389] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:40:33.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:40:34.504 [DEBUG] [Thread-127389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:40:34.504 [DEBUG] [Thread-127389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:40:34.505 [DEBUG] [Thread-127389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:40:34.546 [DEBUG] [Thread-127389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:40:34.546 [DEBUG] [Thread-127389] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:40:34.548 [DEBUG] [Thread-127389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:40:34.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:40:34.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:40:34.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:40:34.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:40:34.564 [DEBUG] [Thread-127391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:34.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:40:34.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:40:34.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:40:34.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:40:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:40:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.985810 -999.00  +13.20  24.11     52   +3.70 1 1 1 1 1     0    0 9.50 12.26 ZNESW 18.9 24.1 145.8 25.7 13.6 -24.9 13.4 -24.4 13.2 -23.0 13.5 -23.7
2025-12-04T01:40:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:40:34.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:40:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.985810
2025-12-04T01:40:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:40:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:40:34.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:40:34.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:40:34.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:40:34.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:40:04', tmtdew=10.79, humidity=47.82, cloud=0.0, wind=24.91, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:40:04', seeing=0.98, atlas_timestamp='2025-12-03T23:39:33.984', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:37:00')
2025-12-04T01:40:34.574 [DEBUG] [Thread-127389] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:40:34.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:40:34.667 [DEBUG] [Thread-127393] [transport.py] [_log()] starting thread (client mode): 0x9fd23cd0
2025-12-04T01:40:34.667 [DEBUG] [Thread-127393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:40:34.681 [DEBUG] [Thread-127393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:40:34.681 [INFO] [Thread-127393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] client lang: <none>
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] server lang: <none>
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] kex follows: False
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:40:34.689 [DEBUG] [Thread-127393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:40:34.690 [DEBUG] [Thread-127393] [transport.py] [_log()] Compression: none
2025-12-04T01:40:34.690 [DEBUG] [Thread-127393] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:40:34.746 [DEBUG] [Thread-127393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:40:34.746 [DEBUG] [Thread-127393] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:40:34.747 [DEBUG] [Thread-127393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:40:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:40:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:40:34.804 [DEBUG] [Thread-127393] [transport.py] [_log()] userauth is OK
2025-12-04T01:40:34.805 [DEBUG] [Thread-127393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:40:34.805 [DEBUG] [Thread-127393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:40:34.805 [DEBUG] [Thread-127393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:40:34.805 [DEBUG] [Thread-127393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:40:34.824 [INFO] [Thread-127393] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:40:34.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:40:34.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:40:35.116 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:35.636 [DEBUG] [Thread-127393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:40:35.636 [DEBUG] [Thread-127393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:40:35.684 [DEBUG] [Thread-127393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:40:35.684 [DEBUG] [Thread-127393] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:40:35.693 [DEBUG] [Thread-127393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:40:35.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:40:35.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:40:35.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:40:35.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:40:35.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:40:35.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:40:35.729 [DEBUG] [Thread-127393] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:40:42.515 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:42.516 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:49.594 [DEBUG] [Thread-127395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:40:55.560 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:04.639 [DEBUG] [Thread-127396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:41:05.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:41:05.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:41:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 40, 36), 10.79, 47.8, 0.0, 23.08, 13.11, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:41:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:40:36
2025-12-04T01:41:06.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:41:06.698 [DEBUG] [Thread-127397] [transport.py] [_log()] starting thread (client mode): 0xa5199840
2025-12-04T01:41:06.698 [DEBUG] [Thread-127397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:41:06.722 [DEBUG] [Thread-127397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:41:06.722 [INFO] [Thread-127397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:41:06.725 [DEBUG] [Thread-127397] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:41:06.725 [DEBUG] [Thread-127397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] client lang: <none>
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] server lang: <none>
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] kex follows: False
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] Compression: none
2025-12-04T01:41:06.726 [DEBUG] [Thread-127397] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:41:06.738 [DEBUG] [Thread-127397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:41:06.739 [DEBUG] [Thread-127397] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:41:06.739 [DEBUG] [Thread-127397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:41:06.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:41:06.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:41:06.741 [DEBUG] [Thread-127397] [transport.py] [_log()] userauth is OK
2025-12-04T01:41:06.741 [DEBUG] [Thread-127397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:41:06.741 [DEBUG] [Thread-127397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:41:06.742 [DEBUG] [Thread-127397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:41:06.742 [DEBUG] [Thread-127397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:41:06.778 [INFO] [Thread-127397] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:41:06.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:41:07.381 [DEBUG] [Thread-127397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:41:07.381 [DEBUG] [Thread-127397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:41:07.381 [DEBUG] [Thread-127397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:41:07.422 [DEBUG] [Thread-127397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:41:07.422 [DEBUG] [Thread-127397] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:41:07.425 [DEBUG] [Thread-127397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:41:07.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:41:07.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:41:07.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:41:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:41:07.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:41:07.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:41:07.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.986157 -999.00  +13.20  22.82     52   +3.60 1 1 1 1 1     0    0 9.45 11.98 ZNESW 19.8 22.8 145.4 28.0 13.6 -25.1 13.4 -24.4 13.2 -22.8 13.5 -23.7
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:41:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.986157
2025-12-04T01:41:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:41:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:41:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:41:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:41:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:41:07.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:40:36', tmtdew=10.79, humidity=47.8, cloud=0.0, wind=23.08, temperature=13.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:40:36', seeing=0.98, atlas_timestamp='2025-12-03T23:40:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:37:00')
2025-12-04T01:41:07.450 [DEBUG] [Thread-127397] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:41:07.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:41:07.549 [DEBUG] [Thread-127400] [transport.py] [_log()] starting thread (client mode): 0xa270b880
2025-12-04T01:41:07.549 [DEBUG] [Thread-127400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:41:07.564 [DEBUG] [Thread-127400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:41:07.564 [INFO] [Thread-127400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:41:07.571 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] client lang: <none>
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] server lang: <none>
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] kex follows: False
2025-12-04T01:41:07.572 [DEBUG] [Thread-127400] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] Compression: none
2025-12-04T01:41:07.573 [DEBUG] [Thread-127400] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:41:07.629 [DEBUG] [Thread-127400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:41:07.629 [DEBUG] [Thread-127400] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:41:07.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:41:07.630 [DEBUG] [Thread-127400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:41:07.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:41:07.685 [DEBUG] [Thread-127400] [transport.py] [_log()] userauth is OK
2025-12-04T01:41:07.686 [DEBUG] [Thread-127400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:41:07.686 [DEBUG] [Thread-127400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:41:07.686 [DEBUG] [Thread-127400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:41:07.686 [DEBUG] [Thread-127400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:41:07.708 [INFO] [Thread-127400] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:41:07.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:41:07.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:41:08.560 [DEBUG] [Thread-127400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:41:08.561 [DEBUG] [Thread-127400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:41:08.609 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:41:08.610 [DEBUG] [Thread-127400] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:41:08.618 [DEBUG] [Thread-127400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:41:08.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:41:08.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:41:08.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:41:08.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:41:08.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:41:08.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:41:08.656 [DEBUG] [Thread-127400] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:41:15.988 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:19.665 [DEBUG] [Thread-127402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:28.646 [DEBUG] [Thread-127403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:34.700 [DEBUG] [Thread-127404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:36.417 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:38.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:41:38.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:41:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:41:39.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 41, 8), 10.83, 47.66, 0.0, 23.26, 13.06, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:41:39.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:41:08
2025-12-04T01:41:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:41:39.620 [DEBUG] [Thread-127405] [transport.py] [_log()] starting thread (client mode): 0xa51d0610
2025-12-04T01:41:39.620 [DEBUG] [Thread-127405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:41:39.640 [DEBUG] [Thread-127405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:41:39.640 [INFO] [Thread-127405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:41:39.643 [DEBUG] [Thread-127405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] client lang: <none>
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] server lang: <none>
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] kex follows: False
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] Compression: none
2025-12-04T01:41:39.644 [DEBUG] [Thread-127405] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:41:39.661 [DEBUG] [Thread-127405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:41:39.661 [DEBUG] [Thread-127405] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:41:39.662 [DEBUG] [Thread-127405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:41:39.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:41:39.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:41:39.664 [DEBUG] [Thread-127405] [transport.py] [_log()] userauth is OK
2025-12-04T01:41:39.664 [DEBUG] [Thread-127405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:41:39.664 [DEBUG] [Thread-127405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:41:39.664 [DEBUG] [Thread-127405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:41:39.664 [DEBUG] [Thread-127405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:41:39.689 [INFO] [Thread-127405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:41:39.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:41:40.332 [DEBUG] [Thread-127405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:41:40.332 [DEBUG] [Thread-127405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:41:40.332 [DEBUG] [Thread-127405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:41:40.373 [DEBUG] [Thread-127405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:41:40.373 [DEBUG] [Thread-127405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:41:40.375 [DEBUG] [Thread-127405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:41:40.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:41:40.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:41:40.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:41:40.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:41:40.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:41:40.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:41:40.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:41:40.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:41:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:41:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.986852 -999.00  +13.20  21.74     51   +3.40 1 1 1 1 1     0    0 10.06 14.24 ZNESW 21.6 21.7 145.2 26.5 13.6 -24.9 13.4 -24.4 13.2 -22.8 13.6 -23.6
2025-12-04T01:41:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:41:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:41:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.986852
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:41:40.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:41:08', tmtdew=10.83, humidity=47.66, cloud=0.0, wind=23.26, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:41:08', seeing=0.97, atlas_timestamp='2025-12-03T23:41:04.013', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:37:00')
2025-12-04T01:41:40.399 [DEBUG] [Thread-127405] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:41:40.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:41:40.495 [DEBUG] [Thread-127408] [transport.py] [_log()] starting thread (client mode): 0xa2779cc0
2025-12-04T01:41:40.496 [DEBUG] [Thread-127408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:41:40.510 [DEBUG] [Thread-127408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:41:40.510 [INFO] [Thread-127408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:41:40.518 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:41:40.518 [DEBUG] [Thread-127408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] client lang: <none>
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] server lang: <none>
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] kex follows: False
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] Compression: none
2025-12-04T01:41:40.519 [DEBUG] [Thread-127408] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:41:40.578 [DEBUG] [Thread-127408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:41:40.579 [DEBUG] [Thread-127408] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:41:40.579 [DEBUG] [Thread-127408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:41:40.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:41:40.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:41:40.635 [DEBUG] [Thread-127408] [transport.py] [_log()] userauth is OK
2025-12-04T01:41:40.636 [DEBUG] [Thread-127408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:41:40.636 [DEBUG] [Thread-127408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:41:40.636 [DEBUG] [Thread-127408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:41:40.636 [DEBUG] [Thread-127408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:41:40.657 [INFO] [Thread-127408] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:41:40.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:41:40.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:41:41.517 [DEBUG] [Thread-127408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:41:41.517 [DEBUG] [Thread-127408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:41:41.564 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:41:41.564 [DEBUG] [Thread-127408] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:41:41.573 [DEBUG] [Thread-127408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:41:41.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:41:41.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:41:41.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:41:41.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:41:41.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:41:41.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:41:41.604 [DEBUG] [Thread-127408] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:41:42.716 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:42.717 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:49.732 [DEBUG] [Thread-127410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:41:56.835 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:04.772 [DEBUG] [Thread-127411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:42:11.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:42:11.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:42:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 41, 40), 10.97, 47.2, 0.0, 22.85, 13.19, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:42:12.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:41:40
2025-12-04T01:42:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:42:12.592 [DEBUG] [Thread-127412] [transport.py] [_log()] starting thread (client mode): 0xa27085e0
2025-12-04T01:42:12.593 [DEBUG] [Thread-127412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:42:12.615 [DEBUG] [Thread-127412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:42:12.615 [INFO] [Thread-127412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:42:12.618 [DEBUG] [Thread-127412] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] client lang: <none>
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] server lang: <none>
2025-12-04T01:42:12.619 [DEBUG] [Thread-127412] [transport.py] [_log()] kex follows: False
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] Compression: none
2025-12-04T01:42:12.620 [DEBUG] [Thread-127412] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:42:12.638 [DEBUG] [Thread-127412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:42:12.639 [DEBUG] [Thread-127412] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:42:12.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:42:12.640 [DEBUG] [Thread-127412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:42:12.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:42:12.642 [DEBUG] [Thread-127412] [transport.py] [_log()] userauth is OK
2025-12-04T01:42:12.642 [DEBUG] [Thread-127412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:42:12.642 [DEBUG] [Thread-127412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:42:12.642 [DEBUG] [Thread-127412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:42:12.642 [DEBUG] [Thread-127412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:42:12.664 [INFO] [Thread-127412] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:42:12.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:42:13.432 [DEBUG] [Thread-127412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:42:13.432 [DEBUG] [Thread-127412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:42:13.432 [DEBUG] [Thread-127412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:42:13.472 [DEBUG] [Thread-127412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:42:13.472 [DEBUG] [Thread-127412] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:42:13.475 [DEBUG] [Thread-127412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:42:13.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:42:13.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:42:13.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:42:13.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:42:13.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:42:13.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.987198 -999.00  +13.20  16.36     51   +3.50 1 1 1 1 1     0    0 9.70 16.49 ZNESW 20.4 16.4 133.6 25.1 13.6 -25.0 13.4 -24.4 13.2 -22.8 13.5 -23.8
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:42:13.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.987198
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:42:13.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:41:40', tmtdew=10.97, humidity=47.2, cloud=0.0, wind=22.85, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:41:40', seeing=1.02, atlas_timestamp='2025-12-03T23:41:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010249999999999204, 0.011250000000000426, -0.013749999999999929, 0.011499999999999844, -0.09249999999999936, 0.07525000000000048, 0.03550000000000075, 0.006250000000001421, 0.013500000000000512, -0.06850000000000023, 0.013249999999999318, -0.03049999999999997, 0.08399999999999963, 0.00274999999999892, -0.15500000000000114, -0.09450000000000003, 0.029249999999999332, -0.0035000000000007248, -0.029500000000000526, 0.0072499999999990905, 0.04099999999999859, -0.0002500000000011937, -0.04025000000000034, 0.0022500000000000853, 0.017999999999998906, 0.050499999999999545, -0.02874999999999872, 0.038000000000000256, 0.12950000000000017, 0.022500000000000853, -0.2809999999999988, -0.01699999999999946, 0.04374999999999929], zp_timestamp='2025-12-03T23:37:00')
2025-12-04T01:42:13.493 [DEBUG] [Thread-127412] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:42:13.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:42:13.580 [DEBUG] [Thread-127415] [transport.py] [_log()] starting thread (client mode): 0xa2708730
2025-12-04T01:42:13.580 [DEBUG] [Thread-127415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:42:13.594 [DEBUG] [Thread-127415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:42:13.594 [INFO] [Thread-127415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] client lang: <none>
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] server lang: <none>
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] kex follows: False
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] Compression: none
2025-12-04T01:42:13.602 [DEBUG] [Thread-127415] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:42:13.660 [DEBUG] [Thread-127415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:42:13.660 [DEBUG] [Thread-127415] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:42:13.661 [DEBUG] [Thread-127415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:42:13.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:42:13.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:42:13.717 [DEBUG] [Thread-127415] [transport.py] [_log()] userauth is OK
2025-12-04T01:42:13.717 [DEBUG] [Thread-127415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:42:13.717 [DEBUG] [Thread-127415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:42:13.717 [DEBUG] [Thread-127415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:42:13.717 [DEBUG] [Thread-127415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:42:13.731 [INFO] [Thread-127415] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:42:13.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:42:13.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:42:14.565 [DEBUG] [Thread-127415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:42:14.566 [DEBUG] [Thread-127415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:42:14.613 [DEBUG] [Thread-127415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:42:14.613 [DEBUG] [Thread-127415] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:42:14.621 [DEBUG] [Thread-127415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:42:14.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:42:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:42:14.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:42:14.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:42:14.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:42:14.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:42:14.653 [DEBUG] [Thread-127415] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:42:17.280 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:19.802 [DEBUG] [Thread-127417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:28.717 [DEBUG] [Thread-127418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:34.844 [DEBUG] [Thread-127419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:37.661 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:42.919 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:42.920 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:44.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:42:44.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:42:44.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:42:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 42, 12), 10.99, 47.14, 0.0, 22.92, 13.16, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:42:45.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:42:12
2025-12-04T01:42:45.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:42:45.694 [DEBUG] [Thread-127420] [transport.py] [_log()] starting thread (client mode): 0xa270ae00
2025-12-04T01:42:45.694 [DEBUG] [Thread-127420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:42:45.714 [DEBUG] [Thread-127420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:42:45.714 [INFO] [Thread-127420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] client lang: <none>
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] server lang: <none>
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] kex follows: False
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] Compression: none
2025-12-04T01:42:45.717 [DEBUG] [Thread-127420] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:42:45.734 [DEBUG] [Thread-127420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:42:45.734 [DEBUG] [Thread-127420] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:42:45.734 [DEBUG] [Thread-127420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:42:45.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:42:45.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:42:45.735 [DEBUG] [Thread-127420] [transport.py] [_log()] userauth is OK
2025-12-04T01:42:45.735 [DEBUG] [Thread-127420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:42:45.735 [DEBUG] [Thread-127420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:42:45.735 [DEBUG] [Thread-127420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:42:45.735 [DEBUG] [Thread-127420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:42:45.746 [INFO] [Thread-127420] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:42:45.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:42:46.404 [DEBUG] [Thread-127420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:42:46.404 [DEBUG] [Thread-127420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:42:46.404 [DEBUG] [Thread-127420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:42:46.446 [DEBUG] [Thread-127420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:42:46.446 [DEBUG] [Thread-127420] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:42:46.448 [DEBUG] [Thread-127420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:42:46.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:42:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:42:46.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:42:46.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:42:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:42:46.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:42:46.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.987546 -999.00  +13.20  18.10     51   +3.40 1 1 1 1 1     0    0 10.10 17.82 ZNESW 20.0 18.1 132.2 27.4 13.6 -24.9 13.5 -24.5 13.2 -22.9 13.6 -24.0
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.987546
2025-12-04T01:42:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:42:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:42:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:42:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:42:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:42:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:42:12', tmtdew=10.99, humidity=47.14, cloud=0.0, wind=22.92, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:42:12', seeing=1.11, atlas_timestamp='2025-12-03T23:42:03.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.007749999999999702, 0.012750000000000483, -0.08450000000000202, -0.030999999999998806, 0.0022500000000000853, -0.08799999999999919, -0.031749999999998835, 0.00849999999999973, -0.07899999999999885, -0.006750000000000256, -0.009999999999999787, 0.07000000000000028, -0.024250000000000327, -0.1980000000000004, -0.1120000000000001, 0.029249999999999332, -0.03049999999999997, -0.03300000000000125, -0.016250000000001208, 0.04299999999999926, 0.019249999999999545, -0.09474999999999767, -0.03775000000000084, 0.041999999999999815, 0.03149999999999942, -0.045249999999999346, 0.0045000000000001705, 0.1120000000000001, -0.058999999999999275, -0.1424999999999983, -0.06400000000000006, 0.05174999999999841], zp_timestamp='2025-12-03T23:41:00')
2025-12-04T01:42:46.466 [DEBUG] [Thread-127420] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:42:46.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:42:46.553 [DEBUG] [Thread-127423] [transport.py] [_log()] starting thread (client mode): 0xa270a0b0
2025-12-04T01:42:46.553 [DEBUG] [Thread-127423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:42:46.567 [DEBUG] [Thread-127423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:42:46.567 [INFO] [Thread-127423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] client lang: <none>
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] server lang: <none>
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] kex follows: False
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] Compression: none
2025-12-04T01:42:46.575 [DEBUG] [Thread-127423] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:42:46.635 [DEBUG] [Thread-127423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:42:46.635 [DEBUG] [Thread-127423] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:42:46.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:42:46.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:42:46.636 [DEBUG] [Thread-127423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:42:46.692 [DEBUG] [Thread-127423] [transport.py] [_log()] userauth is OK
2025-12-04T01:42:46.692 [DEBUG] [Thread-127423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:42:46.692 [DEBUG] [Thread-127423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:42:46.692 [DEBUG] [Thread-127423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:42:46.692 [DEBUG] [Thread-127423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:42:46.710 [INFO] [Thread-127423] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:42:46.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:42:46.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:42:47.533 [DEBUG] [Thread-127423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:42:47.534 [DEBUG] [Thread-127423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:42:47.582 [DEBUG] [Thread-127423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:42:47.582 [DEBUG] [Thread-127423] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:42:47.591 [DEBUG] [Thread-127423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:42:47.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:42:47.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:42:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:42:47.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:42:47.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:42:47.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:42:47.626 [DEBUG] [Thread-127423] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:42:49.871 [DEBUG] [Thread-127425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:42:58.156 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:04.915 [DEBUG] [Thread-127426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:17.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:43:17.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:43:17.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:43:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 42, 44), 11.02, 47.06, 0.0, 25.6, 13.16, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:43:18.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:42:44
2025-12-04T01:43:18.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:43:18.546 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:18.650 [DEBUG] [Thread-127427] [transport.py] [_log()] starting thread (client mode): 0xa270b640
2025-12-04T01:43:18.651 [DEBUG] [Thread-127427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:43:18.672 [DEBUG] [Thread-127427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:43:18.672 [INFO] [Thread-127427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:43:18.675 [DEBUG] [Thread-127427] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:43:18.675 [DEBUG] [Thread-127427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:43:18.675 [DEBUG] [Thread-127427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] client lang: <none>
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] server lang: <none>
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] kex follows: False
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] Compression: none
2025-12-04T01:43:18.676 [DEBUG] [Thread-127427] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:43:18.692 [DEBUG] [Thread-127427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:43:18.692 [DEBUG] [Thread-127427] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:43:18.692 [DEBUG] [Thread-127427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:43:18.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:43:18.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:43:18.693 [DEBUG] [Thread-127427] [transport.py] [_log()] userauth is OK
2025-12-04T01:43:18.693 [DEBUG] [Thread-127427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:43:18.693 [DEBUG] [Thread-127427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:43:18.693 [DEBUG] [Thread-127427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:43:18.693 [DEBUG] [Thread-127427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:43:18.710 [INFO] [Thread-127427] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:43:18.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:43:19.461 [DEBUG] [Thread-127427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:43:19.461 [DEBUG] [Thread-127427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:43:19.462 [DEBUG] [Thread-127427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:43:19.503 [DEBUG] [Thread-127427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:43:19.503 [DEBUG] [Thread-127427] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:43:19.506 [DEBUG] [Thread-127427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:43:19.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:43:19.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:43:19.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:43:19.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:43:19.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:43:19.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:43:19.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.987893 -999.00  +13.20  17.50     51   +3.50 1 1 1 1 1     0    0 10.19 18.99 ZNESW 19.2 17.5 146.4 26.0 13.6 -25.0 13.4 -24.4 13.2 -22.9 13.6 -24.0
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:43:19.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.987893
2025-12-04T01:43:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:43:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:43:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:43:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:43:19.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:43:19.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:42:44', tmtdew=11.02, humidity=47.06, cloud=0.0, wind=25.6, temperature=13.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:43:16', seeing=1.16, atlas_timestamp='2025-12-03T23:42:33.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.007749999999999702, 0.012750000000000483, -0.08450000000000202, -0.030999999999998806, 0.0022500000000000853, -0.08799999999999919, -0.031749999999998835, 0.00849999999999973, -0.07899999999999885, -0.006750000000000256, -0.009999999999999787, 0.07000000000000028, -0.024250000000000327, -0.1980000000000004, -0.1120000000000001, 0.029249999999999332, -0.03049999999999997, -0.03300000000000125, -0.016250000000001208, 0.04299999999999926, 0.019249999999999545, -0.09474999999999767, -0.03775000000000084, 0.041999999999999815, 0.03149999999999942, -0.045249999999999346, 0.0045000000000001705, 0.1120000000000001, -0.058999999999999275, -0.1424999999999983, -0.06400000000000006, 0.05174999999999841], zp_timestamp='2025-12-03T23:41:00')
2025-12-04T01:43:19.529 [DEBUG] [Thread-127427] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:43:19.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:43:19.628 [DEBUG] [Thread-127430] [transport.py] [_log()] starting thread (client mode): 0x9fd21780
2025-12-04T01:43:19.628 [DEBUG] [Thread-127430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:43:19.642 [DEBUG] [Thread-127430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:43:19.642 [INFO] [Thread-127430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:43:19.650 [DEBUG] [Thread-127430] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:43:19.650 [DEBUG] [Thread-127430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:43:19.650 [DEBUG] [Thread-127430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:43:19.650 [DEBUG] [Thread-127430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:19.650 [DEBUG] [Thread-127430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] client lang: <none>
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] server lang: <none>
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] kex follows: False
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:43:19.651 [DEBUG] [Thread-127430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:43:19.652 [DEBUG] [Thread-127430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:43:19.652 [DEBUG] [Thread-127430] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:43:19.652 [DEBUG] [Thread-127430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:43:19.652 [DEBUG] [Thread-127430] [transport.py] [_log()] Compression: none
2025-12-04T01:43:19.652 [DEBUG] [Thread-127430] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:43:19.710 [DEBUG] [Thread-127430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:43:19.710 [DEBUG] [Thread-127430] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:43:19.711 [DEBUG] [Thread-127430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:43:19.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:43:19.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:43:19.766 [DEBUG] [Thread-127430] [transport.py] [_log()] userauth is OK
2025-12-04T01:43:19.766 [DEBUG] [Thread-127430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:43:19.766 [DEBUG] [Thread-127430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:43:19.766 [DEBUG] [Thread-127430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:43:19.766 [DEBUG] [Thread-127430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:43:19.785 [INFO] [Thread-127430] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:43:19.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:43:19.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:43:19.947 [DEBUG] [Thread-127432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:20.598 [DEBUG] [Thread-127430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:43:20.598 [DEBUG] [Thread-127430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:43:20.646 [DEBUG] [Thread-127430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:43:20.646 [DEBUG] [Thread-127430] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:43:20.655 [DEBUG] [Thread-127430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:43:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:43:20.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:43:20.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:43:20.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:43:20.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:43:20.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:43:20.690 [DEBUG] [Thread-127430] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:43:28.781 [DEBUG] [Thread-127433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:34.997 [DEBUG] [Thread-127434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:39.000 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:43.157 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:43.158 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:50.029 [DEBUG] [Thread-127435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:43:50.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:43:50.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:43:50.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:43:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 43, 16), 11.0, 47.11, 0.0, 24.99, 13.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:43:51.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:43:16
2025-12-04T01:43:51.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:43:51.727 [DEBUG] [Thread-127436] [transport.py] [_log()] starting thread (client mode): 0xa2708940
2025-12-04T01:43:51.727 [DEBUG] [Thread-127436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:43:51.748 [DEBUG] [Thread-127436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:43:51.748 [INFO] [Thread-127436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] client lang: <none>
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] server lang: <none>
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] kex follows: False
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] Compression: none
2025-12-04T01:43:51.752 [DEBUG] [Thread-127436] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:43:51.768 [DEBUG] [Thread-127436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:43:51.768 [DEBUG] [Thread-127436] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:43:51.769 [DEBUG] [Thread-127436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:43:51.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:43:51.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:43:51.770 [DEBUG] [Thread-127436] [transport.py] [_log()] userauth is OK
2025-12-04T01:43:51.770 [DEBUG] [Thread-127436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:43:51.770 [DEBUG] [Thread-127436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:43:51.770 [DEBUG] [Thread-127436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:43:51.770 [DEBUG] [Thread-127436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:43:51.780 [INFO] [Thread-127436] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:43:51.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:43:52.417 [DEBUG] [Thread-127436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:43:52.417 [DEBUG] [Thread-127436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:43:52.417 [DEBUG] [Thread-127436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:43:52.458 [DEBUG] [Thread-127436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:43:52.458 [DEBUG] [Thread-127436] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:43:52.460 [DEBUG] [Thread-127436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:43:52.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:43:52.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:43:52.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:43:52.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:43:52.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:43:52.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:43:52.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.988240 -999.00  +13.20  17.62     51   +3.40 1 1 1 1 1     0    0 9.96 21.55 ZNESW 17.3 17.6 137.4 27.2 13.6 -25.0 13.4 -24.4 13.2 -23.0 13.5 -23.8
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.988240
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:43:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:43:16', tmtdew=11.0, humidity=47.11, cloud=0.0, wind=24.99, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:43:48', seeing=1.17, atlas_timestamp='2025-12-03T23:43:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.007749999999999702, 0.012750000000000483, -0.08450000000000202, -0.030999999999998806, 0.0022500000000000853, -0.08799999999999919, -0.031749999999998835, 0.00849999999999973, -0.07899999999999885, -0.006750000000000256, -0.009999999999999787, 0.07000000000000028, -0.024250000000000327, -0.1980000000000004, -0.1120000000000001, 0.029249999999999332, -0.03049999999999997, -0.03300000000000125, -0.016250000000001208, 0.04299999999999926, 0.019249999999999545, -0.09474999999999767, -0.03775000000000084, 0.041999999999999815, 0.03149999999999942, -0.045249999999999346, 0.0045000000000001705, 0.1120000000000001, -0.058999999999999275, -0.1424999999999983, -0.06400000000000006, 0.05174999999999841], zp_timestamp='2025-12-03T23:41:00')
2025-12-04T01:43:52.480 [DEBUG] [Thread-127436] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:43:52.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:43:52.564 [DEBUG] [Thread-127439] [transport.py] [_log()] starting thread (client mode): 0xa270a410
2025-12-04T01:43:52.564 [DEBUG] [Thread-127439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:43:52.581 [DEBUG] [Thread-127439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:43:52.581 [INFO] [Thread-127439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] client lang: <none>
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] server lang: <none>
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] kex follows: False
2025-12-04T01:43:52.590 [DEBUG] [Thread-127439] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] Compression: none
2025-12-04T01:43:52.591 [DEBUG] [Thread-127439] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:43:52.647 [DEBUG] [Thread-127439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:43:52.647 [DEBUG] [Thread-127439] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:43:52.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:43:52.647 [DEBUG] [Thread-127439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:43:52.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:43:52.704 [DEBUG] [Thread-127439] [transport.py] [_log()] userauth is OK
2025-12-04T01:43:52.704 [DEBUG] [Thread-127439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:43:52.704 [DEBUG] [Thread-127439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:43:52.704 [DEBUG] [Thread-127439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:43:52.704 [DEBUG] [Thread-127439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:43:52.718 [INFO] [Thread-127439] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:43:52.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:43:52.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:43:53.523 [DEBUG] [Thread-127439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:43:53.523 [DEBUG] [Thread-127439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:43:53.570 [DEBUG] [Thread-127439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:43:53.570 [DEBUG] [Thread-127439] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:43:53.579 [DEBUG] [Thread-127439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:43:53.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:43:53.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:43:53.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:43:53.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:43:53.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:43:53.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:43:53.614 [DEBUG] [Thread-127439] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:43:59.377 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:05.058 [DEBUG] [Thread-127441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:19.808 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:20.100 [DEBUG] [Thread-127442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:23.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:44:23.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:44:23.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:44:24.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 44, 20), 11.16, 46.91, 0.0, 24.49, 13.13, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:44:24.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:44:20
2025-12-04T01:44:24.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:44:24.596 [DEBUG] [Thread-127443] [transport.py] [_log()] starting thread (client mode): 0xa270a0e0
2025-12-04T01:44:24.596 [DEBUG] [Thread-127443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:44:24.615 [DEBUG] [Thread-127443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:44:24.615 [INFO] [Thread-127443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] client lang: <none>
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] server lang: <none>
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] kex follows: False
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:44:24.618 [DEBUG] [Thread-127443] [transport.py] [_log()] Compression: none
2025-12-04T01:44:24.619 [DEBUG] [Thread-127443] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:44:24.637 [DEBUG] [Thread-127443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:44:24.637 [DEBUG] [Thread-127443] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:44:24.638 [DEBUG] [Thread-127443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:44:24.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:44:24.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:44:24.640 [DEBUG] [Thread-127443] [transport.py] [_log()] userauth is OK
2025-12-04T01:44:24.640 [DEBUG] [Thread-127443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:44:24.640 [DEBUG] [Thread-127443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:44:24.640 [DEBUG] [Thread-127443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:44:24.640 [DEBUG] [Thread-127443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:44:24.660 [INFO] [Thread-127443] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:44:24.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:44:25.475 [DEBUG] [Thread-127443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:44:25.475 [DEBUG] [Thread-127443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:44:25.475 [DEBUG] [Thread-127443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:44:25.516 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:44:25.516 [DEBUG] [Thread-127443] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:44:25.519 [DEBUG] [Thread-127443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:44:25.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:44:25.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:44:25.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:44:25.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:44:25.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:44:25.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:44:25.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:44:25.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.988587 -999.00  +13.20  23.34     51   +3.40 1 1 1 1 1     0    0 10.06 25.22 ZNESW 22.2 23.3 152.2 31.8 13.5 -25.1 13.5 -24.6 13.2 -22.9 13.5 -23.8
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.988587
2025-12-04T01:44:25.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:44:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:44:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:44:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:44:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:44:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:44:20', tmtdew=11.16, humidity=46.91, cloud=0.0, wind=24.49, temperature=13.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:44:20', seeing=1.13, atlas_timestamp='2025-12-03T23:43:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.007749999999999702, 0.012750000000000483, -0.08450000000000202, -0.030999999999998806, 0.0022500000000000853, -0.08799999999999919, -0.031749999999998835, 0.00849999999999973, -0.07899999999999885, -0.006750000000000256, -0.009999999999999787, 0.07000000000000028, -0.024250000000000327, -0.1980000000000004, -0.1120000000000001, 0.029249999999999332, -0.03049999999999997, -0.03300000000000125, -0.016250000000001208, 0.04299999999999926, 0.019249999999999545, -0.09474999999999767, -0.03775000000000084, 0.041999999999999815, 0.03149999999999942, -0.045249999999999346, 0.0045000000000001705, 0.1120000000000001, -0.058999999999999275, -0.1424999999999983, -0.06400000000000006, 0.05174999999999841], zp_timestamp='2025-12-03T23:41:00')
2025-12-04T01:44:25.542 [DEBUG] [Thread-127443] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:44:25.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:44:25.640 [DEBUG] [Thread-127446] [transport.py] [_log()] starting thread (client mode): 0xa51d3580
2025-12-04T01:44:25.640 [DEBUG] [Thread-127446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:44:25.658 [DEBUG] [Thread-127446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:44:25.658 [INFO] [Thread-127446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:25.666 [DEBUG] [Thread-127446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] client lang: <none>
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] server lang: <none>
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] kex follows: False
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:44:25.667 [DEBUG] [Thread-127446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:44:25.668 [DEBUG] [Thread-127446] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:44:25.668 [DEBUG] [Thread-127446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:44:25.668 [DEBUG] [Thread-127446] [transport.py] [_log()] Compression: none
2025-12-04T01:44:25.668 [DEBUG] [Thread-127446] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:44:25.723 [DEBUG] [Thread-127446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:44:25.724 [DEBUG] [Thread-127446] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:44:25.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:44:25.725 [DEBUG] [Thread-127446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:44:25.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:44:25.779 [DEBUG] [Thread-127446] [transport.py] [_log()] userauth is OK
2025-12-04T01:44:25.779 [DEBUG] [Thread-127446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:44:25.779 [DEBUG] [Thread-127446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:44:25.779 [DEBUG] [Thread-127446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:44:25.780 [DEBUG] [Thread-127446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:44:25.799 [INFO] [Thread-127446] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:44:25.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:44:25.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:44:26.664 [DEBUG] [Thread-127446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:44:26.665 [DEBUG] [Thread-127446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:44:26.713 [DEBUG] [Thread-127446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:44:26.713 [DEBUG] [Thread-127446] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:44:26.721 [DEBUG] [Thread-127446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:44:26.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:44:26.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:44:26.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:44:26.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:44:26.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:44:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:44:26.756 [DEBUG] [Thread-127446] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:44:28.833 [DEBUG] [Thread-127448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:35.131 [DEBUG] [Thread-127449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:40.252 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:43.357 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:43.358 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:50.176 [DEBUG] [Thread-127450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:44:56.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:44:56.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:44:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:44:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 44, 52), 11.07, 46.86, 0.0, 25.8, 13.08, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:44:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:44:52
2025-12-04T01:44:57.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:44:57.759 [DEBUG] [Thread-127451] [transport.py] [_log()] starting thread (client mode): 0xa27097e0
2025-12-04T01:44:57.759 [DEBUG] [Thread-127451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:44:57.779 [DEBUG] [Thread-127451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:44:57.779 [INFO] [Thread-127451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] client lang: <none>
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] server lang: <none>
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] kex follows: False
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:44:57.782 [DEBUG] [Thread-127451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:44:57.783 [DEBUG] [Thread-127451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:44:57.783 [DEBUG] [Thread-127451] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:44:57.783 [DEBUG] [Thread-127451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:44:57.783 [DEBUG] [Thread-127451] [transport.py] [_log()] Compression: none
2025-12-04T01:44:57.783 [DEBUG] [Thread-127451] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:44:57.798 [DEBUG] [Thread-127451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:44:57.799 [DEBUG] [Thread-127451] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:44:57.799 [DEBUG] [Thread-127451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:44:57.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:44:57.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:44:57.801 [DEBUG] [Thread-127451] [transport.py] [_log()] userauth is OK
2025-12-04T01:44:57.801 [DEBUG] [Thread-127451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:44:57.801 [DEBUG] [Thread-127451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:44:57.801 [DEBUG] [Thread-127451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:44:57.801 [DEBUG] [Thread-127451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:44:57.833 [INFO] [Thread-127451] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:44:57.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:44:58.501 [DEBUG] [Thread-127451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:44:58.501 [DEBUG] [Thread-127451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:44:58.502 [DEBUG] [Thread-127451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:44:58.543 [DEBUG] [Thread-127451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:44:58.543 [DEBUG] [Thread-127451] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:44:58.546 [DEBUG] [Thread-127451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:44:58.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:44:58.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:44:58.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:44:58.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:44:58.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:44:58.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:44:58.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:44:58.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:44:58.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:44:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.988934 -999.00  +13.10  21.51     51   +3.40 1 1 1 1 1     0    0 10.22 26.99 ZNESW 22.4 21.5 130.2 25.7 13.6 -25.0 13.4 -24.5 13.2 -23.0 13.5 -23.8
2025-12-04T01:44:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:44:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:44:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.988934
2025-12-04T01:44:58.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:44:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:44:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:44:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:44:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:44:58.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:44:52', tmtdew=11.07, humidity=46.86, cloud=0.0, wind=25.8, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:44:53', seeing=1.02, atlas_timestamp='2025-12-03T23:44:03.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.007749999999999702, 0.012750000000000483, -0.08450000000000202, -0.030999999999998806, 0.0022500000000000853, -0.08799999999999919, -0.031749999999998835, 0.00849999999999973, -0.07899999999999885, -0.006750000000000256, -0.009999999999999787, 0.07000000000000028, -0.024250000000000327, -0.1980000000000004, -0.1120000000000001, 0.029249999999999332, -0.03049999999999997, -0.03300000000000125, -0.016250000000001208, 0.04299999999999926, 0.019249999999999545, -0.09474999999999767, -0.03775000000000084, 0.041999999999999815, 0.03149999999999942, -0.045249999999999346, 0.0045000000000001705, 0.1120000000000001, -0.058999999999999275, -0.1424999999999983, -0.06400000000000006, 0.05174999999999841], zp_timestamp='2025-12-03T23:41:00')
2025-12-04T01:44:58.571 [DEBUG] [Thread-127451] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:44:58.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:44:58.678 [DEBUG] [Thread-127454] [transport.py] [_log()] starting thread (client mode): 0xa27095d0
2025-12-04T01:44:58.679 [DEBUG] [Thread-127454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:44:58.692 [DEBUG] [Thread-127454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:44:58.692 [INFO] [Thread-127454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:44:58.700 [DEBUG] [Thread-127454] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:44:58.700 [DEBUG] [Thread-127454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:44:58.700 [DEBUG] [Thread-127454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:44:58.700 [DEBUG] [Thread-127454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:58.700 [DEBUG] [Thread-127454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] client lang: <none>
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] server lang: <none>
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] kex follows: False
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:44:58.701 [DEBUG] [Thread-127454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:44:58.702 [DEBUG] [Thread-127454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:44:58.702 [DEBUG] [Thread-127454] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:44:58.702 [DEBUG] [Thread-127454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:44:58.702 [DEBUG] [Thread-127454] [transport.py] [_log()] Compression: none
2025-12-04T01:44:58.702 [DEBUG] [Thread-127454] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:44:58.766 [DEBUG] [Thread-127454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:44:58.767 [DEBUG] [Thread-127454] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:44:58.767 [DEBUG] [Thread-127454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:44:58.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:44:58.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:44:58.826 [DEBUG] [Thread-127454] [transport.py] [_log()] userauth is OK
2025-12-04T01:44:58.826 [DEBUG] [Thread-127454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:44:58.826 [DEBUG] [Thread-127454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:44:58.827 [DEBUG] [Thread-127454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:44:58.827 [DEBUG] [Thread-127454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:44:58.850 [INFO] [Thread-127454] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:44:58.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:44:58.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:44:59.709 [DEBUG] [Thread-127454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:44:59.709 [DEBUG] [Thread-127454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:44:59.756 [DEBUG] [Thread-127454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:44:59.756 [DEBUG] [Thread-127454] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:44:59.765 [DEBUG] [Thread-127454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:44:59.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:44:59.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:44:59.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:44:59.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:44:59.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:44:59.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:44:59.799 [DEBUG] [Thread-127454] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:45:00.635 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:05.202 [DEBUG] [Thread-127456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:20.253 [DEBUG] [Thread-127457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:21.062 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:28.902 [DEBUG] [Thread-127458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:29.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:45:29.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:45:29.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:45:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 45, 25), 11.14, 46.64, 0.0, 25.73, 13.08, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:45:30.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:45:25
2025-12-04T01:45:30.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:45:30.757 [DEBUG] [Thread-127459] [transport.py] [_log()] starting thread (client mode): 0x9fd205e0
2025-12-04T01:45:30.757 [DEBUG] [Thread-127459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:45:30.777 [DEBUG] [Thread-127459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:45:30.777 [INFO] [Thread-127459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] client lang: <none>
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] server lang: <none>
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] kex follows: False
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:45:30.780 [DEBUG] [Thread-127459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:45:30.781 [DEBUG] [Thread-127459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:45:30.781 [DEBUG] [Thread-127459] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:45:30.781 [DEBUG] [Thread-127459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:45:30.781 [DEBUG] [Thread-127459] [transport.py] [_log()] Compression: none
2025-12-04T01:45:30.781 [DEBUG] [Thread-127459] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:45:30.794 [DEBUG] [Thread-127459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:45:30.795 [DEBUG] [Thread-127459] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:45:30.795 [DEBUG] [Thread-127459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:45:30.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:45:30.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:45:30.796 [DEBUG] [Thread-127459] [transport.py] [_log()] userauth is OK
2025-12-04T01:45:30.796 [DEBUG] [Thread-127459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:45:30.796 [DEBUG] [Thread-127459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:45:30.796 [DEBUG] [Thread-127459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:45:30.796 [DEBUG] [Thread-127459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:45:30.808 [INFO] [Thread-127459] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:45:30.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:45:31.655 [DEBUG] [Thread-127459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:45:31.656 [DEBUG] [Thread-127459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:45:31.656 [DEBUG] [Thread-127459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:45:31.697 [DEBUG] [Thread-127459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:45:31.697 [DEBUG] [Thread-127459] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:45:31.699 [DEBUG] [Thread-127459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:45:31.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:45:31.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:45:31.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:45:31.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:45:31.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:45:31.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:45:31.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:45:31.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:45:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:45:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.989628 -999.00  +13.10  22.04     51   +3.30 1 1 1 1 1     0    0 10.39 26.54 ZNESW 17.4 22.0 145.2 27.6 13.5 -25.0 13.4 -24.5 13.2 -23.0 13.5 -23.9
2025-12-04T01:45:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:45:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:45:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.989628
2025-12-04T01:45:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:45:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:45:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:45:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:45:31.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:45:31.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:45:25', tmtdew=11.14, humidity=46.64, cloud=0.0, wind=25.73, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:45:25', seeing=1.26, atlas_timestamp='2025-12-03T23:45:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:45:31.721 [DEBUG] [Thread-127459] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:45:31.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:45:31.819 [DEBUG] [Thread-127462] [transport.py] [_log()] starting thread (client mode): 0xa2779e10
2025-12-04T01:45:31.819 [DEBUG] [Thread-127462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:45:31.834 [DEBUG] [Thread-127462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:45:31.834 [INFO] [Thread-127462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:45:31.842 [DEBUG] [Thread-127462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] client lang: <none>
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] server lang: <none>
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] kex follows: False
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] Compression: none
2025-12-04T01:45:31.843 [DEBUG] [Thread-127462] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:45:31.905 [DEBUG] [Thread-127462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:45:31.905 [DEBUG] [Thread-127462] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:45:31.906 [DEBUG] [Thread-127462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:45:31.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:45:31.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:45:31.961 [DEBUG] [Thread-127462] [transport.py] [_log()] userauth is OK
2025-12-04T01:45:31.961 [DEBUG] [Thread-127462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:45:31.961 [DEBUG] [Thread-127462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:45:31.961 [DEBUG] [Thread-127462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:45:31.961 [DEBUG] [Thread-127462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:45:31.979 [INFO] [Thread-127462] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:45:31.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:45:31.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:45:32.778 [DEBUG] [Thread-127462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:45:32.778 [DEBUG] [Thread-127462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:45:32.825 [DEBUG] [Thread-127462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:45:32.826 [DEBUG] [Thread-127462] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:45:32.834 [DEBUG] [Thread-127462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:45:32.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:45:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:45:32.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:45:32.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:45:32.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:45:32.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:45:32.869 [DEBUG] [Thread-127462] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:45:35.282 [DEBUG] [Thread-127464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:41.470 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:43.626 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:43.627 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:45:50.331 [DEBUG] [Thread-127465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:01.881 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:02.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:46:02.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:46:02.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:46:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 45, 57), 11.25, 46.09, 0.0, 26.1, 13.05, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:46:03.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:45:57
2025-12-04T01:46:03.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:46:03.833 [DEBUG] [Thread-127466] [transport.py] [_log()] starting thread (client mode): 0xa270ab30
2025-12-04T01:46:03.833 [DEBUG] [Thread-127466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:46:03.853 [DEBUG] [Thread-127466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:46:03.853 [INFO] [Thread-127466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:03.856 [DEBUG] [Thread-127466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] client lang: <none>
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] server lang: <none>
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] kex follows: False
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] Compression: none
2025-12-04T01:46:03.857 [DEBUG] [Thread-127466] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:46:03.875 [DEBUG] [Thread-127466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:46:03.876 [DEBUG] [Thread-127466] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:46:03.876 [DEBUG] [Thread-127466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:46:03.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:46:03.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:46:03.878 [DEBUG] [Thread-127466] [transport.py] [_log()] userauth is OK
2025-12-04T01:46:03.878 [DEBUG] [Thread-127466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:46:03.879 [DEBUG] [Thread-127466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:46:03.879 [DEBUG] [Thread-127466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:46:03.879 [DEBUG] [Thread-127466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:46:03.902 [INFO] [Thread-127466] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:46:03.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:46:04.525 [DEBUG] [Thread-127466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:46:04.526 [DEBUG] [Thread-127466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:46:04.526 [DEBUG] [Thread-127466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:46:04.567 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:46:04.567 [DEBUG] [Thread-127466] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:46:04.570 [DEBUG] [Thread-127466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:46:04.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:46:04.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:46:04.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:46:04.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:46:04.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:46:04.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:46:04.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:46:04.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:46:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:46:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.989976 -999.00  +13.10  16.58     51   +3.20 1 1 1 1 1     0    0 10.43 28.02 ZNESW 16.4 16.6 156.0 27.8 13.5 -25.1 13.4 -24.6 13.2 -22.9 13.5 -23.8
2025-12-04T01:46:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:46:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:46:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.989976
2025-12-04T01:46:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:46:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:46:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:46:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:46:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:46:04.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:45:57', tmtdew=11.25, humidity=46.09, cloud=0.0, wind=26.1, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:45:57', seeing=1.16, atlas_timestamp='2025-12-03T23:45:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:46:04.597 [DEBUG] [Thread-127466] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:46:04.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:46:04.693 [DEBUG] [Thread-127469] [transport.py] [_log()] starting thread (client mode): 0x9fd210c0
2025-12-04T01:46:04.693 [DEBUG] [Thread-127469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:46:04.709 [DEBUG] [Thread-127469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:46:04.709 [INFO] [Thread-127469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:04.716 [DEBUG] [Thread-127469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] client lang: <none>
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] server lang: <none>
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] kex follows: False
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] Compression: none
2025-12-04T01:46:04.717 [DEBUG] [Thread-127469] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:46:04.774 [DEBUG] [Thread-127469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:46:04.775 [DEBUG] [Thread-127469] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:46:04.775 [DEBUG] [Thread-127469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:46:04.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:46:04.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:46:04.835 [DEBUG] [Thread-127469] [transport.py] [_log()] userauth is OK
2025-12-04T01:46:04.836 [DEBUG] [Thread-127469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:46:04.836 [DEBUG] [Thread-127469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:46:04.836 [DEBUG] [Thread-127469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:46:04.836 [DEBUG] [Thread-127469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:46:04.856 [INFO] [Thread-127469] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:46:04.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:46:04.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:46:05.357 [DEBUG] [Thread-127471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:05.681 [DEBUG] [Thread-127469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:46:05.681 [DEBUG] [Thread-127469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:46:05.729 [DEBUG] [Thread-127469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:46:05.729 [DEBUG] [Thread-127469] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:46:05.738 [DEBUG] [Thread-127469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:46:05.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:46:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:46:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:46:05.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:46:05.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:46:05.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:46:05.772 [DEBUG] [Thread-127469] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:46:20.401 [DEBUG] [Thread-127472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:22.370 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:28.954 [DEBUG] [Thread-127473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:35.428 [DEBUG] [Thread-127474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:35.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:46:35.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:46:35.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:46:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 46, 29), 11.2, 46.26, 0.0, 25.87, 13.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:46:36.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:46:29
2025-12-04T01:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:46:36.745 [DEBUG] [Thread-127475] [transport.py] [_log()] starting thread (client mode): 0xa2785c00
2025-12-04T01:46:36.745 [DEBUG] [Thread-127475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:46:36.765 [DEBUG] [Thread-127475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:46:36.765 [INFO] [Thread-127475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] client lang: <none>
2025-12-04T01:46:36.768 [DEBUG] [Thread-127475] [transport.py] [_log()] server lang: <none>
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] kex follows: False
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] Compression: none
2025-12-04T01:46:36.769 [DEBUG] [Thread-127475] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:46:36.788 [DEBUG] [Thread-127475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:46:36.788 [DEBUG] [Thread-127475] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:46:36.788 [DEBUG] [Thread-127475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:46:36.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:46:36.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:46:36.791 [DEBUG] [Thread-127475] [transport.py] [_log()] userauth is OK
2025-12-04T01:46:36.791 [DEBUG] [Thread-127475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:46:36.791 [DEBUG] [Thread-127475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:46:36.791 [DEBUG] [Thread-127475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:46:36.791 [DEBUG] [Thread-127475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:46:36.815 [INFO] [Thread-127475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:46:36.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:46:37.463 [DEBUG] [Thread-127475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:46:37.464 [DEBUG] [Thread-127475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:46:37.464 [DEBUG] [Thread-127475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:46:37.505 [DEBUG] [Thread-127475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:46:37.505 [DEBUG] [Thread-127475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:46:37.508 [DEBUG] [Thread-127475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:46:37.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:46:37.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:46:37.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:46:37.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:46:37.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:46:37.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:46:37.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.990323 -999.00  +13.10  15.11     51   +3.20 1 1 1 1 1     0    0 10.19 29.84 ZNESW 18.9 15.1 159.4 22.0 13.5 -25.1 13.3 -24.5 13.2 -23.2 13.5 -24.0
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:46:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.990323
2025-12-04T01:46:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:46:37.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:46:37.535 [DEBUG] [Thread-127475] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:46:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:46:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:46:37.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:46:37.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:46:29', tmtdew=11.2, humidity=46.26, cloud=0.0, wind=25.87, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:46:29', seeing=1.14, atlas_timestamp='2025-12-03T23:46:03.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:46:37.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:46:37.634 [DEBUG] [Thread-127478] [transport.py] [_log()] starting thread (client mode): 0xa2785ed0
2025-12-04T01:46:37.634 [DEBUG] [Thread-127478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:46:37.649 [DEBUG] [Thread-127478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:46:37.649 [INFO] [Thread-127478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:46:37.657 [DEBUG] [Thread-127478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] client lang: <none>
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] server lang: <none>
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] kex follows: False
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] Compression: none
2025-12-04T01:46:37.658 [DEBUG] [Thread-127478] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:46:37.713 [DEBUG] [Thread-127478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:46:37.713 [DEBUG] [Thread-127478] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:46:37.714 [DEBUG] [Thread-127478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:46:37.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:46:37.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:46:37.770 [DEBUG] [Thread-127478] [transport.py] [_log()] userauth is OK
2025-12-04T01:46:37.770 [DEBUG] [Thread-127478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:46:37.770 [DEBUG] [Thread-127478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:46:37.770 [DEBUG] [Thread-127478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:46:37.770 [DEBUG] [Thread-127478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:46:37.789 [INFO] [Thread-127478] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:46:37.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:46:37.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:46:38.592 [DEBUG] [Thread-127478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:46:38.593 [DEBUG] [Thread-127478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:46:38.642 [DEBUG] [Thread-127478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:46:38.642 [DEBUG] [Thread-127478] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:46:38.652 [DEBUG] [Thread-127478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:46:38.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:46:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:46:38.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:46:38.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:46:38.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:46:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:46:38.686 [DEBUG] [Thread-127478] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:46:42.833 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:43.827 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:43.828 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:46:50.461 [DEBUG] [Thread-127480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:03.265 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:05.504 [DEBUG] [Thread-127481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:47:08.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:47:08.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:47:09.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 47, 1), 11.22, 46.19, 0.0, 25.23, 13.06, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:47:09.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:47:01
2025-12-04T01:47:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:47:09.651 [DEBUG] [Thread-127482] [transport.py] [_log()] starting thread (client mode): 0xa2784d90
2025-12-04T01:47:09.651 [DEBUG] [Thread-127482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:47:09.664 [DEBUG] [Thread-127482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:47:09.664 [INFO] [Thread-127482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:47:09.667 [DEBUG] [Thread-127482] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:47:09.667 [DEBUG] [Thread-127482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:47:09.667 [DEBUG] [Thread-127482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:47:09.667 [DEBUG] [Thread-127482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] client lang: <none>
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] server lang: <none>
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] kex follows: False
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] Compression: none
2025-12-04T01:47:09.668 [DEBUG] [Thread-127482] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:47:09.686 [DEBUG] [Thread-127482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:47:09.686 [DEBUG] [Thread-127482] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:47:09.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:47:09.688 [DEBUG] [Thread-127482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:47:09.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:47:09.689 [DEBUG] [Thread-127482] [transport.py] [_log()] userauth is OK
2025-12-04T01:47:09.690 [DEBUG] [Thread-127482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:47:09.690 [DEBUG] [Thread-127482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:47:09.690 [DEBUG] [Thread-127482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:47:09.690 [DEBUG] [Thread-127482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:47:09.707 [INFO] [Thread-127482] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:47:09.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:47:10.307 [DEBUG] [Thread-127482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:47:10.307 [DEBUG] [Thread-127482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:47:10.307 [DEBUG] [Thread-127482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:47:10.348 [DEBUG] [Thread-127482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:47:10.348 [DEBUG] [Thread-127482] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:47:10.351 [DEBUG] [Thread-127482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:47:10.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:47:10.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:47:10.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:47:10.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:47:10.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:47:10.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:47:10.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.990670 -999.00  +12.90  18.64     51   +3.30 1 1 1 1 1     0    0 10.41 30.83 ZNESW 17.9 18.6 137.6 23.8 13.5 -25.2 13.3 -24.6 13.1 -23.2 13.4 -24.1
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:47:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.990670
2025-12-04T01:47:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:47:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:47:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:47:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:47:10.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:47:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:47:01', tmtdew=11.22, humidity=46.19, cloud=0.0, wind=25.23, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:47:01', seeing=1.14, atlas_timestamp='2025-12-03T23:46:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:47:10.375 [DEBUG] [Thread-127482] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:47:10.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:47:10.471 [DEBUG] [Thread-127485] [transport.py] [_log()] starting thread (client mode): 0xa27a3250
2025-12-04T01:47:10.471 [DEBUG] [Thread-127485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:47:10.487 [DEBUG] [Thread-127485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:47:10.487 [INFO] [Thread-127485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:10.498 [DEBUG] [Thread-127485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] client lang: <none>
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] server lang: <none>
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] kex follows: False
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:47:10.499 [DEBUG] [Thread-127485] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:47:10.500 [DEBUG] [Thread-127485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:47:10.500 [DEBUG] [Thread-127485] [transport.py] [_log()] Compression: none
2025-12-04T01:47:10.500 [DEBUG] [Thread-127485] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:47:10.557 [DEBUG] [Thread-127485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:47:10.558 [DEBUG] [Thread-127485] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:47:10.558 [DEBUG] [Thread-127485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:47:10.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:47:10.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:47:10.613 [DEBUG] [Thread-127485] [transport.py] [_log()] userauth is OK
2025-12-04T01:47:10.613 [DEBUG] [Thread-127485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:47:10.613 [DEBUG] [Thread-127485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:47:10.613 [DEBUG] [Thread-127485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:47:10.613 [DEBUG] [Thread-127485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:47:10.637 [INFO] [Thread-127485] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:47:10.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:47:10.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:47:11.453 [DEBUG] [Thread-127485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:47:11.453 [DEBUG] [Thread-127485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:47:11.502 [DEBUG] [Thread-127485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:47:11.502 [DEBUG] [Thread-127485] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:47:11.511 [DEBUG] [Thread-127485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:47:11.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:47:11.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:47:11.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:47:11.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:47:11.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:47:11.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:47:11.548 [DEBUG] [Thread-127485] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:47:20.531 [DEBUG] [Thread-127487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:23.707 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:29.013 [DEBUG] [Thread-127488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:35.573 [DEBUG] [Thread-127489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:47:41.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:47:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:47:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 47, 33), 11.25, 46.07, 0.0, 26.15, 13.01, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:47:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:47:33
2025-12-04T01:47:42.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:47:42.550 [DEBUG] [Thread-127490] [transport.py] [_log()] starting thread (client mode): 0xa27a2c20
2025-12-04T01:47:42.550 [DEBUG] [Thread-127490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:47:42.570 [DEBUG] [Thread-127490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:47:42.571 [INFO] [Thread-127490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] client lang: <none>
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] server lang: <none>
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] kex follows: False
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] Compression: none
2025-12-04T01:47:42.574 [DEBUG] [Thread-127490] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:47:42.591 [DEBUG] [Thread-127490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:47:42.591 [DEBUG] [Thread-127490] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:47:42.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:47:42.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] userauth is OK
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:47:42.592 [DEBUG] [Thread-127490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:47:42.621 [INFO] [Thread-127490] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:47:42.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:47:43.280 [DEBUG] [Thread-127490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:47:43.280 [DEBUG] [Thread-127490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:47:43.280 [DEBUG] [Thread-127490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:47:43.321 [DEBUG] [Thread-127490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:47:43.321 [DEBUG] [Thread-127490] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:47:43.323 [DEBUG] [Thread-127490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:47:43.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:47:43.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:47:43.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:47:43.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:47:43.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:47:43.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:47:43.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.991018 -999.00  +12.90  19.71     51   +3.20 1 1 1 1 1     0    0 10.46 30.70 ZNESW 19.9 19.7 140.8 22.1 13.5 -25.1 13.3 -24.6 13.1 -22.9 13.4 -24.0
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:47:43.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.991018
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:47:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:47:33', tmtdew=11.25, humidity=46.07, cloud=0.0, wind=26.15, temperature=13.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:47:33', seeing=1.33, atlas_timestamp='2025-12-03T23:47:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:47:43.342 [DEBUG] [Thread-127490] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:47:43.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:47:43.429 [DEBUG] [Thread-127493] [transport.py] [_log()] starting thread (client mode): 0xa270ba00
2025-12-04T01:47:43.429 [DEBUG] [Thread-127493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:47:43.445 [DEBUG] [Thread-127493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:47:43.445 [INFO] [Thread-127493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] client lang: <none>
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] server lang: <none>
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] kex follows: False
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] Compression: none
2025-12-04T01:47:43.453 [DEBUG] [Thread-127493] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:47:43.514 [DEBUG] [Thread-127493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:47:43.514 [DEBUG] [Thread-127493] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:47:43.514 [DEBUG] [Thread-127493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:47:43.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:47:43.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:47:43.572 [DEBUG] [Thread-127493] [transport.py] [_log()] userauth is OK
2025-12-04T01:47:43.572 [DEBUG] [Thread-127493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:47:43.572 [DEBUG] [Thread-127493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:47:43.572 [DEBUG] [Thread-127493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:47:43.572 [DEBUG] [Thread-127493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:47:43.586 [INFO] [Thread-127493] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:47:43.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:47:43.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:47:44.039 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:44.040 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:44.143 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:47:44.437 [DEBUG] [Thread-127493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:47:44.437 [DEBUG] [Thread-127493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:47:44.485 [DEBUG] [Thread-127493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:47:44.485 [DEBUG] [Thread-127493] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:47:44.493 [DEBUG] [Thread-127493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:47:44.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:47:44.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:47:44.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:47:44.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:47:44.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:47:44.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:47:44.533 [DEBUG] [Thread-127493] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:47:50.603 [DEBUG] [Thread-127495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:04.551 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:05.645 [DEBUG] [Thread-127496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:48:14.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:48:14.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 48, 5), 11.29, 45.96, 0.0, 24.63, 13.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:48:15.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:48:05
2025-12-04T01:48:15.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:48:15.534 [DEBUG] [Thread-127497] [transport.py] [_log()] starting thread (client mode): 0x9fd20a00
2025-12-04T01:48:15.534 [DEBUG] [Thread-127497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:48:15.554 [DEBUG] [Thread-127497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:48:15.554 [INFO] [Thread-127497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] client lang: <none>
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] server lang: <none>
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] kex follows: False
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] Compression: none
2025-12-04T01:48:15.558 [DEBUG] [Thread-127497] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:48:15.573 [DEBUG] [Thread-127497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:48:15.574 [DEBUG] [Thread-127497] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:48:15.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:48:15.575 [DEBUG] [Thread-127497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:48:15.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:48:15.577 [DEBUG] [Thread-127497] [transport.py] [_log()] userauth is OK
2025-12-04T01:48:15.577 [DEBUG] [Thread-127497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:48:15.577 [DEBUG] [Thread-127497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:48:15.577 [DEBUG] [Thread-127497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:48:15.577 [DEBUG] [Thread-127497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:48:15.602 [INFO] [Thread-127497] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:48:15.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:48:16.235 [DEBUG] [Thread-127497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:48:16.236 [DEBUG] [Thread-127497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:48:16.236 [DEBUG] [Thread-127497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:48:16.277 [DEBUG] [Thread-127497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:48:16.277 [DEBUG] [Thread-127497] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:48:16.280 [DEBUG] [Thread-127497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:48:16.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:48:16.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:48:16.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:48:16.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:48:16.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:48:16.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:48:16.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:48:16.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:48:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:48:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.991712 -999.00  +13.10  22.53     50   +3.00 1 1 1 1 1     0    0 10.51 33.69 ZNESW 27.8 22.5 145.3 26.9 13.4 -24.8 13.3 -24.5 13.1 -22.8 13.4 -23.6
2025-12-04T01:48:16.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:48:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:48:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.991712
2025-12-04T01:48:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:48:16.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:48:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:48:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:48:16.304 [DEBUG] [Thread-127497] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:48:16.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:48:16.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:48:05', tmtdew=11.29, humidity=45.96, cloud=0.0, wind=24.63, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:48:05', seeing=1.22, atlas_timestamp='2025-12-03T23:48:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:44:00')
2025-12-04T01:48:16.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:48:16.402 [DEBUG] [Thread-127500] [transport.py] [_log()] starting thread (client mode): 0xa2709570
2025-12-04T01:48:16.402 [DEBUG] [Thread-127500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:48:16.417 [DEBUG] [Thread-127500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:48:16.417 [INFO] [Thread-127500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:48:16.425 [DEBUG] [Thread-127500] [transport.py] [_log()] client lang: <none>
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] server lang: <none>
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] kex follows: False
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] Compression: none
2025-12-04T01:48:16.426 [DEBUG] [Thread-127500] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:48:16.483 [DEBUG] [Thread-127500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:48:16.483 [DEBUG] [Thread-127500] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:48:16.484 [DEBUG] [Thread-127500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:48:16.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:48:16.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:48:16.539 [DEBUG] [Thread-127500] [transport.py] [_log()] userauth is OK
2025-12-04T01:48:16.539 [DEBUG] [Thread-127500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:48:16.539 [DEBUG] [Thread-127500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:48:16.539 [DEBUG] [Thread-127500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:48:16.539 [DEBUG] [Thread-127500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:48:16.558 [INFO] [Thread-127500] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:48:16.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:48:16.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:48:17.451 [DEBUG] [Thread-127500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:48:17.451 [DEBUG] [Thread-127500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:48:17.498 [DEBUG] [Thread-127500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:48:17.499 [DEBUG] [Thread-127500] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:48:17.507 [DEBUG] [Thread-127500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:48:17.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:48:17.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:48:17.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:48:17.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:48:17.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:48:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:48:17.539 [DEBUG] [Thread-127500] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:48:20.675 [DEBUG] [Thread-127502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:24.935 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:29.071 [DEBUG] [Thread-127503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:35.708 [DEBUG] [Thread-127504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:44.258 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:44.258 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:45.315 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:48:47.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:48:47.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:48:47.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:48:48.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 48, 37), 11.34, 46.16, 0.0, 22.76, 13.06, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:48:48.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:48:37
2025-12-04T01:48:48.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:48:48.521 [DEBUG] [Thread-127505] [transport.py] [_log()] starting thread (client mode): 0xa51d0340
2025-12-04T01:48:48.521 [DEBUG] [Thread-127505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:48:48.541 [DEBUG] [Thread-127505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:48:48.541 [INFO] [Thread-127505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] client lang: <none>
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] server lang: <none>
2025-12-04T01:48:48.544 [DEBUG] [Thread-127505] [transport.py] [_log()] kex follows: False
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] Compression: none
2025-12-04T01:48:48.545 [DEBUG] [Thread-127505] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:48:48.560 [DEBUG] [Thread-127505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:48:48.561 [DEBUG] [Thread-127505] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:48:48.561 [DEBUG] [Thread-127505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:48:48.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:48:48.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:48:48.563 [DEBUG] [Thread-127505] [transport.py] [_log()] userauth is OK
2025-12-04T01:48:48.563 [DEBUG] [Thread-127505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:48:48.563 [DEBUG] [Thread-127505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:48:48.563 [DEBUG] [Thread-127505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:48:48.563 [DEBUG] [Thread-127505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:48:48.587 [INFO] [Thread-127505] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:48:48.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:48:49.215 [DEBUG] [Thread-127505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:48:49.216 [DEBUG] [Thread-127505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:48:49.216 [DEBUG] [Thread-127505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:48:49.257 [DEBUG] [Thread-127505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:48:49.257 [DEBUG] [Thread-127505] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:48:49.260 [DEBUG] [Thread-127505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:48:49.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:48:49.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:48:49.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:48:49.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:48:49.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:48:49.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:48:49.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:48:49.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.992059 -999.00  +13.10  22.17     50   +3.10 1 1 1 1 1     0    0 10.79 36.94 ZNESW 18.4 22.2 144.8 28.3 13.5 -25.0 13.3 -24.5 13.1 -22.8 13.4 -23.7
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.992059
2025-12-04T01:48:49.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:48:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:48:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:48:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:48:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:48:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:48:37', tmtdew=11.34, humidity=46.16, cloud=0.0, wind=22.76, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:48:37', seeing=1.23, atlas_timestamp='2025-12-03T23:48:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:47:00')
2025-12-04T01:48:49.286 [DEBUG] [Thread-127505] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:48:49.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:48:49.383 [DEBUG] [Thread-127508] [transport.py] [_log()] starting thread (client mode): 0xa2747340
2025-12-04T01:48:49.383 [DEBUG] [Thread-127508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:48:49.400 [DEBUG] [Thread-127508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:48:49.400 [INFO] [Thread-127508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:48:49.408 [DEBUG] [Thread-127508] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:48:49.408 [DEBUG] [Thread-127508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:48:49.408 [DEBUG] [Thread-127508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:48:49.408 [DEBUG] [Thread-127508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:49.408 [DEBUG] [Thread-127508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] client lang: <none>
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] server lang: <none>
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] kex follows: False
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] Compression: none
2025-12-04T01:48:49.409 [DEBUG] [Thread-127508] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:48:49.469 [DEBUG] [Thread-127508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:48:49.469 [DEBUG] [Thread-127508] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:48:49.470 [DEBUG] [Thread-127508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:48:49.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:48:49.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:48:49.526 [DEBUG] [Thread-127508] [transport.py] [_log()] userauth is OK
2025-12-04T01:48:49.526 [DEBUG] [Thread-127508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:48:49.526 [DEBUG] [Thread-127508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:48:49.526 [DEBUG] [Thread-127508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:48:49.526 [DEBUG] [Thread-127508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:48:49.547 [INFO] [Thread-127508] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:48:49.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:48:49.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:48:50.403 [DEBUG] [Thread-127508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:48:50.403 [DEBUG] [Thread-127508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:48:50.451 [DEBUG] [Thread-127508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:48:50.451 [DEBUG] [Thread-127508] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:48:50.460 [DEBUG] [Thread-127508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:48:50.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:48:50.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:48:50.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:48:50.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:48:50.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:48:50.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:48:50.495 [DEBUG] [Thread-127508] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:48:50.739 [DEBUG] [Thread-127510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:05.694 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:05.781 [DEBUG] [Thread-127511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:20.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:49:20.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:49:20.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:49:20.811 [DEBUG] [Thread-127512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 49, 9), 11.36, 46.08, 0.0, 21.86, 13.06, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:49:21.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:49:09
2025-12-04T01:49:21.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:49:21.462 [DEBUG] [Thread-127513] [transport.py] [_log()] starting thread (client mode): 0x9fd23160
2025-12-04T01:49:21.462 [DEBUG] [Thread-127513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:49:21.481 [DEBUG] [Thread-127513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:49:21.481 [INFO] [Thread-127513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:49:21.484 [DEBUG] [Thread-127513] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:49:21.484 [DEBUG] [Thread-127513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] client lang: <none>
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] server lang: <none>
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] kex follows: False
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] Compression: none
2025-12-04T01:49:21.485 [DEBUG] [Thread-127513] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:49:21.500 [DEBUG] [Thread-127513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:49:21.500 [DEBUG] [Thread-127513] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:49:21.500 [DEBUG] [Thread-127513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:49:21.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:49:21.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:49:21.501 [DEBUG] [Thread-127513] [transport.py] [_log()] userauth is OK
2025-12-04T01:49:21.501 [DEBUG] [Thread-127513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:49:21.501 [DEBUG] [Thread-127513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:49:21.501 [DEBUG] [Thread-127513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:49:21.501 [DEBUG] [Thread-127513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:49:21.510 [INFO] [Thread-127513] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:49:21.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:49:22.114 [DEBUG] [Thread-127513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:49:22.115 [DEBUG] [Thread-127513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:49:22.115 [DEBUG] [Thread-127513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:49:22.156 [DEBUG] [Thread-127513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:49:22.156 [DEBUG] [Thread-127513] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:49:22.158 [DEBUG] [Thread-127513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:49:22.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:49:22.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:49:22.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:49:22.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:49:22.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:49:22.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:49:22.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:49:22.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:49:22.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:49:22.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.992407 -999.00  +13.00  20.89     51   +3.20 1 1 1 1 1     0    0 10.53 37.97 ZNESW 19.5 20.9 142.4 26.8 13.4 -25.1 13.3 -24.5 13.1 -23.0 13.4 -23.8
2025-12-04T01:49:22.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:49:22.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:49:22.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.992407
2025-12-04T01:49:22.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:49:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:49:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:49:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:49:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:49:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:49:09', tmtdew=11.36, humidity=46.08, cloud=0.0, wind=21.86, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:49:09', seeing=1.3, atlas_timestamp='2025-12-03T23:49:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:47:00')
2025-12-04T01:49:22.177 [DEBUG] [Thread-127513] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:49:22.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:49:22.281 [DEBUG] [Thread-127516] [transport.py] [_log()] starting thread (client mode): 0xa51ce8c0
2025-12-04T01:49:22.281 [DEBUG] [Thread-127516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:49:22.295 [DEBUG] [Thread-127516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:49:22.295 [INFO] [Thread-127516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:49:22.302 [DEBUG] [Thread-127516] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] client lang: <none>
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] server lang: <none>
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] kex follows: False
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] Compression: none
2025-12-04T01:49:22.303 [DEBUG] [Thread-127516] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:49:22.361 [DEBUG] [Thread-127516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:49:22.362 [DEBUG] [Thread-127516] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:49:22.362 [DEBUG] [Thread-127516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:49:22.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:49:22.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:49:22.417 [DEBUG] [Thread-127516] [transport.py] [_log()] userauth is OK
2025-12-04T01:49:22.417 [DEBUG] [Thread-127516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:49:22.418 [DEBUG] [Thread-127516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:49:22.418 [DEBUG] [Thread-127516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:49:22.418 [DEBUG] [Thread-127516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:49:22.437 [INFO] [Thread-127516] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:49:22.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:49:22.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:49:23.263 [DEBUG] [Thread-127516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:49:23.263 [DEBUG] [Thread-127516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:49:23.311 [DEBUG] [Thread-127516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:49:23.311 [DEBUG] [Thread-127516] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:49:23.320 [DEBUG] [Thread-127516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:49:23.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:49:23.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:49:23.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:49:23.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:49:23.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:49:23.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:49:23.355 [DEBUG] [Thread-127516] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:49:26.079 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:29.140 [DEBUG] [Thread-127518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:35.843 [DEBUG] [Thread-127519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:44.457 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:44.458 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:46.458 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:50.885 [DEBUG] [Thread-127520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:49:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:49:53.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:49:53.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:49:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 49, 41), 11.32, 46.36, 0.0, 24.61, 13.06, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:49:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:49:41
2025-12-04T01:49:54.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:49:54.332 [DEBUG] [Thread-127521] [transport.py] [_log()] starting thread (client mode): 0xa519b040
2025-12-04T01:49:54.332 [DEBUG] [Thread-127521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:49:54.347 [DEBUG] [Thread-127521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:49:54.347 [INFO] [Thread-127521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] client lang: <none>
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] server lang: <none>
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] kex follows: False
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] Compression: none
2025-12-04T01:49:54.351 [DEBUG] [Thread-127521] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:49:54.368 [DEBUG] [Thread-127521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:49:54.369 [DEBUG] [Thread-127521] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:49:54.369 [DEBUG] [Thread-127521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:49:54.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:49:54.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:49:54.371 [DEBUG] [Thread-127521] [transport.py] [_log()] userauth is OK
2025-12-04T01:49:54.371 [DEBUG] [Thread-127521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:49:54.372 [DEBUG] [Thread-127521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:49:54.372 [DEBUG] [Thread-127521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:49:54.372 [DEBUG] [Thread-127521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:49:54.389 [INFO] [Thread-127521] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:49:54.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:49:54.989 [DEBUG] [Thread-127521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:49:54.989 [DEBUG] [Thread-127521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:49:54.990 [DEBUG] [Thread-127521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:49:55.030 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:49:55.030 [DEBUG] [Thread-127521] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:49:55.033 [DEBUG] [Thread-127521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:49:55.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:49:55.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:49:55.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:49:55.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:49:55.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:49:55.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:49:55.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:49:55.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.992754 -999.00  +13.00  23.98     51   +3.10 1 1 1 1 1     0    0 10.44 39.08 ZNESW 22.3 24.0 145.0 26.4 13.4 -25.1 13.3 -24.5 13.1 -23.1 13.4 -23.8
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.992754
2025-12-04T01:49:55.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:49:55.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:49:55.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:49:55.056 [DEBUG] [Thread-127521] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:49:55.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:49:55.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:49:55.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:49:41', tmtdew=11.32, humidity=46.36, cloud=0.0, wind=24.61, temperature=13.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:49:42', seeing=1.38, atlas_timestamp='2025-12-03T23:49:33.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:47:00')
2025-12-04T01:49:55.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:49:55.152 [DEBUG] [Thread-127524] [transport.py] [_log()] starting thread (client mode): 0xa5199330
2025-12-04T01:49:55.152 [DEBUG] [Thread-127524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:49:55.167 [DEBUG] [Thread-127524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:49:55.167 [INFO] [Thread-127524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] client lang: <none>
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] server lang: <none>
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] kex follows: False
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] Compression: none
2025-12-04T01:49:55.175 [DEBUG] [Thread-127524] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:49:55.230 [DEBUG] [Thread-127524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:49:55.230 [DEBUG] [Thread-127524] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:49:55.230 [DEBUG] [Thread-127524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:49:55.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:49:55.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:49:55.288 [DEBUG] [Thread-127524] [transport.py] [_log()] userauth is OK
2025-12-04T01:49:55.288 [DEBUG] [Thread-127524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:49:55.288 [DEBUG] [Thread-127524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:49:55.288 [DEBUG] [Thread-127524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:49:55.288 [DEBUG] [Thread-127524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:49:55.306 [INFO] [Thread-127524] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:49:55.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:49:55.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:49:56.123 [DEBUG] [Thread-127524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:49:56.123 [DEBUG] [Thread-127524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:49:56.171 [DEBUG] [Thread-127524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:49:56.171 [DEBUG] [Thread-127524] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:49:56.180 [DEBUG] [Thread-127524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:49:56.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:49:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:49:56.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:49:56.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:49:56.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:49:56.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:49:56.215 [DEBUG] [Thread-127524] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:50:05.918 [DEBUG] [Thread-127526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:06.837 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:20.958 [DEBUG] [Thread-127527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:50:26.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:50:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:50:26.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 50, 14), 11.35, 46.24, 0.0, 24.83, 13.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:50:26.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:50:14
2025-12-04T01:50:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:50:27.170 [DEBUG] [Thread-127528] [transport.py] [_log()] starting thread (client mode): 0xa2785e70
2025-12-04T01:50:27.170 [DEBUG] [Thread-127528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:50:27.182 [DEBUG] [Thread-127528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:50:27.182 [INFO] [Thread-127528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] client lang: <none>
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] server lang: <none>
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] kex follows: False
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] Compression: none
2025-12-04T01:50:27.183 [DEBUG] [Thread-127528] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:50:27.191 [DEBUG] [Thread-127528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:50:27.191 [DEBUG] [Thread-127528] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:50:27.191 [DEBUG] [Thread-127528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:50:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:50:27.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:50:27.192 [DEBUG] [Thread-127528] [transport.py] [_log()] userauth is OK
2025-12-04T01:50:27.192 [DEBUG] [Thread-127528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:50:27.192 [DEBUG] [Thread-127528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:50:27.192 [DEBUG] [Thread-127528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:50:27.193 [DEBUG] [Thread-127528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:50:27.205 [INFO] [Thread-127528] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:50:27.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:50:27.220 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:27.830 [DEBUG] [Thread-127528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:50:27.831 [DEBUG] [Thread-127528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:50:27.831 [DEBUG] [Thread-127528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:50:27.872 [DEBUG] [Thread-127528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:50:27.872 [DEBUG] [Thread-127528] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:50:27.875 [DEBUG] [Thread-127528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:50:27.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:50:27.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:50:27.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:50:27.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:50:27.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:50:27.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:50:27.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:50:27.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:50:27.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:50:27.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.992754 -999.00  +13.00  23.98     51   +3.10 1 1 1 1 1     0    0 10.44 39.08 ZNESW 22.3 24.0 145.0 26.4 13.4 -25.1 13.3 -24.5 13.1 -23.1 13.4 -23.8
2025-12-04T01:50:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:50:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:50:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.992754
2025-12-04T01:50:27.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:50:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:50:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:50:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:50:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:50:27.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:50:14', tmtdew=11.35, humidity=46.24, cloud=0.0, wind=24.83, temperature=13.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:50:14', seeing=1.38, atlas_timestamp='2025-12-03T23:49:33.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:47:00')
2025-12-04T01:50:27.902 [DEBUG] [Thread-127528] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:50:27.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:50:28.002 [DEBUG] [Thread-127531] [transport.py] [_log()] starting thread (client mode): 0xa2709240
2025-12-04T01:50:28.002 [DEBUG] [Thread-127531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:50:28.016 [DEBUG] [Thread-127531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:50:28.016 [INFO] [Thread-127531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:50:28.024 [DEBUG] [Thread-127531] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:50:28.024 [DEBUG] [Thread-127531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:50:28.024 [DEBUG] [Thread-127531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:50:28.024 [DEBUG] [Thread-127531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:50:28.024 [DEBUG] [Thread-127531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] client lang: <none>
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] server lang: <none>
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] kex follows: False
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] Compression: none
2025-12-04T01:50:28.025 [DEBUG] [Thread-127531] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:50:28.082 [DEBUG] [Thread-127531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:50:28.083 [DEBUG] [Thread-127531] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:50:28.092 [DEBUG] [Thread-127531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:50:28.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:50:28.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:50:28.139 [DEBUG] [Thread-127531] [transport.py] [_log()] userauth is OK
2025-12-04T01:50:28.139 [DEBUG] [Thread-127531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:50:28.139 [DEBUG] [Thread-127531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:50:28.140 [DEBUG] [Thread-127531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:50:28.140 [DEBUG] [Thread-127531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:50:28.158 [INFO] [Thread-127531] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:50:28.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:50:28.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:50:29.020 [DEBUG] [Thread-127531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:50:29.020 [DEBUG] [Thread-127531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:50:29.068 [DEBUG] [Thread-127531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:50:29.068 [DEBUG] [Thread-127531] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:50:29.076 [DEBUG] [Thread-127531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:50:29.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:50:29.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:50:29.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:50:29.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:50:29.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:50:29.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:50:29.111 [DEBUG] [Thread-127531] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:50:29.203 [DEBUG] [Thread-127533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:35.985 [DEBUG] [Thread-127534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:44.655 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:44.656 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:47.691 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:51.029 [DEBUG] [Thread-127535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:50:59.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:50:59.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:50:59.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:50:59.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 50, 46), 11.34, 45.94, 0.0, 24.12, 12.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:50:59.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:50:46
2025-12-04T01:50:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:51:00.127 [DEBUG] [Thread-127536] [transport.py] [_log()] starting thread (client mode): 0xa2745900
2025-12-04T01:51:00.127 [DEBUG] [Thread-127536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:51:00.147 [DEBUG] [Thread-127536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:51:00.147 [INFO] [Thread-127536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] client lang: <none>
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] server lang: <none>
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] kex follows: False
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] Compression: none
2025-12-04T01:51:00.150 [DEBUG] [Thread-127536] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:51:00.167 [DEBUG] [Thread-127536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:51:00.167 [DEBUG] [Thread-127536] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:51:00.167 [DEBUG] [Thread-127536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:51:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:51:00.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:51:00.168 [DEBUG] [Thread-127536] [transport.py] [_log()] userauth is OK
2025-12-04T01:51:00.168 [DEBUG] [Thread-127536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:51:00.168 [DEBUG] [Thread-127536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:51:00.168 [DEBUG] [Thread-127536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:51:00.168 [DEBUG] [Thread-127536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:51:00.183 [INFO] [Thread-127536] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:51:00.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:51:00.813 [DEBUG] [Thread-127536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:51:00.814 [DEBUG] [Thread-127536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:51:00.814 [DEBUG] [Thread-127536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:51:00.855 [DEBUG] [Thread-127536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:51:00.855 [DEBUG] [Thread-127536] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:51:00.859 [DEBUG] [Thread-127536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:51:00.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:51:00.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:51:00.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:51:00.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:51:00.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:51:00.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:51:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:51:00.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:51:00.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:51:00.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.993101 -999.00  +13.00  17.80     50   +3.00 1 1 1 1 1     0    0 10.62 40.55 ZNESW 18.0 17.8 132.2 21.6 13.4 -25.0 13.3 -24.5 13.1 -23.0 13.4 -23.7
2025-12-04T01:51:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:51:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:51:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.993101
2025-12-04T01:51:00.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:51:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:51:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:51:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:51:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:51:00.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:50:46', tmtdew=11.34, humidity=45.94, cloud=0.0, wind=24.12, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:50:46', seeing=1.39, atlas_timestamp='2025-12-03T23:50:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03474999999999895, -0.036749999999999616, -0.07650000000000112, -0.04299999999999926, 0.01925000000000132, -0.08800000000000097, -0.05474999999999852, -0.008000000000000895, -0.031000000000000583, -0.03575000000000017, -0.04800000000000004, 0.0259999999999998, -0.03575000000000195, -0.1330000000000009, -0.09600000000000009, -0.045750000000001734, -0.1070000000000011, -0.06700000000000017, -0.013750000000001705, 0.04499999999999815, 0.02224999999999966, 0.005250000000000199, -0.04925000000000068, -0.00849999999999973, 0.04349999999999987, -0.045249999999999346, -0.0024999999999995026, 0.04899999999999949, -0.12099999999999866, -0.26399999999999935, -0.004999999999999005, 0.029249999999999332], zp_timestamp='2025-12-03T23:47:00')
2025-12-04T01:51:00.884 [DEBUG] [Thread-127536] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:51:00.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:51:00.978 [DEBUG] [Thread-127539] [transport.py] [_log()] starting thread (client mode): 0xa519aa70
2025-12-04T01:51:00.978 [DEBUG] [Thread-127539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:51:00.993 [DEBUG] [Thread-127539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:51:00.993 [INFO] [Thread-127539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:51:01.001 [DEBUG] [Thread-127539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] client lang: <none>
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] server lang: <none>
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] kex follows: False
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] Compression: none
2025-12-04T01:51:01.002 [DEBUG] [Thread-127539] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:51:01.058 [DEBUG] [Thread-127539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:51:01.058 [DEBUG] [Thread-127539] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:51:01.059 [DEBUG] [Thread-127539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:51:01.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:51:01.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:51:01.114 [DEBUG] [Thread-127539] [transport.py] [_log()] userauth is OK
2025-12-04T01:51:01.114 [DEBUG] [Thread-127539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:51:01.114 [DEBUG] [Thread-127539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:51:01.114 [DEBUG] [Thread-127539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:51:01.115 [DEBUG] [Thread-127539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:51:01.133 [INFO] [Thread-127539] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:51:01.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:51:01.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:51:01.985 [DEBUG] [Thread-127539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:51:01.985 [DEBUG] [Thread-127539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:51:02.034 [DEBUG] [Thread-127539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:51:02.034 [DEBUG] [Thread-127539] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:51:02.043 [DEBUG] [Thread-127539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:51:02.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:51:02.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:51:02.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:51:02.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:51:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:51:02.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:51:02.077 [DEBUG] [Thread-127539] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:51:06.056 [DEBUG] [Thread-127541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:08.183 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:21.104 [DEBUG] [Thread-127542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:28.683 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:29.274 [DEBUG] [Thread-127543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:32.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:51:32.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:51:32.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:51:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 51, 18), 11.36, 45.89, 0.0, 24.49, 12.98, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:51:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:51:18
2025-12-04T01:51:32.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:51:33.044 [DEBUG] [Thread-127544] [transport.py] [_log()] starting thread (client mode): 0xa51cc100
2025-12-04T01:51:33.044 [DEBUG] [Thread-127544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:51:33.056 [DEBUG] [Thread-127544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:51:33.056 [INFO] [Thread-127544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] client lang: <none>
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] server lang: <none>
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] kex follows: False
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:51:33.057 [DEBUG] [Thread-127544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:51:33.058 [DEBUG] [Thread-127544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:51:33.058 [DEBUG] [Thread-127544] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:51:33.058 [DEBUG] [Thread-127544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:51:33.058 [DEBUG] [Thread-127544] [transport.py] [_log()] Compression: none
2025-12-04T01:51:33.058 [DEBUG] [Thread-127544] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:51:33.065 [DEBUG] [Thread-127544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:51:33.065 [DEBUG] [Thread-127544] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:51:33.066 [DEBUG] [Thread-127544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:51:33.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:51:33.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:51:33.067 [DEBUG] [Thread-127544] [transport.py] [_log()] userauth is OK
2025-12-04T01:51:33.067 [DEBUG] [Thread-127544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:51:33.067 [DEBUG] [Thread-127544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:51:33.067 [DEBUG] [Thread-127544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:51:33.067 [DEBUG] [Thread-127544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:51:33.080 [INFO] [Thread-127544] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:51:33.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:51:33.713 [DEBUG] [Thread-127544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:51:33.713 [DEBUG] [Thread-127544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:51:33.713 [DEBUG] [Thread-127544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:51:33.754 [DEBUG] [Thread-127544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:51:33.754 [DEBUG] [Thread-127544] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:51:33.756 [DEBUG] [Thread-127544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:51:33.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:51:33.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:51:33.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:51:33.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:51:33.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:51:33.775 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:51:33.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.993448 -999.00  +13.00  27.14     49   +2.80 1 1 1 1 1     0    0 10.74 40.28 ZNESW 25.5 27.1 141.4 35.2 13.4 -24.9 13.3 -24.5 13.1 -22.8 13.4 -23.8
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.993448
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:51:33.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:51:18', tmtdew=11.36, humidity=45.89, cloud=0.0, wind=24.49, temperature=12.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:51:18', seeing=1.42, atlas_timestamp='2025-12-03T23:50:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:51:33.776 [DEBUG] [Thread-127544] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:51:33.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:51:33.862 [DEBUG] [Thread-127547] [transport.py] [_log()] starting thread (client mode): 0xa519b2b0
2025-12-04T01:51:33.862 [DEBUG] [Thread-127547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:51:33.875 [DEBUG] [Thread-127547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:51:33.875 [INFO] [Thread-127547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] client lang: <none>
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] server lang: <none>
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] kex follows: False
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] Compression: none
2025-12-04T01:51:33.883 [DEBUG] [Thread-127547] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:51:33.940 [DEBUG] [Thread-127547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:51:33.940 [DEBUG] [Thread-127547] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:51:33.940 [DEBUG] [Thread-127547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:51:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:51:33.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:51:33.998 [DEBUG] [Thread-127547] [transport.py] [_log()] userauth is OK
2025-12-04T01:51:33.998 [DEBUG] [Thread-127547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:51:33.998 [DEBUG] [Thread-127547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:51:33.998 [DEBUG] [Thread-127547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:51:33.998 [DEBUG] [Thread-127547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:51:34.015 [INFO] [Thread-127547] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:51:34.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:51:34.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:51:34.814 [DEBUG] [Thread-127547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:51:34.814 [DEBUG] [Thread-127547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:51:34.862 [DEBUG] [Thread-127547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:51:34.862 [DEBUG] [Thread-127547] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:51:34.870 [DEBUG] [Thread-127547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:51:34.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:51:34.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:51:34.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:51:34.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:51:34.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:51:34.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:51:34.902 [DEBUG] [Thread-127547] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:51:36.131 [DEBUG] [Thread-127549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:44.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:44.854 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:49.210 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:51:51.179 [DEBUG] [Thread-127550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:52:04.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:52:04.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:52:05.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 51, 50), 11.41, 45.89, 0.0, 24.23, 12.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:52:05.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:51:50
2025-12-04T01:52:05.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:52:05.881 [DEBUG] [Thread-127551] [transport.py] [_log()] starting thread (client mode): 0xa51cc490
2025-12-04T01:52:05.881 [DEBUG] [Thread-127551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:52:05.902 [DEBUG] [Thread-127551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:52:05.902 [INFO] [Thread-127551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:52:05.905 [DEBUG] [Thread-127551] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:52:05.905 [DEBUG] [Thread-127551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:52:05.905 [DEBUG] [Thread-127551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:52:05.905 [DEBUG] [Thread-127551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:05.905 [DEBUG] [Thread-127551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] client lang: <none>
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] server lang: <none>
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] kex follows: False
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] Compression: none
2025-12-04T01:52:05.906 [DEBUG] [Thread-127551] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:52:05.926 [DEBUG] [Thread-127551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:52:05.927 [DEBUG] [Thread-127551] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:52:05.927 [DEBUG] [Thread-127551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:52:05.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:52:05.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:52:05.929 [DEBUG] [Thread-127551] [transport.py] [_log()] userauth is OK
2025-12-04T01:52:05.929 [DEBUG] [Thread-127551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:52:05.929 [DEBUG] [Thread-127551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:52:05.929 [DEBUG] [Thread-127551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:52:05.930 [DEBUG] [Thread-127551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:52:05.952 [INFO] [Thread-127551] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:52:05.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:52:06.205 [DEBUG] [Thread-127553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:06.607 [DEBUG] [Thread-127551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:52:06.607 [DEBUG] [Thread-127551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:52:06.608 [DEBUG] [Thread-127551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:52:06.649 [DEBUG] [Thread-127551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:52:06.649 [DEBUG] [Thread-127551] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:52:06.652 [DEBUG] [Thread-127551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:52:06.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:52:06.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:52:06.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:52:06.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:52:06.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:52:06.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:52:06.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.994143 -999.00  +13.10  22.35     50   +3.00 1 1 1 1 1     0    0 10.94 42.41 ZNESW 17.1 22.4 141.0 25.9 13.4 -25.0 13.3 -24.4 13.1 -23.1 13.4 -23.7
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:52:06.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.994143
2025-12-04T01:52:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:52:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:52:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:52:06.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:52:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:52:06.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:51:50', tmtdew=11.41, humidity=45.89, cloud=0.0, wind=24.23, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:51:50', seeing=1.42, atlas_timestamp='2025-12-03T23:51:33.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:52:06.678 [DEBUG] [Thread-127551] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:52:06.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:52:06.774 [DEBUG] [Thread-127555] [transport.py] [_log()] starting thread (client mode): 0xa51d33a0
2025-12-04T01:52:06.774 [DEBUG] [Thread-127555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:52:06.789 [DEBUG] [Thread-127555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:52:06.789 [INFO] [Thread-127555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:52:06.796 [DEBUG] [Thread-127555] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:52:06.796 [DEBUG] [Thread-127555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] client lang: <none>
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] server lang: <none>
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] kex follows: False
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] Compression: none
2025-12-04T01:52:06.797 [DEBUG] [Thread-127555] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:52:06.852 [DEBUG] [Thread-127555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:52:06.853 [DEBUG] [Thread-127555] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:52:06.853 [DEBUG] [Thread-127555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:52:06.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:52:06.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:52:06.909 [DEBUG] [Thread-127555] [transport.py] [_log()] userauth is OK
2025-12-04T01:52:06.909 [DEBUG] [Thread-127555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:52:06.909 [DEBUG] [Thread-127555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:52:06.909 [DEBUG] [Thread-127555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:52:06.909 [DEBUG] [Thread-127555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:52:06.928 [INFO] [Thread-127555] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:52:06.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:52:06.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:52:07.799 [DEBUG] [Thread-127555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:52:07.799 [DEBUG] [Thread-127555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:52:07.847 [DEBUG] [Thread-127555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:52:07.847 [DEBUG] [Thread-127555] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:52:07.856 [DEBUG] [Thread-127555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:52:07.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:52:07.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:52:07.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:52:07.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:52:07.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:52:07.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:52:07.891 [DEBUG] [Thread-127555] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:52:09.703 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:21.232 [DEBUG] [Thread-127557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:29.344 [DEBUG] [Thread-127558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:30.199 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:36.274 [DEBUG] [Thread-127559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:37.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:52:37.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:52:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:52:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 52, 22), 11.45, 45.76, 0.0, 23.89, 12.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:52:38.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:52:22
2025-12-04T01:52:38.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:52:38.866 [DEBUG] [Thread-127560] [transport.py] [_log()] starting thread (client mode): 0xa272b850
2025-12-04T01:52:38.867 [DEBUG] [Thread-127560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:52:38.887 [DEBUG] [Thread-127560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:52:38.887 [INFO] [Thread-127560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:52:38.890 [DEBUG] [Thread-127560] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:52:38.890 [DEBUG] [Thread-127560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] client lang: <none>
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] server lang: <none>
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] kex follows: False
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:52:38.891 [DEBUG] [Thread-127560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:52:38.892 [DEBUG] [Thread-127560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:52:38.892 [DEBUG] [Thread-127560] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:52:38.892 [DEBUG] [Thread-127560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:52:38.892 [DEBUG] [Thread-127560] [transport.py] [_log()] Compression: none
2025-12-04T01:52:38.892 [DEBUG] [Thread-127560] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:52:38.902 [DEBUG] [Thread-127560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:52:38.902 [DEBUG] [Thread-127560] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:52:38.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:52:38.904 [DEBUG] [Thread-127560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:52:38.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:52:38.905 [DEBUG] [Thread-127560] [transport.py] [_log()] userauth is OK
2025-12-04T01:52:38.906 [DEBUG] [Thread-127560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:52:38.906 [DEBUG] [Thread-127560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:52:38.906 [DEBUG] [Thread-127560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:52:38.906 [DEBUG] [Thread-127560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:52:38.931 [INFO] [Thread-127560] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:52:38.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:52:39.667 [DEBUG] [Thread-127560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:52:39.667 [DEBUG] [Thread-127560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:52:39.667 [DEBUG] [Thread-127560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:52:39.708 [DEBUG] [Thread-127560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:52:39.708 [DEBUG] [Thread-127560] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:52:39.711 [DEBUG] [Thread-127560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:52:39.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:52:39.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:52:39.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:52:39.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:52:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:52:39.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:52:39.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:52:39.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:52:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:52:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.994490 -999.00  +13.00  18.72     50   +2.90 1 1 1 1 1     0    0 10.91 41.48 ZNESW 19.0 18.7 144.6 25.1 13.4 -25.0 13.3 -24.4 13.1 -22.8 13.4 -23.9
2025-12-04T01:52:39.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:52:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:52:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.994490
2025-12-04T01:52:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:52:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:52:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:52:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:52:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:52:39.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:52:22', tmtdew=11.45, humidity=45.76, cloud=0.0, wind=23.89, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:52:22', seeing=1.48, atlas_timestamp='2025-12-03T23:52:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:52:39.733 [DEBUG] [Thread-127560] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:52:39.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:52:39.832 [DEBUG] [Thread-127563] [transport.py] [_log()] starting thread (client mode): 0xa27a3bb0
2025-12-04T01:52:39.832 [DEBUG] [Thread-127563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:52:39.849 [DEBUG] [Thread-127563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:52:39.849 [INFO] [Thread-127563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] client lang: <none>
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] server lang: <none>
2025-12-04T01:52:39.857 [DEBUG] [Thread-127563] [transport.py] [_log()] kex follows: False
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] Compression: none
2025-12-04T01:52:39.858 [DEBUG] [Thread-127563] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:52:39.918 [DEBUG] [Thread-127563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:52:39.919 [DEBUG] [Thread-127563] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:52:39.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:52:39.919 [DEBUG] [Thread-127563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:52:39.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:52:39.976 [DEBUG] [Thread-127563] [transport.py] [_log()] userauth is OK
2025-12-04T01:52:39.976 [DEBUG] [Thread-127563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:52:39.976 [DEBUG] [Thread-127563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:52:39.977 [DEBUG] [Thread-127563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:52:39.977 [DEBUG] [Thread-127563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:52:39.996 [INFO] [Thread-127563] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:52:39.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:52:39.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:52:40.878 [DEBUG] [Thread-127563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:52:40.878 [DEBUG] [Thread-127563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:52:40.926 [DEBUG] [Thread-127563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:52:40.926 [DEBUG] [Thread-127563] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:52:40.935 [DEBUG] [Thread-127563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:52:40.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:52:40.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:52:40.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:52:40.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:52:40.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:52:40.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:52:40.970 [DEBUG] [Thread-127563] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:52:45.052 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:45.053 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:50.726 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:52:51.306 [DEBUG] [Thread-127565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:06.347 [DEBUG] [Thread-127566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:10.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:53:10.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:53:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:53:11.184 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:11.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 52, 54), 11.5, 45.76, 0.0, 24.24, 13.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:53:11.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:52:54
2025-12-04T01:53:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:53:11.917 [DEBUG] [Thread-127567] [transport.py] [_log()] starting thread (client mode): 0xa517f8b0
2025-12-04T01:53:11.918 [DEBUG] [Thread-127567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:53:11.938 [DEBUG] [Thread-127567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:53:11.938 [INFO] [Thread-127567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] client lang: <none>
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] server lang: <none>
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] kex follows: False
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:53:11.941 [DEBUG] [Thread-127567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:53:11.942 [DEBUG] [Thread-127567] [transport.py] [_log()] Compression: none
2025-12-04T01:53:11.942 [DEBUG] [Thread-127567] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:53:11.957 [DEBUG] [Thread-127567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:53:11.957 [DEBUG] [Thread-127567] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:53:11.957 [DEBUG] [Thread-127567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:53:11.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:53:11.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:53:11.958 [DEBUG] [Thread-127567] [transport.py] [_log()] userauth is OK
2025-12-04T01:53:11.958 [DEBUG] [Thread-127567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:53:11.958 [DEBUG] [Thread-127567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:53:11.958 [DEBUG] [Thread-127567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:53:11.958 [DEBUG] [Thread-127567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:53:11.968 [INFO] [Thread-127567] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:53:11.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:53:12.615 [DEBUG] [Thread-127567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:53:12.615 [DEBUG] [Thread-127567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:53:12.616 [DEBUG] [Thread-127567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:53:12.656 [DEBUG] [Thread-127567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:53:12.656 [DEBUG] [Thread-127567] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:53:12.659 [DEBUG] [Thread-127567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:53:12.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:53:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:53:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:53:12.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:53:12.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:53:12.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:53:12.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:53:12.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:53:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:53:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.994837 -999.00  +13.00  20.87     50   +2.90 1 1 1 1 1     0    0 11.00 42.62 ZNESW 13.5 20.9 140.4 24.9 13.4 -25.0 13.2 -24.5 13.0 -23.0 13.4 -23.7
2025-12-04T01:53:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:53:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:53:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.994837
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:53:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:52:54', tmtdew=11.5, humidity=45.76, cloud=0.0, wind=24.24, temperature=13.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:52:54', seeing=1.27, atlas_timestamp='2025-12-03T23:52:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:53:12.682 [DEBUG] [Thread-127567] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:53:12.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:53:12.782 [DEBUG] [Thread-127570] [transport.py] [_log()] starting thread (client mode): 0xa517dd20
2025-12-04T01:53:12.782 [DEBUG] [Thread-127570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:53:12.799 [DEBUG] [Thread-127570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:53:12.800 [INFO] [Thread-127570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:12.807 [DEBUG] [Thread-127570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] client lang: <none>
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] server lang: <none>
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] kex follows: False
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] Compression: none
2025-12-04T01:53:12.808 [DEBUG] [Thread-127570] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:53:12.867 [DEBUG] [Thread-127570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:53:12.867 [DEBUG] [Thread-127570] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:53:12.868 [DEBUG] [Thread-127570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:53:12.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:53:12.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:53:12.924 [DEBUG] [Thread-127570] [transport.py] [_log()] userauth is OK
2025-12-04T01:53:12.924 [DEBUG] [Thread-127570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:53:12.924 [DEBUG] [Thread-127570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:53:12.924 [DEBUG] [Thread-127570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:53:12.924 [DEBUG] [Thread-127570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:53:12.943 [INFO] [Thread-127570] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:53:12.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:53:12.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:53:13.738 [DEBUG] [Thread-127570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:53:13.738 [DEBUG] [Thread-127570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:53:13.786 [DEBUG] [Thread-127570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:53:13.786 [DEBUG] [Thread-127570] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:53:13.795 [DEBUG] [Thread-127570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:53:13.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:53:13.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:53:13.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:53:13.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:53:13.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:53:13.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:53:13.829 [DEBUG] [Thread-127570] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:53:21.379 [DEBUG] [Thread-127572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:29.398 [DEBUG] [Thread-127573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:31.602 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:36.424 [DEBUG] [Thread-127574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:53:43.835 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:53:43.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:53:44.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 53, 26), 11.53, 45.66, 0.0, 25.32, 12.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:53:44.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:53:26
2025-12-04T01:53:44.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:53:44.775 [DEBUG] [Thread-127575] [transport.py] [_log()] starting thread (client mode): 0xa517c5b0
2025-12-04T01:53:44.775 [DEBUG] [Thread-127575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:53:44.794 [DEBUG] [Thread-127575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:53:44.794 [INFO] [Thread-127575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:53:44.797 [DEBUG] [Thread-127575] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:53:44.797 [DEBUG] [Thread-127575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] client lang: <none>
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] server lang: <none>
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] kex follows: False
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] Compression: none
2025-12-04T01:53:44.798 [DEBUG] [Thread-127575] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:53:44.812 [DEBUG] [Thread-127575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:53:44.812 [DEBUG] [Thread-127575] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:53:44.813 [DEBUG] [Thread-127575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:53:44.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:53:44.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:53:44.814 [DEBUG] [Thread-127575] [transport.py] [_log()] userauth is OK
2025-12-04T01:53:44.815 [DEBUG] [Thread-127575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:53:44.815 [DEBUG] [Thread-127575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:53:44.815 [DEBUG] [Thread-127575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:53:44.815 [DEBUG] [Thread-127575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:53:44.833 [INFO] [Thread-127575] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:53:44.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:53:45.250 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:45.251 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:45.630 [DEBUG] [Thread-127575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:53:45.631 [DEBUG] [Thread-127575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:53:45.631 [DEBUG] [Thread-127575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:53:45.672 [DEBUG] [Thread-127575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:53:45.672 [DEBUG] [Thread-127575] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:53:45.675 [DEBUG] [Thread-127575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:53:45.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:53:45.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:53:45.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:53:45.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:53:45.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:53:45.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:53:45.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:53:45.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.995184 -999.00  +12.90  13.97     50   +2.90 1 1 1 1 1     0    0 10.83 41.65 ZNESW 17.8 14.0 131.0 24.3 13.4 -25.0 13.3 -24.6 13.1 -23.0 13.4 -23.8
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.995184
2025-12-04T01:53:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:53:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:53:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:53:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:53:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:53:45.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:53:26', tmtdew=11.53, humidity=45.66, cloud=0.0, wind=25.32, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:53:26', seeing=1.27, atlas_timestamp='2025-12-03T23:53:03.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:53:45.698 [DEBUG] [Thread-127575] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:53:45.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:53:45.796 [DEBUG] [Thread-127578] [transport.py] [_log()] starting thread (client mode): 0xa517feb0
2025-12-04T01:53:45.796 [DEBUG] [Thread-127578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:53:45.810 [DEBUG] [Thread-127578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:53:45.810 [INFO] [Thread-127578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:53:45.818 [DEBUG] [Thread-127578] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:53:45.818 [DEBUG] [Thread-127578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:53:45.818 [DEBUG] [Thread-127578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:53:45.818 [DEBUG] [Thread-127578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:45.818 [DEBUG] [Thread-127578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] client lang: <none>
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] server lang: <none>
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] kex follows: False
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] Compression: none
2025-12-04T01:53:45.819 [DEBUG] [Thread-127578] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:53:45.874 [DEBUG] [Thread-127578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:53:45.875 [DEBUG] [Thread-127578] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:53:45.875 [DEBUG] [Thread-127578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:53:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:53:45.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:53:45.931 [DEBUG] [Thread-127578] [transport.py] [_log()] userauth is OK
2025-12-04T01:53:45.931 [DEBUG] [Thread-127578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:53:45.931 [DEBUG] [Thread-127578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:53:45.931 [DEBUG] [Thread-127578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:53:45.931 [DEBUG] [Thread-127578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:53:45.950 [INFO] [Thread-127578] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:53:45.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:53:45.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:53:46.833 [DEBUG] [Thread-127578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:53:46.834 [DEBUG] [Thread-127578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:53:46.882 [DEBUG] [Thread-127578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:53:46.882 [DEBUG] [Thread-127578] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:53:46.891 [DEBUG] [Thread-127578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:53:46.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:53:46.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:53:46.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:53:46.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:53:46.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:53:46.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:53:46.925 [DEBUG] [Thread-127578] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:53:51.455 [DEBUG] [Thread-127580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:53:52.020 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:06.498 [DEBUG] [Thread-127581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:12.392 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:54:16.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:54:16.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:54:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 53, 58), 11.37, 45.68, 0.0, 23.45, 12.88, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:54:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:53:58
2025-12-04T01:54:17.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:54:17.890 [DEBUG] [Thread-127582] [transport.py] [_log()] starting thread (client mode): 0xa517f4c0
2025-12-04T01:54:17.890 [DEBUG] [Thread-127582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:54:17.912 [DEBUG] [Thread-127582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:54:17.912 [INFO] [Thread-127582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:17.915 [DEBUG] [Thread-127582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] client lang: <none>
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] server lang: <none>
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] kex follows: False
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] Compression: none
2025-12-04T01:54:17.916 [DEBUG] [Thread-127582] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:54:17.933 [DEBUG] [Thread-127582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:54:17.934 [DEBUG] [Thread-127582] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:54:17.934 [DEBUG] [Thread-127582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:54:17.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:54:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:54:17.936 [DEBUG] [Thread-127582] [transport.py] [_log()] userauth is OK
2025-12-04T01:54:17.936 [DEBUG] [Thread-127582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:54:17.937 [DEBUG] [Thread-127582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:54:17.937 [DEBUG] [Thread-127582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:54:17.937 [DEBUG] [Thread-127582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:54:17.972 [INFO] [Thread-127582] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:54:17.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:54:18.593 [DEBUG] [Thread-127582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:54:18.593 [DEBUG] [Thread-127582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:54:18.593 [DEBUG] [Thread-127582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:54:18.635 [DEBUG] [Thread-127582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:54:18.635 [DEBUG] [Thread-127582] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:54:18.638 [DEBUG] [Thread-127582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:54:18.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:54:18.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:54:18.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:54:18.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:54:18.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:54:18.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:54:18.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:54:18.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:54:18.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:54:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.995531 -999.00  +13.00  18.04     50   +2.90 1 1 1 1 1     0    0 10.75 41.91 ZNESW 15.5 18.0 139.2 25.3 13.4 -25.0 13.2 -24.6 13.1 -22.9 13.4 -23.8
2025-12-04T01:54:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:54:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:54:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.995531
2025-12-04T01:54:18.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:54:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:54:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:54:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:54:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:54:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:53:58', tmtdew=11.37, humidity=45.68, cloud=0.0, wind=23.45, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:53:58', seeing=1.27, atlas_timestamp='2025-12-03T23:53:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:50:00')
2025-12-04T01:54:18.663 [DEBUG] [Thread-127582] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:54:18.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:54:18.761 [DEBUG] [Thread-127585] [transport.py] [_log()] starting thread (client mode): 0xa27472b0
2025-12-04T01:54:18.761 [DEBUG] [Thread-127585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:54:18.776 [DEBUG] [Thread-127585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:54:18.776 [INFO] [Thread-127585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:18.784 [DEBUG] [Thread-127585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] client lang: <none>
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] server lang: <none>
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] kex follows: False
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] Compression: none
2025-12-04T01:54:18.785 [DEBUG] [Thread-127585] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:54:18.841 [DEBUG] [Thread-127585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:54:18.842 [DEBUG] [Thread-127585] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:54:18.842 [DEBUG] [Thread-127585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:54:18.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:54:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:54:18.898 [DEBUG] [Thread-127585] [transport.py] [_log()] userauth is OK
2025-12-04T01:54:18.898 [DEBUG] [Thread-127585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:54:18.898 [DEBUG] [Thread-127585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:54:18.898 [DEBUG] [Thread-127585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:54:18.899 [DEBUG] [Thread-127585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:54:18.917 [INFO] [Thread-127585] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:54:18.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:54:18.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:54:19.761 [DEBUG] [Thread-127585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:54:19.762 [DEBUG] [Thread-127585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:54:19.814 [DEBUG] [Thread-127585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:54:19.814 [DEBUG] [Thread-127585] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:54:19.823 [DEBUG] [Thread-127585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:54:19.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:54:19.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:54:19.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:54:19.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:54:19.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:54:19.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:54:19.858 [DEBUG] [Thread-127585] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:54:21.522 [DEBUG] [Thread-127587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:29.464 [DEBUG] [Thread-127588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:32.822 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:36.565 [DEBUG] [Thread-127589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:45.447 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:45.449 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:49.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:54:49.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:54:49.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:54:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 54, 30), 11.4, 45.59, 0.0, 22.62, 12.88, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:54:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:54:30
2025-12-04T01:54:50.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:54:50.833 [DEBUG] [Thread-127590] [transport.py] [_log()] starting thread (client mode): 0x9fd210c0
2025-12-04T01:54:50.833 [DEBUG] [Thread-127590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:54:50.853 [DEBUG] [Thread-127590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:54:50.853 [INFO] [Thread-127590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] client lang: <none>
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] server lang: <none>
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] kex follows: False
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] Compression: none
2025-12-04T01:54:50.857 [DEBUG] [Thread-127590] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:54:50.876 [DEBUG] [Thread-127590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:54:50.876 [DEBUG] [Thread-127590] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:54:50.877 [DEBUG] [Thread-127590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:54:50.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:54:50.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:54:50.877 [DEBUG] [Thread-127590] [transport.py] [_log()] userauth is OK
2025-12-04T01:54:50.878 [DEBUG] [Thread-127590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:54:50.878 [DEBUG] [Thread-127590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:54:50.878 [DEBUG] [Thread-127590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:54:50.878 [DEBUG] [Thread-127590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:54:50.893 [INFO] [Thread-127590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:54:50.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:54:51.593 [DEBUG] [Thread-127592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:54:51.691 [DEBUG] [Thread-127590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:54:51.691 [DEBUG] [Thread-127590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:54:51.691 [DEBUG] [Thread-127590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:54:51.731 [DEBUG] [Thread-127590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:54:51.731 [DEBUG] [Thread-127590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:54:51.734 [DEBUG] [Thread-127590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:54:51.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:54:51.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:54:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:54:51.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:54:51.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:54:51.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:54:51.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:54:51.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:54:51.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.995879 -999.00  +13.00  23.30     50   +2.90 1 1 1 1 1     0    0 10.92 44.26 ZNESW 24.3 23.3 145.9 26.4 13.3 -25.0 13.3 -24.6 13.1 -22.8 13.3 -23.7
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.995879
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:54:51.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:54:30', tmtdew=11.4, humidity=45.59, cloud=0.0, wind=22.62, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:54:30', seeing=1.28, atlas_timestamp='2025-12-03T23:54:03.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:53:00')
2025-12-04T01:54:51.751 [DEBUG] [Thread-127590] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:54:51.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:54:51.840 [DEBUG] [Thread-127594] [transport.py] [_log()] starting thread (client mode): 0xa27a3bb0
2025-12-04T01:54:51.840 [DEBUG] [Thread-127594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:54:51.857 [DEBUG] [Thread-127594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:54:51.857 [INFO] [Thread-127594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:54:51.864 [DEBUG] [Thread-127594] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:54:51.865 [DEBUG] [Thread-127594] [transport.py] [_log()] client lang: <none>
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] server lang: <none>
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] kex follows: False
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:54:51.866 [DEBUG] [Thread-127594] [transport.py] [_log()] Compression: none
2025-12-04T01:54:51.867 [DEBUG] [Thread-127594] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:54:51.927 [DEBUG] [Thread-127594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:54:51.928 [DEBUG] [Thread-127594] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:54:51.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:54:51.929 [DEBUG] [Thread-127594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:54:51.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:54:51.982 [DEBUG] [Thread-127594] [transport.py] [_log()] userauth is OK
2025-12-04T01:54:51.982 [DEBUG] [Thread-127594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:54:51.982 [DEBUG] [Thread-127594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:54:51.982 [DEBUG] [Thread-127594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:54:51.982 [DEBUG] [Thread-127594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:54:52.005 [INFO] [Thread-127594] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:54:52.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:54:52.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:54:52.824 [DEBUG] [Thread-127594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:54:52.824 [DEBUG] [Thread-127594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:54:52.872 [DEBUG] [Thread-127594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:54:52.872 [DEBUG] [Thread-127594] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:54:52.881 [DEBUG] [Thread-127594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:54:52.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:54:52.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:54:52.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:54:52.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:54:52.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:54:52.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:54:52.915 [DEBUG] [Thread-127594] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:54:53.231 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:06.619 [DEBUG] [Thread-127596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:13.612 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:21.671 [DEBUG] [Thread-127597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:55:22.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:55:22.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:55:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 55, 2), 11.35, 45.76, 0.0, 21.99, 12.86, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:55:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:55:02
2025-12-04T01:55:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:55:23.885 [DEBUG] [Thread-127598] [transport.py] [_log()] starting thread (client mode): 0xa51992a0
2025-12-04T01:55:23.885 [DEBUG] [Thread-127598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:55:23.902 [DEBUG] [Thread-127598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:55:23.902 [INFO] [Thread-127598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:55:23.905 [DEBUG] [Thread-127598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:55:23.905 [DEBUG] [Thread-127598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:55:23.905 [DEBUG] [Thread-127598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:55:23.905 [DEBUG] [Thread-127598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:23.905 [DEBUG] [Thread-127598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] client lang: <none>
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] server lang: <none>
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] kex follows: False
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] Compression: none
2025-12-04T01:55:23.906 [DEBUG] [Thread-127598] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:55:23.921 [DEBUG] [Thread-127598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:55:23.922 [DEBUG] [Thread-127598] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:55:23.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:55:23.923 [DEBUG] [Thread-127598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:55:23.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:55:23.924 [DEBUG] [Thread-127598] [transport.py] [_log()] userauth is OK
2025-12-04T01:55:23.924 [DEBUG] [Thread-127598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:55:23.924 [DEBUG] [Thread-127598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:55:23.924 [DEBUG] [Thread-127598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:55:23.925 [DEBUG] [Thread-127598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:55:23.960 [INFO] [Thread-127598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:55:23.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:55:24.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:55:24.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:55:24.551 [DEBUG] [Thread-127598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:55:24.592 [DEBUG] [Thread-127598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:55:24.592 [DEBUG] [Thread-127598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:55:24.594 [DEBUG] [Thread-127598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:55:24.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:55:24.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:55:24.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:55:24.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:55:24.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:55:24.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:55:24.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.996226 -999.00  +13.00  18.99     50   +2.90 1 1 1 1 1     0    0 10.84 46.13 ZNESW 22.3 19.0 143.5 27.8 13.4 -24.8 13.2 -24.4 13.1 -22.9 13.3 -23.6
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.996226
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:55:24.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:55:02', tmtdew=11.35, humidity=45.76, cloud=0.0, wind=21.99, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:55:02', seeing=1.34, atlas_timestamp='2025-12-03T23:54:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:53:00')
2025-12-04T01:55:24.611 [DEBUG] [Thread-127598] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:55:24.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:55:24.698 [DEBUG] [Thread-127601] [transport.py] [_log()] starting thread (client mode): 0xa51cf0a0
2025-12-04T01:55:24.698 [DEBUG] [Thread-127601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:55:24.713 [DEBUG] [Thread-127601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:55:24.713 [INFO] [Thread-127601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:24.720 [DEBUG] [Thread-127601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] client lang: <none>
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] server lang: <none>
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] kex follows: False
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] Compression: none
2025-12-04T01:55:24.721 [DEBUG] [Thread-127601] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:55:24.776 [DEBUG] [Thread-127601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:55:24.776 [DEBUG] [Thread-127601] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:55:24.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:55:24.776 [DEBUG] [Thread-127601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:55:24.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:55:24.836 [DEBUG] [Thread-127601] [transport.py] [_log()] userauth is OK
2025-12-04T01:55:24.836 [DEBUG] [Thread-127601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:55:24.836 [DEBUG] [Thread-127601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:55:24.836 [DEBUG] [Thread-127601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:55:24.836 [DEBUG] [Thread-127601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:55:24.850 [INFO] [Thread-127601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:55:24.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:55:24.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:55:25.652 [DEBUG] [Thread-127601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:55:25.652 [DEBUG] [Thread-127601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:55:25.700 [DEBUG] [Thread-127601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:55:25.700 [DEBUG] [Thread-127601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:55:25.708 [DEBUG] [Thread-127601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:55:25.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:55:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:55:25.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:55:25.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:55:25.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:55:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:55:25.740 [DEBUG] [Thread-127601] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:55:29.519 [DEBUG] [Thread-127603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:34.031 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:36.699 [DEBUG] [Thread-127604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:45.645 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:45.646 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:51.744 [DEBUG] [Thread-127605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:54.460 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:55:55.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:55:55.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:55:55.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:55:56.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 55, 34), 11.53, 45.29, 0.0, 24.74, 12.91, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:55:56.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:55:34
2025-12-04T01:55:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:55:56.699 [DEBUG] [Thread-127606] [transport.py] [_log()] starting thread (client mode): 0xa519bcd0
2025-12-04T01:55:56.699 [DEBUG] [Thread-127606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:55:56.719 [DEBUG] [Thread-127606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:55:56.719 [INFO] [Thread-127606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:55:56.722 [DEBUG] [Thread-127606] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] client lang: <none>
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] server lang: <none>
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] kex follows: False
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:55:56.723 [DEBUG] [Thread-127606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:55:56.724 [DEBUG] [Thread-127606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:55:56.724 [DEBUG] [Thread-127606] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:55:56.724 [DEBUG] [Thread-127606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:55:56.724 [DEBUG] [Thread-127606] [transport.py] [_log()] Compression: none
2025-12-04T01:55:56.724 [DEBUG] [Thread-127606] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:55:56.734 [DEBUG] [Thread-127606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:55:56.735 [DEBUG] [Thread-127606] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:55:56.735 [DEBUG] [Thread-127606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:55:56.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:55:56.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:55:56.737 [DEBUG] [Thread-127606] [transport.py] [_log()] userauth is OK
2025-12-04T01:55:56.737 [DEBUG] [Thread-127606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:55:56.737 [DEBUG] [Thread-127606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:55:56.737 [DEBUG] [Thread-127606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:55:56.737 [DEBUG] [Thread-127606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:55:56.762 [INFO] [Thread-127606] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:55:56.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:55:57.408 [DEBUG] [Thread-127606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:55:57.408 [DEBUG] [Thread-127606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:55:57.409 [DEBUG] [Thread-127606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:55:57.450 [DEBUG] [Thread-127606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:55:57.450 [DEBUG] [Thread-127606] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:55:57.453 [DEBUG] [Thread-127606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:55:57.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:55:57.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:55:57.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:55:57.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:55:57.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:55:57.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:55:57.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:55:57.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:55:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:55:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.996920 -999.00  +13.00  18.41     50   +2.90 1 1 1 1 1     0    0 11.12 49.86 ZNESW 14.1 18.4 161.0 25.4 13.4 -25.0 13.3 -24.5 13.1 -22.9 13.3 -23.8
2025-12-04T01:55:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:55:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:55:57.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.996920
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:55:57.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:55:34', tmtdew=11.53, humidity=45.29, cloud=0.0, wind=24.74, temperature=12.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:55:34', seeing=1.3, atlas_timestamp='2025-12-03T23:55:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:53:00')
2025-12-04T01:55:57.478 [DEBUG] [Thread-127606] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:55:57.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:55:57.574 [DEBUG] [Thread-127609] [transport.py] [_log()] starting thread (client mode): 0xa2747340
2025-12-04T01:55:57.575 [DEBUG] [Thread-127609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:55:57.589 [DEBUG] [Thread-127609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:55:57.589 [INFO] [Thread-127609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:55:57.596 [DEBUG] [Thread-127609] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:55:57.597 [DEBUG] [Thread-127609] [transport.py] [_log()] client lang: <none>
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] server lang: <none>
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] kex follows: False
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:55:57.598 [DEBUG] [Thread-127609] [transport.py] [_log()] Compression: none
2025-12-04T01:55:57.599 [DEBUG] [Thread-127609] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:55:57.653 [DEBUG] [Thread-127609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:55:57.653 [DEBUG] [Thread-127609] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:55:57.654 [DEBUG] [Thread-127609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:55:57.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:55:57.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:55:57.709 [DEBUG] [Thread-127609] [transport.py] [_log()] userauth is OK
2025-12-04T01:55:57.709 [DEBUG] [Thread-127609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:55:57.709 [DEBUG] [Thread-127609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:55:57.709 [DEBUG] [Thread-127609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:55:57.710 [DEBUG] [Thread-127609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:55:57.731 [INFO] [Thread-127609] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:55:57.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:55:57.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:55:58.558 [DEBUG] [Thread-127609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:55:58.558 [DEBUG] [Thread-127609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:55:58.606 [DEBUG] [Thread-127609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:55:58.606 [DEBUG] [Thread-127609] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:55:58.615 [DEBUG] [Thread-127609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:55:58.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:55:58.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:55:58.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:55:58.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:55:58.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:55:58.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:55:58.650 [DEBUG] [Thread-127609] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:56:06.769 [DEBUG] [Thread-127611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:14.868 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:21.804 [DEBUG] [Thread-127612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:56:28.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:56:28.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:56:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 56, 6), 11.53, 45.31, 0.0, 25.06, 12.95, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:56:29.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:56:06
2025-12-04T01:56:29.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:56:29.577 [DEBUG] [Thread-127613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:29.634 [DEBUG] [Thread-127614] [transport.py] [_log()] starting thread (client mode): 0x9fd216f0
2025-12-04T01:56:29.634 [DEBUG] [Thread-127614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:56:29.654 [DEBUG] [Thread-127614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:56:29.654 [INFO] [Thread-127614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:56:29.658 [DEBUG] [Thread-127614] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:56:29.658 [DEBUG] [Thread-127614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:56:29.658 [DEBUG] [Thread-127614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:56:29.658 [DEBUG] [Thread-127614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:56:29.658 [DEBUG] [Thread-127614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] client lang: <none>
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] server lang: <none>
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] kex follows: False
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:56:29.659 [DEBUG] [Thread-127614] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:56:29.660 [DEBUG] [Thread-127614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:56:29.660 [DEBUG] [Thread-127614] [transport.py] [_log()] Compression: none
2025-12-04T01:56:29.660 [DEBUG] [Thread-127614] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:56:29.678 [DEBUG] [Thread-127614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:56:29.678 [DEBUG] [Thread-127614] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:56:29.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:56:29.679 [DEBUG] [Thread-127614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:56:29.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:56:29.681 [DEBUG] [Thread-127614] [transport.py] [_log()] userauth is OK
2025-12-04T01:56:29.681 [DEBUG] [Thread-127614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:56:29.681 [DEBUG] [Thread-127614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:56:29.681 [DEBUG] [Thread-127614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:56:29.681 [DEBUG] [Thread-127614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:56:29.717 [INFO] [Thread-127614] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:56:29.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:56:30.343 [DEBUG] [Thread-127614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:56:30.343 [DEBUG] [Thread-127614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:56:30.343 [DEBUG] [Thread-127614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:56:30.384 [DEBUG] [Thread-127614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:56:30.384 [DEBUG] [Thread-127614] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:56:30.387 [DEBUG] [Thread-127614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:56:30.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:56:30.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:56:30.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:56:30.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:56:30.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:56:30.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:56:30.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:56:30.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.997268 -999.00  +13.00  20.58     50   +2.80 1 1 1 1 1     0    0 11.34 54.75 ZNESW 17.9 20.6 140.8 25.3 13.4 -25.0 13.2 -24.6 13.1 -22.9 13.3 -23.7
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.997268
2025-12-04T01:56:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:56:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:56:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:56:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:56:30.412 [DEBUG] [Thread-127614] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:56:30.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:56:30.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:56:06', tmtdew=11.53, humidity=45.31, cloud=0.0, wind=25.06, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:56:06', seeing=1.5, atlas_timestamp='2025-12-03T23:56:03.955', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:53:00')
2025-12-04T01:56:30.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:56:30.512 [DEBUG] [Thread-127617] [transport.py] [_log()] starting thread (client mode): 0xa2745030
2025-12-04T01:56:30.512 [DEBUG] [Thread-127617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:56:30.526 [DEBUG] [Thread-127617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:56:30.527 [INFO] [Thread-127617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:56:30.534 [DEBUG] [Thread-127617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] client lang: <none>
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] server lang: <none>
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] kex follows: False
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] Compression: none
2025-12-04T01:56:30.535 [DEBUG] [Thread-127617] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:56:30.592 [DEBUG] [Thread-127617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:56:30.592 [DEBUG] [Thread-127617] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:56:30.593 [DEBUG] [Thread-127617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:56:30.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:56:30.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:56:30.648 [DEBUG] [Thread-127617] [transport.py] [_log()] userauth is OK
2025-12-04T01:56:30.648 [DEBUG] [Thread-127617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:56:30.649 [DEBUG] [Thread-127617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:56:30.649 [DEBUG] [Thread-127617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:56:30.649 [DEBUG] [Thread-127617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:56:30.671 [INFO] [Thread-127617] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:56:30.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:56:30.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:56:31.485 [DEBUG] [Thread-127617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:56:31.485 [DEBUG] [Thread-127617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:56:31.533 [DEBUG] [Thread-127617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:56:31.533 [DEBUG] [Thread-127617] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:56:31.546 [DEBUG] [Thread-127617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:56:31.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:56:31.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:56:31.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:56:31.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:56:31.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:56:31.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:56:31.586 [DEBUG] [Thread-127617] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:56:35.249 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:36.830 [DEBUG] [Thread-127619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:45.846 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:45.847 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:51.875 [DEBUG] [Thread-127620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:56:55.630 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:01.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:57:01.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:57:01.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:57:02.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 56, 38), 11.57, 45.19, 0.0, 24.86, 12.96, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:57:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:56:38
2025-12-04T01:57:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:57:02.573 [DEBUG] [Thread-127621] [transport.py] [_log()] starting thread (client mode): 0xa517cd90
2025-12-04T01:57:02.574 [DEBUG] [Thread-127621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:57:02.594 [DEBUG] [Thread-127621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:57:02.594 [INFO] [Thread-127621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:57:02.597 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] client lang: <none>
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] server lang: <none>
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] kex follows: False
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:57:02.598 [DEBUG] [Thread-127621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:57:02.599 [DEBUG] [Thread-127621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:57:02.599 [DEBUG] [Thread-127621] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:57:02.599 [DEBUG] [Thread-127621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:57:02.599 [DEBUG] [Thread-127621] [transport.py] [_log()] Compression: none
2025-12-04T01:57:02.599 [DEBUG] [Thread-127621] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:57:02.618 [DEBUG] [Thread-127621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:57:02.619 [DEBUG] [Thread-127621] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:57:02.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:57:02.619 [DEBUG] [Thread-127621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:57:02.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:57:02.621 [DEBUG] [Thread-127621] [transport.py] [_log()] userauth is OK
2025-12-04T01:57:02.621 [DEBUG] [Thread-127621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:57:02.621 [DEBUG] [Thread-127621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:57:02.621 [DEBUG] [Thread-127621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:57:02.621 [DEBUG] [Thread-127621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:57:02.656 [INFO] [Thread-127621] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:57:02.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:57:03.293 [DEBUG] [Thread-127621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:57:03.293 [DEBUG] [Thread-127621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:57:03.293 [DEBUG] [Thread-127621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:57:03.334 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:57:03.334 [DEBUG] [Thread-127621] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:57:03.337 [DEBUG] [Thread-127621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:57:03.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:57:03.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:57:03.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:57:03.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:57:03.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:57:03.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:57:03.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:57:03.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.997615 -999.00  +13.00  22.40     50   +2.80 1 1 1 1 1     0    0 11.34 55.10 ZNESW 22.0 22.4 145.2 27.4 13.3 -25.2 13.2 -24.6 13.0 -23.0 13.3 -23.8
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.997615
2025-12-04T01:57:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:57:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:57:03.360 [DEBUG] [Thread-127621] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:57:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:57:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:57:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:57:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:56:38', tmtdew=11.57, humidity=45.19, cloud=0.0, wind=24.86, temperature=12.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:56:38', seeing=1.67, atlas_timestamp='2025-12-03T23:56:33.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019750000000000156, 0.007750000000001478, -0.0007500000000000284, -0.04200000000000159, 0.004999999999999005, 0.09225000000000172, -0.054999999999999716, -0.06574999999999953, 0.023499999999998522, -0.03999999999999915, -0.00975000000000037, 0.012000000000000455, 0.057000000000000384, -0.06475000000000186, -0.10100000000000087, -0.11100000000000065, -0.020749999999999602, -0.0015000000000000568, -0.05600000000000094, 0.011749999999999261, 0.07549999999999812, 0.10374999999999801, 0.0027500000000006963, -0.011250000000000426, 0.010999999999999233, 0.05950000000000166, -0.020250000000000767, 0.03250000000000064, 0.09299999999999997, 0.08000000000000185, -0.254999999999999, 0.016000000000000014, 0.06774999999999842], zp_timestamp='2025-12-03T23:53:00')
2025-12-04T01:57:03.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:57:03.458 [DEBUG] [Thread-127624] [transport.py] [_log()] starting thread (client mode): 0xa2784ee0
2025-12-04T01:57:03.458 [DEBUG] [Thread-127624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:57:03.472 [DEBUG] [Thread-127624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:57:03.473 [INFO] [Thread-127624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:57:03.480 [DEBUG] [Thread-127624] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:57:03.480 [DEBUG] [Thread-127624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:57:03.480 [DEBUG] [Thread-127624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] client lang: <none>
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] server lang: <none>
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] kex follows: False
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:57:03.481 [DEBUG] [Thread-127624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:57:03.482 [DEBUG] [Thread-127624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:57:03.482 [DEBUG] [Thread-127624] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:57:03.482 [DEBUG] [Thread-127624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:57:03.482 [DEBUG] [Thread-127624] [transport.py] [_log()] Compression: none
2025-12-04T01:57:03.482 [DEBUG] [Thread-127624] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:57:03.539 [DEBUG] [Thread-127624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:57:03.540 [DEBUG] [Thread-127624] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:57:03.540 [DEBUG] [Thread-127624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:57:03.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:57:03.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:57:03.596 [DEBUG] [Thread-127624] [transport.py] [_log()] userauth is OK
2025-12-04T01:57:03.596 [DEBUG] [Thread-127624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:57:03.596 [DEBUG] [Thread-127624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:57:03.596 [DEBUG] [Thread-127624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:57:03.596 [DEBUG] [Thread-127624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:57:03.615 [INFO] [Thread-127624] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:57:03.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:57:03.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:57:04.434 [DEBUG] [Thread-127624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:57:04.434 [DEBUG] [Thread-127624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:57:04.482 [DEBUG] [Thread-127624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:57:04.482 [DEBUG] [Thread-127624] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:57:04.490 [DEBUG] [Thread-127624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:57:04.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:57:04.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:57:04.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:57:04.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:57:04.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:57:04.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:57:04.524 [DEBUG] [Thread-127624] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:57:06.904 [DEBUG] [Thread-127626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:16.014 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:21.954 [DEBUG] [Thread-127627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:29.635 [DEBUG] [Thread-127628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:34.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:57:34.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:57:34.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:57:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 57, 10), 11.59, 45.13, 0.0, 24.01, 12.93, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:57:35.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:57:10
2025-12-04T01:57:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:57:35.493 [DEBUG] [Thread-127629] [transport.py] [_log()] starting thread (client mode): 0xa519a6e0
2025-12-04T01:57:35.493 [DEBUG] [Thread-127629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:57:35.513 [DEBUG] [Thread-127629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:57:35.513 [INFO] [Thread-127629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] client lang: <none>
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] server lang: <none>
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] kex follows: False
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] Compression: none
2025-12-04T01:57:35.517 [DEBUG] [Thread-127629] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:57:35.533 [DEBUG] [Thread-127629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:57:35.534 [DEBUG] [Thread-127629] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:57:35.534 [DEBUG] [Thread-127629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:57:35.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:57:35.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:57:35.536 [DEBUG] [Thread-127629] [transport.py] [_log()] userauth is OK
2025-12-04T01:57:35.536 [DEBUG] [Thread-127629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:57:35.536 [DEBUG] [Thread-127629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:57:35.537 [DEBUG] [Thread-127629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:57:35.537 [DEBUG] [Thread-127629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:57:35.560 [INFO] [Thread-127629] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:57:35.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:57:36.213 [DEBUG] [Thread-127629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:57:36.213 [DEBUG] [Thread-127629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:57:36.213 [DEBUG] [Thread-127629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:57:36.254 [DEBUG] [Thread-127629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:57:36.254 [DEBUG] [Thread-127629] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:57:36.257 [DEBUG] [Thread-127629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:57:36.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:57:36.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:57:36.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:57:36.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:57:36.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:57:36.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:57:36.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.997962 -999.00  +13.00  21.00     50   +2.90 1 1 1 1 1     0    0 11.51 52.32 ZNESW 22.6 21.0 143.2 27.5 13.3 -25.0 13.2 -24.5 13.0 -22.8 13.3 -23.6
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:57:36.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.997962
2025-12-04T01:57:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:57:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:57:36.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:57:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:57:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:57:36.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:57:10', tmtdew=11.59, humidity=45.13, cloud=0.0, wind=24.01, temperature=12.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:57:10', seeing=1.67, atlas_timestamp='2025-12-03T23:57:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T01:57:36.281 [DEBUG] [Thread-127629] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:57:36.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:57:36.378 [DEBUG] [Thread-127632] [transport.py] [_log()] starting thread (client mode): 0xa2746800
2025-12-04T01:57:36.378 [DEBUG] [Thread-127632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:57:36.392 [DEBUG] [Thread-127632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:57:36.393 [INFO] [Thread-127632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:57:36.400 [DEBUG] [Thread-127632] [transport.py] [_log()] client lang: <none>
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] server lang: <none>
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] kex follows: False
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] Compression: none
2025-12-04T01:57:36.401 [DEBUG] [Thread-127632] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:57:36.441 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:36.459 [DEBUG] [Thread-127632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:57:36.459 [DEBUG] [Thread-127632] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:57:36.460 [DEBUG] [Thread-127632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:57:36.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:57:36.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:57:36.516 [DEBUG] [Thread-127632] [transport.py] [_log()] userauth is OK
2025-12-04T01:57:36.516 [DEBUG] [Thread-127632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:57:36.516 [DEBUG] [Thread-127632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:57:36.516 [DEBUG] [Thread-127632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:57:36.516 [DEBUG] [Thread-127632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:57:36.535 [INFO] [Thread-127632] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:57:36.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:57:36.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:57:36.981 [DEBUG] [Thread-127634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:37.333 [DEBUG] [Thread-127632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:57:37.333 [DEBUG] [Thread-127632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:57:37.381 [DEBUG] [Thread-127632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:57:37.381 [DEBUG] [Thread-127632] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:57:37.390 [DEBUG] [Thread-127632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:57:37.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:57:37.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:57:37.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:57:37.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:57:37.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:57:37.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:57:37.423 [DEBUG] [Thread-127632] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:57:46.046 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:46.047 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:52.039 [DEBUG] [Thread-127635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:57:56.816 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:07.067 [DEBUG] [Thread-127636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:07.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:58:07.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:58:07.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:58:08.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 57, 42), 11.54, 45.13, 0.0, 23.33, 12.95, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:58:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:57:42
2025-12-04T01:58:08.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:58:08.393 [DEBUG] [Thread-127637] [transport.py] [_log()] starting thread (client mode): 0xa51cf0a0
2025-12-04T01:58:08.393 [DEBUG] [Thread-127637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:58:08.414 [DEBUG] [Thread-127637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:58:08.414 [INFO] [Thread-127637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:58:08.417 [DEBUG] [Thread-127637] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] client lang: <none>
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] server lang: <none>
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] kex follows: False
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] Compression: none
2025-12-04T01:58:08.418 [DEBUG] [Thread-127637] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:58:08.435 [DEBUG] [Thread-127637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:58:08.435 [DEBUG] [Thread-127637] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:58:08.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:58:08.436 [DEBUG] [Thread-127637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:58:08.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:58:08.438 [DEBUG] [Thread-127637] [transport.py] [_log()] userauth is OK
2025-12-04T01:58:08.439 [DEBUG] [Thread-127637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:58:08.439 [DEBUG] [Thread-127637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:58:08.439 [DEBUG] [Thread-127637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:58:08.439 [DEBUG] [Thread-127637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:58:08.462 [INFO] [Thread-127637] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:58:08.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:58:09.088 [DEBUG] [Thread-127637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:58:09.088 [DEBUG] [Thread-127637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:58:09.089 [DEBUG] [Thread-127637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:58:09.129 [DEBUG] [Thread-127637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:58:09.129 [DEBUG] [Thread-127637] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:58:09.132 [DEBUG] [Thread-127637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:58:09.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:58:09.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:58:09.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:58:09.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:58:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:58:09.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:58:09.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.998309 -999.00  +13.00  14.59     50   +2.90 1 1 1 1 1     0    0 11.41 54.67 ZNESW 18.4 14.6 140.8 24.3 13.3 -25.0 13.2 -24.5 13.0 -22.9 13.3 -23.8
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:58:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.998309
2025-12-04T01:58:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:58:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:58:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:58:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:58:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:58:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:57:42', tmtdew=11.54, humidity=45.13, cloud=0.0, wind=23.33, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:57:43', seeing=1.39, atlas_timestamp='2025-12-03T23:57:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T01:58:09.156 [DEBUG] [Thread-127637] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:58:09.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:58:09.253 [DEBUG] [Thread-127640] [transport.py] [_log()] starting thread (client mode): 0xa5198d30
2025-12-04T01:58:09.253 [DEBUG] [Thread-127640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:58:09.267 [DEBUG] [Thread-127640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:58:09.267 [INFO] [Thread-127640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:09.275 [DEBUG] [Thread-127640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] client lang: <none>
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] server lang: <none>
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] kex follows: False
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] Compression: none
2025-12-04T01:58:09.276 [DEBUG] [Thread-127640] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:58:09.335 [DEBUG] [Thread-127640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:58:09.336 [DEBUG] [Thread-127640] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:58:09.336 [DEBUG] [Thread-127640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:58:09.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:58:09.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:58:09.395 [DEBUG] [Thread-127640] [transport.py] [_log()] userauth is OK
2025-12-04T01:58:09.395 [DEBUG] [Thread-127640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:58:09.395 [DEBUG] [Thread-127640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:58:09.396 [DEBUG] [Thread-127640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:58:09.396 [DEBUG] [Thread-127640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:58:09.415 [INFO] [Thread-127640] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:58:09.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:58:09.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:58:10.217 [DEBUG] [Thread-127640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:58:10.217 [DEBUG] [Thread-127640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:58:10.265 [DEBUG] [Thread-127640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:58:10.265 [DEBUG] [Thread-127640] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:58:10.274 [DEBUG] [Thread-127640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:58:10.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:58:10.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:58:10.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:58:10.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:58:10.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:58:10.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:58:10.308 [DEBUG] [Thread-127640] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:58:17.203 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:22.096 [DEBUG] [Thread-127642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:29.704 [DEBUG] [Thread-127643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:37.144 [DEBUG] [Thread-127644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:37.602 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:58:40.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:58:40.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:58:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 58, 15), 11.54, 45.11, 0.0, 23.06, 12.95, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:58:41.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:58:15
2025-12-04T01:58:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:58:41.331 [DEBUG] [Thread-127645] [transport.py] [_log()] starting thread (client mode): 0xa51cf190
2025-12-04T01:58:41.331 [DEBUG] [Thread-127645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:58:41.351 [DEBUG] [Thread-127645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:58:41.351 [INFO] [Thread-127645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:58:41.353 [DEBUG] [Thread-127645] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] client lang: <none>
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] server lang: <none>
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] kex follows: False
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] Compression: none
2025-12-04T01:58:41.354 [DEBUG] [Thread-127645] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:58:41.361 [DEBUG] [Thread-127645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:58:41.361 [DEBUG] [Thread-127645] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:58:41.361 [DEBUG] [Thread-127645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:58:41.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:58:41.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:58:41.362 [DEBUG] [Thread-127645] [transport.py] [_log()] userauth is OK
2025-12-04T01:58:41.362 [DEBUG] [Thread-127645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:58:41.362 [DEBUG] [Thread-127645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:58:41.362 [DEBUG] [Thread-127645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:58:41.362 [DEBUG] [Thread-127645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:58:41.372 [INFO] [Thread-127645] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:58:41.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:58:41.998 [DEBUG] [Thread-127645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:58:41.998 [DEBUG] [Thread-127645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:58:41.998 [DEBUG] [Thread-127645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:58:42.039 [DEBUG] [Thread-127645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:58:42.039 [DEBUG] [Thread-127645] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:58:42.041 [DEBUG] [Thread-127645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:58:42.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:58:42.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:58:42.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:58:42.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:58:42.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:58:42.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:58:42.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.998656 -999.00  +12.90  18.96     50   +2.90 1 1 1 1 1     0    0 11.64 57.13 ZNESW 15.8 19.0 145.8 27.2 13.4 -25.1 13.2 -24.6 13.0 -23.1 13.3 -23.9
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:58:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.998656
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:58:42.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:58:15', tmtdew=11.54, humidity=45.11, cloud=0.0, wind=23.06, temperature=12.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:58:15', seeing=1.5, atlas_timestamp='2025-12-03T23:58:03.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T01:58:42.062 [DEBUG] [Thread-127645] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:58:42.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:58:42.148 [DEBUG] [Thread-127648] [transport.py] [_log()] starting thread (client mode): 0xa2784310
2025-12-04T01:58:42.148 [DEBUG] [Thread-127648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:58:42.162 [DEBUG] [Thread-127648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:58:42.162 [INFO] [Thread-127648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] client lang: <none>
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] server lang: <none>
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] kex follows: False
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] Compression: none
2025-12-04T01:58:42.170 [DEBUG] [Thread-127648] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:58:42.225 [DEBUG] [Thread-127648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:58:42.225 [DEBUG] [Thread-127648] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:58:42.225 [DEBUG] [Thread-127648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:58:42.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:58:42.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:58:42.282 [DEBUG] [Thread-127648] [transport.py] [_log()] userauth is OK
2025-12-04T01:58:42.282 [DEBUG] [Thread-127648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:58:42.282 [DEBUG] [Thread-127648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:58:42.282 [DEBUG] [Thread-127648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:58:42.282 [DEBUG] [Thread-127648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:58:42.299 [INFO] [Thread-127648] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:58:42.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:58:42.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:58:43.116 [DEBUG] [Thread-127648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:58:43.116 [DEBUG] [Thread-127648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:58:43.163 [DEBUG] [Thread-127648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:58:43.163 [DEBUG] [Thread-127648] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:58:43.172 [DEBUG] [Thread-127648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:58:43.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:58:43.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:58:43.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:58:43.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:58:43.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:58:43.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:58:43.207 [DEBUG] [Thread-127648] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:58:46.249 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:46.250 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:52.178 [DEBUG] [Thread-127650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:58:58.062 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:07.221 [DEBUG] [Thread-127651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:13.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:59:13.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:59:13.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:59:13.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 58, 47), 11.46, 45.73, 0.0, 21.93, 12.88, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:59:13.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:58:47
2025-12-04T01:59:14.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:59:14.178 [DEBUG] [Thread-127652] [transport.py] [_log()] starting thread (client mode): 0xa2785900
2025-12-04T01:59:14.178 [DEBUG] [Thread-127652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:59:14.199 [DEBUG] [Thread-127652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:59:14.199 [INFO] [Thread-127652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] client lang: <none>
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] server lang: <none>
2025-12-04T01:59:14.202 [DEBUG] [Thread-127652] [transport.py] [_log()] kex follows: False
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] Compression: none
2025-12-04T01:59:14.203 [DEBUG] [Thread-127652] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:59:14.215 [DEBUG] [Thread-127652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:59:14.215 [DEBUG] [Thread-127652] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:59:14.216 [DEBUG] [Thread-127652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:59:14.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:59:14.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:59:14.217 [DEBUG] [Thread-127652] [transport.py] [_log()] userauth is OK
2025-12-04T01:59:14.218 [DEBUG] [Thread-127652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:59:14.218 [DEBUG] [Thread-127652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:59:14.218 [DEBUG] [Thread-127652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:59:14.218 [DEBUG] [Thread-127652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:59:14.236 [INFO] [Thread-127652] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:59:14.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:59:14.812 [DEBUG] [Thread-127652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:59:14.812 [DEBUG] [Thread-127652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:59:14.813 [DEBUG] [Thread-127652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:59:14.854 [DEBUG] [Thread-127652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:59:14.854 [DEBUG] [Thread-127652] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:59:14.856 [DEBUG] [Thread-127652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:59:14.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:59:14.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:59:14.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:59:14.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:59:14.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:59:14.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:59:14.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:59:14.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.999351 -999.00  +12.90  21.97     50   +2.90 1 1 1 1 1     0    0 11.27 53.32 ZNESW 20.5 22.0 147.6 25.1 13.3 -25.1 13.2 -24.5 13.0 -23.1 13.3 -23.8
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.999351
2025-12-04T01:59:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:59:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:59:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:59:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:59:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:59:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:58:47', tmtdew=11.46, humidity=45.73, cloud=0.0, wind=21.93, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:58:47', seeing=1.43, atlas_timestamp='2025-12-03T23:59:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T01:59:14.881 [DEBUG] [Thread-127652] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:59:14.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:59:14.988 [DEBUG] [Thread-127655] [transport.py] [_log()] starting thread (client mode): 0xa2786c80
2025-12-04T01:59:14.988 [DEBUG] [Thread-127655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:59:15.002 [DEBUG] [Thread-127655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:59:15.003 [INFO] [Thread-127655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:59:15.010 [DEBUG] [Thread-127655] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:59:15.010 [DEBUG] [Thread-127655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:59:15.010 [DEBUG] [Thread-127655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] client lang: <none>
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] server lang: <none>
2025-12-04T01:59:15.011 [DEBUG] [Thread-127655] [transport.py] [_log()] kex follows: False
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] Compression: none
2025-12-04T01:59:15.012 [DEBUG] [Thread-127655] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:59:15.069 [DEBUG] [Thread-127655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:59:15.070 [DEBUG] [Thread-127655] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:59:15.070 [DEBUG] [Thread-127655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:59:15.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:59:15.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:59:15.126 [DEBUG] [Thread-127655] [transport.py] [_log()] userauth is OK
2025-12-04T01:59:15.126 [DEBUG] [Thread-127655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:59:15.127 [DEBUG] [Thread-127655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:59:15.127 [DEBUG] [Thread-127655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:59:15.127 [DEBUG] [Thread-127655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:59:15.145 [INFO] [Thread-127655] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:59:15.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:59:15.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:59:15.983 [DEBUG] [Thread-127655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:59:15.983 [DEBUG] [Thread-127655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:59:16.031 [DEBUG] [Thread-127655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:59:16.031 [DEBUG] [Thread-127655] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:59:16.040 [DEBUG] [Thread-127655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:59:16.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:59:16.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:59:16.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:59:16.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:59:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:59:16.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:59:16.075 [DEBUG] [Thread-127655] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:59:18.558 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:22.248 [DEBUG] [Thread-127657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:29.761 [DEBUG] [Thread-127658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:37.292 [DEBUG] [Thread-127659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:39.022 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T01:59:46.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T01:59:46.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T01:59:46.449 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:46.450 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 59, 19), 11.45, 45.74, 0.0, 22.8, 12.88, 0, 0, 0, 2, 0, 0),)
2025-12-04T01:59:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:59:19
2025-12-04T01:59:46.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T01:59:47.051 [DEBUG] [Thread-127660] [transport.py] [_log()] starting thread (client mode): 0xa27868f0
2025-12-04T01:59:47.051 [DEBUG] [Thread-127660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:59:47.071 [DEBUG] [Thread-127660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T01:59:47.072 [INFO] [Thread-127660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] client lang: <none>
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] server lang: <none>
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] kex follows: False
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:59:47.075 [DEBUG] [Thread-127660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:59:47.076 [DEBUG] [Thread-127660] [transport.py] [_log()] Compression: none
2025-12-04T01:59:47.076 [DEBUG] [Thread-127660] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:59:47.091 [DEBUG] [Thread-127660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:59:47.091 [DEBUG] [Thread-127660] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:59:47.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T01:59:47.092 [DEBUG] [Thread-127660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T01:59:47.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:59:47.132 [DEBUG] [Thread-127660] [transport.py] [_log()] userauth is OK
2025-12-04T01:59:47.133 [DEBUG] [Thread-127660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:59:47.133 [DEBUG] [Thread-127660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:59:47.133 [DEBUG] [Thread-127660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T01:59:47.133 [DEBUG] [Thread-127660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:59:47.170 [INFO] [Thread-127660] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:59:47.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:59:47.778 [DEBUG] [Thread-127660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:59:47.778 [DEBUG] [Thread-127660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:59:47.778 [DEBUG] [Thread-127660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T01:59:47.819 [DEBUG] [Thread-127660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:59:47.819 [DEBUG] [Thread-127660] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:59:47.821 [DEBUG] [Thread-127660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:59:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:59:47.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T01:59:47.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T01:59:47.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T01:59:47.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:59:47.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T01:59:47.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:59:47.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:59:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T01:59:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.999351 -999.00  +12.90  21.97     50   +2.90 1 1 1 1 1     0    0 11.27 53.32 ZNESW 20.5 22.0 147.6 25.1 13.3 -25.1 13.2 -24.5 13.0 -23.1 13.3 -23.8
2025-12-04T01:59:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T01:59:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T01:59:47.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.999351
2025-12-04T01:59:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T01:59:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T01:59:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T01:59:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T01:59:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T01:59:47.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:59:19', tmtdew=11.45, humidity=45.74, cloud=0.0, wind=22.8, temperature=12.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:59:19', seeing=1.64, atlas_timestamp='2025-12-03T23:59:03.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T01:59:47.855 [DEBUG] [Thread-127660] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:59:47.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T01:59:47.954 [DEBUG] [Thread-127663] [transport.py] [_log()] starting thread (client mode): 0xa2746f50
2025-12-04T01:59:47.954 [DEBUG] [Thread-127663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T01:59:47.968 [DEBUG] [Thread-127663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T01:59:47.969 [INFO] [Thread-127663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T01:59:47.976 [DEBUG] [Thread-127663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] client lang: <none>
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] server lang: <none>
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] kex follows: False
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T01:59:47.977 [DEBUG] [Thread-127663] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T01:59:47.978 [DEBUG] [Thread-127663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T01:59:47.978 [DEBUG] [Thread-127663] [transport.py] [_log()] Compression: none
2025-12-04T01:59:47.978 [DEBUG] [Thread-127663] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T01:59:48.034 [DEBUG] [Thread-127663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T01:59:48.034 [DEBUG] [Thread-127663] [transport.py] [_log()] Switch to new keys ...
2025-12-04T01:59:48.035 [DEBUG] [Thread-127663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T01:59:48.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T01:59:48.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T01:59:48.090 [DEBUG] [Thread-127663] [transport.py] [_log()] userauth is OK
2025-12-04T01:59:48.090 [DEBUG] [Thread-127663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T01:59:48.090 [DEBUG] [Thread-127663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T01:59:48.090 [DEBUG] [Thread-127663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T01:59:48.090 [DEBUG] [Thread-127663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T01:59:48.109 [INFO] [Thread-127663] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T01:59:48.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T01:59:48.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T01:59:49.021 [DEBUG] [Thread-127663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T01:59:49.021 [DEBUG] [Thread-127663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T01:59:49.071 [DEBUG] [Thread-127663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T01:59:49.071 [DEBUG] [Thread-127663] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T01:59:49.079 [DEBUG] [Thread-127663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T01:59:49.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T01:59:49.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T01:59:49.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T01:59:49.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T01:59:49.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T01:59:49.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T01:59:49.114 [DEBUG] [Thread-127663] [transport.py] [_log()] EOF in transport thread
2025-12-04T01:59:52.319 [DEBUG] [Thread-127665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T01:59:59.453 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:07.354 [DEBUG] [Thread-127666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:19.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:00:19.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:00:19.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:00:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 1, 59, 51), 11.41, 45.86, 0.0, 21.9, 12.86, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:00:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 01:59:51
2025-12-04T02:00:19.863 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:19.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:00:20.067 [DEBUG] [Thread-127667] [transport.py] [_log()] starting thread (client mode): 0xa51d3d60
2025-12-04T02:00:20.067 [DEBUG] [Thread-127667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:00:20.089 [DEBUG] [Thread-127667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:00:20.089 [INFO] [Thread-127667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:00:20.092 [DEBUG] [Thread-127667] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:00:20.092 [DEBUG] [Thread-127667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:00:20.092 [DEBUG] [Thread-127667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:00:20.092 [DEBUG] [Thread-127667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] client lang: <none>
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] server lang: <none>
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] kex follows: False
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] Compression: none
2025-12-04T02:00:20.093 [DEBUG] [Thread-127667] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:00:20.111 [DEBUG] [Thread-127667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:00:20.112 [DEBUG] [Thread-127667] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:00:20.112 [DEBUG] [Thread-127667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:00:20.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:00:20.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:00:20.114 [DEBUG] [Thread-127667] [transport.py] [_log()] userauth is OK
2025-12-04T02:00:20.114 [DEBUG] [Thread-127667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:00:20.114 [DEBUG] [Thread-127667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:00:20.114 [DEBUG] [Thread-127667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:00:20.114 [DEBUG] [Thread-127667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:00:20.138 [INFO] [Thread-127667] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:00:20.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:00:20.783 [DEBUG] [Thread-127667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:00:20.784 [DEBUG] [Thread-127667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:00:20.784 [DEBUG] [Thread-127667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:00:20.825 [DEBUG] [Thread-127667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:00:20.825 [DEBUG] [Thread-127667] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:00:20.828 [DEBUG] [Thread-127667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:00:20.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:00:20.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:00:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:00:20.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:00:20.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:00:20.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:00:20.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:00:20.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61012.999698 -999.00  +12.90  20.12     50   +2.90 1 1 1 1 1     0    0 11.53 54.51 ZNESW 18.9 20.1 129.6 24.9 13.3 -25.1 13.2 -24.5 13.0 -22.8 13.3 -23.9
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61012.999698
2025-12-04T02:00:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:00:20.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:00:20.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:00:20.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:00:20.854 [DEBUG] [Thread-127667] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:00:20.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:00:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T01:59:51', tmtdew=11.41, humidity=45.86, cloud=0.0, wind=21.9, temperature=12.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T01:59:51', seeing=1.29, atlas_timestamp='2025-12-03T23:59:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006750000000000256, -0.025750000000000384, 0.02975000000000172, -0.06800000000000139, -0.03049999999999997, 0.06875000000000142, -0.05250000000000021, -0.020749999999999602, 0.026999999999999247, -0.038000000000000256, -0.03725000000000023, 0.0, 0.07600000000000051, -0.036749999999999616, -0.12950000000000017, -0.08500000000000085, 0.01974999999999838, 0.011499999999999844, -0.03850000000000087, 0.02224999999999966, 0.05299999999999905, 0.07174999999999798, 0.012250000000001648, -0.014249999999998764, 0.026999999999999247, 0.04049999999999976, 0.014749999999999375, 0.015499999999999403, 0.16800000000000104, -0.010999999999999233, -0.03999999999999915, -0.02049999999999841, 0.09274999999999878], zp_timestamp='2025-12-03T23:56:00')
2025-12-04T02:00:20.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:00:20.952 [DEBUG] [Thread-127670] [transport.py] [_log()] starting thread (client mode): 0xa51d1690
2025-12-04T02:00:20.952 [DEBUG] [Thread-127670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:00:20.967 [DEBUG] [Thread-127670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:00:20.967 [INFO] [Thread-127670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:00:20.974 [DEBUG] [Thread-127670] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:00:20.975 [DEBUG] [Thread-127670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] client lang: <none>
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] server lang: <none>
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] kex follows: False
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:00:20.976 [DEBUG] [Thread-127670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:00:20.977 [DEBUG] [Thread-127670] [transport.py] [_log()] Compression: none
2025-12-04T02:00:20.977 [DEBUG] [Thread-127670] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:00:21.033 [DEBUG] [Thread-127670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:00:21.034 [DEBUG] [Thread-127670] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:00:21.034 [DEBUG] [Thread-127670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:00:21.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:00:21.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:00:21.090 [DEBUG] [Thread-127670] [transport.py] [_log()] userauth is OK
2025-12-04T02:00:21.090 [DEBUG] [Thread-127670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:00:21.090 [DEBUG] [Thread-127670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:00:21.090 [DEBUG] [Thread-127670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:00:21.091 [DEBUG] [Thread-127670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:00:21.109 [INFO] [Thread-127670] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:00:21.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:00:21.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:00:21.935 [DEBUG] [Thread-127670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:00:21.935 [DEBUG] [Thread-127670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:00:21.983 [DEBUG] [Thread-127670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:00:21.983 [DEBUG] [Thread-127670] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:00:21.992 [DEBUG] [Thread-127670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:00:22.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:00:22.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:00:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:00:22.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:00:22.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:00:22.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:00:22.028 [DEBUG] [Thread-127670] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:00:22.382 [DEBUG] [Thread-127672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:29.840 [DEBUG] [Thread-127673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:37.424 [DEBUG] [Thread-127674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:40.241 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:46.666 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:46.667 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:52.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:00:52.046 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:00:52.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:00:52.450 [DEBUG] [Thread-127675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:00:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 0, 23), 11.37, 45.98, 0.0, 22.48, 12.81, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:00:52.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:00:23
2025-12-04T02:00:52.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:00:52.992 [DEBUG] [Thread-127676] [transport.py] [_log()] starting thread (client mode): 0xa27853f0
2025-12-04T02:00:52.992 [DEBUG] [Thread-127676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:00:53.007 [DEBUG] [Thread-127676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:00:53.007 [INFO] [Thread-127676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] client lang: <none>
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] server lang: <none>
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] kex follows: False
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:00:53.010 [DEBUG] [Thread-127676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:00:53.011 [DEBUG] [Thread-127676] [transport.py] [_log()] Compression: none
2025-12-04T02:00:53.011 [DEBUG] [Thread-127676] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:00:53.023 [DEBUG] [Thread-127676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:00:53.024 [DEBUG] [Thread-127676] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:00:53.024 [DEBUG] [Thread-127676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:00:53.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:00:53.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:00:53.026 [DEBUG] [Thread-127676] [transport.py] [_log()] userauth is OK
2025-12-04T02:00:53.027 [DEBUG] [Thread-127676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:00:53.027 [DEBUG] [Thread-127676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:00:53.027 [DEBUG] [Thread-127676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:00:53.027 [DEBUG] [Thread-127676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:00:53.050 [INFO] [Thread-127676] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:00:53.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:00:53.815 [DEBUG] [Thread-127676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:00:53.815 [DEBUG] [Thread-127676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:00:53.816 [DEBUG] [Thread-127676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:00:53.857 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:00:53.857 [DEBUG] [Thread-127676] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:00:53.860 [DEBUG] [Thread-127676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:00:53.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:00:53.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:00:53.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:00:53.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:00:53.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:00:53.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:00:53.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:00:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:00:53.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.000045 -999.00  +12.90  23.04     50   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 23.6 23.0 140.6 26.6 13.3 -25.1 13.2 -24.7 13.0 -22.9 13.3 -24.0
2025-12-04T02:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.000045
2025-12-04T02:00:53.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:00:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:00:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:00:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:00:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:00:53.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:00:23', tmtdew=11.37, humidity=45.98, cloud=0.0, wind=22.48, temperature=12.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:00:23', seeing=1.29, atlas_timestamp='2025-12-04T00:00:03.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-03T23:59:00')
2025-12-04T02:00:53.878 [DEBUG] [Thread-127676] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:00:53.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:00:53.988 [DEBUG] [Thread-127679] [transport.py] [_log()] starting thread (client mode): 0xa2787eb0
2025-12-04T02:00:53.988 [DEBUG] [Thread-127679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:00:54.003 [DEBUG] [Thread-127679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:00:54.003 [INFO] [Thread-127679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:00:54.010 [DEBUG] [Thread-127679] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:00:54.010 [DEBUG] [Thread-127679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] client lang: <none>
2025-12-04T02:00:54.011 [DEBUG] [Thread-127679] [transport.py] [_log()] server lang: <none>
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] kex follows: False
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] Compression: none
2025-12-04T02:00:54.012 [DEBUG] [Thread-127679] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:00:54.068 [DEBUG] [Thread-127679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:00:54.069 [DEBUG] [Thread-127679] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:00:54.069 [DEBUG] [Thread-127679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:00:54.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:00:54.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:00:54.125 [DEBUG] [Thread-127679] [transport.py] [_log()] userauth is OK
2025-12-04T02:00:54.125 [DEBUG] [Thread-127679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:00:54.125 [DEBUG] [Thread-127679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:00:54.125 [DEBUG] [Thread-127679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:00:54.126 [DEBUG] [Thread-127679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:00:54.142 [INFO] [Thread-127679] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:00:54.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:00:54.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:00:54.991 [DEBUG] [Thread-127679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:00:54.991 [DEBUG] [Thread-127679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:00:55.039 [DEBUG] [Thread-127679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:00:55.039 [DEBUG] [Thread-127679] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:00:55.048 [DEBUG] [Thread-127679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:00:55.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:00:55.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:00:55.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:00:55.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:00:55.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:00:55.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:00:55.083 [DEBUG] [Thread-127679] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:01:00.624 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:07.476 [DEBUG] [Thread-127681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:21.008 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:22.522 [DEBUG] [Thread-127682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:25.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:01:25.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:01:25.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:01:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 0, 55), 11.32, 45.99, 0.0, 19.34, 12.76, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:01:25.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:00:55
2025-12-04T02:01:25.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:01:26.056 [DEBUG] [Thread-127683] [transport.py] [_log()] starting thread (client mode): 0xa51d18d0
2025-12-04T02:01:26.056 [DEBUG] [Thread-127683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:01:26.077 [DEBUG] [Thread-127683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:01:26.077 [INFO] [Thread-127683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] client lang: <none>
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] server lang: <none>
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] kex follows: False
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:01:26.080 [DEBUG] [Thread-127683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:01:26.081 [DEBUG] [Thread-127683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:01:26.081 [DEBUG] [Thread-127683] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:01:26.081 [DEBUG] [Thread-127683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:01:26.081 [DEBUG] [Thread-127683] [transport.py] [_log()] Compression: none
2025-12-04T02:01:26.081 [DEBUG] [Thread-127683] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:01:26.099 [DEBUG] [Thread-127683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:01:26.099 [DEBUG] [Thread-127683] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:01:26.100 [DEBUG] [Thread-127683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:01:26.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:01:26.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:01:26.102 [DEBUG] [Thread-127683] [transport.py] [_log()] userauth is OK
2025-12-04T02:01:26.102 [DEBUG] [Thread-127683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:01:26.102 [DEBUG] [Thread-127683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:01:26.102 [DEBUG] [Thread-127683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:01:26.102 [DEBUG] [Thread-127683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:01:26.125 [INFO] [Thread-127683] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:01:26.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:01:26.729 [DEBUG] [Thread-127683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:01:26.729 [DEBUG] [Thread-127683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:01:26.730 [DEBUG] [Thread-127683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:01:26.770 [DEBUG] [Thread-127683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:01:26.770 [DEBUG] [Thread-127683] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:01:26.773 [DEBUG] [Thread-127683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:01:26.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:01:26.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:01:26.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:01:26.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:01:26.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:01:26.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:01:26.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.000392 -999.00  +13.00  21.43     50   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.6 21.4 145.0 27.2 13.3 -24.9 13.2 -24.6 13.0 -22.8 13.3 -23.8
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:01:26.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.000392
2025-12-04T02:01:26.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:01:26.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:01:26.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:01:26.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:01:26.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:01:26.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:00:55', tmtdew=11.32, humidity=45.99, cloud=0.0, wind=19.34, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:00:55', seeing=1.44, atlas_timestamp='2025-12-04T00:00:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-03T23:59:00')
2025-12-04T02:01:26.799 [DEBUG] [Thread-127683] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:01:26.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:01:26.898 [DEBUG] [Thread-127686] [transport.py] [_log()] starting thread (client mode): 0xa519b670
2025-12-04T02:01:26.898 [DEBUG] [Thread-127686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:01:26.912 [DEBUG] [Thread-127686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:01:26.912 [INFO] [Thread-127686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] client lang: <none>
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] server lang: <none>
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] kex follows: False
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:01:26.920 [DEBUG] [Thread-127686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:01:26.921 [DEBUG] [Thread-127686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:01:26.921 [DEBUG] [Thread-127686] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:01:26.921 [DEBUG] [Thread-127686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:01:26.921 [DEBUG] [Thread-127686] [transport.py] [_log()] Compression: none
2025-12-04T02:01:26.921 [DEBUG] [Thread-127686] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:01:26.977 [DEBUG] [Thread-127686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:01:26.977 [DEBUG] [Thread-127686] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:01:26.978 [DEBUG] [Thread-127686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:01:26.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:01:26.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:01:27.033 [DEBUG] [Thread-127686] [transport.py] [_log()] userauth is OK
2025-12-04T02:01:27.033 [DEBUG] [Thread-127686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:01:27.033 [DEBUG] [Thread-127686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:01:27.033 [DEBUG] [Thread-127686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:01:27.033 [DEBUG] [Thread-127686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:01:27.052 [INFO] [Thread-127686] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:01:27.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:01:27.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:01:27.884 [DEBUG] [Thread-127686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:01:27.884 [DEBUG] [Thread-127686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:01:27.932 [DEBUG] [Thread-127686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:01:27.932 [DEBUG] [Thread-127686] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:01:27.941 [DEBUG] [Thread-127686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:01:27.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:01:27.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:01:27.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:01:27.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:01:27.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:01:27.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:01:27.976 [DEBUG] [Thread-127686] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:01:29.920 [DEBUG] [Thread-127688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:37.550 [DEBUG] [Thread-127689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:41.453 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:46.864 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:46.865 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:52.595 [DEBUG] [Thread-127690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:01:57.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:01:57.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:01:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:01:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 1, 27), 11.36, 45.89, 0.0, 20.98, 12.85, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:01:58.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:01:27
2025-12-04T02:01:58.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:01:58.955 [DEBUG] [Thread-127691] [transport.py] [_log()] starting thread (client mode): 0xa51d1930
2025-12-04T02:01:58.955 [DEBUG] [Thread-127691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:01:58.976 [DEBUG] [Thread-127691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:01:58.976 [INFO] [Thread-127691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] client lang: <none>
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] server lang: <none>
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] kex follows: False
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:01:58.979 [DEBUG] [Thread-127691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:01:58.980 [DEBUG] [Thread-127691] [transport.py] [_log()] Compression: none
2025-12-04T02:01:58.980 [DEBUG] [Thread-127691] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:01:59.000 [DEBUG] [Thread-127691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:01:59.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:01:59.001 [DEBUG] [Thread-127691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:01:59.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:01:59.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:01:59.003 [DEBUG] [Thread-127691] [transport.py] [_log()] userauth is OK
2025-12-04T02:01:59.003 [DEBUG] [Thread-127691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:01:59.004 [DEBUG] [Thread-127691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:01:59.004 [DEBUG] [Thread-127691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:01:59.004 [DEBUG] [Thread-127691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:01:59.027 [INFO] [Thread-127691] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:01:59.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:01:59.788 [DEBUG] [Thread-127691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:01:59.788 [DEBUG] [Thread-127691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:01:59.788 [DEBUG] [Thread-127691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:01:59.828 [DEBUG] [Thread-127691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:01:59.828 [DEBUG] [Thread-127691] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:01:59.832 [DEBUG] [Thread-127691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:01:59.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:01:59.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:01:59.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:01:59.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:01:59.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:01:59.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:01:59.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.000740 -999.00  +12.90  20.46     50   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.4 20.5 144.6 23.0 13.3 -25.0 13.2 -24.5 13.0 -23.0 13.3 -23.8
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.000740
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:01:59.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:01:27', tmtdew=11.36, humidity=45.89, cloud=0.0, wind=20.98, temperature=12.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:01:27', seeing=1.34, atlas_timestamp='2025-12-04T00:01:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-03T23:59:00')
2025-12-04T02:01:59.868 [DEBUG] [Thread-127691] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:01:59.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:01:59.953 [DEBUG] [Thread-127694] [transport.py] [_log()] starting thread (client mode): 0xa517c8b0
2025-12-04T02:01:59.953 [DEBUG] [Thread-127694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:01:59.967 [DEBUG] [Thread-127694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:01:59.967 [INFO] [Thread-127694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] client lang: <none>
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] server lang: <none>
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] kex follows: False
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] Compression: none
2025-12-04T02:01:59.975 [DEBUG] [Thread-127694] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:02:00.037 [DEBUG] [Thread-127694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:02:00.037 [DEBUG] [Thread-127694] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:02:00.037 [DEBUG] [Thread-127694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:02:00.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:02:00.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:02:00.092 [DEBUG] [Thread-127694] [transport.py] [_log()] userauth is OK
2025-12-04T02:02:00.092 [DEBUG] [Thread-127694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:02:00.092 [DEBUG] [Thread-127694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:02:00.092 [DEBUG] [Thread-127694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:02:00.092 [DEBUG] [Thread-127694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:02:00.106 [INFO] [Thread-127694] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:02:00.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:02:00.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:02:00.940 [DEBUG] [Thread-127694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:02:00.940 [DEBUG] [Thread-127694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:02:00.987 [DEBUG] [Thread-127694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:02:00.987 [DEBUG] [Thread-127694] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:02:00.996 [DEBUG] [Thread-127694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:02:01.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:02:01.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:02:01.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:02:01.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:02:01.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:02:01.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:02:01.027 [DEBUG] [Thread-127694] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:02:01.843 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:07.623 [DEBUG] [Thread-127696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:22.246 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:22.667 [DEBUG] [Thread-127697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:29.973 [DEBUG] [Thread-127698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:31.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:02:31.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:02:31.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:02:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 1, 59), 11.28, 45.98, 0.0, 20.57, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:02:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:01:59
2025-12-04T02:02:31.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:02:32.050 [DEBUG] [Thread-127699] [transport.py] [_log()] starting thread (client mode): 0xa517ee90
2025-12-04T02:02:32.050 [DEBUG] [Thread-127699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:02:32.071 [DEBUG] [Thread-127699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:02:32.071 [INFO] [Thread-127699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] client lang: <none>
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] server lang: <none>
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] kex follows: False
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:02:32.074 [DEBUG] [Thread-127699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:02:32.075 [DEBUG] [Thread-127699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:02:32.075 [DEBUG] [Thread-127699] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:02:32.075 [DEBUG] [Thread-127699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:02:32.075 [DEBUG] [Thread-127699] [transport.py] [_log()] Compression: none
2025-12-04T02:02:32.075 [DEBUG] [Thread-127699] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:02:32.090 [DEBUG] [Thread-127699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:02:32.091 [DEBUG] [Thread-127699] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:02:32.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:02:32.091 [DEBUG] [Thread-127699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:02:32.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:02:32.092 [DEBUG] [Thread-127699] [transport.py] [_log()] userauth is OK
2025-12-04T02:02:32.092 [DEBUG] [Thread-127699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:02:32.092 [DEBUG] [Thread-127699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:02:32.092 [DEBUG] [Thread-127699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:02:32.092 [DEBUG] [Thread-127699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:02:32.103 [INFO] [Thread-127699] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:02:32.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:02:32.708 [DEBUG] [Thread-127699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:02:32.708 [DEBUG] [Thread-127699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:02:32.708 [DEBUG] [Thread-127699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:02:32.750 [DEBUG] [Thread-127699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:02:32.750 [DEBUG] [Thread-127699] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:02:32.752 [DEBUG] [Thread-127699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:02:32.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:02:32.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:02:32.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:02:32.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:02:32.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:02:32.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:02:32.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.001087 -999.00  +12.90  20.64     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.9 20.6 140.2 22.7 13.3 -25.2 13.2 -24.6 13.0 -23.1 13.3 -23.9
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.001087
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:02:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:01:59', tmtdew=11.28, humidity=45.98, cloud=0.0, wind=20.57, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:01:59', seeing=1.41, atlas_timestamp='2025-12-04T00:01:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-03T23:59:00')
2025-12-04T02:02:32.769 [DEBUG] [Thread-127699] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:02:32.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:02:32.858 [DEBUG] [Thread-127702] [transport.py] [_log()] starting thread (client mode): 0xa2785ff0
2025-12-04T02:02:32.858 [DEBUG] [Thread-127702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:02:32.872 [DEBUG] [Thread-127702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:02:32.872 [INFO] [Thread-127702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] client lang: <none>
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] server lang: <none>
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] kex follows: False
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] Compression: none
2025-12-04T02:02:32.880 [DEBUG] [Thread-127702] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:02:32.934 [DEBUG] [Thread-127702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:02:32.935 [DEBUG] [Thread-127702] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:02:32.935 [DEBUG] [Thread-127702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:02:32.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:02:32.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:02:32.992 [DEBUG] [Thread-127702] [transport.py] [_log()] userauth is OK
2025-12-04T02:02:32.992 [DEBUG] [Thread-127702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:02:32.992 [DEBUG] [Thread-127702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:02:32.992 [DEBUG] [Thread-127702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:02:32.992 [DEBUG] [Thread-127702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:02:33.006 [INFO] [Thread-127702] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:02:33.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:02:33.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:02:33.812 [DEBUG] [Thread-127702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:02:33.812 [DEBUG] [Thread-127702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:02:33.860 [DEBUG] [Thread-127702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:02:33.860 [DEBUG] [Thread-127702] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:02:33.869 [DEBUG] [Thread-127702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:02:33.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:02:33.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:02:33.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:02:33.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:02:33.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:02:33.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:02:33.901 [DEBUG] [Thread-127702] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:02:37.696 [DEBUG] [Thread-127704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:42.641 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:47.068 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:47.070 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:02:52.742 [DEBUG] [Thread-127705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:03.072 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:03:03.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:03:03.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:03:04.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 2, 31), 11.27, 46.01, 0.0, 20.66, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:03:04.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:02:31
2025-12-04T02:03:04.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:03:04.928 [DEBUG] [Thread-127706] [transport.py] [_log()] starting thread (client mode): 0xa51d1cc0
2025-12-04T02:03:04.929 [DEBUG] [Thread-127706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:03:04.951 [DEBUG] [Thread-127706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:03:04.951 [INFO] [Thread-127706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:03:04.954 [DEBUG] [Thread-127706] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:03:04.954 [DEBUG] [Thread-127706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] client lang: <none>
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] server lang: <none>
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] kex follows: False
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] Compression: none
2025-12-04T02:03:04.955 [DEBUG] [Thread-127706] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:03:04.963 [DEBUG] [Thread-127706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:03:04.963 [DEBUG] [Thread-127706] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:03:04.963 [DEBUG] [Thread-127706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:03:04.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:03:04.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:03:04.964 [DEBUG] [Thread-127706] [transport.py] [_log()] userauth is OK
2025-12-04T02:03:04.964 [DEBUG] [Thread-127706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:03:04.964 [DEBUG] [Thread-127706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:03:04.964 [DEBUG] [Thread-127706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:03:04.964 [DEBUG] [Thread-127706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:03:04.973 [INFO] [Thread-127706] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:03:04.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:03:05.797 [DEBUG] [Thread-127706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:03:05.797 [DEBUG] [Thread-127706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:03:05.798 [DEBUG] [Thread-127706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:03:05.838 [DEBUG] [Thread-127706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:03:05.838 [DEBUG] [Thread-127706] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:03:05.840 [DEBUG] [Thread-127706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:03:05.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:03:05.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:03:05.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:03:05.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:03:05.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:03:05.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:03:05.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:03:05.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:03:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:03:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.001781 -999.00  +13.00  17.22     50   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.8 17.2 165.2 24.4 13.3 -25.0 13.2 -24.5 13.0 -22.9 13.2 -23.8
2025-12-04T02:03:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:03:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:03:05.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.001781
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:03:05.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:02:31', tmtdew=11.27, humidity=46.01, cloud=0.0, wind=20.66, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:03:03', seeing=1.67, atlas_timestamp='2025-12-04T00:02:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-03T23:59:00')
2025-12-04T02:03:05.865 [DEBUG] [Thread-127706] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:03:05.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:03:05.961 [DEBUG] [Thread-127709] [transport.py] [_log()] starting thread (client mode): 0xa270a290
2025-12-04T02:03:05.961 [DEBUG] [Thread-127709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:03:05.975 [DEBUG] [Thread-127709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:03:05.975 [INFO] [Thread-127709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:05.985 [DEBUG] [Thread-127709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] client lang: <none>
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] server lang: <none>
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] kex follows: False
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] Compression: none
2025-12-04T02:03:05.986 [DEBUG] [Thread-127709] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:03:06.043 [DEBUG] [Thread-127709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:03:06.043 [DEBUG] [Thread-127709] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:03:06.043 [DEBUG] [Thread-127709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:03:06.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:03:06.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:03:06.104 [DEBUG] [Thread-127709] [transport.py] [_log()] userauth is OK
2025-12-04T02:03:06.104 [DEBUG] [Thread-127709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:03:06.104 [DEBUG] [Thread-127709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:03:06.104 [DEBUG] [Thread-127709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:03:06.104 [DEBUG] [Thread-127709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:03:06.123 [INFO] [Thread-127709] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:03:06.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:03:06.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:03:06.955 [DEBUG] [Thread-127709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:03:06.955 [DEBUG] [Thread-127709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:03:07.004 [DEBUG] [Thread-127709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:03:07.004 [DEBUG] [Thread-127709] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:03:07.015 [DEBUG] [Thread-127709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:03:07.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:03:07.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:03:07.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:03:07.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:03:07.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:03:07.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:03:07.060 [DEBUG] [Thread-127709] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:03:07.769 [DEBUG] [Thread-127711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:22.822 [DEBUG] [Thread-127712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:23.476 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:30.035 [DEBUG] [Thread-127713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:37.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:03:37.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:03:37.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:03:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 3, 3), 11.26, 46.03, 0.0, 19.78, 12.78, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:03:37.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:03:03
2025-12-04T02:03:37.848 [DEBUG] [Thread-127714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:03:38.058 [DEBUG] [Thread-127715] [transport.py] [_log()] starting thread (client mode): 0xa51d0cd0
2025-12-04T02:03:38.058 [DEBUG] [Thread-127715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:03:38.077 [DEBUG] [Thread-127715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:03:38.078 [INFO] [Thread-127715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] client lang: <none>
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] server lang: <none>
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] kex follows: False
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:03:38.081 [DEBUG] [Thread-127715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:03:38.082 [DEBUG] [Thread-127715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:03:38.082 [DEBUG] [Thread-127715] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:03:38.082 [DEBUG] [Thread-127715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:03:38.082 [DEBUG] [Thread-127715] [transport.py] [_log()] Compression: none
2025-12-04T02:03:38.082 [DEBUG] [Thread-127715] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:03:38.098 [DEBUG] [Thread-127715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:03:38.099 [DEBUG] [Thread-127715] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:03:38.099 [DEBUG] [Thread-127715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:03:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:03:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:03:38.101 [DEBUG] [Thread-127715] [transport.py] [_log()] userauth is OK
2025-12-04T02:03:38.102 [DEBUG] [Thread-127715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:03:38.102 [DEBUG] [Thread-127715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:03:38.102 [DEBUG] [Thread-127715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:03:38.102 [DEBUG] [Thread-127715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:03:38.137 [INFO] [Thread-127715] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:03:38.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:03:38.780 [DEBUG] [Thread-127715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:03:38.780 [DEBUG] [Thread-127715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:03:38.781 [DEBUG] [Thread-127715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:03:38.822 [DEBUG] [Thread-127715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:03:38.822 [DEBUG] [Thread-127715] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:03:38.824 [DEBUG] [Thread-127715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:03:38.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:03:38.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:03:38.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:03:38.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:03:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:03:38.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:03:38.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.002128 -999.00  +12.90  17.74     50   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 21.1 17.7 141.0 21.2 13.3 -25.2 13.2 -24.6 13.0 -23.1 13.3 -23.9
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.002128
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:03:38.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:03:38.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:03:03', tmtdew=11.26, humidity=46.03, cloud=0.0, wind=19.78, temperature=12.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:03:35', seeing=2.02, atlas_timestamp='2025-12-04T00:03:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:03:38.845 [DEBUG] [Thread-127715] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:03:38.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:03:38.933 [DEBUG] [Thread-127718] [transport.py] [_log()] starting thread (client mode): 0xa2709240
2025-12-04T02:03:38.934 [DEBUG] [Thread-127718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:03:38.948 [DEBUG] [Thread-127718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:03:38.948 [INFO] [Thread-127718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:03:38.956 [DEBUG] [Thread-127718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] client lang: <none>
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] server lang: <none>
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] kex follows: False
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] Compression: none
2025-12-04T02:03:38.957 [DEBUG] [Thread-127718] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:03:39.015 [DEBUG] [Thread-127718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:03:39.016 [DEBUG] [Thread-127718] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:03:39.016 [DEBUG] [Thread-127718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:03:39.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:03:39.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:03:39.072 [DEBUG] [Thread-127718] [transport.py] [_log()] userauth is OK
2025-12-04T02:03:39.072 [DEBUG] [Thread-127718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:03:39.072 [DEBUG] [Thread-127718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:03:39.072 [DEBUG] [Thread-127718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:03:39.072 [DEBUG] [Thread-127718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:03:39.092 [INFO] [Thread-127718] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:03:39.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:03:39.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:03:39.934 [DEBUG] [Thread-127718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:03:39.935 [DEBUG] [Thread-127718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:03:39.983 [DEBUG] [Thread-127718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:03:39.983 [DEBUG] [Thread-127718] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:03:39.992 [DEBUG] [Thread-127718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:03:40.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:03:40.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:03:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:03:40.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:03:40.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:03:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:03:40.027 [DEBUG] [Thread-127718] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:03:43.904 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:47.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:47.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:03:52.872 [DEBUG] [Thread-127720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:04.320 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:07.915 [DEBUG] [Thread-127721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:10.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:04:10.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:04:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:04:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 4, 7), 11.26, 46.17, 0.0, 24.24, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:04:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:04:07
2025-12-04T02:04:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:04:10.994 [DEBUG] [Thread-127722] [transport.py] [_log()] starting thread (client mode): 0xa270ae60
2025-12-04T02:04:10.994 [DEBUG] [Thread-127722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:04:11.015 [DEBUG] [Thread-127722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:04:11.015 [INFO] [Thread-127722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:04:11.018 [DEBUG] [Thread-127722] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] client lang: <none>
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] server lang: <none>
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] kex follows: False
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] Compression: none
2025-12-04T02:04:11.019 [DEBUG] [Thread-127722] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:04:11.036 [DEBUG] [Thread-127722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:04:11.036 [DEBUG] [Thread-127722] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:04:11.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:04:11.037 [DEBUG] [Thread-127722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:04:11.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:04:11.039 [DEBUG] [Thread-127722] [transport.py] [_log()] userauth is OK
2025-12-04T02:04:11.039 [DEBUG] [Thread-127722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:04:11.039 [DEBUG] [Thread-127722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:04:11.040 [DEBUG] [Thread-127722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:04:11.040 [DEBUG] [Thread-127722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:04:11.063 [INFO] [Thread-127722] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:04:11.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:04:11.868 [DEBUG] [Thread-127722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:04:11.868 [DEBUG] [Thread-127722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:04:11.868 [DEBUG] [Thread-127722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:04:11.909 [DEBUG] [Thread-127722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:04:11.909 [DEBUG] [Thread-127722] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:04:11.912 [DEBUG] [Thread-127722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:04:11.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:04:11.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:04:11.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:04:11.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:04:11.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:04:11.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:04:11.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:04:11.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:04:11.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:04:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.002476 -999.00  +12.90  13.33     50   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.3 13.3 138.0 20.7 13.3 -25.1 13.2 -24.8 12.9 -23.1 13.3 -23.8
2025-12-04T02:04:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:04:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:04:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.002476
2025-12-04T02:04:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:04:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:04:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:04:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:04:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:04:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:04:07', tmtdew=11.26, humidity=46.17, cloud=0.0, wind=24.24, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:04:07', seeing=1.47, atlas_timestamp='2025-12-04T00:03:33.926', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:04:11.936 [DEBUG] [Thread-127722] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:04:12.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:04:12.031 [DEBUG] [Thread-127725] [transport.py] [_log()] starting thread (client mode): 0xa270bd30
2025-12-04T02:04:12.031 [DEBUG] [Thread-127725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:04:12.046 [DEBUG] [Thread-127725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:04:12.046 [INFO] [Thread-127725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:12.054 [DEBUG] [Thread-127725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] client lang: <none>
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] server lang: <none>
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] kex follows: False
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] Compression: none
2025-12-04T02:04:12.055 [DEBUG] [Thread-127725] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:04:12.111 [DEBUG] [Thread-127725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:04:12.111 [DEBUG] [Thread-127725] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:04:12.112 [DEBUG] [Thread-127725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:04:12.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:04:12.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:04:12.168 [DEBUG] [Thread-127725] [transport.py] [_log()] userauth is OK
2025-12-04T02:04:12.169 [DEBUG] [Thread-127725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:04:12.169 [DEBUG] [Thread-127725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:04:12.169 [DEBUG] [Thread-127725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:04:12.169 [DEBUG] [Thread-127725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:04:12.192 [INFO] [Thread-127725] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:04:12.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:04:12.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:04:13.015 [DEBUG] [Thread-127725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:04:13.015 [DEBUG] [Thread-127725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:04:13.063 [DEBUG] [Thread-127725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:04:13.063 [DEBUG] [Thread-127725] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:04:13.072 [DEBUG] [Thread-127725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:04:13.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:04:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:04:13.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:04:13.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:04:13.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:04:13.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:04:13.106 [DEBUG] [Thread-127725] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:04:22.938 [DEBUG] [Thread-127727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:24.698 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:30.093 [DEBUG] [Thread-127728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:37.981 [DEBUG] [Thread-127729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:43.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:04:43.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:04:43.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:04:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 4, 39), 11.11, 46.69, 0.0, 23.68, 12.78, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:04:43.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:04:39
2025-12-04T02:04:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:04:44.060 [DEBUG] [Thread-127730] [transport.py] [_log()] starting thread (client mode): 0xa2746560
2025-12-04T02:04:44.060 [DEBUG] [Thread-127730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:04:44.080 [DEBUG] [Thread-127730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:04:44.080 [INFO] [Thread-127730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:04:44.084 [DEBUG] [Thread-127730] [transport.py] [_log()] client lang: <none>
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] server lang: <none>
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] kex follows: False
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] Compression: none
2025-12-04T02:04:44.085 [DEBUG] [Thread-127730] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:04:44.103 [DEBUG] [Thread-127730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:04:44.104 [DEBUG] [Thread-127730] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:04:44.105 [DEBUG] [Thread-127730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:04:44.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:04:44.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:04:44.107 [DEBUG] [Thread-127730] [transport.py] [_log()] userauth is OK
2025-12-04T02:04:44.107 [DEBUG] [Thread-127730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:04:44.107 [DEBUG] [Thread-127730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:04:44.107 [DEBUG] [Thread-127730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:04:44.107 [DEBUG] [Thread-127730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:04:44.127 [INFO] [Thread-127730] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:04:44.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:04:44.780 [DEBUG] [Thread-127730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:04:44.780 [DEBUG] [Thread-127730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:04:44.780 [DEBUG] [Thread-127730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:04:44.821 [DEBUG] [Thread-127730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:04:44.821 [DEBUG] [Thread-127730] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:04:44.824 [DEBUG] [Thread-127730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:04:44.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:04:44.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:04:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:04:44.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:04:44.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:04:44.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:04:44.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:04:44.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:04:44.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:04:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.002823 -999.00  +12.80  20.42     51   +2.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 24.0 20.4 139.4 27.6 13.2 -25.1 13.2 -24.6 12.9 -22.9 13.2 -24.0
2025-12-04T02:04:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:04:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:04:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.002823
2025-12-04T02:04:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:04:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:04:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:04:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:04:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:04:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:04:39', tmtdew=11.11, humidity=46.69, cloud=0.0, wind=23.68, temperature=12.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:04:39', seeing=1.47, atlas_timestamp='2025-12-04T00:04:03.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:04:44.850 [DEBUG] [Thread-127730] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:04:44.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:04:44.944 [DEBUG] [Thread-127733] [transport.py] [_log()] starting thread (client mode): 0xa2746800
2025-12-04T02:04:44.944 [DEBUG] [Thread-127733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:04:44.959 [DEBUG] [Thread-127733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:04:44.959 [INFO] [Thread-127733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] client lang: <none>
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] server lang: <none>
2025-12-04T02:04:44.966 [DEBUG] [Thread-127733] [transport.py] [_log()] kex follows: False
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] Compression: none
2025-12-04T02:04:44.967 [DEBUG] [Thread-127733] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:04:45.023 [DEBUG] [Thread-127733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:04:45.023 [DEBUG] [Thread-127733] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:04:45.024 [DEBUG] [Thread-127733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:04:45.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:04:45.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:04:45.077 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:45.079 [DEBUG] [Thread-127733] [transport.py] [_log()] userauth is OK
2025-12-04T02:04:45.079 [DEBUG] [Thread-127733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:04:45.079 [DEBUG] [Thread-127733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:04:45.079 [DEBUG] [Thread-127733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:04:45.079 [DEBUG] [Thread-127733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:04:45.098 [INFO] [Thread-127733] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:04:45.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:04:45.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:04:46.001 [DEBUG] [Thread-127733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:04:46.002 [DEBUG] [Thread-127733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:04:46.049 [DEBUG] [Thread-127733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:04:46.049 [DEBUG] [Thread-127733] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:04:46.058 [DEBUG] [Thread-127733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:04:46.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:04:46.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:04:46.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:04:46.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:04:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:04:46.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:04:46.092 [DEBUG] [Thread-127733] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:04:47.475 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:47.477 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:04:53.011 [DEBUG] [Thread-127735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:05.520 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:08.058 [DEBUG] [Thread-127736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:16.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:05:16.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:05:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:05:16.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 5, 11), 11.12, 46.66, 0.0, 25.6, 12.76, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:05:16.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:05:11
2025-12-04T02:05:16.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:05:17.059 [DEBUG] [Thread-127737] [transport.py] [_log()] starting thread (client mode): 0xa270b550
2025-12-04T02:05:17.059 [DEBUG] [Thread-127737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:05:17.080 [DEBUG] [Thread-127737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:05:17.080 [INFO] [Thread-127737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:17.083 [DEBUG] [Thread-127737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] client lang: <none>
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] server lang: <none>
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] kex follows: False
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] Compression: none
2025-12-04T02:05:17.084 [DEBUG] [Thread-127737] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:05:17.103 [DEBUG] [Thread-127737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:05:17.104 [DEBUG] [Thread-127737] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:05:17.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:05:17.105 [DEBUG] [Thread-127737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:05:17.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:05:17.106 [DEBUG] [Thread-127737] [transport.py] [_log()] userauth is OK
2025-12-04T02:05:17.107 [DEBUG] [Thread-127737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:05:17.107 [DEBUG] [Thread-127737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:05:17.107 [DEBUG] [Thread-127737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:05:17.107 [DEBUG] [Thread-127737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:05:17.130 [INFO] [Thread-127737] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:05:17.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:05:18.061 [DEBUG] [Thread-127737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:05:18.061 [DEBUG] [Thread-127737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:05:18.061 [DEBUG] [Thread-127737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:05:18.102 [DEBUG] [Thread-127737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:05:18.102 [DEBUG] [Thread-127737] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:05:18.104 [DEBUG] [Thread-127737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:05:18.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:05:18.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:05:18.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:05:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:05:18.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:05:18.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:05:18.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:05:18.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:05:18.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:05:18.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.003170 -999.00  +12.80  14.10     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.5 14.1 144.2 25.3 13.2 -25.1 13.1 -24.5 12.9 -23.0 13.2 -23.7
2025-12-04T02:05:18.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:05:18.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:05:18.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.003170
2025-12-04T02:05:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:05:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:05:18.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:05:18.130 [DEBUG] [Thread-127737] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:05:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:05:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:05:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:05:11', tmtdew=11.12, humidity=46.66, cloud=0.0, wind=25.6, temperature=12.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:05:11', seeing=1.28, atlas_timestamp='2025-12-04T00:04:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:05:18.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:05:18.228 [DEBUG] [Thread-127740] [transport.py] [_log()] starting thread (client mode): 0xa2744070
2025-12-04T02:05:18.228 [DEBUG] [Thread-127740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:05:18.244 [DEBUG] [Thread-127740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:05:18.244 [INFO] [Thread-127740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:05:18.251 [DEBUG] [Thread-127740] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:05:18.251 [DEBUG] [Thread-127740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:05:18.251 [DEBUG] [Thread-127740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:05:18.251 [DEBUG] [Thread-127740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] client lang: <none>
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] server lang: <none>
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] kex follows: False
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] Compression: none
2025-12-04T02:05:18.252 [DEBUG] [Thread-127740] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:05:18.311 [DEBUG] [Thread-127740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:05:18.311 [DEBUG] [Thread-127740] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:05:18.312 [DEBUG] [Thread-127740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:05:18.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:05:18.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:05:18.367 [DEBUG] [Thread-127740] [transport.py] [_log()] userauth is OK
2025-12-04T02:05:18.367 [DEBUG] [Thread-127740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:05:18.367 [DEBUG] [Thread-127740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:05:18.367 [DEBUG] [Thread-127740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:05:18.367 [DEBUG] [Thread-127740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:05:18.386 [INFO] [Thread-127740] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:05:18.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:05:18.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:05:19.195 [DEBUG] [Thread-127740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:05:19.195 [DEBUG] [Thread-127740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:05:19.243 [DEBUG] [Thread-127740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:05:19.243 [DEBUG] [Thread-127740] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:05:19.253 [DEBUG] [Thread-127740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:05:19.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:05:19.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:05:19.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:05:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:05:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:05:19.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:05:19.297 [DEBUG] [Thread-127740] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:05:23.083 [DEBUG] [Thread-127742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:25.917 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:30.163 [DEBUG] [Thread-127743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:38.128 [DEBUG] [Thread-127744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:46.299 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:47.679 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:47.680 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:05:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:05:49.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:05:49.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:05:49.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 5, 43), 11.24, 46.61, 0.0, 20.94, 12.83, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:05:49.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:05:43
2025-12-04T02:05:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:05:50.258 [DEBUG] [Thread-127745] [transport.py] [_log()] starting thread (client mode): 0xa51d2b00
2025-12-04T02:05:50.258 [DEBUG] [Thread-127745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:05:50.279 [DEBUG] [Thread-127745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:05:50.279 [INFO] [Thread-127745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:05:50.282 [DEBUG] [Thread-127745] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:05:50.282 [DEBUG] [Thread-127745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] client lang: <none>
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] server lang: <none>
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] kex follows: False
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] Compression: none
2025-12-04T02:05:50.283 [DEBUG] [Thread-127745] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:05:50.291 [DEBUG] [Thread-127745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:05:50.292 [DEBUG] [Thread-127745] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:05:50.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:05:50.293 [DEBUG] [Thread-127745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:05:50.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:05:50.295 [DEBUG] [Thread-127745] [transport.py] [_log()] userauth is OK
2025-12-04T02:05:50.295 [DEBUG] [Thread-127745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:05:50.295 [DEBUG] [Thread-127745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:05:50.295 [DEBUG] [Thread-127745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:05:50.295 [DEBUG] [Thread-127745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:05:50.330 [INFO] [Thread-127745] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:05:50.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:05:50.977 [DEBUG] [Thread-127745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:05:50.977 [DEBUG] [Thread-127745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:05:50.977 [DEBUG] [Thread-127745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:05:51.018 [DEBUG] [Thread-127745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:05:51.018 [DEBUG] [Thread-127745] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:05:51.021 [DEBUG] [Thread-127745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:05:51.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:05:51.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:05:51.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:05:51.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:05:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:05:51.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:05:51.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.003517 -999.00  +12.80  18.26     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.4 18.3 148.0 25.0 13.2 -25.1 13.1 -24.5 12.9 -23.0 13.2 -23.8
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:05:51.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.003517
2025-12-04T02:05:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:05:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:05:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:05:51.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:05:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:05:51.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:05:43', tmtdew=11.24, humidity=46.61, cloud=0.0, wind=20.94, temperature=12.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:05:43', seeing=1.65, atlas_timestamp='2025-12-04T00:05:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:05:51.045 [DEBUG] [Thread-127745] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:05:51.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:05:51.141 [DEBUG] [Thread-127748] [transport.py] [_log()] starting thread (client mode): 0xa51d2290
2025-12-04T02:05:51.141 [DEBUG] [Thread-127748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:05:51.156 [DEBUG] [Thread-127748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:05:51.156 [INFO] [Thread-127748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:05:51.163 [DEBUG] [Thread-127748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] client lang: <none>
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] server lang: <none>
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] kex follows: False
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] Compression: none
2025-12-04T02:05:51.164 [DEBUG] [Thread-127748] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:05:51.223 [DEBUG] [Thread-127748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:05:51.223 [DEBUG] [Thread-127748] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:05:51.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:05:51.224 [DEBUG] [Thread-127748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:05:51.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:05:51.279 [DEBUG] [Thread-127748] [transport.py] [_log()] userauth is OK
2025-12-04T02:05:51.279 [DEBUG] [Thread-127748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:05:51.279 [DEBUG] [Thread-127748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:05:51.279 [DEBUG] [Thread-127748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:05:51.279 [DEBUG] [Thread-127748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:05:51.301 [INFO] [Thread-127748] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:05:51.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:05:51.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:05:52.111 [DEBUG] [Thread-127748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:05:52.111 [DEBUG] [Thread-127748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:05:52.159 [DEBUG] [Thread-127748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:05:52.159 [DEBUG] [Thread-127748] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:05:52.168 [DEBUG] [Thread-127748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:05:52.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:05:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:05:52.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:05:52.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:05:52.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:05:52.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:05:52.203 [DEBUG] [Thread-127748] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:05:53.155 [DEBUG] [Thread-127750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:06.683 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:08.202 [DEBUG] [Thread-127751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:06:22.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:06:22.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:06:22.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 6, 15), 11.25, 46.58, 0.0, 21.62, 12.8, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:06:22.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:06:15
2025-12-04T02:06:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:06:23.233 [DEBUG] [Thread-127752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:23.235 [DEBUG] [Thread-127753] [transport.py] [_log()] starting thread (client mode): 0xa51cd4b0
2025-12-04T02:06:23.235 [DEBUG] [Thread-127753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:06:23.255 [DEBUG] [Thread-127753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:06:23.255 [INFO] [Thread-127753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] client lang: <none>
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] server lang: <none>
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] kex follows: False
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] Compression: none
2025-12-04T02:06:23.258 [DEBUG] [Thread-127753] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:06:23.270 [DEBUG] [Thread-127753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:06:23.270 [DEBUG] [Thread-127753] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:06:23.270 [DEBUG] [Thread-127753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:06:23.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:06:23.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:06:23.271 [DEBUG] [Thread-127753] [transport.py] [_log()] userauth is OK
2025-12-04T02:06:23.271 [DEBUG] [Thread-127753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:06:23.271 [DEBUG] [Thread-127753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:06:23.271 [DEBUG] [Thread-127753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:06:23.271 [DEBUG] [Thread-127753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:06:23.286 [INFO] [Thread-127753] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:06:23.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:06:23.938 [DEBUG] [Thread-127753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:06:23.938 [DEBUG] [Thread-127753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:06:23.938 [DEBUG] [Thread-127753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:06:23.979 [DEBUG] [Thread-127753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:06:23.979 [DEBUG] [Thread-127753] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:06:23.982 [DEBUG] [Thread-127753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:06:23.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:06:23.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:06:23.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:06:23.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:06:24.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:06:24.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:06:24.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.004212 -999.00  +12.90  17.85     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.6 17.9 132.4 25.2 13.2 -24.9 13.2 -24.5 12.9 -22.9 13.2 -23.7
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.004212
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:06:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:06:15', tmtdew=11.25, humidity=46.58, cloud=0.0, wind=21.62, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:06:16', seeing=1.58, atlas_timestamp='2025-12-04T00:06:03.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0182500000000001, -0.043250000000000455, -0.005249999999998423, 0.013499999999998735, -0.033500000000000085, 0.017250000000000654, -0.0754999999999999, -0.0337499999999995, -0.009500000000000952, -0.041499999999999204, -0.043750000000001066, 0.006999999999999673, 0.0649999999999995, -0.019750000000000156, -0.14400000000000013, -0.07250000000000156, -0.010749999999999815, -0.05649999999999977, -0.062000000000001165, 0.0072499999999990905, 0.08449999999999847, 0.04774999999999885, -0.04625000000000057, 0.013250000000001094, 0.016000000000000014, 0.07449999999999868, 0.00975000000000037, 0.01950000000000074, 0.1305000000000014, -0.04499999999999815, -0.17949999999999733, -0.0259999999999998, 0.04274999999999807], zp_timestamp='2025-12-04T00:02:00')
2025-12-04T02:06:24.003 [DEBUG] [Thread-127753] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:06:24.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:06:24.091 [DEBUG] [Thread-127756] [transport.py] [_log()] starting thread (client mode): 0xa2708fd0
2025-12-04T02:06:24.092 [DEBUG] [Thread-127756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:06:24.106 [DEBUG] [Thread-127756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:06:24.106 [INFO] [Thread-127756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:06:24.113 [DEBUG] [Thread-127756] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] client lang: <none>
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] server lang: <none>
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] kex follows: False
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] Compression: none
2025-12-04T02:06:24.114 [DEBUG] [Thread-127756] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:06:24.169 [DEBUG] [Thread-127756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:06:24.169 [DEBUG] [Thread-127756] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:06:24.169 [DEBUG] [Thread-127756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:06:24.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:06:24.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:06:24.226 [DEBUG] [Thread-127756] [transport.py] [_log()] userauth is OK
2025-12-04T02:06:24.226 [DEBUG] [Thread-127756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:06:24.226 [DEBUG] [Thread-127756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:06:24.226 [DEBUG] [Thread-127756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:06:24.226 [DEBUG] [Thread-127756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:06:24.240 [INFO] [Thread-127756] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:06:24.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:06:24.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:06:25.056 [DEBUG] [Thread-127756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:06:25.056 [DEBUG] [Thread-127756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:06:25.103 [DEBUG] [Thread-127756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:06:25.103 [DEBUG] [Thread-127756] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:06:25.112 [DEBUG] [Thread-127756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:06:25.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:06:25.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:06:25.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:06:25.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:06:25.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:06:25.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:06:25.144 [DEBUG] [Thread-127756] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:06:27.061 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:30.221 [DEBUG] [Thread-127758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:38.258 [DEBUG] [Thread-127759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:47.450 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:47.886 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:47.887 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:53.305 [DEBUG] [Thread-127760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:06:55.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:06:55.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:06:55.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:06:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 6, 47), 11.15, 46.72, 0.0, 18.05, 12.68, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:06:55.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:06:47
2025-12-04T02:06:55.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:06:56.098 [DEBUG] [Thread-127761] [transport.py] [_log()] starting thread (client mode): 0xa51d2b60
2025-12-04T02:06:56.098 [DEBUG] [Thread-127761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:06:56.120 [DEBUG] [Thread-127761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:06:56.120 [INFO] [Thread-127761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] client lang: <none>
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] server lang: <none>
2025-12-04T02:06:56.123 [DEBUG] [Thread-127761] [transport.py] [_log()] kex follows: False
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] Compression: none
2025-12-04T02:06:56.124 [DEBUG] [Thread-127761] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:06:56.140 [DEBUG] [Thread-127761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:06:56.140 [DEBUG] [Thread-127761] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:06:56.141 [DEBUG] [Thread-127761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:06:56.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:06:56.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:06:56.143 [DEBUG] [Thread-127761] [transport.py] [_log()] userauth is OK
2025-12-04T02:06:56.143 [DEBUG] [Thread-127761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:06:56.143 [DEBUG] [Thread-127761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:06:56.143 [DEBUG] [Thread-127761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:06:56.143 [DEBUG] [Thread-127761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:06:56.166 [INFO] [Thread-127761] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:06:56.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:06:56.815 [DEBUG] [Thread-127761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:06:56.815 [DEBUG] [Thread-127761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:06:56.815 [DEBUG] [Thread-127761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:06:56.856 [DEBUG] [Thread-127761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:06:56.856 [DEBUG] [Thread-127761] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:06:56.859 [DEBUG] [Thread-127761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:06:56.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:06:56.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:06:56.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:06:56.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:06:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:06:56.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:06:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:06:56.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:06:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:06:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.004559 -999.00  +12.80  14.89     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.8 14.9 145.8 22.4 13.2 -25.0 13.1 -24.5 12.9 -22.8 13.2 -23.8
2025-12-04T02:06:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:06:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:06:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.004559
2025-12-04T02:06:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:06:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:06:56.883 [DEBUG] [Thread-127761] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:06:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:06:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:06:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:06:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:06:47', tmtdew=11.15, humidity=46.72, cloud=0.0, wind=18.05, temperature=12.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:06:48', seeing=1.58, atlas_timestamp='2025-12-04T00:06:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:04:00')
2025-12-04T02:06:56.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:06:56.979 [DEBUG] [Thread-127764] [transport.py] [_log()] starting thread (client mode): 0xa2746ef0
2025-12-04T02:06:56.979 [DEBUG] [Thread-127764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:06:56.994 [DEBUG] [Thread-127764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:06:56.994 [INFO] [Thread-127764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:06:57.001 [DEBUG] [Thread-127764] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:06:57.002 [DEBUG] [Thread-127764] [transport.py] [_log()] client lang: <none>
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] server lang: <none>
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] kex follows: False
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] Compression: none
2025-12-04T02:06:57.003 [DEBUG] [Thread-127764] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:06:57.058 [DEBUG] [Thread-127764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:06:57.058 [DEBUG] [Thread-127764] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:06:57.059 [DEBUG] [Thread-127764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:06:57.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:06:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:06:57.114 [DEBUG] [Thread-127764] [transport.py] [_log()] userauth is OK
2025-12-04T02:06:57.114 [DEBUG] [Thread-127764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:06:57.114 [DEBUG] [Thread-127764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:06:57.114 [DEBUG] [Thread-127764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:06:57.114 [DEBUG] [Thread-127764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:06:57.128 [INFO] [Thread-127764] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:06:57.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:06:57.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:06:57.964 [DEBUG] [Thread-127764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:06:57.964 [DEBUG] [Thread-127764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:06:58.012 [DEBUG] [Thread-127764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:06:58.012 [DEBUG] [Thread-127764] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:06:58.021 [DEBUG] [Thread-127764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:06:58.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:06:58.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:06:58.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:06:58.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:06:58.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:06:58.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:06:58.056 [DEBUG] [Thread-127764] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:07:07.826 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:08.334 [DEBUG] [Thread-127766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:23.375 [DEBUG] [Thread-127767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:28.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:07:28.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:07:28.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:07:28.281 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:28.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 7, 19), 11.11, 46.84, 0.0, 17.49, 12.68, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:07:28.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:07:19
2025-12-04T02:07:28.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:07:29.029 [DEBUG] [Thread-127768] [transport.py] [_log()] starting thread (client mode): 0xa2744340
2025-12-04T02:07:29.030 [DEBUG] [Thread-127768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:07:29.051 [DEBUG] [Thread-127768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:07:29.051 [INFO] [Thread-127768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:07:29.054 [DEBUG] [Thread-127768] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] client lang: <none>
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] server lang: <none>
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] kex follows: False
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] Compression: none
2025-12-04T02:07:29.055 [DEBUG] [Thread-127768] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:07:29.072 [DEBUG] [Thread-127768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:07:29.072 [DEBUG] [Thread-127768] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:07:29.073 [DEBUG] [Thread-127768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:07:29.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:07:29.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:07:29.074 [DEBUG] [Thread-127768] [transport.py] [_log()] userauth is OK
2025-12-04T02:07:29.074 [DEBUG] [Thread-127768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:07:29.074 [DEBUG] [Thread-127768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:07:29.074 [DEBUG] [Thread-127768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:07:29.074 [DEBUG] [Thread-127768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:07:29.087 [INFO] [Thread-127768] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:07:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:07:29.735 [DEBUG] [Thread-127768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:07:29.736 [DEBUG] [Thread-127768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:07:29.736 [DEBUG] [Thread-127768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:07:29.777 [DEBUG] [Thread-127768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:07:29.777 [DEBUG] [Thread-127768] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:07:29.780 [DEBUG] [Thread-127768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:07:29.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:07:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:07:29.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:07:29.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:07:29.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:07:29.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:07:29.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:07:29.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.004907 -999.00  +12.80  21.75     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.4 21.8 133.4 23.7 13.2 -25.0 13.2 -24.7 12.9 -22.8 13.2 -23.7
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.004907
2025-12-04T02:07:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:07:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:07:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:07:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:07:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:07:29.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:07:19', tmtdew=11.11, humidity=46.84, cloud=0.0, wind=17.49, temperature=12.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:07:20', seeing=2.45, atlas_timestamp='2025-12-04T00:07:03.965', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:04:00')
2025-12-04T02:07:29.804 [DEBUG] [Thread-127768] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:07:29.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:07:29.904 [DEBUG] [Thread-127771] [transport.py] [_log()] starting thread (client mode): 0xa51d0eb0
2025-12-04T02:07:29.904 [DEBUG] [Thread-127771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:07:29.919 [DEBUG] [Thread-127771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:07:29.919 [INFO] [Thread-127771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] client lang: <none>
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] server lang: <none>
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] kex follows: False
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:07:29.927 [DEBUG] [Thread-127771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:07:29.928 [DEBUG] [Thread-127771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:07:29.928 [DEBUG] [Thread-127771] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:07:29.928 [DEBUG] [Thread-127771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:07:29.928 [DEBUG] [Thread-127771] [transport.py] [_log()] Compression: none
2025-12-04T02:07:29.928 [DEBUG] [Thread-127771] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:07:29.985 [DEBUG] [Thread-127771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:07:29.986 [DEBUG] [Thread-127771] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:07:29.986 [DEBUG] [Thread-127771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:07:29.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:07:29.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:07:30.045 [DEBUG] [Thread-127771] [transport.py] [_log()] userauth is OK
2025-12-04T02:07:30.045 [DEBUG] [Thread-127771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:07:30.045 [DEBUG] [Thread-127771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:07:30.045 [DEBUG] [Thread-127771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:07:30.045 [DEBUG] [Thread-127771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:07:30.064 [INFO] [Thread-127771] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:07:30.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:07:30.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:07:30.300 [DEBUG] [Thread-127773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:30.903 [DEBUG] [Thread-127771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:07:30.903 [DEBUG] [Thread-127771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:07:30.952 [DEBUG] [Thread-127771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:07:30.952 [DEBUG] [Thread-127771] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:07:30.961 [DEBUG] [Thread-127771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:07:30.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:07:30.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:07:30.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:07:30.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:07:30.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:07:30.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:07:30.995 [DEBUG] [Thread-127771] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:07:38.403 [DEBUG] [Thread-127774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:48.084 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:48.086 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:48.676 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:07:53.433 [DEBUG] [Thread-127775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:01.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:08:01.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:08:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 7, 51), 11.02, 46.97, 0.0, 23.66, 12.68, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:08:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:07:51
2025-12-04T02:08:01.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:08:01.965 [DEBUG] [Thread-127776] [transport.py] [_log()] starting thread (client mode): 0xa2746560
2025-12-04T02:08:01.965 [DEBUG] [Thread-127776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:08:01.985 [DEBUG] [Thread-127776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:08:01.985 [INFO] [Thread-127776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:08:01.988 [DEBUG] [Thread-127776] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:08:01.988 [DEBUG] [Thread-127776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:08:01.988 [DEBUG] [Thread-127776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] client lang: <none>
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] server lang: <none>
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] kex follows: False
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:08:01.989 [DEBUG] [Thread-127776] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:08:01.990 [DEBUG] [Thread-127776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:08:01.990 [DEBUG] [Thread-127776] [transport.py] [_log()] Compression: none
2025-12-04T02:08:01.990 [DEBUG] [Thread-127776] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:08:02.007 [DEBUG] [Thread-127776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:08:02.008 [DEBUG] [Thread-127776] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:08:02.008 [DEBUG] [Thread-127776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:08:02.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:08:02.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:08:02.010 [DEBUG] [Thread-127776] [transport.py] [_log()] userauth is OK
2025-12-04T02:08:02.010 [DEBUG] [Thread-127776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:08:02.010 [DEBUG] [Thread-127776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:08:02.010 [DEBUG] [Thread-127776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:08:02.010 [DEBUG] [Thread-127776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:08:02.033 [INFO] [Thread-127776] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:08:02.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:08:02.658 [DEBUG] [Thread-127776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:08:02.658 [DEBUG] [Thread-127776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:08:02.659 [DEBUG] [Thread-127776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:08:02.699 [DEBUG] [Thread-127776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:08:02.699 [DEBUG] [Thread-127776] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:08:02.701 [DEBUG] [Thread-127776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:08:02.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:08:02.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:08:02.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:08:02.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:08:02.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:08:02.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:08:02.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:08:02.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:08:02.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:08:02.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.005253 -999.00  +12.80  22.32     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 20.4 22.3 129.8 25.6 13.2 -25.0 13.1 -24.5 12.9 -22.8 13.2 -23.8
2025-12-04T02:08:02.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:08:02.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:08:02.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.005253
2025-12-04T02:08:02.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:08:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:08:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:08:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:08:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:08:02.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:07:51', tmtdew=11.02, humidity=46.97, cloud=0.0, wind=23.66, temperature=12.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:07:52', seeing=2.42, atlas_timestamp='2025-12-04T00:07:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:04:00')
2025-12-04T02:08:02.724 [DEBUG] [Thread-127776] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:08:02.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:08:02.820 [DEBUG] [Thread-127779] [transport.py] [_log()] starting thread (client mode): 0xa27462c0
2025-12-04T02:08:02.821 [DEBUG] [Thread-127779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:08:02.835 [DEBUG] [Thread-127779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:08:02.836 [INFO] [Thread-127779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:08:02.843 [DEBUG] [Thread-127779] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:08:02.843 [DEBUG] [Thread-127779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:08:02.843 [DEBUG] [Thread-127779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] client lang: <none>
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] server lang: <none>
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] kex follows: False
2025-12-04T02:08:02.844 [DEBUG] [Thread-127779] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] Compression: none
2025-12-04T02:08:02.845 [DEBUG] [Thread-127779] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:08:02.902 [DEBUG] [Thread-127779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:08:02.903 [DEBUG] [Thread-127779] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:08:02.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:08:02.904 [DEBUG] [Thread-127779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:08:02.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:08:02.958 [DEBUG] [Thread-127779] [transport.py] [_log()] userauth is OK
2025-12-04T02:08:02.958 [DEBUG] [Thread-127779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:08:02.958 [DEBUG] [Thread-127779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:08:02.958 [DEBUG] [Thread-127779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:08:02.958 [DEBUG] [Thread-127779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:08:02.980 [INFO] [Thread-127779] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:08:02.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:08:02.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:08:03.805 [DEBUG] [Thread-127779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:08:03.805 [DEBUG] [Thread-127779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:08:03.853 [DEBUG] [Thread-127779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:08:03.853 [DEBUG] [Thread-127779] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:08:03.862 [DEBUG] [Thread-127779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:08:03.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:08:03.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:08:03.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:08:03.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:08:03.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:08:03.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:08:03.896 [DEBUG] [Thread-127779] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:08:08.464 [DEBUG] [Thread-127781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:09.084 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:23.504 [DEBUG] [Thread-127782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:29.473 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:30.369 [DEBUG] [Thread-127783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:33.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:08:33.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:08:33.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:08:34.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 8, 24), 10.99, 47.07, 0.0, 23.1, 12.66, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:08:34.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:08:24
2025-12-04T02:08:34.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:08:34.858 [DEBUG] [Thread-127784] [transport.py] [_log()] starting thread (client mode): 0xa2709660
2025-12-04T02:08:34.858 [DEBUG] [Thread-127784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:08:34.879 [DEBUG] [Thread-127784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:08:34.879 [INFO] [Thread-127784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] client lang: <none>
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] server lang: <none>
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] kex follows: False
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:08:34.882 [DEBUG] [Thread-127784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:08:34.883 [DEBUG] [Thread-127784] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:08:34.883 [DEBUG] [Thread-127784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:08:34.883 [DEBUG] [Thread-127784] [transport.py] [_log()] Compression: none
2025-12-04T02:08:34.883 [DEBUG] [Thread-127784] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:08:34.900 [DEBUG] [Thread-127784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:08:34.901 [DEBUG] [Thread-127784] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:08:34.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:08:34.902 [DEBUG] [Thread-127784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:08:34.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:08:34.904 [DEBUG] [Thread-127784] [transport.py] [_log()] userauth is OK
2025-12-04T02:08:34.904 [DEBUG] [Thread-127784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:08:34.905 [DEBUG] [Thread-127784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:08:34.905 [DEBUG] [Thread-127784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:08:34.905 [DEBUG] [Thread-127784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:08:34.940 [INFO] [Thread-127784] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:08:34.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:08:35.589 [DEBUG] [Thread-127784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:08:35.589 [DEBUG] [Thread-127784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:08:35.590 [DEBUG] [Thread-127784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:08:35.631 [DEBUG] [Thread-127784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:08:35.631 [DEBUG] [Thread-127784] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:08:35.634 [DEBUG] [Thread-127784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:08:35.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:08:35.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:08:35.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:08:35.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:08:35.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:08:35.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:08:35.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:08:35.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.005600 -999.00  +12.80  17.42     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.7 17.4 137.4 24.2 13.2 -25.0 13.1 -24.4 12.9 -22.8 13.2 -23.8
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.005600
2025-12-04T02:08:35.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:08:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:08:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:08:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:08:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:08:35.657 [DEBUG] [Thread-127784] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:08:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:08:24', tmtdew=10.99, humidity=47.07, cloud=0.0, wind=23.1, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:08:24', seeing=1.75, atlas_timestamp='2025-12-04T00:08:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:04:00')
2025-12-04T02:08:35.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:08:35.754 [DEBUG] [Thread-127787] [transport.py] [_log()] starting thread (client mode): 0xa27080a0
2025-12-04T02:08:35.754 [DEBUG] [Thread-127787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:08:35.770 [DEBUG] [Thread-127787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:08:35.770 [INFO] [Thread-127787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:08:35.778 [DEBUG] [Thread-127787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] client lang: <none>
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] server lang: <none>
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] kex follows: False
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] Compression: none
2025-12-04T02:08:35.779 [DEBUG] [Thread-127787] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:08:35.837 [DEBUG] [Thread-127787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:08:35.838 [DEBUG] [Thread-127787] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:08:35.838 [DEBUG] [Thread-127787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:08:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:08:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:08:35.893 [DEBUG] [Thread-127787] [transport.py] [_log()] userauth is OK
2025-12-04T02:08:35.894 [DEBUG] [Thread-127787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:08:35.894 [DEBUG] [Thread-127787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:08:35.894 [DEBUG] [Thread-127787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:08:35.894 [DEBUG] [Thread-127787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:08:35.913 [INFO] [Thread-127787] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:08:35.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:08:35.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:08:36.764 [DEBUG] [Thread-127787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:08:36.764 [DEBUG] [Thread-127787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:08:36.812 [DEBUG] [Thread-127787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:08:36.812 [DEBUG] [Thread-127787] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:08:36.820 [DEBUG] [Thread-127787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:08:36.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:08:36.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:08:36.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:08:36.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:08:36.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:08:36.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:08:36.855 [DEBUG] [Thread-127787] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:08:38.538 [DEBUG] [Thread-127789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:48.289 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:48.290 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:49.844 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:08:53.580 [DEBUG] [Thread-127790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:06.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:09:06.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:09:06.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:09:07.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 8, 56), 10.99, 47.09, 0.0, 20.06, 12.66, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:09:07.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:08:56
2025-12-04T02:09:07.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:09:07.822 [DEBUG] [Thread-127791] [transport.py] [_log()] starting thread (client mode): 0xa51d2200
2025-12-04T02:09:07.823 [DEBUG] [Thread-127791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:09:07.841 [DEBUG] [Thread-127791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:09:07.842 [INFO] [Thread-127791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:09:07.843 [DEBUG] [Thread-127791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] client lang: <none>
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] server lang: <none>
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] kex follows: False
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] Compression: none
2025-12-04T02:09:07.844 [DEBUG] [Thread-127791] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:09:07.856 [DEBUG] [Thread-127791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:09:07.856 [DEBUG] [Thread-127791] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:09:07.857 [DEBUG] [Thread-127791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:09:07.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:09:07.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:09:07.859 [DEBUG] [Thread-127791] [transport.py] [_log()] userauth is OK
2025-12-04T02:09:07.859 [DEBUG] [Thread-127791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:09:07.859 [DEBUG] [Thread-127791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:09:07.859 [DEBUG] [Thread-127791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:09:07.859 [DEBUG] [Thread-127791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:09:07.872 [INFO] [Thread-127791] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:09:07.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:09:08.428 [DEBUG] [Thread-127791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:09:08.428 [DEBUG] [Thread-127791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:09:08.428 [DEBUG] [Thread-127791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:09:08.469 [DEBUG] [Thread-127791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:09:08.469 [DEBUG] [Thread-127791] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:09:08.471 [DEBUG] [Thread-127791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:09:08.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:09:08.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:09:08.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:09:08.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:09:08.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:09:08.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:09:08.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.005948 -999.00  +12.80  12.59     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.8 12.6 152.4 21.4 13.2 -25.1 13.1 -24.7 12.9 -23.0 13.2 -23.9
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:09:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.005948
2025-12-04T02:09:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:09:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:09:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:09:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:09:08.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:09:08.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:08:56', tmtdew=10.99, humidity=47.09, cloud=0.0, wind=20.06, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:08:56', seeing=1.79, atlas_timestamp='2025-12-04T00:08:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:04:00')
2025-12-04T02:09:08.496 [DEBUG] [Thread-127791] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:09:08.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:09:08.591 [DEBUG] [Thread-127794] [transport.py] [_log()] starting thread (client mode): 0xa2787490
2025-12-04T02:09:08.591 [DEBUG] [Thread-127794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:09:08.605 [DEBUG] [Thread-127795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:08.607 [DEBUG] [Thread-127794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:09:08.607 [INFO] [Thread-127794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] client lang: <none>
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] server lang: <none>
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] kex follows: False
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:09:08.615 [DEBUG] [Thread-127794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:09:08.616 [DEBUG] [Thread-127794] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:09:08.616 [DEBUG] [Thread-127794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:09:08.616 [DEBUG] [Thread-127794] [transport.py] [_log()] Compression: none
2025-12-04T02:09:08.616 [DEBUG] [Thread-127794] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:09:08.673 [DEBUG] [Thread-127794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:09:08.673 [DEBUG] [Thread-127794] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:09:08.674 [DEBUG] [Thread-127794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:09:08.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:09:08.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:09:08.729 [DEBUG] [Thread-127794] [transport.py] [_log()] userauth is OK
2025-12-04T02:09:08.730 [DEBUG] [Thread-127794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:09:08.730 [DEBUG] [Thread-127794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:09:08.730 [DEBUG] [Thread-127794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:09:08.730 [DEBUG] [Thread-127794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:09:08.749 [INFO] [Thread-127794] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:09:08.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:09:08.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:09:09.576 [DEBUG] [Thread-127794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:09:09.576 [DEBUG] [Thread-127794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:09:09.624 [DEBUG] [Thread-127794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:09:09.624 [DEBUG] [Thread-127794] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:09:09.633 [DEBUG] [Thread-127794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:09:09.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:09:09.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:09:09.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:09:09.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:09:09.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:09:09.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:09:09.671 [DEBUG] [Thread-127794] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:09:10.226 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:23.644 [DEBUG] [Thread-127797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:30.435 [DEBUG] [Thread-127798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:30.608 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:38.670 [DEBUG] [Thread-127799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:09:39.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:09:39.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:09:40.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 9, 28), 11.01, 47.01, 0.0, 20.59, 12.71, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:09:40.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:09:28
2025-12-04T02:09:40.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:09:40.634 [DEBUG] [Thread-127800] [transport.py] [_log()] starting thread (client mode): 0xa2709c60
2025-12-04T02:09:40.634 [DEBUG] [Thread-127800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:09:40.655 [DEBUG] [Thread-127800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:09:40.655 [INFO] [Thread-127800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:09:40.658 [DEBUG] [Thread-127800] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:09:40.658 [DEBUG] [Thread-127800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] client lang: <none>
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] server lang: <none>
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] kex follows: False
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] Compression: none
2025-12-04T02:09:40.659 [DEBUG] [Thread-127800] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:09:40.676 [DEBUG] [Thread-127800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:09:40.677 [DEBUG] [Thread-127800] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:09:40.678 [DEBUG] [Thread-127800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:09:40.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:09:40.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:09:40.679 [DEBUG] [Thread-127800] [transport.py] [_log()] userauth is OK
2025-12-04T02:09:40.680 [DEBUG] [Thread-127800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:09:40.680 [DEBUG] [Thread-127800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:09:40.680 [DEBUG] [Thread-127800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:09:40.680 [DEBUG] [Thread-127800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:09:40.697 [INFO] [Thread-127800] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:09:40.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:09:41.269 [DEBUG] [Thread-127800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:09:41.270 [DEBUG] [Thread-127800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:09:41.270 [DEBUG] [Thread-127800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:09:41.311 [DEBUG] [Thread-127800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:09:41.311 [DEBUG] [Thread-127800] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:09:41.314 [DEBUG] [Thread-127800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:09:41.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:09:41.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:09:41.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:09:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:09:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:09:41.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:09:41.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:09:41.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.006642 -999.00  +12.80  15.15     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.9 15.2 133.0 21.4 13.2 -25.0 13.1 -24.5 12.9 -23.0 13.2 -23.7
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.006642
2025-12-04T02:09:41.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:09:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:09:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:09:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:09:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:09:41.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:09:28', tmtdew=11.01, humidity=47.01, cloud=0.0, wind=20.59, temperature=12.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:09:28', seeing=1.87, atlas_timestamp='2025-12-04T00:09:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:09:41.338 [DEBUG] [Thread-127800] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:09:41.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:09:41.439 [DEBUG] [Thread-127803] [transport.py] [_log()] starting thread (client mode): 0xa51d20e0
2025-12-04T02:09:41.439 [DEBUG] [Thread-127803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:09:41.455 [DEBUG] [Thread-127803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:09:41.455 [INFO] [Thread-127803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:09:41.462 [DEBUG] [Thread-127803] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:09:41.462 [DEBUG] [Thread-127803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:09:41.462 [DEBUG] [Thread-127803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:09:41.462 [DEBUG] [Thread-127803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] client lang: <none>
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] server lang: <none>
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] kex follows: False
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] Compression: none
2025-12-04T02:09:41.463 [DEBUG] [Thread-127803] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:09:41.520 [DEBUG] [Thread-127803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:09:41.521 [DEBUG] [Thread-127803] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:09:41.521 [DEBUG] [Thread-127803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:09:41.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:09:41.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:09:41.577 [DEBUG] [Thread-127803] [transport.py] [_log()] userauth is OK
2025-12-04T02:09:41.577 [DEBUG] [Thread-127803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:09:41.577 [DEBUG] [Thread-127803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:09:41.578 [DEBUG] [Thread-127803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:09:41.578 [DEBUG] [Thread-127803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:09:41.597 [INFO] [Thread-127803] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:09:41.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:09:41.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:09:42.453 [DEBUG] [Thread-127803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:09:42.453 [DEBUG] [Thread-127803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:09:42.502 [DEBUG] [Thread-127803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:09:42.502 [DEBUG] [Thread-127803] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:09:42.511 [DEBUG] [Thread-127803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:09:42.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:09:42.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:09:42.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:09:42.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:09:42.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:09:42.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:09:42.546 [DEBUG] [Thread-127803] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:09:48.488 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:48.489 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:51.001 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:09:53.694 [DEBUG] [Thread-127805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:08.742 [DEBUG] [Thread-127806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:11.372 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:12.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:10:12.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:10:12.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:10:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 9, 28), 10.96, 47.01, 0.0, 20.59, 12.66, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:10:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:09:28
2025-12-04T02:10:13.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:10:13.552 [DEBUG] [Thread-127807] [transport.py] [_log()] starting thread (client mode): 0xa2747fa0
2025-12-04T02:10:13.552 [DEBUG] [Thread-127807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:10:13.573 [DEBUG] [Thread-127807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:10:13.573 [INFO] [Thread-127807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:10:13.574 [DEBUG] [Thread-127807] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] client lang: <none>
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] server lang: <none>
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] kex follows: False
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] Compression: none
2025-12-04T02:10:13.575 [DEBUG] [Thread-127807] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:10:13.586 [DEBUG] [Thread-127807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:10:13.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:10:13.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] userauth is OK
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:10:13.587 [DEBUG] [Thread-127807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:10:13.597 [INFO] [Thread-127807] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:10:13.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:10:14.257 [DEBUG] [Thread-127807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:10:14.257 [DEBUG] [Thread-127807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:10:14.257 [DEBUG] [Thread-127807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:10:14.297 [DEBUG] [Thread-127807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:10:14.297 [DEBUG] [Thread-127807] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:10:14.299 [DEBUG] [Thread-127807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:10:14.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:10:14.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:10:14.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:10:14.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:10:14.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:10:14.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:10:14.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.006642 -999.00  +12.80  15.15     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.9 15.2 133.0 21.4 13.2 -25.0 13.1 -24.5 12.9 -23.0 13.2 -23.7
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.006642
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:10:14.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:09:28', tmtdew=10.96, humidity=47.01, cloud=0.0, wind=20.59, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:10:00', seeing=2.15, atlas_timestamp='2025-12-04T00:09:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:10:14.317 [DEBUG] [Thread-127807] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:10:14.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:10:14.404 [DEBUG] [Thread-127810] [transport.py] [_log()] starting thread (client mode): 0xa51ceb90
2025-12-04T02:10:14.404 [DEBUG] [Thread-127810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:10:14.419 [DEBUG] [Thread-127810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:10:14.419 [INFO] [Thread-127810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] client lang: <none>
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] server lang: <none>
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] kex follows: False
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] Compression: none
2025-12-04T02:10:14.427 [DEBUG] [Thread-127810] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:10:14.483 [DEBUG] [Thread-127810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:10:14.483 [DEBUG] [Thread-127810] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:10:14.484 [DEBUG] [Thread-127810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:10:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:10:14.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:10:14.545 [DEBUG] [Thread-127810] [transport.py] [_log()] userauth is OK
2025-12-04T02:10:14.545 [DEBUG] [Thread-127810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:10:14.545 [DEBUG] [Thread-127810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:10:14.545 [DEBUG] [Thread-127810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:10:14.545 [DEBUG] [Thread-127810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:10:14.562 [INFO] [Thread-127810] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:10:14.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:10:14.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:10:15.712 [DEBUG] [Thread-127810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:10:15.712 [DEBUG] [Thread-127810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:10:15.759 [DEBUG] [Thread-127810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:10:15.759 [DEBUG] [Thread-127810] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:10:15.768 [DEBUG] [Thread-127810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:10:15.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:10:15.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:10:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:10:15.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:10:15.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:10:15.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:10:15.799 [DEBUG] [Thread-127810] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:10:23.767 [DEBUG] [Thread-127812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:30.493 [DEBUG] [Thread-127813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:31.752 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:38.808 [DEBUG] [Thread-127814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:45.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:10:45.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:10:45.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:10:46.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 10, 32), 11.0, 46.87, 0.0, 20.41, 12.66, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:10:46.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:10:32
2025-12-04T02:10:46.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:10:46.766 [DEBUG] [Thread-127815] [transport.py] [_log()] starting thread (client mode): 0xa270ae00
2025-12-04T02:10:46.767 [DEBUG] [Thread-127815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:10:46.787 [DEBUG] [Thread-127815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:10:46.788 [INFO] [Thread-127815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] client lang: <none>
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] server lang: <none>
2025-12-04T02:10:46.791 [DEBUG] [Thread-127815] [transport.py] [_log()] kex follows: False
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] Compression: none
2025-12-04T02:10:46.792 [DEBUG] [Thread-127815] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:10:46.811 [DEBUG] [Thread-127815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:10:46.811 [DEBUG] [Thread-127815] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:10:46.812 [DEBUG] [Thread-127815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:10:46.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:10:46.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:10:46.814 [DEBUG] [Thread-127815] [transport.py] [_log()] userauth is OK
2025-12-04T02:10:46.814 [DEBUG] [Thread-127815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:10:46.814 [DEBUG] [Thread-127815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:10:46.814 [DEBUG] [Thread-127815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:10:46.814 [DEBUG] [Thread-127815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:10:46.829 [INFO] [Thread-127815] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:10:46.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:10:47.471 [DEBUG] [Thread-127815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:10:47.471 [DEBUG] [Thread-127815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:10:47.471 [DEBUG] [Thread-127815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:10:47.512 [DEBUG] [Thread-127815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:10:47.512 [DEBUG] [Thread-127815] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:10:47.515 [DEBUG] [Thread-127815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:10:47.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:10:47.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:10:47.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:10:47.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:10:47.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:10:47.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:10:47.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:10:47.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:10:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:10:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.006990 -999.00  +12.80  21.62     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 22.1 21.6 138.4 25.2 13.2 -24.9 13.1 -24.4 12.9 -22.8 13.2 -23.9
2025-12-04T02:10:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:10:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:10:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.006990
2025-12-04T02:10:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:10:47.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:10:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:10:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:10:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:10:47.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:10:32', tmtdew=11.0, humidity=46.87, cloud=0.0, wind=20.41, temperature=12.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:10:32', seeing=2.15, atlas_timestamp='2025-12-04T00:10:03.936', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:10:47.541 [DEBUG] [Thread-127815] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:10:47.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:10:47.641 [DEBUG] [Thread-127818] [transport.py] [_log()] starting thread (client mode): 0xa2784640
2025-12-04T02:10:47.642 [DEBUG] [Thread-127818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:10:47.659 [DEBUG] [Thread-127818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:10:47.659 [INFO] [Thread-127818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:10:47.669 [DEBUG] [Thread-127818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] client lang: <none>
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] server lang: <none>
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] kex follows: False
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] Compression: none
2025-12-04T02:10:47.670 [DEBUG] [Thread-127818] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:10:47.725 [DEBUG] [Thread-127818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:10:47.725 [DEBUG] [Thread-127818] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:10:47.726 [DEBUG] [Thread-127818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:10:47.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:10:47.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:10:47.788 [DEBUG] [Thread-127818] [transport.py] [_log()] userauth is OK
2025-12-04T02:10:47.788 [DEBUG] [Thread-127818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:10:47.788 [DEBUG] [Thread-127818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:10:47.789 [DEBUG] [Thread-127818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:10:47.789 [DEBUG] [Thread-127818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:10:47.812 [INFO] [Thread-127818] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:10:47.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:10:47.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:10:48.694 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:48.695 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:49.158 [DEBUG] [Thread-127818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:10:49.158 [DEBUG] [Thread-127818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:10:49.209 [DEBUG] [Thread-127818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:10:49.210 [DEBUG] [Thread-127818] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:10:49.222 [DEBUG] [Thread-127818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:10:49.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:10:49.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:10:49.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:10:49.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:10:49.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:10:49.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:10:49.259 [DEBUG] [Thread-127818] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:10:52.286 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:10:53.837 [DEBUG] [Thread-127820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:08.873 [DEBUG] [Thread-127821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:12.735 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:19.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:11:19.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:11:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:11:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 11, 4), 10.99, 46.91, 0.0, 20.75, 12.65, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:11:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:11:04
2025-12-04T02:11:20.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:11:20.218 [DEBUG] [Thread-127822] [transport.py] [_log()] starting thread (client mode): 0xa519b1f0
2025-12-04T02:11:20.218 [DEBUG] [Thread-127822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:11:20.239 [DEBUG] [Thread-127822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:11:20.239 [INFO] [Thread-127822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:20.240 [DEBUG] [Thread-127822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] client lang: <none>
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] server lang: <none>
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] kex follows: False
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] Compression: none
2025-12-04T02:11:20.241 [DEBUG] [Thread-127822] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:11:20.252 [DEBUG] [Thread-127822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:11:20.253 [DEBUG] [Thread-127822] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:11:20.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:11:20.254 [DEBUG] [Thread-127822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:11:20.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:11:20.255 [DEBUG] [Thread-127822] [transport.py] [_log()] userauth is OK
2025-12-04T02:11:20.256 [DEBUG] [Thread-127822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:11:20.256 [DEBUG] [Thread-127822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:11:20.256 [DEBUG] [Thread-127822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:11:20.256 [DEBUG] [Thread-127822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:11:20.274 [INFO] [Thread-127822] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:11:20.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:11:20.941 [DEBUG] [Thread-127822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:11:20.941 [DEBUG] [Thread-127822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:11:20.941 [DEBUG] [Thread-127822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:11:20.982 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:11:20.982 [DEBUG] [Thread-127822] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:11:20.985 [DEBUG] [Thread-127822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:11:20.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:11:20.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:11:21.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:11:21.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:11:21.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:11:21.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:11:21.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:11:21.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.007337 -999.00  +12.80  21.78     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.1 21.8 141.2 27.2 13.2 -25.0 13.1 -24.5 12.9 -22.8 13.2 -23.6
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.007337
2025-12-04T02:11:21.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:11:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:11:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:11:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:11:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:11:21.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:11:04', tmtdew=10.99, humidity=46.91, cloud=0.0, wind=20.75, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:11:04', seeing=1.66, atlas_timestamp='2025-12-04T00:10:33.917', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:11:21.011 [DEBUG] [Thread-127822] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:11:21.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:11:21.110 [DEBUG] [Thread-127825] [transport.py] [_log()] starting thread (client mode): 0xa5199c60
2025-12-04T02:11:21.110 [DEBUG] [Thread-127825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:11:21.134 [DEBUG] [Thread-127825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:11:21.134 [INFO] [Thread-127825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:11:21.145 [DEBUG] [Thread-127825] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] client lang: <none>
2025-12-04T02:11:21.146 [DEBUG] [Thread-127825] [transport.py] [_log()] server lang: <none>
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] kex follows: False
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] Compression: none
2025-12-04T02:11:21.147 [DEBUG] [Thread-127825] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:11:21.204 [DEBUG] [Thread-127825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:11:21.204 [DEBUG] [Thread-127825] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:11:21.205 [DEBUG] [Thread-127825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:11:21.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:11:21.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:11:21.260 [DEBUG] [Thread-127825] [transport.py] [_log()] userauth is OK
2025-12-04T02:11:21.261 [DEBUG] [Thread-127825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:11:21.261 [DEBUG] [Thread-127825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:11:21.261 [DEBUG] [Thread-127825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:11:21.261 [DEBUG] [Thread-127825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:11:21.282 [INFO] [Thread-127825] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:11:21.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:11:21.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:11:22.438 [DEBUG] [Thread-127825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:11:22.438 [DEBUG] [Thread-127825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:11:22.486 [DEBUG] [Thread-127825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:11:22.486 [DEBUG] [Thread-127825] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:11:22.495 [DEBUG] [Thread-127825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:11:22.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:11:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:11:22.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:11:22.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:11:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:11:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:11:22.530 [DEBUG] [Thread-127825] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:11:23.902 [DEBUG] [Thread-127827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:30.546 [DEBUG] [Thread-127828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:33.276 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:38.954 [DEBUG] [Thread-127829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:48.895 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:48.897 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:52.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:11:52.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:11:52.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:11:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 11, 36), 10.96, 47.01, 0.0, 20.1, 12.63, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:11:53.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:11:36
2025-12-04T02:11:53.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:11:53.515 [DEBUG] [Thread-127830] [transport.py] [_log()] starting thread (client mode): 0xa51d1b10
2025-12-04T02:11:53.515 [DEBUG] [Thread-127830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:11:53.535 [DEBUG] [Thread-127830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:11:53.536 [INFO] [Thread-127830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] client lang: <none>
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] server lang: <none>
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] kex follows: False
2025-12-04T02:11:53.539 [DEBUG] [Thread-127830] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] Compression: none
2025-12-04T02:11:53.540 [DEBUG] [Thread-127830] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:11:53.559 [DEBUG] [Thread-127830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:11:53.559 [DEBUG] [Thread-127830] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:11:53.560 [DEBUG] [Thread-127830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:11:53.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:11:53.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:11:53.601 [DEBUG] [Thread-127830] [transport.py] [_log()] userauth is OK
2025-12-04T02:11:53.601 [DEBUG] [Thread-127830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:11:53.601 [DEBUG] [Thread-127830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:11:53.601 [DEBUG] [Thread-127830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:11:53.601 [DEBUG] [Thread-127830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:11:53.636 [INFO] [Thread-127830] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:11:53.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:11:53.711 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:53.982 [DEBUG] [Thread-127832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:11:54.299 [DEBUG] [Thread-127830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:11:54.300 [DEBUG] [Thread-127830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:11:54.300 [DEBUG] [Thread-127830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:11:54.341 [DEBUG] [Thread-127830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:11:54.341 [DEBUG] [Thread-127830] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:11:54.344 [DEBUG] [Thread-127830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:11:54.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:11:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:11:54.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:11:54.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:11:54.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:11:54.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:11:54.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:11:54.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:11:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:11:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.007684 -999.00  +12.80  17.38     51   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.2 17.4 136.4 22.9 13.2 -25.2 13.1 -24.5 12.9 -22.9 13.1 -23.8
2025-12-04T02:11:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:11:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:11:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.007684
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:11:54.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:11:36', tmtdew=10.96, humidity=47.01, cloud=0.0, wind=20.1, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:11:36', seeing=1.74, atlas_timestamp='2025-12-04T00:11:03.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:11:54.369 [DEBUG] [Thread-127830] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:11:54.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:11:54.476 [DEBUG] [Thread-127834] [transport.py] [_log()] starting thread (client mode): 0xa2746f50
2025-12-04T02:11:54.476 [DEBUG] [Thread-127834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:11:54.491 [DEBUG] [Thread-127834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:11:54.491 [INFO] [Thread-127834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] client lang: <none>
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] server lang: <none>
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] kex follows: False
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:11:54.499 [DEBUG] [Thread-127834] [transport.py] [_log()] Compression: none
2025-12-04T02:11:54.500 [DEBUG] [Thread-127834] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:11:54.560 [DEBUG] [Thread-127834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:11:54.560 [DEBUG] [Thread-127834] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:11:54.561 [DEBUG] [Thread-127834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:11:54.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:11:54.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:11:54.617 [DEBUG] [Thread-127834] [transport.py] [_log()] userauth is OK
2025-12-04T02:11:54.618 [DEBUG] [Thread-127834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:11:54.618 [DEBUG] [Thread-127834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:11:54.618 [DEBUG] [Thread-127834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:11:54.618 [DEBUG] [Thread-127834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:11:54.640 [INFO] [Thread-127834] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:11:54.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:11:54.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:11:55.090 [DEBUG] [Thread-127834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:11:55.090 [DEBUG] [Thread-127834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:11:55.138 [DEBUG] [Thread-127834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:11:55.138 [DEBUG] [Thread-127834] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:11:55.147 [DEBUG] [Thread-127834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:11:55.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:11:55.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:11:55.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:11:55.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:11:55.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:11:55.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:11:55.180 [DEBUG] [Thread-127834] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:12:09.014 [DEBUG] [Thread-127836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:14.156 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:24.051 [DEBUG] [Thread-127837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:25.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:12:25.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:12:25.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:12:25.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 12, 8), 10.94, 47.07, 0.0, 20.7, 12.6, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:12:25.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:12:08
2025-12-04T02:12:25.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:12:26.134 [DEBUG] [Thread-127838] [transport.py] [_log()] starting thread (client mode): 0xa519b550
2025-12-04T02:12:26.134 [DEBUG] [Thread-127838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:12:26.146 [DEBUG] [Thread-127838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:12:26.146 [INFO] [Thread-127838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] client lang: <none>
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] server lang: <none>
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] kex follows: False
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] Compression: none
2025-12-04T02:12:26.148 [DEBUG] [Thread-127838] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:12:26.158 [DEBUG] [Thread-127838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:12:26.158 [DEBUG] [Thread-127838] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:12:26.158 [DEBUG] [Thread-127838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:12:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:12:26.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:12:26.159 [DEBUG] [Thread-127838] [transport.py] [_log()] userauth is OK
2025-12-04T02:12:26.160 [DEBUG] [Thread-127838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:12:26.160 [DEBUG] [Thread-127838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:12:26.160 [DEBUG] [Thread-127838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:12:26.160 [DEBUG] [Thread-127838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:12:26.174 [INFO] [Thread-127838] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:12:26.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:12:26.862 [DEBUG] [Thread-127838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:12:26.862 [DEBUG] [Thread-127838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:12:26.863 [DEBUG] [Thread-127838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:12:26.903 [DEBUG] [Thread-127838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:12:26.903 [DEBUG] [Thread-127838] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:12:26.906 [DEBUG] [Thread-127838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:12:26.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:12:26.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:12:26.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:12:26.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:12:26.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:12:26.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:12:26.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:12:26.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:12:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:12:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.008031 -999.00  +12.70  15.26     51   +3.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.5 15.3 139.0 20.4 13.2 -25.1 -999.0 -999.0 12.9 -23.0 13.2 -23.9
2025-12-04T02:12:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:12:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:12:26.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.008031
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:12:26.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:12:08', tmtdew=10.94, humidity=47.07, cloud=0.0, wind=20.7, temperature=12.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:12:08', seeing=2.14, atlas_timestamp='2025-12-04T00:11:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0002500000000011937, -0.032249999999999446, 0.026250000000000995, -0.03049999999999997, -0.07249999999999979, 0.03675000000000139, -0.057000000000000384, -0.023749999999999716, -0.009500000000000952, -0.012000000000000455, -0.014750000000001151, 0.0, 0.032999999999999474, 0.009249999999999758, -0.12950000000000017, -0.05799999999999983, 0.0072499999999990905, -0.020500000000000185, -0.06800000000000139, -0.013250000000001094, 0.08849999999999802, -0.015250000000001762, -0.01774999999999949, -0.008250000000000313, 0.01899999999999835, 0.024499999999999744, 0.00274999999999892, 0.0625, 0.1349999999999998, 0.004000000000001336, -0.11199999999999832, -0.0129999999999999, 0.025249999999999773], zp_timestamp='2025-12-04T00:08:00')
2025-12-04T02:12:26.931 [DEBUG] [Thread-127838] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:12:27.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:12:27.026 [DEBUG] [Thread-127841] [transport.py] [_log()] starting thread (client mode): 0xa27844f0
2025-12-04T02:12:27.026 [DEBUG] [Thread-127841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:12:27.044 [DEBUG] [Thread-127841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:12:27.044 [INFO] [Thread-127841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:12:27.052 [DEBUG] [Thread-127841] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:12:27.053 [DEBUG] [Thread-127841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] client lang: <none>
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] server lang: <none>
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] kex follows: False
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:12:27.054 [DEBUG] [Thread-127841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:12:27.055 [DEBUG] [Thread-127841] [transport.py] [_log()] Compression: none
2025-12-04T02:12:27.055 [DEBUG] [Thread-127841] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:12:27.114 [DEBUG] [Thread-127841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:12:27.115 [DEBUG] [Thread-127841] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:12:27.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:12:27.116 [DEBUG] [Thread-127841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:12:27.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:12:27.172 [DEBUG] [Thread-127841] [transport.py] [_log()] userauth is OK
2025-12-04T02:12:27.172 [DEBUG] [Thread-127841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:12:27.172 [DEBUG] [Thread-127841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:12:27.172 [DEBUG] [Thread-127841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:12:27.172 [DEBUG] [Thread-127841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:12:27.191 [INFO] [Thread-127841] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:12:27.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:12:27.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:12:27.747 [DEBUG] [Thread-127841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:12:27.747 [DEBUG] [Thread-127841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:12:27.794 [DEBUG] [Thread-127841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:12:27.795 [DEBUG] [Thread-127841] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:12:27.803 [DEBUG] [Thread-127841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:12:27.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:12:27.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:12:27.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:12:27.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:12:27.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:12:27.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:12:27.855 [DEBUG] [Thread-127841] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:12:30.614 [DEBUG] [Thread-127843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:34.550 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:39.080 [DEBUG] [Thread-127844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:49.093 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:49.094 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:54.123 [DEBUG] [Thread-127845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:54.996 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:12:57.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:12:57.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:12:57.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:12:58.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 12, 40), 10.85, 47.71, 0.0, 20.33, 12.6, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:12:58.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:12:40
2025-12-04T02:12:58.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:12:58.811 [DEBUG] [Thread-127846] [transport.py] [_log()] starting thread (client mode): 0xa519b910
2025-12-04T02:12:58.811 [DEBUG] [Thread-127846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:12:58.831 [DEBUG] [Thread-127846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:12:58.831 [INFO] [Thread-127846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:58.834 [DEBUG] [Thread-127846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] client lang: <none>
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] server lang: <none>
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] kex follows: False
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] Compression: none
2025-12-04T02:12:58.835 [DEBUG] [Thread-127846] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:12:58.850 [DEBUG] [Thread-127846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:12:58.851 [DEBUG] [Thread-127846] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:12:58.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:12:58.851 [DEBUG] [Thread-127846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:12:58.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:12:58.853 [DEBUG] [Thread-127846] [transport.py] [_log()] userauth is OK
2025-12-04T02:12:58.854 [DEBUG] [Thread-127846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:12:58.854 [DEBUG] [Thread-127846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:12:58.854 [DEBUG] [Thread-127846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:12:58.854 [DEBUG] [Thread-127846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:12:58.871 [INFO] [Thread-127846] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:12:58.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:12:59.488 [DEBUG] [Thread-127846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:12:59.488 [DEBUG] [Thread-127846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:12:59.489 [DEBUG] [Thread-127846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:12:59.529 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:12:59.529 [DEBUG] [Thread-127846] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:12:59.532 [DEBUG] [Thread-127846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:12:59.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:12:59.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:12:59.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:12:59.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:12:59.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:12:59.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:12:59.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:12:59.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:12:59.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:12:59.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.008378 -999.00  +12.70  19.49     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 20.2 19.5 147.6 24.8 13.2 -24.9 13.1 -24.4 12.9 -22.9 13.1 -23.9
2025-12-04T02:12:59.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:12:59.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:12:59.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.008378
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:12:59.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:12:40', tmtdew=10.85, humidity=47.71, cloud=0.0, wind=20.33, temperature=12.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:12:40', seeing=1.76, atlas_timestamp='2025-12-04T00:12:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012750000000000483, -0.04974999999999952, 0.03125, -0.0235000000000003, -0.02049999999999841, 0.02925000000000111, -0.025000000000000355, -0.023749999999999716, -0.02000000000000135, -0.009499999999999176, 0.004249999999998977, 0.0129999999999999, 0.02949999999999875, -0.005250000000000199, -0.1280000000000001, -0.05500000000000149, -0.008750000000000924, -0.04750000000000121, -0.06600000000000072, -0.015250000000001762, 0.06649999999999778, -0.01025000000000098, -0.013249999999999318, 0.0022500000000000853, 0.02999999999999936, 0.04349999999999987, 0.009249999999999758, -0.012500000000001066, 0.12150000000000105, 0.011000000000001009, -0.06349999999999945, -0.03500000000000014, 0.029249999999999332], zp_timestamp='2025-12-04T00:11:00')
2025-12-04T02:12:59.557 [DEBUG] [Thread-127846] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:12:59.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:12:59.661 [DEBUG] [Thread-127849] [transport.py] [_log()] starting thread (client mode): 0xa2708160
2025-12-04T02:12:59.661 [DEBUG] [Thread-127849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:12:59.675 [DEBUG] [Thread-127849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:12:59.675 [INFO] [Thread-127849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:12:59.683 [DEBUG] [Thread-127849] [transport.py] [_log()] client lang: <none>
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] server lang: <none>
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] kex follows: False
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] Compression: none
2025-12-04T02:12:59.684 [DEBUG] [Thread-127849] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:12:59.743 [DEBUG] [Thread-127849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:12:59.744 [DEBUG] [Thread-127849] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:12:59.744 [DEBUG] [Thread-127849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:12:59.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:12:59.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:12:59.804 [DEBUG] [Thread-127849] [transport.py] [_log()] userauth is OK
2025-12-04T02:12:59.804 [DEBUG] [Thread-127849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:12:59.804 [DEBUG] [Thread-127849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:12:59.804 [DEBUG] [Thread-127849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:12:59.804 [DEBUG] [Thread-127849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:12:59.824 [INFO] [Thread-127849] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:12:59.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:12:59.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:13:00.104 [DEBUG] [Thread-127849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:13:00.104 [DEBUG] [Thread-127849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:13:00.152 [DEBUG] [Thread-127849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:13:00.152 [DEBUG] [Thread-127849] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:13:00.161 [DEBUG] [Thread-127849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:13:00.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:13:00.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:13:00.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:13:00.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:13:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:13:00.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:13:00.195 [DEBUG] [Thread-127849] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:13:09.156 [DEBUG] [Thread-127851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:15.451 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:24.210 [DEBUG] [Thread-127852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:30.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:13:30.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:13:30.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:13:30.692 [DEBUG] [Thread-127853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 13, 12), 10.83, 47.77, 0.0, 20.49, 12.63, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:13:30.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:13:12
2025-12-04T02:13:31.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:13:31.197 [DEBUG] [Thread-127854] [transport.py] [_log()] starting thread (client mode): 0xa27a2dd0
2025-12-04T02:13:31.197 [DEBUG] [Thread-127854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:13:31.217 [DEBUG] [Thread-127854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:13:31.217 [INFO] [Thread-127854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] client lang: <none>
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] server lang: <none>
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] kex follows: False
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] Compression: none
2025-12-04T02:13:31.220 [DEBUG] [Thread-127854] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:13:31.236 [DEBUG] [Thread-127854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:13:31.236 [DEBUG] [Thread-127854] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:13:31.237 [DEBUG] [Thread-127854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:13:31.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:13:31.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:13:31.238 [DEBUG] [Thread-127854] [transport.py] [_log()] userauth is OK
2025-12-04T02:13:31.238 [DEBUG] [Thread-127854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:13:31.238 [DEBUG] [Thread-127854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:13:31.238 [DEBUG] [Thread-127854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:13:31.238 [DEBUG] [Thread-127854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:13:31.256 [INFO] [Thread-127854] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:13:31.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:13:32.048 [DEBUG] [Thread-127854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:13:32.048 [DEBUG] [Thread-127854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:13:32.049 [DEBUG] [Thread-127854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:13:32.089 [DEBUG] [Thread-127854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:13:32.089 [DEBUG] [Thread-127854] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:13:32.092 [DEBUG] [Thread-127854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:13:32.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:13:32.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:13:32.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:13:32.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:13:32.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:13:32.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:13:32.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:13:32.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:13:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:13:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.009073 -999.00  +12.70  17.25     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.5 17.2 139.3 23.2 13.2 -25.0 13.0 -24.4 12.8 -22.9 13.1 -23.8
2025-12-04T02:13:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:13:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:13:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.009073
2025-12-04T02:13:32.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:13:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:13:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:13:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:13:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:13:32.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:13:12', tmtdew=10.83, humidity=47.77, cloud=0.0, wind=20.49, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:13:12', seeing=2.21, atlas_timestamp='2025-12-04T00:13:03.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012750000000000483, -0.04974999999999952, 0.03125, -0.0235000000000003, -0.02049999999999841, 0.02925000000000111, -0.025000000000000355, -0.023749999999999716, -0.02000000000000135, -0.009499999999999176, 0.004249999999998977, 0.0129999999999999, 0.02949999999999875, -0.005250000000000199, -0.1280000000000001, -0.05500000000000149, -0.008750000000000924, -0.04750000000000121, -0.06600000000000072, -0.015250000000001762, 0.06649999999999778, -0.01025000000000098, -0.013249999999999318, 0.0022500000000000853, 0.02999999999999936, 0.04349999999999987, 0.009249999999999758, -0.012500000000001066, 0.12150000000000105, 0.011000000000001009, -0.06349999999999945, -0.03500000000000014, 0.029249999999999332], zp_timestamp='2025-12-04T00:11:00')
2025-12-04T02:13:32.118 [DEBUG] [Thread-127854] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:13:32.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:13:32.207 [DEBUG] [Thread-127857] [transport.py] [_log()] starting thread (client mode): 0xa2746f50
2025-12-04T02:13:32.207 [DEBUG] [Thread-127857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:13:32.222 [DEBUG] [Thread-127857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:13:32.222 [INFO] [Thread-127857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] client lang: <none>
2025-12-04T02:13:32.230 [DEBUG] [Thread-127857] [transport.py] [_log()] server lang: <none>
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] kex follows: False
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] Compression: none
2025-12-04T02:13:32.231 [DEBUG] [Thread-127857] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:13:32.287 [DEBUG] [Thread-127857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:13:32.287 [DEBUG] [Thread-127857] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:13:32.288 [DEBUG] [Thread-127857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:13:32.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:13:32.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:13:32.344 [DEBUG] [Thread-127857] [transport.py] [_log()] userauth is OK
2025-12-04T02:13:32.344 [DEBUG] [Thread-127857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:13:32.344 [DEBUG] [Thread-127857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:13:32.344 [DEBUG] [Thread-127857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:13:32.345 [DEBUG] [Thread-127857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:13:32.363 [INFO] [Thread-127857] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:13:32.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:13:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:13:32.869 [DEBUG] [Thread-127857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:13:32.869 [DEBUG] [Thread-127857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:13:32.917 [DEBUG] [Thread-127857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:13:32.917 [DEBUG] [Thread-127857] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:13:32.927 [DEBUG] [Thread-127857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:13:32.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:13:32.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:13:32.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:13:32.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:13:32.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:13:32.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:13:32.961 [DEBUG] [Thread-127857] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:13:35.821 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:39.238 [DEBUG] [Thread-127859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:49.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:49.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:54.286 [DEBUG] [Thread-127860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:13:56.213 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:02.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:14:02.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:14:02.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 13, 44), 10.88, 47.61, 0.0, 22.44, 12.61, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:14:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:13:44
2025-12-04T02:14:03.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:14:03.924 [DEBUG] [Thread-127861] [transport.py] [_log()] starting thread (client mode): 0xa5198610
2025-12-04T02:14:03.924 [DEBUG] [Thread-127861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:14:03.946 [DEBUG] [Thread-127861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:14:03.946 [INFO] [Thread-127861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:03.949 [DEBUG] [Thread-127861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] client lang: <none>
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] server lang: <none>
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] kex follows: False
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] Compression: none
2025-12-04T02:14:03.950 [DEBUG] [Thread-127861] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:14:03.968 [DEBUG] [Thread-127861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:14:03.968 [DEBUG] [Thread-127861] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:14:03.969 [DEBUG] [Thread-127861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:14:03.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:14:03.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:14:03.971 [DEBUG] [Thread-127861] [transport.py] [_log()] userauth is OK
2025-12-04T02:14:03.971 [DEBUG] [Thread-127861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:14:03.971 [DEBUG] [Thread-127861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:14:03.971 [DEBUG] [Thread-127861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:14:03.971 [DEBUG] [Thread-127861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:14:03.993 [INFO] [Thread-127861] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:14:03.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:14:04.632 [DEBUG] [Thread-127861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:14:04.632 [DEBUG] [Thread-127861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:14:04.632 [DEBUG] [Thread-127861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:14:04.673 [DEBUG] [Thread-127861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:14:04.673 [DEBUG] [Thread-127861] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:14:04.675 [DEBUG] [Thread-127861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:14:04.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:14:04.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:14:04.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:14:04.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:14:04.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:14:04.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:14:04.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.009421 -999.00  +12.70  16.18     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.8 16.2 144.0 26.7 13.1 -25.1 13.0 -24.5 12.8 -22.8 13.1 -23.8
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.009421
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:14:04.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:13:44', tmtdew=10.88, humidity=47.61, cloud=0.0, wind=22.44, temperature=12.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:13:44', seeing=2.21, atlas_timestamp='2025-12-04T00:13:33.974', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012750000000000483, -0.04974999999999952, 0.03125, -0.0235000000000003, -0.02049999999999841, 0.02925000000000111, -0.025000000000000355, -0.023749999999999716, -0.02000000000000135, -0.009499999999999176, 0.004249999999998977, 0.0129999999999999, 0.02949999999999875, -0.005250000000000199, -0.1280000000000001, -0.05500000000000149, -0.008750000000000924, -0.04750000000000121, -0.06600000000000072, -0.015250000000001762, 0.06649999999999778, -0.01025000000000098, -0.013249999999999318, 0.0022500000000000853, 0.02999999999999936, 0.04349999999999987, 0.009249999999999758, -0.012500000000001066, 0.12150000000000105, 0.011000000000001009, -0.06349999999999945, -0.03500000000000014, 0.029249999999999332], zp_timestamp='2025-12-04T00:11:00')
2025-12-04T02:14:04.694 [DEBUG] [Thread-127861] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:14:04.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:14:04.779 [DEBUG] [Thread-127864] [transport.py] [_log()] starting thread (client mode): 0xa517db40
2025-12-04T02:14:04.779 [DEBUG] [Thread-127864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:14:04.793 [DEBUG] [Thread-127864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:14:04.793 [INFO] [Thread-127864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:14:04.800 [DEBUG] [Thread-127864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] client lang: <none>
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] server lang: <none>
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] kex follows: False
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] Compression: none
2025-12-04T02:14:04.801 [DEBUG] [Thread-127864] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:14:04.861 [DEBUG] [Thread-127864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:14:04.861 [DEBUG] [Thread-127864] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:14:04.861 [DEBUG] [Thread-127864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:14:04.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:14:04.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:14:04.915 [DEBUG] [Thread-127864] [transport.py] [_log()] userauth is OK
2025-12-04T02:14:04.915 [DEBUG] [Thread-127864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:14:04.915 [DEBUG] [Thread-127864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:14:04.915 [DEBUG] [Thread-127864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:14:04.915 [DEBUG] [Thread-127864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:14:04.933 [INFO] [Thread-127864] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:14:04.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:14:04.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:14:05.381 [DEBUG] [Thread-127864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:14:05.381 [DEBUG] [Thread-127864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:14:05.429 [DEBUG] [Thread-127864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:14:05.429 [DEBUG] [Thread-127864] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:14:05.439 [DEBUG] [Thread-127864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:14:05.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:14:05.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:14:05.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:14:05.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:14:05.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:14:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:14:05.474 [DEBUG] [Thread-127864] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:14:09.319 [DEBUG] [Thread-127866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:16.585 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:24.359 [DEBUG] [Thread-127867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:30.763 [DEBUG] [Thread-127868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:35.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:14:35.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:14:35.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:14:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 14, 16), 10.91, 47.52, 0.0, 20.94, 12.63, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:14:36.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:14:16
2025-12-04T02:14:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:14:36.442 [DEBUG] [Thread-127869] [transport.py] [_log()] starting thread (client mode): 0xa517dd50
2025-12-04T02:14:36.442 [DEBUG] [Thread-127869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:14:36.461 [DEBUG] [Thread-127869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:14:36.462 [INFO] [Thread-127869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] client lang: <none>
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] server lang: <none>
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] kex follows: False
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:14:36.465 [DEBUG] [Thread-127869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:14:36.466 [DEBUG] [Thread-127869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:14:36.466 [DEBUG] [Thread-127869] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:14:36.466 [DEBUG] [Thread-127869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:14:36.466 [DEBUG] [Thread-127869] [transport.py] [_log()] Compression: none
2025-12-04T02:14:36.466 [DEBUG] [Thread-127869] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:14:36.482 [DEBUG] [Thread-127869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:14:36.483 [DEBUG] [Thread-127869] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:14:36.483 [DEBUG] [Thread-127869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:14:36.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:14:36.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:14:36.485 [DEBUG] [Thread-127869] [transport.py] [_log()] userauth is OK
2025-12-04T02:14:36.485 [DEBUG] [Thread-127869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:14:36.485 [DEBUG] [Thread-127869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:14:36.485 [DEBUG] [Thread-127869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:14:36.485 [DEBUG] [Thread-127869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:14:36.503 [INFO] [Thread-127869] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:14:36.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:14:36.963 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:37.107 [DEBUG] [Thread-127869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:14:37.107 [DEBUG] [Thread-127869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:14:37.108 [DEBUG] [Thread-127869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:14:37.148 [DEBUG] [Thread-127869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:14:37.148 [DEBUG] [Thread-127869] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:14:37.151 [DEBUG] [Thread-127869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:14:37.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:14:37.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:14:37.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:14:37.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:14:37.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:14:37.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:14:37.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:14:37.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:14:37.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:14:37.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.009767 -999.00  +12.60  22.08     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.8 22.1 134.8 22.7 13.1 -25.1 12.9 -24.5 12.8 -23.0 13.1 -23.8
2025-12-04T02:14:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:14:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:14:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.009767
2025-12-04T02:14:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:14:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:14:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:14:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:14:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:14:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:14:16', tmtdew=10.91, humidity=47.52, cloud=0.0, wind=20.94, temperature=12.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:14:16', seeing=1.7, atlas_timestamp='2025-12-04T00:14:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012750000000000483, -0.04974999999999952, 0.03125, -0.0235000000000003, -0.02049999999999841, 0.02925000000000111, -0.025000000000000355, -0.023749999999999716, -0.02000000000000135, -0.009499999999999176, 0.004249999999998977, 0.0129999999999999, 0.02949999999999875, -0.005250000000000199, -0.1280000000000001, -0.05500000000000149, -0.008750000000000924, -0.04750000000000121, -0.06600000000000072, -0.015250000000001762, 0.06649999999999778, -0.01025000000000098, -0.013249999999999318, 0.0022500000000000853, 0.02999999999999936, 0.04349999999999987, 0.009249999999999758, -0.012500000000001066, 0.12150000000000105, 0.011000000000001009, -0.06349999999999945, -0.03500000000000014, 0.029249999999999332], zp_timestamp='2025-12-04T00:11:00')
2025-12-04T02:14:37.174 [DEBUG] [Thread-127869] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:14:37.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:14:37.270 [DEBUG] [Thread-127872] [transport.py] [_log()] starting thread (client mode): 0xa517d2a0
2025-12-04T02:14:37.270 [DEBUG] [Thread-127872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:14:37.284 [DEBUG] [Thread-127872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:14:37.284 [INFO] [Thread-127872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] client lang: <none>
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] server lang: <none>
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] kex follows: False
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:14:37.292 [DEBUG] [Thread-127872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:14:37.293 [DEBUG] [Thread-127872] [transport.py] [_log()] Compression: none
2025-12-04T02:14:37.293 [DEBUG] [Thread-127872] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:14:37.352 [DEBUG] [Thread-127872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:14:37.352 [DEBUG] [Thread-127872] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:14:37.353 [DEBUG] [Thread-127872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:14:37.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:14:37.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:14:37.408 [DEBUG] [Thread-127872] [transport.py] [_log()] userauth is OK
2025-12-04T02:14:37.408 [DEBUG] [Thread-127872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:14:37.408 [DEBUG] [Thread-127872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:14:37.408 [DEBUG] [Thread-127872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:14:37.409 [DEBUG] [Thread-127872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:14:37.427 [INFO] [Thread-127872] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:14:37.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:14:37.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:14:37.734 [DEBUG] [Thread-127872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:14:37.734 [DEBUG] [Thread-127872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:14:37.782 [DEBUG] [Thread-127872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:14:37.782 [DEBUG] [Thread-127872] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:14:37.791 [DEBUG] [Thread-127872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:14:37.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:14:37.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:14:37.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:14:37.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:14:37.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:14:37.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:14:37.827 [DEBUG] [Thread-127872] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:14:39.388 [DEBUG] [Thread-127874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:49.496 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:49.497 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:54.432 [DEBUG] [Thread-127875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:14:57.346 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:15:07.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:15:07.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:15:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 14, 48), 10.78, 47.77, 0.0, 21.49, 12.55, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:15:08.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:14:48
2025-12-04T02:15:08.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:15:08.806 [DEBUG] [Thread-127876] [transport.py] [_log()] starting thread (client mode): 0xa517d990
2025-12-04T02:15:08.806 [DEBUG] [Thread-127876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:15:08.819 [DEBUG] [Thread-127876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:15:08.819 [INFO] [Thread-127876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:15:08.820 [DEBUG] [Thread-127876] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] client lang: <none>
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] server lang: <none>
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] kex follows: False
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] Compression: none
2025-12-04T02:15:08.821 [DEBUG] [Thread-127876] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:15:08.831 [DEBUG] [Thread-127876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:15:08.831 [DEBUG] [Thread-127876] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:15:08.831 [DEBUG] [Thread-127876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:15:08.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:15:08.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:15:08.833 [DEBUG] [Thread-127876] [transport.py] [_log()] userauth is OK
2025-12-04T02:15:08.833 [DEBUG] [Thread-127876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:15:08.833 [DEBUG] [Thread-127876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:15:08.833 [DEBUG] [Thread-127876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:15:08.833 [DEBUG] [Thread-127876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:15:08.846 [INFO] [Thread-127876] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:15:08.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:15:09.461 [DEBUG] [Thread-127878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:09.589 [DEBUG] [Thread-127876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:15:09.590 [DEBUG] [Thread-127876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:15:09.590 [DEBUG] [Thread-127876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:15:09.631 [DEBUG] [Thread-127876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:15:09.631 [DEBUG] [Thread-127876] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:15:09.634 [DEBUG] [Thread-127876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:15:09.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:15:09.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:15:09.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:15:09.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:15:09.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:15:09.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:15:09.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:15:09.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:15:09.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:15:09.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.010114 -999.00  +12.60  17.99     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.2 18.0 142.0 24.0 13.1 -25.0 13.0 -24.4 12.8 -22.9 13.1 -23.9
2025-12-04T02:15:09.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:15:09.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:15:09.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.010114
2025-12-04T02:15:09.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:15:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:15:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:15:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:15:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:15:09.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:14:48', tmtdew=10.78, humidity=47.77, cloud=0.0, wind=21.49, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:14:48', seeing=1.92, atlas_timestamp='2025-12-04T00:14:33.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.012750000000000483, -0.04974999999999952, 0.03125, -0.0235000000000003, -0.02049999999999841, 0.02925000000000111, -0.025000000000000355, -0.023749999999999716, -0.02000000000000135, -0.009499999999999176, 0.004249999999998977, 0.0129999999999999, 0.02949999999999875, -0.005250000000000199, -0.1280000000000001, -0.05500000000000149, -0.008750000000000924, -0.04750000000000121, -0.06600000000000072, -0.015250000000001762, 0.06649999999999778, -0.01025000000000098, -0.013249999999999318, 0.0022500000000000853, 0.02999999999999936, 0.04349999999999987, 0.009249999999999758, -0.012500000000001066, 0.12150000000000105, 0.011000000000001009, -0.06349999999999945, -0.03500000000000014, 0.029249999999999332], zp_timestamp='2025-12-04T00:11:00')
2025-12-04T02:15:09.658 [DEBUG] [Thread-127876] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:15:09.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:15:09.758 [DEBUG] [Thread-127880] [transport.py] [_log()] starting thread (client mode): 0xa517db70
2025-12-04T02:15:09.758 [DEBUG] [Thread-127880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:15:09.774 [DEBUG] [Thread-127880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:15:09.774 [INFO] [Thread-127880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:09.782 [DEBUG] [Thread-127880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] client lang: <none>
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] server lang: <none>
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] kex follows: False
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:15:09.783 [DEBUG] [Thread-127880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:15:09.784 [DEBUG] [Thread-127880] [transport.py] [_log()] Compression: none
2025-12-04T02:15:09.784 [DEBUG] [Thread-127880] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:15:09.841 [DEBUG] [Thread-127880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:15:09.841 [DEBUG] [Thread-127880] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:15:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:15:09.843 [DEBUG] [Thread-127880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:15:09.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:15:09.897 [DEBUG] [Thread-127880] [transport.py] [_log()] userauth is OK
2025-12-04T02:15:09.897 [DEBUG] [Thread-127880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:15:09.897 [DEBUG] [Thread-127880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:15:09.897 [DEBUG] [Thread-127880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:15:09.897 [DEBUG] [Thread-127880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:15:09.916 [INFO] [Thread-127880] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:15:09.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:15:09.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:15:10.214 [DEBUG] [Thread-127880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:15:10.215 [DEBUG] [Thread-127880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:15:10.262 [DEBUG] [Thread-127880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:15:10.262 [DEBUG] [Thread-127880] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:15:10.271 [DEBUG] [Thread-127880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:15:10.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:15:10.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:15:10.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:15:10.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:15:10.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:15:10.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:15:10.305 [DEBUG] [Thread-127880] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:15:17.768 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:24.487 [DEBUG] [Thread-127882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:30.825 [DEBUG] [Thread-127883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:38.144 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:39.525 [DEBUG] [Thread-127884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:40.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:15:40.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:15:40.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:15:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 15, 20), 10.76, 47.84, 0.0, 22.07, 12.58, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:15:40.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:15:20
2025-12-04T02:15:41.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:15:41.261 [DEBUG] [Thread-127885] [transport.py] [_log()] starting thread (client mode): 0xa517c190
2025-12-04T02:15:41.261 [DEBUG] [Thread-127885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:15:41.282 [DEBUG] [Thread-127885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:15:41.282 [INFO] [Thread-127885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:15:41.286 [DEBUG] [Thread-127885] [transport.py] [_log()] client lang: <none>
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] server lang: <none>
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] kex follows: False
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] Compression: none
2025-12-04T02:15:41.287 [DEBUG] [Thread-127885] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:15:41.305 [DEBUG] [Thread-127885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:15:41.306 [DEBUG] [Thread-127885] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:15:41.306 [DEBUG] [Thread-127885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:15:41.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:15:41.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:15:41.308 [DEBUG] [Thread-127885] [transport.py] [_log()] userauth is OK
2025-12-04T02:15:41.309 [DEBUG] [Thread-127885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:15:41.309 [DEBUG] [Thread-127885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:15:41.309 [DEBUG] [Thread-127885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:15:41.309 [DEBUG] [Thread-127885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:15:41.333 [INFO] [Thread-127885] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:15:41.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:15:41.998 [DEBUG] [Thread-127885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:15:41.998 [DEBUG] [Thread-127885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:15:41.999 [DEBUG] [Thread-127885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:15:42.039 [DEBUG] [Thread-127885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:15:42.039 [DEBUG] [Thread-127885] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:15:42.042 [DEBUG] [Thread-127885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:15:42.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:15:42.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:15:42.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:15:42.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:15:42.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:15:42.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:15:42.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:15:42.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.010461 -999.00  +12.70  21.23     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.1 21.2 145.2 30.1 13.1 -24.9 13.0 -24.4 12.8 -22.9 13.1 -23.8
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.010461
2025-12-04T02:15:42.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:15:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:15:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:15:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:15:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:15:42.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:15:20', tmtdew=10.76, humidity=47.84, cloud=0.0, wind=22.07, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:15:20', seeing=1.73, atlas_timestamp='2025-12-04T00:15:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:15:42.067 [DEBUG] [Thread-127885] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:15:42.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:15:42.166 [DEBUG] [Thread-127888] [transport.py] [_log()] starting thread (client mode): 0xa517eb00
2025-12-04T02:15:42.166 [DEBUG] [Thread-127888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:15:42.181 [DEBUG] [Thread-127888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:15:42.181 [INFO] [Thread-127888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:15:42.188 [DEBUG] [Thread-127888] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:15:42.189 [DEBUG] [Thread-127888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] client lang: <none>
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] server lang: <none>
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] kex follows: False
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] Compression: none
2025-12-04T02:15:42.190 [DEBUG] [Thread-127888] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:15:42.245 [DEBUG] [Thread-127888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:15:42.246 [DEBUG] [Thread-127888] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:15:42.246 [DEBUG] [Thread-127888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:15:42.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:15:42.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:15:42.301 [DEBUG] [Thread-127888] [transport.py] [_log()] userauth is OK
2025-12-04T02:15:42.301 [DEBUG] [Thread-127888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:15:42.301 [DEBUG] [Thread-127888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:15:42.301 [DEBUG] [Thread-127888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:15:42.301 [DEBUG] [Thread-127888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:15:42.320 [INFO] [Thread-127888] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:15:42.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:15:42.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:15:42.788 [DEBUG] [Thread-127888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:15:42.789 [DEBUG] [Thread-127888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:15:42.838 [DEBUG] [Thread-127888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:15:42.838 [DEBUG] [Thread-127888] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:15:42.854 [DEBUG] [Thread-127888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:15:42.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:15:42.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:15:42.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:15:42.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:15:42.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:15:42.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:15:42.897 [DEBUG] [Thread-127888] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:15:49.697 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:49.698 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:54.553 [DEBUG] [Thread-127890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:15:58.571 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:09.594 [DEBUG] [Thread-127891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:12.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:16:12.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:16:12.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:16:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 15, 52), 10.8, 47.71, 0.0, 22.32, 12.55, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:16:13.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:15:52
2025-12-04T02:16:13.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:16:13.873 [DEBUG] [Thread-127892] [transport.py] [_log()] starting thread (client mode): 0xa51984f0
2025-12-04T02:16:13.873 [DEBUG] [Thread-127892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:16:13.895 [DEBUG] [Thread-127892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:16:13.895 [INFO] [Thread-127892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] client lang: <none>
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] server lang: <none>
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] kex follows: False
2025-12-04T02:16:13.899 [DEBUG] [Thread-127892] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] Compression: none
2025-12-04T02:16:13.900 [DEBUG] [Thread-127892] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:16:13.917 [DEBUG] [Thread-127892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:16:13.918 [DEBUG] [Thread-127892] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:16:13.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:16:13.919 [DEBUG] [Thread-127892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:16:13.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:16:13.920 [DEBUG] [Thread-127892] [transport.py] [_log()] userauth is OK
2025-12-04T02:16:13.920 [DEBUG] [Thread-127892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:16:13.921 [DEBUG] [Thread-127892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:16:13.921 [DEBUG] [Thread-127892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:16:13.921 [DEBUG] [Thread-127892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:16:13.946 [INFO] [Thread-127892] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:16:13.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:16:14.583 [DEBUG] [Thread-127892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:16:14.583 [DEBUG] [Thread-127892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:16:14.583 [DEBUG] [Thread-127892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:16:14.624 [DEBUG] [Thread-127892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:16:14.624 [DEBUG] [Thread-127892] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:16:14.627 [DEBUG] [Thread-127892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:16:14.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:16:14.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:16:14.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:16:14.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:16:14.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:16:14.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:16:14.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:16:14.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:16:14.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:16:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.010809 -999.00  +12.70  20.51     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 21.2 20.5 140.0 24.9 13.1 -25.0 12.9 -24.5 12.8 -22.8 13.1 -23.8
2025-12-04T02:16:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:16:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:16:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.010809
2025-12-04T02:16:14.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:16:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:16:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:16:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:16:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:16:14.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:15:52', tmtdew=10.8, humidity=47.71, cloud=0.0, wind=22.32, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:15:52', seeing=1.73, atlas_timestamp='2025-12-04T00:15:33.898', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:16:14.652 [DEBUG] [Thread-127892] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:16:14.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:16:14.751 [DEBUG] [Thread-127895] [transport.py] [_log()] starting thread (client mode): 0xa5198310
2025-12-04T02:16:14.751 [DEBUG] [Thread-127895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:16:14.770 [DEBUG] [Thread-127895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:16:14.770 [INFO] [Thread-127895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:16:14.777 [DEBUG] [Thread-127895] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] client lang: <none>
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] server lang: <none>
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] kex follows: False
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:16:14.778 [DEBUG] [Thread-127895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:16:14.779 [DEBUG] [Thread-127895] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:16:14.779 [DEBUG] [Thread-127895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:16:14.779 [DEBUG] [Thread-127895] [transport.py] [_log()] Compression: none
2025-12-04T02:16:14.779 [DEBUG] [Thread-127895] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:16:14.837 [DEBUG] [Thread-127895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:16:14.837 [DEBUG] [Thread-127895] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:16:14.838 [DEBUG] [Thread-127895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:16:14.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:16:14.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:16:14.895 [DEBUG] [Thread-127895] [transport.py] [_log()] userauth is OK
2025-12-04T02:16:14.895 [DEBUG] [Thread-127895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:16:14.895 [DEBUG] [Thread-127895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:16:14.895 [DEBUG] [Thread-127895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:16:14.895 [DEBUG] [Thread-127895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:16:14.913 [INFO] [Thread-127895] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:16:14.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:16:14.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:16:15.752 [DEBUG] [Thread-127895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:16:15.752 [DEBUG] [Thread-127895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:16:15.801 [DEBUG] [Thread-127895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:16:15.801 [DEBUG] [Thread-127895] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:16:15.810 [DEBUG] [Thread-127895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:16:15.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:16:15.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:16:15.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:16:15.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:16:15.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:16:15.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:16:15.844 [DEBUG] [Thread-127895] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:16:18.994 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:24.623 [DEBUG] [Thread-127897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:30.890 [DEBUG] [Thread-127898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:39.400 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:39.672 [DEBUG] [Thread-127899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:45.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:16:45.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:16:45.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:16:46.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 16, 24), 10.78, 47.76, 0.0, 23.5, 12.55, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:16:46.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:16:24
2025-12-04T02:16:46.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:16:46.824 [DEBUG] [Thread-127900] [transport.py] [_log()] starting thread (client mode): 0xa517f400
2025-12-04T02:16:46.825 [DEBUG] [Thread-127900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:16:46.845 [DEBUG] [Thread-127900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:16:46.845 [INFO] [Thread-127900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:16:46.846 [DEBUG] [Thread-127900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] client lang: <none>
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] server lang: <none>
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] kex follows: False
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] Compression: none
2025-12-04T02:16:46.847 [DEBUG] [Thread-127900] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:16:46.867 [DEBUG] [Thread-127900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:16:46.867 [DEBUG] [Thread-127900] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:16:46.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:16:46.868 [DEBUG] [Thread-127900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:16:46.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:16:46.870 [DEBUG] [Thread-127900] [transport.py] [_log()] userauth is OK
2025-12-04T02:16:46.871 [DEBUG] [Thread-127900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:16:46.871 [DEBUG] [Thread-127900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:16:46.871 [DEBUG] [Thread-127900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:16:46.871 [DEBUG] [Thread-127900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:16:46.896 [INFO] [Thread-127900] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:16:46.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:16:47.513 [DEBUG] [Thread-127900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:16:47.513 [DEBUG] [Thread-127900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:16:47.513 [DEBUG] [Thread-127900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:16:47.554 [DEBUG] [Thread-127900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:16:47.554 [DEBUG] [Thread-127900] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:16:47.557 [DEBUG] [Thread-127900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:16:47.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:16:47.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:16:47.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:16:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:16:47.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:16:47.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:16:47.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:16:47.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.011503 -999.00  +12.70  17.06     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.2 17.1 130.6 25.1 13.1 -24.9 12.9 -24.5 12.7 -22.7 13.1 -23.9
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.011503
2025-12-04T02:16:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:16:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:16:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:16:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:16:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:16:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:16:24', tmtdew=10.78, humidity=47.76, cloud=0.0, wind=23.5, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:16:24', seeing=1.63, atlas_timestamp='2025-12-04T00:16:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:16:47.583 [DEBUG] [Thread-127900] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:16:47.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:16:47.686 [DEBUG] [Thread-127903] [transport.py] [_log()] starting thread (client mode): 0xa517ea10
2025-12-04T02:16:47.686 [DEBUG] [Thread-127903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:16:47.700 [DEBUG] [Thread-127903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:16:47.700 [INFO] [Thread-127903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:16:47.708 [DEBUG] [Thread-127903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] client lang: <none>
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] server lang: <none>
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] kex follows: False
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:16:47.709 [DEBUG] [Thread-127903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:16:47.710 [DEBUG] [Thread-127903] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:16:47.710 [DEBUG] [Thread-127903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:16:47.710 [DEBUG] [Thread-127903] [transport.py] [_log()] Compression: none
2025-12-04T02:16:47.710 [DEBUG] [Thread-127903] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:16:47.765 [DEBUG] [Thread-127903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:16:47.766 [DEBUG] [Thread-127903] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:16:47.767 [DEBUG] [Thread-127903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:16:47.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:16:47.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:16:47.821 [DEBUG] [Thread-127903] [transport.py] [_log()] userauth is OK
2025-12-04T02:16:47.821 [DEBUG] [Thread-127903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:16:47.822 [DEBUG] [Thread-127903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:16:47.822 [DEBUG] [Thread-127903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:16:47.822 [DEBUG] [Thread-127903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:16:47.845 [INFO] [Thread-127903] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:16:47.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:16:47.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:16:48.693 [DEBUG] [Thread-127903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:16:48.693 [DEBUG] [Thread-127903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:16:48.740 [DEBUG] [Thread-127903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:16:48.741 [DEBUG] [Thread-127903] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:16:48.749 [DEBUG] [Thread-127903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:16:48.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:16:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:16:48.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:16:48.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:16:48.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:16:48.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:16:48.783 [DEBUG] [Thread-127903] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:16:49.898 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:49.899 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:54.700 [DEBUG] [Thread-127905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:16:59.783 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:09.753 [DEBUG] [Thread-127906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:18.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:17:18.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:17:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:17:19.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 16, 56), 10.76, 47.84, 0.0, 22.78, 12.5, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:17:19.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:16:56
2025-12-04T02:17:19.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:17:19.798 [DEBUG] [Thread-127907] [transport.py] [_log()] starting thread (client mode): 0xa2785f30
2025-12-04T02:17:19.798 [DEBUG] [Thread-127907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:17:19.818 [DEBUG] [Thread-127907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:17:19.818 [INFO] [Thread-127907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:17:19.820 [DEBUG] [Thread-127907] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:17:19.820 [DEBUG] [Thread-127907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:17:19.820 [DEBUG] [Thread-127907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:17:19.820 [DEBUG] [Thread-127907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] client lang: <none>
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] server lang: <none>
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] kex follows: False
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] Compression: none
2025-12-04T02:17:19.821 [DEBUG] [Thread-127907] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:17:19.831 [DEBUG] [Thread-127907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:17:19.831 [DEBUG] [Thread-127907] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:17:19.831 [DEBUG] [Thread-127907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:17:19.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:17:19.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:17:19.832 [DEBUG] [Thread-127907] [transport.py] [_log()] userauth is OK
2025-12-04T02:17:19.832 [DEBUG] [Thread-127907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:17:19.832 [DEBUG] [Thread-127907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:17:19.832 [DEBUG] [Thread-127907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:17:19.832 [DEBUG] [Thread-127907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:17:19.848 [INFO] [Thread-127907] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:17:19.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:17:20.164 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:20.453 [DEBUG] [Thread-127907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:17:20.453 [DEBUG] [Thread-127907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:17:20.454 [DEBUG] [Thread-127907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:17:20.495 [DEBUG] [Thread-127907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:17:20.495 [DEBUG] [Thread-127907] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:17:20.497 [DEBUG] [Thread-127907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:17:20.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:17:20.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:17:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:17:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:17:20.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:17:20.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:17:20.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.011850 -999.00  +12.60  20.68     52   +3.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.2 20.7 134.4 22.0 13.1 -25.0 13.0 -24.4 12.8 -23.0 13.1 -23.8
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.011850
2025-12-04T02:17:20.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:17:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:17:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:17:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:17:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:17:20.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:16:56', tmtdew=10.76, humidity=47.84, cloud=0.0, wind=22.78, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:16:57', seeing=1.63, atlas_timestamp='2025-12-04T00:17:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:17:20.507 [DEBUG] [Thread-127907] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:17:20.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:17:20.593 [DEBUG] [Thread-127910] [transport.py] [_log()] starting thread (client mode): 0xa2745720
2025-12-04T02:17:20.593 [DEBUG] [Thread-127910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:17:20.607 [DEBUG] [Thread-127910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:17:20.608 [INFO] [Thread-127910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] client lang: <none>
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] server lang: <none>
2025-12-04T02:17:20.615 [DEBUG] [Thread-127910] [transport.py] [_log()] kex follows: False
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] Compression: none
2025-12-04T02:17:20.616 [DEBUG] [Thread-127910] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:17:20.674 [DEBUG] [Thread-127910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:17:20.674 [DEBUG] [Thread-127910] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:17:20.674 [DEBUG] [Thread-127910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:17:20.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:17:20.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:17:20.730 [DEBUG] [Thread-127910] [transport.py] [_log()] userauth is OK
2025-12-04T02:17:20.730 [DEBUG] [Thread-127910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:17:20.730 [DEBUG] [Thread-127910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:17:20.730 [DEBUG] [Thread-127910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:17:20.730 [DEBUG] [Thread-127910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:17:20.747 [INFO] [Thread-127910] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:17:20.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:17:20.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:17:21.546 [DEBUG] [Thread-127910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:17:21.546 [DEBUG] [Thread-127910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:17:21.597 [DEBUG] [Thread-127910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:17:21.598 [DEBUG] [Thread-127910] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:17:21.606 [DEBUG] [Thread-127910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:17:21.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:17:21.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:17:21.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:17:21.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:17:21.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:17:21.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:17:21.637 [DEBUG] [Thread-127910] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:17:24.780 [DEBUG] [Thread-127912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:30.947 [DEBUG] [Thread-127913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:39.822 [DEBUG] [Thread-127914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:40.564 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:50.098 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:50.100 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:17:51.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:17:51.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:17:51.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:17:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 17, 28), 10.72, 47.99, 0.0, 22.5, 12.55, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:17:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:17:28
2025-12-04T02:17:52.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:17:52.607 [DEBUG] [Thread-127915] [transport.py] [_log()] starting thread (client mode): 0xa517ebc0
2025-12-04T02:17:52.607 [DEBUG] [Thread-127915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:17:52.628 [DEBUG] [Thread-127915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:17:52.628 [INFO] [Thread-127915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:17:52.630 [DEBUG] [Thread-127915] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:17:52.630 [DEBUG] [Thread-127915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:17:52.630 [DEBUG] [Thread-127915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] client lang: <none>
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] server lang: <none>
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] kex follows: False
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] Compression: none
2025-12-04T02:17:52.631 [DEBUG] [Thread-127915] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:17:52.651 [DEBUG] [Thread-127915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:17:52.651 [DEBUG] [Thread-127915] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:17:52.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:17:52.652 [DEBUG] [Thread-127915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:17:52.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:17:52.654 [DEBUG] [Thread-127915] [transport.py] [_log()] userauth is OK
2025-12-04T02:17:52.654 [DEBUG] [Thread-127915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:17:52.654 [DEBUG] [Thread-127915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:17:52.654 [DEBUG] [Thread-127915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:17:52.654 [DEBUG] [Thread-127915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:17:52.685 [INFO] [Thread-127915] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:17:52.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:17:53.246 [DEBUG] [Thread-127915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:17:53.246 [DEBUG] [Thread-127915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:17:53.246 [DEBUG] [Thread-127915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:17:53.287 [DEBUG] [Thread-127915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:17:53.287 [DEBUG] [Thread-127915] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:17:53.289 [DEBUG] [Thread-127915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:17:53.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:17:53.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:17:53.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:17:53.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:17:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:17:53.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:17:53.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.012198 -999.00  +12.60  20.22     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 19.1 20.2 145.6 22.6 13.0 -25.0 13.0 -24.5 12.7 -22.8 13.0 -23.9
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:17:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.012198
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:17:53.300 [DEBUG] [Thread-127915] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:17:53.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:17:28', tmtdew=10.72, humidity=47.99, cloud=0.0, wind=22.5, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:17:29', seeing=1.22, atlas_timestamp='2025-12-04T00:17:33.907', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:17:53.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:17:53.402 [DEBUG] [Thread-127918] [transport.py] [_log()] starting thread (client mode): 0xa517f790
2025-12-04T02:17:53.402 [DEBUG] [Thread-127918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:17:53.416 [DEBUG] [Thread-127918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:17:53.416 [INFO] [Thread-127918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] client lang: <none>
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] server lang: <none>
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] kex follows: False
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:17:53.424 [DEBUG] [Thread-127918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:17:53.425 [DEBUG] [Thread-127918] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:17:53.425 [DEBUG] [Thread-127918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:17:53.425 [DEBUG] [Thread-127918] [transport.py] [_log()] Compression: none
2025-12-04T02:17:53.425 [DEBUG] [Thread-127918] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:17:53.481 [DEBUG] [Thread-127918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:17:53.482 [DEBUG] [Thread-127918] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:17:53.482 [DEBUG] [Thread-127918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:17:53.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:17:53.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:17:53.538 [DEBUG] [Thread-127918] [transport.py] [_log()] userauth is OK
2025-12-04T02:17:53.538 [DEBUG] [Thread-127918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:17:53.539 [DEBUG] [Thread-127918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:17:53.539 [DEBUG] [Thread-127918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:17:53.539 [DEBUG] [Thread-127918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:17:53.558 [INFO] [Thread-127918] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:17:53.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:17:53.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:17:54.339 [DEBUG] [Thread-127918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:17:54.340 [DEBUG] [Thread-127918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:17:54.388 [DEBUG] [Thread-127918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:17:54.388 [DEBUG] [Thread-127918] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:17:54.397 [DEBUG] [Thread-127918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:17:54.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:17:54.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:17:54.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:17:54.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:17:54.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:17:54.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:17:54.431 [DEBUG] [Thread-127918] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:17:54.850 [DEBUG] [Thread-127920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:00.967 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:09.896 [DEBUG] [Thread-127921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:21.396 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:24.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:18:24.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:18:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:18:24.923 [DEBUG] [Thread-127922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:25.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 18), 10.71, 48.0, 0.0, 20.08, 12.58, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:18:25.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:18:00
2025-12-04T02:18:25.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:18:25.403 [DEBUG] [Thread-127923] [transport.py] [_log()] starting thread (client mode): 0xa2784070
2025-12-04T02:18:25.403 [DEBUG] [Thread-127923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:18:25.423 [DEBUG] [Thread-127923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:18:25.423 [INFO] [Thread-127923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:18:25.426 [DEBUG] [Thread-127923] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:18:25.426 [DEBUG] [Thread-127923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] client lang: <none>
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] server lang: <none>
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] kex follows: False
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] Compression: none
2025-12-04T02:18:25.427 [DEBUG] [Thread-127923] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:18:25.446 [DEBUG] [Thread-127923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:18:25.446 [DEBUG] [Thread-127923] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:18:25.447 [DEBUG] [Thread-127923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:18:25.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:18:25.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:18:25.489 [DEBUG] [Thread-127923] [transport.py] [_log()] userauth is OK
2025-12-04T02:18:25.489 [DEBUG] [Thread-127923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:18:25.489 [DEBUG] [Thread-127923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:18:25.489 [DEBUG] [Thread-127923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:18:25.489 [DEBUG] [Thread-127923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:18:25.510 [INFO] [Thread-127923] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:18:25.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:18:26.120 [DEBUG] [Thread-127923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:18:26.120 [DEBUG] [Thread-127923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:18:26.120 [DEBUG] [Thread-127923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:18:26.160 [DEBUG] [Thread-127923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:18:26.161 [DEBUG] [Thread-127923] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:18:26.163 [DEBUG] [Thread-127923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:18:26.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:18:26.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:18:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:18:26.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:18:26.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:18:26.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:18:26.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:18:26.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.012545 -999.00  +12.60  19.42     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.9 19.4 131.4 23.4 13.0 -24.9 12.9 -24.4 12.8 -22.8 13.1 -23.7
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.012545
2025-12-04T02:18:26.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:18:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:18:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:18:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:18:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:18:26.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:18:00', tmtdew=10.71, humidity=48.0, cloud=0.0, wind=20.08, temperature=12.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:18:01', seeing=1.71, atlas_timestamp='2025-12-04T00:18:03.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:14:00')
2025-12-04T02:18:26.185 [DEBUG] [Thread-127923] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:18:26.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:18:26.281 [DEBUG] [Thread-127926] [transport.py] [_log()] starting thread (client mode): 0xa519bbe0
2025-12-04T02:18:26.282 [DEBUG] [Thread-127926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:18:26.296 [DEBUG] [Thread-127926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:18:26.297 [INFO] [Thread-127926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:18:26.304 [DEBUG] [Thread-127926] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:18:26.304 [DEBUG] [Thread-127926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:18:26.304 [DEBUG] [Thread-127926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] client lang: <none>
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] server lang: <none>
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] kex follows: False
2025-12-04T02:18:26.305 [DEBUG] [Thread-127926] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] Compression: none
2025-12-04T02:18:26.306 [DEBUG] [Thread-127926] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:18:26.361 [DEBUG] [Thread-127926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:18:26.362 [DEBUG] [Thread-127926] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:18:26.362 [DEBUG] [Thread-127926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:18:26.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:18:26.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:18:26.422 [DEBUG] [Thread-127926] [transport.py] [_log()] userauth is OK
2025-12-04T02:18:26.422 [DEBUG] [Thread-127926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:18:26.422 [DEBUG] [Thread-127926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:18:26.422 [DEBUG] [Thread-127926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:18:26.422 [DEBUG] [Thread-127926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:18:26.442 [INFO] [Thread-127926] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:18:26.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:18:26.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:18:27.273 [DEBUG] [Thread-127926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:18:27.273 [DEBUG] [Thread-127926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:18:27.321 [DEBUG] [Thread-127926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:18:27.321 [DEBUG] [Thread-127926] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:18:27.330 [DEBUG] [Thread-127926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:18:27.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:18:27.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:18:27.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:18:27.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:18:27.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:18:27.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:18:27.364 [DEBUG] [Thread-127926] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:18:31.011 [DEBUG] [Thread-127928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:39.946 [DEBUG] [Thread-127929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:41.771 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:50.299 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:50.301 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:54.981 [DEBUG] [Thread-127930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:18:57.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:18:57.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:18:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:18:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 18, 33), 10.66, 48.15, 0.0, 19.27, 12.5, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:18:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:18:33
2025-12-04T02:18:58.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:18:58.329 [DEBUG] [Thread-127931] [transport.py] [_log()] starting thread (client mode): 0xa519ae00
2025-12-04T02:18:58.330 [DEBUG] [Thread-127931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:18:58.346 [DEBUG] [Thread-127931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:18:58.346 [INFO] [Thread-127931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:18:58.350 [DEBUG] [Thread-127931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] client lang: <none>
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] server lang: <none>
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] kex follows: False
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] Compression: none
2025-12-04T02:18:58.351 [DEBUG] [Thread-127931] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:18:58.369 [DEBUG] [Thread-127931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:18:58.370 [DEBUG] [Thread-127931] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:18:58.370 [DEBUG] [Thread-127931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:18:58.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:18:58.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:18:58.373 [DEBUG] [Thread-127931] [transport.py] [_log()] userauth is OK
2025-12-04T02:18:58.373 [DEBUG] [Thread-127931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:18:58.373 [DEBUG] [Thread-127931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:18:58.373 [DEBUG] [Thread-127931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:18:58.373 [DEBUG] [Thread-127931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:18:58.397 [INFO] [Thread-127931] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:18:58.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:18:58.957 [DEBUG] [Thread-127931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:18:58.957 [DEBUG] [Thread-127931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:18:58.957 [DEBUG] [Thread-127931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:18:58.998 [DEBUG] [Thread-127931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:18:58.998 [DEBUG] [Thread-127931] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:18:59.000 [DEBUG] [Thread-127931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:18:59.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:18:59.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:18:59.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:18:59.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:18:59.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:18:59.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:18:59.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.012892 -999.00  +12.50  19.73     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.0 19.7 133.4 22.1 13.1 -25.0 12.9 -24.6 12.7 -22.8 13.1 -23.8
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:18:59.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.012892
2025-12-04T02:18:59.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:18:59.021 [DEBUG] [Thread-127931] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:18:59.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:18:59.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:18:59.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:18:59.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:18:59.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:18:33', tmtdew=10.66, humidity=48.15, cloud=0.0, wind=19.27, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:18:33', seeing=1.71, atlas_timestamp='2025-12-04T00:18:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:18:00')
2025-12-04T02:18:59.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:18:59.113 [DEBUG] [Thread-127934] [transport.py] [_log()] starting thread (client mode): 0xa51cee00
2025-12-04T02:18:59.113 [DEBUG] [Thread-127934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:18:59.127 [DEBUG] [Thread-127934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:18:59.127 [INFO] [Thread-127934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] client lang: <none>
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] server lang: <none>
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] kex follows: False
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] Compression: none
2025-12-04T02:18:59.135 [DEBUG] [Thread-127934] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:18:59.193 [DEBUG] [Thread-127934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:18:59.194 [DEBUG] [Thread-127934] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:18:59.194 [DEBUG] [Thread-127934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:18:59.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:18:59.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:18:59.250 [DEBUG] [Thread-127934] [transport.py] [_log()] userauth is OK
2025-12-04T02:18:59.251 [DEBUG] [Thread-127934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:18:59.251 [DEBUG] [Thread-127934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:18:59.251 [DEBUG] [Thread-127934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:18:59.251 [DEBUG] [Thread-127934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:18:59.268 [INFO] [Thread-127934] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:18:59.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:18:59.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:19:00.072 [DEBUG] [Thread-127934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:19:00.072 [DEBUG] [Thread-127934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:19:00.121 [DEBUG] [Thread-127934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:19:00.121 [DEBUG] [Thread-127934] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:19:00.129 [DEBUG] [Thread-127934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:19:00.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:19:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:19:00.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:19:00.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:19:00.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:19:00.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:19:00.161 [DEBUG] [Thread-127934] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:19:02.149 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:10.016 [DEBUG] [Thread-127936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:22.530 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:25.059 [DEBUG] [Thread-127937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:30.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:19:30.178 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:19:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:19:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 19, 5), 10.65, 48.2, 0.0, 20.1, 12.5, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:19:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:19:05
2025-12-04T02:19:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:19:31.064 [DEBUG] [Thread-127938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:31.127 [DEBUG] [Thread-127939] [transport.py] [_log()] starting thread (client mode): 0xa51ceb90
2025-12-04T02:19:31.127 [DEBUG] [Thread-127939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:19:31.148 [DEBUG] [Thread-127939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:19:31.148 [INFO] [Thread-127939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:19:31.149 [DEBUG] [Thread-127939] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] client lang: <none>
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] server lang: <none>
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] kex follows: False
2025-12-04T02:19:31.150 [DEBUG] [Thread-127939] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] Compression: none
2025-12-04T02:19:31.151 [DEBUG] [Thread-127939] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:19:31.165 [DEBUG] [Thread-127939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:19:31.165 [DEBUG] [Thread-127939] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:19:31.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:19:31.166 [DEBUG] [Thread-127939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:19:31.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:19:31.168 [DEBUG] [Thread-127939] [transport.py] [_log()] userauth is OK
2025-12-04T02:19:31.169 [DEBUG] [Thread-127939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:19:31.169 [DEBUG] [Thread-127939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:19:31.169 [DEBUG] [Thread-127939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:19:31.169 [DEBUG] [Thread-127939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:19:31.194 [INFO] [Thread-127939] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:19:31.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:19:31.941 [DEBUG] [Thread-127939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:19:31.941 [DEBUG] [Thread-127939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:19:31.942 [DEBUG] [Thread-127939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:19:31.982 [DEBUG] [Thread-127939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:19:31.982 [DEBUG] [Thread-127939] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:19:31.985 [DEBUG] [Thread-127939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:19:31.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:19:31.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:19:32.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:19:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:19:32.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:19:32.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:19:32.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:19:32.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:19:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:19:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.012892 -999.00  +12.50  19.73     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.0 19.7 133.4 22.1 13.1 -25.0 12.9 -24.6 12.7 -22.8 13.1 -23.8
2025-12-04T02:19:32.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:19:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:19:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.012892
2025-12-04T02:19:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:19:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:19:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:19:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:19:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:19:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:19:05', tmtdew=10.65, humidity=48.2, cloud=0.0, wind=20.1, temperature=12.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:19:05', seeing=1.69, atlas_timestamp='2025-12-04T00:18:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:18:00')
2025-12-04T02:19:32.010 [DEBUG] [Thread-127939] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:19:32.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:19:32.106 [DEBUG] [Thread-127942] [transport.py] [_log()] starting thread (client mode): 0xa517c550
2025-12-04T02:19:32.106 [DEBUG] [Thread-127942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:19:32.120 [DEBUG] [Thread-127942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:19:32.120 [INFO] [Thread-127942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] client lang: <none>
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] server lang: <none>
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] kex follows: False
2025-12-04T02:19:32.128 [DEBUG] [Thread-127942] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] Compression: none
2025-12-04T02:19:32.129 [DEBUG] [Thread-127942] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:19:32.186 [DEBUG] [Thread-127942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:19:32.186 [DEBUG] [Thread-127942] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:19:32.187 [DEBUG] [Thread-127942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:19:32.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:19:32.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:19:32.243 [DEBUG] [Thread-127942] [transport.py] [_log()] userauth is OK
2025-12-04T02:19:32.243 [DEBUG] [Thread-127942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:19:32.243 [DEBUG] [Thread-127942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:19:32.243 [DEBUG] [Thread-127942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:19:32.243 [DEBUG] [Thread-127942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:19:32.263 [INFO] [Thread-127942] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:19:32.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:19:32.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:19:33.062 [DEBUG] [Thread-127942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:19:33.063 [DEBUG] [Thread-127942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:19:33.111 [DEBUG] [Thread-127942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:19:33.111 [DEBUG] [Thread-127942] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:19:33.120 [DEBUG] [Thread-127942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:19:33.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:19:33.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:19:33.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:19:33.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:19:33.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:19:33.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:19:33.154 [DEBUG] [Thread-127942] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:19:40.087 [DEBUG] [Thread-127944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:42.911 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:50.498 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:50.499 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:19:55.128 [DEBUG] [Thread-127945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:20:03.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:20:03.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:20:03.300 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 19, 37), 10.54, 48.72, 0.0, 20.36, 12.43, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:20:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:19:37
2025-12-04T02:20:03.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:20:04.111 [DEBUG] [Thread-127946] [transport.py] [_log()] starting thread (client mode): 0xa519a470
2025-12-04T02:20:04.111 [DEBUG] [Thread-127946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:20:04.131 [DEBUG] [Thread-127946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:20:04.131 [INFO] [Thread-127946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:20:04.134 [DEBUG] [Thread-127946] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] client lang: <none>
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] server lang: <none>
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] kex follows: False
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:20:04.135 [DEBUG] [Thread-127946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:20:04.136 [DEBUG] [Thread-127946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:20:04.136 [DEBUG] [Thread-127946] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:20:04.136 [DEBUG] [Thread-127946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:20:04.136 [DEBUG] [Thread-127946] [transport.py] [_log()] Compression: none
2025-12-04T02:20:04.136 [DEBUG] [Thread-127946] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:20:04.154 [DEBUG] [Thread-127946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:20:04.155 [DEBUG] [Thread-127946] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:20:04.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:20:04.156 [DEBUG] [Thread-127946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:20:04.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:20:04.158 [DEBUG] [Thread-127946] [transport.py] [_log()] userauth is OK
2025-12-04T02:20:04.158 [DEBUG] [Thread-127946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:20:04.158 [DEBUG] [Thread-127946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:20:04.158 [DEBUG] [Thread-127946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:20:04.158 [DEBUG] [Thread-127946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:20:04.181 [INFO] [Thread-127946] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:20:04.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:20:04.985 [DEBUG] [Thread-127946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:20:04.985 [DEBUG] [Thread-127946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:20:04.986 [DEBUG] [Thread-127946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:20:05.026 [DEBUG] [Thread-127946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:20:05.026 [DEBUG] [Thread-127946] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:20:05.029 [DEBUG] [Thread-127946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:20:05.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:20:05.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:20:05.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:20:05.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:20:05.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:20:05.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:20:05.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:20:05.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.013239 -999.00  +12.60  14.59     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.9 14.6 144.8 25.6 13.0 -24.9 12.9 -24.4 12.7 -22.8 13.0 -23.7
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.013239
2025-12-04T02:20:05.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:20:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:20:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:20:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:20:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:20:05.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:19:37', tmtdew=10.54, humidity=48.72, cloud=0.0, wind=20.36, temperature=12.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:19:37', seeing=1.79, atlas_timestamp='2025-12-04T00:19:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:18:00')
2025-12-04T02:20:05.054 [DEBUG] [Thread-127946] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:20:05.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:20:05.156 [DEBUG] [Thread-127949] [transport.py] [_log()] starting thread (client mode): 0xa517cd30
2025-12-04T02:20:05.156 [DEBUG] [Thread-127949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:20:05.171 [DEBUG] [Thread-127949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:20:05.171 [INFO] [Thread-127949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:20:05.179 [DEBUG] [Thread-127949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] client lang: <none>
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] server lang: <none>
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] kex follows: False
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] Compression: none
2025-12-04T02:20:05.180 [DEBUG] [Thread-127949] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:20:05.239 [DEBUG] [Thread-127949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:20:05.240 [DEBUG] [Thread-127949] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:20:05.240 [DEBUG] [Thread-127949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:20:05.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:20:05.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:20:05.295 [DEBUG] [Thread-127949] [transport.py] [_log()] userauth is OK
2025-12-04T02:20:05.295 [DEBUG] [Thread-127949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:20:05.295 [DEBUG] [Thread-127949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:20:05.295 [DEBUG] [Thread-127949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:20:05.296 [DEBUG] [Thread-127949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:20:05.317 [INFO] [Thread-127949] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:20:05.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:20:05.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:20:06.240 [DEBUG] [Thread-127949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:20:06.240 [DEBUG] [Thread-127949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:20:06.291 [DEBUG] [Thread-127949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:20:06.291 [DEBUG] [Thread-127949] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:20:06.300 [DEBUG] [Thread-127949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:20:06.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:20:06.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:20:06.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:20:06.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:20:06.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:20:06.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:20:06.334 [DEBUG] [Thread-127949] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:20:10.158 [DEBUG] [Thread-127951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:23.721 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:25.200 [DEBUG] [Thread-127952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:31.116 [DEBUG] [Thread-127953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:36.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:20:36.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:20:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:20:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 20, 9), 10.54, 48.72, 0.0, 19.97, 12.45, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:20:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:20:09
2025-12-04T02:20:37.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:20:37.309 [DEBUG] [Thread-127954] [transport.py] [_log()] starting thread (client mode): 0xa51d2d70
2025-12-04T02:20:37.309 [DEBUG] [Thread-127954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:20:37.325 [DEBUG] [Thread-127954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:20:37.325 [INFO] [Thread-127954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:20:37.327 [DEBUG] [Thread-127954] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] client lang: <none>
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] server lang: <none>
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] kex follows: False
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:20:37.328 [DEBUG] [Thread-127954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:20:37.329 [DEBUG] [Thread-127954] [transport.py] [_log()] Compression: none
2025-12-04T02:20:37.329 [DEBUG] [Thread-127954] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:20:37.347 [DEBUG] [Thread-127954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:20:37.348 [DEBUG] [Thread-127954] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:20:37.348 [DEBUG] [Thread-127954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:20:37.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:20:37.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:20:37.351 [DEBUG] [Thread-127954] [transport.py] [_log()] userauth is OK
2025-12-04T02:20:37.351 [DEBUG] [Thread-127954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:20:37.351 [DEBUG] [Thread-127954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:20:37.351 [DEBUG] [Thread-127954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:20:37.352 [DEBUG] [Thread-127954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:20:37.374 [INFO] [Thread-127954] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:20:37.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:20:38.197 [DEBUG] [Thread-127954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:20:38.197 [DEBUG] [Thread-127954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:20:38.198 [DEBUG] [Thread-127954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:20:38.239 [DEBUG] [Thread-127954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:20:38.239 [DEBUG] [Thread-127954] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:20:38.242 [DEBUG] [Thread-127954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:20:38.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:20:38.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:20:38.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:20:38.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:20:38.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:20:38.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:20:38.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.013586 -999.00  +12.50  19.20     52   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.6 19.2 133.6 24.2 13.0 -25.0 12.9 -24.5 12.7 -22.9 13.0 -23.7
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:20:38.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.013586
2025-12-04T02:20:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:20:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:20:38.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:20:38.267 [DEBUG] [Thread-127954] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:20:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:20:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:20:38.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:20:09', tmtdew=10.54, humidity=48.72, cloud=0.0, wind=19.97, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:20:09', seeing=4.36, atlas_timestamp='2025-12-04T00:19:33.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:18:00')
2025-12-04T02:20:38.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:20:38.366 [DEBUG] [Thread-127957] [transport.py] [_log()] starting thread (client mode): 0xa519b670
2025-12-04T02:20:38.366 [DEBUG] [Thread-127957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:20:38.383 [DEBUG] [Thread-127957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:20:38.383 [INFO] [Thread-127957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] client lang: <none>
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] server lang: <none>
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] kex follows: False
2025-12-04T02:20:38.391 [DEBUG] [Thread-127957] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] Compression: none
2025-12-04T02:20:38.392 [DEBUG] [Thread-127957] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:20:38.451 [DEBUG] [Thread-127957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:20:38.452 [DEBUG] [Thread-127957] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:20:38.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:20:38.453 [DEBUG] [Thread-127957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:20:38.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:20:38.507 [DEBUG] [Thread-127957] [transport.py] [_log()] userauth is OK
2025-12-04T02:20:38.507 [DEBUG] [Thread-127957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:20:38.508 [DEBUG] [Thread-127957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:20:38.508 [DEBUG] [Thread-127957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:20:38.508 [DEBUG] [Thread-127957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:20:38.527 [INFO] [Thread-127957] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:20:38.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:20:38.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:20:39.411 [DEBUG] [Thread-127957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:20:39.411 [DEBUG] [Thread-127957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:20:39.459 [DEBUG] [Thread-127957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:20:39.459 [DEBUG] [Thread-127957] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:20:39.468 [DEBUG] [Thread-127957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:20:39.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:20:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:20:39.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:20:39.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:20:39.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:20:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:20:39.503 [DEBUG] [Thread-127957] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:20:40.227 [DEBUG] [Thread-127959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:44.131 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:50.718 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:50.720 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:20:55.269 [DEBUG] [Thread-127960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:04.509 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:09.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:21:09.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:21:09.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:21:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 20, 41), 10.47, 48.47, 0.0, 21.47, 12.4, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:21:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:20:41
2025-12-04T02:21:10.297 [DEBUG] [Thread-127961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:21:10.510 [DEBUG] [Thread-127962] [transport.py] [_log()] starting thread (client mode): 0xa27868f0
2025-12-04T02:21:10.510 [DEBUG] [Thread-127962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:21:10.530 [DEBUG] [Thread-127962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:21:10.530 [INFO] [Thread-127962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] client lang: <none>
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] server lang: <none>
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] kex follows: False
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] Compression: none
2025-12-04T02:21:10.533 [DEBUG] [Thread-127962] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:21:10.545 [DEBUG] [Thread-127962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:21:10.545 [DEBUG] [Thread-127962] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:21:10.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:21:10.545 [DEBUG] [Thread-127962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:21:10.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:21:10.546 [DEBUG] [Thread-127962] [transport.py] [_log()] userauth is OK
2025-12-04T02:21:10.546 [DEBUG] [Thread-127962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:21:10.546 [DEBUG] [Thread-127962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:21:10.546 [DEBUG] [Thread-127962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:21:10.546 [DEBUG] [Thread-127962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:21:10.556 [INFO] [Thread-127962] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:21:10.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:21:11.203 [DEBUG] [Thread-127962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:21:11.203 [DEBUG] [Thread-127962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:21:11.203 [DEBUG] [Thread-127962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:21:11.244 [DEBUG] [Thread-127962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:21:11.244 [DEBUG] [Thread-127962] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:21:11.246 [DEBUG] [Thread-127962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:21:11.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:21:11.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:21:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:21:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:21:11.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:21:11.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:21:11.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:21:11.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.014281 -999.00  +12.50  16.72     53   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.9 16.7 136.0 21.2 13.0 -24.9 12.9 -24.4 12.7 -22.9 13.0 -23.8
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.014281
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:21:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:20:41', tmtdew=10.47, humidity=48.47, cloud=0.0, wind=21.47, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:20:41', seeing=4.36, atlas_timestamp='2025-12-04T00:20:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.015750000000000597, 0.01025000000000098, 0.0004999999999988347, -0.029500000000000526, 0.013250000000001094, -0.0129999999999999, -0.00274999999999892, -0.02500000000000213, -0.017999999999998906, -0.03774999999999906, -0.002000000000000668, 0.08000000000000007, -0.014750000000001151, -0.08300000000000018, -0.0070000000000014495, 0.03824999999999967, -0.01950000000000074, -0.034000000000000696, 0.00024999999999941735, 0.07449999999999868, 0.07424999999999926, -0.0857499999999991, 0.016750000000000043, 0.02099999999999902, 0.057500000000000995, -0.012249999999999872, 0.041999999999999815, 0.15449999999999875, 0.0600000000000005, -0.08799999999999919, -0.05299999999999905, 0.025749999999998607], zp_timestamp='2025-12-04T00:18:00')
2025-12-04T02:21:11.263 [DEBUG] [Thread-127962] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:21:11.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:21:11.349 [DEBUG] [Thread-127965] [transport.py] [_log()] starting thread (client mode): 0xa51cfc10
2025-12-04T02:21:11.349 [DEBUG] [Thread-127965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:21:11.364 [DEBUG] [Thread-127965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:21:11.364 [INFO] [Thread-127965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:21:11.371 [DEBUG] [Thread-127965] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:21:11.371 [DEBUG] [Thread-127965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:21:11.371 [DEBUG] [Thread-127965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:21:11.371 [DEBUG] [Thread-127965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] client lang: <none>
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] server lang: <none>
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] kex follows: False
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] Compression: none
2025-12-04T02:21:11.372 [DEBUG] [Thread-127965] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:21:11.429 [DEBUG] [Thread-127965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:21:11.429 [DEBUG] [Thread-127965] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:21:11.429 [DEBUG] [Thread-127965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:21:11.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:21:11.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:21:11.487 [DEBUG] [Thread-127965] [transport.py] [_log()] userauth is OK
2025-12-04T02:21:11.487 [DEBUG] [Thread-127965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:21:11.487 [DEBUG] [Thread-127965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:21:11.487 [DEBUG] [Thread-127965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:21:11.487 [DEBUG] [Thread-127965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:21:11.501 [INFO] [Thread-127965] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:21:11.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:21:11.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:21:12.320 [DEBUG] [Thread-127965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:21:12.320 [DEBUG] [Thread-127965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:21:12.367 [DEBUG] [Thread-127965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:21:12.367 [DEBUG] [Thread-127965] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:21:12.375 [DEBUG] [Thread-127965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:21:12.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:21:12.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:21:12.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:21:12.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:21:12.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:21:12.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:21:12.407 [DEBUG] [Thread-127965] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:21:24.931 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:25.319 [DEBUG] [Thread-127967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:31.187 [DEBUG] [Thread-127968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:40.368 [DEBUG] [Thread-127969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:42.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:21:42.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:21:42.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:21:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 21, 13), 10.45, 48.53, 0.0, 21.09, 12.42, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:21:43.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:21:13
2025-12-04T02:21:43.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:21:43.380 [DEBUG] [Thread-127970] [transport.py] [_log()] starting thread (client mode): 0xa2786d40
2025-12-04T02:21:43.380 [DEBUG] [Thread-127970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:21:43.400 [DEBUG] [Thread-127970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:21:43.400 [INFO] [Thread-127970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] client lang: <none>
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] server lang: <none>
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] kex follows: False
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:21:43.403 [DEBUG] [Thread-127970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:21:43.404 [DEBUG] [Thread-127970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:21:43.404 [DEBUG] [Thread-127970] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:21:43.404 [DEBUG] [Thread-127970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:21:43.404 [DEBUG] [Thread-127970] [transport.py] [_log()] Compression: none
2025-12-04T02:21:43.404 [DEBUG] [Thread-127970] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:21:43.416 [DEBUG] [Thread-127970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:21:43.417 [DEBUG] [Thread-127970] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:21:43.417 [DEBUG] [Thread-127970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:21:43.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:21:43.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:21:43.418 [DEBUG] [Thread-127970] [transport.py] [_log()] userauth is OK
2025-12-04T02:21:43.419 [DEBUG] [Thread-127970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:21:43.419 [DEBUG] [Thread-127970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:21:43.419 [DEBUG] [Thread-127970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:21:43.419 [DEBUG] [Thread-127970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:21:43.442 [INFO] [Thread-127970] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:21:43.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:21:44.096 [DEBUG] [Thread-127970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:21:44.096 [DEBUG] [Thread-127970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:21:44.097 [DEBUG] [Thread-127970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:21:44.138 [DEBUG] [Thread-127970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:21:44.138 [DEBUG] [Thread-127970] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:21:44.141 [DEBUG] [Thread-127970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:21:44.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:21:44.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:21:44.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:21:44.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:21:44.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:21:44.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:21:44.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:21:44.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:21:44.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:21:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.014628 -999.00  +12.50  17.73     53   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.2 17.7 135.8 22.9 13.0 -24.9 12.9 -24.5 12.7 -22.9 13.0 -23.9
2025-12-04T02:21:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:21:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:21:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.014628
2025-12-04T02:21:44.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:21:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:21:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:21:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:21:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:21:44.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:21:13', tmtdew=10.45, humidity=48.53, cloud=0.0, wind=21.09, temperature=12.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:21:13', seeing=3.28, atlas_timestamp='2025-12-04T00:21:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:21:44.165 [DEBUG] [Thread-127970] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:21:44.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:21:44.262 [DEBUG] [Thread-127973] [transport.py] [_log()] starting thread (client mode): 0xa27092d0
2025-12-04T02:21:44.262 [DEBUG] [Thread-127973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:21:44.277 [DEBUG] [Thread-127973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:21:44.277 [INFO] [Thread-127973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] client lang: <none>
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] server lang: <none>
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] kex follows: False
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] Compression: none
2025-12-04T02:21:44.285 [DEBUG] [Thread-127973] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:21:44.344 [DEBUG] [Thread-127973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:21:44.344 [DEBUG] [Thread-127973] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:21:44.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:21:44.344 [DEBUG] [Thread-127973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:21:44.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:21:44.399 [DEBUG] [Thread-127973] [transport.py] [_log()] userauth is OK
2025-12-04T02:21:44.400 [DEBUG] [Thread-127973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:21:44.400 [DEBUG] [Thread-127973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:21:44.400 [DEBUG] [Thread-127973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:21:44.400 [DEBUG] [Thread-127973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:21:44.418 [INFO] [Thread-127973] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:21:44.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:21:44.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:21:45.252 [DEBUG] [Thread-127973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:21:45.252 [DEBUG] [Thread-127973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:21:45.299 [DEBUG] [Thread-127973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:21:45.299 [DEBUG] [Thread-127973] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:21:45.308 [DEBUG] [Thread-127973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:21:45.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:21:45.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:21:45.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:21:45.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:21:45.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:21:45.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:21:45.334 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:45.338 [DEBUG] [Thread-127973] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:21:50.920 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:50.921 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:21:55.396 [DEBUG] [Thread-127975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:05.730 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:10.453 [DEBUG] [Thread-127976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:15.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:22:15.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:22:15.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:22:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 21, 45), 10.44, 49.07, 0.0, 19.16, 12.45, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:22:16.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:21:45
2025-12-04T02:22:16.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:22:16.293 [DEBUG] [Thread-127977] [transport.py] [_log()] starting thread (client mode): 0xa519a380
2025-12-04T02:22:16.293 [DEBUG] [Thread-127977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:22:16.313 [DEBUG] [Thread-127977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:22:16.313 [INFO] [Thread-127977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:22:16.316 [DEBUG] [Thread-127977] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:22:16.316 [DEBUG] [Thread-127977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] client lang: <none>
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] server lang: <none>
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] kex follows: False
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] Compression: none
2025-12-04T02:22:16.317 [DEBUG] [Thread-127977] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:22:16.334 [DEBUG] [Thread-127977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:22:16.334 [DEBUG] [Thread-127977] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:22:16.335 [DEBUG] [Thread-127977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:22:16.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:22:16.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:22:16.337 [DEBUG] [Thread-127977] [transport.py] [_log()] userauth is OK
2025-12-04T02:22:16.337 [DEBUG] [Thread-127977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:22:16.337 [DEBUG] [Thread-127977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:22:16.337 [DEBUG] [Thread-127977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:22:16.337 [DEBUG] [Thread-127977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:22:16.360 [INFO] [Thread-127977] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:22:16.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:22:17.020 [DEBUG] [Thread-127977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:22:17.021 [DEBUG] [Thread-127977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:22:17.021 [DEBUG] [Thread-127977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:22:17.062 [DEBUG] [Thread-127977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:22:17.062 [DEBUG] [Thread-127977] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:22:17.065 [DEBUG] [Thread-127977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:22:17.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:22:17.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:22:17.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:22:17.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:22:17.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:22:17.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:22:17.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.014975 -999.00  +12.50  20.13     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.7 20.1 143.8 23.3 13.0 -24.8 12.9 -24.4 12.7 -22.9 13.0 -23.6
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:22:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.014975
2025-12-04T02:22:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:22:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:22:17.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:22:17.091 [DEBUG] [Thread-127977] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:22:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:22:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:22:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:21:45', tmtdew=10.44, humidity=49.07, cloud=0.0, wind=19.16, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:21:45', seeing=3.9, atlas_timestamp='2025-12-04T00:21:33.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:22:17.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:22:17.190 [DEBUG] [Thread-127980] [transport.py] [_log()] starting thread (client mode): 0xa517ca90
2025-12-04T02:22:17.191 [DEBUG] [Thread-127980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:22:17.205 [DEBUG] [Thread-127980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:22:17.205 [INFO] [Thread-127980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:22:17.212 [DEBUG] [Thread-127980] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] client lang: <none>
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] server lang: <none>
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] kex follows: False
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:22:17.213 [DEBUG] [Thread-127980] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:22:17.214 [DEBUG] [Thread-127980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:22:17.214 [DEBUG] [Thread-127980] [transport.py] [_log()] Compression: none
2025-12-04T02:22:17.214 [DEBUG] [Thread-127980] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:22:17.271 [DEBUG] [Thread-127980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:22:17.272 [DEBUG] [Thread-127980] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:22:17.272 [DEBUG] [Thread-127980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:22:17.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:22:17.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:22:17.328 [DEBUG] [Thread-127980] [transport.py] [_log()] userauth is OK
2025-12-04T02:22:17.328 [DEBUG] [Thread-127980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:22:17.328 [DEBUG] [Thread-127980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:22:17.328 [DEBUG] [Thread-127980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:22:17.328 [DEBUG] [Thread-127980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:22:17.350 [INFO] [Thread-127980] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:22:17.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:22:17.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:22:18.164 [DEBUG] [Thread-127980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:22:18.164 [DEBUG] [Thread-127980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:22:18.211 [DEBUG] [Thread-127980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:22:18.211 [DEBUG] [Thread-127980] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:22:18.221 [DEBUG] [Thread-127980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:22:18.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:22:18.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:22:18.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:22:18.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:22:18.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:22:18.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:22:18.252 [DEBUG] [Thread-127980] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:22:25.482 [DEBUG] [Thread-127982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:26.106 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:31.280 [DEBUG] [Thread-127983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:40.513 [DEBUG] [Thread-127984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:46.526 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:48.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:22:48.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:22:48.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:22:48.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 22, 17), 10.43, 49.12, 0.0, 17.87, 12.43, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:22:48.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:22:17
2025-12-04T02:22:49.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:22:49.205 [DEBUG] [Thread-127985] [transport.py] [_log()] starting thread (client mode): 0xa5198f40
2025-12-04T02:22:49.205 [DEBUG] [Thread-127985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:22:49.224 [DEBUG] [Thread-127985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:22:49.224 [INFO] [Thread-127985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] client lang: <none>
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] server lang: <none>
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] kex follows: False
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] Compression: none
2025-12-04T02:22:49.227 [DEBUG] [Thread-127985] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:22:49.245 [DEBUG] [Thread-127985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:22:49.245 [DEBUG] [Thread-127985] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:22:49.246 [DEBUG] [Thread-127985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:22:49.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:22:49.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:22:49.248 [DEBUG] [Thread-127985] [transport.py] [_log()] userauth is OK
2025-12-04T02:22:49.248 [DEBUG] [Thread-127985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:22:49.248 [DEBUG] [Thread-127985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:22:49.248 [DEBUG] [Thread-127985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:22:49.248 [DEBUG] [Thread-127985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:22:49.271 [INFO] [Thread-127985] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:22:49.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:22:49.910 [DEBUG] [Thread-127985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:22:49.910 [DEBUG] [Thread-127985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:22:49.910 [DEBUG] [Thread-127985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:22:49.950 [DEBUG] [Thread-127985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:22:49.950 [DEBUG] [Thread-127985] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:22:49.953 [DEBUG] [Thread-127985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:22:49.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:22:49.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:22:49.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:22:49.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:22:49.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:22:49.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:22:49.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.015322 -999.00  +12.40  16.33     53   +3.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.0 16.3 134.4 23.5 12.9 -24.8 12.9 -24.4 12.7 -22.9 12.9 -23.7
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.015322
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:22:49.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:22:17', tmtdew=10.43, humidity=49.12, cloud=0.0, wind=17.87, temperature=12.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:22:17', seeing=3.23, atlas_timestamp='2025-12-04T00:22:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:22:49.969 [DEBUG] [Thread-127985] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:22:50.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:22:50.057 [DEBUG] [Thread-127988] [transport.py] [_log()] starting thread (client mode): 0xa519bdf0
2025-12-04T02:22:50.058 [DEBUG] [Thread-127988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:22:50.071 [DEBUG] [Thread-127988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:22:50.072 [INFO] [Thread-127988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] client lang: <none>
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] server lang: <none>
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] kex follows: False
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:22:50.079 [DEBUG] [Thread-127988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:22:50.080 [DEBUG] [Thread-127988] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:22:50.080 [DEBUG] [Thread-127988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:22:50.080 [DEBUG] [Thread-127988] [transport.py] [_log()] Compression: none
2025-12-04T02:22:50.080 [DEBUG] [Thread-127988] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:22:50.134 [DEBUG] [Thread-127988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:22:50.134 [DEBUG] [Thread-127988] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:22:50.134 [DEBUG] [Thread-127988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:22:50.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:22:50.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:22:50.191 [DEBUG] [Thread-127988] [transport.py] [_log()] userauth is OK
2025-12-04T02:22:50.191 [DEBUG] [Thread-127988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:22:50.191 [DEBUG] [Thread-127988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:22:50.191 [DEBUG] [Thread-127988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:22:50.191 [DEBUG] [Thread-127988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:22:50.205 [INFO] [Thread-127988] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:22:50.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:22:50.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:22:51.029 [DEBUG] [Thread-127988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:22:51.029 [DEBUG] [Thread-127988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:22:51.076 [DEBUG] [Thread-127988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:22:51.076 [DEBUG] [Thread-127988] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:22:51.085 [DEBUG] [Thread-127988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:22:51.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:22:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:22:51.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:22:51.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:22:51.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:22:51.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:22:51.123 [DEBUG] [Thread-127988] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:22:51.127 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:51.128 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:22:55.538 [DEBUG] [Thread-127990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:06.952 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:10.583 [DEBUG] [Thread-127991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:21.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:23:21.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:23:21.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:23:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 22, 49), 10.29, 49.23, 0.0, 19.96, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:23:21.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:22:49
2025-12-04T02:23:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:23:22.125 [DEBUG] [Thread-127992] [transport.py] [_log()] starting thread (client mode): 0xa51d3370
2025-12-04T02:23:22.125 [DEBUG] [Thread-127992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:23:22.145 [DEBUG] [Thread-127992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:23:22.145 [INFO] [Thread-127992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] client lang: <none>
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] server lang: <none>
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] kex follows: False
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] Compression: none
2025-12-04T02:23:22.149 [DEBUG] [Thread-127992] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:23:22.171 [DEBUG] [Thread-127992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:23:22.171 [DEBUG] [Thread-127992] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:23:22.171 [DEBUG] [Thread-127992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:23:22.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:23:22.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:23:22.172 [DEBUG] [Thread-127992] [transport.py] [_log()] userauth is OK
2025-12-04T02:23:22.172 [DEBUG] [Thread-127992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:23:22.172 [DEBUG] [Thread-127992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:23:22.172 [DEBUG] [Thread-127992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:23:22.172 [DEBUG] [Thread-127992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:23:22.189 [INFO] [Thread-127992] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:23:22.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:23:22.763 [DEBUG] [Thread-127992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:23:22.763 [DEBUG] [Thread-127992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:23:22.763 [DEBUG] [Thread-127992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:23:22.804 [DEBUG] [Thread-127992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:23:22.804 [DEBUG] [Thread-127992] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:23:22.806 [DEBUG] [Thread-127992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:23:22.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:23:22.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:23:22.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:23:22.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:23:22.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:23:22.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:23:22.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.015670 -999.00  +12.40  17.34     54   +3.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.1 17.3 138.0 22.5 13.0 -24.8 12.8 -24.5 12.7 -22.9 12.9 -23.6
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.015670
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:23:22.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:22:49', tmtdew=10.29, humidity=49.23, cloud=0.0, wind=19.96, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:22:49', seeing=2.99, atlas_timestamp='2025-12-04T00:22:33.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:23:22.823 [DEBUG] [Thread-127992] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:23:22.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:23:22.910 [DEBUG] [Thread-127995] [transport.py] [_log()] starting thread (client mode): 0xa270b3d0
2025-12-04T02:23:22.910 [DEBUG] [Thread-127995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:23:22.925 [DEBUG] [Thread-127995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:23:22.925 [INFO] [Thread-127995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] client lang: <none>
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] server lang: <none>
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] kex follows: False
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] Compression: none
2025-12-04T02:23:22.933 [DEBUG] [Thread-127995] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:23:22.990 [DEBUG] [Thread-127995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:23:22.991 [DEBUG] [Thread-127995] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:23:22.991 [DEBUG] [Thread-127995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:23:22.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:23:22.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:23:23.047 [DEBUG] [Thread-127995] [transport.py] [_log()] userauth is OK
2025-12-04T02:23:23.048 [DEBUG] [Thread-127995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:23:23.048 [DEBUG] [Thread-127995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:23:23.048 [DEBUG] [Thread-127995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:23:23.048 [DEBUG] [Thread-127995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:23:23.065 [INFO] [Thread-127995] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:23:23.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:23:23.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:23:23.911 [DEBUG] [Thread-127995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:23:23.912 [DEBUG] [Thread-127995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:23:23.960 [DEBUG] [Thread-127995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:23:23.960 [DEBUG] [Thread-127995] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:23:23.969 [DEBUG] [Thread-127995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:23:23.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:23:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:23:23.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:23:23.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:23:23.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:23:23.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:23:24.003 [DEBUG] [Thread-127995] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:23:25.611 [DEBUG] [Thread-127997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:27.437 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:31.348 [DEBUG] [Thread-127998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:40.654 [DEBUG] [Thread-127999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:47.942 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:51.326 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:51.327 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:23:54.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:23:54.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:23:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 23, 21), 10.25, 49.4, 0.0, 19.97, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:23:54.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:23:21
2025-12-04T02:23:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:23:55.044 [DEBUG] [Thread-128000] [transport.py] [_log()] starting thread (client mode): 0xa51ceb60
2025-12-04T02:23:55.044 [DEBUG] [Thread-128000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:23:55.064 [DEBUG] [Thread-128000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:23:55.064 [INFO] [Thread-128000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:55.065 [DEBUG] [Thread-128000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] client lang: <none>
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] server lang: <none>
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] kex follows: False
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] Compression: none
2025-12-04T02:23:55.066 [DEBUG] [Thread-128000] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:23:55.073 [DEBUG] [Thread-128000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:23:55.073 [DEBUG] [Thread-128000] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:23:55.073 [DEBUG] [Thread-128000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:23:55.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:23:55.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:23:55.074 [DEBUG] [Thread-128000] [transport.py] [_log()] userauth is OK
2025-12-04T02:23:55.074 [DEBUG] [Thread-128000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:23:55.074 [DEBUG] [Thread-128000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:23:55.074 [DEBUG] [Thread-128000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:23:55.074 [DEBUG] [Thread-128000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:23:55.105 [INFO] [Thread-128000] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:23:55.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:23:55.680 [DEBUG] [Thread-128002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:23:55.714 [DEBUG] [Thread-128000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:23:55.714 [DEBUG] [Thread-128000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:23:55.714 [DEBUG] [Thread-128000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:23:55.755 [DEBUG] [Thread-128000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:23:55.755 [DEBUG] [Thread-128000] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:23:55.758 [DEBUG] [Thread-128000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:23:55.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:23:55.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:23:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:23:55.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:23:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:23:55.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:23:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:23:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.016017 -999.00  +12.40  19.66     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.2 19.7 139.6 22.8 13.0 -24.9 12.8 -24.4 12.6 -22.8 12.9 -23.7
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.016017
2025-12-04T02:23:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:23:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:23:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:23:55.783 [DEBUG] [Thread-128000] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:23:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:23:55.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:23:55.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:23:21', tmtdew=10.25, humidity=49.4, cloud=0.0, wind=19.97, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:23:53', seeing=3.43, atlas_timestamp='2025-12-04T00:23:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:23:55.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:23:55.879 [DEBUG] [Thread-128004] [transport.py] [_log()] starting thread (client mode): 0xa270ba00
2025-12-04T02:23:55.879 [DEBUG] [Thread-128004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:23:55.894 [DEBUG] [Thread-128004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:23:55.895 [INFO] [Thread-128004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:23:55.902 [DEBUG] [Thread-128004] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:23:55.902 [DEBUG] [Thread-128004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:23:55.902 [DEBUG] [Thread-128004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:23:55.902 [DEBUG] [Thread-128004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] client lang: <none>
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] server lang: <none>
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] kex follows: False
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:23:55.903 [DEBUG] [Thread-128004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:23:55.904 [DEBUG] [Thread-128004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:23:55.904 [DEBUG] [Thread-128004] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:23:55.904 [DEBUG] [Thread-128004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:23:55.904 [DEBUG] [Thread-128004] [transport.py] [_log()] Compression: none
2025-12-04T02:23:55.904 [DEBUG] [Thread-128004] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:23:55.963 [DEBUG] [Thread-128004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:23:55.963 [DEBUG] [Thread-128004] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:23:55.964 [DEBUG] [Thread-128004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:23:55.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:23:55.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:23:56.020 [DEBUG] [Thread-128004] [transport.py] [_log()] userauth is OK
2025-12-04T02:23:56.020 [DEBUG] [Thread-128004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:23:56.021 [DEBUG] [Thread-128004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:23:56.021 [DEBUG] [Thread-128004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:23:56.021 [DEBUG] [Thread-128004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:23:56.040 [INFO] [Thread-128004] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:23:56.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:23:56.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:23:56.888 [DEBUG] [Thread-128004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:23:56.889 [DEBUG] [Thread-128004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:23:56.937 [DEBUG] [Thread-128004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:23:56.937 [DEBUG] [Thread-128004] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:23:56.946 [DEBUG] [Thread-128004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:23:56.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:23:56.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:23:56.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:23:56.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:23:56.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:23:56.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:23:56.981 [DEBUG] [Thread-128004] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:24:08.495 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:10.708 [DEBUG] [Thread-128006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:25.751 [DEBUG] [Thread-128007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:27.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:24:27.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:24:27.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:24:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 23, 53), 10.14, 49.88, 0.0, 21.77, 12.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:24:27.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:23:53
2025-12-04T02:24:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:24:27.996 [DEBUG] [Thread-128008] [transport.py] [_log()] starting thread (client mode): 0xa270b6a0
2025-12-04T02:24:27.996 [DEBUG] [Thread-128008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:24:28.017 [DEBUG] [Thread-128008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:24:28.017 [INFO] [Thread-128008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] client lang: <none>
2025-12-04T02:24:28.020 [DEBUG] [Thread-128008] [transport.py] [_log()] server lang: <none>
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] kex follows: False
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] Compression: none
2025-12-04T02:24:28.021 [DEBUG] [Thread-128008] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:24:28.038 [DEBUG] [Thread-128008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:24:28.039 [DEBUG] [Thread-128008] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:24:28.040 [DEBUG] [Thread-128008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:24:28.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:24:28.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:24:28.042 [DEBUG] [Thread-128008] [transport.py] [_log()] userauth is OK
2025-12-04T02:24:28.042 [DEBUG] [Thread-128008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:24:28.042 [DEBUG] [Thread-128008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:24:28.042 [DEBUG] [Thread-128008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:24:28.042 [DEBUG] [Thread-128008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:24:28.065 [INFO] [Thread-128008] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:24:28.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:24:28.703 [DEBUG] [Thread-128008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:24:28.703 [DEBUG] [Thread-128008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:24:28.704 [DEBUG] [Thread-128008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:24:28.744 [DEBUG] [Thread-128008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:24:28.744 [DEBUG] [Thread-128008] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:24:28.747 [DEBUG] [Thread-128008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:24:28.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:24:28.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:24:28.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:24:28.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:24:28.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:24:28.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:24:28.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:24:28.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.016711 -999.00  +12.40  12.76     54   +3.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.6 12.8 158.4 16.9 12.9 -24.9 12.8 -24.4 12.6 -22.9 12.9 -23.9
2025-12-04T02:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.016711
2025-12-04T02:24:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:24:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:24:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:24:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:24:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:24:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:23:53', tmtdew=10.14, humidity=49.88, cloud=0.0, wind=21.77, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:24:25', seeing=1.91, atlas_timestamp='2025-12-04T00:24:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:20:00')
2025-12-04T02:24:28.771 [DEBUG] [Thread-128008] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:24:28.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:24:28.867 [DEBUG] [Thread-128011] [transport.py] [_log()] starting thread (client mode): 0xa517ebc0
2025-12-04T02:24:28.867 [DEBUG] [Thread-128011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:24:28.882 [DEBUG] [Thread-128011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:24:28.882 [INFO] [Thread-128011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] client lang: <none>
2025-12-04T02:24:28.890 [DEBUG] [Thread-128011] [transport.py] [_log()] server lang: <none>
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] kex follows: False
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] Compression: none
2025-12-04T02:24:28.891 [DEBUG] [Thread-128011] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:24:28.930 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:28.947 [DEBUG] [Thread-128011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:24:28.948 [DEBUG] [Thread-128011] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:24:28.948 [DEBUG] [Thread-128011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:24:28.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:24:28.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:24:29.004 [DEBUG] [Thread-128011] [transport.py] [_log()] userauth is OK
2025-12-04T02:24:29.004 [DEBUG] [Thread-128011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:24:29.004 [DEBUG] [Thread-128011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:24:29.004 [DEBUG] [Thread-128011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:24:29.004 [DEBUG] [Thread-128011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:24:29.025 [INFO] [Thread-128011] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:24:29.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:24:29.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:24:29.848 [DEBUG] [Thread-128011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:24:29.849 [DEBUG] [Thread-128011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:24:29.897 [DEBUG] [Thread-128011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:24:29.897 [DEBUG] [Thread-128011] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:24:29.906 [DEBUG] [Thread-128011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:24:29.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:24:29.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:24:29.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:24:29.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:24:29.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:24:29.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:24:29.943 [DEBUG] [Thread-128011] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:24:31.409 [DEBUG] [Thread-128013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:40.779 [DEBUG] [Thread-128014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:49.323 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:51.534 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:51.535 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:55.822 [DEBUG] [Thread-128015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:24:59.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:24:59.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:24:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:25:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 24, 57), 10.17, 49.95, 0.0, 18.81, 12.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:25:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:24:57
2025-12-04T02:25:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:25:00.977 [DEBUG] [Thread-128016] [transport.py] [_log()] starting thread (client mode): 0xa2729570
2025-12-04T02:25:00.978 [DEBUG] [Thread-128016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:25:00.997 [DEBUG] [Thread-128016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:25:00.997 [INFO] [Thread-128016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] client lang: <none>
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] server lang: <none>
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] kex follows: False
2025-12-04T02:25:01.000 [DEBUG] [Thread-128016] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] Compression: none
2025-12-04T02:25:01.001 [DEBUG] [Thread-128016] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:25:01.016 [DEBUG] [Thread-128016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:25:01.016 [DEBUG] [Thread-128016] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:25:01.016 [DEBUG] [Thread-128016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:25:01.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:25:01.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:25:01.017 [DEBUG] [Thread-128016] [transport.py] [_log()] userauth is OK
2025-12-04T02:25:01.017 [DEBUG] [Thread-128016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:25:01.017 [DEBUG] [Thread-128016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:25:01.017 [DEBUG] [Thread-128016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:25:01.017 [DEBUG] [Thread-128016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:25:01.026 [INFO] [Thread-128016] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:25:01.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:25:01.681 [DEBUG] [Thread-128016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:25:01.681 [DEBUG] [Thread-128016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:25:01.681 [DEBUG] [Thread-128016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:25:01.722 [DEBUG] [Thread-128016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:25:01.723 [DEBUG] [Thread-128016] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:25:01.724 [DEBUG] [Thread-128016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:25:01.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:25:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:25:01.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:25:01.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:25:01.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:25:01.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:25:01.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:25:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.017058 -999.00  +12.40  18.75     53   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.6 18.8 145.0 20.2 12.9 -24.9 12.9 -24.5 12.6 -22.9 12.9 -23.8
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.017058
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:25:01.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:24:57', tmtdew=10.17, humidity=49.95, cloud=0.0, wind=18.81, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:24:57', seeing=3.09, atlas_timestamp='2025-12-04T00:24:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:23:00')
2025-12-04T02:25:01.736 [DEBUG] [Thread-128016] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:25:01.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:25:01.823 [DEBUG] [Thread-128019] [transport.py] [_log()] starting thread (client mode): 0xa272abf0
2025-12-04T02:25:01.823 [DEBUG] [Thread-128019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:25:01.841 [DEBUG] [Thread-128019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:25:01.841 [INFO] [Thread-128019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:01.848 [DEBUG] [Thread-128019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] client lang: <none>
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] server lang: <none>
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] kex follows: False
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] Compression: none
2025-12-04T02:25:01.849 [DEBUG] [Thread-128019] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:25:01.907 [DEBUG] [Thread-128019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:25:01.907 [DEBUG] [Thread-128019] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:25:01.907 [DEBUG] [Thread-128019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:25:01.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:25:01.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:25:01.964 [DEBUG] [Thread-128019] [transport.py] [_log()] userauth is OK
2025-12-04T02:25:01.964 [DEBUG] [Thread-128019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:25:01.964 [DEBUG] [Thread-128019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:25:01.964 [DEBUG] [Thread-128019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:25:01.964 [DEBUG] [Thread-128019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:25:01.979 [INFO] [Thread-128019] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:25:01.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:25:01.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:25:02.847 [DEBUG] [Thread-128019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:25:02.847 [DEBUG] [Thread-128019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:25:02.894 [DEBUG] [Thread-128019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:25:02.894 [DEBUG] [Thread-128019] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:25:02.902 [DEBUG] [Thread-128019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:25:02.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:25:02.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:25:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:25:02.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:25:02.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:25:02.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:25:02.934 [DEBUG] [Thread-128019] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:25:09.721 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:10.851 [DEBUG] [Thread-128021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:25.897 [DEBUG] [Thread-128022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:30.101 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:31.464 [DEBUG] [Thread-128023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:32.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:25:32.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:25:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:25:33.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 25, 29), 10.14, 50.05, 0.0, 19.3, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:25:33.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:25:29
2025-12-04T02:25:33.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:25:33.910 [DEBUG] [Thread-128024] [transport.py] [_log()] starting thread (client mode): 0xa270b580
2025-12-04T02:25:33.910 [DEBUG] [Thread-128024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:25:33.931 [DEBUG] [Thread-128024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:25:33.931 [INFO] [Thread-128024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] client lang: <none>
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] server lang: <none>
2025-12-04T02:25:33.934 [DEBUG] [Thread-128024] [transport.py] [_log()] kex follows: False
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] Compression: none
2025-12-04T02:25:33.935 [DEBUG] [Thread-128024] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:25:33.952 [DEBUG] [Thread-128024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:25:33.952 [DEBUG] [Thread-128024] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:25:33.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:25:33.953 [DEBUG] [Thread-128024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:25:33.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:25:33.955 [DEBUG] [Thread-128024] [transport.py] [_log()] userauth is OK
2025-12-04T02:25:33.955 [DEBUG] [Thread-128024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:25:33.955 [DEBUG] [Thread-128024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:25:33.955 [DEBUG] [Thread-128024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:25:33.955 [DEBUG] [Thread-128024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:25:33.979 [INFO] [Thread-128024] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:25:33.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:25:34.616 [DEBUG] [Thread-128024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:25:34.616 [DEBUG] [Thread-128024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:25:34.616 [DEBUG] [Thread-128024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:25:34.657 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:25:34.657 [DEBUG] [Thread-128024] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:25:34.660 [DEBUG] [Thread-128024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:25:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:25:34.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:25:34.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:25:34.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:25:34.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:25:34.681 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:25:34.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:25:34.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.017406 -999.00  +12.40  12.66     54   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.5 12.7 156.2 19.4 12.9 -24.9 12.8 -24.5 12.6 -22.9 12.9 -23.7
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.017406
2025-12-04T02:25:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:25:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:25:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:25:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:25:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:25:34.683 [DEBUG] [Thread-128024] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:25:34.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:25:29', tmtdew=10.14, humidity=50.05, cloud=0.0, wind=19.3, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:25:29', seeing=2.8, atlas_timestamp='2025-12-04T00:25:03.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:23:00')
2025-12-04T02:25:34.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:25:34.781 [DEBUG] [Thread-128027] [transport.py] [_log()] starting thread (client mode): 0xa272a740
2025-12-04T02:25:34.781 [DEBUG] [Thread-128027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:25:34.796 [DEBUG] [Thread-128027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:25:34.796 [INFO] [Thread-128027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:25:34.803 [DEBUG] [Thread-128027] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:25:34.803 [DEBUG] [Thread-128027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] client lang: <none>
2025-12-04T02:25:34.804 [DEBUG] [Thread-128027] [transport.py] [_log()] server lang: <none>
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] kex follows: False
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] Compression: none
2025-12-04T02:25:34.805 [DEBUG] [Thread-128027] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:25:34.861 [DEBUG] [Thread-128027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:25:34.861 [DEBUG] [Thread-128027] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:25:34.862 [DEBUG] [Thread-128027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:25:34.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:25:34.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:25:34.916 [DEBUG] [Thread-128027] [transport.py] [_log()] userauth is OK
2025-12-04T02:25:34.917 [DEBUG] [Thread-128027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:25:34.917 [DEBUG] [Thread-128027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:25:34.917 [DEBUG] [Thread-128027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:25:34.917 [DEBUG] [Thread-128027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:25:34.936 [INFO] [Thread-128027] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:25:34.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:25:34.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:25:35.781 [DEBUG] [Thread-128027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:25:35.781 [DEBUG] [Thread-128027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:25:35.828 [DEBUG] [Thread-128027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:25:35.828 [DEBUG] [Thread-128027] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:25:35.837 [DEBUG] [Thread-128027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:25:35.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:25:35.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:25:35.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:25:35.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:25:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:25:35.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:25:35.869 [DEBUG] [Thread-128027] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:25:40.927 [DEBUG] [Thread-128029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:50.533 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:51.736 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:51.737 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:25:55.960 [DEBUG] [Thread-128030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:05.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:26:05.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:26:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:26:06.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 26, 1), 10.06, 50.15, 0.0, 19.8, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:26:06.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:26:01
2025-12-04T02:26:06.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:26:06.834 [DEBUG] [Thread-128031] [transport.py] [_log()] starting thread (client mode): 0xa272b550
2025-12-04T02:26:06.834 [DEBUG] [Thread-128031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:26:06.854 [DEBUG] [Thread-128031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:26:06.854 [INFO] [Thread-128031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] client lang: <none>
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] server lang: <none>
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] kex follows: False
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] Compression: none
2025-12-04T02:26:06.856 [DEBUG] [Thread-128031] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:26:06.867 [DEBUG] [Thread-128031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:26:06.867 [DEBUG] [Thread-128031] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:26:06.867 [DEBUG] [Thread-128031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:26:06.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:26:06.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:26:06.869 [DEBUG] [Thread-128031] [transport.py] [_log()] userauth is OK
2025-12-04T02:26:06.869 [DEBUG] [Thread-128031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:26:06.870 [DEBUG] [Thread-128031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:26:06.870 [DEBUG] [Thread-128031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:26:06.870 [DEBUG] [Thread-128031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:26:06.885 [INFO] [Thread-128031] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:26:06.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:26:07.530 [DEBUG] [Thread-128031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:26:07.530 [DEBUG] [Thread-128031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:26:07.530 [DEBUG] [Thread-128031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:26:07.571 [DEBUG] [Thread-128031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:26:07.571 [DEBUG] [Thread-128031] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:26:07.574 [DEBUG] [Thread-128031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:26:07.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:26:07.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:26:07.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:26:07.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:26:07.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:26:07.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:26:07.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:26:07.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:26:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:26:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.017753 -999.00  +12.40  16.53     54   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.4 16.5 148.0 19.6 12.9 -24.8 12.8 -24.4 12.6 -22.8 12.8 -23.7
2025-12-04T02:26:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:26:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:26:07.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.017753
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:26:07.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:26:01', tmtdew=10.06, humidity=50.15, cloud=0.0, wind=19.8, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:26:01', seeing=3.15, atlas_timestamp='2025-12-04T00:25:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:23:00')
2025-12-04T02:26:07.598 [DEBUG] [Thread-128031] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:26:07.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:26:07.695 [DEBUG] [Thread-128034] [transport.py] [_log()] starting thread (client mode): 0xa272a530
2025-12-04T02:26:07.695 [DEBUG] [Thread-128034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:26:07.712 [DEBUG] [Thread-128034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:26:07.712 [INFO] [Thread-128034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:26:07.720 [DEBUG] [Thread-128034] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:26:07.720 [DEBUG] [Thread-128034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] client lang: <none>
2025-12-04T02:26:07.721 [DEBUG] [Thread-128034] [transport.py] [_log()] server lang: <none>
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] kex follows: False
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] Compression: none
2025-12-04T02:26:07.722 [DEBUG] [Thread-128034] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:26:07.780 [DEBUG] [Thread-128034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:26:07.781 [DEBUG] [Thread-128034] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:26:07.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:26:07.782 [DEBUG] [Thread-128034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:26:07.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:26:07.838 [DEBUG] [Thread-128034] [transport.py] [_log()] userauth is OK
2025-12-04T02:26:07.838 [DEBUG] [Thread-128034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:26:07.838 [DEBUG] [Thread-128034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:26:07.838 [DEBUG] [Thread-128034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:26:07.838 [DEBUG] [Thread-128034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:26:07.858 [INFO] [Thread-128034] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:26:07.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:26:07.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:26:08.724 [DEBUG] [Thread-128034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:26:08.724 [DEBUG] [Thread-128034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:26:08.772 [DEBUG] [Thread-128034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:26:08.772 [DEBUG] [Thread-128034] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:26:08.782 [DEBUG] [Thread-128034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:26:08.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:26:08.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:26:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:26:08.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:26:08.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:26:08.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:26:08.816 [DEBUG] [Thread-128034] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:26:10.940 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:10.990 [DEBUG] [Thread-128036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:26.032 [DEBUG] [Thread-128037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:31.528 [DEBUG] [Thread-128038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:38.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:26:38.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:26:38.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:26:39.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 26, 33), 10.02, 50.33, 0.0, 21.45, 12.27, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:26:39.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:26:33
2025-12-04T02:26:39.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:26:39.784 [DEBUG] [Thread-128039] [transport.py] [_log()] starting thread (client mode): 0xa272af20
2025-12-04T02:26:39.784 [DEBUG] [Thread-128039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:26:39.800 [DEBUG] [Thread-128039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:26:39.800 [INFO] [Thread-128039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] client lang: <none>
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] server lang: <none>
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] kex follows: False
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] Compression: none
2025-12-04T02:26:39.803 [DEBUG] [Thread-128039] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:26:39.815 [DEBUG] [Thread-128039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:26:39.816 [DEBUG] [Thread-128039] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:26:39.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:26:39.817 [DEBUG] [Thread-128039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:26:39.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:26:39.818 [DEBUG] [Thread-128039] [transport.py] [_log()] userauth is OK
2025-12-04T02:26:39.818 [DEBUG] [Thread-128039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:26:39.818 [DEBUG] [Thread-128039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:26:39.819 [DEBUG] [Thread-128039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:26:39.819 [DEBUG] [Thread-128039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:26:39.836 [INFO] [Thread-128039] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:26:39.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:26:40.461 [DEBUG] [Thread-128039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:26:40.461 [DEBUG] [Thread-128039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:26:40.462 [DEBUG] [Thread-128039] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:26:40.503 [DEBUG] [Thread-128039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:26:40.503 [DEBUG] [Thread-128039] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:26:40.506 [DEBUG] [Thread-128039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:26:40.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:26:40.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:26:40.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:26:40.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:26:40.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:26:40.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:26:40.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:26:40.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.018100 -999.00  +12.30  16.85     54   +3.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.8 16.9 144.8 19.5 12.9 -24.9 12.7 -24.4 12.5 -22.8 12.8 -23.8
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.018100
2025-12-04T02:26:40.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:26:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:26:33', tmtdew=10.02, humidity=50.33, cloud=0.0, wind=21.45, temperature=12.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:26:33', seeing=1.96, atlas_timestamp='2025-12-04T00:26:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:23:00')
2025-12-04T02:26:40.530 [DEBUG] [Thread-128039] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:26:40.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:26:40.628 [DEBUG] [Thread-128042] [transport.py] [_log()] starting thread (client mode): 0xa2729d80
2025-12-04T02:26:40.628 [DEBUG] [Thread-128042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:26:40.642 [DEBUG] [Thread-128042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:26:40.642 [INFO] [Thread-128042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:26:40.650 [DEBUG] [Thread-128042] [transport.py] [_log()] client lang: <none>
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] server lang: <none>
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] kex follows: False
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] Compression: none
2025-12-04T02:26:40.651 [DEBUG] [Thread-128042] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:26:40.708 [DEBUG] [Thread-128042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:26:40.709 [DEBUG] [Thread-128042] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:26:40.709 [DEBUG] [Thread-128042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:26:40.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:26:40.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:26:40.764 [DEBUG] [Thread-128042] [transport.py] [_log()] userauth is OK
2025-12-04T02:26:40.765 [DEBUG] [Thread-128042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:26:40.765 [DEBUG] [Thread-128042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:26:40.765 [DEBUG] [Thread-128042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:26:40.765 [DEBUG] [Thread-128042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:26:40.784 [INFO] [Thread-128042] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:26:40.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:26:40.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:26:41.059 [DEBUG] [Thread-128044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:41.600 [DEBUG] [Thread-128042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:26:41.600 [DEBUG] [Thread-128042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:26:41.648 [DEBUG] [Thread-128042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:26:41.648 [DEBUG] [Thread-128042] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:26:41.656 [DEBUG] [Thread-128042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:26:41.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:26:41.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:26:41.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:26:41.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:26:41.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:26:41.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:26:41.690 [DEBUG] [Thread-128042] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:26:52.026 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:52.027 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:26:56.099 [DEBUG] [Thread-128045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:11.126 [DEBUG] [Thread-128046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:11.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:27:11.713 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:27:11.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:27:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 27, 5), 10.0, 50.2, 0.0, 18.28, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:27:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:27:05
2025-12-04T02:27:12.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:27:12.667 [DEBUG] [Thread-128047] [transport.py] [_log()] starting thread (client mode): 0xa272b4f0
2025-12-04T02:27:12.667 [DEBUG] [Thread-128047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:27:12.681 [DEBUG] [Thread-128047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:27:12.681 [INFO] [Thread-128047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] client lang: <none>
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] server lang: <none>
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] kex follows: False
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:27:12.683 [DEBUG] [Thread-128047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:27:12.684 [DEBUG] [Thread-128047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:27:12.684 [DEBUG] [Thread-128047] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:27:12.684 [DEBUG] [Thread-128047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:27:12.684 [DEBUG] [Thread-128047] [transport.py] [_log()] Compression: none
2025-12-04T02:27:12.684 [DEBUG] [Thread-128047] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:27:12.697 [DEBUG] [Thread-128047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:27:12.697 [DEBUG] [Thread-128047] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:27:12.698 [DEBUG] [Thread-128047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:27:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:27:12.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:27:12.699 [DEBUG] [Thread-128047] [transport.py] [_log()] userauth is OK
2025-12-04T02:27:12.699 [DEBUG] [Thread-128047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:27:12.699 [DEBUG] [Thread-128047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:27:12.699 [DEBUG] [Thread-128047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:27:12.700 [DEBUG] [Thread-128047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:27:12.717 [INFO] [Thread-128047] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:27:12.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:27:13.420 [DEBUG] [Thread-128047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:27:13.421 [DEBUG] [Thread-128047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:27:13.421 [DEBUG] [Thread-128047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:27:13.462 [DEBUG] [Thread-128047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:27:13.462 [DEBUG] [Thread-128047] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:27:13.465 [DEBUG] [Thread-128047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:27:13.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:27:13.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:27:13.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:27:13.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:27:13.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:27:13.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:27:13.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:27:13.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.018447 -999.00  +12.30  16.65     54   +3.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 20.1 16.6 145.7 22.8 12.9 -24.9 12.7 -24.2 12.6 -22.7 12.8 -23.6
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.018447
2025-12-04T02:27:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:27:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:27:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:27:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:27:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:27:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:27:05', tmtdew=10.0, humidity=50.2, cloud=0.0, wind=18.28, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:27:06', seeing=1.96, atlas_timestamp='2025-12-04T00:26:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.05924999999999869, 0.0002500000000011937, -0.020500000000000185, 0.030000000000001137, -0.03274999999999828, -0.04800000000000004, -0.04774999999999885, 0.015999999999998238, -0.004999999999999005, -0.05025000000000013, -0.04899999999999949, 0.026999999999999247, -0.003750000000000142, -0.13400000000000034, -0.03700000000000081, 0.011250000000000426, -0.028499999999999304, -0.07350000000000101, -0.02075000000000138, 0.06299999999999883, 0.06374999999999886, -0.04224999999999923, -0.006249999999999645, 0.0649999999999995, 0.0235000000000003, -0.015249999999999986, 0.022499999999999076, 0.08500000000000085, 0.06050000000000111, -0.1714999999999982, -0.04949999999999832, 0.03474999999999895], zp_timestamp='2025-12-04T00:23:00')
2025-12-04T02:27:13.490 [DEBUG] [Thread-128047] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:27:13.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:27:13.589 [DEBUG] [Thread-128050] [transport.py] [_log()] starting thread (client mode): 0xa270a290
2025-12-04T02:27:13.589 [DEBUG] [Thread-128050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:27:13.611 [DEBUG] [Thread-128050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:27:13.611 [INFO] [Thread-128050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:27:13.619 [DEBUG] [Thread-128050] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:27:13.619 [DEBUG] [Thread-128050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:27:13.619 [DEBUG] [Thread-128050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:27:13.619 [DEBUG] [Thread-128050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:13.619 [DEBUG] [Thread-128050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] client lang: <none>
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] server lang: <none>
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] kex follows: False
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:27:13.620 [DEBUG] [Thread-128050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:27:13.621 [DEBUG] [Thread-128050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:27:13.621 [DEBUG] [Thread-128050] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:27:13.621 [DEBUG] [Thread-128050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:27:13.621 [DEBUG] [Thread-128050] [transport.py] [_log()] Compression: none
2025-12-04T02:27:13.621 [DEBUG] [Thread-128050] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:27:13.677 [DEBUG] [Thread-128050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:27:13.678 [DEBUG] [Thread-128050] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:27:13.678 [DEBUG] [Thread-128050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:27:13.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:27:13.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:27:13.737 [DEBUG] [Thread-128050] [transport.py] [_log()] userauth is OK
2025-12-04T02:27:13.737 [DEBUG] [Thread-128050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:27:13.737 [DEBUG] [Thread-128050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:27:13.737 [DEBUG] [Thread-128050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:27:13.737 [DEBUG] [Thread-128050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:27:13.757 [INFO] [Thread-128050] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:27:13.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:27:13.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:27:14.600 [DEBUG] [Thread-128050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:27:14.600 [DEBUG] [Thread-128050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:27:14.648 [DEBUG] [Thread-128050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:27:14.648 [DEBUG] [Thread-128050] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:27:14.658 [DEBUG] [Thread-128050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:27:14.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:27:14.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:27:14.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:27:14.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:27:14.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:27:14.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:27:14.694 [DEBUG] [Thread-128050] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:27:26.152 [DEBUG] [Thread-128052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:30.321 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:31.587 [DEBUG] [Thread-128053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:33.480 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:38.517 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:41.194 [DEBUG] [Thread-128054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:43.892 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:27:44.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:27:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:27:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 27, 37), 9.89, 50.72, 0.0, 20.4, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:27:45.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:27:37
2025-12-04T02:27:45.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:27:45.652 [DEBUG] [Thread-128055] [transport.py] [_log()] starting thread (client mode): 0xa270a230
2025-12-04T02:27:45.652 [DEBUG] [Thread-128055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:27:45.672 [DEBUG] [Thread-128055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:27:45.672 [INFO] [Thread-128055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:27:45.675 [DEBUG] [Thread-128055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] client lang: <none>
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] server lang: <none>
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] kex follows: False
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] Compression: none
2025-12-04T02:27:45.676 [DEBUG] [Thread-128055] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:27:45.687 [DEBUG] [Thread-128055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:27:45.688 [DEBUG] [Thread-128055] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:27:45.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:27:45.689 [DEBUG] [Thread-128055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:27:45.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:27:45.691 [DEBUG] [Thread-128055] [transport.py] [_log()] userauth is OK
2025-12-04T02:27:45.692 [DEBUG] [Thread-128055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:27:45.692 [DEBUG] [Thread-128055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:27:45.692 [DEBUG] [Thread-128055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:27:45.692 [DEBUG] [Thread-128055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:27:45.717 [INFO] [Thread-128055] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:27:45.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:27:46.305 [DEBUG] [Thread-128055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:27:46.305 [DEBUG] [Thread-128055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:27:46.305 [DEBUG] [Thread-128055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:27:46.346 [DEBUG] [Thread-128055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:27:46.346 [DEBUG] [Thread-128055] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:27:46.348 [DEBUG] [Thread-128055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:27:46.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:27:46.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:27:46.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:27:46.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:27:46.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:27:46.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:27:46.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.019142 -999.00  +12.40  16.80     55   +3.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.2 16.8 152.2 21.5 12.8 -24.9 12.7 -24.3 12.5 -22.7 12.8 -23.5
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:27:46.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.019142
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:27:46.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:27:37', tmtdew=9.89, humidity=50.72, cloud=0.0, wind=20.4, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:27:38', seeing=1.96, atlas_timestamp='2025-12-04T00:27:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:27:46.376 [DEBUG] [Thread-128055] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:27:46.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:27:46.470 [DEBUG] [Thread-128058] [transport.py] [_log()] starting thread (client mode): 0xa270ad70
2025-12-04T02:27:46.470 [DEBUG] [Thread-128058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:27:46.485 [DEBUG] [Thread-128058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:27:46.485 [INFO] [Thread-128058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] client lang: <none>
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] server lang: <none>
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] kex follows: False
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] Compression: none
2025-12-04T02:27:46.492 [DEBUG] [Thread-128058] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:27:46.547 [DEBUG] [Thread-128058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:27:46.547 [DEBUG] [Thread-128058] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:27:46.547 [DEBUG] [Thread-128058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:27:46.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:27:46.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:27:46.604 [DEBUG] [Thread-128058] [transport.py] [_log()] userauth is OK
2025-12-04T02:27:46.604 [DEBUG] [Thread-128058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:27:46.604 [DEBUG] [Thread-128058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:27:46.604 [DEBUG] [Thread-128058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:27:46.604 [DEBUG] [Thread-128058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:27:46.618 [INFO] [Thread-128058] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:27:46.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:27:46.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:27:47.505 [DEBUG] [Thread-128058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:27:47.505 [DEBUG] [Thread-128058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:27:47.553 [DEBUG] [Thread-128058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:27:47.553 [DEBUG] [Thread-128058] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:27:47.562 [DEBUG] [Thread-128058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:27:47.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:27:47.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:27:47.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:27:47.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:27:47.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:27:47.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:27:47.597 [DEBUG] [Thread-128058] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:27:52.226 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:52.228 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:27:56.225 [DEBUG] [Thread-128060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:03.304 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:07.670 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:11.278 [DEBUG] [Thread-128061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:17.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:28:17.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:28:17.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:28:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 28, 9), 9.86, 50.85, 0.0, 21.39, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:28:18.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:28:09
2025-12-04T02:28:18.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:28:18.565 [DEBUG] [Thread-128062] [transport.py] [_log()] starting thread (client mode): 0xa272ba90
2025-12-04T02:28:18.565 [DEBUG] [Thread-128062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:28:18.585 [DEBUG] [Thread-128062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:28:18.585 [INFO] [Thread-128062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] client lang: <none>
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] server lang: <none>
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] kex follows: False
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:28:18.586 [DEBUG] [Thread-128062] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:28:18.587 [DEBUG] [Thread-128062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:28:18.587 [DEBUG] [Thread-128062] [transport.py] [_log()] Compression: none
2025-12-04T02:28:18.587 [DEBUG] [Thread-128062] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:28:18.601 [DEBUG] [Thread-128062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:28:18.602 [DEBUG] [Thread-128062] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:28:18.602 [DEBUG] [Thread-128062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:28:18.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:28:18.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:28:18.604 [DEBUG] [Thread-128062] [transport.py] [_log()] userauth is OK
2025-12-04T02:28:18.604 [DEBUG] [Thread-128062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:28:18.604 [DEBUG] [Thread-128062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:28:18.604 [DEBUG] [Thread-128062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:28:18.604 [DEBUG] [Thread-128062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:28:18.630 [INFO] [Thread-128062] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:28:18.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:28:19.234 [DEBUG] [Thread-128062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:28:19.234 [DEBUG] [Thread-128062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:28:19.234 [DEBUG] [Thread-128062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:28:19.275 [DEBUG] [Thread-128062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:28:19.275 [DEBUG] [Thread-128062] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:28:19.277 [DEBUG] [Thread-128062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:28:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:28:19.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:28:19.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:28:19.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:28:19.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:28:19.296 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:28:19.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:28:19.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:28:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:28:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.019489 -999.00  +12.40  17.56     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.9 17.6 141.0 21.4 12.8 -24.8 12.7 -24.4 12.6 -22.8 12.8 -23.6
2025-12-04T02:28:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:28:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:28:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.019489
2025-12-04T02:28:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:28:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:28:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:28:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:28:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:28:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:28:09', tmtdew=9.86, humidity=50.85, cloud=0.0, wind=21.39, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:28:10', seeing=1.89, atlas_timestamp='2025-12-04T00:28:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:28:19.298 [DEBUG] [Thread-128062] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:28:19.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:28:19.395 [DEBUG] [Thread-128065] [transport.py] [_log()] starting thread (client mode): 0xa272a470
2025-12-04T02:28:19.395 [DEBUG] [Thread-128065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:28:19.411 [DEBUG] [Thread-128065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:28:19.411 [INFO] [Thread-128065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:28:19.418 [DEBUG] [Thread-128065] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:28:19.419 [DEBUG] [Thread-128065] [transport.py] [_log()] client lang: <none>
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] server lang: <none>
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] kex follows: False
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:28:19.420 [DEBUG] [Thread-128065] [transport.py] [_log()] Compression: none
2025-12-04T02:28:19.421 [DEBUG] [Thread-128065] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:28:19.476 [DEBUG] [Thread-128065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:28:19.477 [DEBUG] [Thread-128065] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:28:19.477 [DEBUG] [Thread-128065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:28:19.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:28:19.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:28:19.535 [DEBUG] [Thread-128065] [transport.py] [_log()] userauth is OK
2025-12-04T02:28:19.535 [DEBUG] [Thread-128065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:28:19.535 [DEBUG] [Thread-128065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:28:19.536 [DEBUG] [Thread-128065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:28:19.536 [DEBUG] [Thread-128065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:28:19.555 [INFO] [Thread-128065] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:28:19.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:28:19.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:28:20.375 [DEBUG] [Thread-128065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:28:20.376 [DEBUG] [Thread-128065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:28:20.424 [DEBUG] [Thread-128065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:28:20.424 [DEBUG] [Thread-128065] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:28:20.433 [DEBUG] [Thread-128065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:28:20.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:28:20.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:28:20.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:28:20.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:28:20.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:28:20.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:28:20.467 [DEBUG] [Thread-128065] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:28:26.302 [DEBUG] [Thread-128067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:27.086 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:31.511 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:31.650 [DEBUG] [Thread-128068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:37.620 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:41.352 [DEBUG] [Thread-128069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:42.001 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:50.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:28:50.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:28:50.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:28:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 28, 42), 9.85, 51.06, 0.0, 17.04, 12.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:28:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:28:42
2025-12-04T02:28:51.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:28:51.481 [DEBUG] [Thread-128070] [transport.py] [_log()] starting thread (client mode): 0xa270b610
2025-12-04T02:28:51.481 [DEBUG] [Thread-128070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:28:51.501 [DEBUG] [Thread-128070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:28:51.501 [INFO] [Thread-128070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] client lang: <none>
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] server lang: <none>
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] kex follows: False
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] Compression: none
2025-12-04T02:28:51.505 [DEBUG] [Thread-128070] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:28:51.520 [DEBUG] [Thread-128070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:28:51.520 [DEBUG] [Thread-128070] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:28:51.521 [DEBUG] [Thread-128070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:28:51.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:28:51.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:28:51.522 [DEBUG] [Thread-128070] [transport.py] [_log()] userauth is OK
2025-12-04T02:28:51.522 [DEBUG] [Thread-128070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:28:51.522 [DEBUG] [Thread-128070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:28:51.522 [DEBUG] [Thread-128070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:28:51.522 [DEBUG] [Thread-128070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:28:51.531 [INFO] [Thread-128070] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:28:51.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:28:52.352 [DEBUG] [Thread-128070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:28:52.352 [DEBUG] [Thread-128070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:28:52.352 [DEBUG] [Thread-128070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:28:52.393 [DEBUG] [Thread-128070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:28:52.393 [DEBUG] [Thread-128070] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:28:52.396 [DEBUG] [Thread-128070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:28:52.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:28:52.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:28:52.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:28:52.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:28:52.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:28:52.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:28:52.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:28:52.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.019489 -999.00  +12.40  17.56     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.9 17.6 141.0 21.4 12.8 -24.8 12.7 -24.4 12.6 -22.8 12.8 -23.6
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.019489
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:28:52.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:28:42', tmtdew=9.85, humidity=51.06, cloud=0.0, wind=17.04, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:28:42', seeing=1.96, atlas_timestamp='2025-12-04T00:28:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:28:52.414 [DEBUG] [Thread-128070] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:28:52.429 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:52.431 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:28:52.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:28:52.499 [DEBUG] [Thread-128073] [transport.py] [_log()] starting thread (client mode): 0xa2708e80
2025-12-04T02:28:52.499 [DEBUG] [Thread-128073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:28:52.514 [DEBUG] [Thread-128073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:28:52.514 [INFO] [Thread-128073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] client lang: <none>
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] server lang: <none>
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] kex follows: False
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] Compression: none
2025-12-04T02:28:52.522 [DEBUG] [Thread-128073] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:28:52.579 [DEBUG] [Thread-128073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:28:52.579 [DEBUG] [Thread-128073] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:28:52.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:28:52.579 [DEBUG] [Thread-128073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:28:52.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:28:52.636 [DEBUG] [Thread-128073] [transport.py] [_log()] userauth is OK
2025-12-04T02:28:52.636 [DEBUG] [Thread-128073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:28:52.636 [DEBUG] [Thread-128073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:28:52.636 [DEBUG] [Thread-128073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:28:52.636 [DEBUG] [Thread-128073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:28:52.650 [INFO] [Thread-128073] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:28:52.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:28:52.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:28:53.505 [DEBUG] [Thread-128073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:28:53.505 [DEBUG] [Thread-128073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:28:53.552 [DEBUG] [Thread-128073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:28:53.552 [DEBUG] [Thread-128073] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:28:53.561 [DEBUG] [Thread-128073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:28:53.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:28:53.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:28:53.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:28:53.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:28:53.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:28:53.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:28:53.592 [DEBUG] [Thread-128073] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:28:56.379 [DEBUG] [Thread-128075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:11.415 [DEBUG] [Thread-128076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:23.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:29:23.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:29:23.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:29:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 29, 14), 9.85, 51.03, 0.0, 17.12, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:29:24.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:29:14
2025-12-04T02:29:24.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:29:24.558 [DEBUG] [Thread-128077] [transport.py] [_log()] starting thread (client mode): 0xa27080a0
2025-12-04T02:29:24.558 [DEBUG] [Thread-128077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:29:24.580 [DEBUG] [Thread-128077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:29:24.580 [INFO] [Thread-128077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:29:24.583 [DEBUG] [Thread-128077] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:29:24.583 [DEBUG] [Thread-128077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:29:24.583 [DEBUG] [Thread-128077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:29:24.583 [DEBUG] [Thread-128077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] client lang: <none>
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] server lang: <none>
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] kex follows: False
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] Compression: none
2025-12-04T02:29:24.584 [DEBUG] [Thread-128077] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:29:24.604 [DEBUG] [Thread-128077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:29:24.605 [DEBUG] [Thread-128077] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:29:24.605 [DEBUG] [Thread-128077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:29:24.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:29:24.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:29:24.607 [DEBUG] [Thread-128077] [transport.py] [_log()] userauth is OK
2025-12-04T02:29:24.607 [DEBUG] [Thread-128077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:29:24.607 [DEBUG] [Thread-128077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:29:24.607 [DEBUG] [Thread-128077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:29:24.607 [DEBUG] [Thread-128077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:29:24.625 [INFO] [Thread-128077] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:29:24.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:29:25.256 [DEBUG] [Thread-128077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:29:25.257 [DEBUG] [Thread-128077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:29:25.257 [DEBUG] [Thread-128077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:29:25.298 [DEBUG] [Thread-128077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:29:25.298 [DEBUG] [Thread-128077] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:29:25.301 [DEBUG] [Thread-128077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:29:25.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:29:25.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:29:25.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:29:25.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:29:25.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:29:25.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:29:25.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:29:25.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:29:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:29:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.019836 -999.00  +12.30  17.67     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.9 17.7 149.6 21.0 12.8 -24.8 12.7 -24.4 12.5 -22.7 12.8 -23.7
2025-12-04T02:29:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:29:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:29:25.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.019836
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:29:25.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:29:14', tmtdew=9.85, humidity=51.03, cloud=0.0, wind=17.12, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:29:14', seeing=2.36, atlas_timestamp='2025-12-04T00:28:33.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:29:25.328 [DEBUG] [Thread-128077] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:29:25.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:29:25.415 [DEBUG] [Thread-128080] [transport.py] [_log()] starting thread (client mode): 0xa270bfd0
2025-12-04T02:29:25.416 [DEBUG] [Thread-128080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:29:25.430 [DEBUG] [Thread-128080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:29:25.430 [INFO] [Thread-128080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:25.438 [DEBUG] [Thread-128080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] client lang: <none>
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] server lang: <none>
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] kex follows: False
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:29:25.439 [DEBUG] [Thread-128080] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:29:25.440 [DEBUG] [Thread-128080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:29:25.440 [DEBUG] [Thread-128080] [transport.py] [_log()] Compression: none
2025-12-04T02:29:25.440 [DEBUG] [Thread-128080] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:29:25.496 [DEBUG] [Thread-128080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:29:25.497 [DEBUG] [Thread-128080] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:29:25.497 [DEBUG] [Thread-128080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:29:25.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:29:25.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:29:25.553 [DEBUG] [Thread-128080] [transport.py] [_log()] userauth is OK
2025-12-04T02:29:25.553 [DEBUG] [Thread-128080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:29:25.553 [DEBUG] [Thread-128080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:29:25.553 [DEBUG] [Thread-128080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:29:25.553 [DEBUG] [Thread-128080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:29:25.572 [INFO] [Thread-128080] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:29:25.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:29:25.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:29:26.427 [DEBUG] [Thread-128080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:29:26.427 [DEBUG] [Thread-128080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:29:26.444 [DEBUG] [Thread-128082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:26.476 [DEBUG] [Thread-128080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:29:26.476 [DEBUG] [Thread-128080] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:29:26.485 [DEBUG] [Thread-128080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:29:26.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:29:26.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:29:26.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:29:26.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:29:26.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:29:26.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:29:26.524 [DEBUG] [Thread-128080] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:29:31.706 [DEBUG] [Thread-128083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:41.483 [DEBUG] [Thread-128084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:49.952 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:52.644 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:52.645 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:54.061 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:56.516 [DEBUG] [Thread-128085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:29:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:29:56.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:29:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:29:57.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 29, 46), 9.84, 50.93, 0.0, 17.84, 12.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:29:57.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:29:46
2025-12-04T02:29:57.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:29:57.504 [DEBUG] [Thread-128086] [transport.py] [_log()] starting thread (client mode): 0xa270b730
2025-12-04T02:29:57.505 [DEBUG] [Thread-128086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:29:57.524 [DEBUG] [Thread-128086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:29:57.524 [INFO] [Thread-128086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] client lang: <none>
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] server lang: <none>
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] kex follows: False
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] Compression: none
2025-12-04T02:29:57.528 [DEBUG] [Thread-128086] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:29:57.544 [DEBUG] [Thread-128086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:29:57.545 [DEBUG] [Thread-128086] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:29:57.545 [DEBUG] [Thread-128086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:29:57.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:29:57.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:29:57.547 [DEBUG] [Thread-128086] [transport.py] [_log()] userauth is OK
2025-12-04T02:29:57.548 [DEBUG] [Thread-128086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:29:57.548 [DEBUG] [Thread-128086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:29:57.548 [DEBUG] [Thread-128086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:29:57.548 [DEBUG] [Thread-128086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:29:57.564 [INFO] [Thread-128086] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:29:57.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:29:58.375 [DEBUG] [Thread-128086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:29:58.376 [DEBUG] [Thread-128086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:29:58.376 [DEBUG] [Thread-128086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:29:58.417 [DEBUG] [Thread-128086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:29:58.417 [DEBUG] [Thread-128086] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:29:58.420 [DEBUG] [Thread-128086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:29:58.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:29:58.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:29:58.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:29:58.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:29:58.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:29:58.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:29:58.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.020183 -999.00  +12.30  13.41     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.4 13.4 146.0 17.8 12.8 -24.7 12.7 -24.3 12.5 -22.7 12.8 -23.6
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:29:58.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.020183
2025-12-04T02:29:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:29:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:29:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:29:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:29:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:29:58.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:29:46', tmtdew=9.84, humidity=50.93, cloud=0.0, wind=17.84, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:29:46', seeing=3.14, atlas_timestamp='2025-12-04T00:29:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:29:58.446 [DEBUG] [Thread-128086] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:29:58.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:29:58.544 [DEBUG] [Thread-128089] [transport.py] [_log()] starting thread (client mode): 0xa2708d00
2025-12-04T02:29:58.544 [DEBUG] [Thread-128089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:29:58.558 [DEBUG] [Thread-128089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:29:58.558 [INFO] [Thread-128089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:29:58.566 [DEBUG] [Thread-128089] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:29:58.566 [DEBUG] [Thread-128089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:29:58.566 [DEBUG] [Thread-128089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:29:58.566 [DEBUG] [Thread-128089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] client lang: <none>
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] server lang: <none>
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] kex follows: False
2025-12-04T02:29:58.567 [DEBUG] [Thread-128089] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] Compression: none
2025-12-04T02:29:58.568 [DEBUG] [Thread-128089] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:29:58.629 [DEBUG] [Thread-128089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:29:58.630 [DEBUG] [Thread-128089] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:29:58.630 [DEBUG] [Thread-128089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:29:58.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:29:58.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:29:58.686 [DEBUG] [Thread-128089] [transport.py] [_log()] userauth is OK
2025-12-04T02:29:58.686 [DEBUG] [Thread-128089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:29:58.686 [DEBUG] [Thread-128089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:29:58.686 [DEBUG] [Thread-128089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:29:58.686 [DEBUG] [Thread-128089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:29:58.706 [INFO] [Thread-128089] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:29:58.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:29:58.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:29:59.528 [DEBUG] [Thread-128089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:29:59.528 [DEBUG] [Thread-128089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:29:59.576 [DEBUG] [Thread-128089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:29:59.576 [DEBUG] [Thread-128089] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:29:59.585 [DEBUG] [Thread-128089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:29:59.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:29:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:29:59.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:29:59.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:29:59.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:29:59.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:29:59.619 [DEBUG] [Thread-128089] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:30:11.541 [DEBUG] [Thread-128091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:15.580 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:26.575 [DEBUG] [Thread-128092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:29.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:30:29.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:30:29.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:30:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 30, 18), 9.84, 50.95, 0.0, 16.99, 12.23, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:30:30.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:30:18
2025-12-04T02:30:30.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:30:30.599 [DEBUG] [Thread-128093] [transport.py] [_log()] starting thread (client mode): 0xa51d1d20
2025-12-04T02:30:30.599 [DEBUG] [Thread-128093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:30:30.621 [DEBUG] [Thread-128093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:30:30.621 [INFO] [Thread-128093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:30:30.624 [DEBUG] [Thread-128093] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:30:30.624 [DEBUG] [Thread-128093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:30:30.624 [DEBUG] [Thread-128093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] client lang: <none>
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] server lang: <none>
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] kex follows: False
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] Compression: none
2025-12-04T02:30:30.625 [DEBUG] [Thread-128093] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:30:30.642 [DEBUG] [Thread-128093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:30:30.643 [DEBUG] [Thread-128093] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:30:30.643 [DEBUG] [Thread-128093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:30:30.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:30:30.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:30:30.645 [DEBUG] [Thread-128093] [transport.py] [_log()] userauth is OK
2025-12-04T02:30:30.645 [DEBUG] [Thread-128093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:30:30.645 [DEBUG] [Thread-128093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:30:30.645 [DEBUG] [Thread-128093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:30:30.645 [DEBUG] [Thread-128093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:30:30.669 [INFO] [Thread-128093] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:30:30.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:30:31.319 [DEBUG] [Thread-128093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:30:31.319 [DEBUG] [Thread-128093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:30:31.320 [DEBUG] [Thread-128093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:30:31.360 [DEBUG] [Thread-128093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:30:31.360 [DEBUG] [Thread-128093] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:30:31.363 [DEBUG] [Thread-128093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:30:31.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:30:31.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:30:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:30:31.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:30:31.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:30:31.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:30:31.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:30:31.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.020531 -999.00  +12.30  15.62     55   +3.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.9 15.6 142.8 21.8 12.8 -24.9 12.7 -24.5 12.5 -22.7 12.8 -23.6
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.020531
2025-12-04T02:30:31.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:30:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:30:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:30:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:30:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:30:31.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:30:18', tmtdew=9.84, humidity=50.95, cloud=0.0, wind=16.99, temperature=12.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:30:18', seeing=2.4, atlas_timestamp='2025-12-04T00:29:33.878', atlas_cloud=1, atlas_rain=1, zp_data=[-0.023749999999999716, -0.05424999999999969, 0.04975000000000129, -0.007500000000000284, 0.015499999999999403, 0.02725000000000044, -0.008000000000000895, -0.0022500000000000853, 0.014499999999999957, 0.012000000000000455, -0.013749999999999929, 0.025000000000000355, 0.016000000000000014, 0.029249999999999332, -0.07000000000000028, 0.02149999999999963, 0.03325000000000067, -0.022500000000000853, -0.04499999999999993, -0.006250000000001421, 0.049999999999998934, 0.087749999999998, -0.029749999999999943, 0.025750000000000384, 0.025999999999998025, 0.06349999999999945, 0.019249999999999545, 0.07249999999999979, 0.10599999999999987, 0.018000000000000682, -0.1169999999999991, -0.023999999999999133, 0.055749999999999744], zp_timestamp='2025-12-04T00:26:00')
2025-12-04T02:30:31.389 [DEBUG] [Thread-128093] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:30:31.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:30:31.487 [DEBUG] [Thread-128096] [transport.py] [_log()] starting thread (client mode): 0xa51d0730
2025-12-04T02:30:31.487 [DEBUG] [Thread-128096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:30:31.502 [DEBUG] [Thread-128096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:30:31.502 [INFO] [Thread-128096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] client lang: <none>
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] server lang: <none>
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] kex follows: False
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:30:31.510 [DEBUG] [Thread-128096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:30:31.511 [DEBUG] [Thread-128096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:30:31.511 [DEBUG] [Thread-128096] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:30:31.511 [DEBUG] [Thread-128096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:30:31.511 [DEBUG] [Thread-128096] [transport.py] [_log()] Compression: none
2025-12-04T02:30:31.511 [DEBUG] [Thread-128096] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:30:31.568 [DEBUG] [Thread-128096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:30:31.568 [DEBUG] [Thread-128096] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:30:31.569 [DEBUG] [Thread-128096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:30:31.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:30:31.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:30:31.625 [DEBUG] [Thread-128096] [transport.py] [_log()] userauth is OK
2025-12-04T02:30:31.625 [DEBUG] [Thread-128096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:30:31.625 [DEBUG] [Thread-128096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:30:31.625 [DEBUG] [Thread-128096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:30:31.625 [DEBUG] [Thread-128096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:30:31.644 [INFO] [Thread-128096] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:30:31.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:30:31.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:30:31.778 [DEBUG] [Thread-128098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:32.477 [DEBUG] [Thread-128096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:30:32.477 [DEBUG] [Thread-128096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:30:32.526 [DEBUG] [Thread-128096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:30:32.526 [DEBUG] [Thread-128096] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:30:32.535 [DEBUG] [Thread-128096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:30:32.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:30:32.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:30:32.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:30:32.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:30:32.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:30:32.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:30:32.570 [DEBUG] [Thread-128096] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:30:35.974 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:41.604 [DEBUG] [Thread-128099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:52.844 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:52.845 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:56.357 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:30:56.646 [DEBUG] [Thread-128100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:02.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:31:02.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:31:02.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:31:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 30, 50), 9.86, 50.86, 0.0, 16.71, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:31:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:30:50
2025-12-04T02:31:03.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:31:03.538 [DEBUG] [Thread-128101] [transport.py] [_log()] starting thread (client mode): 0xa2744ac0
2025-12-04T02:31:03.538 [DEBUG] [Thread-128101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:31:03.559 [DEBUG] [Thread-128101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:31:03.559 [INFO] [Thread-128101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:31:03.560 [DEBUG] [Thread-128101] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] client lang: <none>
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] server lang: <none>
2025-12-04T02:31:03.561 [DEBUG] [Thread-128101] [transport.py] [_log()] kex follows: False
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] Compression: none
2025-12-04T02:31:03.562 [DEBUG] [Thread-128101] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:31:03.576 [DEBUG] [Thread-128101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:31:03.577 [DEBUG] [Thread-128101] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:31:03.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:31:03.578 [DEBUG] [Thread-128101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:31:03.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:31:03.580 [DEBUG] [Thread-128101] [transport.py] [_log()] userauth is OK
2025-12-04T02:31:03.580 [DEBUG] [Thread-128101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:31:03.580 [DEBUG] [Thread-128101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:31:03.580 [DEBUG] [Thread-128101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:31:03.580 [DEBUG] [Thread-128101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:31:03.598 [INFO] [Thread-128101] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:31:03.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:31:04.246 [DEBUG] [Thread-128101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:31:04.246 [DEBUG] [Thread-128101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:31:04.246 [DEBUG] [Thread-128101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:31:04.287 [DEBUG] [Thread-128101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:31:04.287 [DEBUG] [Thread-128101] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:31:04.290 [DEBUG] [Thread-128101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:31:04.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:31:04.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:31:04.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:31:04.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:31:04.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:31:04.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:31:04.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:31:04.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:31:04.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:31:04.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.020879 -999.00  +12.30  15.93     55   +3.60 1 1 1 1 1     0    0 7.52 -62.60 ZNESW 15.5 15.9 138.4 20.4 12.8 -24.7 12.7 -24.2 12.5 -22.7 12.8 -23.5
2025-12-04T02:31:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:31:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:31:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.020879
2025-12-04T02:31:04.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:31:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:31:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:31:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:31:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:31:04.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:30:50', tmtdew=9.86, humidity=50.86, cloud=0.0, wind=16.71, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:30:50', seeing=2.4, atlas_timestamp='2025-12-04T00:30:03.946', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:29:00')
2025-12-04T02:31:04.315 [DEBUG] [Thread-128101] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:31:04.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:31:04.411 [DEBUG] [Thread-128104] [transport.py] [_log()] starting thread (client mode): 0xa51ceb60
2025-12-04T02:31:04.411 [DEBUG] [Thread-128104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:31:04.426 [DEBUG] [Thread-128104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:31:04.426 [INFO] [Thread-128104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:31:04.433 [DEBUG] [Thread-128104] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:31:04.433 [DEBUG] [Thread-128104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] client lang: <none>
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] server lang: <none>
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] kex follows: False
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:31:04.434 [DEBUG] [Thread-128104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:31:04.435 [DEBUG] [Thread-128104] [transport.py] [_log()] Compression: none
2025-12-04T02:31:04.435 [DEBUG] [Thread-128104] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:31:04.499 [DEBUG] [Thread-128104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:31:04.500 [DEBUG] [Thread-128104] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:31:04.500 [DEBUG] [Thread-128104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:31:04.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:31:04.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:31:04.561 [DEBUG] [Thread-128104] [transport.py] [_log()] userauth is OK
2025-12-04T02:31:04.561 [DEBUG] [Thread-128104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:31:04.561 [DEBUG] [Thread-128104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:31:04.561 [DEBUG] [Thread-128104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:31:04.561 [DEBUG] [Thread-128104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:31:04.579 [INFO] [Thread-128104] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:31:04.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:31:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:31:05.447 [DEBUG] [Thread-128104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:31:05.447 [DEBUG] [Thread-128104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:31:05.501 [DEBUG] [Thread-128104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:31:05.501 [DEBUG] [Thread-128104] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:31:05.511 [DEBUG] [Thread-128104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:31:05.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:31:05.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:31:05.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:31:05.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:31:05.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:31:05.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:31:05.549 [DEBUG] [Thread-128104] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:31:11.680 [DEBUG] [Thread-128106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:16.787 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:26.726 [DEBUG] [Thread-128107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:31.844 [DEBUG] [Thread-128108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:35.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:31:35.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:31:35.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:31:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 31, 22), 9.88, 50.81, 0.0, 18.26, 12.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:31:36.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:31:22
2025-12-04T02:31:36.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:31:36.524 [DEBUG] [Thread-128109] [transport.py] [_log()] starting thread (client mode): 0xa2729630
2025-12-04T02:31:36.524 [DEBUG] [Thread-128109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:31:36.544 [DEBUG] [Thread-128109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:31:36.544 [INFO] [Thread-128109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] client lang: <none>
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] server lang: <none>
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] kex follows: False
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] Compression: none
2025-12-04T02:31:36.548 [DEBUG] [Thread-128109] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:31:36.565 [DEBUG] [Thread-128109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:31:36.565 [DEBUG] [Thread-128109] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:31:36.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:31:36.566 [DEBUG] [Thread-128109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:31:36.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:31:36.568 [DEBUG] [Thread-128109] [transport.py] [_log()] userauth is OK
2025-12-04T02:31:36.568 [DEBUG] [Thread-128109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:31:36.569 [DEBUG] [Thread-128109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:31:36.569 [DEBUG] [Thread-128109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:31:36.569 [DEBUG] [Thread-128109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:31:36.603 [INFO] [Thread-128109] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:31:36.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:31:37.156 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:37.259 [DEBUG] [Thread-128109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:31:37.259 [DEBUG] [Thread-128109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:31:37.259 [DEBUG] [Thread-128109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:31:37.300 [DEBUG] [Thread-128109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:31:37.300 [DEBUG] [Thread-128109] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:31:37.303 [DEBUG] [Thread-128109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:31:37.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:31:37.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:31:37.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:31:37.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:31:37.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:31:37.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:31:37.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:31:37.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.021572 -999.00  +12.30  13.44     55   +3.60 1 1 1 1 1     0    0 7.47 -63.55 ZNESW 12.2 13.4 142.4 14.4 12.8 -24.8 12.7 -24.3 12.5 -22.7 12.8 -23.6
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.021572
2025-12-04T02:31:37.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:31:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:31:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:31:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:31:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:31:37.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:31:22', tmtdew=9.88, humidity=50.81, cloud=0.0, wind=18.26, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:31:22', seeing=1.86, atlas_timestamp='2025-12-04T00:31:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:29:00')
2025-12-04T02:31:37.328 [DEBUG] [Thread-128109] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:31:37.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:31:37.426 [DEBUG] [Thread-128112] [transport.py] [_log()] starting thread (client mode): 0xa272ae30
2025-12-04T02:31:37.426 [DEBUG] [Thread-128112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:31:37.441 [DEBUG] [Thread-128112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:31:37.441 [INFO] [Thread-128112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:31:37.449 [DEBUG] [Thread-128112] [transport.py] [_log()] client lang: <none>
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] server lang: <none>
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] kex follows: False
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] Compression: none
2025-12-04T02:31:37.450 [DEBUG] [Thread-128112] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:31:37.509 [DEBUG] [Thread-128112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:31:37.510 [DEBUG] [Thread-128112] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:31:37.510 [DEBUG] [Thread-128112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:31:37.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:31:37.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:31:37.569 [DEBUG] [Thread-128112] [transport.py] [_log()] userauth is OK
2025-12-04T02:31:37.570 [DEBUG] [Thread-128112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:31:37.570 [DEBUG] [Thread-128112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:31:37.570 [DEBUG] [Thread-128112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:31:37.570 [DEBUG] [Thread-128112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:31:37.593 [INFO] [Thread-128112] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:31:37.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:31:37.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:31:38.460 [DEBUG] [Thread-128112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:31:38.460 [DEBUG] [Thread-128112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:31:38.509 [DEBUG] [Thread-128112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:31:38.510 [DEBUG] [Thread-128112] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:31:38.518 [DEBUG] [Thread-128112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:31:38.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:31:38.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:31:38.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:31:38.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:31:38.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:31:38.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:31:38.553 [DEBUG] [Thread-128112] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:31:41.751 [DEBUG] [Thread-128114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:53.044 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:53.046 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:56.794 [DEBUG] [Thread-128115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:31:57.540 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:08.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:32:08.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:32:08.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:32:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 31, 54), 9.87, 50.81, 0.0, 17.33, 12.2, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:32:09.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:31:54
2025-12-04T02:32:09.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:32:09.527 [DEBUG] [Thread-128116] [transport.py] [_log()] starting thread (client mode): 0xa2709de0
2025-12-04T02:32:09.527 [DEBUG] [Thread-128116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:32:09.547 [DEBUG] [Thread-128116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:32:09.547 [INFO] [Thread-128116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] client lang: <none>
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] server lang: <none>
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] kex follows: False
2025-12-04T02:32:09.550 [DEBUG] [Thread-128116] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] Compression: none
2025-12-04T02:32:09.551 [DEBUG] [Thread-128116] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:32:09.567 [DEBUG] [Thread-128116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:32:09.567 [DEBUG] [Thread-128116] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:32:09.568 [DEBUG] [Thread-128116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:32:09.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:32:09.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:32:09.569 [DEBUG] [Thread-128116] [transport.py] [_log()] userauth is OK
2025-12-04T02:32:09.569 [DEBUG] [Thread-128116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:32:09.569 [DEBUG] [Thread-128116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:32:09.569 [DEBUG] [Thread-128116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:32:09.569 [DEBUG] [Thread-128116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:32:09.578 [INFO] [Thread-128116] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:32:09.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:32:10.256 [DEBUG] [Thread-128116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:32:10.256 [DEBUG] [Thread-128116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:32:10.256 [DEBUG] [Thread-128116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:32:10.297 [DEBUG] [Thread-128116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:32:10.297 [DEBUG] [Thread-128116] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:32:10.299 [DEBUG] [Thread-128116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:32:10.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:32:10.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:32:10.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:32:10.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:32:10.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:32:10.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:32:10.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.021919 -999.00  +12.30  12.81     55   +3.50 1 1 1 1 1     0    0 7.46 -67.10 ZNESW 11.3 12.8 141.2 14.3 12.8 -24.8 12.7 -24.2 12.5 -22.7 12.8 -23.5
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.021919
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:32:10.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:31:54', tmtdew=9.87, humidity=50.81, cloud=0.0, wind=17.33, temperature=12.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:31:54', seeing=1.86, atlas_timestamp='2025-12-04T00:31:33.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:29:00')
2025-12-04T02:32:10.317 [DEBUG] [Thread-128116] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:32:10.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:32:10.400 [DEBUG] [Thread-128119] [transport.py] [_log()] starting thread (client mode): 0xa27081f0
2025-12-04T02:32:10.400 [DEBUG] [Thread-128119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:32:10.415 [DEBUG] [Thread-128119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:32:10.415 [INFO] [Thread-128119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:32:10.422 [DEBUG] [Thread-128119] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:32:10.422 [DEBUG] [Thread-128119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] client lang: <none>
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] server lang: <none>
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] kex follows: False
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] Compression: none
2025-12-04T02:32:10.423 [DEBUG] [Thread-128119] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:32:10.480 [DEBUG] [Thread-128119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:32:10.481 [DEBUG] [Thread-128119] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:32:10.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:32:10.481 [DEBUG] [Thread-128119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:32:10.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:32:10.538 [DEBUG] [Thread-128119] [transport.py] [_log()] userauth is OK
2025-12-04T02:32:10.538 [DEBUG] [Thread-128119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:32:10.538 [DEBUG] [Thread-128119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:32:10.538 [DEBUG] [Thread-128119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:32:10.539 [DEBUG] [Thread-128119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:32:10.558 [INFO] [Thread-128119] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:32:10.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:32:10.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:32:11.382 [DEBUG] [Thread-128119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:32:11.382 [DEBUG] [Thread-128119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:32:11.430 [DEBUG] [Thread-128119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:32:11.431 [DEBUG] [Thread-128119] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:32:11.439 [DEBUG] [Thread-128119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:32:11.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:32:11.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:32:11.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:32:11.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:32:11.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:32:11.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:32:11.474 [DEBUG] [Thread-128119] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:32:11.819 [DEBUG] [Thread-128121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:17.917 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:26.868 [DEBUG] [Thread-128122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:31.915 [DEBUG] [Thread-128123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:38.304 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:41.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:32:41.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:32:41.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:32:41.897 [DEBUG] [Thread-128124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 32, 26), 9.87, 50.83, 0.0, 16.78, 12.22, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:32:42.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:32:26
2025-12-04T02:32:42.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:32:42.462 [DEBUG] [Thread-128125] [transport.py] [_log()] starting thread (client mode): 0xa51cf130
2025-12-04T02:32:42.462 [DEBUG] [Thread-128125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:32:42.477 [DEBUG] [Thread-128125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:32:42.478 [INFO] [Thread-128125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] client lang: <none>
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] server lang: <none>
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] kex follows: False
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] Compression: none
2025-12-04T02:32:42.481 [DEBUG] [Thread-128125] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:32:42.497 [DEBUG] [Thread-128125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:32:42.497 [DEBUG] [Thread-128125] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:32:42.497 [DEBUG] [Thread-128125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:32:42.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:32:42.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:32:42.498 [DEBUG] [Thread-128125] [transport.py] [_log()] userauth is OK
2025-12-04T02:32:42.498 [DEBUG] [Thread-128125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:32:42.498 [DEBUG] [Thread-128125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:32:42.498 [DEBUG] [Thread-128125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:32:42.498 [DEBUG] [Thread-128125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:32:42.528 [INFO] [Thread-128125] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:32:42.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:32:43.155 [DEBUG] [Thread-128125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:32:43.155 [DEBUG] [Thread-128125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:32:43.156 [DEBUG] [Thread-128125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:32:43.197 [DEBUG] [Thread-128125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:32:43.197 [DEBUG] [Thread-128125] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:32:43.199 [DEBUG] [Thread-128125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:32:43.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:32:43.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:32:43.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:32:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:32:43.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:32:43.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:32:43.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.022267 -999.00  +12.30  14.66     55   +3.60 1 1 1 1 1     0    0 7.05 -71.63 ZNESW 15.6 14.7 150.2 16.6 12.7 -24.8 12.7 -24.3 12.4 -22.6 12.7 -23.6
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:32:43.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.022267
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:32:43.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:32:26', tmtdew=9.87, humidity=50.83, cloud=0.0, wind=16.78, temperature=12.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:32:26', seeing=1.86, atlas_timestamp='2025-12-04T00:32:03.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:29:00')
2025-12-04T02:32:43.217 [DEBUG] [Thread-128125] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:32:43.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:32:43.303 [DEBUG] [Thread-128128] [transport.py] [_log()] starting thread (client mode): 0xa2744b20
2025-12-04T02:32:43.303 [DEBUG] [Thread-128128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:32:43.318 [DEBUG] [Thread-128128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:32:43.318 [INFO] [Thread-128128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:32:43.325 [DEBUG] [Thread-128128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] client lang: <none>
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] server lang: <none>
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] kex follows: False
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] Compression: none
2025-12-04T02:32:43.326 [DEBUG] [Thread-128128] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:32:43.383 [DEBUG] [Thread-128128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:32:43.384 [DEBUG] [Thread-128128] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:32:43.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:32:43.384 [DEBUG] [Thread-128128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:32:43.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:32:43.440 [DEBUG] [Thread-128128] [transport.py] [_log()] userauth is OK
2025-12-04T02:32:43.440 [DEBUG] [Thread-128128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:32:43.440 [DEBUG] [Thread-128128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:32:43.440 [DEBUG] [Thread-128128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:32:43.440 [DEBUG] [Thread-128128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:32:43.454 [INFO] [Thread-128128] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:32:43.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:32:43.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:32:44.282 [DEBUG] [Thread-128128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:32:44.283 [DEBUG] [Thread-128128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:32:44.331 [DEBUG] [Thread-128128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:32:44.331 [DEBUG] [Thread-128128] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:32:44.339 [DEBUG] [Thread-128128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:32:44.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:32:44.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:32:44.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:32:44.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:32:44.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:32:44.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:32:44.370 [DEBUG] [Thread-128128] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:32:53.243 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:53.244 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:56.924 [DEBUG] [Thread-128130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:32:58.683 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:11.979 [DEBUG] [Thread-128131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:14.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:33:14.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:33:14.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:33:15.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 32, 58), 9.83, 50.81, 0.0, 16.67, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:33:15.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:32:58
2025-12-04T02:33:15.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:33:15.335 [DEBUG] [Thread-128132] [transport.py] [_log()] starting thread (client mode): 0xa2709d50
2025-12-04T02:33:15.336 [DEBUG] [Thread-128132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:33:15.355 [DEBUG] [Thread-128132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:33:15.355 [INFO] [Thread-128132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] client lang: <none>
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] server lang: <none>
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] kex follows: False
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] Compression: none
2025-12-04T02:33:15.358 [DEBUG] [Thread-128132] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:33:15.374 [DEBUG] [Thread-128132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:33:15.375 [DEBUG] [Thread-128132] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:33:15.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:33:15.375 [DEBUG] [Thread-128132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:33:15.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:33:15.377 [DEBUG] [Thread-128132] [transport.py] [_log()] userauth is OK
2025-12-04T02:33:15.377 [DEBUG] [Thread-128132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:33:15.377 [DEBUG] [Thread-128132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:33:15.377 [DEBUG] [Thread-128132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:33:15.378 [DEBUG] [Thread-128132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:33:15.398 [INFO] [Thread-128132] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:33:15.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:33:16.031 [DEBUG] [Thread-128132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:33:16.031 [DEBUG] [Thread-128132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:33:16.031 [DEBUG] [Thread-128132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:33:16.072 [DEBUG] [Thread-128132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:33:16.072 [DEBUG] [Thread-128132] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:33:16.074 [DEBUG] [Thread-128132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:33:16.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:33:16.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:33:16.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:33:16.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:33:16.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:33:16.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:33:16.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.022614 -999.00  +12.30  16.19     55   +3.60 1 1 1 1 1     0    0 7.09 -73.08 ZNESW 16.1 16.2 140.8 18.8 12.7 -24.8 12.6 -24.2 12.4 -22.6 12.7 -23.5
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.022614
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:33:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:32:58', tmtdew=9.83, humidity=50.81, cloud=0.0, wind=16.67, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:32:58', seeing=1.86, atlas_timestamp='2025-12-04T00:32:33.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:29:00')
2025-12-04T02:33:16.091 [DEBUG] [Thread-128132] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:33:16.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:33:16.176 [DEBUG] [Thread-128135] [transport.py] [_log()] starting thread (client mode): 0xa272a6b0
2025-12-04T02:33:16.176 [DEBUG] [Thread-128135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:33:16.191 [DEBUG] [Thread-128135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:33:16.191 [INFO] [Thread-128135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] client lang: <none>
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] server lang: <none>
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] kex follows: False
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] Compression: none
2025-12-04T02:33:16.198 [DEBUG] [Thread-128135] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:33:16.256 [DEBUG] [Thread-128135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:33:16.257 [DEBUG] [Thread-128135] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:33:16.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:33:16.257 [DEBUG] [Thread-128135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:33:16.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:33:16.312 [DEBUG] [Thread-128135] [transport.py] [_log()] userauth is OK
2025-12-04T02:33:16.313 [DEBUG] [Thread-128135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:33:16.313 [DEBUG] [Thread-128135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:33:16.313 [DEBUG] [Thread-128135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:33:16.313 [DEBUG] [Thread-128135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:33:16.332 [INFO] [Thread-128135] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:33:16.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:33:16.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:33:17.188 [DEBUG] [Thread-128135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:33:17.188 [DEBUG] [Thread-128135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:33:17.236 [DEBUG] [Thread-128135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:33:17.236 [DEBUG] [Thread-128135] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:33:17.245 [DEBUG] [Thread-128135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:33:17.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:33:17.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:33:17.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:33:17.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:33:17.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:33:17.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:33:17.279 [DEBUG] [Thread-128135] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:33:19.063 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:27.009 [DEBUG] [Thread-128137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:31.967 [DEBUG] [Thread-128138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:39.444 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:42.052 [DEBUG] [Thread-128139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:47.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:33:47.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:33:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:33:47.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 33, 30), 9.81, 50.86, 0.0, 15.58, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:33:47.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:33:30
2025-12-04T02:33:48.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:33:48.255 [DEBUG] [Thread-128140] [transport.py] [_log()] starting thread (client mode): 0xa2729db0
2025-12-04T02:33:48.255 [DEBUG] [Thread-128140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:33:48.275 [DEBUG] [Thread-128140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:33:48.275 [INFO] [Thread-128140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] client lang: <none>
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] server lang: <none>
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] kex follows: False
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] Compression: none
2025-12-04T02:33:48.279 [DEBUG] [Thread-128140] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:33:48.301 [DEBUG] [Thread-128140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:33:48.301 [DEBUG] [Thread-128140] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:33:48.302 [DEBUG] [Thread-128140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:33:48.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:33:48.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:33:48.304 [DEBUG] [Thread-128140] [transport.py] [_log()] userauth is OK
2025-12-04T02:33:48.304 [DEBUG] [Thread-128140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:33:48.304 [DEBUG] [Thread-128140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:33:48.304 [DEBUG] [Thread-128140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:33:48.304 [DEBUG] [Thread-128140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:33:48.329 [INFO] [Thread-128140] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:33:48.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:33:48.981 [DEBUG] [Thread-128140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:33:48.981 [DEBUG] [Thread-128140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:33:48.982 [DEBUG] [Thread-128140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:33:49.023 [DEBUG] [Thread-128140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:33:49.023 [DEBUG] [Thread-128140] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:33:49.026 [DEBUG] [Thread-128140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:33:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:33:49.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:33:49.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:33:49.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:33:49.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:33:49.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:33:49.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:33:49.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:33:49.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:33:49.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.022961 -999.00  +12.30  13.04     55   +3.60 1 1 1 1 1     0    0 7.24 -65.43 ZNESW 13.4 13.0 144.2 16.5 12.8 -24.8 12.7 -24.2 12.4 -22.6 12.7 -23.4
2025-12-04T02:33:49.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:33:49.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:33:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.022961
2025-12-04T02:33:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:33:49.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:33:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:33:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:33:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:33:49.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:33:30', tmtdew=9.81, humidity=50.86, cloud=0.0, wind=15.58, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:33:30', seeing=1.86, atlas_timestamp='2025-12-04T00:33:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:33:49.053 [DEBUG] [Thread-128140] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:33:49.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:33:49.149 [DEBUG] [Thread-128143] [transport.py] [_log()] starting thread (client mode): 0xa2709d50
2025-12-04T02:33:49.149 [DEBUG] [Thread-128143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:33:49.164 [DEBUG] [Thread-128143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:33:49.164 [INFO] [Thread-128143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:33:49.171 [DEBUG] [Thread-128143] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] client lang: <none>
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] server lang: <none>
2025-12-04T02:33:49.172 [DEBUG] [Thread-128143] [transport.py] [_log()] kex follows: False
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] Compression: none
2025-12-04T02:33:49.173 [DEBUG] [Thread-128143] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:33:49.232 [DEBUG] [Thread-128143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:33:49.232 [DEBUG] [Thread-128143] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:33:49.233 [DEBUG] [Thread-128143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:33:49.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:33:49.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:33:49.292 [DEBUG] [Thread-128143] [transport.py] [_log()] userauth is OK
2025-12-04T02:33:49.293 [DEBUG] [Thread-128143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:33:49.293 [DEBUG] [Thread-128143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:33:49.293 [DEBUG] [Thread-128143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:33:49.293 [DEBUG] [Thread-128143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:33:49.314 [INFO] [Thread-128143] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:33:49.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:33:49.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:33:50.196 [DEBUG] [Thread-128143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:33:50.197 [DEBUG] [Thread-128143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:33:50.245 [DEBUG] [Thread-128143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:33:50.245 [DEBUG] [Thread-128143] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:33:50.254 [DEBUG] [Thread-128143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:33:50.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:33:50.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:33:50.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:33:50.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:33:50.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:33:50.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:33:50.288 [DEBUG] [Thread-128143] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:33:53.441 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:53.442 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:57.085 [DEBUG] [Thread-128145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:33:59.825 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:12.124 [DEBUG] [Thread-128146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:20.206 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:20.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:34:20.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:34:20.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:34:20.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 34, 2), 9.81, 50.86, 0.0, 15.92, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:34:20.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:34:02
2025-12-04T02:34:21.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:34:21.234 [DEBUG] [Thread-128147] [transport.py] [_log()] starting thread (client mode): 0xa51cca00
2025-12-04T02:34:21.234 [DEBUG] [Thread-128147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:34:21.254 [DEBUG] [Thread-128147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:34:21.255 [INFO] [Thread-128147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:21.258 [DEBUG] [Thread-128147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] client lang: <none>
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] server lang: <none>
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] kex follows: False
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:34:21.259 [DEBUG] [Thread-128147] [transport.py] [_log()] Compression: none
2025-12-04T02:34:21.260 [DEBUG] [Thread-128147] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:34:21.276 [DEBUG] [Thread-128147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:34:21.276 [DEBUG] [Thread-128147] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:34:21.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:34:21.278 [DEBUG] [Thread-128147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:34:21.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:34:21.280 [DEBUG] [Thread-128147] [transport.py] [_log()] userauth is OK
2025-12-04T02:34:21.280 [DEBUG] [Thread-128147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:34:21.280 [DEBUG] [Thread-128147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:34:21.280 [DEBUG] [Thread-128147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:34:21.280 [DEBUG] [Thread-128147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:34:21.304 [INFO] [Thread-128147] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:34:21.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:34:21.932 [DEBUG] [Thread-128147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:34:21.933 [DEBUG] [Thread-128147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:34:21.933 [DEBUG] [Thread-128147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:34:21.974 [DEBUG] [Thread-128147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:34:21.974 [DEBUG] [Thread-128147] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:34:21.977 [DEBUG] [Thread-128147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:34:21.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:34:21.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:34:21.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:34:21.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:34:21.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:34:21.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:34:21.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.023308 -999.00  +12.30  12.43     55   +3.60 1 1 1 1 1     0    0 7.18 -67.73 ZNESW 13.5 12.4 135.4 15.5 12.8 -24.8 12.7 -24.3 12.4 -22.5 12.7 -23.6
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.023308
2025-12-04T02:34:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:34:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:34:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:34:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:34:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:34:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:34:02', tmtdew=9.81, humidity=50.86, cloud=0.0, wind=15.92, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:02', seeing=1.86, atlas_timestamp='2025-12-04T00:33:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:34:22.000 [DEBUG] [Thread-128147] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:34:22.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:34:22.093 [DEBUG] [Thread-128150] [transport.py] [_log()] starting thread (client mode): 0xa51d0e50
2025-12-04T02:34:22.093 [DEBUG] [Thread-128150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:34:22.107 [DEBUG] [Thread-128150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:34:22.107 [INFO] [Thread-128150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:22.115 [DEBUG] [Thread-128150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] client lang: <none>
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] server lang: <none>
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] kex follows: False
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] Compression: none
2025-12-04T02:34:22.116 [DEBUG] [Thread-128150] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:34:22.171 [DEBUG] [Thread-128150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:34:22.172 [DEBUG] [Thread-128150] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:34:22.181 [DEBUG] [Thread-128150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:34:22.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:34:22.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:34:22.229 [DEBUG] [Thread-128150] [transport.py] [_log()] userauth is OK
2025-12-04T02:34:22.229 [DEBUG] [Thread-128150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:34:22.229 [DEBUG] [Thread-128150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:34:22.229 [DEBUG] [Thread-128150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:34:22.229 [DEBUG] [Thread-128150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:34:22.248 [INFO] [Thread-128150] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:34:22.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:34:22.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:34:23.081 [DEBUG] [Thread-128150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:34:23.081 [DEBUG] [Thread-128150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:34:23.129 [DEBUG] [Thread-128150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:34:23.129 [DEBUG] [Thread-128150] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:34:23.137 [DEBUG] [Thread-128150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:34:23.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:34:23.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:34:23.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:34:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:34:23.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:34:23.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:34:23.172 [DEBUG] [Thread-128150] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:34:27.153 [DEBUG] [Thread-128152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:32.026 [DEBUG] [Thread-128153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:40.628 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:42.198 [DEBUG] [Thread-128154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:53.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:34:53.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:34:53.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:34:53.643 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:53.644 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:34:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 34, 34), 9.83, 50.95, 0.0, 16.52, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:34:53.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:34:34
2025-12-04T02:34:53.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:34:54.136 [DEBUG] [Thread-128155] [transport.py] [_log()] starting thread (client mode): 0xa2729930
2025-12-04T02:34:54.136 [DEBUG] [Thread-128155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:34:54.158 [DEBUG] [Thread-128155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:34:54.159 [INFO] [Thread-128155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:34:54.161 [DEBUG] [Thread-128155] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] client lang: <none>
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] server lang: <none>
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] kex follows: False
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] Compression: none
2025-12-04T02:34:54.162 [DEBUG] [Thread-128155] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:34:54.182 [DEBUG] [Thread-128155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:34:54.182 [DEBUG] [Thread-128155] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:34:54.182 [DEBUG] [Thread-128155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:34:54.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:34:54.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:34:54.184 [DEBUG] [Thread-128155] [transport.py] [_log()] userauth is OK
2025-12-04T02:34:54.184 [DEBUG] [Thread-128155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:34:54.185 [DEBUG] [Thread-128155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:34:54.185 [DEBUG] [Thread-128155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:34:54.185 [DEBUG] [Thread-128155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:34:54.220 [INFO] [Thread-128155] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:34:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:34:54.873 [DEBUG] [Thread-128155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:34:54.873 [DEBUG] [Thread-128155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:34:54.873 [DEBUG] [Thread-128155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:34:54.913 [DEBUG] [Thread-128155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:34:54.913 [DEBUG] [Thread-128155] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:34:54.916 [DEBUG] [Thread-128155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:34:54.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:34:54.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:34:54.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:34:54.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:34:54.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:34:54.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:34:54.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.024003 -999.00  +12.30  12.46     55   +3.60 1 1 1 1 1     0    0 6.93 -72.17 ZNESW 10.8 12.5 137.6 17.5 12.8 -24.9 12.6 -24.3 12.4 -22.7 12.7 -23.6
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.024003
2025-12-04T02:34:54.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:34:54.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:34:54.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:34:54.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:34:54.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:34:54.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:34:34', tmtdew=9.83, humidity=50.95, cloud=0.0, wind=16.52, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:34:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:34:54.932 [DEBUG] [Thread-128155] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:34:55.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:34:55.017 [DEBUG] [Thread-128158] [transport.py] [_log()] starting thread (client mode): 0xa51ce8f0
2025-12-04T02:34:55.018 [DEBUG] [Thread-128158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:34:55.032 [DEBUG] [Thread-128158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:34:55.032 [INFO] [Thread-128158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:34:55.039 [DEBUG] [Thread-128158] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] client lang: <none>
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] server lang: <none>
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] kex follows: False
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] Compression: none
2025-12-04T02:34:55.040 [DEBUG] [Thread-128158] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:34:55.095 [DEBUG] [Thread-128158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:34:55.095 [DEBUG] [Thread-128158] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:34:55.095 [DEBUG] [Thread-128158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:34:55.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:34:55.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:34:55.153 [DEBUG] [Thread-128158] [transport.py] [_log()] userauth is OK
2025-12-04T02:34:55.153 [DEBUG] [Thread-128158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:34:55.153 [DEBUG] [Thread-128158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:34:55.153 [DEBUG] [Thread-128158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:34:55.153 [DEBUG] [Thread-128158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:34:55.175 [INFO] [Thread-128158] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:34:55.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:34:55.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:34:56.024 [DEBUG] [Thread-128158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:34:56.024 [DEBUG] [Thread-128158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:34:56.072 [DEBUG] [Thread-128158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:34:56.072 [DEBUG] [Thread-128158] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:34:56.081 [DEBUG] [Thread-128158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:34:56.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:34:56.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:34:56.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:34:56.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:34:56.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:34:56.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:34:56.116 [DEBUG] [Thread-128158] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:34:57.226 [DEBUG] [Thread-128160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:01.055 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:12.277 [DEBUG] [Thread-128161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:21.462 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:26.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:35:26.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:35:26.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:35:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 35, 6), 9.77, 51.18, 0.0, 15.77, 12.13, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:35:26.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:35:06
2025-12-04T02:35:26.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:35:27.083 [DEBUG] [Thread-128162] [transport.py] [_log()] starting thread (client mode): 0xa51cca00
2025-12-04T02:35:27.083 [DEBUG] [Thread-128162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:35:27.105 [DEBUG] [Thread-128162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:35:27.105 [INFO] [Thread-128162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:35:27.108 [DEBUG] [Thread-128162] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] client lang: <none>
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] server lang: <none>
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] kex follows: False
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] Compression: none
2025-12-04T02:35:27.109 [DEBUG] [Thread-128162] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:35:27.126 [DEBUG] [Thread-128162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:35:27.127 [DEBUG] [Thread-128162] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:35:27.127 [DEBUG] [Thread-128162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:35:27.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:35:27.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:35:27.129 [DEBUG] [Thread-128162] [transport.py] [_log()] userauth is OK
2025-12-04T02:35:27.129 [DEBUG] [Thread-128162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:35:27.130 [DEBUG] [Thread-128162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:35:27.130 [DEBUG] [Thread-128162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:35:27.130 [DEBUG] [Thread-128162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:35:27.155 [INFO] [Thread-128162] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:35:27.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:35:27.303 [DEBUG] [Thread-128164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:27.751 [DEBUG] [Thread-128162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:35:27.752 [DEBUG] [Thread-128162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:35:27.752 [DEBUG] [Thread-128162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:35:27.793 [DEBUG] [Thread-128162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:35:27.793 [DEBUG] [Thread-128162] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:35:27.796 [DEBUG] [Thread-128162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:35:27.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:35:27.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:35:27.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:35:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:35:27.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:35:27.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:35:27.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.024350 -999.00  +12.30  10.56     55   +3.60 1 1 1 1 1     0    0 7.29 -64.71 ZNESW 10.8 10.6 129.2 14.5 12.7 -24.8 12.6 -24.2 12.4 -22.7 12.7 -23.5
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:35:27.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.024350
2025-12-04T02:35:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:35:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:35:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:35:27.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:35:27.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:35:27.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:35:06', tmtdew=9.77, humidity=51.18, cloud=0.0, wind=15.77, temperature=12.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:35:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:35:27.820 [DEBUG] [Thread-128162] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:35:27.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:35:27.916 [DEBUG] [Thread-128166] [transport.py] [_log()] starting thread (client mode): 0xa2746f50
2025-12-04T02:35:27.916 [DEBUG] [Thread-128166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:35:27.931 [DEBUG] [Thread-128166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:35:27.931 [INFO] [Thread-128166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:35:27.938 [DEBUG] [Thread-128166] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:35:27.938 [DEBUG] [Thread-128166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:35:27.938 [DEBUG] [Thread-128166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] client lang: <none>
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] server lang: <none>
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] kex follows: False
2025-12-04T02:35:27.939 [DEBUG] [Thread-128166] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] Compression: none
2025-12-04T02:35:27.940 [DEBUG] [Thread-128166] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:35:27.997 [DEBUG] [Thread-128166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:35:27.997 [DEBUG] [Thread-128166] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:35:27.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:35:27.999 [DEBUG] [Thread-128166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:35:27.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:35:28.053 [DEBUG] [Thread-128166] [transport.py] [_log()] userauth is OK
2025-12-04T02:35:28.053 [DEBUG] [Thread-128166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:35:28.053 [DEBUG] [Thread-128166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:35:28.053 [DEBUG] [Thread-128166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:35:28.053 [DEBUG] [Thread-128166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:35:28.073 [INFO] [Thread-128166] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:35:28.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:35:28.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:35:28.927 [DEBUG] [Thread-128166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:35:28.927 [DEBUG] [Thread-128166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:35:28.976 [DEBUG] [Thread-128166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:35:28.976 [DEBUG] [Thread-128166] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:35:28.985 [DEBUG] [Thread-128166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:35:28.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:35:28.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:35:29.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:35:29.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:35:29.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:35:29.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:35:29.019 [DEBUG] [Thread-128166] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:35:32.084 [DEBUG] [Thread-128168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:41.864 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:42.331 [DEBUG] [Thread-128169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:53.843 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:53.844 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:57.372 [DEBUG] [Thread-128170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:35:59.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:35:59.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:35:59.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:35:59.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 35, 38), 9.69, 51.78, 0.0, 15.53, 12.08, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:35:59.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:35:38
2025-12-04T02:35:59.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:36:00.034 [DEBUG] [Thread-128171] [transport.py] [_log()] starting thread (client mode): 0xa2728880
2025-12-04T02:36:00.034 [DEBUG] [Thread-128171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:36:00.054 [DEBUG] [Thread-128171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:36:00.054 [INFO] [Thread-128171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:36:00.055 [DEBUG] [Thread-128171] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] client lang: <none>
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] server lang: <none>
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] kex follows: False
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] Compression: none
2025-12-04T02:36:00.056 [DEBUG] [Thread-128171] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:36:00.066 [DEBUG] [Thread-128171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:36:00.066 [DEBUG] [Thread-128171] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:36:00.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:36:00.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] userauth is OK
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:36:00.067 [DEBUG] [Thread-128171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:36:00.080 [INFO] [Thread-128171] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:36:00.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:36:00.714 [DEBUG] [Thread-128171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:36:00.714 [DEBUG] [Thread-128171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:36:00.715 [DEBUG] [Thread-128171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:36:00.755 [DEBUG] [Thread-128171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:36:00.755 [DEBUG] [Thread-128171] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:36:00.757 [DEBUG] [Thread-128171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:36:00.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:36:00.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:36:00.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:36:00.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:36:00.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:36:00.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:36:00.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.024697 -999.00  +12.30  12.20     55   +3.70 1 1 1 1 1     0    0 7.14 -64.25 ZNESW 11.5 12.2 139.2 13.9 12.7 -24.8 12.6 -24.2 12.4 -22.7 12.7 -23.5
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.024697
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:36:00.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:35:38', tmtdew=9.69, humidity=51.78, cloud=0.0, wind=15.53, temperature=12.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:35:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:36:00.778 [DEBUG] [Thread-128171] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:36:00.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:36:00.866 [DEBUG] [Thread-128174] [transport.py] [_log()] starting thread (client mode): 0xa517dcf0
2025-12-04T02:36:00.866 [DEBUG] [Thread-128174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:36:00.881 [DEBUG] [Thread-128174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:36:00.881 [INFO] [Thread-128174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:36:00.888 [DEBUG] [Thread-128174] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:36:00.888 [DEBUG] [Thread-128174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:36:00.888 [DEBUG] [Thread-128174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] client lang: <none>
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] server lang: <none>
2025-12-04T02:36:00.889 [DEBUG] [Thread-128174] [transport.py] [_log()] kex follows: False
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] Compression: none
2025-12-04T02:36:00.890 [DEBUG] [Thread-128174] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:36:00.944 [DEBUG] [Thread-128174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:36:00.945 [DEBUG] [Thread-128174] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:36:00.945 [DEBUG] [Thread-128174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:36:00.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:36:00.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:36:01.001 [DEBUG] [Thread-128174] [transport.py] [_log()] userauth is OK
2025-12-04T02:36:01.001 [DEBUG] [Thread-128174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:36:01.001 [DEBUG] [Thread-128174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:36:01.001 [DEBUG] [Thread-128174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:36:01.001 [DEBUG] [Thread-128174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:36:01.019 [INFO] [Thread-128174] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:36:01.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:36:01.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:36:01.914 [DEBUG] [Thread-128174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:36:01.914 [DEBUG] [Thread-128174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:36:01.962 [DEBUG] [Thread-128174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:36:01.962 [DEBUG] [Thread-128174] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:36:01.971 [DEBUG] [Thread-128174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:36:01.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:36:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:36:01.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:36:01.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:36:01.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:36:01.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:36:02.005 [DEBUG] [Thread-128174] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:36:02.382 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:12.399 [DEBUG] [Thread-128176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:22.834 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:27.432 [DEBUG] [Thread-128177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:32.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:36:32.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:36:32.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:36:32.137 [DEBUG] [Thread-128178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 36, 10), 9.67, 51.85, 0.0, 17.64, 12.07, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:36:32.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:36:10
2025-12-04T02:36:32.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:36:33.005 [DEBUG] [Thread-128179] [transport.py] [_log()] starting thread (client mode): 0xa517caf0
2025-12-04T02:36:33.005 [DEBUG] [Thread-128179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:36:33.026 [DEBUG] [Thread-128179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:36:33.026 [INFO] [Thread-128179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] client lang: <none>
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] server lang: <none>
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] kex follows: False
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] Compression: none
2025-12-04T02:36:33.029 [DEBUG] [Thread-128179] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:36:33.045 [DEBUG] [Thread-128179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:36:33.045 [DEBUG] [Thread-128179] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:36:33.045 [DEBUG] [Thread-128179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:36:33.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:36:33.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:36:33.046 [DEBUG] [Thread-128179] [transport.py] [_log()] userauth is OK
2025-12-04T02:36:33.046 [DEBUG] [Thread-128179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:36:33.046 [DEBUG] [Thread-128179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:36:33.046 [DEBUG] [Thread-128179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:36:33.046 [DEBUG] [Thread-128179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:36:33.063 [INFO] [Thread-128179] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:36:33.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:36:33.688 [DEBUG] [Thread-128179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:36:33.688 [DEBUG] [Thread-128179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:36:33.688 [DEBUG] [Thread-128179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:36:33.730 [DEBUG] [Thread-128179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:36:33.730 [DEBUG] [Thread-128179] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:36:33.732 [DEBUG] [Thread-128179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:36:33.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:36:33.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:36:33.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:36:33.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:36:33.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:36:33.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:36:33.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.025044 -999.00  +12.20  11.84     55   +3.60 1 1 1 1 1     0    0 7.17 -64.67 ZNESW 13.4 11.8 145.0 17.1 12.7 -24.9 12.6 -24.3 12.4 -22.6 12.7 -23.6
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.025044
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:36:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:36:10', tmtdew=9.67, humidity=51.85, cloud=0.0, wind=17.64, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:36:03.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03725000000000023, -0.047750000000000625, 0.034750000000000725, -0.04550000000000054, 0.0035000000000007248, 0.024250000000002103, 0.0, -0.023749999999999716, 0.0024999999999995026, 0.002500000000001279, -0.008750000000000924, 0.019000000000000128, 0.049999999999998934, 0.024250000000000327, -0.12700000000000067, -0.026500000000000412, 0.029249999999999332, 0.024499999999999744, -0.07399999999999984, 0.01524999999999821, 0.10149999999999793, 0.03074999999999939, -0.05024999999999835, -0.008750000000000924, 0.045999999999999375, 0.07000000000000028, 0.040749999999999176, 0.05550000000000033, 0.1269999999999989, -0.10099999999999909, -0.15249999999999986, -0.058999999999999275, 0.014749999999999375], zp_timestamp='2025-12-04T00:32:00')
2025-12-04T02:36:33.752 [DEBUG] [Thread-128179] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:36:33.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:36:33.839 [DEBUG] [Thread-128182] [transport.py] [_log()] starting thread (client mode): 0xa51cc100
2025-12-04T02:36:33.839 [DEBUG] [Thread-128182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:36:33.859 [DEBUG] [Thread-128182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:36:33.859 [INFO] [Thread-128182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:36:33.866 [DEBUG] [Thread-128182] [transport.py] [_log()] client lang: <none>
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] server lang: <none>
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] kex follows: False
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] Compression: none
2025-12-04T02:36:33.867 [DEBUG] [Thread-128182] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:36:33.923 [DEBUG] [Thread-128182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:36:33.923 [DEBUG] [Thread-128182] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:36:33.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:36:33.924 [DEBUG] [Thread-128182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:36:33.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:36:33.984 [DEBUG] [Thread-128182] [transport.py] [_log()] userauth is OK
2025-12-04T02:36:33.984 [DEBUG] [Thread-128182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:36:33.984 [DEBUG] [Thread-128182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:36:33.984 [DEBUG] [Thread-128182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:36:33.984 [DEBUG] [Thread-128182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:36:34.002 [INFO] [Thread-128182] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:36:34.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:36:34.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:36:34.831 [DEBUG] [Thread-128182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:36:34.831 [DEBUG] [Thread-128182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:36:34.879 [DEBUG] [Thread-128182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:36:34.879 [DEBUG] [Thread-128182] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:36:34.887 [DEBUG] [Thread-128182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:36:34.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:36:34.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:36:34.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:36:34.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:36:34.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:36:34.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:36:34.920 [DEBUG] [Thread-128182] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:36:42.458 [DEBUG] [Thread-128184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:43.539 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:54.044 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:54.045 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:36:57.502 [DEBUG] [Thread-128185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:03.928 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:04.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:37:04.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:37:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:37:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 36, 42), 9.56, 52.04, 0.0, 16.52, 12.0, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:37:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:36:42
2025-12-04T02:37:05.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:37:05.875 [DEBUG] [Thread-128186] [transport.py] [_log()] starting thread (client mode): 0xa517f520
2025-12-04T02:37:05.875 [DEBUG] [Thread-128186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:37:05.893 [DEBUG] [Thread-128186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:37:05.893 [INFO] [Thread-128186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] client lang: <none>
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] server lang: <none>
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] kex follows: False
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:37:05.894 [DEBUG] [Thread-128186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:37:05.895 [DEBUG] [Thread-128186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:37:05.895 [DEBUG] [Thread-128186] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:37:05.895 [DEBUG] [Thread-128186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:37:05.895 [DEBUG] [Thread-128186] [transport.py] [_log()] Compression: none
2025-12-04T02:37:05.895 [DEBUG] [Thread-128186] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:37:05.906 [DEBUG] [Thread-128186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:37:05.907 [DEBUG] [Thread-128186] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:37:05.907 [DEBUG] [Thread-128186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:37:05.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:37:05.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:37:05.909 [DEBUG] [Thread-128186] [transport.py] [_log()] userauth is OK
2025-12-04T02:37:05.909 [DEBUG] [Thread-128186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:37:05.909 [DEBUG] [Thread-128186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:37:05.909 [DEBUG] [Thread-128186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:37:05.909 [DEBUG] [Thread-128186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:37:05.927 [INFO] [Thread-128186] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:37:05.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:37:06.495 [DEBUG] [Thread-128186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:37:06.495 [DEBUG] [Thread-128186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:37:06.496 [DEBUG] [Thread-128186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:37:06.537 [DEBUG] [Thread-128186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:37:06.537 [DEBUG] [Thread-128186] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:37:06.538 [DEBUG] [Thread-128186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:37:06.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:37:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:37:06.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:37:06.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:37:06.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:37:06.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:37:06.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.025392 -999.00  +12.20  15.66     55   +3.60 1 1 1 1 1     0    0 7.11 -62.07 ZNESW 14.2 15.7 144.4 18.1 12.7 -24.7 12.6 -24.2 12.4 -22.6 12.7 -23.4
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.025392
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:37:06.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:36:42', tmtdew=9.56, humidity=52.04, cloud=0.0, wind=16.52, temperature=12.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:36:33.869', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:35:00')
2025-12-04T02:37:06.555 [DEBUG] [Thread-128186] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:37:06.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:37:06.648 [DEBUG] [Thread-128189] [transport.py] [_log()] starting thread (client mode): 0xa517d1e0
2025-12-04T02:37:06.648 [DEBUG] [Thread-128189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:37:06.662 [DEBUG] [Thread-128189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:37:06.662 [INFO] [Thread-128189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:06.670 [DEBUG] [Thread-128189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] client lang: <none>
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] server lang: <none>
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] kex follows: False
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:37:06.671 [DEBUG] [Thread-128189] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:37:06.672 [DEBUG] [Thread-128189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:37:06.672 [DEBUG] [Thread-128189] [transport.py] [_log()] Compression: none
2025-12-04T02:37:06.672 [DEBUG] [Thread-128189] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:37:06.733 [DEBUG] [Thread-128189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:37:06.734 [DEBUG] [Thread-128189] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:37:06.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:37:06.735 [DEBUG] [Thread-128189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:37:06.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:37:06.788 [DEBUG] [Thread-128189] [transport.py] [_log()] userauth is OK
2025-12-04T02:37:06.789 [DEBUG] [Thread-128189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:37:06.789 [DEBUG] [Thread-128189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:37:06.789 [DEBUG] [Thread-128189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:37:06.789 [DEBUG] [Thread-128189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:37:06.808 [INFO] [Thread-128189] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:37:06.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:37:06.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:37:07.635 [DEBUG] [Thread-128189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:37:07.635 [DEBUG] [Thread-128189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:37:07.684 [DEBUG] [Thread-128189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:37:07.684 [DEBUG] [Thread-128189] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:37:07.692 [DEBUG] [Thread-128189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:37:07.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:37:07.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:37:07.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:37:07.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:37:07.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:37:07.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:37:07.724 [DEBUG] [Thread-128189] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:37:12.532 [DEBUG] [Thread-128191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:24.376 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:27.565 [DEBUG] [Thread-128192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:32.214 [DEBUG] [Thread-128193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:37.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:37:37.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:37:37.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:37:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 37, 14), 9.55, 52.09, 0.0, 16.11, 12.03, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:37:38.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:37:14
2025-12-04T02:37:38.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:37:38.661 [DEBUG] [Thread-128194] [transport.py] [_log()] starting thread (client mode): 0xa517f970
2025-12-04T02:37:38.661 [DEBUG] [Thread-128194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:37:38.675 [DEBUG] [Thread-128194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:37:38.675 [INFO] [Thread-128194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] client lang: <none>
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] server lang: <none>
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] kex follows: False
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] Compression: none
2025-12-04T02:37:38.677 [DEBUG] [Thread-128194] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:37:38.686 [DEBUG] [Thread-128194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:37:38.686 [DEBUG] [Thread-128194] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:37:38.686 [DEBUG] [Thread-128194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:37:38.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:37:38.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:37:38.687 [DEBUG] [Thread-128194] [transport.py] [_log()] userauth is OK
2025-12-04T02:37:38.688 [DEBUG] [Thread-128194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:37:38.688 [DEBUG] [Thread-128194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:37:38.688 [DEBUG] [Thread-128194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:37:38.688 [DEBUG] [Thread-128194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:37:38.709 [INFO] [Thread-128194] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:37:38.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:37:39.304 [DEBUG] [Thread-128194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:37:39.304 [DEBUG] [Thread-128194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:37:39.305 [DEBUG] [Thread-128194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:37:39.345 [DEBUG] [Thread-128194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:37:39.345 [DEBUG] [Thread-128194] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:37:39.347 [DEBUG] [Thread-128194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:37:39.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:37:39.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:37:39.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:37:39.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:37:39.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:37:39.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:37:39.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:37:39.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:37:39.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:37:39.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.025739 -999.00  +12.20  14.40     56   +3.60 1 1 1 1 1     0    0 7.35 -63.43 ZNESW 14.4 14.4 139.6 17.2 12.7 -24.6 12.6 -24.2 12.4 -22.6 12.7 -23.4
2025-12-04T02:37:39.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:37:39.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:37:39.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.025739
2025-12-04T02:37:39.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:37:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:37:39.368 [DEBUG] [Thread-128194] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:37:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:37:39.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:37:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:37:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:37:14', tmtdew=9.55, humidity=52.09, cloud=0.0, wind=16.11, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:37:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:35:00')
2025-12-04T02:37:39.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:37:39.463 [DEBUG] [Thread-128197] [transport.py] [_log()] starting thread (client mode): 0xa517ff10
2025-12-04T02:37:39.463 [DEBUG] [Thread-128197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:37:39.477 [DEBUG] [Thread-128197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:37:39.477 [INFO] [Thread-128197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:37:39.485 [DEBUG] [Thread-128197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] client lang: <none>
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] server lang: <none>
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] kex follows: False
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] Compression: none
2025-12-04T02:37:39.486 [DEBUG] [Thread-128197] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:37:39.548 [DEBUG] [Thread-128197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:37:39.549 [DEBUG] [Thread-128197] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:37:39.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:37:39.558 [DEBUG] [Thread-128197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:37:39.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:37:39.604 [DEBUG] [Thread-128197] [transport.py] [_log()] userauth is OK
2025-12-04T02:37:39.605 [DEBUG] [Thread-128197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:37:39.605 [DEBUG] [Thread-128197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:37:39.605 [DEBUG] [Thread-128197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:37:39.605 [DEBUG] [Thread-128197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:37:39.624 [INFO] [Thread-128197] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:37:39.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:37:39.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:37:40.447 [DEBUG] [Thread-128197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:37:40.447 [DEBUG] [Thread-128197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:37:40.495 [DEBUG] [Thread-128197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:37:40.495 [DEBUG] [Thread-128197] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:37:40.504 [DEBUG] [Thread-128197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:37:40.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:37:40.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:37:40.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:37:40.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:37:40.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:37:40.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:37:40.542 [DEBUG] [Thread-128197] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:37:42.597 [DEBUG] [Thread-128199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:44.770 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:54.246 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:54.247 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:37:57.638 [DEBUG] [Thread-128200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:05.277 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:10.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:38:10.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:38:10.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:38:11.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 37, 46), 9.57, 52.01, 0.0, 16.99, 12.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:38:11.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:37:46
2025-12-04T02:38:11.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:38:11.502 [DEBUG] [Thread-128201] [transport.py] [_log()] starting thread (client mode): 0xa51cd210
2025-12-04T02:38:11.503 [DEBUG] [Thread-128201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:38:11.522 [DEBUG] [Thread-128201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:38:11.522 [INFO] [Thread-128201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:11.525 [DEBUG] [Thread-128201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] client lang: <none>
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] server lang: <none>
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] kex follows: False
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] Compression: none
2025-12-04T02:38:11.526 [DEBUG] [Thread-128201] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:38:11.543 [DEBUG] [Thread-128201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:38:11.543 [DEBUG] [Thread-128201] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:38:11.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:38:11.544 [DEBUG] [Thread-128201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:38:11.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:38:11.546 [DEBUG] [Thread-128201] [transport.py] [_log()] userauth is OK
2025-12-04T02:38:11.546 [DEBUG] [Thread-128201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:38:11.546 [DEBUG] [Thread-128201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:38:11.546 [DEBUG] [Thread-128201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:38:11.546 [DEBUG] [Thread-128201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:38:11.563 [INFO] [Thread-128201] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:38:11.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:38:12.329 [DEBUG] [Thread-128201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:38:12.330 [DEBUG] [Thread-128201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:38:12.330 [DEBUG] [Thread-128201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:38:12.371 [DEBUG] [Thread-128201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:38:12.371 [DEBUG] [Thread-128201] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:38:12.374 [DEBUG] [Thread-128201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:38:12.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:38:12.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:38:12.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:38:12.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:38:12.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:38:12.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:38:12.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.025739 -999.00  +12.20  14.40     56   +3.60 1 1 1 1 1     0    0 7.35 -63.43 ZNESW 14.4 14.4 139.6 17.2 12.7 -24.6 12.6 -24.2 12.4 -22.6 12.7 -23.4
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:38:12.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.025739
2025-12-04T02:38:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:38:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:38:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:38:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:38:12.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:38:12.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:37:46', tmtdew=9.57, humidity=52.01, cloud=0.0, wind=16.99, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:34:35', seeing=1.86, atlas_timestamp='2025-12-04T00:37:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:35:00')
2025-12-04T02:38:12.396 [DEBUG] [Thread-128201] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:38:12.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:38:12.493 [DEBUG] [Thread-128204] [transport.py] [_log()] starting thread (client mode): 0xa2785300
2025-12-04T02:38:12.493 [DEBUG] [Thread-128204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:38:12.507 [DEBUG] [Thread-128204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:38:12.507 [INFO] [Thread-128204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:38:12.515 [DEBUG] [Thread-128204] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:38:12.515 [DEBUG] [Thread-128204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] client lang: <none>
2025-12-04T02:38:12.516 [DEBUG] [Thread-128204] [transport.py] [_log()] server lang: <none>
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] kex follows: False
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] Compression: none
2025-12-04T02:38:12.517 [DEBUG] [Thread-128204] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:38:12.572 [DEBUG] [Thread-128204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:38:12.573 [DEBUG] [Thread-128204] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:38:12.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:38:12.574 [DEBUG] [Thread-128204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:38:12.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:38:12.629 [DEBUG] [Thread-128204] [transport.py] [_log()] userauth is OK
2025-12-04T02:38:12.630 [DEBUG] [Thread-128204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:38:12.630 [DEBUG] [Thread-128204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:38:12.630 [DEBUG] [Thread-128204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:38:12.630 [DEBUG] [Thread-128204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:38:12.657 [INFO] [Thread-128204] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:38:12.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:38:12.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:38:12.667 [DEBUG] [Thread-128206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:13.470 [DEBUG] [Thread-128204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:38:13.471 [DEBUG] [Thread-128204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:38:13.519 [DEBUG] [Thread-128204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:38:13.519 [DEBUG] [Thread-128204] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:38:13.529 [DEBUG] [Thread-128204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:38:13.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:38:13.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:38:13.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:38:13.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:38:13.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:38:13.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:38:13.563 [DEBUG] [Thread-128204] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:38:25.701 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:27.707 [DEBUG] [Thread-128207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:32.267 [DEBUG] [Thread-128208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:42.733 [DEBUG] [Thread-128209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:43.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:38:43.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:38:43.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:38:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 38, 18), 9.57, 52.03, 0.0, 15.79, 12.03, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:38:44.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:38:18
2025-12-04T02:38:44.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:38:44.531 [DEBUG] [Thread-128210] [transport.py] [_log()] starting thread (client mode): 0xa2785990
2025-12-04T02:38:44.531 [DEBUG] [Thread-128210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:38:44.551 [DEBUG] [Thread-128210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:38:44.551 [INFO] [Thread-128210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:38:44.554 [DEBUG] [Thread-128210] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:38:44.554 [DEBUG] [Thread-128210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:38:44.554 [DEBUG] [Thread-128210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:38:44.554 [DEBUG] [Thread-128210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:44.554 [DEBUG] [Thread-128210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] client lang: <none>
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] server lang: <none>
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] kex follows: False
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:38:44.555 [DEBUG] [Thread-128210] [transport.py] [_log()] Compression: none
2025-12-04T02:38:44.556 [DEBUG] [Thread-128210] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:38:44.570 [DEBUG] [Thread-128210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:38:44.570 [DEBUG] [Thread-128210] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:38:44.571 [DEBUG] [Thread-128210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:38:44.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:38:44.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:38:44.573 [DEBUG] [Thread-128210] [transport.py] [_log()] userauth is OK
2025-12-04T02:38:44.573 [DEBUG] [Thread-128210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:38:44.574 [DEBUG] [Thread-128210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:38:44.574 [DEBUG] [Thread-128210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:38:44.574 [DEBUG] [Thread-128210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:38:44.592 [INFO] [Thread-128210] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:38:44.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:38:45.235 [DEBUG] [Thread-128210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:38:45.235 [DEBUG] [Thread-128210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:38:45.236 [DEBUG] [Thread-128210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:38:45.277 [DEBUG] [Thread-128210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:38:45.277 [DEBUG] [Thread-128210] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:38:45.279 [DEBUG] [Thread-128210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:38:45.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:38:45.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:38:45.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:38:45.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:38:45.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:38:45.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:38:45.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.026433 -999.00  +12.20  15.08     55   +3.60 1 1 1 1 1     0    0 7.22 -58.31 ZNESW 15.1 15.1 133.8 22.2 12.7 -24.7 12.6 -24.2 12.3 -22.4 12.7 -23.3
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:38:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.026433
2025-12-04T02:38:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:38:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:38:45.304 [DEBUG] [Thread-128210] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:38:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:38:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:38:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:38:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:38:18', tmtdew=9.57, humidity=52.03, cloud=0.0, wind=15.79, temperature=12.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:38:19', seeing=2.04, atlas_timestamp='2025-12-04T00:38:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:35:00')
2025-12-04T02:38:45.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:38:45.398 [DEBUG] [Thread-128213] [transport.py] [_log()] starting thread (client mode): 0xa51cd720
2025-12-04T02:38:45.399 [DEBUG] [Thread-128213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:38:45.414 [DEBUG] [Thread-128213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:38:45.414 [INFO] [Thread-128213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:38:45.421 [DEBUG] [Thread-128213] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:38:45.422 [DEBUG] [Thread-128213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] client lang: <none>
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] server lang: <none>
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] kex follows: False
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:38:45.423 [DEBUG] [Thread-128213] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:38:45.424 [DEBUG] [Thread-128213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:38:45.424 [DEBUG] [Thread-128213] [transport.py] [_log()] Compression: none
2025-12-04T02:38:45.424 [DEBUG] [Thread-128213] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:38:45.480 [DEBUG] [Thread-128213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:38:45.481 [DEBUG] [Thread-128213] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:38:45.481 [DEBUG] [Thread-128213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:38:45.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:38:45.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:38:45.537 [DEBUG] [Thread-128213] [transport.py] [_log()] userauth is OK
2025-12-04T02:38:45.537 [DEBUG] [Thread-128213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:38:45.537 [DEBUG] [Thread-128213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:38:45.537 [DEBUG] [Thread-128213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:38:45.537 [DEBUG] [Thread-128213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:38:45.556 [INFO] [Thread-128213] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:38:45.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:38:45.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:38:46.104 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:46.411 [DEBUG] [Thread-128213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:38:46.411 [DEBUG] [Thread-128213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:38:46.459 [DEBUG] [Thread-128213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:38:46.459 [DEBUG] [Thread-128213] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:38:46.468 [DEBUG] [Thread-128213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:38:46.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:38:46.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:38:46.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:38:46.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:38:46.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:38:46.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:38:46.503 [DEBUG] [Thread-128213] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:38:54.449 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:54.450 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:38:57.761 [DEBUG] [Thread-128215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:06.485 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:12.809 [DEBUG] [Thread-128216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:16.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:39:16.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:39:16.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:39:17.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 38, 50), 9.62, 52.04, 0.0, 17.65, 12.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:39:17.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:38:50
2025-12-04T02:39:17.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:39:17.489 [DEBUG] [Thread-128217] [transport.py] [_log()] starting thread (client mode): 0xa519aa10
2025-12-04T02:39:17.489 [DEBUG] [Thread-128217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:39:17.509 [DEBUG] [Thread-128217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:39:17.509 [INFO] [Thread-128217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] client lang: <none>
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] server lang: <none>
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] kex follows: False
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:39:17.512 [DEBUG] [Thread-128217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:39:17.513 [DEBUG] [Thread-128217] [transport.py] [_log()] Compression: none
2025-12-04T02:39:17.513 [DEBUG] [Thread-128217] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:39:17.529 [DEBUG] [Thread-128217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:39:17.530 [DEBUG] [Thread-128217] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:39:17.530 [DEBUG] [Thread-128217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:39:17.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:39:17.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:39:17.532 [DEBUG] [Thread-128217] [transport.py] [_log()] userauth is OK
2025-12-04T02:39:17.533 [DEBUG] [Thread-128217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:39:17.533 [DEBUG] [Thread-128217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:39:17.533 [DEBUG] [Thread-128217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:39:17.533 [DEBUG] [Thread-128217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:39:17.555 [INFO] [Thread-128217] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:39:17.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:39:18.331 [DEBUG] [Thread-128217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:39:18.331 [DEBUG] [Thread-128217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:39:18.331 [DEBUG] [Thread-128217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:39:18.372 [DEBUG] [Thread-128217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:39:18.372 [DEBUG] [Thread-128217] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:39:18.375 [DEBUG] [Thread-128217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:39:18.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:39:18.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:39:18.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:39:18.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:39:18.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:39:18.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:39:18.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:39:18.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:39:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:39:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.026780 -999.00  +12.30  16.24     55   +3.70 1 1 1 1 1     0    0 7.34 -59.49 ZNESW 13.7 16.2 135.8 19.0 12.7 -24.6 12.6 -24.0 12.3 -22.5 12.7 -23.5
2025-12-04T02:39:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:39:18.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:39:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.026780
2025-12-04T02:39:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:39:18.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:39:18.402 [DEBUG] [Thread-128217] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:39:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:39:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:39:18.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:39:18.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:38:50', tmtdew=9.62, humidity=52.04, cloud=0.0, wind=17.65, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:38:51', seeing=1.71, atlas_timestamp='2025-12-04T00:38:33.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:35:00')
2025-12-04T02:39:18.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:39:18.499 [DEBUG] [Thread-128220] [transport.py] [_log()] starting thread (client mode): 0xa51994b0
2025-12-04T02:39:18.499 [DEBUG] [Thread-128220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:39:18.514 [DEBUG] [Thread-128220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:39:18.514 [INFO] [Thread-128220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] client lang: <none>
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] server lang: <none>
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] kex follows: False
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:39:18.522 [DEBUG] [Thread-128220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:39:18.523 [DEBUG] [Thread-128220] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:39:18.523 [DEBUG] [Thread-128220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:39:18.523 [DEBUG] [Thread-128220] [transport.py] [_log()] Compression: none
2025-12-04T02:39:18.523 [DEBUG] [Thread-128220] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:39:18.580 [DEBUG] [Thread-128220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:39:18.581 [DEBUG] [Thread-128220] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:39:18.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:39:18.581 [DEBUG] [Thread-128220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:39:18.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:39:18.637 [DEBUG] [Thread-128220] [transport.py] [_log()] userauth is OK
2025-12-04T02:39:18.637 [DEBUG] [Thread-128220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:39:18.637 [DEBUG] [Thread-128220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:39:18.637 [DEBUG] [Thread-128220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:39:18.637 [DEBUG] [Thread-128220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:39:18.656 [INFO] [Thread-128220] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:39:18.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:39:18.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:39:19.492 [DEBUG] [Thread-128220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:39:19.492 [DEBUG] [Thread-128220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:39:19.544 [DEBUG] [Thread-128220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:39:19.544 [DEBUG] [Thread-128220] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:39:19.557 [DEBUG] [Thread-128220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:39:19.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:39:19.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:39:19.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:39:19.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:39:19.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:39:19.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:39:19.592 [DEBUG] [Thread-128220] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:39:26.866 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:27.833 [DEBUG] [Thread-128222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:32.334 [DEBUG] [Thread-128223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:42.875 [DEBUG] [Thread-128224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:47.316 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:49.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:39:49.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:39:49.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:39:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 39, 22), 9.61, 52.04, 0.0, 18.14, 12.07, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:39:50.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:39:22
2025-12-04T02:39:50.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:39:50.620 [DEBUG] [Thread-128225] [transport.py] [_log()] starting thread (client mode): 0xa2787370
2025-12-04T02:39:50.620 [DEBUG] [Thread-128225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:39:50.640 [DEBUG] [Thread-128225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:39:50.640 [INFO] [Thread-128225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] client lang: <none>
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] server lang: <none>
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] kex follows: False
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] Compression: none
2025-12-04T02:39:50.641 [DEBUG] [Thread-128225] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:39:50.648 [DEBUG] [Thread-128225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:39:50.649 [DEBUG] [Thread-128225] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:39:50.649 [DEBUG] [Thread-128225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:39:50.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:39:50.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:39:50.650 [DEBUG] [Thread-128225] [transport.py] [_log()] userauth is OK
2025-12-04T02:39:50.650 [DEBUG] [Thread-128225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:39:50.650 [DEBUG] [Thread-128225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:39:50.650 [DEBUG] [Thread-128225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:39:50.650 [DEBUG] [Thread-128225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:39:50.662 [INFO] [Thread-128225] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:39:50.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:39:51.289 [DEBUG] [Thread-128225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:39:51.290 [DEBUG] [Thread-128225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:39:51.290 [DEBUG] [Thread-128225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:39:51.331 [DEBUG] [Thread-128225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:39:51.331 [DEBUG] [Thread-128225] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:39:51.333 [DEBUG] [Thread-128225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:39:51.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:39:51.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:39:51.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:39:51.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:39:51.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:39:51.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:39:51.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.027128 -999.00  +12.30  13.31     55   +3.70 1 1 1 1 1     0    0 7.12 -59.28 ZNESW 11.4 13.3 138.4 16.7 12.7 -24.8 12.6 -24.1 12.3 -22.4 12.7 -23.4
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.027128
2025-12-04T02:39:51.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:39:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:39:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:39:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:39:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:39:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:39:22', tmtdew=9.61, humidity=52.04, cloud=0.0, wind=18.14, temperature=12.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:39:23', seeing=1.43, atlas_timestamp='2025-12-04T00:39:03.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:39:51.354 [DEBUG] [Thread-128225] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:39:51.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:39:51.439 [DEBUG] [Thread-128228] [transport.py] [_log()] starting thread (client mode): 0xa2787640
2025-12-04T02:39:51.439 [DEBUG] [Thread-128228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:39:51.454 [DEBUG] [Thread-128228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:39:51.454 [INFO] [Thread-128228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] client lang: <none>
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] server lang: <none>
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] kex follows: False
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] Compression: none
2025-12-04T02:39:51.462 [DEBUG] [Thread-128228] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:39:51.519 [DEBUG] [Thread-128228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:39:51.519 [DEBUG] [Thread-128228] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:39:51.520 [DEBUG] [Thread-128228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:39:51.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:39:51.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:39:51.576 [DEBUG] [Thread-128228] [transport.py] [_log()] userauth is OK
2025-12-04T02:39:51.576 [DEBUG] [Thread-128228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:39:51.576 [DEBUG] [Thread-128228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:39:51.576 [DEBUG] [Thread-128228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:39:51.576 [DEBUG] [Thread-128228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:39:51.589 [INFO] [Thread-128228] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:39:51.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:39:51.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:39:52.434 [DEBUG] [Thread-128228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:39:52.435 [DEBUG] [Thread-128228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:39:52.483 [DEBUG] [Thread-128228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:39:52.483 [DEBUG] [Thread-128228] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:39:52.492 [DEBUG] [Thread-128228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:39:52.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:39:52.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:39:52.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:39:52.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:39:52.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:39:52.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:39:52.526 [DEBUG] [Thread-128228] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:39:54.647 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:54.648 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:39:57.900 [DEBUG] [Thread-128230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:07.740 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:12.937 [DEBUG] [Thread-128231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:22.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:40:22.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:40:22.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:40:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 39, 54), 9.51, 52.06, 0.0, 17.61, 12.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:40:23.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:39:54
2025-12-04T02:40:23.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:40:23.527 [DEBUG] [Thread-128232] [transport.py] [_log()] starting thread (client mode): 0xa2786290
2025-12-04T02:40:23.527 [DEBUG] [Thread-128232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:40:23.548 [DEBUG] [Thread-128232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:40:23.548 [INFO] [Thread-128232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] client lang: <none>
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] server lang: <none>
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] kex follows: False
2025-12-04T02:40:23.551 [DEBUG] [Thread-128232] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] Compression: none
2025-12-04T02:40:23.552 [DEBUG] [Thread-128232] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:40:23.571 [DEBUG] [Thread-128232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:40:23.571 [DEBUG] [Thread-128232] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:40:23.572 [DEBUG] [Thread-128232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:40:23.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:40:23.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:40:23.574 [DEBUG] [Thread-128232] [transport.py] [_log()] userauth is OK
2025-12-04T02:40:23.574 [DEBUG] [Thread-128232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:40:23.574 [DEBUG] [Thread-128232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:40:23.574 [DEBUG] [Thread-128232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:40:23.574 [DEBUG] [Thread-128232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:40:23.610 [INFO] [Thread-128232] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:40:23.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:40:24.254 [DEBUG] [Thread-128232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:40:24.254 [DEBUG] [Thread-128232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:40:24.255 [DEBUG] [Thread-128232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:40:24.296 [DEBUG] [Thread-128232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:40:24.296 [DEBUG] [Thread-128232] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:40:24.299 [DEBUG] [Thread-128232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:40:24.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:40:24.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:40:24.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:40:24.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:40:24.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:40:24.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:40:24.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.027475 -999.00  +12.20  13.77     55   +3.70 1 1 1 1 1     0    0 7.14 -58.05 ZNESW 10.5 13.8 139.6 16.0 12.7 -24.7 12.6 -24.1 12.3 -22.5 12.7 -23.4
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:40:24.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.027475
2025-12-04T02:40:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:40:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:40:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:40:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:40:24.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:40:24.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:39:54', tmtdew=9.51, humidity=52.06, cloud=0.0, wind=17.61, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:39:56', seeing=1.43, atlas_timestamp='2025-12-04T00:39:33.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:40:24.325 [DEBUG] [Thread-128232] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:40:24.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:40:24.421 [DEBUG] [Thread-128235] [transport.py] [_log()] starting thread (client mode): 0xa2786830
2025-12-04T02:40:24.421 [DEBUG] [Thread-128235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:40:24.436 [DEBUG] [Thread-128235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:40:24.437 [INFO] [Thread-128235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:24.444 [DEBUG] [Thread-128235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] client lang: <none>
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] server lang: <none>
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] kex follows: False
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] Compression: none
2025-12-04T02:40:24.445 [DEBUG] [Thread-128235] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:40:24.500 [DEBUG] [Thread-128235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:40:24.501 [DEBUG] [Thread-128235] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:40:24.501 [DEBUG] [Thread-128235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:40:24.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:40:24.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:40:24.556 [DEBUG] [Thread-128235] [transport.py] [_log()] userauth is OK
2025-12-04T02:40:24.557 [DEBUG] [Thread-128235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:40:24.557 [DEBUG] [Thread-128235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:40:24.557 [DEBUG] [Thread-128235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:40:24.557 [DEBUG] [Thread-128235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:40:24.575 [INFO] [Thread-128235] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:40:24.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:40:24.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:40:25.390 [DEBUG] [Thread-128235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:40:25.390 [DEBUG] [Thread-128235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:40:25.442 [DEBUG] [Thread-128235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:40:25.442 [DEBUG] [Thread-128235] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:40:25.454 [DEBUG] [Thread-128235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:40:25.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:40:25.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:40:25.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:40:25.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:40:25.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:40:25.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:40:25.499 [DEBUG] [Thread-128235] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:40:27.968 [DEBUG] [Thread-128237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:28.121 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:32.405 [DEBUG] [Thread-128238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:43.005 [DEBUG] [Thread-128239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:48.502 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:54.852 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:54.853 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:55.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:40:55.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:40:55.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:40:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 40, 27), 9.51, 52.04, 0.0, 18.0, 12.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:40:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:40:27
2025-12-04T02:40:56.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:40:56.475 [DEBUG] [Thread-128240] [transport.py] [_log()] starting thread (client mode): 0xa2787340
2025-12-04T02:40:56.475 [DEBUG] [Thread-128240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:40:56.495 [DEBUG] [Thread-128240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:40:56.495 [INFO] [Thread-128240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] client lang: <none>
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] server lang: <none>
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] kex follows: False
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] Compression: none
2025-12-04T02:40:56.498 [DEBUG] [Thread-128240] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:40:56.515 [DEBUG] [Thread-128240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:40:56.515 [DEBUG] [Thread-128240] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:40:56.516 [DEBUG] [Thread-128240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:40:56.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:40:56.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:40:56.518 [DEBUG] [Thread-128240] [transport.py] [_log()] userauth is OK
2025-12-04T02:40:56.518 [DEBUG] [Thread-128240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:40:56.518 [DEBUG] [Thread-128240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:40:56.518 [DEBUG] [Thread-128240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:40:56.518 [DEBUG] [Thread-128240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:40:56.542 [INFO] [Thread-128240] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:40:56.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:40:57.225 [DEBUG] [Thread-128240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:40:57.225 [DEBUG] [Thread-128240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:40:57.226 [DEBUG] [Thread-128240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:40:57.266 [DEBUG] [Thread-128240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:40:57.266 [DEBUG] [Thread-128240] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:40:57.269 [DEBUG] [Thread-128240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:40:57.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:40:57.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:40:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:40:57.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:40:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:40:57.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:40:57.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:40:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.027822 -999.00  +12.20  11.33     56   +3.70 1 1 1 1 1     0    0 7.12 -63.88 ZNESW 12.7 11.3 144.2 15.0 12.7 -24.8 12.6 -24.0 12.4 -22.5 12.6 -23.5
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.027822
2025-12-04T02:40:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:40:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:40:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:40:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:40:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:40:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:40:27', tmtdew=9.51, humidity=52.04, cloud=0.0, wind=18.0, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:40:28', seeing=1.19, atlas_timestamp='2025-12-04T00:40:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:40:57.292 [DEBUG] [Thread-128240] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:40:57.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:40:57.389 [DEBUG] [Thread-128243] [transport.py] [_log()] starting thread (client mode): 0xa51d22f0
2025-12-04T02:40:57.389 [DEBUG] [Thread-128243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:40:57.404 [DEBUG] [Thread-128243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:40:57.404 [INFO] [Thread-128243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:40:57.412 [DEBUG] [Thread-128243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] client lang: <none>
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] server lang: <none>
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] kex follows: False
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] Compression: none
2025-12-04T02:40:57.413 [DEBUG] [Thread-128243] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:40:57.468 [DEBUG] [Thread-128243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:40:57.469 [DEBUG] [Thread-128243] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:40:57.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:40:57.470 [DEBUG] [Thread-128243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:40:57.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:40:57.524 [DEBUG] [Thread-128243] [transport.py] [_log()] userauth is OK
2025-12-04T02:40:57.525 [DEBUG] [Thread-128243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:40:57.525 [DEBUG] [Thread-128243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:40:57.525 [DEBUG] [Thread-128243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:40:57.525 [DEBUG] [Thread-128243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:40:57.548 [INFO] [Thread-128243] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:40:57.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:40:57.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:40:58.034 [DEBUG] [Thread-128245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:40:58.384 [DEBUG] [Thread-128243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:40:58.384 [DEBUG] [Thread-128243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:40:58.435 [DEBUG] [Thread-128243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:40:58.435 [DEBUG] [Thread-128243] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:40:58.444 [DEBUG] [Thread-128243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:40:58.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:40:58.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:40:58.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:40:58.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:40:58.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:40:58.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:40:58.478 [DEBUG] [Thread-128243] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:41:08.935 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:13.087 [DEBUG] [Thread-128246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:28.119 [DEBUG] [Thread-128247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:28.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:41:28.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:41:28.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:41:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 40, 27), 9.51, 52.04, 0.0, 18.0, 12.02, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:41:29.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:40:27
2025-12-04T02:41:29.304 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:29.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:41:29.459 [DEBUG] [Thread-128248] [transport.py] [_log()] starting thread (client mode): 0xa51d2020
2025-12-04T02:41:29.459 [DEBUG] [Thread-128248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:41:29.479 [DEBUG] [Thread-128248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:41:29.479 [INFO] [Thread-128248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:41:29.482 [DEBUG] [Thread-128248] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:41:29.482 [DEBUG] [Thread-128248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] client lang: <none>
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] server lang: <none>
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] kex follows: False
2025-12-04T02:41:29.483 [DEBUG] [Thread-128248] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] Compression: none
2025-12-04T02:41:29.484 [DEBUG] [Thread-128248] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:41:29.505 [DEBUG] [Thread-128248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:41:29.506 [DEBUG] [Thread-128248] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:41:29.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:41:29.507 [DEBUG] [Thread-128248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:41:29.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:41:29.548 [DEBUG] [Thread-128248] [transport.py] [_log()] userauth is OK
2025-12-04T02:41:29.549 [DEBUG] [Thread-128248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:41:29.549 [DEBUG] [Thread-128248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:41:29.549 [DEBUG] [Thread-128248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:41:29.549 [DEBUG] [Thread-128248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:41:29.581 [INFO] [Thread-128248] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:41:29.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:41:30.215 [DEBUG] [Thread-128248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:41:30.215 [DEBUG] [Thread-128248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:41:30.216 [DEBUG] [Thread-128248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:41:30.257 [DEBUG] [Thread-128248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:41:30.257 [DEBUG] [Thread-128248] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:41:30.260 [DEBUG] [Thread-128248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:41:30.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:41:30.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:41:30.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:41:30.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:41:30.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:41:30.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:41:30.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:41:30.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:41:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:41:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.028169 -999.00  +12.20  16.60     56   +3.70 1 1 1 1 1     0    0 7.13 -62.73 ZNESW 13.7 16.6 146.4 18.3 12.6 -24.6 12.5 -24.0 12.3 -22.5 12.7 -23.4
2025-12-04T02:41:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:41:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:41:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.028169
2025-12-04T02:41:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:41:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:41:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:41:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:41:30.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:41:30.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:40:27', tmtdew=9.51, humidity=52.04, cloud=0.0, wind=18.0, temperature=12.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:41:00', seeing=1.15, atlas_timestamp='2025-12-04T00:40:33.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:41:30.285 [DEBUG] [Thread-128248] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:41:30.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:41:30.382 [DEBUG] [Thread-128251] [transport.py] [_log()] starting thread (client mode): 0xa51cc9d0
2025-12-04T02:41:30.382 [DEBUG] [Thread-128251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:41:30.397 [DEBUG] [Thread-128251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:41:30.397 [INFO] [Thread-128251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:41:30.405 [DEBUG] [Thread-128251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] client lang: <none>
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] server lang: <none>
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] kex follows: False
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:41:30.406 [DEBUG] [Thread-128251] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:41:30.407 [DEBUG] [Thread-128251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:41:30.407 [DEBUG] [Thread-128251] [transport.py] [_log()] Compression: none
2025-12-04T02:41:30.407 [DEBUG] [Thread-128251] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:41:30.465 [DEBUG] [Thread-128251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:41:30.465 [DEBUG] [Thread-128251] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:41:30.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:41:30.466 [DEBUG] [Thread-128251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:41:30.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:41:30.520 [DEBUG] [Thread-128251] [transport.py] [_log()] userauth is OK
2025-12-04T02:41:30.521 [DEBUG] [Thread-128251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:41:30.521 [DEBUG] [Thread-128251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:41:30.521 [DEBUG] [Thread-128251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:41:30.521 [DEBUG] [Thread-128251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:41:30.538 [INFO] [Thread-128251] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:41:30.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:41:30.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:41:31.430 [DEBUG] [Thread-128251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:41:31.430 [DEBUG] [Thread-128251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:41:31.480 [DEBUG] [Thread-128251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:41:31.480 [DEBUG] [Thread-128251] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:41:31.493 [DEBUG] [Thread-128251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:41:31.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:41:31.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:41:31.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:41:31.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:41:31.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:41:31.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:41:31.534 [DEBUG] [Thread-128251] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:41:32.460 [DEBUG] [Thread-128253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:43.148 [DEBUG] [Thread-128254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:49.686 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:55.055 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:55.056 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:41:58.185 [DEBUG] [Thread-128255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:01.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:42:01.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:42:01.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:42:02.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 41, 32), 9.57, 52.03, 0.0, 18.63, 12.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:42:02.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:41:32
2025-12-04T02:42:02.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:42:02.516 [DEBUG] [Thread-128256] [transport.py] [_log()] starting thread (client mode): 0xa2785cf0
2025-12-04T02:42:02.516 [DEBUG] [Thread-128256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:42:02.536 [DEBUG] [Thread-128256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:42:02.536 [INFO] [Thread-128256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:02.539 [DEBUG] [Thread-128256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] client lang: <none>
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] server lang: <none>
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] kex follows: False
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] Compression: none
2025-12-04T02:42:02.540 [DEBUG] [Thread-128256] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:42:02.563 [DEBUG] [Thread-128256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:42:02.563 [DEBUG] [Thread-128256] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:42:02.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:42:02.565 [DEBUG] [Thread-128256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:42:02.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:42:02.567 [DEBUG] [Thread-128256] [transport.py] [_log()] userauth is OK
2025-12-04T02:42:02.567 [DEBUG] [Thread-128256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:42:02.567 [DEBUG] [Thread-128256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:42:02.567 [DEBUG] [Thread-128256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:42:02.567 [DEBUG] [Thread-128256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:42:02.602 [INFO] [Thread-128256] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:42:02.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:42:03.238 [DEBUG] [Thread-128256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:42:03.238 [DEBUG] [Thread-128256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:42:03.239 [DEBUG] [Thread-128256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:42:03.279 [DEBUG] [Thread-128256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:42:03.279 [DEBUG] [Thread-128256] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:42:03.282 [DEBUG] [Thread-128256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:42:03.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:42:03.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:42:03.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:42:03.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:42:03.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:42:03.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:42:03.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:42:03.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:42:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:42:03.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.028864 -999.00  +12.20  11.35     56   +3.70 1 1 1 1 1     0    0 6.93 -64.10 ZNESW 12.5 11.3 149.2 14.8 12.7 -24.7 12.6 -24.1 12.3 -22.4 12.6 -23.4
2025-12-04T02:42:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:42:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:42:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.028864
2025-12-04T02:42:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:42:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:42:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:42:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:42:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:42:03.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:41:32', tmtdew=9.57, humidity=52.03, cloud=0.0, wind=18.63, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:41:32', seeing=1.29, atlas_timestamp='2025-12-04T00:41:33.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:42:03.307 [DEBUG] [Thread-128256] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:42:03.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:42:03.406 [DEBUG] [Thread-128259] [transport.py] [_log()] starting thread (client mode): 0xa517e200
2025-12-04T02:42:03.406 [DEBUG] [Thread-128259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:42:03.424 [DEBUG] [Thread-128259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:42:03.424 [INFO] [Thread-128259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:42:03.431 [DEBUG] [Thread-128259] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:42:03.432 [DEBUG] [Thread-128259] [transport.py] [_log()] client lang: <none>
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] server lang: <none>
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] kex follows: False
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] Compression: none
2025-12-04T02:42:03.433 [DEBUG] [Thread-128259] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:42:03.489 [DEBUG] [Thread-128259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:42:03.490 [DEBUG] [Thread-128259] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:42:03.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:42:03.491 [DEBUG] [Thread-128259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:42:03.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:42:03.547 [DEBUG] [Thread-128259] [transport.py] [_log()] userauth is OK
2025-12-04T02:42:03.547 [DEBUG] [Thread-128259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:42:03.547 [DEBUG] [Thread-128259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:42:03.547 [DEBUG] [Thread-128259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:42:03.547 [DEBUG] [Thread-128259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:42:03.566 [INFO] [Thread-128259] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:42:03.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:42:03.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:42:04.399 [DEBUG] [Thread-128259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:42:04.399 [DEBUG] [Thread-128259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:42:04.447 [DEBUG] [Thread-128259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:42:04.447 [DEBUG] [Thread-128259] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:42:04.455 [DEBUG] [Thread-128259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:42:04.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:42:04.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:42:04.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:42:04.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:42:04.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:42:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:42:04.486 [DEBUG] [Thread-128259] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:42:10.065 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:13.214 [DEBUG] [Thread-128261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:28.254 [DEBUG] [Thread-128262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:30.576 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:32.532 [DEBUG] [Thread-128263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:34.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:42:34.509 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:42:34.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:42:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 42, 4), 9.57, 52.03, 0.0, 17.42, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:42:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:42:04
2025-12-04T02:42:35.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:42:35.469 [DEBUG] [Thread-128264] [transport.py] [_log()] starting thread (client mode): 0xa517f700
2025-12-04T02:42:35.469 [DEBUG] [Thread-128264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:42:35.490 [DEBUG] [Thread-128264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:42:35.490 [INFO] [Thread-128264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] client lang: <none>
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] server lang: <none>
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] kex follows: False
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] Compression: none
2025-12-04T02:42:35.494 [DEBUG] [Thread-128264] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:42:35.511 [DEBUG] [Thread-128264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:42:35.512 [DEBUG] [Thread-128264] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:42:35.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:42:35.512 [DEBUG] [Thread-128264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:42:35.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:42:35.514 [DEBUG] [Thread-128264] [transport.py] [_log()] userauth is OK
2025-12-04T02:42:35.514 [DEBUG] [Thread-128264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:42:35.514 [DEBUG] [Thread-128264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:42:35.514 [DEBUG] [Thread-128264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:42:35.514 [DEBUG] [Thread-128264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:42:35.548 [INFO] [Thread-128264] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:42:35.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:42:36.182 [DEBUG] [Thread-128264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:42:36.182 [DEBUG] [Thread-128264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:42:36.182 [DEBUG] [Thread-128264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:42:36.222 [DEBUG] [Thread-128264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:42:36.222 [DEBUG] [Thread-128264] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:42:36.225 [DEBUG] [Thread-128264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:42:36.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:42:36.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:42:36.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:42:36.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:42:36.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:42:36.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:42:36.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:42:36.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:42:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:42:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.029211 -999.00  +12.20  12.87     56   +3.70 1 1 1 1 1     0    0 7.10 -59.02 ZNESW 12.0 12.9 140.6 17.0 12.7 -24.7 12.6 -24.0 12.3 -22.5 12.6 -23.6
2025-12-04T02:42:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:42:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:42:36.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.029211
2025-12-04T02:42:36.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:42:36.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:42:36.248 [DEBUG] [Thread-128264] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:42:36.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:42:36.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:42:36.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:42:36.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:42:04', tmtdew=9.57, humidity=52.03, cloud=0.0, wind=17.42, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:42:04', seeing=1.23, atlas_timestamp='2025-12-04T00:42:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.06475000000000009, -0.0017499999999994742, -0.02650000000000219, 0.033500000000000085, -0.01974999999999838, -0.0005000000000006111, -0.005749999999999034, -0.005500000000001393, -0.027000000000001023, -0.028750000000000497, -0.0259999999999998, -0.013500000000000512, 0.03725000000000023, -0.1075000000000017, -0.03450000000000131, 0.03524999999999956, 0.026999999999999247, -0.07900000000000063, -0.019750000000001933, 0.05699999999999861, 0.030749999999997613, -0.04875000000000007, -0.0012500000000006395, 0.01249999999999929, 0.06550000000000011, -0.025749999999998607, 0.007500000000000284, 0.07900000000000063, 0.013000000000001677, -0.13649999999999807, -0.026999999999999247, 0.04724999999999824], zp_timestamp='2025-12-04T00:38:00')
2025-12-04T02:42:36.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:42:36.347 [DEBUG] [Thread-128267] [transport.py] [_log()] starting thread (client mode): 0xa51d2b60
2025-12-04T02:42:36.347 [DEBUG] [Thread-128267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:42:36.361 [DEBUG] [Thread-128267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:42:36.361 [INFO] [Thread-128267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] client lang: <none>
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] server lang: <none>
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] kex follows: False
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] Compression: none
2025-12-04T02:42:36.369 [DEBUG] [Thread-128267] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:42:36.430 [DEBUG] [Thread-128267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:42:36.430 [DEBUG] [Thread-128267] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:42:36.430 [DEBUG] [Thread-128267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:42:36.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:42:36.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:42:36.488 [DEBUG] [Thread-128267] [transport.py] [_log()] userauth is OK
2025-12-04T02:42:36.488 [DEBUG] [Thread-128267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:42:36.488 [DEBUG] [Thread-128267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:42:36.488 [DEBUG] [Thread-128267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:42:36.488 [DEBUG] [Thread-128267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:42:36.502 [INFO] [Thread-128267] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:42:36.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:42:36.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:42:37.321 [DEBUG] [Thread-128267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:42:37.321 [DEBUG] [Thread-128267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:42:37.370 [DEBUG] [Thread-128267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:42:37.370 [DEBUG] [Thread-128267] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:42:37.378 [DEBUG] [Thread-128267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:42:37.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:42:37.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:42:37.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:42:37.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:42:37.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:42:37.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:42:37.410 [DEBUG] [Thread-128267] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:42:43.281 [DEBUG] [Thread-128269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:50.978 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:55.255 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:55.256 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:42:58.315 [DEBUG] [Thread-128270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:07.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:43:07.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:43:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:43:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 42, 36), 9.64, 51.94, 0.0, 15.53, 12.12, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:43:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:42:36
2025-12-04T02:43:08.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:43:08.405 [DEBUG] [Thread-128271] [transport.py] [_log()] starting thread (client mode): 0xa51d0a30
2025-12-04T02:43:08.405 [DEBUG] [Thread-128271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:43:08.426 [DEBUG] [Thread-128271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:43:08.426 [INFO] [Thread-128271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:43:08.429 [DEBUG] [Thread-128271] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:43:08.429 [DEBUG] [Thread-128271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:43:08.429 [DEBUG] [Thread-128271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:43:08.429 [DEBUG] [Thread-128271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] client lang: <none>
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] server lang: <none>
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] kex follows: False
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] Compression: none
2025-12-04T02:43:08.430 [DEBUG] [Thread-128271] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:43:08.444 [DEBUG] [Thread-128271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:43:08.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:43:08.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] userauth is OK
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:43:08.445 [DEBUG] [Thread-128271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:43:08.454 [INFO] [Thread-128271] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:43:08.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:43:09.124 [DEBUG] [Thread-128271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:43:09.125 [DEBUG] [Thread-128271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:43:09.125 [DEBUG] [Thread-128271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:43:09.166 [DEBUG] [Thread-128271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:43:09.166 [DEBUG] [Thread-128271] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:43:09.168 [DEBUG] [Thread-128271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:43:09.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:43:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:43:09.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:43:09.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:43:09.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:43:09.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:43:09.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.029558 -999.00  +12.20  11.84     56   +3.70 1 1 1 1 1     0    0 7.02 -59.62 ZNESW 13.6 11.8 144.5 14.0 12.6 -24.7 12.6 -24.1 12.3 -22.5 12.6 -23.4
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.029558
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:43:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:42:36', tmtdew=9.64, humidity=51.94, cloud=0.0, wind=15.53, temperature=12.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:42:36', seeing=1.44, atlas_timestamp='2025-12-04T00:42:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.08174999999999955, -0.03824999999999967, -0.029500000000000526, 0.03950000000000031, 0.03325000000000067, -0.0470000000000006, -0.007749999999999702, 0.02549999999999919, -0.01750000000000007, -0.02275000000000027, -0.021000000000000796, -0.0030000000000001137, 0.07774999999999999, -0.09800000000000075, -0.007500000000000284, 0.04974999999999952, 0.006499999999999062, -0.06050000000000111, 0.029249999999999332, 0.12399999999999878, 0.04574999999999818, -0.04875000000000007, 0.02275000000000027, 0.04699999999999882, 0.06900000000000084, -0.003249999999999531, -0.00849999999999973, 0.02999999999999936, 0.14400000000000013, 0.028999999999999915, -0.0009999999999994458, 0.09474999999999945], zp_timestamp='2025-12-04T00:41:00')
2025-12-04T02:43:09.186 [DEBUG] [Thread-128271] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:43:09.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:43:09.276 [DEBUG] [Thread-128274] [transport.py] [_log()] starting thread (client mode): 0xa51d01c0
2025-12-04T02:43:09.276 [DEBUG] [Thread-128274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:43:09.290 [DEBUG] [Thread-128274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:43:09.290 [INFO] [Thread-128274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] client lang: <none>
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] server lang: <none>
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] kex follows: False
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] Compression: none
2025-12-04T02:43:09.298 [DEBUG] [Thread-128274] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:43:09.355 [DEBUG] [Thread-128274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:43:09.355 [DEBUG] [Thread-128274] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:43:09.355 [DEBUG] [Thread-128274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:43:09.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:43:09.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:43:09.412 [DEBUG] [Thread-128274] [transport.py] [_log()] userauth is OK
2025-12-04T02:43:09.412 [DEBUG] [Thread-128274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:43:09.412 [DEBUG] [Thread-128274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:43:09.412 [DEBUG] [Thread-128274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:43:09.412 [DEBUG] [Thread-128274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:43:09.426 [INFO] [Thread-128274] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:43:09.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:43:09.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:43:10.271 [DEBUG] [Thread-128274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:43:10.271 [DEBUG] [Thread-128274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:43:10.319 [DEBUG] [Thread-128274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:43:10.319 [DEBUG] [Thread-128274] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:43:10.327 [DEBUG] [Thread-128274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:43:10.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:43:10.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:43:10.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:43:10.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:43:10.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:43:10.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:43:10.361 [DEBUG] [Thread-128274] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:43:11.363 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:13.344 [DEBUG] [Thread-128276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:28.389 [DEBUG] [Thread-128277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:31.795 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:32.595 [DEBUG] [Thread-128278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:40.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:43:40.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:43:40.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:43:41.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 43, 8), 9.64, 51.94, 0.0, 16.52, 12.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:43:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:43:08
2025-12-04T02:43:41.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:43:41.423 [DEBUG] [Thread-128279] [transport.py] [_log()] starting thread (client mode): 0xa517dc90
2025-12-04T02:43:41.423 [DEBUG] [Thread-128279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:43:41.443 [DEBUG] [Thread-128279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:43:41.443 [INFO] [Thread-128279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] client lang: <none>
2025-12-04T02:43:41.446 [DEBUG] [Thread-128279] [transport.py] [_log()] server lang: <none>
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] kex follows: False
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] Compression: none
2025-12-04T02:43:41.447 [DEBUG] [Thread-128279] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:43:41.464 [DEBUG] [Thread-128279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:43:41.464 [DEBUG] [Thread-128279] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:43:41.464 [DEBUG] [Thread-128279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:43:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:43:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:43:41.508 [DEBUG] [Thread-128279] [transport.py] [_log()] userauth is OK
2025-12-04T02:43:41.508 [DEBUG] [Thread-128279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:43:41.508 [DEBUG] [Thread-128279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:43:41.508 [DEBUG] [Thread-128279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:43:41.508 [DEBUG] [Thread-128279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:43:41.536 [INFO] [Thread-128279] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:43:41.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:43:42.171 [DEBUG] [Thread-128279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:43:42.171 [DEBUG] [Thread-128279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:43:42.171 [DEBUG] [Thread-128279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:43:42.213 [DEBUG] [Thread-128279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:43:42.213 [DEBUG] [Thread-128279] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:43:42.215 [DEBUG] [Thread-128279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:43:42.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:43:42.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:43:42.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:43:42.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:43:42.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:43:42.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:43:42.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.029905 -999.00  +12.10  12.03     56   +3.60 1 1 1 1 1     0    0 7.10 -57.92 ZNESW 14.0 12.0 136.0 17.2 12.6 -24.7 12.5 -24.2 12.3 -22.5 12.6 -23.3
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.029905
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:43:42.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:43:08', tmtdew=9.64, humidity=51.94, cloud=0.0, wind=16.52, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:43:40', seeing=2.12, atlas_timestamp='2025-12-04T00:43:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.08174999999999955, -0.03824999999999967, -0.029500000000000526, 0.03950000000000031, 0.03325000000000067, -0.0470000000000006, -0.007749999999999702, 0.02549999999999919, -0.01750000000000007, -0.02275000000000027, -0.021000000000000796, -0.0030000000000001137, 0.07774999999999999, -0.09800000000000075, -0.007500000000000284, 0.04974999999999952, 0.006499999999999062, -0.06050000000000111, 0.029249999999999332, 0.12399999999999878, 0.04574999999999818, -0.04875000000000007, 0.02275000000000027, 0.04699999999999882, 0.06900000000000084, -0.003249999999999531, -0.00849999999999973, 0.02999999999999936, 0.14400000000000013, 0.028999999999999915, -0.0009999999999994458, 0.09474999999999945], zp_timestamp='2025-12-04T00:41:00')
2025-12-04T02:43:42.234 [DEBUG] [Thread-128279] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:43:42.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:43:42.320 [DEBUG] [Thread-128282] [transport.py] [_log()] starting thread (client mode): 0xa517fa00
2025-12-04T02:43:42.320 [DEBUG] [Thread-128282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:43:42.337 [DEBUG] [Thread-128282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:43:42.337 [INFO] [Thread-128282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] client lang: <none>
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] server lang: <none>
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] kex follows: False
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] Compression: none
2025-12-04T02:43:42.345 [DEBUG] [Thread-128282] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:43:42.403 [DEBUG] [Thread-128282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:43:42.403 [DEBUG] [Thread-128282] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:43:42.403 [DEBUG] [Thread-128282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:43:42.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:43:42.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:43:42.460 [DEBUG] [Thread-128282] [transport.py] [_log()] userauth is OK
2025-12-04T02:43:42.460 [DEBUG] [Thread-128282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:43:42.460 [DEBUG] [Thread-128282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:43:42.460 [DEBUG] [Thread-128282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:43:42.460 [DEBUG] [Thread-128282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:43:42.474 [INFO] [Thread-128282] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:43:42.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:43:42.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:43:43.354 [DEBUG] [Thread-128282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:43:43.354 [DEBUG] [Thread-128282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:43:43.402 [DEBUG] [Thread-128282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:43:43.403 [DEBUG] [Thread-128282] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:43:43.411 [DEBUG] [Thread-128282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:43:43.416 [DEBUG] [Thread-128284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:43.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:43:43.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:43:43.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:43:43.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:43:43.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:43:43.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:43:43.442 [DEBUG] [Thread-128282] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:43:52.204 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:55.462 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:55.463 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:43:58.454 [DEBUG] [Thread-128285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:12.610 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:44:13.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:44:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:44:13.479 [DEBUG] [Thread-128286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 43, 40), 9.64, 51.94, 0.0, 14.8, 12.1, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:44:14.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:43:40
2025-12-04T02:44:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:44:14.475 [DEBUG] [Thread-128287] [transport.py] [_log()] starting thread (client mode): 0xa51d3df0
2025-12-04T02:44:14.475 [DEBUG] [Thread-128287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:44:14.495 [DEBUG] [Thread-128287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:44:14.496 [INFO] [Thread-128287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:44:14.499 [DEBUG] [Thread-128287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] client lang: <none>
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] server lang: <none>
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] kex follows: False
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] Compression: none
2025-12-04T02:44:14.500 [DEBUG] [Thread-128287] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:44:14.518 [DEBUG] [Thread-128287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:44:14.519 [DEBUG] [Thread-128287] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:44:14.519 [DEBUG] [Thread-128287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:44:14.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:44:14.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:44:14.560 [DEBUG] [Thread-128287] [transport.py] [_log()] userauth is OK
2025-12-04T02:44:14.561 [DEBUG] [Thread-128287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:44:14.561 [DEBUG] [Thread-128287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:44:14.561 [DEBUG] [Thread-128287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:44:14.561 [DEBUG] [Thread-128287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:44:14.596 [INFO] [Thread-128287] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:44:14.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:44:15.236 [DEBUG] [Thread-128287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:44:15.236 [DEBUG] [Thread-128287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:44:15.237 [DEBUG] [Thread-128287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:44:15.278 [DEBUG] [Thread-128287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:44:15.278 [DEBUG] [Thread-128287] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:44:15.281 [DEBUG] [Thread-128287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:44:15.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:44:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:44:15.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:44:15.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:44:15.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:44:15.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:44:15.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.030253 -999.00  +12.20  13.13     55   +3.70 1 1 1 1 1     0    0 6.68 -66.32 ZNESW 10.2 13.1 148.6 14.5 12.7 -24.8 12.5 -23.9 12.4 -22.5 12.6 -23.3
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:44:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.030253
2025-12-04T02:44:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:44:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:44:15.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:44:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:44:15.306 [DEBUG] [Thread-128287] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:44:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:44:15.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:43:40', tmtdew=9.64, humidity=51.94, cloud=0.0, wind=14.8, temperature=12.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:44:12', seeing=1.68, atlas_timestamp='2025-12-04T00:43:33.859', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.08174999999999955, -0.03824999999999967, -0.029500000000000526, 0.03950000000000031, 0.03325000000000067, -0.0470000000000006, -0.007749999999999702, 0.02549999999999919, -0.01750000000000007, -0.02275000000000027, -0.021000000000000796, -0.0030000000000001137, 0.07774999999999999, -0.09800000000000075, -0.007500000000000284, 0.04974999999999952, 0.006499999999999062, -0.06050000000000111, 0.029249999999999332, 0.12399999999999878, 0.04574999999999818, -0.04875000000000007, 0.02275000000000027, 0.04699999999999882, 0.06900000000000084, -0.003249999999999531, -0.00849999999999973, 0.02999999999999936, 0.14400000000000013, 0.028999999999999915, -0.0009999999999994458, 0.09474999999999945], zp_timestamp='2025-12-04T00:41:00')
2025-12-04T02:44:15.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:44:15.402 [DEBUG] [Thread-128290] [transport.py] [_log()] starting thread (client mode): 0xa270bfa0
2025-12-04T02:44:15.402 [DEBUG] [Thread-128290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:44:15.417 [DEBUG] [Thread-128290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:44:15.417 [INFO] [Thread-128290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:15.425 [DEBUG] [Thread-128290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] client lang: <none>
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] server lang: <none>
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] kex follows: False
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:44:15.426 [DEBUG] [Thread-128290] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:44:15.427 [DEBUG] [Thread-128290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:44:15.427 [DEBUG] [Thread-128290] [transport.py] [_log()] Compression: none
2025-12-04T02:44:15.427 [DEBUG] [Thread-128290] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:44:15.483 [DEBUG] [Thread-128290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:44:15.483 [DEBUG] [Thread-128290] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:44:15.483 [DEBUG] [Thread-128290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:44:15.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:44:15.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:44:15.540 [DEBUG] [Thread-128290] [transport.py] [_log()] userauth is OK
2025-12-04T02:44:15.540 [DEBUG] [Thread-128290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:44:15.540 [DEBUG] [Thread-128290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:44:15.541 [DEBUG] [Thread-128290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:44:15.541 [DEBUG] [Thread-128290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:44:15.559 [INFO] [Thread-128290] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:44:15.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:44:15.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:44:16.381 [DEBUG] [Thread-128290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:44:16.381 [DEBUG] [Thread-128290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:44:16.428 [DEBUG] [Thread-128290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:44:16.428 [DEBUG] [Thread-128290] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:44:16.437 [DEBUG] [Thread-128290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:44:16.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:44:16.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:44:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:44:16.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:44:16.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:44:16.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:44:16.468 [DEBUG] [Thread-128290] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:44:28.503 [DEBUG] [Thread-128292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:32.658 [DEBUG] [Thread-128293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:33.065 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:43.544 [DEBUG] [Thread-128294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:46.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:44:46.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:44:46.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:44:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 44, 44), 9.79, 51.45, 0.0, 16.85, 12.18, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:44:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:44:44
2025-12-04T02:44:47.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:44:47.450 [DEBUG] [Thread-128295] [transport.py] [_log()] starting thread (client mode): 0xa2786a10
2025-12-04T02:44:47.450 [DEBUG] [Thread-128295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:44:47.472 [DEBUG] [Thread-128295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:44:47.472 [INFO] [Thread-128295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:44:47.475 [DEBUG] [Thread-128295] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:44:47.475 [DEBUG] [Thread-128295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:44:47.475 [DEBUG] [Thread-128295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:44:47.475 [DEBUG] [Thread-128295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] client lang: <none>
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] server lang: <none>
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] kex follows: False
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:44:47.476 [DEBUG] [Thread-128295] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:44:47.477 [DEBUG] [Thread-128295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:44:47.477 [DEBUG] [Thread-128295] [transport.py] [_log()] Compression: none
2025-12-04T02:44:47.477 [DEBUG] [Thread-128295] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:44:47.493 [DEBUG] [Thread-128295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:44:47.494 [DEBUG] [Thread-128295] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:44:47.494 [DEBUG] [Thread-128295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:44:47.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:44:47.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:44:47.496 [DEBUG] [Thread-128295] [transport.py] [_log()] userauth is OK
2025-12-04T02:44:47.496 [DEBUG] [Thread-128295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:44:47.497 [DEBUG] [Thread-128295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:44:47.497 [DEBUG] [Thread-128295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:44:47.497 [DEBUG] [Thread-128295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:44:47.520 [INFO] [Thread-128295] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:44:47.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:44:48.129 [DEBUG] [Thread-128295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:44:48.129 [DEBUG] [Thread-128295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:44:48.129 [DEBUG] [Thread-128295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:44:48.170 [DEBUG] [Thread-128295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:44:48.170 [DEBUG] [Thread-128295] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:44:48.173 [DEBUG] [Thread-128295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:44:48.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:44:48.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:44:48.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:44:48.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:44:48.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:44:48.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:44:48.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.030600 -999.00  +12.20  11.83     55   +3.60 1 1 1 1 1     0    0 7.11 -56.01 ZNESW 10.7 11.8 158.0 14.6 12.7 -24.5 12.5 -24.0 12.3 -22.5 12.6 -23.4
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:44:48.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.030600
2025-12-04T02:44:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:44:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:44:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:44:48.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:44:48.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:44:48.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:44:44', tmtdew=9.79, humidity=51.45, cloud=0.0, wind=16.85, temperature=12.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:44:44', seeing=1.68, atlas_timestamp='2025-12-04T00:44:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.08174999999999955, -0.03824999999999967, -0.029500000000000526, 0.03950000000000031, 0.03325000000000067, -0.0470000000000006, -0.007749999999999702, 0.02549999999999919, -0.01750000000000007, -0.02275000000000027, -0.021000000000000796, -0.0030000000000001137, 0.07774999999999999, -0.09800000000000075, -0.007500000000000284, 0.04974999999999952, 0.006499999999999062, -0.06050000000000111, 0.029249999999999332, 0.12399999999999878, 0.04574999999999818, -0.04875000000000007, 0.02275000000000027, 0.04699999999999882, 0.06900000000000084, -0.003249999999999531, -0.00849999999999973, 0.02999999999999936, 0.14400000000000013, 0.028999999999999915, -0.0009999999999994458, 0.09474999999999945], zp_timestamp='2025-12-04T00:41:00')
2025-12-04T02:44:48.196 [DEBUG] [Thread-128295] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:44:48.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:44:48.293 [DEBUG] [Thread-128298] [transport.py] [_log()] starting thread (client mode): 0xa2785e70
2025-12-04T02:44:48.293 [DEBUG] [Thread-128298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:44:48.313 [DEBUG] [Thread-128298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:44:48.313 [INFO] [Thread-128298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] client lang: <none>
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] server lang: <none>
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] kex follows: False
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:44:48.321 [DEBUG] [Thread-128298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:44:48.322 [DEBUG] [Thread-128298] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:44:48.322 [DEBUG] [Thread-128298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:44:48.322 [DEBUG] [Thread-128298] [transport.py] [_log()] Compression: none
2025-12-04T02:44:48.322 [DEBUG] [Thread-128298] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:44:48.380 [DEBUG] [Thread-128298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:44:48.380 [DEBUG] [Thread-128298] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:44:48.381 [DEBUG] [Thread-128298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:44:48.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:44:48.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:44:48.436 [DEBUG] [Thread-128298] [transport.py] [_log()] userauth is OK
2025-12-04T02:44:48.437 [DEBUG] [Thread-128298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:44:48.437 [DEBUG] [Thread-128298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:44:48.437 [DEBUG] [Thread-128298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:44:48.437 [DEBUG] [Thread-128298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:44:48.457 [INFO] [Thread-128298] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:44:48.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:44:48.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:44:49.362 [DEBUG] [Thread-128298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:44:49.362 [DEBUG] [Thread-128298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:44:49.411 [DEBUG] [Thread-128298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:44:49.411 [DEBUG] [Thread-128298] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:44:49.419 [DEBUG] [Thread-128298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:44:49.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:44:49.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:44:49.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:44:49.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:44:49.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:44:49.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:44:49.453 [DEBUG] [Thread-128298] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:44:53.498 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:55.682 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:55.683 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:44:58.572 [DEBUG] [Thread-128300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:13.607 [DEBUG] [Thread-128301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:13.878 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:19.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:45:19.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:45:19.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:45:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 45, 16), 9.82, 51.3, 0.0, 16.69, 12.15, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:45:20.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:45:16
2025-12-04T02:45:20.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:45:20.446 [DEBUG] [Thread-128302] [transport.py] [_log()] starting thread (client mode): 0xa2709540
2025-12-04T02:45:20.446 [DEBUG] [Thread-128302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:45:20.466 [DEBUG] [Thread-128302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:45:20.466 [INFO] [Thread-128302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] client lang: <none>
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] server lang: <none>
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] kex follows: False
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] Compression: none
2025-12-04T02:45:20.469 [DEBUG] [Thread-128302] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:45:20.478 [DEBUG] [Thread-128302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:45:20.478 [DEBUG] [Thread-128302] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:45:20.479 [DEBUG] [Thread-128302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:45:20.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:45:20.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:45:20.480 [DEBUG] [Thread-128302] [transport.py] [_log()] userauth is OK
2025-12-04T02:45:20.480 [DEBUG] [Thread-128302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:45:20.480 [DEBUG] [Thread-128302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:45:20.480 [DEBUG] [Thread-128302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:45:20.481 [DEBUG] [Thread-128302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:45:20.504 [INFO] [Thread-128302] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:45:20.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:45:21.158 [DEBUG] [Thread-128302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:45:21.158 [DEBUG] [Thread-128302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:45:21.159 [DEBUG] [Thread-128302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:45:21.200 [DEBUG] [Thread-128302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:45:21.200 [DEBUG] [Thread-128302] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:45:21.203 [DEBUG] [Thread-128302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:45:21.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:45:21.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:45:21.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:45:21.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:45:21.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:45:21.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:45:21.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.031295 -999.00  +12.30  11.34     55   +3.70 1 1 1 1 1     0    0 6.92 -57.39 ZNESW 9.8 11.3 152.2 13.5 12.7 -24.6 12.5 -24.0 12.3 -22.5 12.6 -23.4
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:45:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.031295
2025-12-04T02:45:21.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:45:21.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:45:21.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:45:21.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:45:21.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:45:21.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:45:16', tmtdew=9.82, humidity=51.3, cloud=0.0, wind=16.69, temperature=12.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:45:16', seeing=1.63, atlas_timestamp='2025-12-04T00:45:03.888', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.08174999999999955, -0.03824999999999967, -0.029500000000000526, 0.03950000000000031, 0.03325000000000067, -0.0470000000000006, -0.007749999999999702, 0.02549999999999919, -0.01750000000000007, -0.02275000000000027, -0.021000000000000796, -0.0030000000000001137, 0.07774999999999999, -0.09800000000000075, -0.007500000000000284, 0.04974999999999952, 0.006499999999999062, -0.06050000000000111, 0.029249999999999332, 0.12399999999999878, 0.04574999999999818, -0.04875000000000007, 0.02275000000000027, 0.04699999999999882, 0.06900000000000084, -0.003249999999999531, -0.00849999999999973, 0.02999999999999936, 0.14400000000000013, 0.028999999999999915, -0.0009999999999994458, 0.09474999999999945], zp_timestamp='2025-12-04T00:41:00')
2025-12-04T02:45:21.226 [DEBUG] [Thread-128302] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:45:21.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:45:21.329 [DEBUG] [Thread-128305] [transport.py] [_log()] starting thread (client mode): 0xa51d3790
2025-12-04T02:45:21.329 [DEBUG] [Thread-128305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:45:21.345 [DEBUG] [Thread-128305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:45:21.345 [INFO] [Thread-128305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:45:21.352 [DEBUG] [Thread-128305] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] client lang: <none>
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] server lang: <none>
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] kex follows: False
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] Compression: none
2025-12-04T02:45:21.353 [DEBUG] [Thread-128305] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:45:21.412 [DEBUG] [Thread-128305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:45:21.412 [DEBUG] [Thread-128305] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:45:21.412 [DEBUG] [Thread-128305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:45:21.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:45:21.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:45:21.468 [DEBUG] [Thread-128305] [transport.py] [_log()] userauth is OK
2025-12-04T02:45:21.468 [DEBUG] [Thread-128305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:45:21.468 [DEBUG] [Thread-128305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:45:21.468 [DEBUG] [Thread-128305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:45:21.468 [DEBUG] [Thread-128305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:45:21.488 [INFO] [Thread-128305] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:45:21.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:45:21.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:45:22.312 [DEBUG] [Thread-128305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:45:22.312 [DEBUG] [Thread-128305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:45:22.359 [DEBUG] [Thread-128305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:45:22.359 [DEBUG] [Thread-128305] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:45:22.368 [DEBUG] [Thread-128305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:45:22.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:45:22.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:45:22.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:45:22.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:45:22.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:45:22.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:45:22.401 [DEBUG] [Thread-128305] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:45:28.635 [DEBUG] [Thread-128307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:32.728 [DEBUG] [Thread-128308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:34.297 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:43.675 [DEBUG] [Thread-128309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:45:52.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:45:52.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:45:53.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 45, 48), 9.91, 50.7, 0.0, 16.59, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:45:53.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:45:48
2025-12-04T02:45:53.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:45:53.373 [DEBUG] [Thread-128310] [transport.py] [_log()] starting thread (client mode): 0xa2785e70
2025-12-04T02:45:53.373 [DEBUG] [Thread-128310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:45:53.383 [DEBUG] [Thread-128310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:45:53.383 [INFO] [Thread-128310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] client lang: <none>
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] server lang: <none>
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] kex follows: False
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] Compression: none
2025-12-04T02:45:53.386 [DEBUG] [Thread-128310] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:45:53.394 [DEBUG] [Thread-128310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:45:53.394 [DEBUG] [Thread-128310] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:45:53.394 [DEBUG] [Thread-128310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:45:53.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:45:53.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:45:53.395 [DEBUG] [Thread-128310] [transport.py] [_log()] userauth is OK
2025-12-04T02:45:53.395 [DEBUG] [Thread-128310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:45:53.395 [DEBUG] [Thread-128310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:45:53.395 [DEBUG] [Thread-128310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:45:53.395 [DEBUG] [Thread-128310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:45:53.406 [INFO] [Thread-128310] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:45:53.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:45:54.009 [DEBUG] [Thread-128310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:45:54.009 [DEBUG] [Thread-128310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:45:54.009 [DEBUG] [Thread-128310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:45:54.050 [DEBUG] [Thread-128310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:45:54.050 [DEBUG] [Thread-128310] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:45:54.053 [DEBUG] [Thread-128310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:45:54.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:45:54.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:45:54.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:45:54.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:45:54.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:45:54.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:45:54.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.031641 -999.00  +12.30  16.70     55   +3.60 1 1 1 1 1     0    0 7.15 -55.24 ZNESW 15.0 16.7 148.6 18.0 12.7 -24.4 12.5 -23.9 12.3 -22.4 12.6 -23.3
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:45:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.031641
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:45:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:45:48', tmtdew=9.91, humidity=50.7, cloud=0.0, wind=16.59, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:45:48', seeing=2.11, atlas_timestamp='2025-12-04T00:45:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:45:54.077 [DEBUG] [Thread-128310] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:45:54.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:45:54.173 [DEBUG] [Thread-128313] [transport.py] [_log()] starting thread (client mode): 0xa51d1ed0
2025-12-04T02:45:54.173 [DEBUG] [Thread-128313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:45:54.188 [DEBUG] [Thread-128313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:45:54.188 [INFO] [Thread-128313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:45:54.195 [DEBUG] [Thread-128313] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:45:54.195 [DEBUG] [Thread-128313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:45:54.195 [DEBUG] [Thread-128313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:45:54.195 [DEBUG] [Thread-128313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] client lang: <none>
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] server lang: <none>
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] kex follows: False
2025-12-04T02:45:54.196 [DEBUG] [Thread-128313] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] Compression: none
2025-12-04T02:45:54.197 [DEBUG] [Thread-128313] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:45:54.252 [DEBUG] [Thread-128313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:45:54.253 [DEBUG] [Thread-128313] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:45:54.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:45:54.254 [DEBUG] [Thread-128313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:45:54.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:45:54.308 [DEBUG] [Thread-128313] [transport.py] [_log()] userauth is OK
2025-12-04T02:45:54.308 [DEBUG] [Thread-128313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:45:54.308 [DEBUG] [Thread-128313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:45:54.309 [DEBUG] [Thread-128313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:45:54.309 [DEBUG] [Thread-128313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:45:54.326 [INFO] [Thread-128313] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:45:54.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:45:54.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:45:54.787 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:55.173 [DEBUG] [Thread-128313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:45:55.174 [DEBUG] [Thread-128313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:45:55.221 [DEBUG] [Thread-128313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:45:55.222 [DEBUG] [Thread-128313] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:45:55.230 [DEBUG] [Thread-128313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:45:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:45:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:45:55.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:45:55.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:45:55.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:45:55.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:45:55.261 [DEBUG] [Thread-128313] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:45:55.880 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:55.881 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:45:58.705 [DEBUG] [Thread-128315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:13.748 [DEBUG] [Thread-128316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:15.257 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:25.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:46:25.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:46:25.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:46:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 46, 20), 9.91, 50.7, 0.0, 17.77, 12.27, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:46:25.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:46:20
2025-12-04T02:46:26.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:46:26.245 [DEBUG] [Thread-128317] [transport.py] [_log()] starting thread (client mode): 0xa2729cc0
2025-12-04T02:46:26.245 [DEBUG] [Thread-128317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:46:26.265 [DEBUG] [Thread-128317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:46:26.265 [INFO] [Thread-128317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:26.268 [DEBUG] [Thread-128317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] client lang: <none>
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] server lang: <none>
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] kex follows: False
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] Compression: none
2025-12-04T02:46:26.269 [DEBUG] [Thread-128317] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:46:26.287 [DEBUG] [Thread-128317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:46:26.287 [DEBUG] [Thread-128317] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:46:26.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:46:26.288 [DEBUG] [Thread-128317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:46:26.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:46:26.290 [DEBUG] [Thread-128317] [transport.py] [_log()] userauth is OK
2025-12-04T02:46:26.291 [DEBUG] [Thread-128317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:46:26.291 [DEBUG] [Thread-128317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:46:26.291 [DEBUG] [Thread-128317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:46:26.291 [DEBUG] [Thread-128317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:46:26.325 [INFO] [Thread-128317] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:46:26.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:46:26.972 [DEBUG] [Thread-128317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:46:26.972 [DEBUG] [Thread-128317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:46:26.972 [DEBUG] [Thread-128317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:46:27.014 [DEBUG] [Thread-128317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:46:27.014 [DEBUG] [Thread-128317] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:46:27.017 [DEBUG] [Thread-128317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:46:27.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:46:27.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:46:27.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:46:27.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:46:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:46:27.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:46:27.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:46:27.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.031989 -999.00  +12.30  12.79     55   +3.60 1 1 1 1 1     0    0 7.32 -50.33 ZNESW 12.8 12.8 163.0 16.1 12.7 -24.6 12.5 -24.0 12.3 -22.5 12.6 -23.3
2025-12-04T02:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:46:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.031989
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:46:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:46:20', tmtdew=9.91, humidity=50.7, cloud=0.0, wind=17.77, temperature=12.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:46:20', seeing=1.9, atlas_timestamp='2025-12-04T00:46:03.850', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:46:27.042 [DEBUG] [Thread-128317] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:46:27.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:46:27.138 [DEBUG] [Thread-128320] [transport.py] [_log()] starting thread (client mode): 0xa27842e0
2025-12-04T02:46:27.138 [DEBUG] [Thread-128320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:46:27.153 [DEBUG] [Thread-128320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:46:27.153 [INFO] [Thread-128320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] client lang: <none>
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] server lang: <none>
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] kex follows: False
2025-12-04T02:46:27.161 [DEBUG] [Thread-128320] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] Compression: none
2025-12-04T02:46:27.162 [DEBUG] [Thread-128320] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:46:27.224 [DEBUG] [Thread-128320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:46:27.224 [DEBUG] [Thread-128320] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:46:27.225 [DEBUG] [Thread-128320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:46:27.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:46:27.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:46:27.280 [DEBUG] [Thread-128320] [transport.py] [_log()] userauth is OK
2025-12-04T02:46:27.280 [DEBUG] [Thread-128320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:46:27.281 [DEBUG] [Thread-128320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:46:27.281 [DEBUG] [Thread-128320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:46:27.281 [DEBUG] [Thread-128320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:46:27.299 [INFO] [Thread-128320] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:46:27.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:46:27.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:46:28.155 [DEBUG] [Thread-128320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:46:28.155 [DEBUG] [Thread-128320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:46:28.203 [DEBUG] [Thread-128320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:46:28.203 [DEBUG] [Thread-128320] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:46:28.211 [DEBUG] [Thread-128320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:46:28.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:46:28.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:46:28.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:46:28.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:46:28.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:46:28.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:46:28.245 [DEBUG] [Thread-128320] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:46:28.773 [DEBUG] [Thread-128322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:32.807 [DEBUG] [Thread-128323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:35.780 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:43.817 [DEBUG] [Thread-128324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:56.079 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:56.079 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:56.157 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:58.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:46:58.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:46:58.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:46:58.843 [DEBUG] [Thread-128325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:46:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 46, 52), 10.01, 50.53, 0.0, 16.69, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:46:58.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:46:52
2025-12-04T02:46:59.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:46:59.200 [DEBUG] [Thread-128326] [transport.py] [_log()] starting thread (client mode): 0xa2786530
2025-12-04T02:46:59.200 [DEBUG] [Thread-128326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:46:59.218 [DEBUG] [Thread-128326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:46:59.219 [INFO] [Thread-128326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] client lang: <none>
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] server lang: <none>
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] kex follows: False
2025-12-04T02:46:59.220 [DEBUG] [Thread-128326] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] Compression: none
2025-12-04T02:46:59.221 [DEBUG] [Thread-128326] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:46:59.234 [DEBUG] [Thread-128326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:46:59.235 [DEBUG] [Thread-128326] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:46:59.235 [DEBUG] [Thread-128326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:46:59.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:46:59.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:46:59.237 [DEBUG] [Thread-128326] [transport.py] [_log()] userauth is OK
2025-12-04T02:46:59.237 [DEBUG] [Thread-128326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:46:59.238 [DEBUG] [Thread-128326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:46:59.238 [DEBUG] [Thread-128326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:46:59.238 [DEBUG] [Thread-128326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:46:59.255 [INFO] [Thread-128326] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:46:59.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:46:59.853 [DEBUG] [Thread-128326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:46:59.854 [DEBUG] [Thread-128326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:46:59.854 [DEBUG] [Thread-128326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:46:59.895 [DEBUG] [Thread-128326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:46:59.895 [DEBUG] [Thread-128326] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:46:59.897 [DEBUG] [Thread-128326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:46:59.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:46:59.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:46:59.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:46:59.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:46:59.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:46:59.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:46:59.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:46:59.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:46:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:46:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.032336 -999.00  +12.30   9.60     55   +3.60 1 1 1 1 1     0    0 7.51 -48.99 ZNESW 9.1 9.6 161.4 12.8 12.7 -24.6 12.5 -24.1 12.3 -22.6 12.6 -23.4
2025-12-04T02:46:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:46:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:46:59.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.032336
2025-12-04T02:46:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:46:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:46:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:46:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:46:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:46:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:46:52', tmtdew=10.01, humidity=50.53, cloud=0.0, wind=16.69, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:46:52', seeing=1.98, atlas_timestamp='2025-12-04T00:46:33.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:46:59.923 [DEBUG] [Thread-128326] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:47:00.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:47:00.019 [DEBUG] [Thread-128329] [transport.py] [_log()] starting thread (client mode): 0xa2729210
2025-12-04T02:47:00.019 [DEBUG] [Thread-128329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:47:00.036 [DEBUG] [Thread-128329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:47:00.036 [INFO] [Thread-128329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:47:00.044 [DEBUG] [Thread-128329] [transport.py] [_log()] client lang: <none>
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] server lang: <none>
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] kex follows: False
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] Compression: none
2025-12-04T02:47:00.045 [DEBUG] [Thread-128329] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:47:00.105 [DEBUG] [Thread-128329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:47:00.105 [DEBUG] [Thread-128329] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:47:00.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:47:00.106 [DEBUG] [Thread-128329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:47:00.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:47:00.162 [DEBUG] [Thread-128329] [transport.py] [_log()] userauth is OK
2025-12-04T02:47:00.163 [DEBUG] [Thread-128329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:47:00.163 [DEBUG] [Thread-128329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:47:00.163 [DEBUG] [Thread-128329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:47:00.163 [DEBUG] [Thread-128329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:47:00.182 [INFO] [Thread-128329] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:47:00.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:47:00.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:47:01.028 [DEBUG] [Thread-128329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:47:01.028 [DEBUG] [Thread-128329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:47:01.075 [DEBUG] [Thread-128329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:47:01.076 [DEBUG] [Thread-128329] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:47:01.084 [DEBUG] [Thread-128329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:47:01.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:47:01.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:47:01.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:47:01.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:47:01.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:47:01.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:47:01.117 [DEBUG] [Thread-128329] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:47:13.870 [DEBUG] [Thread-128331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:16.601 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:28.913 [DEBUG] [Thread-128332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:31.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:47:31.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:47:31.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:47:31.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 47, 24), 10.0, 50.55, 0.0, 16.5, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:47:31.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:47:24
2025-12-04T02:47:31.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:47:32.134 [DEBUG] [Thread-128333] [transport.py] [_log()] starting thread (client mode): 0xa2729e70
2025-12-04T02:47:32.134 [DEBUG] [Thread-128333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:47:32.153 [DEBUG] [Thread-128333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:47:32.153 [INFO] [Thread-128333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] client lang: <none>
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] server lang: <none>
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] kex follows: False
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] Compression: none
2025-12-04T02:47:32.156 [DEBUG] [Thread-128333] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:47:32.175 [DEBUG] [Thread-128333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:47:32.176 [DEBUG] [Thread-128333] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:47:32.176 [DEBUG] [Thread-128333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:47:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:47:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:47:32.177 [DEBUG] [Thread-128333] [transport.py] [_log()] userauth is OK
2025-12-04T02:47:32.177 [DEBUG] [Thread-128333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:47:32.177 [DEBUG] [Thread-128333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:47:32.177 [DEBUG] [Thread-128333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:47:32.177 [DEBUG] [Thread-128333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:47:32.196 [INFO] [Thread-128333] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:47:32.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:47:32.783 [DEBUG] [Thread-128333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:47:32.783 [DEBUG] [Thread-128333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:47:32.783 [DEBUG] [Thread-128333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:47:32.824 [DEBUG] [Thread-128333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:47:32.825 [DEBUG] [Thread-128333] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:47:32.826 [DEBUG] [Thread-128333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:47:32.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:47:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:47:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:47:32.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:47:32.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:47:32.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:47:32.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.032683 -999.00  +12.30  14.30     54   +3.50 1 1 1 1 1     0    0 7.49 -43.99 ZNESW 13.1 14.3 157.4 18.4 12.6 -24.6 12.5 -24.1 12.3 -22.5 12.6 -23.3
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.032683
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:47:32.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:47:24', tmtdew=10.0, humidity=50.55, cloud=0.0, wind=16.5, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:47:24', seeing=2.85, atlas_timestamp='2025-12-04T00:47:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:47:32.838 [DEBUG] [Thread-128333] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:47:32.884 [DEBUG] [Thread-128336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:32.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:47:32.925 [DEBUG] [Thread-128337] [transport.py] [_log()] starting thread (client mode): 0xa2729cf0
2025-12-04T02:47:32.925 [DEBUG] [Thread-128337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:47:32.939 [DEBUG] [Thread-128337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:47:32.939 [INFO] [Thread-128337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:47:32.946 [DEBUG] [Thread-128337] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:47:32.946 [DEBUG] [Thread-128337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:47:32.946 [DEBUG] [Thread-128337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:47:32.946 [DEBUG] [Thread-128337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:32.946 [DEBUG] [Thread-128337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] client lang: <none>
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] server lang: <none>
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] kex follows: False
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] Compression: none
2025-12-04T02:47:32.947 [DEBUG] [Thread-128337] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:47:33.003 [DEBUG] [Thread-128337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:47:33.003 [DEBUG] [Thread-128337] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:47:33.003 [DEBUG] [Thread-128337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:47:33.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:47:33.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:47:33.060 [DEBUG] [Thread-128337] [transport.py] [_log()] userauth is OK
2025-12-04T02:47:33.060 [DEBUG] [Thread-128337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:47:33.060 [DEBUG] [Thread-128337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:47:33.060 [DEBUG] [Thread-128337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:47:33.060 [DEBUG] [Thread-128337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:47:33.078 [INFO] [Thread-128337] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:47:33.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:47:33.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:47:33.901 [DEBUG] [Thread-128337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:47:33.901 [DEBUG] [Thread-128337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:47:33.949 [DEBUG] [Thread-128337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:47:33.949 [DEBUG] [Thread-128337] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:47:33.957 [DEBUG] [Thread-128337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:47:33.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:47:33.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:47:33.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:47:33.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:47:33.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:47:33.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:47:33.990 [DEBUG] [Thread-128337] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:47:37.124 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:43.940 [DEBUG] [Thread-128339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:56.277 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:56.278 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:57.627 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:47:58.977 [DEBUG] [Thread-128340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:04.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:48:04.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:48:04.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:48:04.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 47, 56), 9.94, 50.6, 0.0, 17.15, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:48:04.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:47:56
2025-12-04T02:48:04.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:48:04.962 [DEBUG] [Thread-128341] [transport.py] [_log()] starting thread (client mode): 0xa2729db0
2025-12-04T02:48:04.962 [DEBUG] [Thread-128341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:48:04.983 [DEBUG] [Thread-128341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:48:04.983 [INFO] [Thread-128341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:04.987 [DEBUG] [Thread-128341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] client lang: <none>
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] server lang: <none>
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] kex follows: False
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] Compression: none
2025-12-04T02:48:04.988 [DEBUG] [Thread-128341] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:48:05.005 [DEBUG] [Thread-128341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:48:05.006 [DEBUG] [Thread-128341] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:48:05.006 [DEBUG] [Thread-128341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:48:05.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:48:05.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:48:05.008 [DEBUG] [Thread-128341] [transport.py] [_log()] userauth is OK
2025-12-04T02:48:05.008 [DEBUG] [Thread-128341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:48:05.008 [DEBUG] [Thread-128341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:48:05.008 [DEBUG] [Thread-128341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:48:05.008 [DEBUG] [Thread-128341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:48:05.032 [INFO] [Thread-128341] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:48:05.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:48:05.659 [DEBUG] [Thread-128341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:48:05.659 [DEBUG] [Thread-128341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:48:05.660 [DEBUG] [Thread-128341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:48:05.700 [DEBUG] [Thread-128341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:48:05.700 [DEBUG] [Thread-128341] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:48:05.703 [DEBUG] [Thread-128341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:48:05.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:48:05.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:48:05.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:48:05.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:48:05.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:48:05.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:48:05.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:48:05.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:48:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:48:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.032683 -999.00  +12.30  14.30     54   +3.50 1 1 1 1 1     0    0 7.49 -43.99 ZNESW 13.1 14.3 157.4 18.4 12.6 -24.6 12.5 -24.1 12.3 -22.5 12.6 -23.3
2025-12-04T02:48:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:48:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:48:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.032683
2025-12-04T02:48:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:48:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:48:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:48:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:48:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:48:05.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:47:56', tmtdew=9.94, humidity=50.6, cloud=0.0, wind=17.15, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:47:56', seeing=2.85, atlas_timestamp='2025-12-04T00:47:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:48:05.729 [DEBUG] [Thread-128341] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:48:05.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:48:05.826 [DEBUG] [Thread-128344] [transport.py] [_log()] starting thread (client mode): 0xa51cf0a0
2025-12-04T02:48:05.826 [DEBUG] [Thread-128344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:48:05.844 [DEBUG] [Thread-128344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:48:05.844 [INFO] [Thread-128344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:48:05.854 [DEBUG] [Thread-128344] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:48:05.854 [DEBUG] [Thread-128344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] client lang: <none>
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] server lang: <none>
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] kex follows: False
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:48:05.855 [DEBUG] [Thread-128344] [transport.py] [_log()] Compression: none
2025-12-04T02:48:05.856 [DEBUG] [Thread-128344] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:48:05.911 [DEBUG] [Thread-128344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:48:05.912 [DEBUG] [Thread-128344] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:48:05.912 [DEBUG] [Thread-128344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:48:05.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:48:05.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:48:05.972 [DEBUG] [Thread-128344] [transport.py] [_log()] userauth is OK
2025-12-04T02:48:05.972 [DEBUG] [Thread-128344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:48:05.972 [DEBUG] [Thread-128344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:48:05.972 [DEBUG] [Thread-128344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:48:05.972 [DEBUG] [Thread-128344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:48:05.995 [INFO] [Thread-128344] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:48:05.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:48:05.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:48:06.829 [DEBUG] [Thread-128344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:48:06.830 [DEBUG] [Thread-128344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:48:06.878 [DEBUG] [Thread-128344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:48:06.878 [DEBUG] [Thread-128344] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:48:06.886 [DEBUG] [Thread-128344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:48:06.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:48:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:48:06.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:48:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:48:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:48:06.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:48:06.918 [DEBUG] [Thread-128344] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:48:14.006 [DEBUG] [Thread-128346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:18.034 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:29.040 [DEBUG] [Thread-128347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:32.944 [DEBUG] [Thread-128348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:48:36.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:48:36.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:48:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 48, 28), 9.93, 50.65, 0.0, 15.58, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:48:37.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:48:28
2025-12-04T02:48:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:48:37.889 [DEBUG] [Thread-128349] [transport.py] [_log()] starting thread (client mode): 0xa2728ca0
2025-12-04T02:48:37.889 [DEBUG] [Thread-128349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:48:37.910 [DEBUG] [Thread-128349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:48:37.910 [INFO] [Thread-128349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] client lang: <none>
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] server lang: <none>
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] kex follows: False
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] Compression: none
2025-12-04T02:48:37.913 [DEBUG] [Thread-128349] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:48:37.931 [DEBUG] [Thread-128349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:48:37.932 [DEBUG] [Thread-128349] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:48:37.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:48:37.933 [DEBUG] [Thread-128349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:48:37.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:48:37.934 [DEBUG] [Thread-128349] [transport.py] [_log()] userauth is OK
2025-12-04T02:48:37.935 [DEBUG] [Thread-128349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:48:37.935 [DEBUG] [Thread-128349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:48:37.935 [DEBUG] [Thread-128349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:48:37.935 [DEBUG] [Thread-128349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:48:37.952 [INFO] [Thread-128349] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:48:37.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:48:38.402 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:38.780 [DEBUG] [Thread-128349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:48:38.780 [DEBUG] [Thread-128349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:48:38.780 [DEBUG] [Thread-128349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:48:38.821 [DEBUG] [Thread-128349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:48:38.821 [DEBUG] [Thread-128349] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:48:38.824 [DEBUG] [Thread-128349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:48:38.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:48:38.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:48:38.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:48:38.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:48:38.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:48:38.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:48:38.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.033030 -999.00  +12.30  15.14     54   +3.40 1 1 1 1 1     0    0 7.69 -37.67 ZNESW 13.5 15.1 168.8 18.3 12.6 -24.5 12.5 -24.0 12.3 -22.4 12.6 -23.2
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:48:38.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.033030
2025-12-04T02:48:38.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:48:38.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:48:38.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:48:38.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:48:38.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:48:38.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:48:28', tmtdew=9.93, humidity=50.65, cloud=0.0, wind=15.58, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:48:28', seeing=3.08, atlas_timestamp='2025-12-04T00:47:33.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:43:00')
2025-12-04T02:48:38.848 [DEBUG] [Thread-128349] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:48:38.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:48:38.945 [DEBUG] [Thread-128352] [transport.py] [_log()] starting thread (client mode): 0xa27297e0
2025-12-04T02:48:38.945 [DEBUG] [Thread-128352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:48:38.960 [DEBUG] [Thread-128352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:48:38.960 [INFO] [Thread-128352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:48:38.967 [DEBUG] [Thread-128352] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] client lang: <none>
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] server lang: <none>
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] kex follows: False
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] Compression: none
2025-12-04T02:48:38.968 [DEBUG] [Thread-128352] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:48:39.024 [DEBUG] [Thread-128352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:48:39.025 [DEBUG] [Thread-128352] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:48:39.025 [DEBUG] [Thread-128352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:48:39.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:48:39.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:48:39.080 [DEBUG] [Thread-128352] [transport.py] [_log()] userauth is OK
2025-12-04T02:48:39.081 [DEBUG] [Thread-128352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:48:39.081 [DEBUG] [Thread-128352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:48:39.081 [DEBUG] [Thread-128352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:48:39.081 [DEBUG] [Thread-128352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:48:39.100 [INFO] [Thread-128352] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:48:39.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:48:39.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:48:39.919 [DEBUG] [Thread-128352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:48:39.919 [DEBUG] [Thread-128352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:48:39.967 [DEBUG] [Thread-128352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:48:39.967 [DEBUG] [Thread-128352] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:48:39.976 [DEBUG] [Thread-128352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:48:39.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:48:39.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:48:39.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:48:40.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:48:40.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:48:40.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:48:40.011 [DEBUG] [Thread-128352] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:48:44.067 [DEBUG] [Thread-128354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:56.479 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:56.480 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:58.781 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:48:59.104 [DEBUG] [Thread-128355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:10.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:49:10.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:49:10.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:49:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 49), 9.96, 50.68, 0.0, 14.72, 12.25, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:49:10.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:49:00
2025-12-04T02:49:10.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:49:10.972 [DEBUG] [Thread-128356] [transport.py] [_log()] starting thread (client mode): 0xa272b550
2025-12-04T02:49:10.972 [DEBUG] [Thread-128356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:49:10.992 [DEBUG] [Thread-128356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:49:10.992 [INFO] [Thread-128356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:49:10.995 [DEBUG] [Thread-128356] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:49:10.995 [DEBUG] [Thread-128356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] client lang: <none>
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] server lang: <none>
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] kex follows: False
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:49:10.996 [DEBUG] [Thread-128356] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:49:10.997 [DEBUG] [Thread-128356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:49:10.997 [DEBUG] [Thread-128356] [transport.py] [_log()] Compression: none
2025-12-04T02:49:10.997 [DEBUG] [Thread-128356] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:49:11.013 [DEBUG] [Thread-128356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:49:11.014 [DEBUG] [Thread-128356] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:49:11.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:49:11.015 [DEBUG] [Thread-128356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:49:11.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:49:11.016 [DEBUG] [Thread-128356] [transport.py] [_log()] userauth is OK
2025-12-04T02:49:11.016 [DEBUG] [Thread-128356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:49:11.017 [DEBUG] [Thread-128356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:49:11.017 [DEBUG] [Thread-128356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:49:11.017 [DEBUG] [Thread-128356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:49:11.051 [INFO] [Thread-128356] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:49:11.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:49:11.701 [DEBUG] [Thread-128356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:49:11.701 [DEBUG] [Thread-128356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:49:11.702 [DEBUG] [Thread-128356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:49:11.743 [DEBUG] [Thread-128356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:49:11.743 [DEBUG] [Thread-128356] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:49:11.746 [DEBUG] [Thread-128356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:49:11.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:49:11.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:49:11.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:49:11.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:49:11.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:49:11.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:49:11.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.033725 -999.00  +12.40   8.43     54   +3.50 1 1 1 1 1     0    0 7.63 -31.68 ZNESW 7.9 8.4 154.7 15.2 12.7 -24.8 12.5 -24.1 12.3 -22.5 12.6 -23.5
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:49:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.033725
2025-12-04T02:49:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:49:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:49:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:49:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:49:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:49:11.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:49:00', tmtdew=9.96, humidity=50.68, cloud=0.0, wind=14.72, temperature=12.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:49:00', seeing=3.04, atlas_timestamp='2025-12-04T00:48:33.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:46:00')
2025-12-04T02:49:11.770 [DEBUG] [Thread-128356] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:49:11.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:49:11.872 [DEBUG] [Thread-128359] [transport.py] [_log()] starting thread (client mode): 0xa2708730
2025-12-04T02:49:11.872 [DEBUG] [Thread-128359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:49:11.889 [DEBUG] [Thread-128359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:49:11.889 [INFO] [Thread-128359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:49:11.899 [DEBUG] [Thread-128359] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:49:11.899 [DEBUG] [Thread-128359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] client lang: <none>
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] server lang: <none>
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] kex follows: False
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:49:11.900 [DEBUG] [Thread-128359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:49:11.901 [DEBUG] [Thread-128359] [transport.py] [_log()] Compression: none
2025-12-04T02:49:11.901 [DEBUG] [Thread-128359] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:49:11.956 [DEBUG] [Thread-128359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:49:11.957 [DEBUG] [Thread-128359] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:49:11.957 [DEBUG] [Thread-128359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:49:11.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:49:11.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:49:12.012 [DEBUG] [Thread-128359] [transport.py] [_log()] userauth is OK
2025-12-04T02:49:12.013 [DEBUG] [Thread-128359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:49:12.013 [DEBUG] [Thread-128359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:49:12.013 [DEBUG] [Thread-128359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:49:12.013 [DEBUG] [Thread-128359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:49:12.032 [INFO] [Thread-128359] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:49:12.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:49:12.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:49:12.857 [DEBUG] [Thread-128359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:49:12.857 [DEBUG] [Thread-128359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:49:12.905 [DEBUG] [Thread-128359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:49:12.905 [DEBUG] [Thread-128359] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:49:12.914 [DEBUG] [Thread-128359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:49:12.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:49:12.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:49:12.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:49:12.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:49:12.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:49:12.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:49:12.949 [DEBUG] [Thread-128359] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:49:14.133 [DEBUG] [Thread-128361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:19.166 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:29.175 [DEBUG] [Thread-128362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:32.995 [DEBUG] [Thread-128363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:39.546 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:42.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:49:42.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:49:42.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:49:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 49, 32), 10.01, 50.5, 0.0, 15.4, 12.27, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:49:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:49:32
2025-12-04T02:49:43.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:49:43.914 [DEBUG] [Thread-128364] [transport.py] [_log()] starting thread (client mode): 0xa27089d0
2025-12-04T02:49:43.914 [DEBUG] [Thread-128364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:49:43.933 [DEBUG] [Thread-128364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:49:43.933 [INFO] [Thread-128364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:49:43.936 [DEBUG] [Thread-128364] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] client lang: <none>
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] server lang: <none>
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] kex follows: False
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] Compression: none
2025-12-04T02:49:43.937 [DEBUG] [Thread-128364] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:49:43.954 [DEBUG] [Thread-128364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:49:43.954 [DEBUG] [Thread-128364] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:49:43.955 [DEBUG] [Thread-128364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:49:43.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:49:43.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:49:43.956 [DEBUG] [Thread-128364] [transport.py] [_log()] userauth is OK
2025-12-04T02:49:43.956 [DEBUG] [Thread-128364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:49:43.957 [DEBUG] [Thread-128364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:49:43.957 [DEBUG] [Thread-128364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:49:43.957 [DEBUG] [Thread-128364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:49:43.974 [INFO] [Thread-128364] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:49:43.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:49:44.200 [DEBUG] [Thread-128366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:44.740 [DEBUG] [Thread-128364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:49:44.741 [DEBUG] [Thread-128364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:49:44.741 [DEBUG] [Thread-128364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:49:44.782 [DEBUG] [Thread-128364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:49:44.782 [DEBUG] [Thread-128364] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:49:44.785 [DEBUG] [Thread-128364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:49:44.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:49:44.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:49:44.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:49:44.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:49:44.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:49:44.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:49:44.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:49:44.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.034072 -999.00  +12.40   8.89     54   +3.50 1 1 1 1 1     0    0 7.86 -27.47 ZNESW 9.9 8.9 151.8 11.8 12.7 -24.5 12.5 -24.2 12.3 -22.5 12.6 -23.5
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.034072
2025-12-04T02:49:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:49:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:49:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:49:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:49:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:49:44.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:49:32', tmtdew=10.01, humidity=50.5, cloud=0.0, wind=15.4, temperature=12.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:49:32', seeing=3.8, atlas_timestamp='2025-12-04T00:49:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:46:00')
2025-12-04T02:49:44.809 [DEBUG] [Thread-128364] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:49:44.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:49:44.904 [DEBUG] [Thread-128368] [transport.py] [_log()] starting thread (client mode): 0xa2729570
2025-12-04T02:49:44.904 [DEBUG] [Thread-128368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:49:44.919 [DEBUG] [Thread-128368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:49:44.920 [INFO] [Thread-128368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:44.927 [DEBUG] [Thread-128368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] client lang: <none>
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] server lang: <none>
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] kex follows: False
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] Compression: none
2025-12-04T02:49:44.928 [DEBUG] [Thread-128368] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:49:44.984 [DEBUG] [Thread-128368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:49:44.985 [DEBUG] [Thread-128368] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:49:44.985 [DEBUG] [Thread-128368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:49:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:49:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:49:45.041 [DEBUG] [Thread-128368] [transport.py] [_log()] userauth is OK
2025-12-04T02:49:45.041 [DEBUG] [Thread-128368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:49:45.041 [DEBUG] [Thread-128368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:49:45.041 [DEBUG] [Thread-128368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:49:45.041 [DEBUG] [Thread-128368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:49:45.060 [INFO] [Thread-128368] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:49:45.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:49:45.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:49:45.881 [DEBUG] [Thread-128368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:49:45.881 [DEBUG] [Thread-128368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:49:45.930 [DEBUG] [Thread-128368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:49:45.930 [DEBUG] [Thread-128368] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:49:45.939 [DEBUG] [Thread-128368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:49:45.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:49:45.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:49:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:49:45.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:49:45.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:49:45.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:49:45.974 [DEBUG] [Thread-128368] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:49:56.675 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:56.676 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:59.231 [DEBUG] [Thread-128370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:49:59.920 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:14.278 [DEBUG] [Thread-128371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:15.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:50:15.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:50:15.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:50:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 50, 4), 10.06, 50.35, 0.0, 15.14, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:50:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:50:04
2025-12-04T02:50:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:50:16.935 [DEBUG] [Thread-128372] [transport.py] [_log()] starting thread (client mode): 0xa51ce590
2025-12-04T02:50:16.935 [DEBUG] [Thread-128372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:50:16.956 [DEBUG] [Thread-128372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:50:16.956 [INFO] [Thread-128372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:50:16.959 [DEBUG] [Thread-128372] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] client lang: <none>
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] server lang: <none>
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] kex follows: False
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] Compression: none
2025-12-04T02:50:16.960 [DEBUG] [Thread-128372] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:50:16.978 [DEBUG] [Thread-128372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:50:16.978 [DEBUG] [Thread-128372] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:50:16.979 [DEBUG] [Thread-128372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:50:16.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:50:16.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:50:16.980 [DEBUG] [Thread-128372] [transport.py] [_log()] userauth is OK
2025-12-04T02:50:16.981 [DEBUG] [Thread-128372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:50:16.981 [DEBUG] [Thread-128372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:50:16.981 [DEBUG] [Thread-128372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:50:16.981 [DEBUG] [Thread-128372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:50:17.002 [INFO] [Thread-128372] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:50:17.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:50:17.641 [DEBUG] [Thread-128372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:50:17.641 [DEBUG] [Thread-128372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:50:17.642 [DEBUG] [Thread-128372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:50:17.682 [DEBUG] [Thread-128372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:50:17.682 [DEBUG] [Thread-128372] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:50:17.685 [DEBUG] [Thread-128372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:50:17.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:50:17.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:50:17.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:50:17.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:50:17.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:50:17.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:50:17.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:50:17.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.034419 -999.00  +12.40  14.81     54   +3.40 1 1 1 1 1     0    0 7.81 -24.68 ZNESW 15.9 14.8 168.6 15.9 12.7 -24.6 12.6 -24.1 12.3 -22.4 12.6 -23.4
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.034419
2025-12-04T02:50:17.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:50:17.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:50:17.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:50:17.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:50:17.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:50:17.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:50:04', tmtdew=10.06, humidity=50.35, cloud=0.0, wind=15.14, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:50:04', seeing=2.64, atlas_timestamp='2025-12-04T00:49:33.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:46:00')
2025-12-04T02:50:17.711 [DEBUG] [Thread-128372] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:50:17.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:50:17.807 [DEBUG] [Thread-128375] [transport.py] [_log()] starting thread (client mode): 0xa51d3280
2025-12-04T02:50:17.807 [DEBUG] [Thread-128375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:50:17.825 [DEBUG] [Thread-128375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:50:17.825 [INFO] [Thread-128375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:50:17.832 [DEBUG] [Thread-128375] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:50:17.832 [DEBUG] [Thread-128375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] client lang: <none>
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] server lang: <none>
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] kex follows: False
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] Compression: none
2025-12-04T02:50:17.833 [DEBUG] [Thread-128375] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:50:17.891 [DEBUG] [Thread-128375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:50:17.892 [DEBUG] [Thread-128375] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:50:17.892 [DEBUG] [Thread-128375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:50:17.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:50:17.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:50:17.952 [DEBUG] [Thread-128375] [transport.py] [_log()] userauth is OK
2025-12-04T02:50:17.953 [DEBUG] [Thread-128375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:50:17.953 [DEBUG] [Thread-128375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:50:17.953 [DEBUG] [Thread-128375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:50:17.953 [DEBUG] [Thread-128375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:50:17.971 [INFO] [Thread-128375] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:50:17.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:50:17.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:50:18.812 [DEBUG] [Thread-128375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:50:18.812 [DEBUG] [Thread-128375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:50:18.860 [DEBUG] [Thread-128375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:50:18.860 [DEBUG] [Thread-128375] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:50:18.869 [DEBUG] [Thread-128375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:50:18.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:50:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:50:18.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:50:18.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:50:18.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:50:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:50:18.903 [DEBUG] [Thread-128375] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:50:20.342 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:29.306 [DEBUG] [Thread-128377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:33.068 [DEBUG] [Thread-128378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:40.728 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:44.351 [DEBUG] [Thread-128379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:48.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:50:48.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:50:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 50, 36), 10.13, 49.78, 0.0, 15.97, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:50:49.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:50:36
2025-12-04T02:50:49.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:50:49.870 [DEBUG] [Thread-128380] [transport.py] [_log()] starting thread (client mode): 0xa51d2a40
2025-12-04T02:50:49.870 [DEBUG] [Thread-128380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:50:49.891 [DEBUG] [Thread-128380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:50:49.891 [INFO] [Thread-128380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] client lang: <none>
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] server lang: <none>
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] kex follows: False
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:50:49.895 [DEBUG] [Thread-128380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:50:49.896 [DEBUG] [Thread-128380] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:50:49.896 [DEBUG] [Thread-128380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:50:49.896 [DEBUG] [Thread-128380] [transport.py] [_log()] Compression: none
2025-12-04T02:50:49.896 [DEBUG] [Thread-128380] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:50:49.912 [DEBUG] [Thread-128380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:50:49.912 [DEBUG] [Thread-128380] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:50:49.913 [DEBUG] [Thread-128380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:50:49.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:50:49.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:50:49.915 [DEBUG] [Thread-128380] [transport.py] [_log()] userauth is OK
2025-12-04T02:50:49.915 [DEBUG] [Thread-128380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:50:49.915 [DEBUG] [Thread-128380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:50:49.915 [DEBUG] [Thread-128380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:50:49.916 [DEBUG] [Thread-128380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:50:49.938 [INFO] [Thread-128380] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:50:49.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:50:50.547 [DEBUG] [Thread-128380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:50:50.547 [DEBUG] [Thread-128380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:50:50.547 [DEBUG] [Thread-128380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:50:50.588 [DEBUG] [Thread-128380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:50:50.588 [DEBUG] [Thread-128380] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:50:50.591 [DEBUG] [Thread-128380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:50:50.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:50:50.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:50:50.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:50:50.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:50:50.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:50:50.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:50:50.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:50:50.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:50:50.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:50:50.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.034766 -999.00  +12.30   9.53     54   +3.50 1 1 1 1 1     0    0 8.26 -20.47 ZNESW 10.0 9.5 156.6 14.0 12.7 -24.6 12.6 -24.1 12.3 -22.5 12.6 -23.4
2025-12-04T02:50:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:50:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:50:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.034766
2025-12-04T02:50:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:50:50.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:50:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:50:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:50:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:50:50.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:50:36', tmtdew=10.13, humidity=49.78, cloud=0.0, wind=15.97, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:50:36', seeing=2.39, atlas_timestamp='2025-12-04T00:50:03.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:46:00')
2025-12-04T02:50:50.615 [DEBUG] [Thread-128380] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:50:50.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:50:50.717 [DEBUG] [Thread-128383] [transport.py] [_log()] starting thread (client mode): 0xa27297b0
2025-12-04T02:50:50.717 [DEBUG] [Thread-128383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:50:50.733 [DEBUG] [Thread-128383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:50:50.733 [INFO] [Thread-128383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:50:50.741 [DEBUG] [Thread-128383] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:50:50.741 [DEBUG] [Thread-128383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:50:50.741 [DEBUG] [Thread-128383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:50:50.741 [DEBUG] [Thread-128383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] client lang: <none>
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] server lang: <none>
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] kex follows: False
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:50:50.742 [DEBUG] [Thread-128383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:50:50.743 [DEBUG] [Thread-128383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:50:50.743 [DEBUG] [Thread-128383] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:50:50.743 [DEBUG] [Thread-128383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:50:50.743 [DEBUG] [Thread-128383] [transport.py] [_log()] Compression: none
2025-12-04T02:50:50.743 [DEBUG] [Thread-128383] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:50:50.801 [DEBUG] [Thread-128383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:50:50.802 [DEBUG] [Thread-128383] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:50:50.803 [DEBUG] [Thread-128383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:50:50.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:50:50.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:50:50.857 [DEBUG] [Thread-128383] [transport.py] [_log()] userauth is OK
2025-12-04T02:50:50.857 [DEBUG] [Thread-128383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:50:50.858 [DEBUG] [Thread-128383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:50:50.858 [DEBUG] [Thread-128383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:50:50.858 [DEBUG] [Thread-128383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:50:50.886 [INFO] [Thread-128383] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:50:50.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:50:50.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:50:51.728 [DEBUG] [Thread-128383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:50:51.729 [DEBUG] [Thread-128383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:50:51.776 [DEBUG] [Thread-128383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:50:51.777 [DEBUG] [Thread-128383] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:50:51.785 [DEBUG] [Thread-128383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:50:51.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:50:51.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:50:51.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:50:51.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:50:51.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:50:51.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:50:51.818 [DEBUG] [Thread-128383] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:50:56.873 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:56.874 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:50:59.376 [DEBUG] [Thread-128385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:01.107 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:14.421 [DEBUG] [Thread-128386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:21.493 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:21.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:51:21.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:51:21.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:51:22.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 51, 8), 10.14, 49.74, 0.0, 15.33, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:51:22.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:51:08
2025-12-04T02:51:22.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:51:22.842 [DEBUG] [Thread-128387] [transport.py] [_log()] starting thread (client mode): 0xa270a320
2025-12-04T02:51:22.842 [DEBUG] [Thread-128387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:51:22.863 [DEBUG] [Thread-128387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:51:22.863 [INFO] [Thread-128387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:22.866 [DEBUG] [Thread-128387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] client lang: <none>
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] server lang: <none>
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] kex follows: False
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] Compression: none
2025-12-04T02:51:22.867 [DEBUG] [Thread-128387] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:51:22.883 [DEBUG] [Thread-128387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:51:22.883 [DEBUG] [Thread-128387] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:51:22.883 [DEBUG] [Thread-128387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:51:22.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:51:22.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:51:22.884 [DEBUG] [Thread-128387] [transport.py] [_log()] userauth is OK
2025-12-04T02:51:22.884 [DEBUG] [Thread-128387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:51:22.884 [DEBUG] [Thread-128387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:51:22.884 [DEBUG] [Thread-128387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:51:22.884 [DEBUG] [Thread-128387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:51:22.899 [INFO] [Thread-128387] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:51:22.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:51:23.502 [DEBUG] [Thread-128387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:51:23.502 [DEBUG] [Thread-128387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:51:23.502 [DEBUG] [Thread-128387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:51:23.543 [DEBUG] [Thread-128387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:51:23.543 [DEBUG] [Thread-128387] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:51:23.545 [DEBUG] [Thread-128387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:51:23.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:51:23.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:51:23.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:51:23.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:51:23.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:51:23.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:51:23.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.035113 -999.00  +12.30   9.26     54   +3.40 1 1 1 1 1     0    0 8.19 -16.84 ZNESW 12.7 9.3 164.0 13.4 12.7 -24.6 12.6 -24.1 12.3 -22.4 12.6 -23.4
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.035113
2025-12-04T02:51:23.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:51:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:51:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:51:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:51:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:51:23.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:51:08', tmtdew=10.14, humidity=49.74, cloud=0.0, wind=15.33, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:51:08', seeing=2.39, atlas_timestamp='2025-12-04T00:50:33.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.06274999999999942, 0.012750000000000483, -0.07450000000000045, -0.0019999999999988916, -0.02424999999999855, -0.00300000000000189, 0.013250000000001094, 0.013499999999998735, -0.004999999999999005, -0.008750000000000924, -0.02400000000000091, 0.04049999999999976, 0.010249999999999204, -0.12199999999999989, -0.0259999999999998, 0.009249999999999758, 0.03550000000000075, -0.08750000000000036, -0.013750000000001705, 0.08099999999999952, -0.007250000000002643, -0.07075000000000031, 0.01774999999999949, 0.051999999999997826, 0.04349999999999987, 0.00575000000000081, 0.044500000000001094, 0.07550000000000168, 0.0010000000000012221, -0.11599999999999966, 0.018000000000000682, 0.031749999999998835], zp_timestamp='2025-12-04T00:46:00')
2025-12-04T02:51:23.567 [DEBUG] [Thread-128387] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:51:23.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:51:23.653 [DEBUG] [Thread-128390] [transport.py] [_log()] starting thread (client mode): 0xa270bbb0
2025-12-04T02:51:23.653 [DEBUG] [Thread-128390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:51:23.671 [DEBUG] [Thread-128390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:51:23.671 [INFO] [Thread-128390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:51:23.678 [DEBUG] [Thread-128390] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] client lang: <none>
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] server lang: <none>
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] kex follows: False
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] Compression: none
2025-12-04T02:51:23.679 [DEBUG] [Thread-128390] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:51:23.736 [DEBUG] [Thread-128390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:51:23.736 [DEBUG] [Thread-128390] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:51:23.736 [DEBUG] [Thread-128390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:51:23.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:51:23.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:51:23.793 [DEBUG] [Thread-128390] [transport.py] [_log()] userauth is OK
2025-12-04T02:51:23.793 [DEBUG] [Thread-128390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:51:23.793 [DEBUG] [Thread-128390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:51:23.793 [DEBUG] [Thread-128390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:51:23.793 [DEBUG] [Thread-128390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:51:23.807 [INFO] [Thread-128390] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:51:23.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:51:23.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:51:24.618 [DEBUG] [Thread-128390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:51:24.618 [DEBUG] [Thread-128390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:51:24.666 [DEBUG] [Thread-128390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:51:24.666 [DEBUG] [Thread-128390] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:51:24.675 [DEBUG] [Thread-128390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:51:24.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:51:24.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:51:24.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:51:24.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:51:24.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:51:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:51:24.707 [DEBUG] [Thread-128390] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:51:29.450 [DEBUG] [Thread-128392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:33.126 [DEBUG] [Thread-128393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:41.868 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:44.496 [DEBUG] [Thread-128394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:54.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:51:54.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:51:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:51:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 51, 40), 10.18, 49.79, 0.0, 14.35, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:51:55.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:51:40
2025-12-04T02:51:55.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:51:55.691 [DEBUG] [Thread-128395] [transport.py] [_log()] starting thread (client mode): 0xa51d07c0
2025-12-04T02:51:55.691 [DEBUG] [Thread-128395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:51:55.711 [DEBUG] [Thread-128395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:51:55.711 [INFO] [Thread-128395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:51:55.714 [DEBUG] [Thread-128395] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:51:55.714 [DEBUG] [Thread-128395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] client lang: <none>
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] server lang: <none>
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] kex follows: False
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:51:55.715 [DEBUG] [Thread-128395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:51:55.716 [DEBUG] [Thread-128395] [transport.py] [_log()] Compression: none
2025-12-04T02:51:55.716 [DEBUG] [Thread-128395] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:51:55.732 [DEBUG] [Thread-128395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:51:55.733 [DEBUG] [Thread-128395] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:51:55.733 [DEBUG] [Thread-128395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:51:55.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:51:55.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:51:55.735 [DEBUG] [Thread-128395] [transport.py] [_log()] userauth is OK
2025-12-04T02:51:55.735 [DEBUG] [Thread-128395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:51:55.735 [DEBUG] [Thread-128395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:51:55.735 [DEBUG] [Thread-128395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:51:55.736 [DEBUG] [Thread-128395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:51:55.759 [INFO] [Thread-128395] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:51:55.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:51:56.403 [DEBUG] [Thread-128395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:51:56.403 [DEBUG] [Thread-128395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:51:56.403 [DEBUG] [Thread-128395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:51:56.444 [DEBUG] [Thread-128395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:51:56.444 [DEBUG] [Thread-128395] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:51:56.447 [DEBUG] [Thread-128395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:51:56.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:51:56.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:51:56.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:51:56.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:51:56.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:51:56.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:51:56.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:51:56.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.035461 -999.00  +12.30  12.67     54   +3.40 1 1 1 1 1     0    0 8.30 -13.08 ZNESW 12.8 12.7 172.0 16.6 12.6 -24.6 12.5 -24.1 12.3 -22.5 12.6 -23.4
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.035461
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:51:56.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:51:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:51:40', tmtdew=10.18, humidity=49.79, cloud=0.0, wind=14.35, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:51:41', seeing=3.09, atlas_timestamp='2025-12-04T00:51:03.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:51:56.467 [DEBUG] [Thread-128395] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:51:56.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:51:56.559 [DEBUG] [Thread-128398] [transport.py] [_log()] starting thread (client mode): 0xa519a590
2025-12-04T02:51:56.559 [DEBUG] [Thread-128398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:51:56.574 [DEBUG] [Thread-128398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:51:56.574 [INFO] [Thread-128398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:51:56.581 [DEBUG] [Thread-128398] [transport.py] [_log()] client lang: <none>
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] server lang: <none>
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] kex follows: False
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] Compression: none
2025-12-04T02:51:56.582 [DEBUG] [Thread-128398] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:51:56.641 [DEBUG] [Thread-128398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:51:56.641 [DEBUG] [Thread-128398] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:51:56.642 [DEBUG] [Thread-128398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:51:56.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:51:56.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:51:56.697 [DEBUG] [Thread-128398] [transport.py] [_log()] userauth is OK
2025-12-04T02:51:56.697 [DEBUG] [Thread-128398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:51:56.698 [DEBUG] [Thread-128398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:51:56.698 [DEBUG] [Thread-128398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:51:56.698 [DEBUG] [Thread-128398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:51:56.717 [INFO] [Thread-128398] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:51:56.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:51:56.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:51:57.075 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:57.076 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:51:57.542 [DEBUG] [Thread-128398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:51:57.543 [DEBUG] [Thread-128398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:51:57.592 [DEBUG] [Thread-128398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:51:57.592 [DEBUG] [Thread-128398] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:51:57.601 [DEBUG] [Thread-128398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:51:57.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:51:57.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:51:57.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:51:57.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:51:57.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:51:57.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:51:57.636 [DEBUG] [Thread-128398] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:51:59.525 [DEBUG] [Thread-128400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:02.250 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:14.569 [DEBUG] [Thread-128401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:22.706 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:27.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:52:27.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:52:27.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:52:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 52, 12), 10.16, 49.85, 0.0, 17.45, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:52:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:52:12
2025-12-04T02:52:28.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:52:28.627 [DEBUG] [Thread-128402] [transport.py] [_log()] starting thread (client mode): 0xa27095a0
2025-12-04T02:52:28.627 [DEBUG] [Thread-128402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:52:28.648 [DEBUG] [Thread-128402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:52:28.648 [INFO] [Thread-128402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:52:28.651 [DEBUG] [Thread-128402] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] client lang: <none>
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] server lang: <none>
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] kex follows: False
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] Compression: none
2025-12-04T02:52:28.652 [DEBUG] [Thread-128402] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:52:28.669 [DEBUG] [Thread-128402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:52:28.670 [DEBUG] [Thread-128402] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:52:28.670 [DEBUG] [Thread-128402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:52:28.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:52:28.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:52:28.672 [DEBUG] [Thread-128402] [transport.py] [_log()] userauth is OK
2025-12-04T02:52:28.672 [DEBUG] [Thread-128402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:52:28.672 [DEBUG] [Thread-128402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:52:28.672 [DEBUG] [Thread-128402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:52:28.672 [DEBUG] [Thread-128402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:52:28.689 [INFO] [Thread-128402] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:52:28.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:52:29.330 [DEBUG] [Thread-128402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:52:29.330 [DEBUG] [Thread-128402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:52:29.330 [DEBUG] [Thread-128402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:52:29.371 [DEBUG] [Thread-128402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:52:29.371 [DEBUG] [Thread-128402] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:52:29.374 [DEBUG] [Thread-128402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:52:29.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:52:29.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:52:29.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:52:29.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:52:29.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:52:29.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:52:29.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:52:29.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:52:29.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:52:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.036155 -999.00  +12.30  11.07     54   +3.40 1 1 1 1 1     0    0 8.56 -8.02 ZNESW 9.4 11.1 153.0 14.1 12.7 -24.7 12.5 -24.1 12.3 -22.6 12.6 -23.5
2025-12-04T02:52:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:52:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:52:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.036155
2025-12-04T02:52:29.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:52:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:52:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:52:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:52:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:52:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:52:12', tmtdew=10.16, humidity=49.85, cloud=0.0, wind=17.45, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:52:13', seeing=2.85, atlas_timestamp='2025-12-04T00:52:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:52:29.400 [DEBUG] [Thread-128402] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:52:29.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:52:29.495 [DEBUG] [Thread-128405] [transport.py] [_log()] starting thread (client mode): 0xa2708a90
2025-12-04T02:52:29.495 [DEBUG] [Thread-128405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:52:29.510 [DEBUG] [Thread-128405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:52:29.510 [INFO] [Thread-128405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:52:29.517 [DEBUG] [Thread-128405] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:52:29.517 [DEBUG] [Thread-128405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] client lang: <none>
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] server lang: <none>
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] kex follows: False
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] Compression: none
2025-12-04T02:52:29.518 [DEBUG] [Thread-128405] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:52:29.577 [DEBUG] [Thread-128405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:52:29.577 [DEBUG] [Thread-128405] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:52:29.578 [DEBUG] [Thread-128405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:52:29.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:52:29.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:52:29.597 [DEBUG] [Thread-128407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:29.633 [DEBUG] [Thread-128405] [transport.py] [_log()] userauth is OK
2025-12-04T02:52:29.634 [DEBUG] [Thread-128405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:52:29.634 [DEBUG] [Thread-128405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:52:29.634 [DEBUG] [Thread-128405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:52:29.634 [DEBUG] [Thread-128405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:52:29.656 [INFO] [Thread-128405] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:52:29.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:52:29.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:52:30.501 [DEBUG] [Thread-128405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:52:30.501 [DEBUG] [Thread-128405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:52:30.550 [DEBUG] [Thread-128405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:52:30.550 [DEBUG] [Thread-128405] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:52:30.558 [DEBUG] [Thread-128405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:52:30.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:52:30.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:52:30.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:52:30.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:52:30.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:52:30.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:52:30.592 [DEBUG] [Thread-128405] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:52:33.195 [DEBUG] [Thread-128408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:43.085 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:44.646 [DEBUG] [Thread-128409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:57.282 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:57.283 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:52:59.677 [DEBUG] [Thread-128410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:00.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:53:00.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:53:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:53:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 52, 44), 10.14, 49.72, 0.0, 17.2, 12.28, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:53:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:52:44
2025-12-04T02:53:01.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:53:01.583 [DEBUG] [Thread-128411] [transport.py] [_log()] starting thread (client mode): 0xa27845b0
2025-12-04T02:53:01.583 [DEBUG] [Thread-128411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:53:01.604 [DEBUG] [Thread-128411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:53:01.604 [INFO] [Thread-128411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] client lang: <none>
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] server lang: <none>
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] kex follows: False
2025-12-04T02:53:01.607 [DEBUG] [Thread-128411] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] Compression: none
2025-12-04T02:53:01.608 [DEBUG] [Thread-128411] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:53:01.623 [DEBUG] [Thread-128411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:53:01.623 [DEBUG] [Thread-128411] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:53:01.623 [DEBUG] [Thread-128411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:53:01.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:53:01.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:53:01.624 [DEBUG] [Thread-128411] [transport.py] [_log()] userauth is OK
2025-12-04T02:53:01.624 [DEBUG] [Thread-128411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:53:01.624 [DEBUG] [Thread-128411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:53:01.624 [DEBUG] [Thread-128411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:53:01.624 [DEBUG] [Thread-128411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:53:01.640 [INFO] [Thread-128411] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:53:01.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:53:02.273 [DEBUG] [Thread-128411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:53:02.273 [DEBUG] [Thread-128411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:53:02.273 [DEBUG] [Thread-128411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:53:02.314 [DEBUG] [Thread-128411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:53:02.314 [DEBUG] [Thread-128411] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:53:02.316 [DEBUG] [Thread-128411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:53:02.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:53:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:53:02.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:53:02.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:53:02.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:53:02.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:53:02.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:53:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:53:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:53:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.036502 -999.00  +12.30  15.02     54   +3.40 1 1 1 1 1     0    0 8.49 -6.32 ZNESW 10.5 15.0 146.6 18.3 12.6 -24.6 12.5 -23.9 12.3 -22.4 12.6 -23.2
2025-12-04T02:53:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:53:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:53:02.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.036502
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:53:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:52:44', tmtdew=10.14, humidity=49.72, cloud=0.0, wind=17.2, temperature=12.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:52:45', seeing=3.79, atlas_timestamp='2025-12-04T00:52:33.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:53:02.339 [DEBUG] [Thread-128411] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:53:02.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:53:02.436 [DEBUG] [Thread-128414] [transport.py] [_log()] starting thread (client mode): 0xa51d25c0
2025-12-04T02:53:02.436 [DEBUG] [Thread-128414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:53:02.451 [DEBUG] [Thread-128414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:53:02.451 [INFO] [Thread-128414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:53:02.458 [DEBUG] [Thread-128414] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:53:02.458 [DEBUG] [Thread-128414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:53:02.458 [DEBUG] [Thread-128414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:53:02.458 [DEBUG] [Thread-128414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] client lang: <none>
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] server lang: <none>
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] kex follows: False
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:53:02.459 [DEBUG] [Thread-128414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:53:02.460 [DEBUG] [Thread-128414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:53:02.460 [DEBUG] [Thread-128414] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:53:02.460 [DEBUG] [Thread-128414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:53:02.460 [DEBUG] [Thread-128414] [transport.py] [_log()] Compression: none
2025-12-04T02:53:02.460 [DEBUG] [Thread-128414] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:53:02.517 [DEBUG] [Thread-128414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:53:02.517 [DEBUG] [Thread-128414] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:53:02.518 [DEBUG] [Thread-128414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:53:02.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:53:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:53:02.573 [DEBUG] [Thread-128414] [transport.py] [_log()] userauth is OK
2025-12-04T02:53:02.573 [DEBUG] [Thread-128414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:53:02.573 [DEBUG] [Thread-128414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:53:02.573 [DEBUG] [Thread-128414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:53:02.574 [DEBUG] [Thread-128414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:53:02.591 [INFO] [Thread-128414] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:53:02.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:53:02.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:53:03.433 [DEBUG] [Thread-128414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:53:03.433 [DEBUG] [Thread-128414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:53:03.466 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:03.484 [DEBUG] [Thread-128414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:53:03.484 [DEBUG] [Thread-128414] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:53:03.495 [DEBUG] [Thread-128414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:53:03.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:53:03.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:53:03.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:53:03.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:53:03.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:53:03.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:53:03.542 [DEBUG] [Thread-128414] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:53:14.707 [DEBUG] [Thread-128416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:23.848 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:29.756 [DEBUG] [Thread-128417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:33.253 [DEBUG] [Thread-128418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:33.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:53:33.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:53:33.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:53:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 53, 16), 10.15, 49.69, 0.0, 17.57, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:53:34.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:53:16
2025-12-04T02:53:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:53:34.486 [DEBUG] [Thread-128419] [transport.py] [_log()] starting thread (client mode): 0xa270b250
2025-12-04T02:53:34.486 [DEBUG] [Thread-128419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:53:34.508 [DEBUG] [Thread-128419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:53:34.508 [INFO] [Thread-128419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:53:34.511 [DEBUG] [Thread-128419] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] client lang: <none>
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] server lang: <none>
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] kex follows: False
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] Compression: none
2025-12-04T02:53:34.512 [DEBUG] [Thread-128419] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:53:34.528 [DEBUG] [Thread-128419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:53:34.529 [DEBUG] [Thread-128419] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:53:34.529 [DEBUG] [Thread-128419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:53:34.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:53:34.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:53:34.531 [DEBUG] [Thread-128419] [transport.py] [_log()] userauth is OK
2025-12-04T02:53:34.531 [DEBUG] [Thread-128419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:53:34.532 [DEBUG] [Thread-128419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:53:34.532 [DEBUG] [Thread-128419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:53:34.532 [DEBUG] [Thread-128419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:53:34.553 [INFO] [Thread-128419] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:53:34.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:53:35.205 [DEBUG] [Thread-128419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:53:35.205 [DEBUG] [Thread-128419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:53:35.205 [DEBUG] [Thread-128419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:53:35.246 [DEBUG] [Thread-128419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:53:35.246 [DEBUG] [Thread-128419] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:53:35.249 [DEBUG] [Thread-128419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:53:35.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:53:35.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:53:35.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:53:35.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:53:35.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:53:35.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:53:35.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:53:35.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.036850 -999.00  +12.40  11.07     54   +3.40 1 1 1 1 1     0    0 8.65 -4.11 ZNESW 12.7 11.1 158.6 14.1 12.7 -24.7 12.5 -24.1 12.3 -22.5 12.6 -23.3
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.036850
2025-12-04T02:53:35.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:53:35.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:53:16', tmtdew=10.15, humidity=49.69, cloud=0.0, wind=17.57, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:53:17', seeing=3.03, atlas_timestamp='2025-12-04T00:53:03.840', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:53:35.274 [DEBUG] [Thread-128419] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:53:35.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:53:35.370 [DEBUG] [Thread-128422] [transport.py] [_log()] starting thread (client mode): 0xa519ba00
2025-12-04T02:53:35.371 [DEBUG] [Thread-128422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:53:35.385 [DEBUG] [Thread-128422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:53:35.385 [INFO] [Thread-128422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:53:35.393 [DEBUG] [Thread-128422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] client lang: <none>
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] server lang: <none>
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] kex follows: False
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:53:35.394 [DEBUG] [Thread-128422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:53:35.395 [DEBUG] [Thread-128422] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:53:35.395 [DEBUG] [Thread-128422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:53:35.395 [DEBUG] [Thread-128422] [transport.py] [_log()] Compression: none
2025-12-04T02:53:35.395 [DEBUG] [Thread-128422] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:53:35.449 [DEBUG] [Thread-128422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:53:35.450 [DEBUG] [Thread-128422] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:53:35.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:53:35.451 [DEBUG] [Thread-128422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:53:35.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:53:35.506 [DEBUG] [Thread-128422] [transport.py] [_log()] userauth is OK
2025-12-04T02:53:35.506 [DEBUG] [Thread-128422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:53:35.506 [DEBUG] [Thread-128422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:53:35.506 [DEBUG] [Thread-128422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:53:35.507 [DEBUG] [Thread-128422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:53:35.529 [INFO] [Thread-128422] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:53:35.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:53:35.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:53:36.369 [DEBUG] [Thread-128422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:53:36.375 [DEBUG] [Thread-128422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:53:36.417 [DEBUG] [Thread-128422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:53:36.417 [DEBUG] [Thread-128422] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:53:36.425 [DEBUG] [Thread-128422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:53:36.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:53:36.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:53:36.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:53:36.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:53:36.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:53:36.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:53:36.459 [DEBUG] [Thread-128422] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:53:44.232 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:44.789 [DEBUG] [Thread-128424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:57.482 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:57.483 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:53:59.839 [DEBUG] [Thread-128425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:04.612 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:06.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:54:06.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:54:06.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:54:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 53, 49), 10.26, 49.5, 0.0, 14.08, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:54:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:53:49
2025-12-04T02:54:07.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:54:07.427 [DEBUG] [Thread-128426] [transport.py] [_log()] starting thread (client mode): 0xa5199090
2025-12-04T02:54:07.428 [DEBUG] [Thread-128426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:54:07.447 [DEBUG] [Thread-128426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:54:07.447 [INFO] [Thread-128426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:54:07.450 [DEBUG] [Thread-128426] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] client lang: <none>
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] server lang: <none>
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] kex follows: False
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] Compression: none
2025-12-04T02:54:07.451 [DEBUG] [Thread-128426] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:54:07.470 [DEBUG] [Thread-128426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:54:07.470 [DEBUG] [Thread-128426] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:54:07.471 [DEBUG] [Thread-128426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:54:07.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:54:07.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:54:07.472 [DEBUG] [Thread-128426] [transport.py] [_log()] userauth is OK
2025-12-04T02:54:07.472 [DEBUG] [Thread-128426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:54:07.473 [DEBUG] [Thread-128426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:54:07.473 [DEBUG] [Thread-128426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:54:07.473 [DEBUG] [Thread-128426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:54:07.496 [INFO] [Thread-128426] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:54:07.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:54:08.146 [DEBUG] [Thread-128426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:54:08.146 [DEBUG] [Thread-128426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:54:08.147 [DEBUG] [Thread-128426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:54:08.188 [DEBUG] [Thread-128426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:54:08.188 [DEBUG] [Thread-128426] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:54:08.190 [DEBUG] [Thread-128426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:54:08.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:54:08.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:54:08.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:54:08.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:54:08.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:54:08.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:54:08.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:54:08.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.037197 -999.00  +12.40  11.52     53   +3.30 1 1 1 1 1     0    0 8.75 -2.02 ZNESW 12.2 11.5 156.0 17.5 12.7 -24.5 12.5 -23.9 12.3 -22.4 12.6 -23.3
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.037197
2025-12-04T02:54:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:54:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:54:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:54:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:54:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:54:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:53:49', tmtdew=10.26, humidity=49.5, cloud=0.0, wind=14.08, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:53:49', seeing=3.03, atlas_timestamp='2025-12-04T00:53:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:54:08.212 [DEBUG] [Thread-128426] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:54:08.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:54:08.312 [DEBUG] [Thread-128429] [transport.py] [_log()] starting thread (client mode): 0xa5198c40
2025-12-04T02:54:08.312 [DEBUG] [Thread-128429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:54:08.328 [DEBUG] [Thread-128429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:54:08.328 [INFO] [Thread-128429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] client lang: <none>
2025-12-04T02:54:08.336 [DEBUG] [Thread-128429] [transport.py] [_log()] server lang: <none>
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] kex follows: False
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] Compression: none
2025-12-04T02:54:08.337 [DEBUG] [Thread-128429] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:54:08.393 [DEBUG] [Thread-128429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:54:08.393 [DEBUG] [Thread-128429] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:54:08.394 [DEBUG] [Thread-128429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:54:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:54:08.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:54:08.450 [DEBUG] [Thread-128429] [transport.py] [_log()] userauth is OK
2025-12-04T02:54:08.450 [DEBUG] [Thread-128429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:54:08.450 [DEBUG] [Thread-128429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:54:08.450 [DEBUG] [Thread-128429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:54:08.450 [DEBUG] [Thread-128429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:54:08.471 [INFO] [Thread-128429] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:54:08.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:54:08.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:54:09.285 [DEBUG] [Thread-128429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:54:09.286 [DEBUG] [Thread-128429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:54:09.334 [DEBUG] [Thread-128429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:54:09.334 [DEBUG] [Thread-128429] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:54:09.345 [DEBUG] [Thread-128429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:54:09.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:54:09.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:54:09.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:54:09.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:54:09.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:54:09.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:54:09.382 [DEBUG] [Thread-128429] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:54:14.864 [DEBUG] [Thread-128431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:25.036 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:29.907 [DEBUG] [Thread-128432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:33.312 [DEBUG] [Thread-128433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:39.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:54:39.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:54:39.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:54:40.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 54, 21), 10.28, 49.45, 0.0, 14.89, 12.38, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:54:40.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:54:21
2025-12-04T02:54:40.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:54:40.402 [DEBUG] [Thread-128434] [transport.py] [_log()] starting thread (client mode): 0xa519bdc0
2025-12-04T02:54:40.402 [DEBUG] [Thread-128434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:54:40.424 [DEBUG] [Thread-128434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:54:40.424 [INFO] [Thread-128434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:54:40.427 [DEBUG] [Thread-128434] [transport.py] [_log()] client lang: <none>
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] server lang: <none>
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] kex follows: False
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] Compression: none
2025-12-04T02:54:40.428 [DEBUG] [Thread-128434] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:54:40.444 [DEBUG] [Thread-128434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:54:40.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:54:40.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] userauth is OK
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:54:40.445 [DEBUG] [Thread-128434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:54:40.460 [INFO] [Thread-128434] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:54:40.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:54:41.094 [DEBUG] [Thread-128434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:54:41.094 [DEBUG] [Thread-128434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:54:41.095 [DEBUG] [Thread-128434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:54:41.135 [DEBUG] [Thread-128434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:54:41.135 [DEBUG] [Thread-128434] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:54:41.138 [DEBUG] [Thread-128434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:54:41.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:54:41.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:54:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:54:41.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:54:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:54:41.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:54:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:54:41.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.037544 -999.00  +12.40  17.26     53   +3.30 1 1 1 1 1     0    0 8.94 0.73 ZNESW 16.6 17.3 167.8 19.0 12.7 -24.5 12.5 -23.9 12.3 -22.3 12.6 -23.2
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.037544
2025-12-04T02:54:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:54:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:54:21', tmtdew=10.28, humidity=49.45, cloud=0.0, wind=14.89, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:54:21', seeing=3.03, atlas_timestamp='2025-12-04T00:54:03.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:50:00')
2025-12-04T02:54:41.164 [DEBUG] [Thread-128434] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:54:41.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:54:41.264 [DEBUG] [Thread-128437] [transport.py] [_log()] starting thread (client mode): 0xa5199ed0
2025-12-04T02:54:41.264 [DEBUG] [Thread-128437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:54:41.279 [DEBUG] [Thread-128437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:54:41.279 [INFO] [Thread-128437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:54:41.287 [DEBUG] [Thread-128437] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:54:41.287 [DEBUG] [Thread-128437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:54:41.287 [DEBUG] [Thread-128437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:54:41.287 [DEBUG] [Thread-128437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:41.287 [DEBUG] [Thread-128437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] client lang: <none>
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] server lang: <none>
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] kex follows: False
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:54:41.288 [DEBUG] [Thread-128437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:54:41.289 [DEBUG] [Thread-128437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:54:41.289 [DEBUG] [Thread-128437] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:54:41.289 [DEBUG] [Thread-128437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:54:41.289 [DEBUG] [Thread-128437] [transport.py] [_log()] Compression: none
2025-12-04T02:54:41.289 [DEBUG] [Thread-128437] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:54:41.346 [DEBUG] [Thread-128437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:54:41.347 [DEBUG] [Thread-128437] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:54:41.347 [DEBUG] [Thread-128437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:54:41.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:54:41.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:54:41.402 [DEBUG] [Thread-128437] [transport.py] [_log()] userauth is OK
2025-12-04T02:54:41.402 [DEBUG] [Thread-128437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:54:41.402 [DEBUG] [Thread-128437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:54:41.402 [DEBUG] [Thread-128437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:54:41.402 [DEBUG] [Thread-128437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:54:41.420 [INFO] [Thread-128437] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:54:41.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:54:41.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:54:42.263 [DEBUG] [Thread-128437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:54:42.263 [DEBUG] [Thread-128437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:54:42.311 [DEBUG] [Thread-128437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:54:42.311 [DEBUG] [Thread-128437] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:54:42.320 [DEBUG] [Thread-128437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:54:42.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:54:42.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:54:42.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:54:42.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:54:42.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:54:42.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:54:42.355 [DEBUG] [Thread-128437] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:54:44.935 [DEBUG] [Thread-128439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:45.411 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:57.687 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:57.689 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:54:59.992 [DEBUG] [Thread-128440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:05.810 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:12.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:55:12.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:55:12.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:55:13.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 54, 53), 10.29, 49.39, 0.0, 12.62, 12.35, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:55:13.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:54:53
2025-12-04T02:55:13.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:55:13.346 [DEBUG] [Thread-128441] [transport.py] [_log()] starting thread (client mode): 0xa2784190
2025-12-04T02:55:13.346 [DEBUG] [Thread-128441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:55:13.365 [DEBUG] [Thread-128441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:55:13.365 [INFO] [Thread-128441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:55:13.368 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] client lang: <none>
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] server lang: <none>
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] kex follows: False
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:55:13.369 [DEBUG] [Thread-128441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:55:13.370 [DEBUG] [Thread-128441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:55:13.370 [DEBUG] [Thread-128441] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:55:13.370 [DEBUG] [Thread-128441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:55:13.370 [DEBUG] [Thread-128441] [transport.py] [_log()] Compression: none
2025-12-04T02:55:13.370 [DEBUG] [Thread-128441] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:55:13.390 [DEBUG] [Thread-128441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:55:13.391 [DEBUG] [Thread-128441] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:55:13.391 [DEBUG] [Thread-128441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:55:13.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:55:13.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:55:13.393 [DEBUG] [Thread-128441] [transport.py] [_log()] userauth is OK
2025-12-04T02:55:13.393 [DEBUG] [Thread-128441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:55:13.393 [DEBUG] [Thread-128441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:55:13.393 [DEBUG] [Thread-128441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:55:13.393 [DEBUG] [Thread-128441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:55:13.416 [INFO] [Thread-128441] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:55:13.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:55:14.127 [DEBUG] [Thread-128441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:55:14.127 [DEBUG] [Thread-128441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:55:14.127 [DEBUG] [Thread-128441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:55:14.169 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:55:14.169 [DEBUG] [Thread-128441] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:55:14.171 [DEBUG] [Thread-128441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:55:14.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:55:14.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:55:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:55:14.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:55:14.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:55:14.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:55:14.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.037891 -999.00  +12.40   9.12     53   +3.30 1 1 1 1 1     0    0 8.97 4.62 ZNESW 8.4 9.1 149.0 15.9 12.7 -24.6 12.5 -24.1 12.3 -22.4 12.6 -23.3
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.037891
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:55:14.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:55:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:55:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:55:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:54:53', tmtdew=10.29, humidity=49.39, cloud=0.0, wind=12.62, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:54:53', seeing=2.13, atlas_timestamp='2025-12-04T00:54:33.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:53:00')
2025-12-04T02:55:14.212 [DEBUG] [Thread-128441] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:55:14.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:55:14.297 [DEBUG] [Thread-128444] [transport.py] [_log()] starting thread (client mode): 0xa51d1cc0
2025-12-04T02:55:14.297 [DEBUG] [Thread-128444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:55:14.312 [DEBUG] [Thread-128444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:55:14.312 [INFO] [Thread-128444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] client lang: <none>
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] server lang: <none>
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] kex follows: False
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] Compression: none
2025-12-04T02:55:14.320 [DEBUG] [Thread-128444] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:55:14.376 [DEBUG] [Thread-128444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:55:14.377 [DEBUG] [Thread-128444] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:55:14.377 [DEBUG] [Thread-128444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:55:14.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:55:14.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:55:14.434 [DEBUG] [Thread-128444] [transport.py] [_log()] userauth is OK
2025-12-04T02:55:14.434 [DEBUG] [Thread-128444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:55:14.434 [DEBUG] [Thread-128444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:55:14.434 [DEBUG] [Thread-128444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:55:14.434 [DEBUG] [Thread-128444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:55:14.448 [INFO] [Thread-128444] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:55:14.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:55:14.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:55:15.018 [DEBUG] [Thread-128446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:15.345 [DEBUG] [Thread-128444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:55:15.345 [DEBUG] [Thread-128444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:55:15.393 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:55:15.393 [DEBUG] [Thread-128444] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:55:15.401 [DEBUG] [Thread-128444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:55:15.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:55:15.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:55:15.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:55:15.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:55:15.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:55:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:55:15.433 [DEBUG] [Thread-128444] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:55:26.211 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:30.056 [DEBUG] [Thread-128447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:33.369 [DEBUG] [Thread-128448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:45.086 [DEBUG] [Thread-128449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:55:45.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:55:45.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:55:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 55, 25), 10.27, 49.47, 0.0, 13.08, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:55:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:55:25
2025-12-04T02:55:46.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:55:46.406 [DEBUG] [Thread-128450] [transport.py] [_log()] starting thread (client mode): 0xa517ee30
2025-12-04T02:55:46.406 [DEBUG] [Thread-128450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:55:46.426 [DEBUG] [Thread-128450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:55:46.426 [INFO] [Thread-128450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] client lang: <none>
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] server lang: <none>
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] kex follows: False
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] Compression: none
2025-12-04T02:55:46.429 [DEBUG] [Thread-128450] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:55:46.446 [DEBUG] [Thread-128450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:55:46.446 [DEBUG] [Thread-128450] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:55:46.446 [DEBUG] [Thread-128450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:55:46.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:55:46.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:55:46.448 [DEBUG] [Thread-128450] [transport.py] [_log()] userauth is OK
2025-12-04T02:55:46.448 [DEBUG] [Thread-128450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:55:46.448 [DEBUG] [Thread-128450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:55:46.448 [DEBUG] [Thread-128450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:55:46.448 [DEBUG] [Thread-128450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:55:46.466 [INFO] [Thread-128450] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:55:46.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:55:46.592 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:47.098 [DEBUG] [Thread-128450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:55:47.098 [DEBUG] [Thread-128450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:55:47.098 [DEBUG] [Thread-128450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:55:47.144 [DEBUG] [Thread-128450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:55:47.144 [DEBUG] [Thread-128450] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:55:47.146 [DEBUG] [Thread-128450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:55:47.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:55:47.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:55:47.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:55:47.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:55:47.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:55:47.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:55:47.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.038586 -999.00  +12.40   9.00     54   +3.40 1 1 1 1 1     0    0 9.06 10.87 ZNESW 11.8 9.0 147.4 13.2 12.7 -24.5 12.5 -24.0 12.3 -22.3 12.6 -23.3
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:55:47.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.038586
2025-12-04T02:55:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:55:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:55:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:55:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:55:47.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:55:47.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:55:25', tmtdew=10.27, humidity=49.47, cloud=0.0, wind=13.08, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:55:25', seeing=2.68, atlas_timestamp='2025-12-04T00:55:33.830', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:53:00')
2025-12-04T02:55:47.171 [DEBUG] [Thread-128450] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:55:47.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:55:47.267 [DEBUG] [Thread-128453] [transport.py] [_log()] starting thread (client mode): 0xa517cdf0
2025-12-04T02:55:47.267 [DEBUG] [Thread-128453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:55:47.281 [DEBUG] [Thread-128453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:55:47.281 [INFO] [Thread-128453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] client lang: <none>
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] server lang: <none>
2025-12-04T02:55:47.289 [DEBUG] [Thread-128453] [transport.py] [_log()] kex follows: False
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] Compression: none
2025-12-04T02:55:47.290 [DEBUG] [Thread-128453] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:55:47.345 [DEBUG] [Thread-128453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:55:47.346 [DEBUG] [Thread-128453] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:55:47.346 [DEBUG] [Thread-128453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:55:47.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:55:47.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:55:47.405 [DEBUG] [Thread-128453] [transport.py] [_log()] userauth is OK
2025-12-04T02:55:47.405 [DEBUG] [Thread-128453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:55:47.405 [DEBUG] [Thread-128453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:55:47.405 [DEBUG] [Thread-128453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:55:47.405 [DEBUG] [Thread-128453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:55:47.424 [INFO] [Thread-128453] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:55:47.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:55:47.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:55:48.253 [DEBUG] [Thread-128453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:55:48.254 [DEBUG] [Thread-128453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:55:48.302 [DEBUG] [Thread-128453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:55:48.302 [DEBUG] [Thread-128453] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:55:48.311 [DEBUG] [Thread-128453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:55:48.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:55:48.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:55:48.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:55:48.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:55:48.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:55:48.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:55:48.345 [DEBUG] [Thread-128453] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:55:57.888 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:55:57.888 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:00.116 [DEBUG] [Thread-128455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:06.986 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:15.158 [DEBUG] [Thread-128456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:18.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:56:18.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:56:18.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:56:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 55, 57), 10.27, 49.62, 0.0, 16.48, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:56:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:55:57
2025-12-04T02:56:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:56:19.308 [DEBUG] [Thread-128457] [transport.py] [_log()] starting thread (client mode): 0xa270a7d0
2025-12-04T02:56:19.308 [DEBUG] [Thread-128457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:56:19.328 [DEBUG] [Thread-128457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:56:19.329 [INFO] [Thread-128457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] client lang: <none>
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] server lang: <none>
2025-12-04T02:56:19.330 [DEBUG] [Thread-128457] [transport.py] [_log()] kex follows: False
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] Compression: none
2025-12-04T02:56:19.331 [DEBUG] [Thread-128457] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:56:19.340 [DEBUG] [Thread-128457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:56:19.340 [DEBUG] [Thread-128457] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:56:19.341 [DEBUG] [Thread-128457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:56:19.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:56:19.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:56:19.342 [DEBUG] [Thread-128457] [transport.py] [_log()] userauth is OK
2025-12-04T02:56:19.343 [DEBUG] [Thread-128457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:56:19.343 [DEBUG] [Thread-128457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:56:19.343 [DEBUG] [Thread-128457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:56:19.343 [DEBUG] [Thread-128457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:56:19.361 [INFO] [Thread-128457] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:56:19.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:56:20.010 [DEBUG] [Thread-128457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:56:20.010 [DEBUG] [Thread-128457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:56:20.010 [DEBUG] [Thread-128457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:56:20.051 [DEBUG] [Thread-128457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:56:20.051 [DEBUG] [Thread-128457] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:56:20.054 [DEBUG] [Thread-128457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:56:20.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:56:20.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:56:20.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:56:20.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:56:20.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:56:20.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:56:20.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:56:20.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:56:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:56:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.038933 -999.00  +12.40  11.39     53   +3.30 1 1 1 1 1     0    0 9.00 14.36 ZNESW 8.9 11.4 146.4 16.6 12.7 -24.5 12.5 -24.0 12.3 -22.3 12.6 -23.3
2025-12-04T02:56:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:56:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:56:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.038933
2025-12-04T02:56:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:56:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:56:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:56:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:56:20.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:56:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:55:57', tmtdew=10.27, humidity=49.62, cloud=0.0, wind=16.48, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:55:57', seeing=2.07, atlas_timestamp='2025-12-04T00:56:03.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:53:00')
2025-12-04T02:56:20.082 [DEBUG] [Thread-128457] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:56:20.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:56:20.179 [DEBUG] [Thread-128460] [transport.py] [_log()] starting thread (client mode): 0xa2787c10
2025-12-04T02:56:20.179 [DEBUG] [Thread-128460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:56:20.193 [DEBUG] [Thread-128460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:56:20.193 [INFO] [Thread-128460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] client lang: <none>
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] server lang: <none>
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] kex follows: False
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:56:20.201 [DEBUG] [Thread-128460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:56:20.202 [DEBUG] [Thread-128460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:56:20.202 [DEBUG] [Thread-128460] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:56:20.202 [DEBUG] [Thread-128460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:56:20.202 [DEBUG] [Thread-128460] [transport.py] [_log()] Compression: none
2025-12-04T02:56:20.202 [DEBUG] [Thread-128460] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:56:20.257 [DEBUG] [Thread-128460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:56:20.258 [DEBUG] [Thread-128460] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:56:20.258 [DEBUG] [Thread-128460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:56:20.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:56:20.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:56:20.314 [DEBUG] [Thread-128460] [transport.py] [_log()] userauth is OK
2025-12-04T02:56:20.314 [DEBUG] [Thread-128460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:56:20.314 [DEBUG] [Thread-128460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:56:20.315 [DEBUG] [Thread-128460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:56:20.315 [DEBUG] [Thread-128460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:56:20.334 [INFO] [Thread-128460] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:56:20.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:56:20.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:56:21.153 [DEBUG] [Thread-128460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:56:21.153 [DEBUG] [Thread-128460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:56:21.201 [DEBUG] [Thread-128460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:56:21.201 [DEBUG] [Thread-128460] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:56:21.210 [DEBUG] [Thread-128460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:56:21.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:56:21.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:56:21.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:56:21.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:56:21.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:56:21.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:56:21.250 [DEBUG] [Thread-128460] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:56:27.392 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:30.185 [DEBUG] [Thread-128462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:33.421 [DEBUG] [Thread-128463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:45.219 [DEBUG] [Thread-128464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:47.821 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:56:51.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:56:51.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:56:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 56, 29), 10.34, 49.37, 0.0, 16.64, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:56:51.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:56:29
2025-12-04T02:56:52.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:56:52.223 [DEBUG] [Thread-128465] [transport.py] [_log()] starting thread (client mode): 0xa51d2d70
2025-12-04T02:56:52.223 [DEBUG] [Thread-128465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:56:52.244 [DEBUG] [Thread-128465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:56:52.244 [INFO] [Thread-128465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:56:52.248 [DEBUG] [Thread-128465] [transport.py] [_log()] client lang: <none>
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] server lang: <none>
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] kex follows: False
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] Compression: none
2025-12-04T02:56:52.249 [DEBUG] [Thread-128465] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:56:52.270 [DEBUG] [Thread-128465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:56:52.271 [DEBUG] [Thread-128465] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:56:52.271 [DEBUG] [Thread-128465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:56:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:56:52.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:56:52.276 [DEBUG] [Thread-128465] [transport.py] [_log()] userauth is OK
2025-12-04T02:56:52.276 [DEBUG] [Thread-128465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:56:52.276 [DEBUG] [Thread-128465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:56:52.276 [DEBUG] [Thread-128465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:56:52.276 [DEBUG] [Thread-128465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:56:52.300 [INFO] [Thread-128465] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:56:52.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:56:52.877 [DEBUG] [Thread-128465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:56:52.877 [DEBUG] [Thread-128465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:56:52.878 [DEBUG] [Thread-128465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:56:52.918 [DEBUG] [Thread-128465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:56:52.918 [DEBUG] [Thread-128465] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:56:52.921 [DEBUG] [Thread-128465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:56:52.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:56:52.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:56:52.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:56:52.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:56:52.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:56:52.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:56:52.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.039280 -999.00  +12.40  11.43     53   +3.30 1 1 1 1 1     0    0 9.34 17.70 ZNESW 14.2 11.4 146.4 14.7 12.7 -24.4 12.6 -24.0 12.3 -22.4 12.6 -23.3
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:56:52.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.039280
2025-12-04T02:56:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:56:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:56:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:56:52.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:56:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:56:52.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:56:29', tmtdew=10.34, humidity=49.37, cloud=0.0, wind=16.64, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:56:29', seeing=1.81, atlas_timestamp='2025-12-04T00:56:33.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:53:00')
2025-12-04T02:56:52.951 [DEBUG] [Thread-128465] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:56:53.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:56:53.048 [DEBUG] [Thread-128468] [transport.py] [_log()] starting thread (client mode): 0xa27846a0
2025-12-04T02:56:53.048 [DEBUG] [Thread-128468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:56:53.064 [DEBUG] [Thread-128468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:56:53.064 [INFO] [Thread-128468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] client lang: <none>
2025-12-04T02:56:53.074 [DEBUG] [Thread-128468] [transport.py] [_log()] server lang: <none>
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] kex follows: False
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] Compression: none
2025-12-04T02:56:53.075 [DEBUG] [Thread-128468] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:56:53.130 [DEBUG] [Thread-128468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:56:53.131 [DEBUG] [Thread-128468] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:56:53.131 [DEBUG] [Thread-128468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:56:53.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:56:53.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:56:53.187 [DEBUG] [Thread-128468] [transport.py] [_log()] userauth is OK
2025-12-04T02:56:53.187 [DEBUG] [Thread-128468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:56:53.188 [DEBUG] [Thread-128468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:56:53.188 [DEBUG] [Thread-128468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:56:53.188 [DEBUG] [Thread-128468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:56:53.208 [INFO] [Thread-128468] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:56:53.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:56:53.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:56:54.075 [DEBUG] [Thread-128468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:56:54.075 [DEBUG] [Thread-128468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:56:54.123 [DEBUG] [Thread-128468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:56:54.123 [DEBUG] [Thread-128468] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:56:54.131 [DEBUG] [Thread-128468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:56:54.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:56:54.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:56:54.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:56:54.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:56:54.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:56:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:56:54.165 [DEBUG] [Thread-128468] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:56:58.091 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:56:58.092 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:00.250 [DEBUG] [Thread-128470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:08.193 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:15.292 [DEBUG] [Thread-128471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:24.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:57:24.169 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:57:24.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:57:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 57, 1), 10.36, 49.17, 0.0, 15.23, 12.37, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:57:24.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:57:01
2025-12-04T02:57:24.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:57:25.122 [DEBUG] [Thread-128472] [transport.py] [_log()] starting thread (client mode): 0xa2785e10
2025-12-04T02:57:25.122 [DEBUG] [Thread-128472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:57:25.142 [DEBUG] [Thread-128472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:57:25.142 [INFO] [Thread-128472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:57:25.145 [DEBUG] [Thread-128472] [transport.py] [_log()] client lang: <none>
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] server lang: <none>
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] kex follows: False
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] Compression: none
2025-12-04T02:57:25.146 [DEBUG] [Thread-128472] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:57:25.164 [DEBUG] [Thread-128472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:57:25.165 [DEBUG] [Thread-128472] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:57:25.165 [DEBUG] [Thread-128472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:57:25.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:57:25.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:57:25.167 [DEBUG] [Thread-128472] [transport.py] [_log()] userauth is OK
2025-12-04T02:57:25.167 [DEBUG] [Thread-128472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:57:25.167 [DEBUG] [Thread-128472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:57:25.167 [DEBUG] [Thread-128472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:57:25.168 [DEBUG] [Thread-128472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:57:25.191 [INFO] [Thread-128472] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:57:25.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:57:25.763 [DEBUG] [Thread-128472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:57:25.763 [DEBUG] [Thread-128472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:57:25.764 [DEBUG] [Thread-128472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:57:25.805 [DEBUG] [Thread-128472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:57:25.805 [DEBUG] [Thread-128472] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:57:25.807 [DEBUG] [Thread-128472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:57:25.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:57:25.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:57:25.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:57:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:57:25.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:57:25.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:57:25.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:57:25.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:57:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:57:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.039627 -999.00  +12.50   8.23     53   +3.20 1 1 1 1 1     0    0 9.30 20.88 ZNESW 11.2 8.2 160.0 17.0 12.7 -24.6 12.6 -24.1 12.3 -22.4 12.6 -23.2
2025-12-04T02:57:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:57:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:57:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.039627
2025-12-04T02:57:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:57:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:57:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:57:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:57:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:57:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:57:01', tmtdew=10.36, humidity=49.17, cloud=0.0, wind=15.23, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:57:01', seeing=1.68, atlas_timestamp='2025-12-04T00:57:03.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.043250000000000455, -0.003750000000000142, -0.03750000000000142, -0.007500000000000284, 0.011250000000000426, 0.007999999999999119, -0.004249999999998977, 0.015499999999999403, -0.022999999999999687, -0.010249999999999204, 0.0129999999999999, 0.012000000000000455, 0.06225000000000058, -0.08900000000000219, -0.011000000000001009, 0.0337499999999995, 0.08300000000000018, -0.0730000000000004, 0.013749999999998153, 0.05749999999999744, 0.05174999999999841, -0.0337499999999995, 0.02725000000000044, 0.02999999999999936, 0.061500000000000554, -0.036249999999999005, 0.059499999999999886, 0.136000000000001, 0.03900000000000148, -0.09899999999999842, -0.01899999999999835, 0.09474999999999945], zp_timestamp='2025-12-04T00:53:00')
2025-12-04T02:57:25.830 [DEBUG] [Thread-128472] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:57:25.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:57:25.927 [DEBUG] [Thread-128475] [transport.py] [_log()] starting thread (client mode): 0xa51d0100
2025-12-04T02:57:25.927 [DEBUG] [Thread-128475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:57:25.943 [DEBUG] [Thread-128475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:57:25.943 [INFO] [Thread-128475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:25.951 [DEBUG] [Thread-128475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] client lang: <none>
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] server lang: <none>
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] kex follows: False
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:57:25.952 [DEBUG] [Thread-128475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:57:25.953 [DEBUG] [Thread-128475] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:57:25.953 [DEBUG] [Thread-128475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:57:25.953 [DEBUG] [Thread-128475] [transport.py] [_log()] Compression: none
2025-12-04T02:57:25.953 [DEBUG] [Thread-128475] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:57:26.010 [DEBUG] [Thread-128475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:57:26.011 [DEBUG] [Thread-128475] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:57:26.011 [DEBUG] [Thread-128475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:57:26.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:57:26.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:57:26.066 [DEBUG] [Thread-128475] [transport.py] [_log()] userauth is OK
2025-12-04T02:57:26.066 [DEBUG] [Thread-128475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:57:26.066 [DEBUG] [Thread-128475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:57:26.067 [DEBUG] [Thread-128475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:57:26.067 [DEBUG] [Thread-128475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:57:26.085 [INFO] [Thread-128475] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:57:26.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:57:26.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:57:26.947 [DEBUG] [Thread-128475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:57:26.947 [DEBUG] [Thread-128475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:57:26.995 [DEBUG] [Thread-128475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:57:26.995 [DEBUG] [Thread-128475] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:57:27.004 [DEBUG] [Thread-128475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:57:27.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:57:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:57:27.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:57:27.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:57:27.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:57:27.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:57:27.038 [DEBUG] [Thread-128475] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:57:28.572 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:30.322 [DEBUG] [Thread-128477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:33.505 [DEBUG] [Thread-128478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:45.371 [DEBUG] [Thread-128479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:48.955 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:57.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:57:57.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:57:57.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:57:57.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 57, 33), 10.36, 49.16, 0.0, 15.6, 12.38, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:57:57.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:57:33
2025-12-04T02:57:57.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:57:58.006 [DEBUG] [Thread-128480] [transport.py] [_log()] starting thread (client mode): 0xa519b940
2025-12-04T02:57:58.006 [DEBUG] [Thread-128480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:57:58.027 [DEBUG] [Thread-128480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:57:58.027 [INFO] [Thread-128480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:57:58.030 [DEBUG] [Thread-128480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] client lang: <none>
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] server lang: <none>
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] kex follows: False
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] Compression: none
2025-12-04T02:57:58.031 [DEBUG] [Thread-128480] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:57:58.047 [DEBUG] [Thread-128480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:57:58.048 [DEBUG] [Thread-128480] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:57:58.048 [DEBUG] [Thread-128480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:57:58.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:57:58.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:57:58.050 [DEBUG] [Thread-128480] [transport.py] [_log()] userauth is OK
2025-12-04T02:57:58.050 [DEBUG] [Thread-128480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:57:58.050 [DEBUG] [Thread-128480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:57:58.050 [DEBUG] [Thread-128480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:57:58.051 [DEBUG] [Thread-128480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:57:58.083 [INFO] [Thread-128480] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:57:58.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:57:58.292 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:58.293 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:57:58.878 [DEBUG] [Thread-128480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:57:58.878 [DEBUG] [Thread-128480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:57:58.879 [DEBUG] [Thread-128480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:57:58.920 [DEBUG] [Thread-128480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:57:58.920 [DEBUG] [Thread-128480] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:57:58.923 [DEBUG] [Thread-128480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:57:58.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:57:58.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:57:58.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:57:58.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:57:58.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:57:58.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:57:58.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:57:58.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.039627 -999.00  +12.50   8.23     53   +3.20 1 1 1 1 1     0    0 9.30 20.88 ZNESW 11.2 8.2 160.0 17.0 12.7 -24.6 12.6 -24.1 12.3 -22.4 12.6 -23.2
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.039627
2025-12-04T02:57:58.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:57:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:57:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:57:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:57:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:57:58.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:57:33', tmtdew=10.36, humidity=49.16, cloud=0.0, wind=15.6, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:57:33', seeing=1.36, atlas_timestamp='2025-12-04T00:57:03.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T02:57:58.949 [DEBUG] [Thread-128480] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:57:59.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:57:59.045 [DEBUG] [Thread-128483] [transport.py] [_log()] starting thread (client mode): 0xa2708b80
2025-12-04T02:57:59.045 [DEBUG] [Thread-128483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:57:59.060 [DEBUG] [Thread-128483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:57:59.060 [INFO] [Thread-128483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:57:59.068 [DEBUG] [Thread-128483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] client lang: <none>
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] server lang: <none>
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] kex follows: False
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] Compression: none
2025-12-04T02:57:59.069 [DEBUG] [Thread-128483] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:57:59.125 [DEBUG] [Thread-128483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:57:59.126 [DEBUG] [Thread-128483] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:57:59.126 [DEBUG] [Thread-128483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:57:59.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:57:59.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:57:59.182 [DEBUG] [Thread-128483] [transport.py] [_log()] userauth is OK
2025-12-04T02:57:59.182 [DEBUG] [Thread-128483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:57:59.182 [DEBUG] [Thread-128483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:57:59.183 [DEBUG] [Thread-128483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:57:59.183 [DEBUG] [Thread-128483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:57:59.202 [INFO] [Thread-128483] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:57:59.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:57:59.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:58:00.034 [DEBUG] [Thread-128483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:58:00.034 [DEBUG] [Thread-128483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:58:00.082 [DEBUG] [Thread-128483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:58:00.082 [DEBUG] [Thread-128483] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:58:00.091 [DEBUG] [Thread-128483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:58:00.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:58:00.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:58:00.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:58:00.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:58:00.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:58:00.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:58:00.125 [DEBUG] [Thread-128483] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:58:00.398 [DEBUG] [Thread-128485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:09.401 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:15.452 [DEBUG] [Thread-128486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:29.871 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:30.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:58:30.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:58:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:58:30.482 [DEBUG] [Thread-128487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 58, 5), 10.37, 49.11, 0.0, 14.65, 12.35, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:58:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:58:05
2025-12-04T02:58:30.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:58:31.142 [DEBUG] [Thread-128488] [transport.py] [_log()] starting thread (client mode): 0xa270bc10
2025-12-04T02:58:31.143 [DEBUG] [Thread-128488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:58:31.163 [DEBUG] [Thread-128488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:58:31.164 [INFO] [Thread-128488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] client lang: <none>
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] server lang: <none>
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] kex follows: False
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:58:31.167 [DEBUG] [Thread-128488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:58:31.168 [DEBUG] [Thread-128488] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:58:31.168 [DEBUG] [Thread-128488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:58:31.168 [DEBUG] [Thread-128488] [transport.py] [_log()] Compression: none
2025-12-04T02:58:31.168 [DEBUG] [Thread-128488] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:58:31.182 [DEBUG] [Thread-128488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:58:31.182 [DEBUG] [Thread-128488] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:58:31.182 [DEBUG] [Thread-128488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:58:31.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:58:31.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:58:31.183 [DEBUG] [Thread-128488] [transport.py] [_log()] userauth is OK
2025-12-04T02:58:31.183 [DEBUG] [Thread-128488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:58:31.183 [DEBUG] [Thread-128488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:58:31.183 [DEBUG] [Thread-128488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:58:31.183 [DEBUG] [Thread-128488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:58:31.192 [INFO] [Thread-128488] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:58:31.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:58:31.846 [DEBUG] [Thread-128488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:58:31.846 [DEBUG] [Thread-128488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:58:31.846 [DEBUG] [Thread-128488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:58:31.886 [DEBUG] [Thread-128488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:58:31.887 [DEBUG] [Thread-128488] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:58:31.889 [DEBUG] [Thread-128488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:58:31.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:58:31.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:58:31.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:58:31.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:58:31.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:58:31.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:58:31.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.039974 -999.00  +12.50  11.10     53   +3.30 1 1 1 1 1     0    0 9.58 24.76 ZNESW 11.6 11.1 161.2 14.1 12.7 -24.6 12.6 -24.1 12.3 -22.4 12.6 -23.4
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.039974
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:58:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:58:31.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:58:31.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:58:05', tmtdew=10.37, humidity=49.11, cloud=0.0, wind=14.65, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:58:05', seeing=1.36, atlas_timestamp='2025-12-04T00:57:33.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T02:58:31.907 [DEBUG] [Thread-128488] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:58:31.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:58:31.993 [DEBUG] [Thread-128491] [transport.py] [_log()] starting thread (client mode): 0xa271c4c0
2025-12-04T02:58:31.993 [DEBUG] [Thread-128491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:58:32.012 [DEBUG] [Thread-128491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:58:32.012 [INFO] [Thread-128491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] client lang: <none>
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] server lang: <none>
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] kex follows: False
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] Compression: none
2025-12-04T02:58:32.020 [DEBUG] [Thread-128491] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:58:32.076 [DEBUG] [Thread-128491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:58:32.077 [DEBUG] [Thread-128491] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:58:32.077 [DEBUG] [Thread-128491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:58:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:58:32.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:58:32.134 [DEBUG] [Thread-128491] [transport.py] [_log()] userauth is OK
2025-12-04T02:58:32.134 [DEBUG] [Thread-128491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:58:32.134 [DEBUG] [Thread-128491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:58:32.134 [DEBUG] [Thread-128491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:58:32.134 [DEBUG] [Thread-128491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:58:32.152 [INFO] [Thread-128491] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:58:32.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:58:32.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:58:32.991 [DEBUG] [Thread-128491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:58:32.992 [DEBUG] [Thread-128491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:58:33.039 [DEBUG] [Thread-128491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:58:33.039 [DEBUG] [Thread-128491] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:58:33.048 [DEBUG] [Thread-128491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:58:33.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:58:33.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:58:33.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:58:33.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:58:33.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:58:33.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:58:33.084 [DEBUG] [Thread-128491] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:58:33.564 [DEBUG] [Thread-128493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:45.508 [DEBUG] [Thread-128494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:50.375 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:58.494 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:58:58.496 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:00.554 [DEBUG] [Thread-128495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:03.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:59:03.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:59:03.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:59:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 58, 37), 10.48, 48.59, 0.0, 13.18, 12.33, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:59:03.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:58:37
2025-12-04T02:59:03.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:59:04.062 [DEBUG] [Thread-128496] [transport.py] [_log()] starting thread (client mode): 0xa271d4e0
2025-12-04T02:59:04.062 [DEBUG] [Thread-128496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:59:04.082 [DEBUG] [Thread-128496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:59:04.082 [INFO] [Thread-128496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] client lang: <none>
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] server lang: <none>
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] kex follows: False
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] Compression: none
2025-12-04T02:59:04.085 [DEBUG] [Thread-128496] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:59:04.107 [DEBUG] [Thread-128496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:59:04.107 [DEBUG] [Thread-128496] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:59:04.108 [DEBUG] [Thread-128496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:59:04.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:59:04.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:59:04.109 [DEBUG] [Thread-128496] [transport.py] [_log()] userauth is OK
2025-12-04T02:59:04.110 [DEBUG] [Thread-128496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:59:04.110 [DEBUG] [Thread-128496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:59:04.110 [DEBUG] [Thread-128496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:59:04.110 [DEBUG] [Thread-128496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:59:04.133 [INFO] [Thread-128496] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:59:04.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:59:04.943 [DEBUG] [Thread-128496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:59:04.943 [DEBUG] [Thread-128496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:59:04.944 [DEBUG] [Thread-128496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:59:04.985 [DEBUG] [Thread-128496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:59:04.985 [DEBUG] [Thread-128496] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:59:04.988 [DEBUG] [Thread-128496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:59:04.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:59:04.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:59:05.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:59:05.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:59:05.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:59:05.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:59:05.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:59:05.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.040322 -999.00  +12.50  10.68     53   +3.30 1 1 1 1 1     0    0 9.66 27.26 ZNESW 11.3 10.7 164.4 14.4 12.7 -24.6 12.6 -24.0 12.3 -22.4 12.7 -23.3
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.040322
2025-12-04T02:59:05.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:59:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:59:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:59:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:59:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:59:05.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:58:37', tmtdew=10.48, humidity=48.59, cloud=0.0, wind=13.18, temperature=12.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:58:37', seeing=1.28, atlas_timestamp='2025-12-04T00:58:03.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T02:59:05.011 [DEBUG] [Thread-128496] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:59:05.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:59:05.109 [DEBUG] [Thread-128499] [transport.py] [_log()] starting thread (client mode): 0xa271d120
2025-12-04T02:59:05.109 [DEBUG] [Thread-128499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:59:05.125 [DEBUG] [Thread-128499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:59:05.125 [INFO] [Thread-128499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:59:05.132 [DEBUG] [Thread-128499] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:59:05.132 [DEBUG] [Thread-128499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:59:05.132 [DEBUG] [Thread-128499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:59:05.132 [DEBUG] [Thread-128499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] client lang: <none>
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] server lang: <none>
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] kex follows: False
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] Compression: none
2025-12-04T02:59:05.133 [DEBUG] [Thread-128499] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:59:05.189 [DEBUG] [Thread-128499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:59:05.189 [DEBUG] [Thread-128499] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:59:05.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:59:05.190 [DEBUG] [Thread-128499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:59:05.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:59:05.246 [DEBUG] [Thread-128499] [transport.py] [_log()] userauth is OK
2025-12-04T02:59:05.246 [DEBUG] [Thread-128499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:59:05.246 [DEBUG] [Thread-128499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:59:05.246 [DEBUG] [Thread-128499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:59:05.246 [DEBUG] [Thread-128499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:59:05.260 [INFO] [Thread-128499] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:59:05.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:59:05.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:59:06.135 [DEBUG] [Thread-128499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:59:06.135 [DEBUG] [Thread-128499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:59:06.182 [DEBUG] [Thread-128499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:59:06.182 [DEBUG] [Thread-128499] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:59:06.191 [DEBUG] [Thread-128499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:59:06.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:59:06.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:59:06.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:59:06.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:59:06.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:59:06.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:59:06.222 [DEBUG] [Thread-128499] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:59:10.831 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:15.582 [DEBUG] [Thread-128501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:30.627 [DEBUG] [Thread-128502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:31.276 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:33.641 [DEBUG] [Thread-128503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:36.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T02:59:36.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T02:59:36.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T02:59:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 59, 9), 10.44, 48.74, 0.0, 13.23, 12.38, 0, 0, 0, 2, 0, 0),)
2025-12-04T02:59:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:59:09
2025-12-04T02:59:37.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T02:59:37.200 [DEBUG] [Thread-128504] [transport.py] [_log()] starting thread (client mode): 0xa271cca0
2025-12-04T02:59:37.200 [DEBUG] [Thread-128504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:59:37.220 [DEBUG] [Thread-128504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T02:59:37.220 [INFO] [Thread-128504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T02:59:37.223 [DEBUG] [Thread-128504] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] client lang: <none>
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] server lang: <none>
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] kex follows: False
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:59:37.224 [DEBUG] [Thread-128504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:59:37.225 [DEBUG] [Thread-128504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:59:37.225 [DEBUG] [Thread-128504] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:59:37.225 [DEBUG] [Thread-128504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:59:37.225 [DEBUG] [Thread-128504] [transport.py] [_log()] Compression: none
2025-12-04T02:59:37.225 [DEBUG] [Thread-128504] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:59:37.245 [DEBUG] [Thread-128504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:59:37.245 [DEBUG] [Thread-128504] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:59:37.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T02:59:37.247 [DEBUG] [Thread-128504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T02:59:37.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:59:37.249 [DEBUG] [Thread-128504] [transport.py] [_log()] userauth is OK
2025-12-04T02:59:37.249 [DEBUG] [Thread-128504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:59:37.249 [DEBUG] [Thread-128504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:59:37.249 [DEBUG] [Thread-128504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T02:59:37.249 [DEBUG] [Thread-128504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:59:37.270 [INFO] [Thread-128504] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:59:37.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:59:37.926 [DEBUG] [Thread-128504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:59:37.926 [DEBUG] [Thread-128504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:59:37.926 [DEBUG] [Thread-128504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T02:59:37.967 [DEBUG] [Thread-128504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:59:37.967 [DEBUG] [Thread-128504] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:59:37.970 [DEBUG] [Thread-128504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:59:37.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:59:37.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T02:59:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T02:59:37.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T02:59:37.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:59:37.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T02:59:37.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:59:37.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:59:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T02:59:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.041016 -999.00  +12.50  10.59     53   +3.30 1 1 1 1 1     0    0 9.94 32.84 ZNESW 11.5 10.6 149.2 13.5 12.7 -24.6 12.5 -24.1 12.3 -22.4 12.7 -23.4
2025-12-04T02:59:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T02:59:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T02:59:37.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.041016
2025-12-04T02:59:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T02:59:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T02:59:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T02:59:37.993 [DEBUG] [Thread-128504] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:59:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T02:59:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T02:59:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:59:09', tmtdew=10.44, humidity=48.74, cloud=0.0, wind=13.23, temperature=12.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:59:09', seeing=1.68, atlas_timestamp='2025-12-04T00:59:03.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T02:59:38.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T02:59:38.089 [DEBUG] [Thread-128507] [transport.py] [_log()] starting thread (client mode): 0xa271cb50
2025-12-04T02:59:38.090 [DEBUG] [Thread-128507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T02:59:38.105 [DEBUG] [Thread-128507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T02:59:38.105 [INFO] [Thread-128507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:38.113 [DEBUG] [Thread-128507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] client lang: <none>
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] server lang: <none>
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] kex follows: False
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T02:59:38.114 [DEBUG] [Thread-128507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T02:59:38.115 [DEBUG] [Thread-128507] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T02:59:38.115 [DEBUG] [Thread-128507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T02:59:38.115 [DEBUG] [Thread-128507] [transport.py] [_log()] Compression: none
2025-12-04T02:59:38.115 [DEBUG] [Thread-128507] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T02:59:38.170 [DEBUG] [Thread-128507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T02:59:38.171 [DEBUG] [Thread-128507] [transport.py] [_log()] Switch to new keys ...
2025-12-04T02:59:38.171 [DEBUG] [Thread-128507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T02:59:38.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T02:59:38.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T02:59:38.226 [DEBUG] [Thread-128507] [transport.py] [_log()] userauth is OK
2025-12-04T02:59:38.227 [DEBUG] [Thread-128507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T02:59:38.227 [DEBUG] [Thread-128507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T02:59:38.227 [DEBUG] [Thread-128507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T02:59:38.227 [DEBUG] [Thread-128507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T02:59:38.247 [INFO] [Thread-128507] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T02:59:38.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T02:59:38.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T02:59:39.087 [DEBUG] [Thread-128507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T02:59:39.087 [DEBUG] [Thread-128507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T02:59:39.136 [DEBUG] [Thread-128507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T02:59:39.136 [DEBUG] [Thread-128507] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T02:59:39.145 [DEBUG] [Thread-128507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T02:59:39.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T02:59:39.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T02:59:39.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T02:59:39.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T02:59:39.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T02:59:39.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T02:59:39.180 [DEBUG] [Thread-128507] [transport.py] [_log()] EOF in transport thread
2025-12-04T02:59:45.654 [DEBUG] [Thread-128509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:51.650 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:58.696 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T02:59:58.697 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:00.689 [DEBUG] [Thread-128510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:09.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:00:09.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:00:09.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:00:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 2, 59, 41), 10.4, 49.35, 0.0, 14.59, 12.37, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:00:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 02:59:41
2025-12-04T03:00:10.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:00:10.154 [DEBUG] [Thread-128511] [transport.py] [_log()] starting thread (client mode): 0xa271ee60
2025-12-04T03:00:10.154 [DEBUG] [Thread-128511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:00:10.176 [DEBUG] [Thread-128511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:00:10.176 [INFO] [Thread-128511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:10.180 [DEBUG] [Thread-128511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] client lang: <none>
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] server lang: <none>
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] kex follows: False
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:00:10.181 [DEBUG] [Thread-128511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:00:10.182 [DEBUG] [Thread-128511] [transport.py] [_log()] Compression: none
2025-12-04T03:00:10.182 [DEBUG] [Thread-128511] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:00:10.199 [DEBUG] [Thread-128511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:00:10.200 [DEBUG] [Thread-128511] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:00:10.200 [DEBUG] [Thread-128511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:00:10.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:00:10.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:00:10.202 [DEBUG] [Thread-128511] [transport.py] [_log()] userauth is OK
2025-12-04T03:00:10.202 [DEBUG] [Thread-128511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:00:10.202 [DEBUG] [Thread-128511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:00:10.203 [DEBUG] [Thread-128511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:00:10.203 [DEBUG] [Thread-128511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:00:10.226 [INFO] [Thread-128511] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:00:10.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:00:11.216 [DEBUG] [Thread-128511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:00:11.216 [DEBUG] [Thread-128511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:00:11.217 [DEBUG] [Thread-128511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:00:11.257 [DEBUG] [Thread-128511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:00:11.257 [DEBUG] [Thread-128511] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:00:11.260 [DEBUG] [Thread-128511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:00:11.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:00:11.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:00:11.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:00:11.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:00:11.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:00:11.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:00:11.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:00:11.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.041363 -999.00  +12.40   7.92     53   +3.30 1 1 1 1 1     0    0 9.83 33.77 ZNESW 10.1 7.9 148.4 12.1 12.7 -24.5 12.6 -24.0 12.3 -22.5 12.7 -23.3
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.041363
2025-12-04T03:00:11.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:00:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:00:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:00:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:00:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:00:11.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T02:59:41', tmtdew=10.4, humidity=49.35, cloud=0.0, wind=14.59, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T02:59:41', seeing=1.8, atlas_timestamp='2025-12-04T00:59:33.763', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T03:00:11.288 [DEBUG] [Thread-128511] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:00:11.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:00:11.384 [DEBUG] [Thread-128514] [transport.py] [_log()] starting thread (client mode): 0xa517ec50
2025-12-04T03:00:11.384 [DEBUG] [Thread-128514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:00:11.398 [DEBUG] [Thread-128514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:00:11.398 [INFO] [Thread-128514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:11.406 [DEBUG] [Thread-128514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] client lang: <none>
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] server lang: <none>
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] kex follows: False
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] Compression: none
2025-12-04T03:00:11.407 [DEBUG] [Thread-128514] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:00:11.462 [DEBUG] [Thread-128514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:00:11.462 [DEBUG] [Thread-128514] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:00:11.462 [DEBUG] [Thread-128514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:00:11.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:00:11.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:00:11.518 [DEBUG] [Thread-128514] [transport.py] [_log()] userauth is OK
2025-12-04T03:00:11.518 [DEBUG] [Thread-128514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:00:11.519 [DEBUG] [Thread-128514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:00:11.519 [DEBUG] [Thread-128514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:00:11.519 [DEBUG] [Thread-128514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:00:11.541 [INFO] [Thread-128514] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:00:11.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:00:11.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:00:12.040 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:12.388 [DEBUG] [Thread-128514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:00:12.388 [DEBUG] [Thread-128514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:00:12.436 [DEBUG] [Thread-128514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:00:12.436 [DEBUG] [Thread-128514] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:00:12.445 [DEBUG] [Thread-128514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:00:12.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:00:12.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:00:12.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:00:12.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:00:12.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:00:12.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:00:12.479 [DEBUG] [Thread-128514] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:00:15.713 [DEBUG] [Thread-128516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:30.747 [DEBUG] [Thread-128517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:32.470 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:33.712 [DEBUG] [Thread-128518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:42.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:00:42.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:00:42.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:00:43.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 0, 13), 10.37, 49.45, 0.0, 15.12, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:00:43.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:00:13
2025-12-04T03:00:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:00:43.445 [DEBUG] [Thread-128519] [transport.py] [_log()] starting thread (client mode): 0xa517cc10
2025-12-04T03:00:43.445 [DEBUG] [Thread-128519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:00:43.465 [DEBUG] [Thread-128519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:00:43.466 [INFO] [Thread-128519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:00:43.469 [DEBUG] [Thread-128519] [transport.py] [_log()] client lang: <none>
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] server lang: <none>
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] kex follows: False
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] Compression: none
2025-12-04T03:00:43.470 [DEBUG] [Thread-128519] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:00:43.490 [DEBUG] [Thread-128519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:00:43.491 [DEBUG] [Thread-128519] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:00:43.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:00:43.492 [DEBUG] [Thread-128519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:00:43.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:00:43.494 [DEBUG] [Thread-128519] [transport.py] [_log()] userauth is OK
2025-12-04T03:00:43.494 [DEBUG] [Thread-128519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:00:43.494 [DEBUG] [Thread-128519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:00:43.494 [DEBUG] [Thread-128519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:00:43.495 [DEBUG] [Thread-128519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:00:43.517 [INFO] [Thread-128519] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:00:43.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:00:44.142 [DEBUG] [Thread-128519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:00:44.142 [DEBUG] [Thread-128519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:00:44.142 [DEBUG] [Thread-128519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:00:44.183 [DEBUG] [Thread-128519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:00:44.183 [DEBUG] [Thread-128519] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:00:44.186 [DEBUG] [Thread-128519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:00:44.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:00:44.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:00:44.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:00:44.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:00:44.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:00:44.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:00:44.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.041710 -999.00  +12.40  13.28     53   +3.30 1 1 1 1 1     0    0 9.79 31.21 ZNESW 12.7 13.3 147.2 14.4 12.7 -24.5 12.6 -24.0 12.4 -22.4 12.7 -23.3
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:00:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.041710
2025-12-04T03:00:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:00:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:00:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:00:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:00:44.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:00:44.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:00:13', tmtdew=10.37, humidity=49.45, cloud=0.0, wind=15.12, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:00:14', seeing=1.49, atlas_timestamp='2025-12-04T01:00:03.744', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.08174999999999955, 0.014750000000001151, -0.01950000000000074, 0.024499999999999744, -0.03674999999999784, -0.009999999999999787, -0.004749999999999588, 0.0030000000000001137, -0.03500000000000014, -0.024750000000000938, -0.0039999999999995595, 0.05299999999999905, 0.013749999999999929, -0.06700000000000017, -0.010500000000000398, 0.04224999999999923, -0.0005000000000006111, -0.03700000000000081, -0.02275000000000027, 0.027499999999999858, 0.0467499999999994, -0.053249999999998465, 0.00024999999999941735, 0.05099999999999838, 0.0625, 0.015750000000000597, 0.059499999999999886, 0.0600000000000005, -0.010999999999999233, -0.041999999999999815, 0.0070000000000014495, 0.034250000000000114], zp_timestamp='2025-12-04T00:56:00')
2025-12-04T03:00:44.212 [DEBUG] [Thread-128519] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:00:44.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:00:44.315 [DEBUG] [Thread-128522] [transport.py] [_log()] starting thread (client mode): 0xa517c3d0
2025-12-04T03:00:44.316 [DEBUG] [Thread-128522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:00:44.329 [DEBUG] [Thread-128522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:00:44.330 [INFO] [Thread-128522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:00:44.337 [DEBUG] [Thread-128522] [transport.py] [_log()] client lang: <none>
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] server lang: <none>
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] kex follows: False
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] Compression: none
2025-12-04T03:00:44.338 [DEBUG] [Thread-128522] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:00:44.398 [DEBUG] [Thread-128522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:00:44.398 [DEBUG] [Thread-128522] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:00:44.399 [DEBUG] [Thread-128522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:00:44.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:00:44.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:00:44.454 [DEBUG] [Thread-128522] [transport.py] [_log()] userauth is OK
2025-12-04T03:00:44.454 [DEBUG] [Thread-128522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:00:44.455 [DEBUG] [Thread-128522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:00:44.455 [DEBUG] [Thread-128522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:00:44.455 [DEBUG] [Thread-128522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:00:44.474 [INFO] [Thread-128522] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:00:44.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:00:44.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:00:45.277 [DEBUG] [Thread-128522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:00:45.277 [DEBUG] [Thread-128522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:00:45.325 [DEBUG] [Thread-128522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:00:45.325 [DEBUG] [Thread-128522] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:00:45.333 [DEBUG] [Thread-128522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:00:45.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:00:45.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:00:45.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:00:45.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:00:45.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:00:45.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:00:45.369 [DEBUG] [Thread-128522] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:00:45.775 [DEBUG] [Thread-128524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:52.893 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:58.902 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:00:58.903 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:00.824 [DEBUG] [Thread-128525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:13.294 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:15.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:01:15.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:01:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:01:15.851 [DEBUG] [Thread-128526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:16.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 0, 45), 10.28, 49.44, 0.0, 14.33, 12.32, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:01:16.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:00:45
2025-12-04T03:01:16.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:01:16.345 [DEBUG] [Thread-128527] [transport.py] [_log()] starting thread (client mode): 0xa517d570
2025-12-04T03:01:16.345 [DEBUG] [Thread-128527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:01:16.365 [DEBUG] [Thread-128527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:01:16.365 [INFO] [Thread-128527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] client lang: <none>
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] server lang: <none>
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] kex follows: False
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:01:16.368 [DEBUG] [Thread-128527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:01:16.369 [DEBUG] [Thread-128527] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:01:16.369 [DEBUG] [Thread-128527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:01:16.369 [DEBUG] [Thread-128527] [transport.py] [_log()] Compression: none
2025-12-04T03:01:16.369 [DEBUG] [Thread-128527] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:01:16.386 [DEBUG] [Thread-128527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:01:16.387 [DEBUG] [Thread-128527] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:01:16.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:01:16.388 [DEBUG] [Thread-128527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:01:16.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:01:16.390 [DEBUG] [Thread-128527] [transport.py] [_log()] userauth is OK
2025-12-04T03:01:16.390 [DEBUG] [Thread-128527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:01:16.390 [DEBUG] [Thread-128527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:01:16.390 [DEBUG] [Thread-128527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:01:16.390 [DEBUG] [Thread-128527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:01:16.414 [INFO] [Thread-128527] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:01:16.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:01:17.043 [DEBUG] [Thread-128527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:01:17.043 [DEBUG] [Thread-128527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:01:17.044 [DEBUG] [Thread-128527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:01:17.084 [DEBUG] [Thread-128527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:01:17.084 [DEBUG] [Thread-128527] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:01:17.087 [DEBUG] [Thread-128527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:01:17.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:01:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:01:17.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:01:17.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:01:17.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:01:17.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:01:17.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:01:17.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:01:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:01:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.042058 -999.00  +12.40  12.05     53   +3.30 1 1 1 1 1     0    0 9.84 33.53 ZNESW 11.3 12.1 142.4 14.0 12.7 -24.6 12.6 -24.0 12.3 -22.5 12.6 -23.3
2025-12-04T03:01:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:01:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:01:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.042058
2025-12-04T03:01:17.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:01:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:01:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:01:17.109 [DEBUG] [Thread-128527] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:01:17.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:01:17.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:01:17.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:00:45', tmtdew=10.28, humidity=49.44, cloud=0.0, wind=14.33, temperature=12.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:00:46', seeing=1.63, atlas_timestamp='2025-12-04T01:00:33.811', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T00:59:00')
2025-12-04T03:01:17.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:01:17.208 [DEBUG] [Thread-128530] [transport.py] [_log()] starting thread (client mode): 0xa2786410
2025-12-04T03:01:17.208 [DEBUG] [Thread-128530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:01:17.222 [DEBUG] [Thread-128530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:01:17.223 [INFO] [Thread-128530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:17.233 [DEBUG] [Thread-128530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] client lang: <none>
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] server lang: <none>
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] kex follows: False
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] Compression: none
2025-12-04T03:01:17.234 [DEBUG] [Thread-128530] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:01:17.286 [DEBUG] [Thread-128530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:01:17.286 [DEBUG] [Thread-128530] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:01:17.287 [DEBUG] [Thread-128530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:01:17.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:01:17.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:01:17.342 [DEBUG] [Thread-128530] [transport.py] [_log()] userauth is OK
2025-12-04T03:01:17.343 [DEBUG] [Thread-128530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:01:17.343 [DEBUG] [Thread-128530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:01:17.343 [DEBUG] [Thread-128530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:01:17.343 [DEBUG] [Thread-128530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:01:17.361 [INFO] [Thread-128530] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:01:17.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:01:17.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:01:18.212 [DEBUG] [Thread-128530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:01:18.212 [DEBUG] [Thread-128530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:01:18.261 [DEBUG] [Thread-128530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:01:18.261 [DEBUG] [Thread-128530] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:01:18.269 [DEBUG] [Thread-128530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:01:18.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:01:18.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:01:18.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:01:18.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:01:18.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:01:18.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:01:18.300 [DEBUG] [Thread-128530] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:01:30.876 [DEBUG] [Thread-128532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:33.673 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:33.783 [DEBUG] [Thread-128533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:45.928 [DEBUG] [Thread-128534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:48.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:01:48.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:01:48.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:01:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 1, 18), 10.28, 49.4, 0.0, 13.61, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:01:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:01:18
2025-12-04T03:01:49.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:01:49.274 [DEBUG] [Thread-128535] [transport.py] [_log()] starting thread (client mode): 0xa271fa30
2025-12-04T03:01:49.274 [DEBUG] [Thread-128535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:01:49.292 [DEBUG] [Thread-128535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:01:49.292 [INFO] [Thread-128535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] client lang: <none>
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] server lang: <none>
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] kex follows: False
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:01:49.295 [DEBUG] [Thread-128535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:01:49.296 [DEBUG] [Thread-128535] [transport.py] [_log()] Compression: none
2025-12-04T03:01:49.296 [DEBUG] [Thread-128535] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:01:49.313 [DEBUG] [Thread-128535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:01:49.313 [DEBUG] [Thread-128535] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:01:49.314 [DEBUG] [Thread-128535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:01:49.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:01:49.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:01:49.316 [DEBUG] [Thread-128535] [transport.py] [_log()] userauth is OK
2025-12-04T03:01:49.316 [DEBUG] [Thread-128535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:01:49.316 [DEBUG] [Thread-128535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:01:49.316 [DEBUG] [Thread-128535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:01:49.316 [DEBUG] [Thread-128535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:01:49.340 [INFO] [Thread-128535] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:01:49.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:01:49.970 [DEBUG] [Thread-128535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:01:49.970 [DEBUG] [Thread-128535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:01:49.971 [DEBUG] [Thread-128535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:01:50.012 [DEBUG] [Thread-128535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:01:50.012 [DEBUG] [Thread-128535] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:01:50.015 [DEBUG] [Thread-128535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:01:50.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:01:50.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:01:50.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:01:50.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:01:50.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:01:50.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:01:50.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:01:50.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:01:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:01:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.042405 -999.00  +12.40  10.19     53   +3.30 1 1 1 1 1     0    0 9.85 34.01 ZNESW 10.9 10.2 145.6 13.8 12.7 -24.5 12.6 -23.9 12.3 -22.3 12.7 -23.3
2025-12-04T03:01:50.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:01:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:01:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.042405
2025-12-04T03:01:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:01:50.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:01:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:01:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:01:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:01:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:01:18', tmtdew=10.28, humidity=49.4, cloud=0.0, wind=13.61, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:01:18', seeing=1.63, atlas_timestamp='2025-12-04T01:01:03.792', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T00:59:00')
2025-12-04T03:01:50.040 [DEBUG] [Thread-128535] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:01:50.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:01:50.126 [DEBUG] [Thread-128538] [transport.py] [_log()] starting thread (client mode): 0xa271d7b0
2025-12-04T03:01:50.126 [DEBUG] [Thread-128538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:01:50.140 [DEBUG] [Thread-128538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:01:50.140 [INFO] [Thread-128538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:01:50.148 [DEBUG] [Thread-128538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] client lang: <none>
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] server lang: <none>
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] kex follows: False
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:01:50.149 [DEBUG] [Thread-128538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:01:50.150 [DEBUG] [Thread-128538] [transport.py] [_log()] Compression: none
2025-12-04T03:01:50.150 [DEBUG] [Thread-128538] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:01:50.206 [DEBUG] [Thread-128538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:01:50.206 [DEBUG] [Thread-128538] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:01:50.206 [DEBUG] [Thread-128538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:01:50.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:01:50.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:01:50.262 [DEBUG] [Thread-128538] [transport.py] [_log()] userauth is OK
2025-12-04T03:01:50.262 [DEBUG] [Thread-128538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:01:50.262 [DEBUG] [Thread-128538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:01:50.262 [DEBUG] [Thread-128538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:01:50.262 [DEBUG] [Thread-128538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:01:50.279 [INFO] [Thread-128538] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:01:50.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:01:50.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:01:51.082 [DEBUG] [Thread-128538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:01:51.082 [DEBUG] [Thread-128538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:01:51.130 [DEBUG] [Thread-128538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:01:51.130 [DEBUG] [Thread-128538] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:01:51.138 [DEBUG] [Thread-128538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:01:51.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:01:51.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:01:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:01:51.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:01:51.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:01:51.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:01:51.170 [DEBUG] [Thread-128538] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:01:54.104 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:59.104 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:01:59.105 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:00.957 [DEBUG] [Thread-128540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:14.594 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:16.004 [DEBUG] [Thread-128541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:21.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:02:21.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:02:21.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:02:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 1, 50), 10.4, 48.87, 0.0, 15.19, 12.4, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:02:21.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:01:50
2025-12-04T03:02:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:02:22.201 [DEBUG] [Thread-128542] [transport.py] [_log()] starting thread (client mode): 0xa517d630
2025-12-04T03:02:22.201 [DEBUG] [Thread-128542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:02:22.220 [DEBUG] [Thread-128542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:02:22.220 [INFO] [Thread-128542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] client lang: <none>
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] server lang: <none>
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] kex follows: False
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] Compression: none
2025-12-04T03:02:22.224 [DEBUG] [Thread-128542] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:02:22.242 [DEBUG] [Thread-128542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:02:22.242 [DEBUG] [Thread-128542] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:02:22.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:02:22.242 [DEBUG] [Thread-128542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:02:22.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:02:22.243 [DEBUG] [Thread-128542] [transport.py] [_log()] userauth is OK
2025-12-04T03:02:22.243 [DEBUG] [Thread-128542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:02:22.243 [DEBUG] [Thread-128542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:02:22.243 [DEBUG] [Thread-128542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:02:22.243 [DEBUG] [Thread-128542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:02:22.273 [INFO] [Thread-128542] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:02:22.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:02:22.884 [DEBUG] [Thread-128542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:02:22.884 [DEBUG] [Thread-128542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:02:22.884 [DEBUG] [Thread-128542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:02:22.925 [DEBUG] [Thread-128542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:02:22.925 [DEBUG] [Thread-128542] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:02:22.927 [DEBUG] [Thread-128542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:02:22.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:02:22.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:02:22.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:02:22.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:02:22.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:02:22.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:02:22.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.042752 -999.00  +12.40  10.25     53   +3.30 1 1 1 1 1     0    0 10.08 34.66 ZNESW 10.4 10.2 149.2 13.2 12.7 -24.5 12.5 -24.0 12.4 -22.5 12.6 -23.3
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.042752
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:02:22.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:01:50', tmtdew=10.4, humidity=48.87, cloud=0.0, wind=15.19, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:01:50', seeing=1.49, atlas_timestamp='2025-12-04T01:01:33.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T00:59:00')
2025-12-04T03:02:22.946 [DEBUG] [Thread-128542] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:02:23.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:02:23.031 [DEBUG] [Thread-128545] [transport.py] [_log()] starting thread (client mode): 0xa517c6d0
2025-12-04T03:02:23.031 [DEBUG] [Thread-128545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:02:23.046 [DEBUG] [Thread-128545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:02:23.046 [INFO] [Thread-128545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:02:23.053 [DEBUG] [Thread-128545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] client lang: <none>
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] server lang: <none>
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] kex follows: False
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] Compression: none
2025-12-04T03:02:23.054 [DEBUG] [Thread-128545] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:02:23.114 [DEBUG] [Thread-128545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:02:23.115 [DEBUG] [Thread-128545] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:02:23.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:02:23.115 [DEBUG] [Thread-128545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:02:23.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:02:23.174 [DEBUG] [Thread-128545] [transport.py] [_log()] userauth is OK
2025-12-04T03:02:23.174 [DEBUG] [Thread-128545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:02:23.174 [DEBUG] [Thread-128545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:02:23.174 [DEBUG] [Thread-128545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:02:23.174 [DEBUG] [Thread-128545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:02:23.187 [INFO] [Thread-128545] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:02:23.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:02:23.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:02:23.995 [DEBUG] [Thread-128545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:02:23.995 [DEBUG] [Thread-128545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:02:24.043 [DEBUG] [Thread-128545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:02:24.043 [DEBUG] [Thread-128545] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:02:24.052 [DEBUG] [Thread-128545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:02:24.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:02:24.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:02:24.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:02:24.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:02:24.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:02:24.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:02:24.088 [DEBUG] [Thread-128545] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:02:31.030 [DEBUG] [Thread-128547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:33.856 [DEBUG] [Thread-128548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:34.968 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:46.080 [DEBUG] [Thread-128549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:02:54.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:02:54.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:02:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 2, 22), 10.42, 48.8, 0.0, 14.36, 12.4, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:02:54.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:02:22
2025-12-04T03:02:54.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:02:55.121 [DEBUG] [Thread-128550] [transport.py] [_log()] starting thread (client mode): 0xa517c550
2025-12-04T03:02:55.121 [DEBUG] [Thread-128550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:02:55.134 [DEBUG] [Thread-128550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:02:55.134 [INFO] [Thread-128550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] client lang: <none>
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] server lang: <none>
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] kex follows: False
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] Compression: none
2025-12-04T03:02:55.136 [DEBUG] [Thread-128550] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:02:55.143 [DEBUG] [Thread-128550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:02:55.143 [DEBUG] [Thread-128550] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:02:55.143 [DEBUG] [Thread-128550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:02:55.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:02:55.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:02:55.144 [DEBUG] [Thread-128550] [transport.py] [_log()] userauth is OK
2025-12-04T03:02:55.144 [DEBUG] [Thread-128550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:02:55.144 [DEBUG] [Thread-128550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:02:55.144 [DEBUG] [Thread-128550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:02:55.144 [DEBUG] [Thread-128550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:02:55.159 [INFO] [Thread-128550] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:02:55.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:02:55.471 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:55.750 [DEBUG] [Thread-128550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:02:55.750 [DEBUG] [Thread-128550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:02:55.750 [DEBUG] [Thread-128550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:02:55.791 [DEBUG] [Thread-128550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:02:55.791 [DEBUG] [Thread-128550] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:02:55.793 [DEBUG] [Thread-128550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:02:55.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:02:55.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:02:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:02:55.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:02:55.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:02:55.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:02:55.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.043447 -999.00  +12.50  11.02     53   +3.30 1 1 1 1 1     0    0 9.96 37.64 ZNESW 10.7 11.0 140.4 13.9 12.7 -24.5 12.6 -24.0 12.4 -22.3 12.7 -23.4
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.043447
2025-12-04T03:02:55.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:02:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:02:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:02:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:02:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:02:55.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:02:22', tmtdew=10.42, humidity=48.8, cloud=0.0, wind=14.36, temperature=12.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:02:22', seeing=1.74, atlas_timestamp='2025-12-04T01:02:33.821', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T00:59:00')
2025-12-04T03:02:55.812 [DEBUG] [Thread-128550] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:02:55.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:02:55.897 [DEBUG] [Thread-128553] [transport.py] [_log()] starting thread (client mode): 0xa5198850
2025-12-04T03:02:55.897 [DEBUG] [Thread-128553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:02:55.912 [DEBUG] [Thread-128553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:02:55.912 [INFO] [Thread-128553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:02:55.919 [DEBUG] [Thread-128553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] client lang: <none>
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] server lang: <none>
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] kex follows: False
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] Compression: none
2025-12-04T03:02:55.920 [DEBUG] [Thread-128553] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:02:55.977 [DEBUG] [Thread-128553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:02:55.977 [DEBUG] [Thread-128553] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:02:55.978 [DEBUG] [Thread-128553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:02:55.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:02:55.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:02:56.034 [DEBUG] [Thread-128553] [transport.py] [_log()] userauth is OK
2025-12-04T03:02:56.034 [DEBUG] [Thread-128553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:02:56.034 [DEBUG] [Thread-128553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:02:56.034 [DEBUG] [Thread-128553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:02:56.034 [DEBUG] [Thread-128553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:02:56.048 [INFO] [Thread-128553] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:02:56.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:02:56.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:02:56.877 [DEBUG] [Thread-128553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:02:56.877 [DEBUG] [Thread-128553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:02:56.926 [DEBUG] [Thread-128553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:02:56.926 [DEBUG] [Thread-128553] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:02:56.935 [DEBUG] [Thread-128553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:02:56.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:02:56.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:02:56.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:02:56.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:02:56.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:02:56.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:02:56.969 [DEBUG] [Thread-128553] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:02:59.314 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:02:59.315 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:01.108 [DEBUG] [Thread-128555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:15.879 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:16.143 [DEBUG] [Thread-128556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:26.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:03:26.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:03:26.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:03:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 2, 54), 10.37, 49.3, 0.0, 12.49, 12.37, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:03:27.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:02:54
2025-12-04T03:03:27.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:03:28.000 [DEBUG] [Thread-128557] [transport.py] [_log()] starting thread (client mode): 0xa517c8b0
2025-12-04T03:03:28.000 [DEBUG] [Thread-128557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:03:28.019 [DEBUG] [Thread-128557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:03:28.020 [INFO] [Thread-128557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:03:28.022 [DEBUG] [Thread-128557] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] client lang: <none>
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] server lang: <none>
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] kex follows: False
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] Compression: none
2025-12-04T03:03:28.023 [DEBUG] [Thread-128557] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:03:28.038 [DEBUG] [Thread-128557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:03:28.039 [DEBUG] [Thread-128557] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:03:28.039 [DEBUG] [Thread-128557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:03:28.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:03:28.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:03:28.039 [DEBUG] [Thread-128557] [transport.py] [_log()] userauth is OK
2025-12-04T03:03:28.040 [DEBUG] [Thread-128557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:03:28.040 [DEBUG] [Thread-128557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:03:28.040 [DEBUG] [Thread-128557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:03:28.040 [DEBUG] [Thread-128557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:03:28.067 [INFO] [Thread-128557] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:03:28.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:03:28.701 [DEBUG] [Thread-128557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:03:28.702 [DEBUG] [Thread-128557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:03:28.702 [DEBUG] [Thread-128557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:03:28.743 [DEBUG] [Thread-128557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:03:28.743 [DEBUG] [Thread-128557] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:03:28.746 [DEBUG] [Thread-128557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:03:28.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:03:28.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:03:28.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:03:28.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:03:28.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:03:28.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:03:28.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.043794 -999.00  +12.50  11.48     53   +3.30 1 1 1 1 1     0    0 10.10 37.98 ZNESW 11.9 11.5 146.2 13.3 12.7 -24.3 12.6 -24.0 12.3 -22.2 12.6 -23.0
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:03:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.043794
2025-12-04T03:03:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:03:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:03:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:03:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:03:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:03:28.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:02:54', tmtdew=10.37, humidity=49.3, cloud=0.0, wind=12.49, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:03:26', seeing=1.3, atlas_timestamp='2025-12-04T01:03:03.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T00:59:00')
2025-12-04T03:03:28.770 [DEBUG] [Thread-128557] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:03:28.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:03:31.174 [DEBUG] [Thread-128560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:33.909 [DEBUG] [Thread-128561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:36.260 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:46.218 [DEBUG] [Thread-128562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:56.640 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:59.515 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:03:59.516 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:01.248 [DEBUG] [Thread-128563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:16.277 [DEBUG] [Thread-128564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:17.023 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:31.304 [DEBUG] [Thread-128565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:33.967 [DEBUG] [Thread-128566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:37.449 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:46.334 [DEBUG] [Thread-128567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:57.916 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:59.730 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:04:59.731 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:01.365 [DEBUG] [Thread-128568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:16.393 [DEBUG] [Thread-128569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:18.314 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:31.423 [DEBUG] [Thread-128570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:34.020 [DEBUG] [Thread-128571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:38.736 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:44.086 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2025-12-04T03:05:46.448 [DEBUG] [Thread-128572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:59.113 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:59.928 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:05:59.929 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:01.475 [DEBUG] [Thread-128573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:06:14.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:06:14.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:06:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 6, 6), 10.47, 48.77, 0.0, 12.67, 12.39, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:06:14.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:06:06
2025-12-04T03:06:14.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:06:15.081 [DEBUG] [Thread-128574] [transport.py] [_log()] starting thread (client mode): 0xa5199570
2025-12-04T03:06:15.081 [DEBUG] [Thread-128574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:06:15.097 [DEBUG] [Thread-128574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:06:15.097 [INFO] [Thread-128574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:06:15.100 [DEBUG] [Thread-128574] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:06:15.100 [DEBUG] [Thread-128574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:06:15.100 [DEBUG] [Thread-128574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:06:15.100 [DEBUG] [Thread-128574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] client lang: <none>
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] server lang: <none>
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] kex follows: False
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] Compression: none
2025-12-04T03:06:15.101 [DEBUG] [Thread-128574] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:06:15.116 [DEBUG] [Thread-128574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:06:15.116 [DEBUG] [Thread-128574] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:06:15.116 [DEBUG] [Thread-128574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:06:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:06:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:06:15.117 [DEBUG] [Thread-128574] [transport.py] [_log()] userauth is OK
2025-12-04T03:06:15.117 [DEBUG] [Thread-128574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:06:15.118 [DEBUG] [Thread-128574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:06:15.118 [DEBUG] [Thread-128574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:06:15.118 [DEBUG] [Thread-128574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:06:15.134 [INFO] [Thread-128574] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:06:15.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:06:15.738 [DEBUG] [Thread-128574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:06:15.738 [DEBUG] [Thread-128574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:06:15.738 [DEBUG] [Thread-128574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:06:15.779 [DEBUG] [Thread-128574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:06:15.780 [DEBUG] [Thread-128574] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:06:15.782 [DEBUG] [Thread-128574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:06:15.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:06:15.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:06:15.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:06:15.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:06:15.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:06:15.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:06:15.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.045877 -999.00  +12.40  10.60     53   +3.20 1 1 1 1 1     0    0 10.28 40.30 ZNESW 11.0 10.6 144.8 13.8 12.7 -24.3 12.6 -23.9 12.3 -22.3 12.7 -23.3
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.045877
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:06:15.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:06:06', tmtdew=10.47, humidity=48.77, cloud=0.0, wind=12.67, temperature=12.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:06:06', seeing=1.58, atlas_timestamp='2025-12-04T01:06:03.773', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T01:02:00')
2025-12-04T03:06:15.802 [DEBUG] [Thread-128574] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:06:15.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:06:15.887 [DEBUG] [Thread-128577] [transport.py] [_log()] starting thread (client mode): 0xa271cbe0
2025-12-04T03:06:15.887 [DEBUG] [Thread-128577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:06:15.903 [DEBUG] [Thread-128577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:06:15.903 [INFO] [Thread-128577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:15.910 [DEBUG] [Thread-128577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] client lang: <none>
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] server lang: <none>
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] kex follows: False
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] Compression: none
2025-12-04T03:06:15.911 [DEBUG] [Thread-128577] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:06:15.965 [DEBUG] [Thread-128577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:06:15.965 [DEBUG] [Thread-128577] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:06:15.965 [DEBUG] [Thread-128577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:06:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:06:15.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:06:16.022 [DEBUG] [Thread-128577] [transport.py] [_log()] userauth is OK
2025-12-04T03:06:16.022 [DEBUG] [Thread-128577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:06:16.023 [DEBUG] [Thread-128577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:06:16.023 [DEBUG] [Thread-128577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:06:16.023 [DEBUG] [Thread-128577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:06:16.040 [INFO] [Thread-128577] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:06:16.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:06:16.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:06:16.502 [DEBUG] [Thread-128579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:16.923 [DEBUG] [Thread-128577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:06:16.923 [DEBUG] [Thread-128577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:06:16.970 [DEBUG] [Thread-128577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:06:16.971 [DEBUG] [Thread-128577] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:06:16.979 [DEBUG] [Thread-128577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:06:16.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:06:16.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:06:16.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:06:17.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:06:17.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:06:17.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:06:17.012 [DEBUG] [Thread-128577] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:06:19.494 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:31.540 [DEBUG] [Thread-128580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:34.088 [DEBUG] [Thread-128581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:39.876 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:46.573 [DEBUG] [Thread-128582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:06:47.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:06:47.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:06:47.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:06:47.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 6, 38), 10.48, 48.76, 0.0, 14.22, 12.34, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:06:47.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:06:38
2025-12-04T03:06:47.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:06:47.985 [DEBUG] [Thread-128583] [transport.py] [_log()] starting thread (client mode): 0xa2784df0
2025-12-04T03:06:47.986 [DEBUG] [Thread-128583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:06:48.008 [DEBUG] [Thread-128583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:06:48.008 [INFO] [Thread-128583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:06:48.009 [DEBUG] [Thread-128583] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] client lang: <none>
2025-12-04T03:06:48.010 [DEBUG] [Thread-128583] [transport.py] [_log()] server lang: <none>
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] kex follows: False
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] Compression: none
2025-12-04T03:06:48.011 [DEBUG] [Thread-128583] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:06:48.022 [DEBUG] [Thread-128583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:06:48.023 [DEBUG] [Thread-128583] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:06:48.023 [DEBUG] [Thread-128583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:06:48.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:06:48.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:06:48.025 [DEBUG] [Thread-128583] [transport.py] [_log()] userauth is OK
2025-12-04T03:06:48.025 [DEBUG] [Thread-128583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:06:48.025 [DEBUG] [Thread-128583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:06:48.026 [DEBUG] [Thread-128583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:06:48.026 [DEBUG] [Thread-128583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:06:48.060 [INFO] [Thread-128583] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:06:48.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:06:48.659 [DEBUG] [Thread-128583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:06:48.659 [DEBUG] [Thread-128583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:06:48.659 [DEBUG] [Thread-128583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:06:48.702 [DEBUG] [Thread-128583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:06:48.702 [DEBUG] [Thread-128583] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:06:48.705 [DEBUG] [Thread-128583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:06:48.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:06:48.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:06:48.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:06:48.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:06:48.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:06:48.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:06:48.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:06:48.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.046224 -999.00  +12.40   9.22     53   +3.20 1 1 1 1 1     0    0 10.00 37.94 ZNESW 11.2 9.2 145.0 12.5 12.7 -24.5 12.6 -23.9 12.4 -22.4 12.7 -23.3
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.046224
2025-12-04T03:06:48.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:06:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:06:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:06:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:06:48.731 [DEBUG] [Thread-128583] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:06:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:06:48.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:06:38', tmtdew=10.48, humidity=48.76, cloud=0.0, wind=14.22, temperature=12.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:06:38', seeing=1.54, atlas_timestamp='2025-12-04T01:06:33.754', atlas_cloud=1, atlas_rain=1, zp_data=[-0.09475000000000122, -0.07674999999999876, -0.02275000000000027, -0.028000000000002245, -0.03149999999999942, -0.016749999999998266, -0.07000000000000028, -0.03874999999999851, -0.07200000000000095, -0.0600000000000005, -0.05975000000000108, -0.01699999999999946, -0.009999999999999787, -0.036749999999999616, -0.11500000000000199, -0.07200000000000095, 0.011749999999999261, -0.01249999999999929, -0.08999999999999986, -0.023750000000001492, 0.04849999999999888, -0.04975000000000129, -0.08874999999999922, -0.045249999999999346, -0.0065000000000008384, 0.06049999999999933, -0.008250000000000313, -0.07099999999999973, 0.03849999999999909, -0.08499999999999908, -0.05349999999999966, -0.023999999999999133, -0.007250000000000867], zp_timestamp='2025-12-04T01:02:00')
2025-12-04T03:06:48.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:06:48.827 [DEBUG] [Thread-128586] [transport.py] [_log()] starting thread (client mode): 0xa517e560
2025-12-04T03:06:48.827 [DEBUG] [Thread-128586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:06:48.842 [DEBUG] [Thread-128586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:06:48.842 [INFO] [Thread-128586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:06:48.849 [DEBUG] [Thread-128586] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] client lang: <none>
2025-12-04T03:06:48.850 [DEBUG] [Thread-128586] [transport.py] [_log()] server lang: <none>
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] kex follows: False
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] Compression: none
2025-12-04T03:06:48.851 [DEBUG] [Thread-128586] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:06:48.906 [DEBUG] [Thread-128586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:06:48.907 [DEBUG] [Thread-128586] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:06:48.907 [DEBUG] [Thread-128586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:06:48.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:06:48.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:06:48.963 [DEBUG] [Thread-128586] [transport.py] [_log()] userauth is OK
2025-12-04T03:06:48.963 [DEBUG] [Thread-128586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:06:48.963 [DEBUG] [Thread-128586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:06:48.963 [DEBUG] [Thread-128586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:06:48.963 [DEBUG] [Thread-128586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:06:48.983 [INFO] [Thread-128586] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:06:48.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:06:48.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:06:49.791 [DEBUG] [Thread-128586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:06:49.791 [DEBUG] [Thread-128586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:06:49.840 [DEBUG] [Thread-128586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:06:49.840 [DEBUG] [Thread-128586] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:06:49.848 [DEBUG] [Thread-128586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:06:49.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:06:49.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:06:49.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:06:49.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:06:49.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:06:49.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:06:49.880 [DEBUG] [Thread-128586] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:07:00.141 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:00.142 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:00.365 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:01.601 [DEBUG] [Thread-128588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:16.654 [DEBUG] [Thread-128589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:19.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:07:19.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:07:19.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:07:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 7, 10), 10.43, 48.9, 0.0, 14.73, 12.35, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:07:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:07:10
2025-12-04T03:07:20.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:07:20.851 [DEBUG] [Thread-128590] [transport.py] [_log()] starting thread (client mode): 0xa517cc10
2025-12-04T03:07:20.852 [DEBUG] [Thread-128590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:07:20.862 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:20.870 [DEBUG] [Thread-128590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:07:20.870 [INFO] [Thread-128590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:07:20.873 [DEBUG] [Thread-128590] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:07:20.873 [DEBUG] [Thread-128590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:07:20.873 [DEBUG] [Thread-128590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] client lang: <none>
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] server lang: <none>
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] kex follows: False
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:07:20.874 [DEBUG] [Thread-128590] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:07:20.875 [DEBUG] [Thread-128590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:07:20.875 [DEBUG] [Thread-128590] [transport.py] [_log()] Compression: none
2025-12-04T03:07:20.875 [DEBUG] [Thread-128590] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:07:20.892 [DEBUG] [Thread-128590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:07:20.892 [DEBUG] [Thread-128590] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:07:20.893 [DEBUG] [Thread-128590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:07:20.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:07:20.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:07:20.894 [DEBUG] [Thread-128590] [transport.py] [_log()] userauth is OK
2025-12-04T03:07:20.895 [DEBUG] [Thread-128590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:07:20.895 [DEBUG] [Thread-128590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:07:20.895 [DEBUG] [Thread-128590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:07:20.895 [DEBUG] [Thread-128590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:07:20.912 [INFO] [Thread-128590] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:07:20.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:07:21.504 [DEBUG] [Thread-128590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:07:21.504 [DEBUG] [Thread-128590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:07:21.504 [DEBUG] [Thread-128590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:07:21.545 [DEBUG] [Thread-128590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:07:21.545 [DEBUG] [Thread-128590] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:07:21.549 [DEBUG] [Thread-128590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:07:21.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:07:21.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:07:21.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:07:21.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:07:21.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:07:21.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:07:21.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:07:21.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.046571 -999.00  +12.40  11.99     53   +3.20 1 1 1 1 1     0    0 10.15 37.94 ZNESW 13.1 12.0 146.6 14.3 12.7 -24.3 12.6 -24.0 12.4 -22.2 12.7 -23.2
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.046571
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:07:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:07:10', tmtdew=10.43, humidity=48.9, cloud=0.0, wind=14.73, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:07:11', seeing=1.63, atlas_timestamp='2025-12-04T01:07:03.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.042749999999999844, 0.03325000000000067, -0.05050000000000132, 0.057500000000000995, -0.05174999999999841, -0.012000000000000455, 0.00975000000000037, -0.031000000000000583, -0.022999999999999687, -0.06975000000000087, 0.02200000000000024, 0.027999999999998693, 0.020749999999997826, -0.04499999999999993, -0.04800000000000004, 0.028249999999999886, 0.05550000000000033, -0.0470000000000006, 0.0012499999999988631, 0.028499999999997527, -0.015250000000001762, 0.0022500000000000853, -0.01025000000000098, 0.054999999999999716, 0.07150000000000034, -0.019249999999999545, 0.01750000000000007, 0.11950000000000038, -0.07449999999999868, -0.03799999999999848, 0.011000000000001009, 0.030249999999998778], zp_timestamp='2025-12-04T01:05:00')
2025-12-04T03:07:21.565 [DEBUG] [Thread-128590] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:07:21.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:07:21.650 [DEBUG] [Thread-128593] [transport.py] [_log()] starting thread (client mode): 0xa51d2f50
2025-12-04T03:07:21.650 [DEBUG] [Thread-128593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:07:21.664 [DEBUG] [Thread-128593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:07:21.664 [INFO] [Thread-128593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] client lang: <none>
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] server lang: <none>
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] kex follows: False
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] Compression: none
2025-12-04T03:07:21.672 [DEBUG] [Thread-128593] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:07:21.731 [DEBUG] [Thread-128593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:07:21.731 [DEBUG] [Thread-128593] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:07:21.731 [DEBUG] [Thread-128593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:07:21.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:07:21.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:07:21.786 [DEBUG] [Thread-128593] [transport.py] [_log()] userauth is OK
2025-12-04T03:07:21.787 [DEBUG] [Thread-128593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:07:21.787 [DEBUG] [Thread-128593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:07:21.787 [DEBUG] [Thread-128593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:07:21.787 [DEBUG] [Thread-128593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:07:21.805 [INFO] [Thread-128593] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:07:21.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:07:21.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:07:22.639 [DEBUG] [Thread-128593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:07:22.640 [DEBUG] [Thread-128593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:07:22.688 [DEBUG] [Thread-128593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:07:22.688 [DEBUG] [Thread-128593] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:07:22.697 [DEBUG] [Thread-128593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:07:22.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:07:22.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:07:22.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:07:22.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:07:22.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:07:22.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:07:22.731 [DEBUG] [Thread-128593] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:07:31.681 [DEBUG] [Thread-128595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:34.159 [DEBUG] [Thread-128596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:41.243 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:46.730 [DEBUG] [Thread-128597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:07:52.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:07:52.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:07:52.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:07:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 7, 43), 10.46, 48.47, 0.0, 12.92, 12.37, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:07:53.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:07:43
2025-12-04T03:07:53.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:07:53.719 [DEBUG] [Thread-128598] [transport.py] [_log()] starting thread (client mode): 0xa517cd30
2025-12-04T03:07:53.719 [DEBUG] [Thread-128598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:07:53.739 [DEBUG] [Thread-128598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:07:53.739 [INFO] [Thread-128598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] client lang: <none>
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] server lang: <none>
2025-12-04T03:07:53.741 [DEBUG] [Thread-128598] [transport.py] [_log()] kex follows: False
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] Compression: none
2025-12-04T03:07:53.742 [DEBUG] [Thread-128598] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:07:53.761 [DEBUG] [Thread-128598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:07:53.762 [DEBUG] [Thread-128598] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:07:53.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:07:53.763 [DEBUG] [Thread-128598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:07:53.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:07:53.764 [DEBUG] [Thread-128598] [transport.py] [_log()] userauth is OK
2025-12-04T03:07:53.764 [DEBUG] [Thread-128598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:07:53.765 [DEBUG] [Thread-128598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:07:53.765 [DEBUG] [Thread-128598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:07:53.765 [DEBUG] [Thread-128598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:07:53.788 [INFO] [Thread-128598] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:07:53.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:07:54.384 [DEBUG] [Thread-128598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:07:54.384 [DEBUG] [Thread-128598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:07:54.384 [DEBUG] [Thread-128598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:07:54.425 [DEBUG] [Thread-128598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:07:54.425 [DEBUG] [Thread-128598] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:07:54.427 [DEBUG] [Thread-128598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:07:54.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:07:54.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:07:54.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:07:54.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:07:54.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:07:54.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:07:54.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:07:54.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:07:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:07:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.046571 -999.00  +12.40  11.99     53   +3.20 1 1 1 1 1     0    0 10.15 37.94 ZNESW 13.1 12.0 146.6 14.3 12.7 -24.3 12.6 -24.0 12.4 -22.2 12.7 -23.2
2025-12-04T03:07:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:07:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:07:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.046571
2025-12-04T03:07:54.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:07:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:07:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:07:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:07:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:07:54.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:07:43', tmtdew=10.46, humidity=48.47, cloud=0.0, wind=12.92, temperature=12.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:07:43', seeing=2.06, atlas_timestamp='2025-12-04T01:07:03.734', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.042749999999999844, 0.03325000000000067, -0.05050000000000132, 0.057500000000000995, -0.05174999999999841, -0.012000000000000455, 0.00975000000000037, -0.031000000000000583, -0.022999999999999687, -0.06975000000000087, 0.02200000000000024, 0.027999999999998693, 0.020749999999997826, -0.04499999999999993, -0.04800000000000004, 0.028249999999999886, 0.05550000000000033, -0.0470000000000006, 0.0012499999999988631, 0.028499999999997527, -0.015250000000001762, 0.0022500000000000853, -0.01025000000000098, 0.054999999999999716, 0.07150000000000034, -0.019249999999999545, 0.01750000000000007, 0.11950000000000038, -0.07449999999999868, -0.03799999999999848, 0.011000000000001009, 0.030249999999998778], zp_timestamp='2025-12-04T01:05:00')
2025-12-04T03:07:54.449 [DEBUG] [Thread-128598] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:07:54.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:07:54.545 [DEBUG] [Thread-128601] [transport.py] [_log()] starting thread (client mode): 0xa2787070
2025-12-04T03:07:54.545 [DEBUG] [Thread-128601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:07:54.560 [DEBUG] [Thread-128601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:07:54.560 [INFO] [Thread-128601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:07:54.568 [DEBUG] [Thread-128601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] client lang: <none>
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] server lang: <none>
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] kex follows: False
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] Compression: none
2025-12-04T03:07:54.569 [DEBUG] [Thread-128601] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:07:54.626 [DEBUG] [Thread-128601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:07:54.627 [DEBUG] [Thread-128601] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:07:54.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:07:54.628 [DEBUG] [Thread-128601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:07:54.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:07:54.690 [DEBUG] [Thread-128601] [transport.py] [_log()] userauth is OK
2025-12-04T03:07:54.690 [DEBUG] [Thread-128601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:07:54.690 [DEBUG] [Thread-128601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:07:54.690 [DEBUG] [Thread-128601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:07:54.690 [DEBUG] [Thread-128601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:07:54.714 [INFO] [Thread-128601] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:07:54.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:07:54.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:07:55.578 [DEBUG] [Thread-128601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:07:55.579 [DEBUG] [Thread-128601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:07:55.626 [DEBUG] [Thread-128601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:07:55.627 [DEBUG] [Thread-128601] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:07:55.635 [DEBUG] [Thread-128601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:07:55.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:07:55.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:07:55.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:07:55.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:07:55.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:07:55.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:07:55.669 [DEBUG] [Thread-128601] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:08:00.346 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:00.347 [DEBUG] [Thread-99729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:01.716 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:01.758 [DEBUG] [Thread-128603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:16.801 [DEBUG] [Thread-128604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:22.143 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:25.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:08:25.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:08:25.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:08:26.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 8, 15), 10.45, 48.5, 0.0, 13.02, 12.35, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:08:26.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:08:15
2025-12-04T03:08:26.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:08:26.642 [DEBUG] [Thread-128605] [transport.py] [_log()] starting thread (client mode): 0xa271fb20
2025-12-04T03:08:26.642 [DEBUG] [Thread-128605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:08:26.662 [DEBUG] [Thread-128605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:08:26.662 [INFO] [Thread-128605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:26.665 [DEBUG] [Thread-128605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] client lang: <none>
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] server lang: <none>
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] kex follows: False
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] Compression: none
2025-12-04T03:08:26.666 [DEBUG] [Thread-128605] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:08:26.682 [DEBUG] [Thread-128605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:08:26.683 [DEBUG] [Thread-128605] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:08:26.683 [DEBUG] [Thread-128605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:08:26.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:08:26.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:08:26.685 [DEBUG] [Thread-128605] [transport.py] [_log()] userauth is OK
2025-12-04T03:08:26.685 [DEBUG] [Thread-128605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:08:26.685 [DEBUG] [Thread-128605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:08:26.685 [DEBUG] [Thread-128605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:08:26.685 [DEBUG] [Thread-128605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:08:26.708 [INFO] [Thread-128605] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:08:26.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:08:27.314 [DEBUG] [Thread-128605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:08:27.314 [DEBUG] [Thread-128605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:08:27.315 [DEBUG] [Thread-128605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:08:27.356 [DEBUG] [Thread-128605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:08:27.356 [DEBUG] [Thread-128605] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:08:27.359 [DEBUG] [Thread-128605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:08:27.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:08:27.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:08:27.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:08:27.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:08:27.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:08:27.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:08:27.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:08:27.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:08:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:08:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.046919 -999.00  +12.50  10.97     53   +3.20 1 1 1 1 1     0    0 10.17 37.62 ZNESW 10.8 11.0 137.8 12.6 12.7 -24.4 12.6 -23.9 12.3 -22.3 12.7 -23.2
2025-12-04T03:08:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:08:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:08:27.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.046919
2025-12-04T03:08:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:08:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:08:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:08:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:08:27.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:08:27.382 [DEBUG] [Thread-128605] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:08:27.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:08:15', tmtdew=10.45, humidity=48.5, cloud=0.0, wind=13.02, temperature=12.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:08:15', seeing=1.35, atlas_timestamp='2025-12-04T01:07:33.802', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.042749999999999844, 0.03325000000000067, -0.05050000000000132, 0.057500000000000995, -0.05174999999999841, -0.012000000000000455, 0.00975000000000037, -0.031000000000000583, -0.022999999999999687, -0.06975000000000087, 0.02200000000000024, 0.027999999999998693, 0.020749999999997826, -0.04499999999999993, -0.04800000000000004, 0.028249999999999886, 0.05550000000000033, -0.0470000000000006, 0.0012499999999988631, 0.028499999999997527, -0.015250000000001762, 0.0022500000000000853, -0.01025000000000098, 0.054999999999999716, 0.07150000000000034, -0.019249999999999545, 0.01750000000000007, 0.11950000000000038, -0.07449999999999868, -0.03799999999999848, 0.011000000000001009, 0.030249999999998778], zp_timestamp='2025-12-04T01:05:00')
2025-12-04T03:08:27.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:08:27.492 [DEBUG] [Thread-128608] [transport.py] [_log()] starting thread (client mode): 0xa271cb20
2025-12-04T03:08:27.492 [DEBUG] [Thread-128608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:08:27.507 [DEBUG] [Thread-128608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:08:27.507 [INFO] [Thread-128608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] client lang: <none>
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] server lang: <none>
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] kex follows: False
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] Compression: none
2025-12-04T03:08:27.515 [DEBUG] [Thread-128608] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:08:27.573 [DEBUG] [Thread-128608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:08:27.573 [DEBUG] [Thread-128608] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:08:27.573 [DEBUG] [Thread-128608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-12-04T03:08:27.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-12-04T03:08:27.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:08:27.631 [DEBUG] [Thread-128608] [transport.py] [_log()] userauth is OK
2025-12-04T03:08:27.631 [DEBUG] [Thread-128608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:08:27.631 [DEBUG] [Thread-128608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:08:27.631 [DEBUG] [Thread-128608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-12-04T03:08:27.631 [DEBUG] [Thread-128608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:08:27.656 [INFO] [Thread-128608] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:08:27.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-12-04T03:08:27.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:08:28.506 [DEBUG] [Thread-128608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:08:28.507 [DEBUG] [Thread-128608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:08:28.555 [DEBUG] [Thread-128608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:08:28.555 [DEBUG] [Thread-128608] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:08:28.564 [DEBUG] [Thread-128608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:08:28.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:08:28.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-12-04T03:08:28.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-12-04T03:08:28.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:08:28.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:08:28.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:08:28.598 [DEBUG] [Thread-128608] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:08:31.829 [DEBUG] [Thread-128610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:34.221 [DEBUG] [Thread-128611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:42.572 [DEBUG] [Thread-6138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:46.878 [DEBUG] [Thread-128612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-12-04T03:08:58.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-12-04T03:08:58.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-12-04T03:08:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-12-04T03:08:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 12, 4, 3, 8, 47), 10.43, 49.09, 0.0, 14.98, 12.3, 0, 0, 0, 2, 0, 0),)
2025-12-04T03:08:59.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-12-04 03:08:47
2025-12-04T03:08:59.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-12-04T03:08:59.547 [DEBUG] [Thread-128613] [transport.py] [_log()] starting thread (client mode): 0xa271dc00
2025-12-04T03:08:59.547 [DEBUG] [Thread-128613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:08:59.568 [DEBUG] [Thread-128613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-12-04T03:08:59.568 [INFO] [Thread-128613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] === Key exchange possibilities ===
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] client lang: <none>
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] server lang: <none>
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] kex follows: False
2025-12-04T03:08:59.571 [DEBUG] [Thread-128613] [transport.py] [_log()] === Key exchange agreements ===
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] Cipher: aes128-ctr
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] Compression: none
2025-12-04T03:08:59.572 [DEBUG] [Thread-128613] [transport.py] [_log()] === End of kex handshake ===
2025-12-04T03:08:59.589 [DEBUG] [Thread-128613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-12-04T03:08:59.590 [DEBUG] [Thread-128613] [transport.py] [_log()] Switch to new keys ...
2025-12-04T03:08:59.590 [DEBUG] [Thread-128613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-12-04T03:08:59.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-12-04T03:08:59.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-12-04T03:08:59.592 [DEBUG] [Thread-128613] [transport.py] [_log()] userauth is OK
2025-12-04T03:08:59.592 [DEBUG] [Thread-128613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-12-04T03:08:59.592 [DEBUG] [Thread-128613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-12-04T03:08:59.592 [DEBUG] [Thread-128613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-12-04T03:08:59.593 [DEBUG] [Thread-128613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-12-04T03:08:59.617 [INFO] [Thread-128613] [transport.py] [_log()] Authentication (publickey) successful!
2025-12-04T03:08:59.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-12-04T03:09:00.241 [DEBUG] [Thread-128613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-12-04T03:09:00.241 [DEBUG] [Thread-128613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-12-04T03:09:00.242 [DEBUG] [Thread-128613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-12-04T03:09:00.282 [DEBUG] [Thread-128613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-12-04T03:09:00.282 [DEBUG] [Thread-128613] [transport.py] [_log()] Secsh channel 0 opened.
2025-12-04T03:09:00.293 [DEBUG] [Thread-128613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-12-04T03:09:00.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-12-04T03:09:00.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-12-04T03:09:00.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-12-04T03:09:00.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-12-04T03:09:00.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-12-04T03:09:00.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-12-04T03:09:00.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-12-04T03:09:00.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-12-04T03:09:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-12-04T03:09:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61013.047266 -999.00  +12.50   9.45     53   +3.20 1 1 1 1 1     0    0 10.08 38.90 ZNESW 8.8 9.4 142.0 12.1 12.7 -24.5 12.7 -24.1 12.4 -22.4 12.7 -23.3
2025-12-04T03:09:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-12-04T03:09:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-12-04T03:09:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61013.047266
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-12-04T03:09:00.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-12-04T03:08:47', tmtdew=10.43, humidity=49.09, cloud=0.0, wind=14.98, temperature=12.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-12-04T03:08:47', seeing=1.68, atlas_timestamp='2025-12-04T01:08:03.782', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, -0.042749999999999844, 0.03325000000000067, -0.05050000000000132, 0.057500000000000995, -0.05174999999999841, -0.012000000000000455, 0.00975000000000037, -0.031000000000000583, -0.022999999999999687, -0.06975000000000087, 0.02200000000000024, 0.027999999999998693, 0.020749999999997826, -0.04499999999999993, -0.04800000000000004, 0.028249999999999886, 0.05550000000000033, -0.0470000000000006, 0.0012499999999988631, 0.028499999999997527, -0.015250000000001762, 0.0022500000000000853, -0.01025000000000098, 0.054999999999999716, 0.07150000000000034, -0.019249999999999545, 0.01750000000000007, 0.11950000000000038, -0.07449999999999868, -0.03799999999999848, 0.011000000000001009, 0.030249999999998778], zp_timestamp='2025-12-04T01:05:00')
2025-12-04T03:09:00.317 [DEBUG] [Thread-128613] [transport.py] [_log()] EOF in transport thread
2025-12-04T03:09:00.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-12-04T03:09:00.413 [DEBUG] [Thread-128616] [transport.py] [_log()] starting thread (client mode): 0xa2709930
2025-12-04T03:09:00.413 [DEBUG] [Thread-128616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-12-04T03:09:00.428 [DEBUG] [Thread-128616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-12-04T03:09:00.428 [INFO] [Thread-128616] [transport.py] [_log()] Connec
[file cut: first 33554432 bytes kept]
[document cut: first 32644166 of 33554432 characters kept]
